Locked History Actions

Skirtumas „NaujasŽodisTemplate“

Pakeitimai tarp versijų 78 ir 88 (patvirtinamos 10 versijos)
Versija 78 nuo 2013-04-03 21:25:50
Dydis: 4064
Redaktorius: Ramunas
Komentaras:
Versija 88 nuo 2013-04-03 21:42:10
Dydis: 3115
Redaktorius: Ramunas
Komentaras:
Pašalinimai yra pažymėti taip. Pridėjimai yra pažymėti taip.
Eilutė 2: Eilutė 2:
CBC padding attack Non-atomic dycription attack
Eilutė 4: Eilutė 5:

Eilutė 8: Eilutė 7:
CBC priedų ataka nevienalyčio dešifravimo ataka
Eilutė 11: Eilutė 11:
Eilutė 13: Eilutė 12:
Eilutė 15: Eilutė 13:
CBC (cipher block chaining) šifro bloko sukaustymas
Tai šifro blokų suryšimo algoritmas kai kiekvienas blokas teksto prieš užkoduojant yra sudauginamas naudojant „XOR“ funkcija su prieš tai buvusiu bloku. Tai einantis blokas priklauso nuo prieš tai buvusių blokų ir gaunamas vientisas pranešimas. Kad kiekvienas pranešimas būtų unikalus, pirmajam blokui yra naudojamas inicializavimo vektorius.
Padding – priedas

Tai metodas naudojamas kriptografijoje kuomet siekiant gauti vienodo ilgio duomenų blokus prie duomenų bloko pridedamas papildomas kiekis duomenų, kuris neturi jokios reikšmės. Taip taipogi siekiama, kad išvengti galimybės atpažinti pranešimą iš dažniausiai pasikartojančių pranešimo pradžios at pabaigos sakinių.
 Transport Layer Security (TLS) Record protocol – transporto lygio apsaugos įrašo protokolas
