해시 생일 충돌 확률 근사 계산기 사용 안내
계산 과정
기본 입력값으로 계산하면 적어도 한 쌍 충돌할 확률 근사은(는) 1.4694e-25%입니다. 항목별 내역은 위 표에서 확인할 수 있습니다.
결과가 실제와 달라지는 경우
- 결과식 n(n−1)/(2×2ᵇ)은 충돌 가능성이 충분히 작을 때 정확한 근사입니다. 표시가 10%나 100%에 가까워지면 쌍 사건이 서로 겹치므로 정확식 1−exp(−n(n−1)/(2×2ᵇ))과 차이가 커집니다.
- 해시 출력 256비트를 계산했어도 데이터베이스가 앞 64비트만 인덱스로 저장하면 실제 충돌 공간은 64비트입니다. 전체 알고리즘 이름이 아니라 비교에 남기는 비트를 입력해야 합니다.
- 입력이 공격자에게 선택되고 MD5나 SHA-1처럼 실용적 충돌 공격이 알려진 함수라면 균등 무작위 생일 모델로 안전성을 판단할 수 없습니다. 이 계산은 암호분석 약점이나 선택 접두사 충돌 비용을 포함하지 않습니다.
- 테넌트마다 서로 다른 네임스페이스를 사용해 충돌을 별도로 처리하면 전체 고객 항목 수를 한 공간에 넣는 것과 위험이 다릅니다. 실제로 동등성 비교가 이루어지는 최대 집합의 크기를 사용하세요.
- 충돌을 발견했을 때 원문까지 비교해 구분하는 시스템은 가용성 비용만 생길 수 있지만, 해시만으로 파일을 신뢰하거나 권한을 부여하면 동일 확률도 보안 영향이 커집니다. 결과는 발생 가능성이지 피해 규모가 아닙니다.
알아두면 좋은 기준
- 생일 효과 때문에 충돌이 눈에 띄는 항목 수는 해시 공간 2ᵇ 자체가 아니라 대략 그 제곱근인 2^(b/2) 규모입니다. 64비트 축약값은 약 2³²개 항목 부근부터 충돌 검토가 중요해집니다.
- 100만 개 항목에는 약 4,999억 9,500만 쌍이 있습니다. 항목 수가 2배가 되면 쌍은 거의 4배가 되어 충돌 근사치도 거의 4배로 증가합니다.
- 우연 충돌 저항과 특정 입력의 원상 저항은 다른 성질입니다. b비트 이상적 해시의 일반 충돌 탐색은 약 2^(b/2), 특정 다이제스트의 원상 탐색은 약 2ᵇ 작업을 기준으로 비교합니다.
- 충돌이 허용되지 않는 식별자는 해시만 저장하지 말고 원본 키 비교, 충돌 시 재시도, 더 긴 다이제스트 같은 처리 절차를 마련해야 합니다. 확률이 낮다는 사실은 충돌 처리 로직을 대신하지 않습니다.
자주 묻는 질문
SHA-256을 128비트로 잘라 써도 입력은 256인가요?
아닙니다. 충돌 판정에 앞 128비트만 사용한다면 128을 넣습니다. 원본 256비트를 별도로 저장해 충돌 시 재검증한다면 128비트 인덱스 충돌과 256비트 최종 오판을 나누어 평가해야 합니다.
결과가 100%이면 반드시 충돌이 정확히 하나 생기나요?
이 도구는 큰 근사치를 100%로 제한해 표시하므로 그런 뜻이 아닙니다. 높은 밀도에서는 충돌 쌍이 여러 개일 수 있고 근사식 자체도 정확식을 벗어납니다. 더 긴 해시로 바꾸거나 정확한 통계 모델을 사용하세요.
중복 파일 찾기에 해시만 비교해도 되나요?
후보를 빠르게 좁히는 데는 쓸 수 있지만 삭제처럼 되돌리기 어려운 작업 전에는 파일 크기와 원문 바이트를 다시 비교하는 편이 안전합니다. 특히 짧게 자른 해시나 비암호학적 체크섬은 최종 동일성 증거로 삼지 마세요.