MD5는 여전히 파일을 고유하게 식별하기에 충분합니까?


139

MD5 해시 파일이 여전히 MD5 알고리즘의 모든 중단 및 보안 문제 등을 감안할 때 파일을 고유하게 식별하기에 충분한 방법으로 간주됩니까? 여기서 보안은 나의 주요 관심사가 아니라 각 파일을 고유하게 식별하는 것입니다.

이견있는 사람?


2
실제로 현재 내 응용 프로그램 중 하나에서 직접 사용하고 있으며 파일을 고유하게 식별하기에 충분하다는 것을 알고 있습니다.
사용할 수 없음

2
이 질문이있을 것입니다 : stackoverflow.com/questions/862346/… 유용한.
sharptooth

몇 개의 파일을 식별해야합니까? 128 비트를 출력하므로 수천 개의 파일을 식별하려고하면 괜찮습니다. 그러나 그 이상을 많이 시도한다면 충돌 / 생일 역설에 부딪 칠 수 있습니다.
Marcin

이미지 파일, jpg, png 및 gif가됩니다. 그리고 네, 그 한계는 수천이 될 것이라고 생각합니다 ... 그러나 대략 몇 개의 파일이 나에게 문제를 일으킬 것이라고 생각합니까?
Ranhiru Jude Cooray

답변:


89

예. 보안 측면에서 MD5가 완전히 깨졌지만 우발적 충돌 가능성은 여전히 ​​작습니다. 신뢰할 수없는 사람과 악의적 인 의도를 가진 사람이 파일을 만들지 않도록하십시오.


2
@ 없음 : 첫 번째 질문은 여기를 참조 하십시오 . 다른 질문을 이해하지 못합니다.
Marcelo Cantos

9
@ 0xA3 : OP 나 어떤 파일이 참조하는지 또는 타협으로 인해 발생할 수있는 피해의 정도를 알 수 없습니다. 우리가 아는 모든 것의 아이들의 아기 사진 모음 일 수 있습니다. 나의 목표는 사실을 제공하는 것입니다. 누군가가 그들과 함께하는 것은 그들의 사업입니다. 또한 Bruce Schneier가 암호를 적어 두는 것이 좋습니다 . Fort Knox에 모든 것을 보관할 필요는 없습니다. 어떤 것은 화분 밑에 잘 유지됩니다.
Marcelo Cantos

3
@Marcelo Cantos, 여기서 부족한 것은 '보안'이라는 용어의 차별화 또는 풀기입니다. 분명히 사람들은 체크섬 작업의 사용에 대해 '보안'을 가정하고 있지만 Marcelo의 명명법은 '실험실에 있음'을 의미합니다.
hpavc

5
나는 매우 동의하지 않습니다. 다른 해시 값은 파일이 다르다는 것을 나타냅니다. 그러나 동일한 해시 값의 경우 : 해시가 동일한 경우 "둘 다 동일 할 가능성이 높습니다"라고 말할 수 없습니다. 바이트 단위 만 비교할 수 있습니다. 해시는 전체 파일에 대해 다른 값의 수 보다 훨씬 작은 크기 이므로 각 해시 값에 대해 가능한 많은 충돌이 있습니다. 알려진 파일 (알려진 해시)을 복사하는 경우에만 동일한 해시 값이 "아마도"를 의미하므로 두 번째가 올바르게 복사되었습니다 (그런데 100 % 확실하지는 않지만 가능성이 높습니다).
Olivier Dulac

3
좋아, 내 수학은 짜증나. GUID는 약 122 비트의 엔트로피를 가지므로 10 억 개의 파일에서 충돌 가능성은 약 2 ^ (2 * 30-122) = 2 ^ -62입니다. 이것은 내 원래 계산보다 훨씬 높지만 여전히 4 퀸 틸리 온에서 대략 1에 불과합니다.
Marcelo Cantos 2016 년

32

실용적인 목적으로, 생성 된 해시는 적절하게 임의적이지만 이론적 으로는 Pigeonhole 원리 로 인해 충돌 가능성이 있습니다. 다른 해시가 있다는 것은 확실히 파일이 다르다는 것을 의미하지만 동일한 해시를 얻는다고해서 반드시 파일이 동일한 것은 아닙니다.

따라서 보안이 문제가되는지 여부에 관계없이 해시 함수를 사용하면 해시 알고리즘이 충돌을 쉽게 일으키는 것으로 알려진 경우 항상 검사의 첫 단계 만되어야합니다. 동일한 해시를 가진 두 파일이 다른지 확실하게 확인하려면 해당 파일을 바이트 단위로 비교해야합니다.


16
란 히루 아니요. 해시는 (MD5의 경우) 16 바이트 길이 인 '요약'값을 제공합니다. 하기 위해 보장 파일이 동일하면 바이트 수표로 바이트를 만들 필요가있다. 어떤 해시 알고리즘을 선택하든 항상 충돌 가능성이 있습니다.
PaulG

