Locked History Actions

CBC padding attack

Žodis angliškai

CBC padding attack

Žodis Lietuviškai

CBC priedų ataka


Paaiškinimai

Teorija:

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.

2.jpg

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ę.

3.jpg

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