Tai protokolas kuris informacijai koduoti naudoja, raktus iš jų sudaro MAC, prie pranešimo prideda žymes, prie bloko pabaigos prideda priedą ir viską užšifruoja.
Ataka:
Kaip pavyzdį panagrinėsime TSL įrašo protokolo, kuris naudoją CBC šifravimą ataką.
Čia svarbų žinoti kaip veikia TLS dekodavimas, taigi pirmiausia pranešimas yra dekoduojamas naudojant CBC raktą. Tada tikrinama ar priedas (pad) yra tinkamo formato, pvz, jei priedas yra 3 baitų ilgio jis turėtų būti 3-3-3. Ir jei jis netinkamo formato tada pranešimas yra atmetamas. Toliau tikrinamas „tag“ (MAC) ir jei „tag“ yra neteisingas, pranešimas yra atmetamas, jei jis teisingas, likusi pranešimo dalis laikoma teisinga. „
SSH (Secure shell) – tai tinklo protokolas, aprašantis apsaugotą kliento prisijungimą prie serverio aplinkos (shell) ir komandų vykdymą. SSH buvo sukurtas kaip alternatyva Telnet ir kitiems nesaugiems prisijungimo protokolams, kuriais vartotojo siunčiama informacija - vardai, slaptažodžiai ir komandos, siunčiami atviru tekstu, kuris gali būti lengvai perimtas. SSH naudojamas šifravimas užtikrina duomenų saugumą ir vientisumą perduodant juos nesaugiais tinklais.
AES (Advanced Encryption Standard) – pažangus šifravimo standartas, šifravimo algoritmas. Dar vadinamas Rijndael algoritmu. Rijndael yra blokinis simetrinis algoritmas. Šifravimo raktai gali būti 128, 192, arba 256 bitų ilgio, o blokų ilgis gali būti 128, 192 arba 256 bitų.
Ataka:
Pavyzdžiu laikysime SSH „binary packet“ protokolo ataką.
SSH naudoja „binary packet“ protokolą pranešimų siuntimui tarp kliento ir serverio. SSH naudoja vadinamą šifravimo ir po to „MAC“ taikymo mechanizmą, tai reiškia, kad kartu su paketu siunčiamas MAC sudarytas iš duomenų bloko. Tipinis SSH paketas susideda iš eilės numerio, paketo ilgio, duomenų lauko bei priedo lauko (pad). Visa tai šifruojama naudojant „CBC“ šifravimą. Tačiau pagrindinė šio paketo savybė leidžianti vykti atakoms yra paketo dekodavimas. Paketo dekodavimas vyksta pirmiausia atkoduojant bloko ilgio lauką, po to nuskaitant tiek paketų kiek parodo bloko ilgio laukas ir tik tada vyksta MAC tikrinimas ir jei randama klaida išsiunčiamas kaidos pranešimas. Taigi šiame procese nėra įmanoma patikrinti ar bloko ilgio laukas yra teisingas, nes jis iššifruojamas prie iššifruojant visą bloką. Taigi jeigu piktavalis perima vieno bloko ilgio pranešimą kuriame yra norimas atpažinti pranešimas „P“ užkoduotas raktu „R“. B = AES(R, P). Taigi piktavalis turėdamas perimtą bloko ilgio pranešimą įterpia tą pranešima į duomenų bloko pradžia ir siunčia serveriui. Serveris iššifruoja pirmus bloko bitus laikydamas, kad tai yra bloko ilgis ir tikisi gauti tokio ilgio pranešimą. Taigi piktavalis siunčia serveliui viena baitą per vieną kartą paeiliui tol kol serveris gauną reikiamą baitų kiekį, dešifruoja visą bloką, patikrina „MAC“ ir žinoma siunčia klaidą. Tačiau piktavalis skaičiuodamas kiek baitų priėmė serveris sužino kokia pirmųjų 32 bitų reikšmė. Taigi naudodamas šia ataką piktavalis gali sužinoti kiekvieno bloko pirmus 32 bitus.
Eilutė 26: Eilutė 19:
Taigi čia egzistuoja dviejų rūšių klaidos, vienos yra priedo klaidos, kitos yra MAC klaidos (pad ir tag). Taigi piktavalis gali atskirti kokia klaida nutinka siunčia pranešimą. Tai dar vadinama „padding oracle“ . Taigi jei piktavalis perima ankščiau minėto tipo pranešima, ir nori jį iššifruoti, jis gali jį siųsti serveriui, ir taip sužinoti ar paskutiniai pranešimo baitai – priedas yra teisingi. Tai pastabėjus buvo paliktas tik vienas klaidos pranešimas. Tačiau tai apsaugoti duomenų nepadėjo. Nes kaip ankščiau minėta dekuodojant pranešima buvo pirmiausia tikrinamas priedas ir jei jis teisingas siunčiamas klaidos pranešimas, jei ne tikrinamas MAC, taip pagal sugaišta laiką iki atsiusto klaidos galima atpažinti kur buvo rasta klaida, taigi klaidos pranešimo suvienodinimas beveik nieko nepakeitė. Taigi piktavalis perėmės užkoduotos informacijos bloką nori atkoduoti bloko m[1] reikšmę.
 
Kadangi paskutinė informacijos bloko skiltis gali turėti vertę nuo 0 iki 255, piktavalis pasirenka atsitiktinę vertę „g“, kadangi duomenis užšifruoti CBC šifru, piktavalis į bloko c[0] paskutinę skiltį įterpia „XOR g XOR 0x01 ir kadangi užšifruoti bloką c[1] naudojama c[0] reiškmę vykstant dekodavimui jei g sutampa su tikrąją reikšme bloke m[1] gaunamas vienetas. Kadangi vienetas yra tinkama priedo (pad) reikšmė, dekoduojant jame nebus randama klaida. Klaida bus randama dekoduojant MAC, tačiau šiuo to pakaks, kad sužinoti paskutinį bloko baitą. Taigi piktavaliui perėmus pranešimą užtenka modifikuoti pirmąją pranešimo dalį tam, kad sužinoti antrosios dalies reikšmes. Žinant paskutinią bloko reiškmia, vienetą galima pakeisti dviem dvejetais ir vėl atlikti spėjimus kol bus sužinota prieš paskutinė reikšmė. Tokiu principu piktavalis gali sužinoti visą pranešimą.
Veiksmingas būdas prieš tokia ataką yra pirmiau naudoti šifravimą, o tik tada skaičiuoti MAC.

== Literatūra: ==
1. http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation

2. http://en.wikipedia.org/wiki/Padding_%28cryptography%29

