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[1] erabiliz RSAri erasotzen diona. "Padding oracle" terminoa 2002an agertu zen literaturan,[2]Serge VaudenaykCBC moduko deszifraketa simetrikoetan padding oracle erabiliz egindako erasoaren ondoren.[3] Bi erasoen aldaerek arrakasta izaten jarraitzen dute jatorriz argitaratu zirenetik hamar urte baino gehiago igaro ondoren. [1][4][5]
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. [1]
Mangerek (2001) PKCS #1 v1.5 paddingaren ordezkoari, PKCS #1 v2.0 "OAEP"ari, eraso egiten dio.[6]
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.[1] Bi erasoek garaiko kripto-sistemak dituzte helburu:CBC Secure Sockets Layer (SSL) delakoan erabilitako jatorrizko modua da, eta TLSrekin bateragarria izaten jarraitzen du.[4]
Erasotzaileek deszifratze softwarea oracle gisa jardutea saihesteko zenbait neurri hartu dira, baina denboran oinarritutako eraso berriek oraclearen berragerpena behin eta berriz ekarri dute. TLS 1.2k autentifikatutako zifratze moduak sartzen ditu, CBCn oinarritzen ez direnak.[4]
CBC zifraketan padding oracle erasoa
Blokeen zifratuetan CBC deszifratzearen ezarpen estandarra testu zifratuko bloke guztiak deszifratzeko, paddinga baliozkotzeko, PKCS7 paddinga kentzeko eta mezuaren testu argia itzultzeko diseinatuta dago. Zerbitzariak "padding baliogabea" errorea itzultzen badu, "deszifraketak huts egin du" errore orokor baten ordez, erasotzaileak zerbitzaria padding oracle gisa erabil dezake mezuak deszifratzeko (eta batzuetan zifratzeko).
CBC deszifratzeko formula matematikoa hau da:
Goian adierazita dagoen bezala, CBC deszifratzerako orduan, testu argi bakoitzaren blokeak aurreko blokearekin XOR egiten du. Ondorioz, bloke batean () byte bakarreko aldaketa batek aldaketa bat eragingo du -n dagoen byte bakar batean.
Demagun erasotzaileak bi zifratutako bloke dituela, eta , eta bigarren blokea deszifratu nahi duela, testua lortzeko. Erasotzaileak eko azken bytea aldatzen du ( sortuz) eta (IV, , ) zerbitzarira bidaltzen du. Zerbitzariak, orduan, deszifratutako azken blokean () PKCS#7 padding balioduna den ala ez jakinarazten du. Paddinga zuzena bada, erasotzaileak orain badaki () ⊕ azken bytea 0x01 dela, azken bi byteak 0x02 direla, azken hiru byteak 0x03 direla, edo azken zortzi byteak 0x08 direla. Erasotzaileak bigarren azken bytea alda dezake (edozein bit bihurtuz) azken bytea 0x01 izateko. (Bestela, erasotzaileak aurreko byteak aldatu eta bilaketa bitarra egin dezake paddinga identifikatzeko. Adibidez, hirugarren azken bytea aldatzea zuzena bada, baina bigarren azken bytea aldatzea okerra bada, orduan azken bi byteak 0x02 direla jakiten da, eta biak deszifratu daitezke). Ondorioz, ()ren azken bytea ⊕ 0x01 da. Paddinga zuzena ez bada, erasotzaileak eko azken bytea hurrengo balio posible bihurtu dezake. Gehienez ere, erasotzaileak 256 saiakera beharko ditu ren azken bytea aurkitzeko, 255 saiakera byte bakoitzaren aukera guztietarako (256 aukera, bat kenduta eremu-printzipioagatik), gehi saiakera bat padding anbiguoa ezabatzeko.[7]
ren azken bytea zehaztu ondoren, erasotzaileak teknika bera erabil dezake ren bigarren azken bytea lortzeko. Erasotzaileak ren azken bytea 0x02 ezartzen du, eko azken bytea () ⊕ 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 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 saiakera behar izango lituzke honek.
CBC-R[8] 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.[3] Erasoaren instantziak SSL[9] eta IPSec[10][11] protokoloen aurka gauzatu ziren geroago. Era berean, hainbat web esparruetan ere aplikatu zen, hala nola JavaServer Faces, Ruby on Rails[12] eta ASP.NET[13][14][15], baita beste software batzuetan ere, esaterako Steam joko bezeroan.[16] 2012an, PKCS 11 kriptografia tokenen aurka eraginkorra zela frogatu zen.[1]
Eraso hauek gehienbat TLS implementazioaren bidez konponduak izan ziren, eta haren iragarpen publikoa iritsi zen ondoren, baina bertsio berri bat, Lucky Thirteen erasoak, 2013an argitaratua, denbora-tarte bat erabili zuen zaurgarritasuna berriro irekitzeko, baita aurretik finkatutako ezarpenetan ere. 2014aren hasieran, erasoa ez da jada mehatxutzat hartzen bizitza errealean, nahiz eta teoriaren arabera oraindik posible den (ikus seinale-zarata ratioa) makina klase jakin baten aurka. 2015etik aurrera, Interneteko trafikoa segurtatzeko erabiltzen diren protokolo kriptografikoen aurkako erasoen garapen-eremu aktiboena jaitsiera-erasoak dira, hala nola Logjam[17] eta Export RSA/FREAK[18] erasoak, bezeroak engainatzen dituzte eragiketa kriptografiko ez hain seguruak erabil ditzaten. Eragiketa horiek ondareko bezeroen bateragarritasuna aurreikusten dute, seguruagoak direnean. POODLE[19] 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.[20][21]