Mi a ' különbség a PBKDF és az SHA között, és miért kell ezeket együtt használni?

Az utóbbi időben olvastam egy keveset a hash-ról és az AgileBits szerint , új tárolófájljukban az “ SHA512 a PBKDF2-ben ” szót használják.

A Wikipédiában mindkét nevet kerestem, és tudom, hogy a PBKDF2 kulcsfontosságú levezetési függvény, az SHA pedig kriptográfiai hash funkció, de nem igazán tudom megérteni a különbséget, és miért használják mindkettőt együtt a másik belsejében.

Valaki megmagyarázná ezt egy kriptográfiai tapasztalattal nem rendelkező személy számára? (Feltételezhetjük, hogy csak matematikáról tudok, ha szükséges).

Megjegyzések

  • A PBKDF2 tervezése szerint sokkal lassabb, mint az SHA, tehát jobb alkalmas jelszavak hasítására, mert sokkal hosszabb ideig tart egy szótár vagy egy erőszakos támadás.
  • @puzzlepalace, így alapvetően ugyanezt teszik, és a PBKDF2 (SHA (jelszó)) kompozíciót használják, így hosszabb ideig tart támadók?
  • Nos, a legtöbb esetben a PBKDF2 egy primitívet használ HMAC mint psuedo-random függvény, amely viszont egy kriptográfiai hash függvényt használ benne ‘ s belső, ebben az esetben SHA512. Tehát az összetétel valóban jobban hasonlít a PBKDF2(HMAC_SHA512, password, ...) -re.
  • A PBKDF2 az autó, a HMAC a motor, az SHA512 a dugattyú
  • Utóbbi A korábbi kérdésemre adott válaszom része is foglalkozik ezzel.

Válasz

Az SHA-512 egy kriptográfiailag biztonságos hash t, a PBKDF2-t jelszóalapú kulcs-levezetési függvénynek hívjuk. Ha az eredményül kapott titkot nem kulcsként, hanem hash értékként használják, akkor jelszó kivonat nak is hívják. A jelszó kivonat abban különbözik a biztonságos hashtól, hogy sót és munkafaktor / iteráció számot tartalmaz.

Mind a kriptográfiai, mind a jelszó kivonatok egyike azoknak a funkcióknak, amelyek rövid, rögzített méretű kimenet létrehozására szolgálnak egy adott bemenet. A jelszó kivonatának bevitele a jelszó és a só lesz. A só méretét és az iterációs számot általában konfigurációs paramétereknek tekintik; természetesen mindkettő befolyásolja a jelszó kivonatának kimenetét.

A jelszó kivonatok általában az álvéletlenszerű függvények vagy a PRF-ekre épülnek. A PRF szokásos formája egy HMAC vagy Hash alapú üzenet-hitelesítési kód, amely viszont belsőleg hash-t használ. Ha hash-alapú PRF-eket, például HMAC-t használnak, akkor a használt hash típusa / mérete gyakran konfigurálható. A jelszó-kivonatokat azonban nem kell hash-ekkel felépíteni. Bármely más PRF, például a szimmetrikus rejtjeleken alapuló, megteheti. A bcrypt például a Blowfish tetejére épül, egy blokkos titkosítás.

A jelszavak kivonatához só szükséges, hogy az azonos jelszavak ne azonos térképre kerüljenek. Ezért megakadályozzák a szivárványos táblákat is (előre kiszámított jelszót tartalmaznak / hash-párok). Hasznosak továbbá egy munkafaktor / iterációszám, így a támadónak több munkát kell végeznie az egyes lehetséges jelszavak kivonatának kiszámításához. Erre azért van szükség, mert a legtöbb jelszó nem elég véletlenszerű. Munkafaktor nélkül a támadó hatalmas mennyiségű lehetséges jelszót tudna tesztelni nyers erővel vagy szótári támadással.

Megjegyzések

  • sokkal több információ itt … mégsem fér el a divízióban a választérben.

Válasz

A válaszok átfogalmazásához egy korábbi kérdésre , PBKDF2 egy általános, magas szintű algoritmus, amely belsőleg meghív egy pszeudorandom függvényt (PRF) a bemenet feldolgozásához. A PBKDF2 specifikáció nem ír elő semmilyen konkrét PRF-et, így az implementátorok szabadon választhatnak tetszőleges PRF-et (amennyiben megfelel a biztonságos PRF definíciójának, és el tudják fogadni a PBKDF2 által adott bemenetet).

