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