Locked History Actions

Skirtumas „NaujasŽodisTemplate“

Pakeitimai tarp versijų 77 ir 88 (patvirtinamos 11 versijos)
Versija 77 nuo 2013-04-03 21:17:34
Dydis: 4445
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:
Timing attack on MAC verification Non-atomic dycription attack
Eilutė 4: Eilutė 5:

Eilutė 8: Eilutė 7:
Laiko ataka MAC patvirtinime nevienalyčio dešifravimo ataka
Eilutė 11: Eilutė 11:
Eilutė 13: Eilutė 12:

'''''Teorija:'''''

''Hash funkcija ''

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

„Hash“ funkcija pasižymi šiomis savybėmis:

· Ją galima lengvai suskaičiuoti bet kokiam duotam duomenų blokui

· Neįmanoma atkurti duomenų bloko žinant tik „hash“ eilutę.

· 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.''

'''''Ataka:'''''

Atibūdinti ataka galima pavyzdžiu. Tinkamas pavyzdys būtų „Keyczar“ kriptografijos biblioketa parašyto „Python“ kalba. Supaprastinta kodo ištrauka:

''def Verify (key, msg, sig_bytes): ''

 . ''return HMAC(key, msg) == sig_bytes''

''(sig_bytes – (signature bytes/tag bytes)''

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 turim serveri kuris turi raktą „R“ ir piktavalį, kuris siunčia pranešimą „P“ su tam tikru sugalvotu HMAC‘o „tag“.

{{attachment:0.jpg}}

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

Žinoma tokiai atakai yra sukurti veiksmingi gynybos budai:

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

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

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

3. Stanford University online Cryptography course
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

Ž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