한국어

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

모듈로 편향 설명: 편향 없이 목록에서 임의의 단어 선택

· 작동 방식

비밀번호 무작위성 암호화

꼬리를 거부한 후 생성된 짝수 세트 옆의 짝수 번호가 없는 버킷
원본 ToolAcre 벡터 일러스트레이션

범위가 균등하게 나누어지지 않을 때 '난수 모듈로 목록 길이'가 일부 단어를 다른 단어보다 선호하는 이유, 왜곡의 크기, 거부 샘플링을 통해 이를 제거하는 방법을 보여줍니다.

공정한 주사위와 불공평한 지름길 - 난수 모듈로 7,776을 취하는 것이 주사위를 굴리는 것과 같지 않은 이유

공정한 소스는 여전히 불공정한 선택 루틴을 제공할 수 있습니다. 프로그램이 정수를 읽고 목록 길이로 나눈 후 즉시 나머지를 가져오는 경우 일부 인덱스는 소스 범위가 해당 길이로 정확하게 나누어지지 않을 때마다 더 많은 소스 값을 받습니다. 결함은 감소 단계에 있으며 반드시 바이트에 있는 것은 아닙니다. ToolAcre는 EFF 단어를 선택하기 전에 해당 단축키를 피합니다.

물리적 주사위는 전체 결과 그룹이 균등하게 매핑되는 경우에만 직관적인 비교를 제공합니다. 브라우저 구현에는 원시 범위가 다르기 때문에 요청된 범위에 대한 승인 창을 계산합니다. 이 기사에서는 브라우저 바이트가 문자 그대로 5개의 주사위를 재생산한다고 주장하기보다는 제공된 메커니즘에 대해 논의합니다. 둘 다 지수를 선택할 수 있지만 절차와 감사 증거는 서로 다릅니다.

편향이 발생하는 곳 — 32비트 값은 7,776 버킷으로 균등하게 나누어지지 않으므로 처음 몇 단어는 한 번의 추가 기회를 얻습니다.

1바이트 및 경계가 100인 경우 원시 범위에는 256 가능한 값이 있습니다. 100의 두 개의 완전한 그룹이 적합하고 56 값은 남습니다. 모든 바이트를 모듈로 100 줄이면 인덱스 0부터 55까지 각각 3개의 사전 이미지가 제공되는 반면, 56부터 99까지의 인덱스는 2개만 받습니다. 입력 바이트는 균일할 수 있지만 선택한 버킷 분포는 균일하지 않습니다.

구현 주석은 또한 2바이트가 직접 줄어들 때 7,776 항목 목록에 대한 해당 유한 범위 문제를 파생시킵니다. 이러한 수치는 가정된 공격 속도가 아니라 소스에 명명된 실제 범위에서 나온 것입니다. 중요한 검토 질문은 생성된 소수의 문구에서 왜곡이 작게 보이는지 여부가 아니라 남은 값이 사용되는지 여부입니다.

효과의 크기 — 큰 무작위 범위에서는 작지만 0이 아니며 암호화 코드가 이를 허용하지 않는 이유

결정론적 테스트를 통해 고르지 않은 꼬리를 관찰할 수 있습니다. 3, 5, 7, 100 및 7,776 경계는 의도적으로 어색한 반면, 2의 거듭제곱 경계는 거부가 없는 경우를 보여줍니다. 또 다른 통계 제어에서는 올바른 기능과 순진한 모듈로 도우미를 위해 동일한 웹 암호화 소스를 사용하므로 테스트에서는 엔트로피 소스를 비난하기보다는 감소 전략을 분리합니다.

ToolAcre는 이러한 배포 확인을 크랙 타임 예측으로 변환하지 않습니다. 편향은 균일성을 감소시키지만 이러한 감소를 특정 공격자의 비용으로 전환하려면 완전한 위협 모델이 필요합니다. 엔지니어링 요구 사항은 더 깔끔합니다. 모든 적격 인덱스에는 동일한 수의 허용된 원시 값이 있어야 하며 코드는 이를 정확하게 적용할 수 있습니다.

구현 의견 및 결정론적 테스트에서 확인된 왜곡 예

`secureRandomInt`는 가장 높은 유효 인덱스를 나타낼 수 있는 가장 작은 전체 바이트 수를 찾습니다. 바이트 범위를 계산하고 경계로 나눈 후 나머지를 빼고 결과를 `limit`이라고 합니다. 해당 제한 아래의 값은 전체 그룹에 속합니다. 그 이상의 값은 모듈로 연산 실행이 허용되기 전에 삭제됩니다.

