UUHash - UUHash

UUHash bir karma algoritma müşteriler tarafından istihdam Hızlı parça ağ. Eski bilgisayarlarda bile çok büyük dosyaları çok kısa bir süre içinde hash etme yeteneği için kullanılır. Ancak bu, dosyanın yalnızca bir kısmına hashing uygulanarak elde edilir. Bu zayıflık, bir hash çarpışması yaratmayı önemsiz hale getirir ve büyük bölümlerin, değiştirilmeden tamamen değiştirilmesine izin verir. sağlama toplamı.

Bu yöntemi kullanan Kazaa. UUHash'ın zayıflığı anti-p2p ajanslar bozuk İndirilenler.[1]

Nasıl çalışır

UUHash, 160 bitlik bir dizedir ve genellikle Base64 - sunum için kodlanmıştır. Bir MD5 hash ve bir CRC32 dosyanın seçilen parçalarının toplamı.[2][3]

İlk 307.200 bayt (300 Kibibayt dosyanın bir "yığın boyutu") MD5 -hashed (dosya daha kısaysa daha az). 32 bit küçük endian tamsayı değeri ufak tefek 0 olarak başlatılır.

Dosya kesinlikle bir yığın boyutundan daha büyükse, dosya uzaklıkları 2 olan bir dizi yığınn MiB (n ≥ 0) ve dosyanın sonundaki bir yığın, bir CRC32 (0xEDB88320 tersine çevrilmiş, 0x04C11DB7 normal) kullanılarak karma hale getirilir. İkili güç serisinin son parçası kesinlikle bitiyor Daha dosyanın sonundan önce birden fazla yığın boyutu, yani son iki parça arasında her zaman en az bir okunmamış bayt vardır (eğer bu kadar çok yığın varsa).[dipnot 1] Dosya sonu öbek, bir yığın boyutundan daha kısa olabilir; dosyaya bir yığın boyutunda veya sonrasında başlar. CRC, kullanılarak başlatılır ufak tefek ve saklandı ufak tefek.

Yani mesela:

ofset 0 MiB, MD5 ile 300 KiB hashed
ofset 1 MiB, CRC32 ile karma 300 KiB
ofset 2 MiB, 300 KiB hashed ...
ofset 4 MiB, 300 KiB hashed ...
ofset 8 MiB, 300 KiB hashed ...
...
CRC32 ile hashing uygulanmış son 300 KiB dosya

