한국어

텍스트 및 일상 도구 · 비밀번호 생성기

crypto.getRandomValues vs Math.random: 비밀번호에 중요한 이유

· 작동 방식

비밀번호 웹 암호화폐 무작위성

웹 암호화 경로가 비밀번호 기호로 계속되는 동안 끝나는 약한 임의 경로
원본 ToolAcre 벡터 일러스트레이션

브라우저의 범용 난수 생성기와 암호화 생성기의 차이점, 비밀번호 예측 가능성이 치명적인 이유, 그리고 어떤 도구가 사용되는지 확인하는 방법을 설명합니다.

비밀번호가 아닌 주사위 게임에 충분한 무작위성 — 브라우저가 제공하는 두 가지 종류의 무작위성

브라우저는 불규칙해 보이는 값의 소스를 두 개 이상 제공할 수 있지만 시각적 장애가 있다고 해서 시퀀스가 자격 증명에 적합하다는 증거는 아닙니다. ToolAcre는 엄격한 제품 경계를 그립니다. 모든 단어 선택, 구분 기호 선택, 문자 선택 및 셔플 스왑은 `crypto.getRandomValues`가 지원하는 하나의 보안 정수 함수를 통과합니다. 해당 API를 사용할 수 없는 경우 페이지에서는 그럴듯해 보이는 대체 항목을 생성하는 대신 생성을 비활성화합니다.

이러한 거부는 두 샘플 출력이 똑같이 뒤죽박죽으로 나타나는지 여부보다 더 중요합니다. 예측 가능한 소스는 사람에게 설득력 있게 보이는 문자, 숫자 및 단어를 인쇄할 수 있습니다. 따라서 구현을 통해 소스를 감사할 수 있고 오류가 표시됩니다. 생성된 값이 모든 환경에서 안전하다고 주장하는 것은 아닙니다. 손상된 브라우저나 장치는 페이지에 표시되는 내용을 계속 읽을 수 있습니다.

Math.random의 용도 — 몇 가지 관찰을 통해 출력을 재구성할 수 있는 빠르고 시드된 의사 무작위성

통합 문서에서는 Math.random을 몇 가지 관찰을 통해 재구성할 수 있는 시드 의사 무작위성으로 설명하지만 이는 이 저장소가 모든 JavaScript 엔진에 대해 설정하지 않는 일반적인 구현 주장입니다. 이 제품의 로컬 사실은 더 간단하고 강력합니다. 프로덕션 생성기 파일은 `Math.random`을 호출하지 않습니다. 소스 수준 테스트는 주석을 제거하고 실행 가능한 코드를 검사하며 그러한 호출이 엔진 또는 비밀번호 앱의 어느 곳에나 나타나면 실패합니다.

이러한 구별은 기사에서 구현 규칙을 보편적인 브라우저 역사 강의로 바꾸는 것을 방지합니다. ToolAcre는 비밀번호 생성을 위한 API를 거부하기 위해 가능한 모든 Math.random 알고리즘을 특성화할 필요가 없습니다. 해당 패키지는 Web Crypto 또는 테스트에 사용되는 주입된 보안 소스를 허용하며 시드, 결정적 모드 또는 약한 폴백에 대한 생산 옵션을 노출하지 않습니다.

이 저장소가 Math.random에 대해 증명하는 것: 프로덕션 생성에는 없습니다.

`createWebCryptoSource`는 호출 가능한 `getRandomValues`을 찾은 다음 해당 메서드를 패키지 무작위 소스로 래핑합니다. 애플리케이션은 컨트롤을 활성화하기 전에 추가 조사를 수행합니다. 이는 전역 암호화 개체에 try 블록 내부의 단일 요소 형식 배열을 채우도록 요청합니다. 이는 피상적인 기능 검사를 신뢰하는 대신 속성이 존재하지만 사용 시 발생하는 제한된 환경을 포착합니다.

소스가 브라우저 API 경계에서 중지됩니다. 특정 브라우저 아래에 어떤 운영 체제 풀, 하드웨어 지침 또는 재시드 디자인이 있는지는 증명하지 않습니다. 이러한 세부 정보는 인터페이스 아래에 따라 다르며 플랫폼 문서가 필요합니다. 코드가 증명하는 것은 바이트가 명명된 Web Crypto 메서드를 통해 도착하고 프로브가 실패할 때 생성이 시도되지 않는다는 것입니다.

crypto.getRandomValues가 수행하는 작업: 브라우저 API를 통해 입력된 배열을 채웁니다.

자격 증명 생성기는 관찰자가 이전 출력에서 재현할 수 없는 새로운 선택을 해야 하기 때문에 예측 가능성은 위험합니다. ToolAcre는 결정론적 생산 경로를 거부하고 모든 추첨을 중앙 집중화하며 약한 API가 없는지 테스트함으로써 해당 목표를 지원합니다. 화면 캡처, 확장 프로그램, 맬웨어, 피싱, 비밀번호 재사용 또는 제출 후 자격 증명을 잘못 처리하는 서비스로부터의 면제를 약속하지 않습니다.