거부될 때마다 새로운 추첨이 이루어집니다. 루프에는 고정된 천장이 높으므로 주입된 소스가 파손되어도 탭이 영원히 매달릴 수 없습니다. 범위를 벗어난 값이 반복되면 편향된 답변을 반환하는 대신 오류가 발생합니다. 이 실패 경로는 정확성의 일부입니다. 의심스러운 소스를 거부하면 반환된 인덱스가 균일한 승인 창에서 나왔다는 약속이 유지됩니다.

대안 — 정확하게 충분한 비트를 뽑고 범위를 벗어난 값을 삭제하거나 라이브러리의 균일 정수 함수 사용

다른 균일 정수 디자인이 가능하지만 이는 이 패키지의 동작이 아니므로 상호 교환 가능한 ToolAcre 옵션으로 제공되지 않습니다. 엔진은 하나의 감사 경로를 노출합니다. `secureRandomChoice`는 입력이 비어 있지 않은 배열인지 확인하고 `secureRandomInt(items.length)`에 위임하여 단어 선택을 제한된 정수 계약의 직접적인 소비자로 만듭니다.

무작위 비밀번호 생성기는 문자에 대해 동일한 경로를 사용한 다음 보안 경계 스왑에 의해 구동되는 Fisher-Yates 셔플을 호출합니다. 무작위 비교기와 함께 `sort`을 사용하지 않습니다. 여러 기능 아래에 하나의 기본 요소를 유지하면 소스 검토가 다루기 쉬워집니다. 균일 축소를 한 번 수정하거나 테스트한 다음 호출자를 따릅니다.

대체 디자인은 이 모듈 외부에 있습니다. 배송된 경로는 거부 샘플링을 사용합니다.

바운드-100 회귀 테스트는 200부터 255까지 모든 꼬리 바이트를 제공한 다음 최종 42을 제공합니다. 올바른 코드는 42에서 거부된 모든 56 바이트와 답변을 사용합니다. 두 번째 집중 케이스는 200 및 7을 제공합니다. 200 모듈로 100은 0이 되기 때문에 7을 반환하면 첫 번째 바이트가 조용히 줄어들지 않고 거부되었음을 증명합니다.

이 작업 예제는 설계상 결정론적이며 자격 증명을 포함하지 않습니다. 생산 바이트는 브라우저 호출에 대해 비공개로 유지되며 기록되지 않습니다. 테스트 소스는 경계에서 동작을 강제할 수 있도록 주입 가능합니다. 공개 패키지는 생성된 암호 문구를 재현할 수 있는 프로덕션 시드 모드를 제공하지 않습니다.

작업 예: 바운드 100은 바이트 200을 거부하고 다음 7을 허용합니다.

부동 소수점 무작위 감소, 라이브러리별 균일 API 및 관련 없는 셔플링 알고리즘은 이 구현에 포함되지 않습니다. 이를 평가하려면 소스와 계약이 필요합니다. ToolAcre의 코드는 정수 기반이고 명시적으로 제한되어 있으므로 대안에 대한 설문조사를 추가하면 테스트에서 실제로 증명하는 좁은 주장이 흐려집니다.

또한 이 기사에서는 균일하게 생성된 비밀번호가 모든 정책이나 장치에 적합하다고 추론하지 않습니다. 균일한 인덱스 선택은 하나의 메커니즘을 다룹니다. 모든 목록 요소에 동일한 선택 기회가 있는 경우에도 저장, 재사용, 클립보드 처리, 맬웨어 및 대상 제약 조건은 별도의 질문으로 남아 있습니다.

요점 — 암호 생성기는 단어를 균일하게 선택해야 합니다. 비밀번호 생성기가 어떻게 작동하는지 도구의 기술 노트를 확인하세요.

암호 생성기는 원시 범위가 나머지를 남긴다는 이유만으로 초기 항목을 선호해서는 안 됩니다. ToolAcre는 Web Crypto에서 바이트를 가져와 불완전한 꼬리를 거부하고 완전한 동일한 크기의 그룹 내의 값만 줄입니다. 테스트는 거부 및 승인 경계를 모두 강제하므로 주장은 출력의 육안 검사를 기반으로 하지 않습니다.

유사한 코드를 검토할 때 선택한 바이트 너비에 대한 원시 범위를 계산하고 이를 요청된 범위로 나누고 버려진 나머지를 찾습니다. 꼬리가 거부되지 않으면 또 다른 균일성 증명을 요구합니다. 단어 목록은 공개되고 소스는 암호화될 수 있지만 부주의하게 축소하면 피할 수 있는 왜곡이 발생합니다.