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
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:
-
A PBKDF2 egy “só” paramétert vesz fel, amellyel biztosíthatja, hogy a kimenetek egyediek legyenek, még akkor is, ha a bemeneti jelszavak nem . (A só használata meghiúsítja az előzetes számításon alapuló támadásokat is, mivel a támadó nem kezdheti el hasznos módon a kitalált jelszó kivonását, mielőtt megismerné a sót.) Az SHA-512 önmagában nem rendelkezik só fogalmával, bár ekvivalens hatást lehet elérni pl. a só előkészítésével a jelszóhoz.
-
Az SHA-512 mindig 512 bites kimenetet állít elő (innen a neve), bár mindig rövidebbre csonkíthatja, ha nincs szüksége a teljes 512 bitre. A PBKDF2 elvileg bármilyen hosszúságú kimenetet képes előállítani, bár a gyakorlatban több belső hash kimenet előállítására használja. bit nem ajánlott .
*) 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.
PBKDF2(HMAC_SHA512, password, ...)
-re.