Locked History Actions

Skirtumas „NaujasŽodisTemplate“

Pakeitimai tarp versijų 72 ir 84 (patvirtinamos 12 versijos)
Versija 72 nuo 2013-04-03 21:00:53
Dydis: 4294
Redaktorius: Ramunas
Komentaras:
Versija 84 nuo 2013-04-03 21:32:37
Dydis: 4184
Redaktorius: Ramunas
Komentaras:
Pašalinimai yra pažymėti taip. Pridėjimai yra pažymėti taip.
Eilutė 1: Eilutė 1:
= Laiko ataka MAC patvirtinime =
= Apibrėžimas: =
== Žodis angliškai ==
CBC padding attack

##Įrašykite terminą anglų kalba
== Žodis Lietuviškai ==
##Įrašykite lietuvišką termino vertimą
CBC priedų ataka

----

== Paaiškinimai ==
Eilutė 5: Eilutė 14:
''Hash funkcija '' ''CBC (cipher block chaining) šifro bloko sukaustymas''
Eilutė 7: Eilutė 16:
Tai algoritmas kuris iš kintamo ilgio duomenų bloko įėjime gauna pastovaus dydžio bitų eilutę išėjime. Pagrindinė „Hash“ funkcijos savybė yra, didelė tikimybė, kad pakeitus duomenis, pasikeis pati „Hash eilutė. 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.
Eilutė 9: Eilutė 18:
„Hash“ funkcija pasižymi šiomis savybėmis: ''Padding – priedas''
Eilutė 11: Eilutė 20:
· Ją galima lengvai suskaičiuoti bet kokiam duotam duomenų blokui  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ų.
Eilutė 13: Eilutė 22:
· Neįmanoma atkurti duomenų bloko žinant tik „hash“ eilutę. ''Transport Layer Security (TLS) Record protocol – transporto lygio apsaugos įrašo protokolas''
Eilutė 15: Eilutė 24:
· Neįmanoma modifikuoti duomenų nemodifikuojant „hash“ eilutės.

· Labai maža tikimybė, kad du duomenų blokai turės tą pačią „hash“ eilutę.

''MAC (Message Authentication Codes) - pranešimo autentifikavimo kodas ''

Tai trumpas informacijos kiekis skirtas autentifikuoti pranešimą ir užtikrinti jam vientisumą bei tikrumą. Vientisumo užtikrinimas aptinka atsitiktinius ir tikslinius pranešimo pakitimus, o tikrumo užtikrinimas patvirtina pranešimo kilmę. Iš esmės MAC yra mažo pastovaus dydžio duomenų blokas kuris gaunamas iš kintamo ilgio pranešimo bei rakto. Jei pranešimą žymėsime „P“, o raktą „R“ tai MAC galime apibrėžti kaip „P“ ir „R“ kriptografine kontroline suma: MAC = K(R, P).

 . Jei vartotojas A nori siųsti pranešimą „P“ vartotojui B ir apsaugoti jį MAC, visų pirma jie turi pasidalinti slaptu raktu „R“. Tada A suskaičiuoja MAC kaip „P“ ir „R“ funkcija ir siunčia pranešimą bei suskaičiuota MAC vartotojui B. B taipogi atlieka skaičiavimus pasinaudojąs slaptuoju raktu „R“ ir gautuoju pranešimu „P“ ir gauna savo MAC‘. Jeigu gautas MAC ir suskaičiuotas MAC‘ sutampa, galima daryti prielaidą, kad pranešimas autentiškas.

''HMAC – MAC sudarytas iš „hash“ funkcijos ir kriptografinio rakto.''
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.
Eilutė 29: Eilutė 28:
Atibūdinti ataka galima pavyzdžiu. Tinkamas pavyzdys būtų „Keyczar“ kriptografijos biblioketa parašyto „Python“ kalba. Supaprastinta kodo ištrauka: Kaip pavyzdį panagrinėsime TSL įrašo protokolo, kuris naudoją CBC šifravimą ataką.
Eilutė 31: Eilutė 30:
''def Verify (key, msg, sig_bytes): '' Č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. „
Eilutė 33: Eilutė 32:
 . ''return HMAC(key, msg) == sig_bytes''
Eilutė 35: Eilutė 33:
''(sig_bytes – (signature bytes/tag bytes)''
Eilutė 37: Eilutė 34:
Veikimo principas, gavus pranešimą yra suskaičiuojamas HMAC pasinaudojant „key“ ir „msg“ vertėmis ir palyginama su sig_bytes reikšme, Abiejų kintamųjų dydis 16 baitų. Tačiau atkreipus dėmėsį į kodą galima pamatyti kaip yra atliekamas palyginimas: „==“. „Python“ interpretatorius tokį palyginimą atliekamas ciklu, kuris vykdomas lyginant kintamuosius pabaičiui. Taigi kai tik kompiliatorius randą pirmąjį neteisingą baitą, procesas panaikinamas. O tai leidžia pritaikyti laiko ataką. 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ę.
Eilutė 39: Eilutė 36:
Taigi turim serveri kuris turi raktą „R“ ir piktavalį, kuris siunčia pranešimą „P“ su tam tikru sugalvotu HMAC‘o „tag“.
Eilutė 41: Eilutė 37:
[[attachment:0.jpg]]
Eilutė 43: Eilutė 38:
Taigi piktavalis savo ruoštu siunčia sukurtąjį pranešima „P“ kartu su „tag“, o serveris patikrina ar atsiųstas „tag“ yra teisingas ir jei ne siunčia klaidos pranešimą. Taigi piktavalis pastoviai siunčia užklausas į serveri naudodamas tą patį pranešimą „P“, tačiau kaskart keisdamas „tag“ reikšmę. Taigi pirmiausia piktavalis nusiunčia atsitiktinę užklausą ir matuoja kiek laiko serveris užtrunka pateikti atsakymą. Toliau jis siunčia „tag“ kurio pirmas baitas vis kitoks ir žiūri kada serveris užtruks truputi ilgiau prieš atsiųsdamas atsakymą. Taip jis sužino kada pirmas bitas yra teisingas. Toliau procesas kartojamas, tik jau su antruoju baitų. Taip pabaičiui piktavalis gali sužinoti visą „tag“, ir serveris priims piktavalio pranešimą. 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ą.
Eilutė 45: Eilutė 40:
Žinoma tokiai atakai yra sukurti veiksmingi gynybos budai: Veiksmingas būdas prieš tokia ataką yra pirmiau naudoti šifravimą, o tik tada skaičiuoti MAC.
Eilutė 47: Eilutė 42:
 . Vienas iš jų – tikrinti ar atsiųstas „tag“ yra tinkamo ilgio, bet naudoti palyginimo funkcija kuri duomenis lygina blokais (pvz. po 16 baitų. ) Kitas – nuslėpti kurie baitai yra lyginami, tai galima padaryti naudojant dviguba HMAC funkcija. == Literatūra: ==
Eilutė 49: Eilutė 44:
'''''Literatūra'''''

1. http://en.wikipedia.org/wiki/Cryptographic_hash_function

2. http://en.wikipedia.org/wiki/Message_authentication_code

3. Stanford University online Cryptography course

----
 . CategoryŽodis
1. http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation
2. [[http://en.wikipedia.org/wiki/Padding_(cryptography)|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

Ž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. „

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