MD5 vs SHA-1 vs SHA-2 - melyik a legbiztonságosabb titkosítási hash és hogyan ellenőrizhetők

Mi a hash funkció?

A hash függvény bemeneti értéket (például egy karakterláncot) vesz fel, és rögzített hosszúságú értéket ad vissza. Az ideális kivonatolási funkció a következő tulajdonságokkal rendelkezik:

  • nagyon gyors
  • a hash-értékek hatalmas tartományát adhatja vissza
  • egyedi kivonatot generál minden egyedi bemenethez (nincs ütközés)
  • nem azonos hash értékeket generál hasonló bemeneti értékekhez
  • A generált hash értékek eloszlásában nincs észlelhető minta

Természetesen nincs ideális kivonatolási funkció, de mindegyik célja, hogy a lehető legközelebb működjön az ideálishoz. Tekintettel arra, hogy a (legtöbb) kivonatfüggvény fix hosszúságú értékeket ad vissza, és ezért az értéktartomány korlátozott, ezt a korlátozást gyakorlatilag figyelmen kívül lehet hagyni. Például a 256 bites hash függvény által visszaadható lehetséges értékek száma nagyjából megegyezik az univerzum atomjainak számával.

Ideális esetben egy hash függvény gyakorlatilag nem ad ütközést - vagyis két különböző bemenet nem generálja ugyanazt a hash értéket. Ez különösen a kriptográfiai hash funkciók szempontjából fontos: a hash ütközéseket sebezhetőségnek tekintik.

Végül egy hash függvénynek kiszámíthatatlanul eltérő hash értékeket kell generálnia bármely bemeneti értékhez. Vegyük például a következő két nagyon hasonló mondatot:

1. "The quick brown fox." 2. "The quick brown fax." 

Összehasonlíthatjuk a két mondatból generált MD5 hash értékeket:

1. 2e87284d245c2aae1c74fa4c50a74c77 2. c17b6e9b160cda0cf583e89ec7b7fc22 

Két hasonló mondathoz két nagyon eltérő hash generálódott, ami mind a validálás, mind a kriptográfia szempontjából hasznos tulajdonság. Ez az eloszlás következménye: az összes bemenet hash-értékét egyenletesen és kiszámíthatatlanul kell elosztani a lehetséges hash-értékek teljes tartományában.

Közös hash funkciók

Számos hash függvény létezik, amelyeket széles körben használnak. Mindegyiket matematikusok és informatikusok tervezték. A további kutatások során egyeseknek vannak gyengeségei, bár mindegyiket elég jónak tartják a nem kriptográfiai alkalmazásokhoz.

MD5

Az MD5 hash függvény 128 bites kivonatolási értéket eredményez. A kriptográfiában való használatra tervezték, de az idő múlásával felfedeztek sebezhetőségeket, ezért már nem ajánlott erre a célra. Azonban továbbra is használják az adatbázis-particionálásra és az ellenőrző összegek kiszámítására a fájlátvitelek érvényesítésére.

SHA-1

Az SHA jelentése Secure Hash Algorithm. Az algoritmus első verziója az SHA-1 volt, később pedig az SHA-2 következett (lásd alább).

Míg az MD5 128 bites kivonatot állít elő, az SHA1 160 bites kivonatot (20 bájt). Hexadecimális formátumban ez egy 40 számjegyből álló egész szám. Az MD5-hez hasonlóan kriptológiai alkalmazásokhoz tervezték, de hamarosan kiderült, hogy vannak sebezhetőségei is. Mától már nem tekinthető kevésbé ellenállónak a támadásokkal szemben, mint az MD5.

SHA-2

Az SHA második verziójának, az úgynevezett SHA-2-nek sok változata van. Valószínűleg a leggyakrabban használt SHA-256, amelyet az Országos Szabványügyi és Technológiai Intézet (NIST) javasol az MD5 vagy az SHA-1 helyett.

Az SHA-256 algoritmus 256 bites vagy 64 hexadecimális számjegyű hash értéket ad vissza. Bár nem egészen tökéletes, a jelenlegi kutatások azt mutatják, hogy sokkal biztonságosabbak, mint az MD5 vagy az SHA-1.

Teljesítmény szempontjából az SHA-256 kivonat kiszámítása körülbelül 20-30% -kal lassabb, mint az MD5 vagy az SHA-1 kivonatoké.

SHA-3

Ezt a hash módszert 2015 végén fejlesztették ki, és még nem látták széles körű használatát. Algoritmusa nem kapcsolódik az elődje, az SHA-2 által használt algoritmushoz.

Az SHA3-256 algoritmus egy olyan változat, amely ugyanolyan alkalmazhatósággal rendelkezik, mint a korábbi SHA-256, és az előbbi kiszámítása valamivel hosszabb ideig tart, mint a későbbi.

Hash értékek használata az érvényesítéshez

A hash függvények tipikus használata ellenőrzési ellenőrzések végrehajtása. Az egyik gyakori használat a tömörített fájlgyűjtemények, például a .zip vagy .tar archív fájlok ellenőrzése.

Adott archívum és annak várható kivonatolási értéke (általában ellenőrző összegnek nevezik) elvégezheti saját kivonatszámítását annak igazolására, hogy a kapott archívum teljes és sértetlen.

Például létrehozhatok egy MD5 ellenőrző összeget egy tar fájlhoz a Unixban a következő parancsokkal:

tar cf - files | tee tarfile.tar | md5sum - 

Ha egy fájlhoz szeretné megkapni az MD5 kivonatot, használja a Get-FileHash PowerShell parancsot:

Get-FileHash tarfile.tar -Algorithm MD5 

A létrehozott ellenőrző összeg felkerül a letöltési oldalra, az archív letöltési link mellé. A vevő, miután letöltötték az archívumot, a következő parancs futtatásával ellenőrizheti, hogy helyesen jött-e rá:

echo '2e87284d245c2aae1c74fa4c50a74c77 tarfile.tar' | md5sum -c 

ahol a 2e87284d245c2aae1c74fa4c50a74c77 a létrehozott ellenőrző összeg, amelyet közzétettek. A fenti parancs sikeres végrehajtása egy ilyen OK állapotot generál:

echo '2e87284d245c2aae1c74fa4c50a74c77 tarfile.tar' | md5sum -ctarfile.tar: OK