6
란 히루 이 답변을 다시 읽으십시오. 여기에서 가장 포괄적 인 답변이 있습니다. 해싱은 첫 번째 단계로 사용될 수 있으며 파일이 동일하다는 것을 99.99 ^ e % 확신 할 수 있지만 절대적으로 100 % 확실하게하려면 바이트 단위로 확인해야합니다. MD5, SHA 또는 다른 알고리즘을 사용하든 상관 없습니다.
PaulG

7
이 답변은 잘못되었습니다. 변조 방지 및 고유성 확인도 마찬가지입니다. 또한 해싱은 고유성을 보장하지 않지만 실제 비교는 아닙니다. 실제로 해시가 우연히 충돌 할 가능성은 실제로 정상적인 태양 감마선 방출에 의해 생성 된 CPU의 결함으로 인해 비교가 실패 할 가능성이 낮습니다. 그리고 파일의 유일한 소스가 웹 서버의 다른쪽에있는 경우가 종종 있으며, 비교 목적으로 보유한 유일한 독립적 인 정보는 해시입니다.
Marcelo Cantos

8
@ 마르셀로. 우연한 충돌이 우연한 비트 플립 보다 가능성 이 낮다 는 논리적 인 추론은 아닙니다 (바이트 단위 비교). 해시를 빌드 할 때 여전히 비트 플립이 발생할 가능성이 높습니다 (더 많은 처리 시간이 소요되므로 더 많을 수 있습니다). @Thomas는 원래 비트 플립의 영향이 논란의 여지가 있지만 독창성을 식별 할 수있는 보장 된 방법이 없음을 제안하기 위해이 요점을 제기했습니다. 가장 비관적 인 추정치는 GB / 시간당 1 플립이며 ECC RAM은이를 제거합니다.
PaulG

2
"실수로 해시가 충돌 할 가능성은 실제로 정상적인 태양 감마선 방출에 의해 생성 된 CPU의 결함으로 인해 비교가 실패 할 확률이 낮습니다"[인용 필요]
endolith

20

당신이 적이 없다면 MD5는 충분할 것입니다. 그러나 누군가는 (의도적으로) 동일한 값으로 충돌하는 두 개의 별개의 파일 (충돌이라고 함)을 만들 수 있으며 이는 정확한 상황에 따라 문제가 될 수도 있고 아닐 수도 있습니다.

알려진 MD5 취약점이 주어진 상황에 적용되는지 아는 것은 미묘한 문제이므로 MD5를 사용하지 않는 것이 좋습니다. 충돌 방지 해시 기능 (SHA-256 또는 SHA-512)을 사용하는 것이 안전합니다. 또한 MD5를 사용하는 것은 좋지 않은 홍보입니다 (MD5를 사용하는 경우 자신을 정당화 할 준비를하는 반면 SHA-256 사용에 대해서는 의문의 여지가 없습니다).


2
독자가 해싱에 너무 익숙하지 않으면이 답변이 약간 오도 될 수 있습니다. SHA에 해시 충돌 을 방지 하는 마술은 없으며 해시 충돌 공격에 더 강합니다 . 파일이 동일하다는 것을 99.999 ^ e % 이상으로 유지하려면 바이트 단위 검사가 여전히 필요합니다.
PaulG

7
실제로 비트를 뒤집는 우주 광선으로 인해 바이트 간 비교에 실패 할 수 있습니다 (예 : a return 0;로 변환 return 1;). 이것은 거의 발생하지 않지만 SHA-256과의 충돌 위험은 그보다 훨씬 작습니다. 수학적으로 같은 값으로 해시하는 두 파일이 동일한 지 확인할 수 없지만 비교를 위해 컴퓨터를 사용하는 경우 파일 자체를 비교하여 확신 할 수는 없습니다. 내 말은 99.999 .... 9 %의 확실성을 넘어서는 의미가 없으며 SHA-256은 이미 그 이상을 제공한다는 것입니다.
Thomas Pornin

2
ECC 메모리를 사용하지 않습니까? ;). 좋은 의견, 매우 흥미로운 생각.
PaulG

1
주석 호일 모자를 잊지 마십시오! 더 심각하게, 충돌에 대한 이러한 사실을 어떻게 알 수 있으며 어떤 식으로 이것을 확인 했습니까?
James P.

@ThomasPornin Cosmic ray bit flips는 MD5 방법에도 영향을 미치므로 여전히 더 나쁩니다.
endolith

9

md5는 충돌을 일으킬 수 있습니다. 이론적으로는 가능성은 거의 없지만 수백만 개의 파일이 동일한 해시를 생성 할 수 있습니다. 값을 저장하기 전에 운을 테스트하고 md5 충돌을 확인하지 마십시오.