Son olarak, bit düzeyinde tamamlayıcı ufak tefek (300 KiB'ye kadar olan dosyalar için hala sıfırdır) bayt cinsinden dosya boyutuyla birlikte XORlanır. 160-bit UUHash artık 128-bit MD5 hash ve son 32-bit'in birleştirilmesidir. ufak tefek değer.

Test Vektörleri

Yalnızca 0x00 veya 0xFF bayt içeren çeşitli uzunluklardaki dizeler için hash değerleri (base64 ve hex) verilmiştir:

Uzunluk0x000xFF
Base64OnaltılıkBase64Onaltılık
01B2M2Y8AsgTpgAmY7PhCfv //// 8 =D41D8CD98F00B204E9800998ECF8427E -FFFFFFFF1B2M2Y8AsgTpgAmY7PhCfv //// 8 =D41D8CD98F00B204E9800998ECF8427E-FFFFFFFF
1k7iFrf4NoInN9jSQT9Wfcf7 /// 8 =93B885ADFE0DA089CDF634904FD59F71-FEFFFFFFAFIP1PQrpD / BygQnoFdilf7 /// 8 =00594FD4F42BA43FC1CA0427A0576295-FEFFFFFF
2xBA / Ei0nZ3ydsUTK4TlKZv3 /// 8 =C4103F122D27677C9DB144CAE1394A66-FDFFFFFFqyoNKN5rd // dbHKv6tCZq / 3 /// 8 =AB2A0D28DE6B77FFDD6C72AFEAD099AB-FDFFFFFF
307199 (300 KiB - 1)YK6 + Fj6S4MGzEC9H9Bn3gQBQ + / 8 =60AEBE163E92E0C1B3102F47F419F781-0050FBFFI + QujFtxa9pBOt5X6NMGsgBQ + / 8 =23E42E8C5B716BDA413ADE57E8D306B2-0050FBFF
307200 (300 KiB)kK7e2ZIs + JRup4WGNUk3JP9P + / 8 =90AEDED9922CF8946EA7858635493724-FF4FFBFFoBSYynx6vdDeUWtP5N4mAv9P + / 8 =A01498CA7C7ABDD0DE516B4FE4DE2602-FF4FFBFF
307201 (300 KiB + 1)kK7e2ZIs + JRup4WGNUk3JHOg + S0 =90AEDED9922CF8946EA7858635493724-73A0F92DoBSYynx6vdDeUWtP5N4mAv5P + wA =A01498CA7C7ABDD0DE516B4FE4DE2602-FE4FFB00
614399 (600 KiB - 1)kK7e2ZIs + JRup4WGNUk3JHCHqBQ =90AEDED9922CF8946EA7858635493724-7087A814oBSYynx6vdDeUWtP5N4mAqgX6Xs =A01498CA7C7ABDD0DE516B4FE4DE2602-A817E97B
614400 (600 KiB)kK7e2ZIs + JRup4WGNUk3JGlfGn0 =90AEDED9922CF8946EA7858635493724-695F1A7DoBSYynx6vdDeUWtP5N4mApKrf9g =A01498CA7C7ABDD0DE516B4FE4DE2602-92AB7FD8
614401 (600 KiB + 1)kK7e2ZIs + JRup4WGNUk3JGhfGn0 =90AEDED9922CF8946EA7858635493724-685F1A7DoBSYynx6vdDeUWtP5N4mApOrf9g =A01498CA7C7ABDD0DE516B4FE4DE2602-93AB7FD8
614402 (600 KiB + 2)kK7e2ZIs + JRup4WGNUk3JGtfGn0 =90AEDED9922CF8946EA7858635493724-6B5F1A7DoBSYynx6vdDeUWtP5N4mApCrf9g =A01498CA7C7ABDD0DE516B4FE4DE2602-90AB7FD8
16777216 (16 MiB)kK7e2ZIs + JRup4WGNUk3JN / b8qg =90AEDED9922CF8946EA7858635493724-DFDBF2A8oBSYynx6vdDeUWtP5N4mAt0YF2Y =A01498CA7C7ABDD0DE516B4FE4DE2602-DD181766
17084416 (16 MiB + 300 KiB)kK7e2ZIs + JRup4WGNUk3JN9r9qg =90AEDED9922CF8946EA7858635493724-DF6BF6A8oBSYynx6vdDeUWtP5N4mAt2oE2Y =A01498CA7C7ABDD0DE516B4FE4DE2602-DDA81366
17084417 (16 MiB + 300 KiB + 1)kK7e2ZIs + JRup4WGNUk3JN5r9qg =90AEDED9922CF8946EA7858635493724-DE6BF6A8oBSYynx6vdDeUWtP5N4mAtyoE2Y =A01498CA7C7ABDD0DE516B4FE4DE2602-DCA81366
17391616 (16 MiB + 600 KiB)kK7e2ZIs + JRup4WGNUk3JN + 7 + 6g =90AEDED9922CF8946EA7858635493724-DFBBFBA8oBSYynx6vdDeUWtP5N4mAt14HmY =A01498CA7C7ABDD0DE516B4FE4DE2602-DD781E66
17391617 (16 MiB + 600 KiB + 1)kK7e2ZIs + JRup4WGNUk3JNzVMqw =90AEDED9922CF8946EA7858635493724-DCD532ACoBSYynx6vdDeUWtP5N4mAgS1uWk =A01498CA7C7ABDD0DE516B4FE4DE2602-04B5B969
17391618 (16 MiB + 600 KiB + 2)kK7e2ZIs + JRup4WGNUk3JN / VMqw =90AEDED9922CF8946EA7858635493724-DFD532ACoBSYynx6vdDeUWtP5N4mAge1uWk =A01498CA7C7ABDD0DE516B4FE4DE2602-07B5B969

Tam bir MD5 öbeğine sahip tüm dizelerin aynı 128-bit öneke sahip olduğuna dikkat edin. Aynı sayıda parçaya sahip dosyalar için, CRC parçası yalnızca dahil edilen dosya uzunluğu nedeniyle farklılık gösterir (tüm parçalar aynıdır veya durum böyle değildir). 300 KiB'ye kadar olan dosyalar için dosya uzunluğu, karmanın son dört baytından çıkarılabilir; ufak tefek ~ 0.

Sig2Dat

UUHash adı, sig2dat yaratan yardımcı program URI'ler Kazaa'daki referans dosyaları. Bu URI'ler şu biçimdedir:

sig2dat: // | Dosya: surprise.mp3 | Uzunluk: 5845871Bytes | UUHash: = 1LDYkHDl65OprVz37xN1VSo9b00 =

Bu gerçeği dikkate almamak URI format değil RFC uyumlu, UUHash, Base64 - karmanın değil, karmanın kodlanması.

Notlar

  1. ^ BitCollider / 0.4.0 bunu sadakatsizce uyguladı

Dış bağlantılar

  1. ^ Thomas Mennecke.Overpeer, FastTrack ağındaki verileri nasıl bozabildi?.2005.
  2. ^ MLDonkey kaynak kodu, dosya src / utils / lib / fst_hash.c, alındı ​​2014-08-20
  3. ^ sig2dat kaynak kodu, dosya sig2dat.c, işlev GetHashWin32, alındı ​​2014-08-20