텍스트 및 일상 도구 · 비밀번호 생성기
PRNG 대 CSPRNG: 브라우저의 임의의 숫자가 실제로 어디에서 오는지
· 배경
비밀번호 웹 암호화폐 csprng
의사 난수 생성기와 암호화 보안 생성기의 차이점, 운영 체제가 하드웨어 이벤트에서 엔트로피를 수집하는 방법, 해당 무작위성이 Web Crypto API를 통해 웹 페이지에 도달하는 방법을 설명합니다.
컴퓨터는 결정적입니다. 그렇다면 무작위성은 어디에서 오는 것입니까? — 모든 발전기 뒤에 있는 기본 퍼즐
ToolAcre에서 실행되는 JavaScript는 API 경계에서 시작됩니다. `crypto.getRandomValues`에서 바이트를 요청하고 해당 호출이 성공하는지 관찰하고 반환된 배열을 사용할 수 있습니다. 특정 플랫폼에서 사용할 수 있는 모든 물리적 이벤트, 커널 풀 또는 하드웨어 구성 요소를 검사할 수는 없습니다. 따라서 무작위성에 대한 통합 문서의 기원 이야기는 지역적 증거를 초과합니다.
관찰이 시작되는 곳에서 기술적으로 정직한 설명이 시작됩니다. 앱은 Web Crypto를 조사하고, 엔진은 이를 래핑하며, 모든 선택 사항은 해당 소스를 사용합니다. 플랫폼별 내부에는 브라우저 메서드 이름에서 유추되는 일반적인 설명이 아닌 플랫폼 문서화 및 감사가 필요합니다.
저장소는 브라우저 API에서 시작됩니다. 물리적 엔트로피 소스를 감사하지 않습니다.
의사 난수 생성기는 종종 시드 및 재현 가능한 상태로 설명되지만 이 저장소에서는 하나의 Math.random 디자인을 공유하기 위해 JavaScript 엔진이 필요하지 않습니다. ToolAcre는 자격 증명 생성에서 API를 완전히 금지하여 모호성을 방지합니다. 소스 스캔은 부정적인 보장을 시행합니다.
테스트에는 여전히 결정적 바이트가 필요하므로 내부 매개변수를 통해 `getRandomValues`을 노출하는 개체를 주입합니다. 이러한 가짜는 테스트 지원에 존재하며 시드 생산 모드로 내보내지지 않습니다. 테스트 가능성은 반복 가능한 비밀번호에 대해 숨겨진 사용자 옵션을 생성하지 않습니다.
Math.random은 하나의 범용 PRNG 디자인을 주장하지 않고서는 여기서 금지됩니다.
제품은 범위가 지정된 방식으로 "암호화"를 사용합니다. 필요한 브라우저 인터페이스는 Web Crypto이며, 생성이 없거나 사용할 수 없는 경우 생성이 실패합니다. 앱은 유형만 확인하는 대신 검색 중에 메서드를 호출하여 호출이 발생하는 제한된 환경을 포착합니다.
해당 계약은 모든 가상의 상태 손상에 대한 저항을 약속하거나 브라우저 구현을 인증하지 않습니다. 이는 페이지가 어떤 API를 요청하는지, 그리고 더 약한 폴백이 함께 연결되어 있지 않음을 증명합니다. 장치 무결성은 생성기 외부에 유지됩니다.
확인된 암호화 속성은 필수 웹 암호화 소스 및 거부 경로입니다.
타이밍 이벤트, 전용 프로세서 명령, 재시드 일정 및 운영 체제 엔트로피 풀은 모두 Web API 표면 아래에 있습니다. 패키지 소스에서 이를 확인할 수 없기 때문에 여기서는 아무것도 주장되지 않습니다. 향후 플랫폼별 문서에는 설명하는 각 환경에 대한 기본 문서가 필요합니다.
누락으로 인해 현재 주장이 약화되기는커녕 오히려 강화됩니다. ToolAcre는 브라우저에 요청하는 작업과 바이트를 처리하는 방법을 정확하게 말할 수 있습니다. Math.random 거부를 정당화하기 위해 JavaScript가 전체 엔트로피 체인을 감사할 수 있는 척할 필요는 없습니다.
하드웨어 이벤트 및 운영 체제 풀 세부 정보는 이 소스가 입증하지 않은 구현 주장입니다.
`getRandomValues`는 요청된 배타적 범위에서 크기가 지정된 `Uint8Array`을 채웁니다. `secureRandomInt`는 해당 바이트를 부호 없는 빅엔디안 숫자로 조합하고, 나눌 수 있는 가장 큰 허용 창을 계산하고 나머지 값을 삭제합니다. 그런 다음 허용된 값은 인덱스로 축소됩니다.
단어, 구분 기호, 문자 및 셔플 스왑은 모두 이 경로를 재사용합니다. 단일 초크 포인트는 브라우저 선택 체인을 검토 가능하게 만들고 제한된 축소 수정이 잊혀진 호출자 하나가 아닌 모든 생성 모드에 영향을 미치도록 보장합니다.
getRandomValues에서 secureRandomInt까지: 표시되는 브라우저-인덱스 경로
7,776 단어 풀의 경우 함수는 모든 유효한 인덱스를 나타내는 데 충분한 바이트를 선택합니다. 정수를 형성하고 계산된 한계 이상의 값을 거부하고 승인 후에만 나머지를 반환합니다. `secureRandomChoice`은 해당 결과를 사용하여 적합한 배열에서 한 단어를 읽습니다.
특정 생산 색인은 비공개이므로 문서에서 재현해서는 안 됩니다. 대신 결정적 테스트에서는 제어 흐름을 입증하기 위해 알려진 테일 및 범위 내 바이트를 제공합니다. 이는 생성된 문구를 공개 예제로 바꾸지 않고 하나의 선택을 추적합니다.
작업 예: 거부 샘플링을 통해 하나의 목록 인덱스로 바이트 추적
하드웨어 난수 생성기 설계 및 공식적인 암호화 증명은 패키지에 포함되지 않습니다. 서버 런타임이나 기본 애플리케이션도 마찬가지입니다. 구현은 브라우저 생성기이며 해당 보장은 관련 없는 시스템에 복사되어서는 안 됩니다.
또한 저장이나 나중에 사용하는 문제도 다루지 않습니다. Web Crypto를 통해 선택된 값은 재사용, 피싱, 클립보드 기록 또는 악성 코드에 의해 여전히 노출될 수 있습니다. CSPRNG 선택은 모든 자격 증명 처리 문제가 아니라 소스 문제를 해결합니다.
요점 — 비밀번호 생성기는 브라우저의 암호화 생성기에 비밀의 올바른 소스를 묻습니다.
실행 가능한 체인은 짧습니다. Web Crypto가 작동하는지 테스트하고, 작동하지 않으면 생성을 거부하고, 바이트를 채우고, 고르지 않은 꼬리를 거부하고, 허용된 값을 인덱스에 매핑합니다. ToolAcre는 각 단계를 가시화하고 어려운 경계를 테스트합니다.
모호한 "임의" 라벨에 의존하는 대신 해당 체인을 검토하세요. 그런 다음 끝점과 대상을 별도로 검토합니다. 브라우저의 암호화 API는 이 제품의 올바른 소스이지만 저장소는 그 아래에 있는 내용이나 뒤따르는 모든 것을 인증한다고 주장하지 않습니다.