Kulcsszármazási funkció - Key derivation function

A titkosításban a kulcsderivatciós függvény ( KDF ) egy titkosítási kivonatfüggvény, amely egy vagy több titkos kulcsot egy titkos értékből, például egy főkulcsból, egy jelszóból vagy egy jelszóból származtat le egy pszeudo -véletlen függvény segítségével . A KDF -ek használhatók arra, hogy a kulcsokat hosszabb kulcsokká nyújtsák, vagy a kívánt formátumú kulcsokat szerezzék be, például a Diffie – Hellman kulcscsere eredményeként létrejövő csoportelemet szimmetrikus kulcsgá alakítják át az AES -vel való használatra . A kulcsos kriptográfiai kivonatfüggvények népszerű példái a pszeudo -véletlen függvényeknek, amelyeket kulcsszármazásra használnak.

Kulcsszármazás

A KDF eredeti használata a kulcsszármaztatás, a kulcsok titkos jelszavakból vagy jelszavakból történő előállítása. A témára vonatkozó variációk a következők:

  • Nem titkos paraméterekkel együtt egy vagy több kulcs levezetésére egy közös titkos értékből (amelyet néha " kulcsdiverzifikációnak " is neveznek ). Az ilyen használat megakadályozhatja, hogy a származtatott kulcsot megszerző támadó hasznos információkat szerezzen a bemeneti titkos értékről vagy bármely más származtatott kulcsról. KDF is használható annak biztosítására, hogy a származtatott kulcsoknak más kívánatos tulajdonságai is legyenek, például elkerüljék a "gyenge kulcsokat" bizonyos speciális titkosítási rendszerekben.
  • Többpárti kulcs-megállapodási protokollok részeként . Ilyen kulcs-származtatási függvények például az IEEE Std 1363-2000 szabványban meghatározott KDF1 és az ANSI X9.42 hasonló funkciói.
  • Kulcsok származtatása titkos jelszavakból vagy jelszavakból ( jelszóalapú KDF ).
  • Levezetni kulcsait különböző hosszúságú azok: egyik példája KDFs tervezett erre a célra HKDF .
  • Kulcsfeszítés és kulcserősítés.

Kulcsfeszítés és kulcserősítés

A kulcsszármazási funkciókat olyan alkalmazásokban is használják, amelyek titkos jelszavakból vagy jelszavakból származtatják a kulcsokat, amelyek jellemzően nem rendelkeznek a kívánt tulajdonságokkal, amelyeket közvetlenül kriptográfiai kulcsként kell használni. Az ilyen alkalmazásokban általában ajánlott, hogy a kulcsszármazási funkciót szándékosan lassítsák le, hogy meghiúsítsák a nyers erővel történő támadást vagy a szótári támadást a jelszó vagy jelszóbeviteli érték ellen.

Az ilyen használat kifejezhető DK = KDF -ként (kulcs, só, iterációk) , ahol DK a származtatott kulcs, KDF a kulcsszármazási funkció , a kulcs az eredeti kulcs vagy jelszó, a egy véletlenszerű szám, amely kriptográfiai sóként működik , és iterációk utal, hogy a számát iterációk egy al-funkciót. A származtatott kulcsot használja az eredeti kulcs vagy jelszó helyett a rendszer kulcsaként. Az értékek, a só és az ismétlések számát (ha ez nem fix) tárolja a kivonatolt jelszót vagy küldött kódolatlan (titkosítatlan) egy kódolt üzenetet.

A nyers erő támadásának nehézsége az iterációk számával nő. Az iterációk számának gyakorlati korlátja, hogy a felhasználók nem hajlandók elviselni a számítógépbe való bejelentkezés vagy a visszafejtett üzenetek észlelhető késését. A használata megakadályozza, hogy a támadók előre kiszámítsák a származtatott kulcsok szótárát.

Egy alternatív megközelítés, az úgynevezett kulcserősítés , kiterjeszti a kulcsot egy véletlenszerű sóval, de aztán (ellentétben a kulcsnyújtással) biztonságosan törli a sót. Ez arra kényszeríti a támadót és a jogos felhasználókat, hogy nyers erővel keressék a sót. Bár a gombnyújtást bevezető cikk erre a korábbi technikára hivatkozott, és szándékosan más nevet választott, a "kulcserősítés" kifejezést ma gyakran (vitathatatlanul helytelenül) használják a billentyűnyújtásra.

Jelszó kivonatolása

Annak ellenére, hogy a KDF -eket eredetileg kulcsszármazásra használták, valószínűleg jobban ismertek a jelszó -kivonatolásban ( jelszóellenőrzés hash -összehasonlítással ), ahogyan a passwd fájl vagy az árnyékjelszó -fájl használja . A jelszavak kivonási függvényeinek viszonylag költségesnek kell lenniük kiszámítani nyers erővel történő támadások esetén, és a KDF kulcsok nyújtása történetesen biztosítja ezt a jellemzőt. A nem titkos paramétereket ebben az összefüggésben " sónak " nevezik .

