UUHash
UUHashUUHash는 FastTrack 네트워크상의 클라이언트에서 사용되는 해시 알고리즘입니다.오래된 컴퓨터에서도 매우 큰 파일을 단시간에 해시할 수 있기 때문에 채용되고 있습니다.그러나 이는 파일의 일부만 해시하면 됩니다.이 취약성으로 인해 해시 충돌 생성은 간단하며 체크섬을 변경하지 않고 큰 섹션을 완전히 변경할 수 있습니다.
이 방법은 Kazaa가 사용하고 있습니다.UUHash의 취약성은 안티 p2p 에이전시에 의해 악용되어 다운로드가 [1]손상됩니다.
구조
UUHash는 160비트 문자열로 보통 Base64로 인코딩되어 표시됩니다.이것은 MD5 해시 및 [2][3]파일의 선택된 청크의 CRC32 합계를 연결한 것입니다.
파일의 첫 번째 307,200 바이트(300 Kibyte, "chunk size" 1개)는 MD5 해시입니다(파일이 짧으면 작음).32비트 little endian 정수값 small hash는 0으로 초기화됩니다.
파일이 1개의 청크 크기보다 큰 경우 파일 오프셋이 2MiB(n 0 0)이고n 파일 끝에 있는 청크가 1개 있는 일련의 청크가 CRC32(폴리모멀 0xEDB88320, 0x04C11)를 사용하여 해시됩니다.DB7 정상).2의 거듭제곱 시리즈의 마지막 청크는 파일 종료 전에 정확히 두 개 이상의 청크 크기로 끝납니다. 즉, 마지막 두 개의 청크 사이에 읽지 않은 바이트가 항상 하나 이상 있습니다(그렇게 많은 [footnote 1]청크가 있는 경우).파일 끝 청크는 1개의 청크 크기보다 짧을 수 있습니다.파일 끝 청크기는 1개의 청크 크기 이후부터 시작됩니다.CRC는 스몰 해시를 사용하여 초기화되어 스몰 해시에 저장됩니다.
예를 들어 다음과 같습니다.
- 오프셋 0 MiB, 300 KiB의 MD5 해시
- 오프셋 1 MiB, 300 KiB 해시 CRC32
- 오프셋 2 MiB, 300 KiB 해시...
- 오프셋 4 MiB, 300 KiB 해시...
- 오프셋 8 MiB, 300 KiB 해시...
- ...
- CRC32로 해시된 마지막 300KiB 파일
마지막으로 스몰 해시(최대 300KiB 파일의 경우 0)의 비트 보완은 바이트 단위의 파일 크기와 함께 XOR됩니다.160비트 UUHash는 128비트 MD5 해시 및 최종 32비트 소형 해시 값의 결합입니다.
테스트 벡터
0x00 또는 0xFF 바이트만을 포함하는 다양한 길이의 문자열에 대해 지정된 are hash(base64 및 16진수):
| 길이 | 0x00 | 0xFF | ||
|---|---|---|---|---|
| 베이스64 | 16진수 | 베이스64 | 16진수 | |
0 | 1B2M2Y8AsgTpgAmY7PhCfv///8= | D41D8CD98F00B204E9800998ECF8427E-FFFFFFFF | 1B2M2Y8AsgTpgAmY7PhCfv///8= | D41D8CD98F00B204E9800998ECF8427E-FFFFFFFF |
1 | k7iFrf4 NoInN9jSQT9Wfcf7//8= | 93B885ADFE0DA089CDF634904FD59F71-FFFFFFFF | AFP1PQRPD/BygQnoFdilf7//8= | 00594FD4F42BA43FC1CA0427A0576295-FFFFFF |
2 | xBA/Ei0nZ3ydsUTK4TlKZv3//8= | C4103F122D27677C9DB144CAE1394A66-FFFFFFFF | 제5//dbHKv6tCZQ/3//8= | AB2A0D28DE6B77FFDD6C72099년AB-FFFFFFFF |
307199 (300 KiB - 1) | YK6+Fj6S4MGZEC9H9Bn3gQBQ+/8= | 60AEBE163E92E0C1B3102F47F419F781-0050FBFF | I+QujFtxa9pBOT5X6NMGsgBQ+/8= | 23E42E8C5B716BDA413ADE57E8D306B2-0050FBFF |
307200 (300 KiB) | kK7e2ZI+JRup4WGNUK3JP9P+/8= | 90AED9922CF8946EA7858635493724-FF4FFBFF | oBSYnx6vdDeUWTP5N4mAv9P+/8= | A01498CA7C7ABDD0DE516B4FE4DE2602-FF4FFBFF |
307201 (300 KiB + 1) | kK7e2ZI+JRup4WGNUk3JHOg+S0= | 90AED9922CF8946EA7858635493724-73A0F92d | oBSYnx6vdDeUWtP5N4mAv5P+wA= | A01498CA7C7ABDD0DE516B4FE4DE2602-FE4FFB00 |
614399 (600 KiB - 1) | kK7e2ZI+JRup4WGNUk3JHCHQBQ= | 90AED9922CF8946EA7858635493724-7087A814 | oBSYnx6vdDeUWTP5N4mAqgX6Xs= | A01498CA7C7ABDD0DE516B4FE4DE2602-A817E97b |
614400 (600 KiB) | kK7e2ZI+JRup4WGNUk3JGlfGn0= | 90AED9922CF8946EA7858635493724-695F1A7d | oBSYnx6vdDeUWtP5N4mApKrf9g= | A01498CA7C7ABDD0DE516B4FE4DE2602-92AB7FD8 |
614401 (600 KiB + 1) | kK7e2ZI+JRup4WGNUk3JGhfGn0= | 90AED9922CF8946EA7858635493724-685F1A7d | oBSYnx6vdDeUWtP5N4mApOrf9g= | A01498CA7C7ABDD0DE516B4FE4DE2602-93AB7FD8 |
614402 (600 KiB + 2) | kK7e2ZI+JRup4WGNUk3JGtfGn0= | 90AED9922CF8946EA7858635493724-6B5F1A7D | oBSYnx6vdDeUWtP5N4mApCrf9g= | A01498CA7C7ABDD0DE516B4FE4DE2602-90AB7FD8 |
16777216 (16 MiB) | kK7e2ZI+JRup4WGNUk3JN/b8qg= | 90AED9922CF8946EA7858635493724-DFDBF2A8 | oBSYnx6vdDeUWTP5N4mAt0YF2Y= | A01498CA7C7ABDD0DE516B4FE4DE2602-DD181766 |
17084416 (16 MiB + 300 KiB) | kK7e2ZI+JRup4WGNUk3JN9r9qg= | 90AED9922CF8946EA7858635493724-DF6BF6A8 | oBSYnx6vdDeUWTP5N4mAt2oE2Y= | A01498CA7C7ABDD0DE516B4FE4DE2602-DDA81366 |
17084417 (16 MiB + 300 KiB + 1) | kK7e2ZI+JRup4WGNUk3JN5r9qg= | 90AED9922CF8946EA7858635493724-DE6BF6A8 | oBSYnx6vdDeUWTP5N4mAtyoE2Y= | A01498CA7C7ABDD0DE516B4FE4DE2602-DCA81366 |
17391616 (16 MiB + 600 KiB) | kK7e2ZI+JRup4WGNUk3JN+7+6g= | 90AED9922CF8946EA7858635493724-DFBBFBA8 | oBSYnx6vdDeUWTP5N4mAt14HmY= | A01498CA7C7ABDD0DE516B4FE4DE2602-DD781E66 |
17391617 (16 MiB + 600 KiB + 1) | kK7e2ZI+JRup4WGNUk3JNZVMqw= | 90AED9922CF8946EA7858635493724-DCD532AC | oBSYnx6vdDeUWTP5N4mAgS1uWk= | A01498CA7C7ABDD0DE516B4FE4DE2602-04B5B969 |
17391618 (16 MiB + 600 KiB + 2) | kK7e2ZI+JRup4WGNUK3JN/VMQw= | 90AED9922CF8946EA7858635493724-DFD532AC | oBSYnx6vdDeUWTP5N4mAge1uWk= | A01498CA7C7ABDD0DE516B4FE4DE2602-07B5B969 |
완전한 MD5 청크를 가진 모든 문자열에는 동일한 128비트 프리픽스가 있습니다.청크 수가 동일한 파일의 경우 포함된 파일 길이 때문에 CRC 부분이 다릅니다(모든 청크가 동일하거나 그렇지 않은 경우).최대 300KiB 파일의 경우 파일의 길이는 해시의 마지막 4바이트에서 추출할 수 있습니다. small hash는 0까지입니다.
Sig2Dat
UUHash라는 이름은 Kazaa에서 파일을 참조하는 URI를 작성하는 sig2dat 유틸리티에서 유래했습니다.다음 URI 형식은 다음과 같습니다.
sig2dat:// 파일:surprise.mp3 길이:5845871바이트 UUHash:=1LDYkHDl65OprVz37xN1VSo9b00=
UUHash는 이 URI 형식이 RFC에 준거하지 않는 것을 고려하지 않고 해시 자체가 아닌 해시의 Base64 인코딩을 참조합니다.
메모들
- ^ BitCollider/0.4.0이 이것을 부정하게 실장했습니다.
외부 링크
- ^ 토마스 메네케.오버피어가 FastTrack 네트워크의 데이터를 손상시키는 방법.2005.
- ^ MLDonkey 소스 코드, 파일 src/utils/lib/fst_hash.c, 2014-08-20 검색
- ^ sig2dat 소스 코드, 파일 sig2dat.c, 함수 GetHashWin32, 2014-08-20 취득
