SHA-2
Kiejtés
- IPA: [ ˈʃhɒ2] érvénytelen IPA-karakterek (2)
Főnév
- (matematika) A SHA-2 egy kriptográfiai hashfüggvény-család, amelyet az amerikai NSA (National Security Agency) fejlesztett ki, és a NIST (National Institute of Standards and Technology) adott ki 2001-ben. A cél az volt, hogy leváltsa a biztonsági hibákkal küzdő SHA-1 algoritmust, és erősebb, biztonságosabb alternatívát kínáljon a digitális aláírások, tanúsítványok, és adatvédelem területén.
Mi az a hashfüggvény?
Egy hashfüggvény egy olyan egyirányú matematikai művelet, amely egy tetszőleges hosszúságú bemeneti adatból egy fix hosszúságú kimenetet (ún. hash értéket, digestet) állít elő. A jó kriptográfiai hashfüggvény jellemzői:
- Determinált: Ugyanabból a bemenetből mindig ugyanaz a hash.
- Gyorsan számolható.
- Elvileg lehetetlen az eredeti adat visszafejtése a hashből.
- Kollízióálló: Két különböző bemenethez ne lehessen ugyanazt a hash értéket találni.
- Avalanche effektus: Egyetlen bit módosítása teljesen más hash értéket eredményez.
SHA-2 család tagjai
A SHA-2 család több különböző hosszúságú hash értéket előállító változatot tartalmaz:
- SHA-224 – 224 bites kimenet
- SHA-256 – 256 bites kimenet
- SHA-384 – 384 bites kimenet
- SHA-512 – 512 bites kimenet
- SHA-512/224 – 224 bites kimenet, SHA-512-alapokon
- SHA-512/256 – 256 bites kimenet, SHA-512-alapokon
A legelterjedtebbek közülük a SHA-256 és a SHA-512, mivel ezek biztonságosnak számítanak és széleskörű támogatottsággal bírnak.
Működési elv: SHA-256 példáján keresztül
A SHA-256 a következő lépésekből áll:
- Padding: A bemeneti adatot kiegészítik úgy, hogy a hossza osztható legyen 512-vel. Ez tartalmaz egy 1-est, sok 0-t, majd a végén az eredeti hosszúságot.
- Inicializáló értékek: 8 darab 32 bites „initial hash value” áll rendelkezésre, ezek a belső állapotot képviselik.
- Üzenettömbökre bontás: Az adatot 512 bites blokkokra osztják.
- Bővítés (message schedule): Az egyes blokkokat 64 darab 32 bites szóra bővítik.
- Körök (rounds): 64 körön keresztül történik a hash érték kiszámítása. Minden kör egy adott matematikai műveletsort tartalmaz (biteltolások, XOR, moduláris összeadás).
- Összeadás: Az új értékek hozzáadódnak az előző körök eredményeihez.
- Kimenet: A végső 256 bites hash érték előállítása.
A SHA-512 ugyanilyen elven működik, csak 64 bites műveletekkel és 80 körrel.
Miért fontos a SHA-2?
SHA-2 szerepe kulcsfontosságú a modern kriptográfiában:
- Digitális aláírásokban: Pl. PDF, e-mail, SSL/TLS tanúsítványok hitelesítésénél.
- Jelszókezelésben: A jelszavak hash értékét tárolják adatbázisban (ideálisan sózva és több körrel, pl. bcrypt, PBKDF2).
- TLS/SSL kapcsolat: HTTPS kommunikáció során a hitelesítési lánc és tanúsítványok SHA-2 hash-t használnak.
- Blockchain rendszerekben: A legtöbb kriptovaluta (pl. Bitcoin) a SHA-256-ot használja a blokk hash-ekhez és proof-of-work számításhoz.
SHA-1 és SHA-2 – Miért történt a váltás?
A SHA-1 hosszú évekig szabvány volt, de 2005-ben kriptográfiai gyengeségeket fedeztek fel benne. 2017-ben a Google kutatói kollíziót mutattak be („SHAttered” támadás), amivel két különböző PDF dokumentumhoz ugyanazt a SHA-1 hash-t tudták generálni. Ez végleg aláásta a SHA-1-be vetett bizalmat.
A SHA-2 ilyen típusú támadásokkal szemben jelenleg ellenállónak számít. A legjobb ismert támadások messze nem közelítik meg a gyakorlati kivitelezhetőséget, azaz nem éri meg megtörni.
Biztonság
A SHA-2 algoritmus jelenleg biztonságosnak számít:
- SHA-256 esetén:
- Kimenet hossza: 256 bit
- Preimage resistance: 2²⁵⁶ művelet (gyakorlatilag lehetetlen visszafejteni)
- Collision resistance: 2¹²⁸ művelet (birthday paradoxon miatt)
- Nincs ismert hatékony támadás, ami gyengítené a fenti határokat.
- A modern számítógépekkel sem valószínű, hogy egyhamar gyakorlatban megtörhető lesz.
SHA-2 vs SHA-3
A SHA-3 egy teljesen eltérő szerkezetű hash algoritmus (sponge konstrukció), amit a NIST 2015-ben szabványosított a SHA-2 mellett, nem helyette. SHA-3 akkor jöhet szóba, ha például valaki fél az NSA által tervezett algoritmusoktól vagy szükség van egy teljesen eltérő szerkezetű alternatívára.
Gyakorlati példák – Hash generálása
Linux terminálban egy fájl SHA-256 hash-ének kiszámítása:
sha256sum fajl.txt
Python példában:
import hashlib
data = b"Hello, world!"
hash_value = hashlib.sha256(data).hexdigest()
print("SHA-256:", hash_value)
Összegzés
A SHA-2 algoritmuscsalád a mai napig az egyik legmegbízhatóbb és legszélesebb körben használt hashfüggvény. Biztonsága, stabilitása és elterjedtsége miatt szinte minden kriptográfiai rendszerben megtalálható – a böngészőktől kezdve a blokkláncokon át a jelszókezelésig. Bár a jövőben a SHA-3 fokozatosan átveheti a helyét bizonyos alkalmazásokban, SHA-2 továbbra is a biztonság alappillére a digitális világban.