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

AlgoritmusDĺžka výstupuStavNa čo sa smie použiť
MD5128 bitov / 32 znakovZlomený, CERT/CC odporúča nepoužívať (2008)Nanajvýš detekcia náhodnej zmeny, deduplikácia. Nie na overovanie pôvodu.
SHA-1160 bitov / 40 znakovZlomený (SHAttered 2017, Shambles 2020); NIST ukončuje do 31. 12. 2030Spätná kompatibilita so starými systémami. Nie na nové nasadenia.
SHA-256256 bitov / 64 znakovSchválený, FIPS 180-4Predvolená voľba na overovanie súborov aj podpisy.
SHA-512512 bitov / 128 znakovSchválený, FIPS 180-4To isté ako SHA-256; na 64-bitových procesoroch býva rýchlejší.
SHA3-256256 bitov / 64 znakovSchválený, FIPS 202Alternatí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

Prečítajte si aj: podvodné odkazy na stiahnutie · heslo na archív · bezpečné zdieľanie súborov

Pošlite súbor aj s kontrolným súčtom

Zadarmo, bez registrácie, do 200 MB. Súbory sa po zvolenej dobe samy zmažú.

Nahrať súbor zadarmo