25 / 736SHA²

SHA-256

Digitální otisk dat

Z textu, souboru nebo bitcoinové hlavičky vytvoří krátký otisk. Jak to pomáhá odhalit změnu dat, co při tom hledají těžaři a proč hash není šifrování?

SHA-256 je přesně popsaný postup, který z dat vypočítá otisk zvaný hash. Stejný vstup vždy dává stejný výsledek, dlouhý 256 bitů: 32 bajtů, běžně zapsaných jako 64 hexadecimálních znaků. Bitcoin ho používá k propojování a ověřování dat i při těžbě. Otisk ale není zašifrovaná kopie původního obsahu.

Představte si, že vám někdo pošle soubor a jeho hash. Vlastním výpočtem můžete porovnat, zda stažená data odpovídají uvedenému otisku. I malá změna vstupu s velmi vysokou pravděpodobností změní celý výsledek. Otisk však sám neříká, kdo soubor vytvořil ani zda je bezpečný. Pokud útočník podstrčí soubor i jeho hash, vzájemně budou souhlasit. Proto záleží také na důvěryhodnosti zdroje kontrolní hodnoty. [1] [5]

Pro tři bajty ASCII abc, bez uvozovek a bez konce řádku, je výsledkem ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad. Nejde o náhodně vygenerované číslo: každá správná implementace dostane ze stejných bajtů právě tento výsledek. Když přidáte mezeru nebo konec řádku, měníte vstup. Odlišný hash pak neznamená chybu algoritmu. U textu proto záleží i na jeho kódování. [3]

Šifrování má umožnit obnovit zprávu pomocí klíče. SHA-256 takový klíč ani opačný postup nemá. To však nebrání zkoušet pravděpodobné vstupy: kdo tuší, že jste hashovali čtyřmístný PIN, může vyzkoušet všech 10 000 kombinací a porovnávat výsledky. Dlouhý hash tedy nedodá slabému tajemství chybějící entropii (tedy nepředvídatelnost vstupu). Bezpečnost závisí i na tom, kolik možností musí útočník skutečně prověřit. [5] [7]

Identifikátory bloků, txid (identifikátory transakcí) a spojování dvojic otisků v Merkle Tree (stromu propojených otisků) používají konstrukci SHA256(SHA256(data)). Druhý průchod zpracuje 32 surových bajtů prvního výsledku, nikoli jeho 64znakový textový zápis. Výstup má stále 256 bitů. Dvojí hashování je zde pravidlo protokolu, nikoli důkaz, že je jednoduché SHA-256 rozbité. Bitcoin používá i jiné konstrukce: například Taproot přidává ke vstupu předem určené značky, aby oddělil různé účely hashování. [2] [4] [6]

Těžař opakovaně mění povolené údaje v kandidátní hlavičce bloku a počítá její dvojitý SHA-256. Hledá výsledek, který jako číslo nepřesáhne stanovený target (cílovou hranici). Nedešifruje zprávu a nehledá něčí privátní klíč. Nalezení vhodné hlavičky vyžaduje mnoho pokusů; její ověření je rychlé. Hlavička odkazuje také na předchozí blok, takže změna staršího bloku naruší navazující odkazy. Full Node (uzel samostatně ověřující pravidla Bitcoinu) navíc kontroluje transakce a ostatní pravidla: samotný vyhovující hash neudělá neplatný blok platným. [4]

Možných zpráv je více než 256bitových otisků, takže některé různé vstupy nutně sdílejí stejný hash. Tomu se říká kolize. Podstatné je, zda ji dokážeme účelně najít. U ideálního 256bitového hashe stojí obecné hledání libovolné kolize řádově 2^128 pokusů; hledání vstupu k předem danému otisku řádově 2^256. Jsou to jiné úlohy. Nalezení kolize samo o sobě neodhaluje bitcoinový privátní klíč. Tato čísla také nejsou zárukou bezpečnosti celé peněženky či protokolu. [5]

SHA-256 je stavební součást, nikoli hotové řešení každého bezpečnostního problému. Je záměrně rychlé, a proto se samotné nehodí k ukládání lidských hesel: útočník by mohl rychle zkoušet další odhady. K tomu slouží speciální postupy odvozování z hesla, například s nastavitelnou výpočetní náročností. Podobně vlastní recept „něco zahashuji a mám bezpečný klíč“ neřeší původní náhodnost ani únik vstupu. Uživatel obvykle nemusí SHA-256 počítat ručně; měl by rozumět tomu, co ověřovaný otisk dokazuje a co už ne. [8] [7]

SHA-256 patří do rodiny SHA-2 a jeho postup popisuje NIST FIPS 180-4. Před výpočtem doplní vstup včetně informace o jeho délce a zpracovává jej po 512bitových úsecích, každý v 64 kolech. Tyto interní bloky mají 64 bajtů a nejsou bitcoinovými bloky. Bitcoinová hlavička má 80 bajtů; celý bitcoinový blok obsahuje navíc transakce. Číslo 256 v názvu označuje délku výsledného otisku, nikoli velikost bloku nebo privátního klíče. [1] [4]

Pro nejúplnější obraz čtěte toto heslo společně s Hash, Proof of Work, Block Header, Bitcoinová adresa, Merkle Tree, Bitcoin. Opačným směrem na něj odkazují také Hash, ASIC Miner, Hashrate, Nonce.

DOC · 001NIST FIPS 180-4: SHA-256Primární zdroj DOC · 002Bitcoin Core v29.0: hash constructionsPrimární zdroj DOC · 003Bitcoin Core v29.0: hash test vectorsPrimární zdroj DOC · 004Bitcoin Developer Reference — Block headers and Merkle treesPrimární zdroj DOC · 005NIST SP 800-107 Rev. 1 — Hash security propertiesPrimární zdroj DOC · 006BIP 340 — Tagged hashesPrimární zdroj DOC · 007RFC 4086 — Unpredictability and entropyPrimární zdroj DOC · 008NIST SP 800-63B-4 — Password storagePrimární zdroj
Revidováno: Primární zdroje · Nejde o investiční doporučení