UUHash - UUHash

UUHash je hash algoritmus zaměstnaní klienty na internetu Rychlá dráha síť. Používá se pro svou schopnost hašovat velmi velké soubory ve velmi krátké době, a to i na starších počítačích. Toho je však dosaženo pouze hašováním zlomku souboru. Díky této slabosti je triviální vytvořit hashovou kolizi, což umožňuje úplné změny velkých sekcí bez změny kontrolní součet.

Tuto metodu používá Kazaa. Slabina UUHash je využívána anti-p2p agentury zkorumpovaný stahování.[1]

Jak to funguje

UUHash je obvykle 160bitový řetězec Base64 -kódováno pro prezentaci. Jedná se o zřetězení hash MD5 a CRC32 součet vybraných bloků souboru.[2][3]

Prvních 307 200 bajtů (300 Kibibyte, jedna "velikost bloku") souboru jsou MD5 -hashed (méně, pokud je soubor kratší). 32 bitů malý Endian celočíselná hodnota smallhash je inicializován na 0.

Pokud je soubor striktně větší než jedna velikost bloku, série diskových bloků s offsetem 2 souborůn MiB (n ≥ 0) a jeden blok přímo na konci souboru jsou hašovány pomocí CRC32 (polynomial 0xEDB88320 obrácen, 0x04C11DB7 normální). Poslední část série dvou mocností končí přísně více než jedna velikost bloku před koncem souboru, tj. mezi posledními dvěma bloky je vždy alespoň jeden nepřečtený bajt (pokud je jich tolik).[poznámka pod čarou 1] Blok na konci souboru může být kratší než jedna velikost bloku; začíná na nebo po jedné velikosti bloku do souboru. CRC se inicializuje pomocí smallhash a uloženy do smallhash.

Například:

offset 0 MiB, 300 KiB hash s MD5
offset 1 MiB, 300 KiB hash s CRC32
offset 2 MiB, 300 KiB hash ...
offset 4 MiB, 300 KiB hash ...
offset 8 MiB, 300 KiB hash ...
...
posledních 300 KiB souboru hašovaných pomocí CRC32

Nakonec bitový doplněk smallhash (stále nula pro soubory do 300 KiB) je XORed spolu s velikostí souboru v bajtech. 160bitový UUHash je nyní zřetězením 128bitového hash MD5 a konečným 32bitovým smallhash hodnota.

Testovací vektory

Jsou dány hashe (base64 a hex) pro řetězce různých délek, které obsahují pouze 0x00 nebo 0xFF bajtů:

Délka0x000xFF
Base64HexadecimálníBase64Hexadecimální
01B2M2Y8AsgTpgAmY7PhCfv //// 8 =D41D8CD98F00B204E9800998ECF8427E -FFFFFFFF1B2M2Y8AsgTpgAmY7PhCfv //// 8 =D41D8CD98F00B204E9800998ECF8427E-FFFFFFFF
1k7iFrf4NoInN9jSQT9Wfcf7 /// 8 =93B885ADFE0DA089CDF634904FD59F71-FEFFFFFFAFlP1PQrpD / 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

Všimněte si, že všechny řetězce, které mají kompletní blok MD5, mají stejnou 128bitovou předponu. U souborů, které mají stejný počet diskových bloků, se část CRC liší pouze z důvodu zahrnuté délky souboru (všechny diskové bloky jsou identické, nebo tomu tak nebylo). U souborů do 300 KiB lze délku souboru extrahovat z posledních čtyř bajtů hash; smallhash je ~ 0.

Sig2Dat

Název UUHash je odvozen od sig2dat nástroj, který vytváří URI odkazování na soubory na Kazaa. Tyto identifikátory URI mají formu:

sig2dat: // | Soubor: překvapení.mp3 | Délka: 5845871Bytes | UUHash: = 1LDYkHDl65OprVz37xN1VSo9b00 =

Vzhledem k tomu, že tohle URI formát není RFC kompatibilní, UUHash odkazuje na Base64 -kódování hash a ne samotný hash.

Poznámky

  1. ^ BitCollider / 0.4.0 implementoval to nevěrně

externí odkazy

  1. ^ Thomas Mennecke.Jak Overpeer dokázal poškodit data v síti FastTrack.2005.
  2. ^ MLDonkey zdrojový kód soubor src / utils / lib / fst_hash.c, vyvoláno 2014-08-20
  3. ^ zdrojový kód sig2dat soubor sig2dat.c, funkce GetHashWin32, vyvoláno 2014-08-20