Izračunana uspešna kolizija nad SHA-1
Matej Kovačič
23. feb 2017 ob 15:23:29
Zgostitveni algoritmi danes tvorijo osnovo varnosti na internetu. Uporabljajo se za zaščito gesel (hramba v obliki kontrolne vsote), kot pseudonaključni generator števil, pri generiranju naključnih imen datotek, za preverjanje integritete pri prenosu datotek (npr. v P2P omrežjih), za preverjanje integritete arhivskih datotek (tim. checksum), pri implementaciji digitalnega podpisa, časovnega žigosanja, overovitvi digitalnih potrdil, za digitalno podpisovanje datotek, gonilnikov ter seveda pri digitalni forenziki. Iz vsega tega je jasno, da morajo biti algoritmi za izračun kontrolnih vsot karseda varni.
To ne velja več za algoritem SHA-1.
Skupina raziskovalcev iz CWI Amsterdam in Google Research je namreč te dni objavila rezultate svoje raziskave, ki je pokazala, da je SHA-1 mogoče zlomiti tudi v praksi. Konkretno, raziskovalci so objavili dve PDF datoteki (prva in druga) z različno vsebino, a istim SHA-1 digitalnim podpisom.
Za izračun kolizije je sicer na običajnem enoprocesorskem računalniku potrebnih 110 let, a z uporabo 110 grafičnih procesorjev (GPU) je ta čas mogoče zmanjšati na eno leto. Z uporabo dodatnih GPU procesorjev pa seveda še na manj.
Podrobnosti o napadu so objavljene na spletni strani shattered.it, rešitev pa je uporaba novejših zgostitvenih algoritmov, na primer SHA-256 ali SHA-3.
Ker se SHA-1 marsikje še vedno uporablja pri HTTPS digitalnih potrdilih, brskalnik Google Chrome od različice 56 (izdana januarja 2017) spletne strani zaščitene z digitalnimi potrdili, ki za digitalno podpisovanje uporabljajo samo SHA-1 obravnava kot ne-varne. Brskalnik Firefox bo podobno funkcionalnost uvedel v bližnji prihodnosti. Na voljo je tudi orodje sha1collisiondetection, ki skuša zaznati kolizijski napad na SHA-1 v datotekah, in s katerim je mogoče preveriti integriteto datotek.
Velik problem pa predstavlja GIT, ki za preverjanje integritete podatkov na veliko uporablja SHA-1. Zato bi napadalec lahko teoretično postavil zlonamerno različico GIT skladišča, ki bi vsebovala programsko kodo z vgrajenimi stranskimi vrati, ta zlonamerna programska koda pa bi imela enako kontrolno vsoto kot neokužena različica.