V nejnovější verzi programovacího jazyka Golang 1.24 je již ve standardní knihovně SHA-3 a v tomto článku si ukážeme, k čemu je to dobré. Umí to mnohem více věcí, než staré SHA-2.
Kryptograficky silná funkce
Stejně jako SHA2, tak i SHA3 poskytuje velmi dobrou funkci o síle 128b, 256b a 512b. Pokud používáte SHA2, můžete rovnou přepnout na SHA3. Jedná se o standard FIPS 202.
Odolnost proti útoku prodloužením zprávy
Tady přichází obrovský update. Zatímco SHA-2 256b má vnitřní stav skutečně pouze 256b, tak pro útočníka je jednoduché prodloužit již existující zprávu (kterou vůbec nemusí znát), doplnit na konec podepisovaného souboru vlastní data (a tím třeba změnit obsah PDF souboru), tak v případě SHA3 je vnitřní stav funkce zpracováván 1600b. Tedy pokud je výstupem SHA3-256, tak nelze použít útok prodloužením zprávy, protože útočník nezná 1344b, takže nemůže udělat validní SHA3-256 podpis této podvržené zprávy.
Lze mít mnohem menší výstup, pokud není potřeba kryptografická kvalita
Dnešní 64b počítače velmi rychle pracují s 64b daty. Pokud potřebujeme jen velmi rychlý hash souboru, lze získat pouze 64b.
Pokud tuto hash potřebujeme třeba pro nalezení stejných souborů, tak pokud se vyskytnout stejné soubory s 64b haší, lze tyto soubory potom porovnat byte po byte. A tím skutečně bezpečně ověřit, zda se jedné o stejné soubory.
V mé DB je záznam o jednom souboru velký 512B, je tam 64b unikátní číslo, 64b hash, zbytek je jméno souboru. V tomto 512B bloku stále zbývá dost místa na další data, protože jména souborů jsou krátká. Tedy v mé DB souborů, kde jsou 2 miliony záznamů, je DB velká pouze 1GB. Což se vleze do paměti i RaspberyPi. I na jeho interní flash disk.
Rychlost
Zde je jediná nevýhoda. Takto velká 1600b funkce je pochopitelně pomalejší než předchozí SHA-2 256b. I tak na moderních CPU dosahuje rychlostí větší než 1GB/s. A to bohatě stačí. Dnešní NVMe disky sice umí číst až 7GB/s, ale deduplikace souborů se klidně spustí přes noc. Na na klasickém SATA SSD je rychlost stále jen 500MB/s. Takže disky jsou stále pomalejší než CPU.
Comments
Jeden komentář: „SHA-3 ve standardní knihovně Golangu“
[…] tomto článku navážeme na předchozí článek o SHA-3. Dnes si ukážeme, jak lze v Golangu snadno ukládat data na disk v komprimované […]