UUHash

UUHash

UUHashFastTrack 네트워크상의 클라이언트에서 사용되는 해시 알고리즘입니다.오래된 컴퓨터에서도 매우 큰 파일을 단시간에 해시할 수 있기 때문에 채용되고 있습니다.그러나 이는 파일의 일부만 해시하면 됩니다.이 취약성으로 인해 해시 충돌 생성은 간단하며 체크섬을 변경하지 않고 큰 섹션을 완전히 변경할 수 있습니다.

이 방법은 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 인코딩을 참조합니다.

메모들

  1. ^ BitCollider/0.4.0이 이것을 부정하게 실장했습니다.

외부 링크

  1. ^ 토마스 메네케.오버피어가 FastTrack 네트워크의 데이터를 손상시키는 방법.2005.
  2. ^ MLDonkey 소스 코드, 파일 src/utils/lib/fst_hash.c, 2014-08-20 검색
  3. ^ sig2dat 소스 코드, 파일 sig2dat.c, 함수 GetHashWin32, 2014-08-20 취득