MD5 전에 충돌을 일으키기 전에 얼마나 많은 임의의 요소가 있습니까?

StackOverflow https://stackoverflow.com/questions/201705

  •  03-07-2019
  •  | 
  •  

문제

Amazon S3에 이미지 라이브러리가 있습니다. 각 이미지에 대해, 나는 서버의 소스 URL과 고유 한 파일 이름을 얻기위한 타임 스탬프를 MD5합니다. S3에는 하위 디렉토리가 없으므로 이러한 이미지를 단일 플랫 폴더에 저장해야합니다.

생산되는 MD5 해시 값의 충돌에 대해 걱정해야합니까?

보너스 : MD5가 생성하는 해시 값에서 충돌을보기 시작하기 전에 몇 개의 파일을 가질 수 있습니까?

도움이 되었습니까?

해결책

실수로 충돌하는 두 해시의 확률 1/2128 그게 340 UNDECILLION 282 DECILLION 366 NONILLION 920 OCLION 920 OCTILLION 938 SEPTILLION 463 SEXTILLION 463 QUINTILLION 374 40 억 60 억 4,100 억 768 백만 211,000 456.

그러나 모든 해시를 유지하면 확률이 조금 더 높습니다. 생일 역설. 해시가 다른 해시와 충돌 할 가능성이 50%가 필요합니다. 264 해시. 이것은 충돌을 받으려면 평균적으로 해시해야한다는 것을 의미합니다. 6 10억 파일 초당 100 년 동안.

다른 팁

S3에는 하위 디렉토리가있을 수 있습니다. "/"를 키 이름으로 넣으면 파일이 별도의 디렉토리 인 것처럼 파일에 액세스 할 수 있습니다. 이를 사용하여 사용자 파일을 S3의 사용자 ID를 기반으로 별도의 폴더에 저장합니다.

예를 들어 : "Mybucket/Users/1234/adofile.jpg". 파일 시스템의 디렉토리와 정확히 동일하지는 않지만 S3 API에는 거의 동일하게 작동하는 몇 가지 기능이 있습니다. "사용자/1234/"로 시작하는 모든 파일을 나열하도록 요청할 수 있으며 해당 "디렉토리"의 모든 파일을 표시합니다.

그러니 잠깐만 요 :

md5(filename) + timestamp

또는:

md5(filename + timestamp)

전자라면, 당신은 대부분의 안내로가는 길이며, 나는 그것에 대해 걱정하지 않을 것입니다. 후자가 있다면 결국 충돌이 발생할 방법에 대한 Karg의 게시물을 참조하십시오.

충돌을위한 거친 경험 법칙은 값 범위의 제곱근입니다. MD5 시그는 아마도 128 비트 길이이므로 2^64 이미지 이상의 충돌을 볼 수 있습니다.

임의의 MD5 충돌은 매우 드물지만 사용자가 파일을 제공 할 수 있다면 (구두로 저장) 충돌을 엔지니어링 할 수 있습니다. 즉, 동일한 MD5SUM이지만 다른 데이터로 두 개의 파일을 의도적으로 만들 수 있습니다. 애플리케이션 이이 사건을 현명한 방식으로 처리하거나 SHA-256과 같은 강력한 해시를 사용할 수 있는지 확인하십시오.

충돌로 인해 MD5에 잘 공개 된 문제가 있었지만 임의의 데이터 간의 의도하지 않은 충돌은 다음과 같습니다. 매우 드물다. 반면에, 파일 이름을 해싱하는 경우 임의의 데이터가 아니며 충돌이 빨리 예상됩니다.

MD5 충돌은 거의 가능하지 않습니다. 당신이 가지고 있다면 9 조 MD5S, 기회는 단 하나뿐입니다 9 조 충돌이있을 것입니다.

그것이 얼마나 될 가능성이 중요하지 않습니다. 것이 가능하다. 당신이 해시 할 수있는 첫 두 가지 일 (매우 가능성은 거의 없지만 가능)에서 발생할 수 있으므로 처음부터 충돌을 지원해야합니다.

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