2013 -ban meghirdették a Jelszó -kivonatolási versenyt, hogy új, szabványos algoritmust válasszanak a jelszó -kivonatoláshoz. 2015. július 20 -án a verseny véget ért, és az Argon2 -t hirdették ki a végső győztesnek. Négy másik algoritmus kapott különleges elismerést: Catena, Lyra2, Makwa és yescrypt.

Történelem

Az első szándékosan lassú (kulcs nyújtás) jelszó alapú kulcs származtatás függvény volt az úgynevezett „ kripta ” (vagy „crypt (3)” után az ember oldalt ), és találta Robert Morris 1978 lenne titkosítani egy állandó (nulla) , a felhasználó jelszavának első 8 karakterét használva kulcsként, 25 iteráció végrehajtásával egy módosított DES titkosítási algoritmust (amelyben a valós idejű számítógép órájából olvasott 12 bites számot használják a számítások megzavarására). A kapott 64 bites szám 11 nyomtatható karakterként van kódolva, majd a Unix jelszófájlban tárolódik. Bár akkoriban nagy előrelépés volt, a processzorok sebességének növekedése a PDP-11 korszak óta lehetővé tette a nyers erővel történő támadásokat a kripta ellen, és a tárolás fejlődése miatt a 12 bites só nem megfelelő. A kripta funkció kialakítása szintén korlátozza a felhasználói jelszót 8 karakterre, ami korlátozza a kulcsteret és lehetetlenné teszi az erős jelszavakat .

Bár a nagy teljesítmény az általános célú kivonatolási funkciókban kívánatos tulajdonság, az ellenkezője igaz azoknak a jelszavas biztonsági alkalmazásoknak, amelyekben a nyers erő feltörése elleni védelem elsődleges szempont. A tömegesen párhuzamos hardverek, például a GPU-k, az FPGA-k és még az ASIC-k növekvő használata a nyers erő feltöréséhez még kritikusabbá tette a megfelelő algoritmusokat, mert a jó algoritmusnak nemcsak bizonyos számítási költségeket kell kikényszerítenie, nem csak CPU-k, de ellenállnak a modern, tömegesen párhuzamos platformok költség/teljesítmény előnyeinek is az ilyen feladatokhoz. Különböző algoritmusokat fejlesztettek ki kifejezetten erre a célra, beleértve a bcrypt , a scrypt és a közelmúltban a Lyra2 és az Argon2 (ez utóbbi a Password Hashing Competition győztese ). A nagyszabású Ashley Madison adatvédelmi incidens , amelynek során a támadók nagyjából 36 millió jelszó-hash-t loptak el, illusztrálták az algoritmusválasztás fontosságát a jelszavak biztosításában. Bár a bcrypt-et a kivonatok védelmére használták (a nagyméretű brute-force feltörést drágává és időigényessé tette), a veszélyeztetett adatok fiókjainak jelentős része a gyors általános célú MD5 algoritmuson alapuló jelszó-kivonatot is tartalmazott , lehetséges, hogy hetek alatt több mint 11 millió jelszót feltörnek.

2017 júniusában az Egyesült Államok Nemzeti Szabványügyi és Technológiai Intézete (NIST) kiadta digitális hitelesítési irányelveinek új felülvizsgálatát, a NIST SP 800-63B-3-at, amely szerint: "A hitelesítők a memorizált titkokat [azaz jelszavakat] formában tárolják. amely ellenáll az offline támadásoknak. A memorizált titkokat megfelelő egyirányú kulcsszármazási funkcióval kell sózni és kivonatolni. A kulcsszármazási funkciók bemenetként jelszót, sót és költségtényezőt vesznek, majd jelszó-kivonatot generálnak. Céljuk, hogy drágává tegye a jelszó -találgatási kísérleteket egy támadó számára, aki jelszó -kivonatfájlt szerzett, és ezért a találgatási támadás költsége magas vagy megfizethetetlen. "

A modern jelszóalapú kulcsszármazási funkciók, mint például a PBKDF2 (meghatározott az RFC 2898-ban), egy elismert kriptográfiai hash-en, például az SHA-2-en alapulnak , több sót használnak (legalább 64 bitet és véletlenszerűen választanak ki) és magas iterációs számot. A NIST legalább 10 000 iterációs számot javasol. "Különösen kritikus kulcsok, vagy nagyon erős rendszerek vagy rendszerek esetében, ahol a felhasználó által észlelt teljesítmény nem kritikus, 10 000 000 iterációs szám megfelelő lehet."

Hivatkozások

További irodalom