Kriptográfiai hash-függvény
A hash-függvények (kiejtése: [hes], magyarul hasítófüggvények) olyan informatikában használt eljárások, amelyekkel bármilyen hosszúságú adatot adott hosszúságra képezhetünk le. Az így kapott véges adat neve hash/hasító érték. Ezek az algoritmusok az 1980-as évek legvégén az elektronikus aláírás megjelenésével váltak szükségessé. A hasítófüggvények a számítástechnikában, elsősorban a tároló technikában, már az 1950-es évek elején megjelentek.[1]
Előállítása
szerkesztésMivel a hash képzése összefonódik az informatikai technológiákkal, így jellemzően byte vagy néhány byte méretű csomagokra vonatkozik a hash-algoritmus, amelyet a kiindulási adaton ismételve kapható a kívánt eredmény. A hash-algoritmusban mindig definiálva van, hogy mit kell kezdeni azokkal az esetekkel, amikor töredék csomaggal kellene dolgozni. Legtöbbször valamilyen rögzített értékkel (pl. 0x00 feltöltő byte) kiegészítés történik mindaddig, amíg egész csomag nem képződik. Alapvető elvárás, hogy a hash-algoritmus csak a bemenő adat bájtjaitól és azok sorrendjétől függjön, tehát determinisztikus/előre meghatározott legyen.
A hash minősége
szerkesztésA végtelenből végesbe történő leképzés miatt egyértelmű, hogy eltérő fájltartalom is eredményezhet azonos hash-kulcsot. A kellően nagyra választott hash-kulcs esetén azonban ilyen ütközés rendkívül ritka.
A hash-algoritmus minőségi jellemzője a kulcsszélességen túl a következő feltételek teljesülésével mérhető le:
- a kiindulási adathoz tetszőleges byte hozzáírásával a hash-kulcs véletlenszerűen megváltozik
- a kiindulási adatból tetszőleges byte elvételével (eltekintve attól, ha a feltöltő értékkel megegyező tartalom kerül elvételre) a hash-kulcs véletlenszerűen megváltozik
- két (nem egyező) byte felcserélésével a hash-kulcs véletlenszerűen megváltozik
- tetszőleges byte átírásával a hash-kulcs véletlenszerűen megváltozik
- egy ismert tartalom nem módosítható algoritmussal meghatározható módon úgy, hogy a kulcsa a kívánt értékre változik meg
A hash-kulcs véletlenszerű változását minden részének (tehát bitjeinek) is teljesíteniük kell. A hash minőségét a kulcs szélességét meghaladó adattartalomra lehet csak érdemben vizsgálni, ennél kisebb méretre még túlzottan sok feltöltő érték befolyásolhatja az eredményt.
A hash felhasználása
szerkesztésA hash kiválóan használható kriptográfiai és biztonságtechnikai területen.
Ha eltekintünk attól a csekély valószínűségtől, hogy két különböző fájl azonos hasht produkálhat, akkor alkalmazható fájlok eredetiségének vizsgálatára. Ismert állapotban elkészítve fájlok hash-kulcsát szavatolható, hogy az esetleges megváltozás utólag megállapítható, tehát a fájlok integritása ellenőrizhető. Két eltérő nevű, de azonos tartalmú fájl egyezősége megállapítható.
Jellemzően a hash mellett a méret is tárolásra kerül, illetve a megbízhatóság fokozható 2 különböző hash-algoritmussal készített kulcs tárolásával.
A legelterjedtebb kriptográfiai hasítóalgoritmusok
szerkesztésSHA
szerkesztésAz SHA (Secure Hash Algorithm) az Egyesült Államok Nemzeti Szabvány és Technológia Hivatala (NIST) által kibocsátott szabványos eljárások összefoglaló elnevezése. (SHA-1, SHA-224, SHA-256, SHA-384 és SHA-512)[2] Az első változatát 1993-ban fejlesztették az NSA felügyelete alatt. Ez 160 bit hosszúságú üzenetkivonatot (message digest) képez amelyet ezt követően a DSA elektronikus aláírás algoritmusban használhatunk. Az SHA-512 hasonló elvek alapján működik mint az SHA-1 de lényegesen nagyobb adat mennyiséget képes kezelni. A bemenete 2128-1 bit hosszúságú lehet. Ezt egyébként, a feldolgozás során 1024 bites blokkokra osztja. A kapott hasító érték összességében 512 bit hosszúságú és 8 db 64 bites blokk alkotja. A bitcoin digitális fizetőeszköz és klónjai SHA-256 algoritmust használnak.[3]
Message Digest
szerkesztésA Message Digest (magyarul: üzenetkivonatoló) több különféle hasító algoritmus vagy üzenetkivonatoló közös elnevezése. A legismertebbet, az MD2-t 1989-ben dolgozta ki Ronald L. Rivest az MIT-ben. Az MD algoritmus az SHA algoritmushoz hasonlóan működik: tetszőleges hosszúságú bemenetből 128 bit hosszúságú hasító értéket generál. Az MD2-t eredetileg 8 bites gépekre optimalizálták, az újabb változatok (MD4, MD5) már 32 bites rendszerekhez készültek. Az SHA-hoz hasonlóan a bemenetet blokkokba rendezi 16 bites blokkokat használva.
RIPEMD
szerkesztésA RIPEMD (angolul: RACE Integrity Primitives Evaluation Message Digest) hasító függvényt a RIPE konzorcium (Hans Dobbertin, Anton Bosselaers és Bart Preneel) alkotta meg 1996-ban. Eredetileg 128 bites hasító értéket szolgáltatott majd az igényeknek megfelelően ezt 160 bitre növelték (RIPEMD-160).
Jegyzetek
szerkesztés- ↑ Donald Knuth. The Art of Computer Programming, volume 3, Sorting and Searching, 506–542. o. (1973)
- ↑ Federal Information Processing Standards Publication 180-2 (SECURE HASH STANDARD)
- ↑ Bitcoin Bázis
Források
szerkesztés- Buttyán, Levente, Vajda István. Kriptográfia és alkalmazásai. Typotex, 99–118. o. (2004. november 2.). ISBN 963-9548138
- Kathi Ferenc: Hash-függvények. szakdolgozat. Debreceni Egyetem Informatikai kar, 2009. [2013. április 1-i dátummal az eredetiből archiválva]. (Hozzáférés: 2011. október 28.)