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