해당 경계는 일반적인 범주 오류를 방지합니다. 생성은 나중에 발생하는 모든 일이 아니라 후보자가 선택되는 방법을 다룹니다. 패키지는 문자열을 반환하며 이를 기록하거나 저장하지 않습니다. 페이지는 메모리에 하나의 현재 값을 보유하고 이를 텍스트로 렌더링합니다. 비밀번호 저장, 전송, 계정 복구 및 인증 정책은 여전히 ​​다른 시스템의 책임입니다.

코드 읽기 — 페이지가 어떤 API를 사용하는지 확인하는 방법, 열려 있고 검사 가능한 페이지가 더 신뢰하기 쉬운 이유

코드 읽기는 `packages/password-generator/src/index.js`에서 시작됩니다. 계약에 따르면 모든 무작위 결정은 `secureRandomInt`에 도달합니다. 그러면 구현 파일에 `getRandomValues`, 거부 샘플링 및 명시적 오류가 표시됩니다. 마지막으로 `no-math-random.test.js` 및 더 광범위한 비밀번호 보안 제품군은 "우리는 Math.random을 사용하지 않습니다"를 테스트되지 않은 주석으로 남겨두는 대신 부정적인 보장을 실행 가능하게 만듭니다.

오픈 소스만으로는 코드를 정확하게 만들 수는 없지만 검토자에게 검사할 구체적인 이음새를 제공합니다. 무작위 소스를 검색하고, 선택 및 섞기를 통해 호출자를 추적하고, API가 누락되면 어떤 일이 발생하는지 검사합니다. 신뢰할 수 있는 리뷰는 브랜딩에서 보안성을 추론하기보다는 성공 경로와 거부 경로를 모두 명명할 수 있어야 합니다.

작동된 예 — 양방향으로 작성된 동일한 단어 선택 루틴 및 공격자가 각 루틴으로 수행할 수 있는 작업

100 아래의 정수에 대한 요청을 고려하십시오. `secureRandomInt`에는 1바이트가 필요하며 해당 범위에는 256 값이 포함됩니다. 200 앞에서 끝나는 100으로 나눌 수 있는 가장 큰 접두사만 허용하고 나머지 꼬리는 거부합니다. 결정적 테스트는 200 바이트와 7 바이트를 제공합니다. 구현에서는 200을 삭제하고 7을 반환합니다. 직접 모듈로 단축키는 거부된 바이트에서 0을 반환했을 것입니다.

동일한 보안 정수 함수는 단어와 문자에 대한 인덱스를 선택하므로 이 예는 생성에서 분리된 장난감이 아닙니다. 프로덕션의 정확한 바이트는 반복 가능한 예가 아니므로 자격 증명으로 게시해서는 안 됩니다. 유용한 아티팩트는 제어 흐름 증명입니다. Web Crypto는 버퍼를 채우고 고르지 않은 꼬리는 거부되며 허용된 값만 제한된 선택이 됩니다.

작업된 예: 제공된 secureRandomInt 경로를 통해 하나의 제한된 추첨을 추적합니다.

이 저장소는 서버 측 생성기, 하드웨어 난수 생성기 또는 운영 체제 명령줄 도구를 구현하거나 비교하지 않습니다. 또한 JavaScript에서 브라우저 암호화 구현의 내부를 감사할 수 없습니다. 이러한 주제에는 ToolAcre 코드 경로에 붙여넣은 비유보다는 자체 소스 자료, 위협 모델 및 운영 검사가 필요합니다.

페이지도 비밀번호 관리자가 아닙니다. 생성된 내용을 저장, 동기화, 전송 또는 자동 완성하지 않습니다. 독자는 "암호화 무작위 소스"를 결과를 재사용하거나 안전하지 않은 채널을 통해 이동하라는 조언으로 해석해서는 안 됩니다. 소유권 주장은 현재 브라우저 탭 내에서 선택한 항목에만 속합니다.

요점 — 비밀번호 생성기는 브라우저의 암호화 난수 생성기를 사용하며 페이지 자체에서 이를 확인할 수 있습니다.

ToolAcre의 검증 가능한 선택은 암호화폐 또는 아무것도 아닙니다. 페이지는 지원 감지 중에 브라우저 API를 호출하고, 실패할 때 제어를 비활성화하고, 생성이 어떻게든 동일한 누락 조건에 도달하면 엔진이 `InsecureRandomError`을 발생시키도록 합니다. 두 브랜치 뒤에 숨겨진 Math.random 폴백은 없습니다.

생성기를 검토할 때 해당 패턴을 사용하십시오. 소스를 식별하고, 모든 경계 그리기를 추적하고, 축소 및 셔플링을 검사하고, 사용할 수 없는 소스 경로를 강제합니다. 그런 다음 장치와 대상을 별도로 평가합니다. 이 생성기의 작업에는 사운드 랜덤 소스가 필요하지만 자격 증명의 전체 수명 동안 범용 인증서는 아닙니다.