Hash

A Programozás Wiki wikiből

Hash algoritmusok definíciója[szerkesztés]

A hash algoritusok egyirányú kódolási rutinok, amelyek a bemeneti adatból a következő feltételek teljesülése mellett képeznek kimeneti adatot:

  • Adott bemeneti adatból mindig ugyanazt a kimenetet adja.
  • A kimeneti adat egyértelműen utal a bemeneti adatra, de a kimeneti adatból nem állítható elő a bemeneti adat.
  • A bemeneti adat legkisebb változása is teljesen más kimenetet eredményez.

A hash algoritmusok felhasználási területei[szerkesztés]

Azonosítási rendszerek[szerkesztés]

A hash algoritmusok azon tulajdonsága, hogy a kimeneti adatból nem állítható elő a bemeneti adat, kiválóan alkalmassá teszi biztonságos azonosítási rendszerek fejlesztésére. Az ilyen rendszerek alapelve az, hogy a felhasználó kódolt jelszavát tároljuk el, bejelentkezéskor pedig a megadott jelszó hash kimenetét összehasonlítva a tárolt kóddal ellenőrizhetjük az azonosítási kísérlet érvényességét.

Betörésérzékelés[szerkesztés]

Mivel a hash algoritmusokra általában jellemző, hogy a bemeneti adat méretéhez képest a kimeneti adat elhanyagolhatóan rövid, fájlrendszerekben történő változások detektálására is használható. A fájlrendszer összes fájljának hash kimenetét tároljuk, majd újbóli ellenőrzés esetén a fájlra újra lefuttatjuk a hash algoritmust. Amennyiben a két kimenet egyezik, a fájl nem változott az utolsó ellenőrzés óta.

Digitális aláírás[szerkesztés]

Az interneten böngészve gyakran találhatunk olyan oldalakat, ahol a letölthető fájlok mellett megadják annak valamilyen hash algoritmus által generált kimenetét. Ha a letöltött fájlra lefuttatjuk az algoritmust, ellenőrizhetjük, hogy valóban a szerző által "aláírt" fájlt kaptuk -e meg.

A hash algoritmusok feltörésének lehetőségei[szerkesztés]

Brute force[szerkesztés]

Az idealizált hash algoritmus garantálható sikerrel kizárólag az ú.n. brute force módszerrel törhető fel. A módszer lényege, hogy az összes lehetséges bemeneti adatot teszteljük, amíg meg nem találjuk a megfelelőt. A módszer ellen azzal lehet védekezni, hogy a lehető legnagyobb skálát határozzuk meg a lehetséges bemeneti paraméterek listájaként.

Dictionary attack[szerkesztés]

Ez a módszer abban különbözik a brute force -tól, hogy a lehetséges jelszavak közül csak azokat teszteli, amelyek értelmes szavakból állnak. Ez egy ú.n. szótárfájl segítségével oldható meg, amely egy adott nyelv összes szavát tartalmazza. Az intelligens algoritmusok a szavakat kombinálva is tesztelik, illetve bizonyos betűket számokkal és szimbólumokkal helyettesítve is kipróbálnak ($ -> S, 3 -> E). A módszer ellen azzal védekezhetünk, ha csak bizonyos karaktereket tartalmazó karakterláncokat fogadunk el jelszóként.

További lehetőségek[szerkesztés]

Mivel az idealizált, tökéletes és hibátlan szoftver nem létezik, valószínűleg minden hash algoritmus tartalmaz olyan hibákat, amelyek kihasználásával egyéb módszerekkel is törhető.