문제

이것은 기본적으로 수학 문제이지만,매우 프로그래밍과 관련된:가 있는 경우 1 억 문자열을 포함하는 Url,그리고 제가 여러분 첫 번째는 64 비트의 MD5 해쉬의 그들 각각은 어떤 종류의 충돌 주파수해야 하는지요?

어떻게 응답을 변경하는 경우 나만에 100 만 Url?

내가 보기에는 충돌이 될 것이 매우 드문 일이지만,이러한 일을하는 경향이 혼란스럽습니다.

의 것 나 아닌 다른 시스템을 사용하는 MD5?당신이 마음,내가 찾는 게 아니에요,보안을 위해 그냥 좋은 빠른 해쉬 기능입니다.또한,기본 지원 MySQL 은 좋은 것입니다.

편집: 지 매우 중복

도움이 되었습니까?

해결책

는 경우 첫 번째는 64 비트의 MD5 구성되어 있는 해시 이상적인 분포,생일을 역설 여전히 뜻을 얻을 충돌에 대한 모든 2^32URL's.즉,확률의 충돌이 수 URL 로 나누어 4,294,967,296.보 http://en.wikipedia.org/wiki/Birthday_paradox#Cast_as_a_collision_problem 자세한 내용은.

I wouldn't 편안한 느낌을 그냥 버리고 반에서 비트 MD5;하는 것이 좋을 것입니다 XOR 높고 낮은 64 비트 단어들 기회를 섞는다.다시,MD5 로 빠르게 또는 안전하고,그래서 난지 않습니다.당신이 원하는 눈부신 속도 좋은 배포하지만,없는 핑계의 보안 시도할 수 있습니다 64 비트 버전의 MurmurHash.보 http://en.wikipedia.org/wiki/MurmurHash 자세한 내용 및 코드입니다.

다른 팁

당신은 이것을 "생일-파라 독"으로 태그했습니다. 이미 답을 알고 있습니다.

P(Collision) = 1 - (2^64)!/((2^64)^n (1 - n)!)

여기서 N은 귀하의 경우 10 억입니다.

MD5가 프레이션 담합 문제.

내가 보는 바에 따르면 다음 요구 사항이있는 해시 기능이 필요합니다.

  1. 해시 임의의 길이 문자열은 64 비트 값입니다
    • 잘 지내십시오 - 충돌을 피하십시오
    • 반드시 일방 통행 (보안이 필요하지 않음)
    • 바람직하게는 빠른-보안 비 보안 응용 프로그램에 필요한 특성입니다.

이것 해시 기능 조사 가장 적합한 기능으로 드릴 다운하는 데 유용 할 수 있습니다.
여기에서 여러 기능을 시도하고 입력 세트에 대해 특성화하는 것이 좋습니다 (볼 수있는 수십억 개의 URL을 선택하십시오).

실제로 생성 할 수 있습니다 이 테스트 설문 조사와 같은 다른 열 테스트 URL 목록이 확인하고 선택할 수있는 기존 또는 새로운 해시 함수 (해당 테이블의 더 많은 행)를 특성화하고 선택하려면 확인하십시오. 시작할 MSVC ++ 소스 코드가 있습니다.지퍼 링크에 대한 참조).

출력 폭 (64 비트)에 맞게 해시 기능을 변경하면 응용 프로그램에 대한보다 정확한 특성이 제공됩니다.

2^n 해시 가능성이있는 경우 2^(N/2) 항목이있을 때 충돌 확률이 50% 이상입니다.

예를 들어 해시가 64 비트 인 경우 2^64 해시 가능성이 있으면 컬렉션에 2^32 항목이 있으면 충돌 가능성이 50%가 될 수 있습니다.

를 사용하여 해시,항상 기회의 충돌 사고로 이어질 수 있습니다.당신은하지 않는 사전에 알고 어떠했는 충돌이 일어날 것에 한 번 또는 두 번,또는 수백 수천의 시대에서 당신의 목록의 url 이 있습니다.

확률은 여전히 가능성이다.그와 같은 주사위를 던지고 10 또는 100 시간,무엇을 기회를 얻기의 모든면 되죠?확률을 말한 그것은 낮지만,그것은 여전히 발생할 수 있습니다.어쩌면 많은 시간을 줄...

그래서 생일을 역설 계산하는 방법을 확률을,당신은 여전히 결정이 필요하면 충돌을 허용하거나지 않습니다.

...그리고 충돌은 수락가능하고 해시는 여전히 올바른 방법으로;이 찾는 64 비트 해싱 알고리즘에 의존하는 대신에"반-MD5"좋은 배포합니다.(하지만 그것은 아마는...)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top