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élka | 0x00 | 0xFF | ||
---|---|---|---|---|
Base64 | Hexadecimální | Base64 | Hexadecimální | |
0 | 1B2M2Y8AsgTpgAmY7PhCfv //// 8 = | D41D8CD98F00B204E9800998ECF8427E -FFFFFFFF | 1B2M2Y8AsgTpgAmY7PhCfv //// 8 = | D41D8CD98F00B204E9800998ECF8427E-FFFFFFFF |
1 | k7iFrf4NoInN9jSQT9Wfcf7 /// 8 = | 93B885ADFE0DA089CDF634904FD59F71-FEFFFFFF | AFlP1PQrpD / BygQnoFdilf7 /// 8 = | 00594FD4F42BA43FC1CA0427A0576295-FEFFFFFF |
2 | xBA / Ei0nZ3ydsUTK4TlKZv3 /// 8 = | C4103F122D27677C9DB144CAE1394A66-FDFFFFFF | qyoNKN5rd // dbHKv6tCZq / 3 /// 8 = | AB2A0D28DE6B77FFDD6C72AFEAD099AB-FDFFFFFF |
307199 (300 KiB - 1) | YK6 + Fj6S4MGzEC9H9Bn3gQBQ + / 8 = | 60AEBE163E92E0C1B3102F47F419F781-0050FBFF | I + QujFtxa9pBOt5X6NMGsgBQ + / 8 = | 23E42E8C5B716BDA413ADE57E8D306B2-0050FBFF |
307200 (300 KiB) | kK7e2ZIs + JRup4WGNUk3JP9P + / 8 = | 90AEDED9922CF8946EA7858635493724-FF4FFBFF | oBSYynx6vdDeUWtP5N4mAv9P + / 8 = | A01498CA7C7ABDD0DE516B4FE4DE2602-FF4FFBFF |
307201 (300 KiB + 1) | kK7e2ZIs + JRup4WGNUk3JHOg + S0 = | 90AEDED9922CF8946EA7858635493724-73A0F92D | oBSYynx6vdDeUWtP5N4mAv5P + wA = | A01498CA7C7ABDD0DE516B4FE4DE2602-FE4FFB00 |
614399 (600 KiB - 1) | kK7e2ZIs + JRup4WGNUk3JHCHqBQ = | 90AEDED9922CF8946EA7858635493724-7087A814 | oBSYynx6vdDeUWtP5N4mAqgX6Xs = | A01498CA7C7ABDD0DE516B4FE4DE2602-A817E97B |
614400 (600 KiB) | kK7e2ZIs + JRup4WGNUk3JGlfGn0 = | 90AEDED9922CF8946EA7858635493724-695F1A7D | oBSYynx6vdDeUWtP5N4mApKrf9g = | A01498CA7C7ABDD0DE516B4FE4DE2602-92AB7FD8 |
614401 (600 KiB + 1) | kK7e2ZIs + JRup4WGNUk3JGhfGn0 = | 90AEDED9922CF8946EA7858635493724-685F1A7D | oBSYynx6vdDeUWtP5N4mApOrf9g = | A01498CA7C7ABDD0DE516B4FE4DE2602-93AB7FD8 |
614402 (600 KiB + 2) | kK7e2ZIs + JRup4WGNUk3JGtfGn0 = | 90AEDED9922CF8946EA7858635493724-6B5F1A7D | oBSYynx6vdDeUWtP5N4mApCrf9g = | A01498CA7C7ABDD0DE516B4FE4DE2602-90AB7FD8 |
16777216 (16 MiB) | kK7e2ZIs + JRup4WGNUk3JN / b8qg = | 90AEDED9922CF8946EA7858635493724-DFDBF2A8 | oBSYynx6vdDeUWtP5N4mAt0YF2Y = | A01498CA7C7ABDD0DE516B4FE4DE2602-DD181766 |
17084416 (16 MiB + 300 KiB) | kK7e2ZIs + JRup4WGNUk3JN9r9qg = | 90AEDED9922CF8946EA7858635493724-DF6BF6A8 | oBSYynx6vdDeUWtP5N4mAt2oE2Y = | A01498CA7C7ABDD0DE516B4FE4DE2602-DDA81366 |
17084417 (16 MiB + 300 KiB + 1) | kK7e2ZIs + JRup4WGNUk3JN5r9qg = | 90AEDED9922CF8946EA7858635493724-DE6BF6A8 | oBSYynx6vdDeUWtP5N4mAtyoE2Y = | A01498CA7C7ABDD0DE516B4FE4DE2602-DCA81366 |
17391616 (16 MiB + 600 KiB) | kK7e2ZIs + JRup4WGNUk3JN + 7 + 6g = | 90AEDED9922CF8946EA7858635493724-DFBBFBA8 | oBSYynx6vdDeUWtP5N4mAt14HmY = | A01498CA7C7ABDD0DE516B4FE4DE2602-DD781E66 |
17391617 (16 MiB + 600 KiB + 1) | kK7e2ZIs + JRup4WGNUk3JNzVMqw = | 90AEDED9922CF8946EA7858635493724-DCD532AC | oBSYynx6vdDeUWtP5N4mAgS1uWk = | A01498CA7C7ABDD0DE516B4FE4DE2602-04B5B969 |
17391618 (16 MiB + 600 KiB + 2) | kK7e2ZIs + JRup4WGNUk3JN / VMqw = | 90AEDED9922CF8946EA7858635493724-DFD532AC | oBSYynx6vdDeUWtP5N4mAge1uWk = | 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
- ^ BitCollider / 0.4.0 implementoval to nevěrně
externí odkazy
- ^ Thomas Mennecke.Jak Overpeer dokázal poškodit data v síti FastTrack.2005.
- ^ MLDonkey zdrojový kód soubor src / utils / lib / fst_hash.c, vyvoláno 2014-08-20
- ^ zdrojový kód sig2dat soubor sig2dat.c, funkce GetHashWin32, vyvoláno 2014-08-20