Padding oracle attack

Kriptografian, **Padding Oracle Attack** eraso bat da, mezu kriptografiko baten padding balidazioa erabiltzen duena honen testu zifratua deszifratzeko. Kriptografian, testu argiko (plaintext) mezuak luzera aldakorrekoak direnak gehienetan bete egin behar izaten dira (zabalduak), azpian datzan kriptografia primitiboarekin bateragarria izateko. Erasoa "Padding Oracle" bat edukitzean oinarritzen da, zeinak libreki erantzuten dien mezu bat behar bezala beteta dagoen ala ez jakiteko galderei. Informazioa zuzenean eman zitekeen, edo zeharkako kanal batetik filtratu.

Padding oracle erabiliz ezaguna den lehen eraso famatua 1998ko Bleichenbacheren erasoa izan zen, PKCS #1 v1.5 padding erabiliz RSAri erasotzen diona. "Padding oracle" terminoa 2002an agertu zen literaturan, Serge Vaudenayk CBC moduko deszifraketa simetrikoetan padding oracle erabiliz egindako erasoaren ondoren. Bi erasoen aldaerek arrakasta izaten jarraitzen dute jatorriz argitaratu zirenetik hamar urte baino gehiago igaro ondoren. 

## Kriptografia asimetrikoa 
1998an, Daniel Bleichenbacherek paper garrantzitsu bat argitaratu zuen, geroago "Bleichenbacheren erasoa" (edo "milioi mezuen erasoa") izenarekin ezagutzen zena. Erasoak padding oracle erabiltzen du PKCS #1 v1.5 padding erabiliz RSAri erasotzeko, baina terminoa ez da bertan erabiltzen. Geroago egileek haren erasoa padding oracle erasotzat sailkatu dute. 

## Kriptografia simetrikoa
Kriptografia simetrikoan, padding oracle erasoa CBC funtzionamendu moduan aplika daiteke. Betegarriaren baliozkotasunari buruz iragazitako datuei esker, erasotzaileek mezuak deszifratu (eta, batzuetan, zifratu) ditzakete Oracleren bidez, Oracleren gakoa erabiliz, zifratze-gakoa ezagutu gabe.

Bleichenbacherrek RSAri PKCS # 1 v1.5 bidez egindako erasoarekin alderatuta, Vaudenayk CBCri egindako erasoa askoz ere eraginkorragoa da.

P_{2}ren azken bytea zehaztu ondoren, erasotzaileak teknika bera erabil dezake P_{2}ren bigarren azken bytea lortzeko. Erasotzaileak P_{2}ren azken bytea 0x02 ezartzen du, C_{1}eko azken bytea D_{k}(C_{2}) ⊕ 0x02 bihurtuz. Ondoren, aurreko metodo bera erabiltzen du, oraingoan bigarren azken bytea aldatuz paddinga zuzena izan arte (0x02, 0x02).

Bloke batek 128 bit dituenean (AES, adibidez), hau da, 16 byte, erasotzaileak P_{2} testu argia gehienez ere 256⋅16 = 4096 saiakeretan lortuko du. Honek askoz azkarrago egiten du 128 biteko giltza bat indar handiko erasoaren bidez deskodetzea baino, hau 2^{128} saiakera behar izango lituzke honek.

### **Mezuak enkriptatzea Padding Oracle erasoarekin (CBC-R)** 
CBC-R decripzio testu bat enkriptatutako testua bihurtzen du, eta batez ere padding oracle aurkako erasoetan erakusten da.

Padding oracle eraso bat erabiliz, CBC-Rek hasieratze bektore bat eta zifratutako bloke bat sortu ditzake edozein testurentzat:

* edozein zifratutako testu deszifratu **Pi = PODecrypt( Ci ) XOR Ci−1**,
* aurreko zifratze-blokea **Cx−1**  aukeratu,
* zifratze/testu argi bikote balioduna ekoitzi **Cx-1 = Px XOR PODecrypt( Ci )**.

**N** bloke luzeko zifratu bat sortzeko, erasotzaileak **N** padding oracle eraso egin behar ditu. Eraso hauek kateatu egiten dira, mezuaren amaieratik hasita (**CN**) mezuaren hasierara (**C0**, IV) testu argi egokia eraikitzeko. Pauso bakoitzean, padding oracle eraso bat erabiltzen da aurretik aukeratutako zifratze-testurako IVa eraikitzeko.

CBC-R erasoak ez du funtzionatuko zifratze eskema baten aurka, zifratutako testua deszifratu aurretik autentifikatzen badu (mezu autentifikazio kode bat edo antzeko bat erabiliz).

## Padding oracle erasoa erabiltzen 
Jatorrizko CBCren aurkako erasoa Serge Vaudenayk argitaratu zuen 2002an. eta IPSec protokoloen aurka gauzatu ziren geroago. Era berean, hainbat web esparruetan ere aplikatu zen, hala nola JavaServer Faces, Ruby on Rails eta ASP.NET, baita beste software batzuetan ere, esaterako Steam joko bezeroan. 2012an, PKCS 11 kriptografia tokenen aurka eraginkorra zela frogatu zen. eta Export RSA/FREAK erasoak, bezeroak engainatzen dituzte eragiketa kriptografiko ez hain seguruak erabil ditzaten. Eragiketa horiek ondareko bezeroen bateragarritasuna aurreikusten dute, seguruagoak direnean. POODLE izeneko eraso batek (2014aren amaieran) konbinatzen ditu bai beheranzko eraso bat (SSL 3.0ra) bai zaharrenen aurkako Padding Oracle eraso bat, protokolo ez-segurua, transmititutako datuen konpromisoa ahalbidetzeko. 2016ko maiatzean CVE-2016-2107an Lucky Thirteenen aurkako konponbide bat sortu zen, OpenSSLn denbora-oinarritutako padding oracle berria erabiliz.

## Erreferentziak