개인적으로 md5의 임의 문자열을 생성하여 큰 파일을 해시하는 오버 헤드를 줄입니다. 충돌이 발견되면 추가 된 루프 카운터로 반복하고 다시 해시합니다.

비둘기 구멍 원리를 읽을 수 있습니다 .


6

나는 그것을 추천하지 않을 것입니다. 응용 프로그램이 다중 사용자 시스템에서 작동하는 경우 동일한 md5 해시를 가진 두 개의 파일을 가진 사용자가있을 수 있습니다 (그는 그러한 파일로 엔지니어 및 재생하거나 궁금 할 수 있습니다 -http : / 에서 쉽게 다운로드 할 수 있음) /www2.mat.dtu.dk/people/S.Thomsen/wangmd5/samples.html ,이 답변을 작성하는 동안 나 자신은 두 개의 샘플을 다운로드했습니다). 또 다른 것은 어떤 응용 프로그램은 어떤 이유로 든 그러한 복제본을 저장할 수 있다는 것입니다 (그런 응용 프로그램이 있지만 가능성이 있는지 확실하지 않습니다).

프로그램에서 생성 된 파일을 고유하게 식별하는 경우 MD5를 사용하는 것이 좋습니다. 그렇지 않으면 충돌이 아직 알려지지 않은 다른 해시 함수를 권장합니다.


2

개인적으로 사람들이 다른 객체의 원시 체크섬 (방법을 선택하십시오)을 사용하여 실제로 원할 때 고유 식별자로 너무 많이 작용한다고 생각합니다. 고유 식별자가 있습니다. 이 용도로 객체를 지문으로 찍으려는 의도는 없었으며 UUID 또는 유사한 무결성 메커니즘을 사용하는 것보다 더 많은 사고가 필요할 것입니다.


0

MD5가 깨졌습니다. 대신 SHA1을 사용할 수 있습니다 (대부분의 언어로 구현 됨)


이것은 완벽하게 좋은 대답입니다. 2018 년 5 월부터 유럽의 법률 및 회계 분야에서 MD5를 사용할 수 없습니다.
Bert Sinnema

@BertSinnema 허용 가능한 해시 함수 등을 정의하는 소스를 알려 주시겠습니까?
berezovskyi

OP가 암호화 강도 자체를 신경 쓰지 않았기 때문에 @GregSchmit 일 수 있습니다. "비보안 컨텍스트에서 MD5를 이미 사용하고 있습니다. 코드를 업데이트하는 데 시간을 소비해야합니까?"라는 질문을 이해했습니다. 일종의 것. 그리고이 맥락에서 대답은 잘못되었을 가능성이 있으며 SHA1도 그 이후로 깨졌습니다.
berezovskyi

0

짧은 (<몇 K?) 문자열 (또는 파일)을 해싱 할 때 두 개의 md5 해시 키를 만들 수 있습니다. 하나는 실제 문자열에 대한 것이고 다른 하나는 짧은 비대칭 문자열에 연결된 문자열의 반전에 대한 것입니다. 예 : md5 (reverse (string || '1010')). 여분의 문자열을 추가하면 일련의 동일한 비트로 구성된 파일도 두 개의 다른 키를 생성 할 수 있습니다. 이 체계 하에서도 두 개의 해시 키가 동일하지 않은 문자열에 대해 동일 할 가능성은 이론적으로 있지만, 단일 MD5 충돌 확률의 제곱 순서 및 시간 절약과 같은 가능성은 매우 작습니다. 파일 수가 증가 할 때 상당한 수 있습니다. 두 번째 문자열을 만들기위한보다 정교한 체계도 고려할 수 있습니다.

충돌을 확인하기 위해 db의 모든 bit_vector에 대한 md5 해시 키의 고유성에 대해이 테스트를 실행할 수 있습니다.

md5 (bit_vector)에
의해 bit_vector 그룹이있는 db에서 md5 (bit_vector), count (*), bit_and (bit_vector)를 선택하고 bit_and (bit_vector)가있는 bit_vector <> bit_vector


똑똑한 아이디어. "공격자"가 동일한 md5 해시를 가진 가짜 파일을 만드는 경우, "경고"를 모르는 경우 도움이되지 않으며 내용을 되 돌리면 다른 해시가 생성됩니다. 이와 같은 2 개의 md5 키를 사용하면 확률이 크게 줄어 듭니다. 로컬로 계산하기 전에 소금을 사용하여 "공격"을 방지하는 것만으로 충분합니다.
Wolf5

0

대량의 파일 데이터를 저장할 때 MD5를 확률의 지표로 생각하고 싶습니다.

해시가 동일하면 파일을 바이트 단위로 비교해야한다는 것을 알고 있지만 잘못된 이유로 몇 번만 발생할 수 있습니다. 그렇지 않으면 (해시가 동일하지 않음) 두 개의 다른 파일에 대해 이야기하고 있음을 확신 할 수 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.