비밀번호 도구 생성기로 돌아가기

보안 가이드

Math.random이 비밀번호에 안전하지 않은 이유

Math.random이 UI 효과에는 적합하지만 비밀번호, 재설정 코드, 토큰 및 기타 보안에 민감한 비밀에는 적합하지 않은 이유를 알아보세요.

요약

Math.random()는 일반적인 JavaScript 의사 난수 함수입니다. 애니메이션, 무작위 UI 동작, 예제, 게임 및 시뮬레이션에 유용합니다. 암호화 보안을 위해 명시되지 않았으며 비밀번호, 재설정 코드, API 비밀, 서명 키 또는 복구 토큰을 생성하는 데 사용해서는 안 됩니다.

문제

비밀번호 생성기는 사용자에게 다양해 보이는 값이 아니라 공격자에 대한 예측 불가능성이 필요합니다. Math.random()는 브라우저 표준 암호화 보안 보장을 제공하지 않으며, 구현은 엔진마다 다를 수 있습니다.

더 안전한 브라우저 옵션

최신 브라우저는 Web Crypto API를 통해 crypto.getRandomValues()를 제공합니다. PwdGen은 해당 인터페이스와 리젝션 샘플링을 사용하여 편향된 문자 선택을 방지합니다. 해당 API를 사용할 수 없는 경우 안전한 동작은 생성을 중단하고 호환성 요구 사항을 설명하는 것입니다.

생성기 검토 방법

소스에서 Math.random를 검색하세요. 진지한 비밀번호 생성기는 비밀번호 문자에 이를 사용해서는 안 됩니다. 왜 안전하지 않은지 설명하는 문서에는 나타날 수 있지만 생성 경로에는 나타나지 않아야 합니다.

상세 지침

이 가이드는 Math.random이 비밀번호와 비밀에 부적합한 이유에 초점을 맞춥니다. 개발자, 학생, 도구 사용자가 생성기가 안전한 난수를 사용하는지 확인하기 위해 작성되었으므로 실용적인 목표는 극적인 보안 주장을 만드는 것이 아닙니다. 목표는 일상적인 사용에서 생존할 수 있는 비밀번호 습관을 선택하는 것입니다: 로그인 양식, 비밀번호 관리자, 모바일 키보드, 계정 복구, 공유 기기, 가끔 이상한 유효성 검사 규칙이 있는 서비스. 실제 사람이 일관되게 따를 수 있을 때만 안전한 권장 사항이 유용합니다.

가장 안전한 출발점은 무작위성과 고유성입니다. 무작위성은 값이 생일, 애완동물 이름, 키보드 패턴 또는 좋아하는 인용문에서 발명된 것이 아니라 암호학적으로 적합한 난수 소스에 의해 큰 공간에서 선택됨을 의미합니다. 고유성은 동일한 비밀번호가 다른 곳에서 사용되지 않음을 의미합니다. 길지만 재사용된 비밀번호는 관련 없는 유출 후 빠르게 실패할 수 있는 반면, 고유한 무작위 비밀번호는 사용된 단일 계정으로 피해를 제한합니다.

이 주제의 경우 실용적인 프리셋은 Math.random 대신 crypto.getRandomValues와 리젝션 샘플링입니다. Web Crypto API 가이드를 사용하여 해당 프리셋을 적용한 다음 최종 값을 신뢰할 수 있는 비밀번호 관리자에 저장할 수 있습니다. PwdGen은 Web Crypto를 사용하여 브라우저에서 로컬로 값을 생성합니다. 생성된 비밀번호는 PwdGen 서버로 전송되지 않습니다. 이러한 로컬 설계는 서버 측 노출을 줄이지만 모든 위협으로부터 보호하지는 않습니다. 악성 브라우저 확장 프로그램, 손상된 장치, 피싱 페이지 또는 안전하지 않은 클립보드 처리는 생성 후에도 비밀을 노출시킬 수 있습니다.

피해야 할 가장 일반적인 문제는 예측 가능한 의사 난수 시퀀스, 모듈로 편향, 사용자 정의 난수 함수 및 프로덕션에 복사된 데모 코드입니다. 이러한 문제는 공격자가 인간의 습관이 지름길을 제공할 때 모든 가능한 비밀번호를 무차별 대입할 필요가 거의 없기 때문에 중요합니다. 크리덴셜 스터핑, 피싱, 유출된 비밀번호 목록 및 계정 복구 남용은 종종 순수 수학적 검색보다 더 현실적입니다. 그렇기 때문에 최고의 조언은 비밀번호 품질을 MFA, 패스키, 복구 코드 저장 및 복구 이메일 또는 전화 설정의 정기적인 검토와 같은 계정 수준 제어와 결합하는 것입니다.

권장 사항을 적용할 때 이 체크리스트를 사용하세요:

웹사이트가 이상적인 설정을 거부하는 경우 수동으로 비밀번호를 더 약한 패턴으로 강제하지 마세요. 한 번에 하나의 변수를 조정하세요. 기호가 거부되면 대문자, 소문자 및 숫자를 활성화하고 길이를 늘리세요. 최대 길이가 짧으면 허용된 가장 큰 길이를 사용하고 값이 고유한지 확인하세요. 비밀번호를 소리 내어 읽거나, 인쇄하거나, TV 또는 라우터 화면에 입력해야 하는 경우 혼동되는 문자를 제외하고 더 작은 알파벳을 보상하기 위해 길이를 늘리는 것을 고려하세요.

마지막으로, 비밀번호 조언의 경계를 기억하세요. 강력한 비밀번호는 하나의 방어 계층이지 보장이 아닙니다. 피싱 페이지를 안전하게 만들거나, 맬웨어를 수정하거나, 자격 증명을 제대로 저장하지 않는 서비스를 보상할 수 없습니다. 유용한 습관은 지루하지만 내구성이 있습니다: 고유한 값을 생성하고, 안전하게 저장하고, 복구 경로를 보호하고, 노출이 의심되면 신속하게 교체하세요.

안전한 다음 단계

이 가이드를 읽은 후 한 번에 모든 것을 수정하려고 하지 말고 작은 계정 감사를 하나 수행하세요. 탈취 시 가장 큰 문제를 일으킬 계정을 선택하고, 비밀번호가 고유한지 확인하고, 복구 이메일, 복구 전화, MFA 방법 및 백업 코드 저장을 확인하세요. 해당 체인의 어느 부분이 약하면 위험이 낮은 계정으로 이동하기 전에 해당 부분을 개선하세요. 이 순서는 작업을 관리 가능하게 유지하고 공격자가 발판으로 사용할 가능성이 가장 높은 계정을 보호합니다. math.random이 비밀번호에 안전하지 않은 이유에 대한 최상의 결과는 반복 가능한 습관입니다: 로컬에서 생성하고, 신중하게 저장하고, 재사용을 피하세요.

자주 묻는 질문

Math.random이 괜찮은 경우가 있나요?

예, 시각 효과, 시뮬레이션 및 일반 UI 무작위성에는 괜찮지만 자격 증명이나 보안 토큰에는 사용하지 마세요.

비밀번호 생성기는 대신 무엇을 사용해야 하나요?

브라우저에서 crypto.getRandomValues()와 같은 암호화 난수 소스를 사용해야 합니다.

PwdGen이 Math.random으로 폴백하나요?

아니요. Web Crypto를 사용할 수 없는 경우 PwdGen은 호환성 경고를 표시하고 Math.random()로 비밀번호를 생성하지 않습니다.

출처