Webalkalmazás-biztonság Kriptográfiai alapok
Alapfogalmak, áttekintés üzenet (message): bizalmas információhalmaz nyílt szöveg (plain text): a titkosítatlan üzenet (bemenet) kriptoszöveg (ciphertext): a titkosított üzenet (kimenet) kulcs (key): az a plusz tudás, ami a titkosítás megfejtéséhez szükséges brute force (nyers erő): próbálgatáson alapuló módszer (nevezik exhaustive search-nek is), amely mindig eredményre vezet a kérdés csak az, hogy mennyi idő alatt
Alapfogalmak, áttekintés A titkosítás önmagában megóvja az üzenetek bizalmasságát (confidentiality) Egyéb módszerek szükségesek a sértetlenség (integrity) és hitelesség (authenticity), illetve a letagadhatatlanság (nonrepudiation) garantálására: üzenethitelesítő kód (MAC, HMAC) digitális aláírás időbélyegzés
Alapfogalmak, áttekintés Titkosító (cipher) eljárások csoportosítása: az adatok feldolgozásának módja szerint folyamtitkosító (stream cipher) blokktitkosító (block cipher) a titkosító/visszafejtő kulcsok egymáshoz való viszonya szerint titkos kulcsú (szimmetrikus) titkosítás nyilvános kulcsú (aszimmetrikus) titkosítás
Véletlenszám-generátorok Cél: véletlenszerű (ismétlődő mintáktól mentes) jelsorozatok előállítása Csoportosítás a működési mód szerint: algoritmikus úton: álvéletlenszám-generátorok (PRNG) fizikai módszerekkel: valódi véletlenszám-generátorok (RNG) Sok célra erős PRNG-k is megfelelnek! CPRNG
Véletlenszám-generátorok Álvéletlenszám-generátorok determinisztikusak periodikusak inicializáslásra szorulnak bármikor rendelkezésre állnak Egy PRNG bármely állapota előállítható a kezdeti állapot (seed) ismeretében! Random rnd = new Random(); rnd.setseed(system.currenttimemillis());
Véletlenszám-generátorok Valódi véletlenszám-generátorok indeterminisztikusak nem periodikusak nem szorulnak inicializáslásra nem állnak rendelkezésre bármikor A legtöbb modern operációs rendszer tartalmaz valamilyen RNG-t (pl. /dev/random)
Kriptográfiai hash algoritmusok Tetszőleges méretű bemenő adatból (üzenet) fix méretű kimenet (digest), amelyre a következők igazak: a kimenetből nem következtethető a bemenet a bemenet akár kis méretű változása esetén a kimenet nagy mértékben változik két eltérő bemenetre nem kapunk egyező kimenetet (nincs ütközés)
Kriptográfiai hash algoritmusok Cél: lenyomat képzése, az üzenet hitelesítése céljából Felhasználási terület: üzenethitelesítő kódok (MAC, HMAC) digitális aláírás használhatók normál hash-ként is salting: a hash-elendő adat kiegészítése (random) plusz információval cél: jelszavak erősítése, brute force módszerekkel szembeni ellenállóság növelése
Kriptográfiai hash algoritmusok Kompromittálódott népszerű kripto hash algoritmusok: MD5 SHA-1 Ajánlott algoritmusok: SHA-2 (SHA-256/224, SHA-512/384)
Üzenethitelesítő kódok Cél: az üzenetek hitelességének biztosítása Működés: az üzenetből (nyílt szöveg) egy titkos kulcs felhasználásával lenyomatot (tag) képzünk Csak a kulcs birtokában ellenőrizhető Nem garantál letagadhatatlanságot (non-repudiation) Alkalmazási példa: tranzakcióaláírás
One-Time Pad Bizonyítottan feltörhetetlen eljárás (Shannon, 1949) perfect encryption : matematikai úton bizonyítható, hogy a kriptoanalízis lehetetlen A nyílt szöveg hosszával megegyező random kulcsot igényel Egyszerű helyettesítéses szimmetrikus titkosítás: a nyílt szöveg minden elemét a kulcs adott pozíciójú elemével keverik (pl. XOR művelettel) és az így kapott elem helyettesíti az eredetit
One-Time Pad Megkötések: a kulcsnak véletlenszerűnek kell lennie mindkét félnek rendelkeznie kell a kulccsal egy kulcsot csak egyszer szabad használni a kulcsokat használat után meg kell semmisíteni A fentiekből következik, hogy a gyakorlatban nem igazán hasznosítható az eljárás: "As a practical person, I've observed that one-time pads are theoretically unbreakable, but practically very weak. By contrast, conventional ciphers are theoretically breakable, but practically strong. (Steve Bellovin)
Folyamtitkosítók Működése hasonló a one-time pad-hez: a nyílt szöveg hosszával megegyező hosszúságú kulcsfolyam (key stream) elemei a nyílt szöveg elemeivel XOR-olva vannak Egyszerre egy elemet titkosít Egy kulcs(folyam)ot itt is csak egyszer szabad használni
Blokktitkosítók Egy időben a nyílt szöveg egy blokkját titkosítják A blokktitkosítók építőkockaként használhatók PRNG-nek, HMACnek Normál esetben egy blokktitkosító egy blokk titkosítására használható Nincs baj, ha a nyílt szöveg hossza nem haladja meg a blokkméretet...
Blokktitkosítók Probléma: az üzenetek hossza általában meghaladja a blokkméretet, valamilyen megoldás kell tehát Szabdaljuk fel a nyílt szöveget blokkokra, az utolsót egészítsük ki (padding)...titkosítsuk őket egyenként! a nyílt szöveg azonos részei azonos kriptoszöveget fognak eredményezni (hiszen ua. kulcsot használjuk)...titkosítsuk őket úgy, hogy egy adott titkosítási lépésnél a bemenő adatokat az előző lépésből származó kriptoszöveggel keverjük a legelső blokknál mit használjunk?
Blokktitkosítók Működési módok (modes of operation) bevezetése A működési módok a blokkokra vágott nyílt szöveg ugyanazok kulccsal történő titkosításnak pontos módját határozzák meg ECB, CBC, CFB, OFB...
Blokktitkosítók Legegyszerűbb mód: ECB (Electronic Code Book) a nyílt szöveg blokkjait egyenként titkosítja a kulccsal probléma: a nyílt szövegben található minták felismerhetőek maradnak, mivel az ismétlődő blokkok ugyanazon kriptoszöveget eredményezik Nincsen baj, ha a nyílt szöveg eleve véletlenszerű
Blokktitkosítók Az összes többi mód ún. inicializációs vektor (IV) használatát írja elő Az IV-t keverik az első blokkhoz, így biztosítva a megfelelő működést Általánosan elvárt tulajdonságok: egyediség (egy adott IV-t nem szabad ua. kulccsal ismételten felhasználni) véletlenszerűség Az IV kell a visszafejtéshez is, viszont általában nem szükséges titokban tartani, tehát ua. csatornán továbbítható, mint a kriptoszöveg
Blokktitkosítók Kerülendő blokktitkosítók: DES RC2, RC5 3DES Ajánlott blokktitkosítók: AES (Rijndael) Twofish
Aszimmetrikus titkosítás Alapelv: külön kulcs a titkosításhoz és a visszafejtéshez Minden nyílt kulcsú eljárás matematikai problémák gyakorlati megoldási nehézségein alapul tényezőkre bontás diszkrét logaritmusok
Aszimmetrikus titkosítás Felhasználási területek: titkosítás digitális aláírás sértetlenség (integrity) hitelesség (authenticity) letagadhatatlanság (non-repudiation) Gyakori a hibrid megközelítés: kulcscsere és hitelesítés aszimmetrikus úton, titkosítás szimmetrikus algoritmussal (pl. SSL/TLS) Eljárások: RSA Elliptic Curve Cryptography (ECC)
Aszimmetrikus titkosítás Titkosítás
Aszimmetrikus titkosítás Digitális aláírás készítése
Aszimmetrikus titkosítás Digitális aláírás ellenőrzése
Aszimmetrikus titkosítás SSL/TLS handshake kulcscsere aszimmetrikus algoritmussal handshake után már szimmetrikusan titkosítjuk a forgalmat!
Bevált gyakorlatok Minden kriptoműveletet megbízható rendszeren kell végezni Véletlenszámok előállítását minősített generátor végezze Biztonságos kulcskezelési folyamatok Kerülni kell a saját fejlesztésű kripto megoldások használatát Minden esetben a védett információk értékéhez kell igazítani az alkalmazott kripto megoldásokat