Amazon S3에 이미지 라이브러리가 있습니다. 각 이미지마다 고유 한 파일 이름을 얻기 위해 서버의 소스 URL과 타임 스탬프를 md5로 지정합니다. S3는 하위 디렉토리를 가질 수 없으므로 이러한 모든 이미지를 단일 플랫 폴더에 저장해야합니다.
생성되는 MD5 해시 값의 충돌에 대해 걱정해야합니까?
보너스 : MD5가 생성하는 해시 값에서 충돌을보기 전에 몇 개의 파일을 가질 수 있습니까?
Amazon S3에 이미지 라이브러리가 있습니다. 각 이미지마다 고유 한 파일 이름을 얻기 위해 서버의 소스 URL과 타임 스탬프를 md5로 지정합니다. S3는 하위 디렉토리를 가질 수 없으므로 이러한 모든 이미지를 단일 플랫 폴더에 저장해야합니다.
생성되는 MD5 해시 값의 충돌에 대해 걱정해야합니까?
보너스 : MD5가 생성하는 해시 값에서 충돌을보기 전에 몇 개의 파일을 가질 수 있습니까?
답변:
우연히 충돌하는 두 해시의 확률은 1/2 128 입니다. 340 undecillion decillion 282 366 920 nonillion octillion septillion 938 463 463 sextillion quintillion 374 천조 607,000,000,000,000 431,000,000,000 768,000,000 211,000 456 1.
그러나 모든 해시를 유지하면 생일 역설 덕분에 확률이 약간 높아집니다 . 해시가 다른 해시와 충돌 할 확률이 50 % 일 경우 2 64 해시 가 필요 합니다. 이것은 평균적으로 충돌을 일으키기 위해 100 년 동안 초당 60 억 개의 파일 을 해시해야한다는 것을 의미합니다 .
1 - sPn/s^n
경우, s
(검색 공간의 크기입니다 2^128
이 경우), 그리고 n
인 항목의 수는 해시. 아마도 2^64
50 % 충돌 가능성을 갖기 위해 MD5 해시에 필요한 대략적인 항목 수입니다.
S3는 서브 디렉토리를 가질 수 있습니다. 키 이름에 "/"를 입력하면 별도의 디렉토리에있는 것처럼 파일에 액세스 할 수 있습니다. 이것을 사용하여 S3의 사용자 ID를 기반으로 사용자 파일을 별도의 폴더에 저장합니다.
예 : "mybucket / users / 1234 / somefile.jpg" 파일 시스템의 디렉토리와 정확히 동일하지는 않지만 S3 API에는 거의 동일하게 작동하는 몇 가지 기능이 있습니다. "users / 1234 /"로 시작하는 모든 파일을 나열하도록 요청할 수 있으며 해당 "디렉토리"에있는 모든 파일이 표시됩니다.
잠깐만 요 :
md5(filename) + timestamp
또는:
md5(filename + timestamp)
전자의 경우, 당신은 GUID로가는 길의 대부분이며, 나는 그것에 대해 걱정하지 않을 것입니다. 후자 인 경우 Karg의 게시물에서 충돌이 어떻게 발생하는지 확인하십시오.
md5(filename) + timestamp
전체 충돌을 갖기 위해 정확히 동일한 타임 스탬프에 대해 md5 충돌이 필요하기 때문에 충돌 위험을 크게 줄입니다. md5(filename + timestamp)
과 동일한 md5(filename)
파일 이름 (임의 뭔가 더 임의성을 추가하는 것은 단지 개인의 MD5 결과를 변경하고 생일 문제가 여전히 모든 MD5 해시에 걸쳐 존재하기 때문에)로 시작하는 임의이라고 가정.
충돌에 대한 대략적인 경험 법칙은 값 범위의 제곱근입니다. MD5 sig의 길이는 아마도 128 비트이므로 2 ^ 64 이미지 이상에서 충돌이 발생할 수 있습니다.
임의의 MD5 충돌은 극히 드물지만 사용자가 파일을 그대로 제공 할 수있는 경우 충돌이 발생하도록 엔지니어링 할 수 있습니다. 즉, 동일한 MD5sum이지만 다른 데이터로 두 개의 파일을 의도적으로 작성할 수 있습니다. 애플리케이션이이 사례를 합리적인 방식으로 처리하거나 SHA-256과 같은 더 강력한 해시를 사용할 수 있는지 확인하십시오.
충돌로 인해 MD5와 관련하여 널리 알려진 문제가 있었지만, 임의의 데이터 간의 UNINTENTIONAL 충돌은 매우 드 rare니다 . 반면에 파일 이름을 해싱하는 경우 무작위 데이터가 아니며 충돌이 빨리 발생할 것으로 예상됩니다.
그것이 얼마나 가능성이 있는지는 중요하지 않습니다. 것이 가능하다. 처음 두 가지 일 (해당하지는 않지만 가능할 수도 있음)에서 발생할 수 있으므로 처음부터 충돌을 지원해야합니다.
MD5 충돌은 거의 발생하지 않습니다. 당신이 경우 구조 MD5s을,에 하나의 기회가 구조 충돌이 될 것입니다.