3. http://www.ipa.go.jp/security/rfc/RFC2246-06EN.html

4. Stanford University online Cryptography course
Veiksmingi būdi kovoti prieš šia ataką: naudoti vienalytes sistemas kurioje visas paketas iššifruojamas iš karto. Nenaudoti šifravimo bloko ilgio laukui. Naudoti papildoma MAC kuris būtų skirtas tik bloko ilgio laukui.
Literatūra
1. http://lt.wikipedia.org/wiki/SSH
2. http://lt.wikipedia.org/wiki/AES
3. Stanford University online Cryptography course

Žodis angliškai

Non-atomic dycription attack

Žodis Lietuviškai

nevienalyčio dešifravimo ataka


Paaiškinimai

Teorija: SSH (Secure shell) – tai tinklo protokolas, aprašantis apsaugotą kliento prisijungimą prie serverio aplinkos (shell) ir komandų vykdymą. SSH buvo sukurtas kaip alternatyva Telnet ir kitiems nesaugiems prisijungimo protokolams, kuriais vartotojo siunčiama informacija - vardai, slaptažodžiai ir komandos, siunčiami atviru tekstu, kuris gali būti lengvai perimtas. SSH naudojamas šifravimas užtikrina duomenų saugumą ir vientisumą perduodant juos nesaugiais tinklais. AES (Advanced Encryption Standard) – pažangus šifravimo standartas, šifravimo algoritmas. Dar vadinamas Rijndael algoritmu. Rijndael yra blokinis simetrinis algoritmas. Šifravimo raktai gali būti 128, 192, arba 256 bitų ilgio, o blokų ilgis gali būti 128, 192 arba 256 bitų. Ataka: Pavyzdžiu laikysime SSH „binary packet“ protokolo ataką. SSH naudoja „binary packet“ protokolą pranešimų siuntimui tarp kliento ir serverio. SSH naudoja vadinamą šifravimo ir po to „MAC“ taikymo mechanizmą, tai reiškia, kad kartu su paketu siunčiamas MAC sudarytas iš duomenų bloko. Tipinis SSH paketas susideda iš eilės numerio, paketo ilgio, duomenų lauko bei priedo lauko (pad). Visa tai šifruojama naudojant „CBC“ šifravimą. Tačiau pagrindinė šio paketo savybė leidžianti vykti atakoms yra paketo dekodavimas. Paketo dekodavimas vyksta pirmiausia atkoduojant bloko ilgio lauką, po to nuskaitant tiek paketų kiek parodo bloko ilgio laukas ir tik tada vyksta MAC tikrinimas ir jei randama klaida išsiunčiamas kaidos pranešimas. Taigi šiame procese nėra įmanoma patikrinti ar bloko ilgio laukas yra teisingas, nes jis iššifruojamas prie iššifruojant visą bloką. Taigi jeigu piktavalis perima vieno bloko ilgio pranešimą kuriame yra norimas atpažinti pranešimas „P“ užkoduotas raktu „R“. B = AES(R, P). Taigi piktavalis turėdamas perimtą bloko ilgio pranešimą įterpia tą pranešima į duomenų bloko pradžia ir siunčia serveriui. Serveris iššifruoja pirmus bloko bitus laikydamas, kad tai yra bloko ilgis ir tikisi gauti tokio ilgio pranešimą. Taigi piktavalis siunčia serveliui viena baitą per vieną kartą paeiliui tol kol serveris gauną reikiamą baitų kiekį, dešifruoja visą bloką, patikrina „MAC“ ir žinoma siunčia klaidą. Tačiau piktavalis skaičiuodamas kiek baitų priėmė serveris sužino kokia pirmųjų 32 bitų reikšmė. Taigi naudodamas šia ataką piktavalis gali sužinoti kiekvieno bloko pirmus 32 bitus.

Veiksmingi būdi kovoti prieš šia ataką: naudoti vienalytes sistemas kurioje visas paketas iššifruojamas iš karto. Nenaudoti šifravimo bloko ilgio laukui. Naudoti papildoma MAC kuris būtų skirtas tik bloko ilgio laukui. Literatūra 1. http://lt.wikipedia.org/wiki/SSH 2. http://lt.wikipedia.org/wiki/AES 3. Stanford University online Cryptography course