Amint előfordul, messze a PBKDF2 PRF-jének legelterjedtebb választása a HMAC , amely egy másik magas szintű konstrukció, amelyet belsőleg használnak egy kriptográfiai hash függvény . Ismételten a HMAC specifikáció nem ír elő különösebb kivonatolási funkciót, ezért a kivitelezők szabadon választhatnak bármilyen kivonatot. Valószínűleg manapság a leggyakoribb választás a SHA-2 hash család egyike, amely az SHA-256-ot és az SHA-512-et tartalmazza.

Tehát az “SHA512 a PBKDF2-n belül” szinte biztosan azt jelenti, hogy “a PBKDF2-t HMAC-szal, mint PRF-ként használják, és az SHA-512-et használják a hash-ként a HMAC-ban. Ránézésre ez a PBKDF2-HMAC-SHA512-gyel tűnhet, mintha valami nagyon hasonlót csinálna, mint az egyszerű SHA-512: mindkettő tetszőleges jelszót vesz be bemenetként, és álsz Random-bites húrokká alakítja, ahonnan az eredeti jelszó nem tud könnyen rekonstruálhatók.Valójában azonban több különbség van, amelyek közül a legfontosabbak:

  • Az SHA-512 gyors. Nagyon gyors. A PBKDF2 kiszámítása szándékosan lassú, lassúsága pedig az iterációszám paraméter beállításával szabályozható.

  • A sebesség közvetlen következményeként az SHA A -512 önmagában kiszolgáltatott a jelszó kitalálására irányuló támadásoknak az olyan szoftverek segítségével, mint a hashcat , amelyek egyszerűen sok jelszót generálnak és kivonatolnak, amíg meg nem találnak egy megfelelő hasht. . Egyetlen modern CPU másodpercenként több millió jelszót hasíthat el, a GPU-k pedig még gyorsabbak.

Ezenkívül még néhány kisebb különbség van a megjegyzéssel:


*) Az eredeti HMAC-definíció és biztonsági bizonyítékok hatékonyan feltételezik, hogy a használt hash függvény egy adott Merkle – Damgård hash függvény néven ismert típus. Ahogy ez megtörténik, az elmúlt évtizedek összes legnépszerűbb kriptográfiai kivonatoló funkciója, beleértve az SHA-2 családot is, ilyen típusú volt, így ez a korlátozás a gyakorlatban nem sok kérdés. Ez fokozatosan megváltozhat az SHA-3 (más néven Keccak) szabványosításával, amely nem Merkle – Damgård hash, de kényelmesen, saját biztonsági követeléssel érkezik a HMAC-SHA3-hoz .

**) Ez rendben van és a hagyományos választás, amennyire csak lehet. Nem olyan ellenálló a GPU-alapú és más párhuzamos támadásokkal szemben, mint a modernebb KDF-ek, például a scrypt vagy Argon2 lenne, de még mindig sokkal jobb, mint a sima régi iterálatlan hash. Ennek ellenére a biztonság megfelelő értékeléséhez ismernünk kell a PBKDF2-hez használt iterációs számot is. Sajnos sok PBKDF2 megvalósítás általában a régi “ajánlott minimumot”, 1000 ismétlést alkalmazza, ami manapság alig több, mint egy sebességdobó. Személy szerint egy modern CPU-n inkább az 1 000 000 vagy 1 000 000 000 iterációhoz közelebb eső dolgot választanám .

Megjegyzések

  • Kérdés: A PBKDF2-et csak a találgatások számának lassítására használják (ha bruteforce)? Vagy van más sajátosság, amelyet szem előtt kell tartani?
  • @NaveenNiraula : A nyers erő kitalálásának lelassítása mellett a PBKDF2 másodlagos célja, hogy tetszőleges hosszúságú és formátumú jelszavakat konvertáljon egyenletesen álvéletlenszerű karakterláncokká. De ezt csak egyszerű hasítással is meg lehet valósítani. A sóparaméter lehetővé teszi több különálló kulcs levezetését ugyanabból. jelszót, és megakadályozza az előre kiszámított szótárak, például a ” szivárványos táblázatok ” használatával történő egyes támadásokat. De még egyszer, ha nem ‘ nincs szükség a PBKDF2 nyers erő kitaláló védelmére, ehhez egyszerűen használhat egyszerű HMAC-ot, vagy akár összefűzheti a sót a jelszóval a kivonás előtt azt.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük