Ako overiť, že stiahnutý súbor je naozaj ten, ktorý mal prísť
Stiahnete inštalačku, zálohu alebo archív a otvorí sa vám polovica. Alebo sa neotvorí nič a program hlási „poškodený súbor". Otázka, ktorá príde vzápätí, znie: prišlo to celé a prišlo to od toho, od koho to malo prísť? Na jednu z týchto dvoch otázok existuje presná, dvojsekundová odpoveď, ktorú viete dať sami — kontrolný súčet. Na tú druhú kontrolný súčet sám o sebe nestačí a väčšina návodov na internete tento rozdiel zamlčuje. Tento text ukazuje obidve strany: presné príkazy, ktoré fungujú na Windowse, Linuxe aj macOS, a hranicu, za ktorou vás hash prestane chrániť.
Čo je hash a prečo zmena jedného bajtu prevráti celý výsledok
Hashovacia funkcia zoberie ľubovoľne veľký vstup — dvadsať bajtov aj dvadsať gigabajtov — a vyrobí z neho reťazec pevnej dĺžky. Pri SHA-256 je to vždy 256 bitov, teda 64 znakov v šestnástkovom zápise. Funkcia je deterministická: rovnaký vstup dá vždy rovnaký výstup, na akomkoľvek počítači a v akomkoľvek programe, ktorý ten istý algoritmus implementuje.
Zaujímavá je druhá vlastnosť. Ak vo vstupe zmeníte jediný bit, výstup sa nezmení „trochu" — zmení sa celý. Nasleduje ukážka na dvoch súboroch, ktoré sa líšia presne jedným bajtom (malé t oproti veľkému T v slove „test"):
$ sha256sum test.txt test2.txt 7259241f999ed4dacd311381bbcefa6db82b124f578ceb086514a2be88ac3182 *test.txt 1aead735c712a42ae47e6cc2cf86dcdf9570b51f54f484b244e7cf4916b6a891 *test2.txt $ cmp -l test.txt test2.txt 17 164 124
Výstup cmp hovorí, že rozdiel je na 17. bajte a inde nikde. Napriek tomu z pôvodného hashu nezostalo v tom druhom nič použiteľné: na rovnakej pozícii sa oba reťazce zhodujú len na štyroch zo 64 znakov — teda presne toľko, koľko by dala čistá náhoda pri dvoch nesúvisiacich šestnástkových reťazcoch. Táto vlastnosť sa volá lavínový efekt a je to presne dôvod, prečo sa hash dá použiť ako odtlačok súboru: nemusíte porovnávať dva gigabajty, stačí porovnať 64 znakov. Prevrátene to znamená aj to, že „skoro rovnaký" hash neexistuje. Buď sedí celý, alebo súbor nie je ten istý.
Tri príkazy, ktoré vypočítajú SHA-256
Príkazy nižšie boli spustené 5. 8. 2026 nad tým istým testovacím súborom test.txt, ktorý obsahuje text „zdielajsubor.sk test" ukončený novým riadkom. Všetky tri vrátili identický hash — to je celá pointa: algoritmus je jeden, nástroj si vyberáte podľa toho, čo máte poruke.
Linux a Git Bash na Windowse:
$ sha256sum test.txt 7259241f999ed4dacd311381bbcefa6db82b124f578ceb086514a2be88ac3182 *test.txt
Tento konkrétny výpis pochádza z Git Bash na Windowse a hviezdička pred názvom súboru v ňom nie je chyba ani preklep — podľa manuálu GNU coreutils označuje, že súbor bol čítaný v binárnom režime. Binárny režim je predvolený na systémoch, ktoré binárne a textové súbory rozlišujú, teda aj na Windowse. Na Linuxe predvolený nie je, takže tam ten istý príkaz vypíše medzi hashom a názvom dve medzery namiesto medzery a hviezdičky. Na samotný hash to nemá vplyv, líši sa len značka vo výpise. Na macOS sa sha256sum štandardne nedodáva, príkaz je tam shasum -a 256 test.txt.
Windows, klasický príkazový riadok. Nástroj certutil je súčasťou systému, netreba nič inštalovať; podľa dokumentácie Microsoftu prepínač -hashfile „vygeneruje a zobrazí kryptografický hash nad súborom":
> certutil -hashfile test.txt SHA256 SHA256 hash of test.txt: 7259241f999ed4dacd311381bbcefa6db82b124f578ceb086514a2be88ac3182 CertUtil: -hashfile command completed successfully.
Windows, PowerShell:
> Get-FileHash -Algorithm SHA256 test.txt Algorithm : SHA256 Hash : 7259241F999ED4DACD311381BBCEFA6DB82B124F578CEB086514A2BE88AC3182
Podľa dokumentácie Microsoftu (overené 5. 8. 2026) je SHA-256 predvolený algoritmus Get-FileHash, takže parameter -Algorithm môžete vynechať. Prijímané hodnoty sú SHA1, SHA256, SHA384, SHA512 a MD5.
Pozor na veľké a malé písmená
Všimnite si posledné dva výpisy. PowerShell vypisuje hash veľkými písmenami, certutil aj sha256sum malými. Je to ten istý hash. Šestnástková sústava používa číslice 0 až 9 a písmená a až f a je jedno, či ich zapíšete ako a alebo A — hodnota je rovnaká.
Toto je najčastejší dôvod, prečo si ľudia myslia, že im kontrola nevyšla. Ak porovnávate očami, ignorujte veľkosť písmen. Ak porovnávate strojovo, prevoďte obidva reťazce na rovnaký tvar. V PowerShelli sa to dá jedným riadkom, ktorý vráti True alebo False:
> (Get-FileHash test.txt).Hash -eq "7259241f999ed4dacd311381bbcefa6db82b124f578ceb086514a2be88ac3182" True
Operátor -eq je v PowerShelli pri reťazcoch štandardne necitlivý na veľkosť písmen, takže porovnanie prejde bez ohľadu na to, v akom tvare hash od vydavateľa dostanete.
Integrita nie je pravosť
Tu sa väčšina návodov končí a tu začína najdôležitejšia časť. Kontrolný súčet vie odpovedať na dve rôzne otázky a rieši spoľahlivo len jednu z nich.
Integrita znamená: prišiel súbor celý a nepoškodený? Prerušené sťahovanie, chybný sektor na disku, poškodený USB kľúč, FTP klient, ktorý poslal binárku v textovom režime. Na toto hash funguje dokonale a bez akýchkoľvek podmienok. Ak sa hash zhoduje, dáta sú bajt po bajte totožné s tým, čo hashoval odosielateľ.
Pravosť znamená: pochádza súbor naozaj od toho, kto ho tvrdí? A tu prichádza problém, ktorý sa dá zhrnúť jednou vetou: ak je hash zverejnený na tej istej stránke ako súbor, útočník, ktorý dokáže vymeniť súbor, dokáže vymeniť aj hash. Kto sa dostane na server a nahradí inštalačku podvrhnutou verziou, prepíše vedľa nej aj riadok s kontrolným súčtom. Kontrola potom vyjde a nepovie vám nič — okrem toho, že ste stiahli presne ten súbor, ktorý tam útočník položil.
Hash zverejnený vedľa súboru teda rieši prenos, nie dôveru. Aby riešil aj dôveru, musí byť viazaný na niečo, čo útočník ovládnutím webservera nezískal. V praxi sa to robí dvoma spôsobmi. Prvý: hash získate iným kanálom než súbor — od odosielateľa cez správu, telefonicky, z inej domény. Druhý, ktorý používajú distribútori softvéru: zoznam hashov je podpísaný kryptografickým kľúčom. Debian to popisuje ako dvojkrokový postup — najprv sa overí súčet obrazu proti súboru SHA256SUMS, potom sa overí podpis samotného súboru so súčtami proti verejnému kľúču projektu. Bez toho druhého kroku je kontrola len kontrolou prenosu.
Prečo MD5 a SHA-1 už na overovanie nestačia
Celý princíp stojí na predpoklade, že je nemožné vyrobiť dva rôzne súbory s rovnakým hashom. Takej dvojici sa hovorí kolízia. Pri MD5 aj SHA-1 tento predpoklad padol.
MD5. CERT Coordination Center pri Carnegie Mellon University vydal 31. 12. 2008 upozornenie VU#836068 s jednoznačným odporúčaním nepoužívať algoritmus MD5 a považovať ho za kryptograficky zlomený a nevhodný na ďalšie použitie. Podnetom bola vtedajšia demonštrácia, pri ktorej výskumníci vyrobili podvrhnutý SSL certifikát vydávajúci sa za dôveryhodnú certifikačnú autoritu. MD5 nie je medzi hashovacími funkciami schválenými NIST — tie sú definované v FIPS 180-4 (SHA-1 a rodina SHA-2) a FIPS 202 (rodina SHA-3).
SHA-1. Dňa 23. 2. 2017 zverejnili výskumníci z CWI Amsterdam a Google útok s názvom SHAttered — prvú skutočnú kolíziu SHA-1. Vyrobili dva viditeľne odlišné súbory PDF s rovnakým SHA-1 hashom 38762cf7f55934b34d179ae6a4c80cadccbb7f0a. Podľa autorov si to vyžiadalo približne deväť triliónov výpočtov SHA-1, čo zodpovedá zhruba 6 500 rokom procesorového a 110 rokom grafického času. To ešte nebol útok pre bežného útočníka. V januári 2020 však Gaëtan Leurent a Thomas Peyrin publikovali útok „SHA-1 is a Shambles", ktorý zvládol kolíziu so zvoleným prefixom — teda nad dvoma vopred danými začiatkami súborov — a náklady odhadli na rádovo desiatky tisíc dolárov výpočtového času v cloude. Prakticky to predviedli na podvrhnutí PGP kľúča.
NIST na to reagoval: SHA-1 sa už nesmie používať na generovanie digitálnych podpisov a NIST oznámil, že do 31. 12. 2030 ukončí jeho používanie na kryptografickú ochranu vo všetkých aplikáciách. Dokumentácia Microsoftu k Get-FileHash to formuluje prakticky: MD5 a SHA1 by sa mali používať len na jednoduchú kontrolu zmeny a nie na súbory, ktoré potrebujú ochranu pred útokom alebo manipuláciou.
Preložené do bežnej reči: ak vám ide o to, či sa súbor cestou nepokazil, MD5 aj SHA-1 to stále spoľahlivo odhalia — náhodné poškodenie kolíziu nevyrobí. Ak vám ide o to, či niekto súbor zámerne nevymenil, na obidva sa spoliehať nemôžete.
Ktorý algoritmus na čo
| Algoritmus | Dĺžka výstupu | Stav | Na čo sa smie použiť |
|---|---|---|---|
| MD5 | 128 bitov / 32 znakov | Zlomený, CERT/CC odporúča nepoužívať (2008) | Nanajvýš detekcia náhodnej zmeny, deduplikácia. Nie na overovanie pôvodu. |
| SHA-1 | 160 bitov / 40 znakov | Zlomený (SHAttered 2017, Shambles 2020); NIST ukončuje do 31. 12. 2030 | Spätná kompatibilita so starými systémami. Nie na nové nasadenia. |
| SHA-256 | 256 bitov / 64 znakov | Schválený, FIPS 180-4 | Predvolená voľba na overovanie súborov aj podpisy. |
| SHA-512 | 512 bitov / 128 znakov | Schválený, FIPS 180-4 | To isté ako SHA-256; na 64-bitových procesoroch býva rýchlejší. |
| SHA3-256 | 256 bitov / 64 znakov | Schválený, FIPS 202 | Alternatíva k SHA-2 s odlišnou vnútornou konštrukciou. |
Ak nemáte dôvod na iné, vyberte SHA-256. Je predvolený v PowerShelli, dostupný v certutil aj v sha256sum a je to formát, v ktorom vydavatelia softvéru súčty najčastejšie publikujú.
Kontrola viacerých súborov naraz
Pri jednom súbore stačí porovnať očami. Pri zálohe s tristo súbormi nie. Nástroje z rodiny sha256sum vedia hashe zapísať do súboru a neskôr ich hromadne overiť. Najprv sa vyrobí zoznam:
$ sha256sum *.zip > SHA256SUMS
Na druhej strane, po prenose, sa zoznam skontroluje prepínačom -c:
$ sha256sum -c SHA256SUMS
Podľa manuálu GNU coreutils tento režim nepočíta nové súčty, ale načíta uložené a porovná ich so skutočným obsahom súborov. Vypíše riadok na každý súbor, pri nezhode označí súbor ako neúspešný, na chybový výstup vypíše varovanie a skončí s nenulovým návratovým kódom — čo sa hodí, ak kontrolu voláte zo skriptu.
Zhrnutie postupu
Súbor stiahnite a hash si vypočítajte tým nástrojom, ktorý máte poruke — výsledok je rovnaký. Porovnajte ho s hodnotou od odosielateľa a ignorujte pritom veľkosť písmen. Ak sedí, prenos bol v poriadku. Ak nesedí, súbor stiahnite znovu; opakovaná nezhoda znamená, že problém nie je náhodný. A na záver si položte otázku, odkiaľ ten hash máte: ak z tej istej stránky ako súbor, overili ste prenos, nie pôvod. Pri softvéri, ktorý budete spúšťať s právami správcu, si dohľadajte podpísaný zoznam súčtov alebo si nechajte hash poslať iným kanálom.
Ak si súbory posielate s kolegami alebo klientmi, oplatí sa hash pripojiť priamo do správy, v ktorej posielate odkaz na stiahnutie — príjemca tak dostane súčet inou cestou než samotné dáta. Rovnako to funguje pri službách na dočasné zdieľanie súborov, medzi ktoré patrí aj zdielajsubor.sk: odkaz na stiahnutie a kontrolný súčet poslané dvoma rôznymi kanálmi dajú príjemcovi to, čo mu odkaz sám osebe dať nevie — istotu, že rozbalil presne ten súbor, ktorý ste zabalili vy.
Zdroje
- SHAttered — CWI Amsterdam a Google (2017) — dátum zverejnenia, kolidujúce PDF súbory, spoločný SHA-1 hash a výpočtová náročnosť útoku.
- SHA-1 is a Shambles — Leurent, Peyrin (2020) — kolízia so zvoleným prefixom, odhad nákladov a demonštrácia na PGP kľúči.
- NIST: Transitioning Away from SHA-1 for All Applications — termín 31. 12. 2030 a zákaz SHA-1 pri generovaní podpisov.
- NIST CSRC — Hash Functions — zoznam schválených hashovacích funkcií, FIPS 180-4 a FIPS 202, dĺžky výstupov.
- CERT/CC Vulnerability Note VU#836068 — MD5 vulnerable to collision attacks — odporúčanie nepoužívať MD5 a kontext podvrhnutého SSL certifikátu.
- Microsoft Learn — Get-FileHash — predvolený algoritmus SHA256, zoznam prijímaných algoritmov a upozornenie k MD5 a SHA1.
- Microsoft Learn — certutil — popis a syntax prepínača -hashfile.
- GNU coreutils — cksum common options — význam hviezdičky pri binárnom režime, jeho predvolenosť podľa systému a správanie prepínača -c/--check pri nezhode.
- Debian — Verifying authenticity of Debian CDs — dvojkrokové overenie: kontrolný súčet plus podpis súboru so súčtami.
Prečítajte si aj: podvodné odkazy na stiahnutie · heslo na archív · bezpečné zdieľanie súborov