Kriptografinės atakos: sumišusių protų paaiškinimas

Išgirdę žodį „kriptografija“, kai kurie žmonės prisimena savo „WiFi“ slaptažodį, žalią spyną šalia mėgstamos svetainės adreso ir tai, kaip sunku patekti į kažkieno el. Kiti prisimena keletą pastarųjų metų pažeidžiamumų su daugybiniais sutrumpinimais (DROWN, FREAK, POODLE...), stilingais logotipais ir įspėjimu skubiai atnaujinti naršyklę.

Kriptografija apima viską, bet esmė kitame Esmė ta, kad tarp paprasto ir sudėtingo yra ta riba. Kai kuriuos dalykus lengva padaryti, bet sunku vėl sudėti, pavyzdžiui, sulaužyti kiaušinį. Kitus dalykus lengva padaryti, bet sunku susigrąžinti, kai trūksta mažos, svarbios, esminės dalies: pavyzdžiui, atidaryti užrakintas duris, kai svarbiausia yra „esminė dalis“. Kriptografija tiria šias situacijas ir kaip jas galima panaudoti praktiškai.

Pastaraisiais metais kriptografinių atakų kolekcija virto prašmatnių logotipų zoologijos sodu, užpildytu mokslinių straipsnių formulėmis ir sukėlė bendrą niūrų jausmą, kad viskas sulaužyta. Tačiau iš tikrųjų daugelis išpuolių yra pagrįsti keletu bendrų principų, o begalės formulių puslapių dažnai pavirsta į lengvai suprantamas idėjas.

Šioje straipsnių serijoje apžvelgsime skirtingus kriptografinių atakų tipus, pabrėždami pagrindinius principus. Apskritai, o ne tiksliai tokia tvarka, bet apžvelgsime šiuos dalykus:

  • Pagrindinės strategijos: brutali jėga, dažnių analizė, interpoliacija, žeminimas ir kryžminiai protokolai.
  • Firminiai pažeidžiamumai: FREAK, CRIME, PUDLE, DOWN, Logjam.
  • Išplėstinės strategijos: orakulų atakos (Vodenet ataka, Kelsey ataka); susitikimo-in-the-middle metodas, gimtadienio ataka, statistinis šališkumas (diferencinė kriptoanalizė, integrali kriptoanalizė ir kt.).
  • Šoninio kanalo atakos ir jų artimi giminaičiai, gedimų analizės metodai.
  • Atakos prieš viešojo rakto kriptografiją: kubo šaknis, transliacija, susijęs pranešimas, Coppersmith ataka, Pohlig-Hellman algoritmas, skaičių sietas, Wiener ataka, Bleichenbacherio ataka.

Šis konkretus straipsnis apima aukščiau pateiktą medžiagą iki Kelsey užpuolimo.

Pagrindinės strategijos

Šios atakos yra paprastos ta prasme, kad jas galima beveik visiškai paaiškinti be didelių techninių detalių. Paaiškinkime kiekvieną atakos tipą paprasčiausiais terminais, nesigilindami į sudėtingus pavyzdžius ar išplėstinius naudojimo atvejus.

Kai kurie iš šių išpuolių iš esmės paseno ir nebuvo naudojami daugelį metų. Kiti yra senbuviai, kurie XXI amžiuje vis dar reguliariai sėlina prie nieko neįtariančių kriptosistemų kūrėjų. Galima laikyti, kad šiuolaikinės kriptografijos era prasidėjo, kai atsirado IBM DES – pirmasis šifras, atlaikęs visas šio sąrašo atakas.

Paprasta brutali jėga

Kriptografinės atakos: sumišusių protų paaiškinimasŠifravimo schema susideda iš dviejų dalių: 1) šifravimo funkcijos, kuri paima pranešimą (plaintext) sujungtą su raktu, o po to sukuria šifruotą pranešimą – šifruotą tekstą; 2) iššifravimo funkcija, kuri paima šifruotą tekstą ir raktą ir sukuria paprastą tekstą. Tiek šifravimą, tiek iššifravimą turi būti lengva apskaičiuoti naudojant raktą ir sunku apskaičiuoti be jo.

Tarkime, kad matome šifruotą tekstą ir bandome jį iššifruoti be jokios papildomos informacijos (tai vadinama tik šifruoto teksto ataka). Jei kažkaip stebuklingai randame tinkamą raktą, galime lengvai patikrinti, ar jis tikrai teisingas, jei rezultatas yra pagrįstas pranešimas.

Atkreipkite dėmesį, kad čia yra dvi numanomos prielaidos. Pirma, mes žinome, kaip atlikti iššifravimą, tai yra, kaip veikia kriptosistema. Tai yra standartinė prielaida aptariant kriptografiją. Šifro įgyvendinimo detalių slėpimas nuo užpuolikų gali atrodyti kaip papildoma saugumo priemonė, tačiau kai užpuolikas išsiaiškina šias detales, ši papildoma apsauga tyliai ir negrįžtamai prarandama. Štai taip Kerchhofo principas: Sistema, patekusi į priešo rankas, neturėtų sukelti nepatogumų.

Antra, darome prielaidą, kad teisingas raktas yra vienintelis raktas, kuris leis pagrįstai iššifruoti. Tai taip pat yra pagrįsta prielaida; jis patenkinamas, jei šifruotas tekstas yra daug ilgesnis už raktą ir yra skaitomas. Taip dažniausiai nutinka realiame pasaulyje, išskyrus didžiuliai nepraktiški raktai arba kitas gudrybes, kurias geriausia palikti nuošalyje (jei jums nepatinka, kad praleidome paaiškinimą, žr. 3.8 teoremą čia).

Atsižvelgiant į tai, kas išdėstyta pirmiau, atsiranda strategija: patikrinkite kiekvieną galimą raktą. Tai vadinama brutalia jėga, ir garantuojama, kad tokia ataka galiausiai paveiks visus praktinius šifrus. Pavyzdžiui, nulaužti pakanka brutalios jėgos Cezario šifras, senovinis šifras, kurio raktas yra viena abėcėlės raidė, reiškianti kiek daugiau nei 20 galimų raktų.

Deja, kriptoanalitikams, rakto dydžio padidinimas yra gera apsauga nuo brutalios jėgos. Didėjant rakto dydžiui, galimų raktų skaičius didėja eksponentiškai. Naudojant šiuolaikinius raktų dydžius, paprasta brutali jėga yra visiškai nepraktiška. Norėdami suprasti, ką turime omenyje, paimkime greičiausią žinomą superkompiuterį 2019 m. viduryje: Viršūnė iš IBM, kurio didžiausias našumas yra apie 1017 operacijų per sekundę. Šiandien įprastas rakto ilgis yra 128 bitai, o tai reiškia 2128 galimus derinius. Norint atlikti paiešką per visus klavišus, superkompiuteriui „Summit“ reikės laiko, kuris yra maždaug 7800 kartų didesnis už Visatos amžių.

Ar brutali jėga turėtų būti laikoma istorine įdomybe? Visai ne: tai būtinas kriptoanalizės kulinarijos knygos ingredientas. Retai kada šifrai būna tokie silpni, kad juos galima sulaužyti tik sumaniu puolimu, nenaudojant vienokio ar kitokio jėgos. Daugelis sėkmingų įsilaužimų naudoja algoritminį metodą, kad pirmiausia susilpnintų tikslinį šifrą, o tada atliktų žiaurios jėgos ataką.

Dažnio analizė

Kriptografinės atakos: sumišusių protų paaiškinimasDauguma tekstų nėra kvaili. Pavyzdžiui, anglų kalbos tekstuose yra daug raidžių „e“ ir straipsnių „the“; dvejetainiuose failuose yra daug nulio baitų kaip užpildymas tarp informacijos dalių. Dažnio analizė yra bet kokia ataka, kuri pasinaudoja šiuo faktu.

Kanoninis šifro, pažeidžiamo šiai atakai, pavyzdys yra paprastas pakeitimo šifras. Šiame šifre raktas yra lentelė su visomis pakeistomis raidėmis. Pavyzdžiui, „g“ pakeičiamas „h“, „o“ – j, todėl žodis „eiti“ tampa „hj“. Šį šifrą sunku atkurti brutaliąja jėga, nes yra tiek daug galimų paieškos lentelių. Jei jus domina matematika, efektyvus rakto ilgis yra apie 88 bitai: tai yra
Kriptografinės atakos: sumišusių protų paaiškinimas. Tačiau dažnio analizė paprastai atlieka darbą greitai.

Apsvarstykite šį šifruotą tekstą, apdorotą paprastu pakaitiniu šifru:

XDYLY ALY UGLY XDWNKE WN DYAJYN ANF YALXD DGLAXWG XDAN ALY FLYAUX GR WN OGQL ZDWBGEGZDO

Nuo Y pasitaiko dažnai, įskaitant daugelio žodžių pabaigą, galime preliminariai manyti, kad tai yra raidė e:

XDeLe ALe UGLe XDWNKE WN DeAJeN ANF eALXD DGLAXWG XDAN ALe FleAUX GR WN OGQL ZDWBGEGZDO

Pora XD kartojo kelių žodžių pradžioje. Visų pirma, derinys XDeLe aiškiai siūlo žodį these arba there, tad tęskime:

TheLe ALe UGLe thWNKE WN HeaJen ANF EALth DGLAtWG nei ALe FleAUt GR WN OGQL ZDWBGEGZDO

Darykime prielaidą, kad L atitinka r, A - a ir taip toliau. Tikriausiai prireiks kelių bandymų, tačiau, palyginti su visiškos brutalios jėgos ataka, ši ataka greitai atkuria pradinį tekstą:

danguje ir žemėje horatio yra daugiau dalykų, nei svajojama jūsų filosofijoje

Kai kuriems tokių „kriptogramų“ sprendimas yra įdomus pomėgis.

Dažnio analizės idėja yra svarbesnė, nei atrodo iš pirmo žvilgsnio. Ir tai taikoma daug sudėtingesniems šiframs. Per visą istoriją įvairūs šifravimo modeliai bandė atremti tokią ataką naudojant „daugialfabetinį pakeitimą“. Čia, šifravimo proceso metu, raidžių pakeitimo lentelė modifikuojama sudėtingais, bet nuspėjamais būdais, kurie priklauso nuo rakto. Visi šie šifrai buvo laikomi sunkiai sulaužomi vienu metu; ir vis dėlto kukli dažnių analizė galiausiai nugalėjo juos visus.

Ambicingiausias daugiabėcėlinis šifras istorijoje ir turbūt garsiausias buvo Antrojo pasaulinio karo šifras Enigma. Palyginti su savo pirmtakais, jis buvo gana sudėtingas, tačiau po daug sunkaus darbo britų kriptoanalitikai jį nulaužė naudodami dažnių analizę. Žinoma, jie negalėjo sukurti elegantiškos atakos, kaip parodyta aukščiau; jiems teko lyginti žinomas paprasto ir šifruoto teksto poras (vadinamoji „plaintext attack“), netgi provokuojant „Enigma“ vartotojus šifruoti tam tikrus pranešimus ir analizuoti rezultatą („pasirinkta paprastojo teksto ataka“). Tačiau tai nepalengvino nugalėtų priešo armijų ir nuskendusių povandeninių laivų likimo.

Po šio triumfo dažnių analizė išnyko iš kriptoanalizės istorijos. Šiuolaikinio skaitmeninio amžiaus šifrai yra skirti dirbti su bitais, o ne raidėmis. Dar svarbiau, kad šie šifrai buvo sukurti tamsiai suprantant, kas vėliau tapo žinoma kaip Schneier dėsnis: Kiekvienas gali sukurti šifravimo algoritmą, kurio pats negali sulaužyti. Šifravimo sistemai to neužtenka atrodė sunku: kad įrodytų savo vertę, daugelis kriptovaliutų, kurie padarys viską, kad nulaužtų šifrą, turi atlikti negailestingą saugumo peržiūrą.

Preliminarūs skaičiavimai

Kriptografinės atakos: sumišusių protų paaiškinimasPaimkime hipotetinį Precom Heights miestą, kuriame gyvena 200 000 gyventojų. Kiekviename miesto namuose yra vidutiniškai 30 000 USD vertės vertybių, bet ne daugiau kaip 50 000 USD. Precom saugumo rinką monopolizuoja ACME Industries, gaminanti legendines Coyote™ klasės durų spynas. Ekspertų analizės duomenimis, „Coyote“ klasės užraktą gali sulaužyti tik labai sudėtinga hipotetinė mašina, kurios sukūrimui reikia maždaug penkerių metų ir 50 000 USD investicijų. Ar miestas saugus?

Greičiausiai ne. Galiausiai atsiras gana ambicingas nusikaltėlis. Jis samprotaus taip: „Taip, aš patiriu didelių išankstinių išlaidų. Penkeri metai kantraus laukimo ir 50 000 USD, bet kai baigsiu, turėsiu prieigą visus šio miesto turtus. Jei teisingai žaisiu kortomis, ši investicija atsipirks daug kartų.

Tas pats pasakytina ir apie kriptografiją. Išpuoliams prieš tam tikrą šifrą atliekama negailestinga kaštų ir naudos analizė. Jei santykis yra palankus, ataka neįvyks. Tačiau išpuoliai, nukreipti prieš daugelį potencialių aukų vienu metu, beveik visada pasiteisina, o tokiu atveju geriausia planavimo praktika yra manyti, kad jie prasidėjo nuo pirmos dienos. Iš esmės turime kriptografinę Merfio dėsnio versiją: „Viskas, kas iš tikrųjų gali sulaužyti sistemą, sugadins sistemą“.

Paprasčiausias kriptosistemos, pažeidžiamos išankstinio skaičiavimo atakos, pavyzdys yra pastovaus rakto neturintis šifras. Taip buvo su Cezario šifras, kuris tiesiog perkelia kiekvieną abėcėlės raidę trimis raidėmis į priekį (lentelė yra kilpinė, todėl paskutinė abėcėlės raidė šifruojama trečia). Čia vėl įsijungia Kerchhoffs principas: kartą įsilaužus į sistemą, ji nulaužta visam laikui.

Koncepcija paprasta. Net pradedantysis kriptosistemų kūrėjas greičiausiai atpažins grėsmę ir atitinkamai pasiruoš. Žvelgiant į kriptografijos raidą, tokios atakos buvo netinkamos daugeliui šifrų – nuo ​​pirmųjų patobulintų Cezario šifro versijų iki daugiabėcėlinių šifrų nuosmukio. Tokios atakos sugrįžo tik atėjus moderniajai kriptografijos erai.

Šią grąžą lemia du veiksniai. Pirma, pagaliau atsirado pakankamai sudėtingos kriptosistemos, kuriose išnaudojimo galimybė po įsilaužimo nebuvo akivaizdi. Antra, kriptografija taip išplito, kad milijonai pasauliečių kasdien priimdavo sprendimus, kur ir kokias kriptografijos dalis panaudoti pakartotinai. Prireikė šiek tiek laiko, kol ekspertai suprato riziką ir pakėlė pavojų.

Prisiminkite išankstinio skaičiavimo ataką: straipsnio pabaigoje pažvelgsime į du realaus gyvenimo kriptografijos pavyzdžius, kur ji atliko svarbų vaidmenį.

Interpoliacija

Štai garsusis detektyvas Šerlokas Holmsas atlieka interpoliacijos ataką prieš nelaimingą daktarą Vatsoną:

Iš karto atspėjau, kad atvažiavai iš Afganistano... Mano minčių eiga buvo tokia: „Šis žmogus pagal tipą yra gydytojas, bet jis turi karinį pobūdį. Taigi, karo gydytojas. Jis ką tik atvyko iš atogrąžų – jo veidas tamsus, bet tai nėra natūralus odos atspalvis, nes jo riešai daug baltesni. Veidas apniukęs – akivaizdu, kad jis daug kentėjo ir sirgo ligomis. Jis buvo sužeistas į kairę ranką – laiko ją nejudriai ir šiek tiek nenatūraliai. Kur tropikuose anglų karo gydytojas galėtų ištverti sunkumus ir susižeisti? Žinoma, Afganistane“. Visas minčių šuolis neužtruko nė sekundės. Taigi aš pasakiau, kad atvykai iš Afganistano, ir nustebau.

Holmsas galėjo gauti labai mažai informacijos iš kiekvieno įrodymo atskirai. Savo išvadą jis galėjo padaryti tik apsvarstęs juos visus kartu. Interpoliacijos ataka veikia panašiai, tiriant žinomas paprasto ir šifruoto teksto poras, gautas iš to paties rakto. Iš kiekvienos poros išgaunami individualūs stebėjimai, leidžiantys padaryti bendrą išvadą apie raktą. Visos šios išvados yra miglotos ir atrodo nenaudingos, kol staiga pasiekia kritinę masę ir veda prie vienintelės galimos išvados: kad ir kokia neįtikėtina tai būtų, ji turi būti tiesa. Po to arba raktas atskleidžiamas, arba iššifravimo procesas tampa toks patobulintas, kad jį galima pakartoti.

Paaiškinkime paprastu pavyzdžiu, kaip veikia interpoliacija. Tarkime, norime perskaityti asmeninį savo priešo Bobo dienoraštį. Jis užšifruoja kiekvieną savo dienoraščio numerį naudodamas paprastą kriptosistemą, apie kurią sužinojo iš skelbimo žurnale „Kriptografijos pasimetimas“. Sistema veikia taip: Bobas pasirenka du jam patinkančius skaičius: Kriptografinės atakos: sumišusių protų paaiškinimas и Kriptografinės atakos: sumišusių protų paaiškinimas. Nuo šiol šifruoti bet kokį numerį Kriptografinės atakos: sumišusių protų paaiškinimas, apskaičiuoja Kriptografinės atakos: sumišusių protų paaiškinimas. Pavyzdžiui, jei Bobas pasirinko Kriptografinės atakos: sumišusių protų paaiškinimas и Kriptografinės atakos: sumišusių protų paaiškinimas, tada skaičius Kriptografinės atakos: sumišusių protų paaiškinimas bus užšifruotas kaip Kriptografinės atakos: sumišusių protų paaiškinimas.

Tarkime, gruodžio 28 d. pastebėjome, kad Bobas kažką braižo savo dienoraštyje. Kai jis baigs, tyliai paimsime ir žiūrėsime paskutinį įrašą:

Дата: 235/520

Mielas dienorašti,

Šiandien buvo gera diena. Per 64 šiandien turiu pasimatymą su Alisa, kuri gyvena bute 843. Aš tikrai manau, kad ji gali būti 26!

Kadangi mes labai rimtai norime sekti Bobą jo pasimatymo metu (mums abiem 15 pagal šį scenarijų), labai svarbu žinoti datą ir Alisos adresą. Laimei, pastebime, kad Bobo kriptosistema yra pažeidžiama interpoliacijos atakos. Galime nežinoti Kriptografinės atakos: sumišusių protų paaiškinimas и Kriptografinės atakos: sumišusių protų paaiškinimas, bet žinome šios dienos datą, todėl turime dvi paprasto ir šifruoto teksto poras. Būtent, mes tai žinome Kriptografinės atakos: sumišusių protų paaiškinimas užšifruota Kriptografinės atakos: sumišusių protų paaiškinimasIr Kriptografinės atakos: sumišusių protų paaiškinimas - į Kriptografinės atakos: sumišusių protų paaiškinimas. Štai ką mes užrašysime:

Kriptografinės atakos: sumišusių protų paaiškinimas

Kriptografinės atakos: sumišusių protų paaiškinimas

Kadangi mums 15 metų, mes jau žinome apie dviejų lygčių su dviem nežinomaisiais sistemą, kurią šioje situacijoje pakanka rasti Kriptografinės atakos: sumišusių protų paaiškinimas и Kriptografinės atakos: sumišusių protų paaiškinimas be jokių problemų. Kiekviena paprastojo ir šifruoto teksto pora apriboja Bobo raktą, o dviejų apribojimų kartu pakanka, kad raktas būtų visiškai atkurtas. Mūsų pavyzdyje atsakymas yra Kriptografinės atakos: sumišusių protų paaiškinimas и Kriptografinės atakos: sumišusių protų paaiškinimas (at Kriptografinės atakos: sumišusių protų paaiškinimas Kriptografinės atakos: sumišusių protų paaiškinimas, taip 26 dienoraštyje atitinka žodį „vienas“, tai yra „tas pats“ - apytiksliai. juosta).

Interpoliacijos atakos, žinoma, neapsiriboja tokiais paprastais pavyzdžiais. Kiekvienai kriptosistemai, kuri redukuojasi iki gerai suprantamo matematinio objekto ir parametrų sąrašo, gresia interpoliacijos ataka – kuo objektas suprantamesnis, tuo rizika didesnė.

Naujokai dažnai skundžiasi, kad kriptografija yra „menas kurti kuo bjauresnius dalykus“. Tikriausiai daugiausia kaltos interpoliacijos atakos. Bobas gali naudoti elegantišką matematinį dizainą arba laikyti savo pasimatymą su Alisa privačiai, bet, deja, paprastai to padaryti negalite abiem būdais. Tai bus visiškai aišku, kai galiausiai pasieksime viešojo rakto kriptografijos temą.

Kryžminis protokolas / ankstesnė versija

Kriptografinės atakos: sumišusių protų paaiškinimasFilme „Dabar tu mane matai“ (2013) grupė iliuzionistų bando išvilioti korumpuotą draudimo magnatą Arthurą Tresslerį iš viso jo turto. Norėdami gauti prieigą prie Artūro banko sąskaitos, iliuzionistai turi arba pateikti jo vartotojo vardą ir slaptažodį, arba priversti jį asmeniškai atvykti į banką ir dalyvauti schemoje.

Abu variantai yra labai sudėtingi; Vaikinai įpratę vaidinti scenoje, o ne dalyvauti žvalgybos operacijose. Taigi jie pasirenka trečią galimą variantą: jų bendrininkas paskambina į banką ir apsimeta Artūru. Bankas užduoda keletą klausimų tapatybei patvirtinti, pavyzdžiui, dėdės vardą ir pirmojo augintinio vardą; mūsų herojai iš anksto jie lengvai išgauna šią informaciją iš Artūro, pasitelkę protingą socialinę inžineriją. Nuo šio momento puikus slaptažodžio saugumas nebėra svarbus.

(Pagal miesto legendą, kurią mes asmeniškai patikrinome ir patikrinome, kriptografas Eli Beaham kartą susidūrė su banko kasininku, kuris primygtinai reikalavo nustatyti saugumo klausimą. Kai kasininkas paklausė savo močiutės iš motinos pusės vardo, Beaham pradėjo diktuoti: „Sostinė X, mažas y, trys...“).

Tas pats yra kriptografijoje, jei tam pačiam turtui apsaugoti lygiagrečiai naudojami du kriptografiniai protokolai, o vienas yra daug silpnesnis už kitą. Gauta sistema tampa pažeidžiama kryžminio protokolo atakai, kai atakuojamas silpnesnis protokolas, siekiant gauti prizą nepaliečiant stipresniojo.

Kai kuriais sudėtingais atvejais neužtenka tiesiog susisiekti su serveriu naudojant silpnesnį protokolą, bet reikia netyčinio teisėto kliento dalyvavimo. Tai gali būti organizuojama naudojant vadinamąją žemesnio lygio ataką. Norėdami suprasti šį išpuolį, tarkime, kad mūsų iliuzionistai turi sunkesnę užduotį nei filme. Tarkime, kad banko darbuotojas (kasininkas) ir Artūras susidūrė su nenumatytomis aplinkybėmis, dėl kurių kilo toks dialogas:

Įsilaužėlis: Sveiki? Tai Artūras Tresleris. Norėčiau iš naujo nustatyti slaptažodį.

Kasininkas: Puiku. Pažvelkite į savo asmeninę slaptų kodų knygelę, 28 psl., žodis 3. Visi toliau pateikti pranešimai bus užšifruoti naudojant šį konkretų žodį kaip raktą. PQJGH. LOTJNAM PGGY MXVRL ZZLQ SRIU HHNMLPPPV…

Įsilaužėlis: Ei, ei, palauk, palauk. Ar tai tikrai būtina? Ar negalime kalbėti kaip paprasti žmonės?

Kasininkas: Nerekomenduoju to daryti.

Įsilaužėlis: Aš tiesiog... žiūrėk, man buvo slogi diena, gerai? Esu VIP klientas ir neturiu nuotaikos kapstytis po šias kvailas kodų knygas.

Kasininkas: gerai. Jei primygtinai reikalaujate, pone Tressleri. Ko jūs norite?

Įsilaužėlis: Prašau, norėčiau paaukoti visus savo pinigus Arthur Tressler nacionaliniam aukų fondui.

(Pauzė).

Kasininkas: Ar dabar aišku. Jei norite atlikti dideles operacijas, pateikite savo PIN kodą.

Įsilaužėlis: Mano Kas?

Kasininkas: Jūsų asmeniniu pageidavimu tokio dydžio operacijoms atlikti reikalingas PIN kodas didelėms operacijoms. Šis kodas buvo suteiktas jums atidarius paskyrą.

Įsilaužėlis:... pamečiau. Ar tai tikrai būtina? Ar negalite tiesiog patvirtinti sandorio?

Kasininkas: Nr. Atsiprašau, pone Tressleri. Vėlgi, tai yra saugumo priemonė, kurios prašėte. Jei pageidaujate, į Jūsų pašto dėžutę galime atsiųsti naują PIN kodą.

Mūsų herojai atideda operaciją. Jie pasiklauso kelių didelių Tresslerio operacijų, tikėdamiesi išgirsti PIN kodą; bet kiekvieną kartą, kai pokalbis virsta užkoduota kvailyste, kol dar nepasakoma nieko įdomaus. Galiausiai vieną gražią dieną planas įgyvendinamas. Jie kantriai laukia momento, kai Tressleris turės atlikti didelę operaciją telefonu, jis prisijungia prie linijos ir tada...

Tressler: Sveiki. Norėčiau atlikti nuotolinę operaciją.

Kasininkas: Puiku. Pažvelkite į savo asmeninių slaptų kodų knygelę, puslapį...

(Įsilaužėlis paspaudžia mygtuką; kasininkės balsas virsta nesuprantamu triukšmu).

Kasininkas: - #@$#@$#*@$$@#* bus užšifruotas naudojant šį žodį kaip raktą. AAAYRR PLRQRZ MMNJK LOJBAN…

Tressler: Atsiprašau, ne visai supratau. Vėl? Kokiame puslapyje? Koks žodis?

Kasininkas: Tai puslapis @#$@#*$)#*#@()#@$(#@*$(#@*).

Tressler: Ką?

Kasininkas: Žodžio numeris dvidešimt @$#@$#%#$.

Tressler: Rimtai! Jau gana! Jūs ir jūsų saugumo protokolas esate kažkoks cirkas. Žinau, kad galite su manimi normaliai pasikalbėti.

Kasininkas: Nerekomenduoju…

Tressler: Ir nepatariu gaišti laiko. Nenoriu daugiau apie tai girdėti, kol neišspręsite telefono linijos problemų. Ar galime užbaigti šį sandorį ar ne?

Kasininkas:… Taip. gerai. Ko jūs norite?

Tressler: Norėčiau pervesti 20 000 USD į Lord Business Investments, sąskaitos numeris...

Kasininkas: Minutėlę palaukite. Tai didelis dalykas. Jei norite atlikti dideles operacijas, pateikite savo PIN kodą.

Tressler: Ką? O, tiksliai. 1234 m.

Čia ataka žemyn. Silpnesnis protokolas „tiesiog kalbėkite tiesiai“ buvo įsivaizduojamas kaip pasirinkimas nelaimės atveju. Ir vis dėlto mes čia.

Jums gali kilti klausimas, kas sveiko proto sukurtų tikrą „seifo, kol nepaklausys kitaip“ sistemą, kaip aprašyta aukščiau. Tačiau lygiai taip pat, kaip išgalvotas bankas rizikuoja išlaikyti klientus, kurie nemėgsta kriptografijos, sistemos apskritai dažnai kreipiasi į reikalavimus, kurie yra abejingi ar net visiškai priešiški saugumui.

Būtent taip atsitiko su SSLv2 protokolu 1995 m. JAV vyriausybė jau seniai pradėjo vertinti kriptografiją kaip ginklą, kurį geriausia saugoti nuo užsienio ir vidaus priešų. Kodo dalys buvo atskirai patvirtintos eksportui iš JAV, dažnai su sąlyga, kad algoritmas buvo sąmoningai susilpnintas. „Netscape“, populiariausios naršyklės „Netscape Navigator“ kūrėjui, leidimas naudoti SSLv2 buvo suteiktas tik naudojant iš prigimties pažeidžiamą 512 bitų RSA raktą (ir 40 bitų RC4).

Iki tūkstantmečio pabaigos taisyklės buvo sušvelnintos ir prieiga prie šiuolaikinio šifravimo tapo plačiai prieinama. Tačiau klientai ir serveriai daugelį metų palaikė susilpnintą „eksporto“ kriptografiją dėl tos pačios inercijos, kuri palaiko bet kokią seną sistemą. Klientai tikėjo, kad gali susidurti su serveriu, kuris nieko kito nepalaiko. Tą patį padarė ir serveriai. Žinoma, SSL protokolas diktuoja, kad klientai ir serveriai niekada neturėtų naudoti silpno protokolo, kai yra geresnis. Tačiau ta pati prielaida galiojo Tressleriui ir jo bankui.

Ši teorija atsidūrė dviejose didelio atgarsio atakose, kurios sukrėtė SSL protokolo saugumą 2015 m., kurias atrado „Microsoft“ mokslininkai ir INRIJA. Pirmiausia vasario mėnesį buvo atskleistos FREAK atakos detalės, o po trijų mėnesių – kita panaši ataka, pavadinta „Logjam“, kurią plačiau aptarsime, kai pereisime prie atakų prieš viešojo rakto kriptografiją.

Kriptografinės atakos: sumišusių protų paaiškinimasPažeidžiamumas FREAK (taip pat žinomas kaip „Smack TLS“) paaiškėjo, kai mokslininkai išanalizavo TLS kliento / serverio diegimus ir atrado keistą klaidą. Šiuose diegimuose, jei klientas net neprašo naudoti silpnos eksporto kriptografijos, bet serveris vis tiek atsako tokiais raktais, klientas sako „Oh well“ ir persijungia į silpną šifrų rinkinį.

Tuo metu eksporto kriptografija buvo plačiai laikoma pasenusia ir neribota, todėl ataka buvo visiškas šokas ir paveikė daugelį svarbių sričių, įskaitant Baltuosius rūmus, IRS ir NSA svetaines. Dar blogiau, kad daugelis pažeidžiamų serverių optimizavo našumą pakartotinai naudodami tuos pačius raktus, o ne generuodami naujus kiekvienai seansui. Tai leido, pažeminus protokolą, atlikti išankstinę skaičiavimo ataką: vieno rakto nulaužimas išliko gana brangus (100 USD ir 12 valandų publikavimo metu), tačiau praktinės ryšio atakos išlaidos buvo žymiai sumažintos. Pakanka vieną kartą pasirinkti serverio raktą ir nuo to momento nulaužti visų vėlesnių jungčių šifravimą.

O prieš judant toliau, reikia paminėti vieną pažengusią ataką...

Oracle ataka

Kriptografinės atakos: sumišusių protų paaiškinimasMoxie Marlinspike geriausiai žinomas kaip kelių platformų kriptovaliutų pranešimų programėlės „Signal“ tėvas; bet mums asmeniškai patinka viena iš mažiau žinomų jo naujovių - kriptografinio pražūties principas (Kriptografinis pražūties principas). Šiek tiek perfrazuojant galime pasakyti taip: „Jei protokolas veikia bet koks atlieka kriptografinę operaciją žinutei iš galimai kenksmingo šaltinio ir elgiasi skirtingai, priklausomai nuo rezultato, yra pasmerkta“. Arba aštresne forma: „Neimkite informacijos iš priešo apdoroti, o jei reikia, bent jau nerodykite rezultato“.

Palikime nuošalyje buferio perpildymą, komandų injekcijas ir panašiai; jie nepatenka į šios diskusijos sritį. „Pasmerkimo principo“ pažeidimas sukelia rimtų kriptografijos įsilaužimų dėl to, kad protokolas elgiasi tiksliai taip, kaip tikėtasi.

Kaip pavyzdį paimkime fiktyvų dizainą su pažeidžiamu pakeitimo šifru ir parodykime galimą ataką. Nors jau matėme ataką prieš pakaitinį šifrą naudojant dažnių analizę, tai nėra tik „dar vienas būdas sulaužyti tą patį šifrą“. Priešingai, orakulų atakos yra daug modernesnis išradimas, pritaikytas daugeliui situacijų, kai dažnių analizė nepavyksta, ir mes pamatysime tai kitame skyriuje. Čia paprastas šifras pasirenkamas tik tam, kad pavyzdys būtų aiškesnis.

Taigi Alisa ir Bobas bendrauja naudodami paprastą pakaitinį šifrą, naudodami tik jiems žinomą raktą. Jie labai griežtai laikosi žinučių ilgio: jie yra lygiai 20 simbolių ilgio. Taigi jie susitarė, kad jei kas nors nori išsiųsti trumpesnę žinutę, pranešimo pabaigoje turėtų pridėti netikrą tekstą, kad jis būtų tiksliai 20 simbolių. Po tam tikrų diskusijų jie nusprendė, kad priims tik šiuos netikrus tekstus: a, bb, ccc, dddd tt Taigi žinomas bet kokio reikiamo ilgio fiktyvus tekstas.

Kai Alisa arba Bobas gauna pranešimą, jie pirmiausia patikrina, ar pranešimas yra tinkamo ilgio (20 simbolių) ir ar priesaga yra tinkamas netikras tekstas. Jei taip nėra, jie atsako atitinkamu klaidos pranešimu. Jei teksto ilgis ir netikras tekstas yra tinkami, gavėjas perskaito patį pranešimą ir išsiunčia užšifruotą atsakymą.

Atakos metu užpuolikas apsimeta Bobu ir siunčia netikrus pranešimus Alisai. Pranešimai yra visiška nesąmonė – užpuolikas neturi rakto, todėl negali suklastoti prasmingos žinutės. Tačiau kadangi protokolas pažeidžia pasmerkimo principą, užpuolikas vis tiek gali įvilioti Alisą atskleisti pagrindinę informaciją, kaip parodyta toliau.

Įsilaužėlis: PREWF ZHJKL MMMN. LA

Alisa: Netinkamas netikras tekstas.

Įsilaužėlis: PREWF ZHJKL MMMN. LB

Alisa: Netinkamas netikras tekstas.

Įsilaužėlis: PREWF ZHJKL MMMN. LC

Alisa: ILCT? TLCT RUWO PUT KCAW CPS OWPOW!

Įsilaužėlis neįsivaizduoja, ką Alisa ką tik pasakė, bet pažymi, kad simbolis C turi atitikti a, nes Alisa priėmė netikrą tekstą.

Įsilaužėlis: REWF ZHJKL MMMN. LAA

Alisa: Netinkamas netikras tekstas.

Įsilaužėlis: REWF ZHJKL MMMN. LBB

Alisa: Netinkamas netikras tekstas.

Po kelių bandymų...

Įsilaužėlis: REWF ZHJKL MMMN. LGG

Alisa: Netinkamas netikras tekstas.

Įsilaužėlis: REWF ZHJKL MMMN. LHH

Alisa: TLQO JWCRO FQAW SUY LCR C OWQXYJW. IW PWWR TU TCFA CHUYT TLQO JWFCTQUPOLQZ.

Vėlgi, užpuolikas neįsivaizduoja, ką Alisa ką tik pasakė, bet pažymi, kad H turi atitikti b, nes Alisa priėmė netikrą tekstą.

Ir taip toliau, kol užpuolikas sužinos kiekvieno veikėjo reikšmę.

Iš pirmo žvilgsnio metodas primena pasirinktą paprastojo teksto ataką. Galų gale užpuolikas pasirenka šifruotus tekstus, o serveris juos paklusniai apdoroja. Pagrindinis skirtumas, dėl kurio šios atakos yra gyvybingos realiame pasaulyje, yra tas, kad užpuolikui nereikia prieigos prie tikrojo nuorašo – pakanka serverio atsakymo, net tokio nekenksmingo kaip „Neteisingas fiktyvus tekstas“.

Nors ši konkreti ataka yra pamokanti, per daug nesijaudinkite dėl „fiktyviojo teksto“ schemos specifikos, konkrečios naudojamos kriptosistemos ar tikslios užpuoliko siunčiamų pranešimų sekos. Pagrindinė idėja yra ta, kaip Alisa reaguoja skirtingai, atsižvelgdama į paprasto teksto savybes, ir tai daro nepatikrinusi, ar atitinkamas šifruotas tekstas iš tikrųjų atėjo iš patikimos šalies. Taigi Alisa leidžia užpuolikui iš savo atsakymų išspausti slaptą informaciją.

Šiame scenarijuje galima daug ką pakeisti. Simboliai, į kuriuos Alisa reaguoja, arba pats jos elgesio skirtumas, ar net naudojama kriptosistema. Tačiau principas išliks tas pats, o ataka kaip visuma išliks gyvybinga viena ar kita forma. Pagrindinis šios atakos įgyvendinimas padėjo atskleisti keletą saugos klaidų, kurias netrukus apžvelgsime; bet pirmiausia reikia išmokti keletą teorinių pamokų. Kaip panaudoti šį fiktyvų „Alisos scenarijų“ atakoje, kuri gali veikti naudojant tikrą šiuolaikinį šifrą? Ar tai įmanoma net teoriškai?

1998 metais šveicarų kriptografas Danielis Bleichenbacheris į šį klausimą atsakė teigiamai. Jis pademonstravo orakulų ataką prieš plačiai naudojamą viešojo rakto kriptosistemą RSA, naudodamas specifinę pranešimų schemą. Kai kuriuose RSA diegimuose serveris atsako skirtingais klaidų pranešimais, priklausomai nuo to, ar paprastas tekstas atitinka schemą, ar ne; to pakako puolimui įvykdyti.

Po ketverių metų, 2002 m., prancūzų kriptografas Serge'as Vaudenay'us pademonstravo orakulų ataką, beveik identišką aukščiau aprašytam Alisos scenarijui, išskyrus tai, kad vietoj fiktyvaus šifro jis sulaužė visą garbingą šiuolaikinių šifrų klasę, kuria žmonės iš tikrųjų naudojasi. Visų pirma, Vaudenay ataka taikosi į fiksuoto įvesties dydžio šifrus („bloko šifrus“), kai jie naudojami vadinamajame „CBC šifravimo režime“ ir su tam tikra populiaria užpildymo schema, iš esmės lygiaverčiai Alisos scenarijuje.

Taip pat 2002 metais amerikiečių kriptografas Johnas Kelsey – bendraautorius Dviejų žuvų — pasiūlė įvairias orakulų atakas prieš sistemas, kurios suspaudžia pranešimus ir vėliau juos užšifruoja. Ryškiausias iš jų buvo ataka, kurios metu buvo pasinaudota tuo, kad iš šifruoto teksto ilgio dažnai galima numanyti pradinį paprasto teksto ilgį. Teoriškai tai leidžia atlikti orakulų ataką, kuri atkuria dalis originalaus paprasto teksto.

Žemiau pateikiame išsamesnį Vaudenay ir Kelsey atakų aprašymą (išsamesnį Bleichenbacher atakos aprašymą pateiksime, kai pereisime prie atakų prieš viešojo rakto kriptografiją). Nepaisant visų mūsų pastangų, tekstas tampa šiek tiek techninis; taigi, jei jums pakanka pirmiau pateiktų dalykų, praleiskite kitas dvi dalis.

Vodenės puolimas

Norėdami suprasti Vaudenay ataką, pirmiausia turime šiek tiek daugiau pakalbėti apie blokinius šifrus ir šifravimo režimus. „Bloko šifras“, kaip minėta, yra šifras, kuris paima raktą ir tam tikro fiksuoto ilgio („bloko ilgio“) įvestį ir sukuria tokio pat ilgio užšifruotą bloką. Blokų šifrai yra plačiai naudojami ir laikomi gana saugiais. Dabar išėjęs į pensiją DES, laikomas pirmuoju moderniu šifru, buvo blokinis šifras. Kaip minėta aukščiau, tas pats pasakytina ir apie šiandien plačiai naudojamą AES.

Deja, blokiniai šifrai turi vieną akivaizdų silpnumą. Įprastas bloko dydis yra 128 bitai arba 16 simbolių. Akivaizdu, kad šiuolaikinei kriptografijai reikia dirbti su didesniais įvesties duomenimis, todėl čia atsiranda šifravimo režimai. Šifravimo režimas iš esmės yra įsilaužimas: tai būdas kažkaip pritaikyti blokinį šifrą, kuris priima tik tam tikro dydžio įvestį į savavališko ilgio įvestį.

Vodene ataka sutelkta į populiarų CBC (Cipher Block Chaining) veikimo režimą. Ataka traktuoja pagrindinį bloko šifrą kaip magišką, neįveikiamą juodąją dėžę ir visiškai apeina jos saugumą.

Štai diagrama, rodanti, kaip veikia CBC režimas:

Kriptografinės atakos: sumišusių protų paaiškinimas

Kriptografinės atakos: sumišusių protų paaiškinimas

Apskritimas pliusas reiškia XOR (išskirtinę ARBA) operaciją. Pavyzdžiui, gaunamas antrasis šifruoto teksto blokas:

  1. Atliekant XOR operaciją antrame paprasto teksto bloke su pirmuoju šifruoto teksto bloku.
  2. Gauto bloko šifravimas blokiniu šifru naudojant raktą.

Kadangi CBC taip intensyviai naudoja dvejetainę XOR operaciją, šiek tiek prisiminkime kai kurias jos savybes:

  • Idempotencija: Kriptografinės atakos: sumišusių protų paaiškinimas
  • Komutatyvumas: Kriptografinės atakos: sumišusių protų paaiškinimas
  • Asociatyvumas: Kriptografinės atakos: sumišusių protų paaiškinimas
  • Savaiminis grįžtamumas: Kriptografinės atakos: sumišusių protų paaiškinimas
  • Baito dydis: baitas n iš Kriptografinės atakos: sumišusių protų paaiškinimas = (n baitas iš Kriptografinės atakos: sumišusių protų paaiškinimas) Kriptografinės atakos: sumišusių protų paaiškinimas (n baitas iš Kriptografinės atakos: sumišusių protų paaiškinimas)

Paprastai šios savybės reiškia, kad jei turime lygtį, apimančią XOR operacijas ir vieną nežinomą, ją galima išspręsti. Pavyzdžiui, jei mes tai žinome Kriptografinės atakos: sumišusių protų paaiškinimas su nežinomybe Kriptografinės atakos: sumišusių protų paaiškinimas ir garsus Kriptografinės atakos: sumišusių protų paaiškinimas и Kriptografinės atakos: sumišusių protų paaiškinimas, tada galime pasikliauti aukščiau nurodytomis savybėmis, kad išspręstume lygtį Kriptografinės atakos: sumišusių protų paaiškinimas. Taikant XOR abiejose lygties pusėse su Kriptografinės atakos: sumišusių protų paaiškinimas, mes gauname Kriptografinės atakos: sumišusių protų paaiškinimas. Visa tai akimirksniu taps labai aktualu.

Yra du nedideli skirtumai ir vienas didelis skirtumas tarp mūsų Alisos scenarijaus ir Vaudenay puolimo. Du smulkesni:

  • Scenarijuje Alisa tikėjosi, kad paprasti tekstai baigsis veikėjais a, bb, ccc ir taip toliau. Wodene atakos metu auka tikisi, kad paprasti tekstai N kartų baigsis N baitu (ty šešioliktainis skaičius 01 arba 02 02, arba 03 03 03 ir pan.). Tai grynai kosmetinis skirtumas.
  • Alisos scenarijuje buvo nesunku pasakyti, ar Alisa priėmė pranešimą iš atsakymo „Neteisingas fiktyvus tekstas“. Vodenės puolime reikia daugiau analizės ir svarbu tiksliai įgyvendinti aukos pusę; bet trumpumo dėlei priimkime tai, kad ši analizė vis dar įmanoma.

Pagrindinis skirtumas:

  • Kadangi nenaudojame tos pačios kriptosistemos, ryšys tarp užpuoliko valdomų šifruoto teksto baitų ir paslapčių (rakto ir paprasto teksto) akivaizdžiai skirsis. Todėl, kurdamas šifruotus tekstus ir interpretuodamas serverio atsakymus, užpuolikas turės naudoti kitą strategiją.

Šis pagrindinis skirtumas yra paskutinė galvosūkio dalis, norint suprasti Vaudenay ataką, todėl šiek tiek pagalvokime, kodėl ir kaip iš pradžių galima surengti orakulų ataką prieš CBC.

Tarkime, kad mums suteikiamas 247 blokų CBC šifras ir norime jį iššifruoti. Mes galime siųsti netikrus pranešimus į serverį, kaip ir anksčiau galėjome siųsti netikrus pranešimus Alisai. Serveris mums iššifruos pranešimus, bet nerodys iššifravimo – vietoj to vėlgi, kaip ir Alisa, serveris praneš tik vieną informacijos bitą: ar paprastasis tekstas turi galiojantį užpildymą, ar ne.

Apsvarstykite, kad Alisos scenarijuje mes turėjome tokius santykius:

$$display$$text{SIMPLE_SUBSTITUTION}(tekstas{šifruotas tekstas},tekstas{raktas}) = tekstas{plaintext}$$display$$

Pavadinkime tai „Alisos lygtimi“. Mes valdėme šifruotą tekstą; serveris (Alisa) nutekino neaiškią informaciją apie gautą grynąjį tekstą; ir tai leido išvesti informaciją apie paskutinį veiksnį – raktą. Analogiškai, jei rasime tokį CBC scenarijaus ryšį, galbūt galėtume išgauti ir ten slaptos informacijos.

Laimei, tikrai yra santykių, kuriais galime pasinaudoti. Apsvarstykite galutinio skambučio išvestį, kad iššifruotumėte blokinį šifrą ir pažymėkite šią išvestį kaip Kriptografinės atakos: sumišusių protų paaiškinimas. Taip pat žymime paprasto teksto blokus Kriptografinės atakos: sumišusių protų paaiškinimas ir šifruoto teksto blokai Kriptografinės atakos: sumišusių protų paaiškinimas. Dar kartą pažvelkite į CBC diagramą ir pastebėkite, kas atsitiks:

Kriptografinės atakos: sumišusių protų paaiškinimas

Pavadinkime tai „CBC lygtimi“.

Pagal Alisos scenarijų, stebėdami šifruotą tekstą ir atitinkamą paprastojo teksto nutekėjimą, galėjome surengti ataką, kuri atkūrė trečiąjį lygties terminą – raktą. Pagal CBC scenarijų mes taip pat stebime šifruotą tekstą ir stebime informacijos nutekėjimą atitinkamame grynajame tekste. Jei analogija tinka, galime gauti informacijos apie Kriptografinės atakos: sumišusių protų paaiškinimas.

Tarkime, kad tikrai atkūrėme Kriptografinės atakos: sumišusių protų paaiškinimas, kas tada? Na, tada galime iš karto išspausdinti visą paskutinį paprasto teksto bloką (Kriptografinės atakos: sumišusių protų paaiškinimas), tiesiog įvesdami Kriptografinės atakos: sumišusių protų paaiškinimas (kurį turime) ir
gautas Kriptografinės atakos: sumišusių protų paaiškinimas į CBC lygtį.

Dabar, kai esame optimistiškai nusiteikę dėl bendro puolimo plano, laikas išsiaiškinti detales. Atkreipkite dėmesį į tai, kaip tiesioginio teksto informacija nutekinama serveryje. Alisos scenarijuje nutekėjimas įvyko, nes Alisa atsakys teisingu pranešimu tik tuo atveju, jei $inline$text{SIMPLE_SUBSTITUTION}(text{ciphertext},text{key})$inline$ pasibaigs eilute a (Arba bbir pan., tačiau tikimybė, kad šias sąlygas sukels atsitiktinumas, buvo labai maža). Panašiai kaip CBC, serveris priima užpildymą tada ir tik tada Kriptografinės atakos: sumišusių protų paaiškinimas baigiasi šešioliktaine 01. Taigi pabandykime tą patį triuką: siųsti netikrus šifruotus tekstus su savo netikromis vertybėmis Kriptografinės atakos: sumišusių protų paaiškinimaskol serveris priims užpildą.

Kai serveris priima vieno iš mūsų netikrų pranešimų užpildymą, tai reiškia, kad:

Kriptografinės atakos: sumišusių protų paaiškinimas

Dabar naudojame baitų baitų XOR ypatybę:

Kriptografinės atakos: sumišusių protų paaiškinimas

Mes žinome pirmą ir trečią terminus. Ir mes jau matėme, kad tai leidžia mums susigrąžinti likusį terminą - paskutinį baitą Kriptografinės atakos: sumišusių protų paaiškinimas:

Kriptografinės atakos: sumišusių protų paaiškinimas

Tai taip pat suteikia mums paskutinį galutinio paprasto teksto bloko baitą per CBC lygtį ir baitų po baito savybę.

Galėtume tai palikti ir būti patenkinti, kad atakavome teoriškai stiprų šifrą. Tačiau iš tikrųjų galime daug daugiau: iš tikrųjų galime atkurti visą tekstą. Tam reikalingas triukas, kurio nebuvo pradiniame Alisos scenarijuje ir kurio nereikia orakulo atakai, bet vis tiek verta pasimokyti.

Norėdami tai suprasti, pirmiausia atkreipkite dėmesį, kad teisingos paskutinio baito reikšmės išvedimo rezultatas yra Kriptografinės atakos: sumišusių protų paaiškinimas turime naują gebėjimą. Dabar, kurdami šifruotus tekstus, galime manipuliuoti paskutiniu atitinkamo paprasto teksto baitu. Vėlgi, tai susiję su CBC lygtimi ir baito po baito savybe:

Kriptografinės atakos: sumišusių protų paaiškinimas

Kadangi dabar žinome antrąjį terminą, galime valdyti pirmąjį ir valdyti trečiąjį. Mes tiesiog apskaičiuojame:

Kriptografinės atakos: sumišusių protų paaiškinimas

Anksčiau to negalėjome padaryti, nes dar neturėjome paskutinio baito Kriptografinės atakos: sumišusių protų paaiškinimas.

Kaip tai mums padės? Tarkime, kad dabar sukuriame visus šifruotus tekstus taip, kad atitinkamuose paprastuose tekstuose paskutinis baitas būtų lygus 02. Dabar serveris priima užpildymą tik tuo atveju, jei paprastasis tekstas baigiasi 02 02. Kadangi pataisėme paskutinį baitą, tai įvyks tik tuo atveju, jei priešpaskutinis paprastojo teksto baitas taip pat bus 02. Siunčiame netikrus šifruoto teksto blokus, keičiame priešpaskutinį baitą, kol serveris priims vieno iš jų užpildymą. Šiuo metu gauname:

Kriptografinės atakos: sumišusių protų paaiškinimas

Ir atkuriame priešpaskutinį baitą Kriptografinės atakos: sumišusių protų paaiškinimas kaip ir paskutinis buvo restauruotas. Tęsiame ta pačia dvasia: paskutinius du paprastojo teksto baitus pataisome į 03 03, pakartojame šią ataką trečiam baitui nuo pabaigos ir taip toliau, galiausiai visiškai atkurdami Kriptografinės atakos: sumišusių protų paaiškinimas.

O kaip likusi teksto dalis? Atkreipkite dėmesį, kad vertė Kriptografinės atakos: sumišusių protų paaiškinimas iš tikrųjų yra $inline$text{BLOCK_DECRYPT}(tekstas{key},C_{247})$inline$. Vietoj to galime įdėti bet kokį kitą bloką Kriptografinės atakos: sumišusių protų paaiškinimas, ir ataka vis tiek bus sėkminga. Tiesą sakant, galime paprašyti serverio atlikti $inline$text{BLOCK_DECRYPT}$inline$ bet kokiems duomenims. Šiuo metu žaidimas baigtas – galime iššifruoti bet kokį šifruotą tekstą (dar kartą pažiūrėkite į CBC iššifravimo diagramą, kad tai pamatytumėte; ir atkreipkite dėmesį, kad IV yra viešas).

Šis konkretus metodas vaidina lemiamą vaidmenį orakulo atakoje, su kuria susidursime vėliau.

Kelsey puolimas

Mūsų malonus Johnas Kelsey išdėstė principus, kuriais grindžiama daugybė galimų išpuolių, o ne tik konkrečios atakos prieš konkretų šifrą detales. Jo Metų 2002 straipsnis yra galimų atakų prieš užšifruotus suglaudintus duomenis tyrimas. Ar manėte, kad informacijos, kad duomenys buvo suglaudinti prieš šifravimą, neužteko atakai įvykdyti? Pasirodo, užtenka.

Tokį stebinantį rezultatą lemia du principai. Pirma, yra stipri koreliacija tarp paprasto teksto ilgio ir šifruoto teksto ilgio; daugeliui šifrų tiksli lygybė. Antra, kai atliekamas suspaudimas, taip pat yra stipri koreliacija tarp suspausto pranešimo ilgio ir paprasto teksto „triukšmo“ laipsnio, tai yra, nesikartojančių simbolių proporcijos (techninis terminas yra „didelė entropija“). ).

Norėdami pamatyti, kaip veikia principas, apsvarstykite du aiškius tekstus:

1 paprastas tekstas: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

2 paprastas tekstas: ATVXCAGTRSVPTVVULSJQHGEYCMQPCRQBGCYIXCFJGJ

Tarkime, kad abu paprasti tekstai yra suglaudinti ir užšifruoti. Gaunate du šifruotus tekstus ir turite atspėti, kuris šifruotas tekstas atitinka kurį paprastą tekstą:

1 šifruotas tekstas: PVOVEYBPJDPVANEAWVGCIUWAABCIYIKOOURMYDTA

2 šifruotas tekstas: DWKJZXYU

Atsakymas aiškus. Iš paprastų tekstų tik 1 grynasis tekstas galėjo būti suspaustas į nedidelį antrojo šifruoto teksto ilgį. Mes tai supratome nieko nežinodami apie glaudinimo algoritmą, šifravimo raktą ar net patį šifrą. Palyginti su galimų kriptografinių atakų hierarchija, tai savotiška beprotybė.

Kelsey taip pat pabrėžia, kad tam tikromis neįprastomis aplinkybėmis šis principas taip pat gali būti naudojamas orakulų atakai vykdyti. Konkrečiai, aprašoma, kaip užpuolikas gali atkurti slaptą paprastąjį tekstą, jei gali priversti serverį užšifruoti formos duomenis (paprastą tekstą, po kurio Kriptografinės atakos: sumišusių protų paaiškinimaskol jis valdo Kriptografinės atakos: sumišusių protų paaiškinimas ir gali kažkaip patikrinti užšifruoto rezultato ilgį.

Vėlgi, kaip ir kitų orakulų atakų, mes turime ryšį:

Kriptografinės atakos: sumišusių protų paaiškinimas

Vėlgi, mes valdome vieną terminą (Kriptografinės atakos: sumišusių protų paaiškinimas), matome nedidelį informacijos nutekėjimą apie kitą narį (šifruotas tekstas) ir bandome atkurti paskutinį (plaintext). Nepaisant analogijos, tai yra šiek tiek neįprasta situacija, palyginti su kitomis mūsų matytomis orakulų atakomis.

Norėdami parodyti, kaip tokia ataka gali veikti, panaudokime fiktyvią suspaudimo schemą, kurią ką tik sugalvojome: TOYZIP. Ji ieško teksto eilučių, kurios buvo tekste anksčiau, ir pakeičia jas trimis vietos rezervavimo baitais, nurodančiais, kur rasti ankstesnį eilutės atvejį ir kiek kartų ji ten rodoma. Pavyzdžiui, linija helloworldhello galima suspausti į helloworld[00][00][05] 13 baitų ilgio, palyginti su pradiniais 15 baitų.

Tarkime, užpuolikas bando atkurti paprastą formos tekstą password=..., kur pats slaptažodis nežinomas. Pagal Kelsey atakos modelį, užpuolikas gali paprašyti serverio suspausti ir užšifruoti formos pranešimus (paprastas tekstas, po kurio Kriptografinės atakos: sumišusių protų paaiškinimas), kur Kriptografinės atakos: sumišusių protų paaiškinimas - laisvas tekstas. Kai serveris baigia darbą, jis praneša rezultato trukmę. Ataka vyksta taip:

Įsilaužėlis: Suglaudinkite ir užšifruokite paprastą tekstą be užpildymo.

Serveris: Rezultato ilgis 14.

Įsilaužėlis: Suglaudinkite ir užšifruokite paprastą tekstą, prie kurio pridėta password=a.

Serveris: Rezultato ilgis 18.

Krekeris pažymi: [originalas 14] + [trys baitai, kurie buvo pakeisti password=] + a

Įsilaužėlis: Suglaudinkite ir užšifruokite paprastą tekstą, prie kurio pridėta password=b.

Serveris: Rezultato ilgis 18.

Įsilaužėlis: Suglaudinkite ir užšifruokite paprastą tekstą, prie kurio pridėta password=с.

Serveris: Rezultato ilgis 17.

Krekeris pažymi: [originalas 14] + [trys baitai, kurie buvo pakeisti password=c]. Daroma prielaida, kad pradiniame paprastame tekste yra eilutė password=c. Tai yra, slaptažodis prasideda raide c

Įsilaužėlis: Suglaudinkite ir užšifruokite paprastą tekstą, prie kurio pridėta password=сa.

Serveris: Rezultato ilgis 18.

Krekeris pažymi: [originalas 14] + [trys baitai, kurie buvo pakeisti password=с] + a

Įsilaužėlis: Suglaudinkite ir užšifruokite paprastą tekstą, prie kurio pridėta password=сb.

Serveris: Rezultato ilgis 18.

(... Po kiek laiko...)

Įsilaužėlis: Suglaudinkite ir užšifruokite paprastą tekstą, prie kurio pridėta password=со.

Serveris: Rezultato ilgis 17.

Krekeris pažymi: [originalas 14] + [trys baitai, kurie buvo pakeisti password=co]. Naudodamas tą pačią logiką, užpuolikas daro išvadą, kad slaptažodis prasideda raidėmis co

Ir taip toliau, kol bus atkurtas visas slaptažodis.

Skaitytojas būtų atleistas, jei galvotų, kad tai yra grynai akademinis užsiėmimas ir kad toks atakos scenarijus realiame pasaulyje niekada nekiltų. Deja, kaip netrukus pamatysime, kriptografijos geriau neatsisakyti.

Prekės ženklo pažeidžiamumas: CRIME, POODLE, DROWN

Galiausiai, išsamiai išstudijavę teoriją, galime pamatyti, kaip šie metodai pritaikomi realiose kriptografinėse atakose.

NUSIKALTIMAS

Kriptografinės atakos: sumišusių protų paaiškinimasJei ataka nukreipta į aukos naršyklę ir tinklą, kai kurios bus lengvesnės, o kitos – sunkesnės. Pavyzdžiui, nesunku matyti aukos eismą: tiesiog sėdėkite su juo toje pačioje kavinėje su WiFi. Dėl šios priežasties potencialioms aukoms (t. y. visiems) paprastai patariama naudoti šifruotą ryšį. Bus sudėtingiau, bet vis tiek įmanoma aukos vardu pateikti HTTP užklausas kokiai nors trečiosios šalies svetainei (pavyzdžiui, Google). Užpuolikas turi privilioti auką į kenkėjišką tinklalapį su užklausą pateikiančiu scenarijumi. Žiniatinklio naršyklė automatiškai pateiks atitinkamą seanso slapuką.

Tai atrodo nuostabu. Jei Bobas nuėjo į evil.com, ar scenarijus šioje svetainėje gali paprašyti „Google“ el. paštu išsiųsti Bobo slaptažodį [email protected]? Na, teoriškai taip, bet iš tikrųjų ne. Šis scenarijus vadinamas kelių svetainių užklausos klastojimo ataka (Kelių svetainių užklausų klastojimas, CSRF) ir buvo populiarus maždaug 90-ųjų viduryje. Šiandien, jei evil.com Išbandžius šį triuką, „Google“ (ar bet kuri save gerbianti svetainė) paprastai atsakys: „Puiku, bet jūsų CSRF prieigos raktas šiai operacijai bus... hm... три триллиона и семь. Pakartokite šį numerį“. Šiuolaikinės naršyklės turi vadinamąją „tos pačios kilmės politiką“, pagal kurią scenarijai svetainėje A neturi prieigos prie svetainės B siunčiamos informacijos. Taigi scenarijus evil.com gali siųsti užklausas google.com, bet negali perskaityti atsakymų ar iš tikrųjų užbaigti operacijos.

Turime pabrėžti, kad nebent Bobas naudoja šifruotą ryšį, visos šios apsaugos yra beprasmės. Užpuolikas gali tiesiog perskaityti Bobo srautą ir atkurti „Google“ seanso slapuką. Naudodamas šį slapuką, jis tiesiog atidarys naują „Google“ skirtuką, neišeidamas iš savo naršyklės ir apsimetinėja Bobu, nesusidurdamas su įkyriomis tos pačios kilmės taisyklėmis. Bet, deja, įsilaužėliams tai darosi vis rečiau. Visas internetas jau seniai paskelbė karą nešifruotiems ryšiams, o Bobo išeinantis srautas tikriausiai yra užšifruotas, nesvarbu, ar jam tai patinka, ar ne. Be to, nuo pat protokolo įgyvendinimo pradžios buvo ir eismas susitraukė prieš šifravimą; tai buvo įprasta praktika siekiant sumažinti delsą.

Čia tai ir pasirodo NUSIKALTIMAS (Compression Ratio Infoleak Made Easy, paprastas nuotėkis per suspaudimo laipsnį). Pažeidžiamumą 2012 metų rugsėjį atskleidė saugumo tyrinėtojai Juliano Rizzo ir Thai Duong. Mes jau išnagrinėjome visą teorinį pagrindą, kuris leidžia suprasti, ką ir kaip jie padarė. Užpuolikas gali priversti Bobo naršyklę siųsti užklausas „Google“ ir klausytis atsakymų vietiniame tinkle suglaudinta, šifruota forma. Todėl mes turime:

Kriptografinės atakos: sumišusių protų paaiškinimas

Čia užpuolikas valdo užklausą ir turi prieigą prie srauto smirdiklio, įskaitant paketo dydį. Kelsey išgalvotas scenarijus atgijo.

Suprasdami teoriją, CRIME autoriai sukūrė išnaudojimą, kuris gali pavogti seanso slapukus įvairiose svetainėse, įskaitant Gmail, Twitter, Dropbox ir Github. Pažeidžiamumas paveikė daugumą šiuolaikinių interneto naršyklių, todėl buvo išleisti pataisymai, kurie tyliai palaidojo SSL glaudinimo funkciją, kad ji iš viso nebūtų naudojama. Vienintelė apsaugota nuo pažeidžiamumo buvo garbingoji „Internet Explorer“, kuri niekada nenaudojo SSL glaudinimo.

PUDAS

Kriptografinės atakos: sumišusių protų paaiškinimas2014 m. spalį „Google“ saugos komanda sukėlė bangas saugumo bendruomenėje. Jie sugebėjo išnaudoti SSL protokolo pažeidžiamumą, kuris buvo pataisytas daugiau nei prieš dešimt metų.

Paaiškėjo, kad kol serveriuose veikia blizgantis naujasis TLSv1.2, daugelis paliko senojo SSLv3 palaikymą, kad būtų galima atgalinis suderinamumas su Internet Explorer 6. Jau kalbėjome apie žemesnės versijos atakas, todėl galite įsivaizduoti, kas vyksta. Gerai suorganizuotas rankų paspaudimo protokolo sabotažas ir serveriai yra pasirengę grįžti prie seno gero SSLv3, iš esmės panaikinant pastaruosius 15 metų saugumo tyrimus.

Dėl istorinio konteksto Štai trumpa SSL istorijos santrauka iki 2 versijos iš Matthew Green:

Transport Layer Security (TLS) yra svarbiausias saugumo protokolas internete. [..] beveik kiekviena operacija, kurią atliekate internete, priklauso nuo TLS. [..] Tačiau TLS ne visada buvo TLS. Protokolas savo gyvavimą pradėjo m „Netscape“ komunikacijos vadinamas „Saugių lizdų sluoksniu“ arba SSL. Sklando gandai, kad pirmoji SSL versija buvo tokia baisi, kad kūrėjai surinko visus kodo atspaudus ir palaidojo slaptame sąvartyne Naujojoje Meksikoje. Todėl pirmoji viešai prieinama SSL versija iš tikrųjų yra SSL 2 versija. Tai gana baisu ir [..] tai buvo 90-ųjų vidurio produktas, kurį šiuolaikiniai kriptografai laiko "tamsieji kriptografijos amžiai“ Daugelis baisiausių kriptografinių atakų, apie kurias šiandien žinome, dar nebuvo atrasti. Dėl to SSLv2 protokolo kūrėjams iš esmės buvo palikta blaškytis tamsoje ir jie susidūrė su daug baisių monstrų - jų apmaudu ir mūsų naudai, nes atakos prieš SSLv2 paliko neįkainojamų pamokų naujos kartos protokolams.

Po šių įvykių 1996 m. nusivylęs „Netscape“ perkūrė SSL protokolą nuo nulio. Rezultatas buvo SSL 3 versija, kuri ištaisė keletą žinomų savo pirmtako saugumo problemų.

Laimei, įsilaužėlių laimei, „keli“ nereiškia „visi“. Apskritai SSLv3 suteikė visus reikalingus blokus Vodene atakai pradėti. Protokolas naudojo CBC režimo bloko šifrą ir nesaugią užpildymo schemą (tai buvo ištaisyta TLS; todėl reikia žemesnės versijos atakos). Jei prisimenate užpildymo schemą mūsų pradiniame Vaudenay atakos aprašyme, SSLv3 schema yra labai panaši.

Deja, įsilaužėliams „panašus“ nereiškia „identiškas“. SSLv3 užpildymo schema yra „N atsitiktinių baitų, po kurių seka skaičius N“. Pabandykite tokiomis sąlygomis pasirinkti įsivaizduojamą šifruoto teksto bloką ir pereiti visus pradinės Vaudene schemos veiksmus: pastebėsite, kad ataka sėkmingai ištraukia paskutinį baitą iš atitinkamo paprasto teksto bloko, bet toliau neperžengia. Kas 16 šifruoto teksto baito iššifravimas yra puikus triukas, tačiau tai nėra pergalė.

Patyrusi nesėkmę, „Google“ komanda ėmėsi paskutinės išeities: perėjo prie galingesnio grėsmės modelio – naudojamo NUSIKALTIMAI. Darant prielaidą, kad užpuolikas yra scenarijus, veikiantis aukos naršyklės skirtuke ir gali išgauti seanso slapukus, ataka vis tiek įspūdinga. Nors platesnis grėsmės modelis yra mažiau realus, ankstesniame skyriuje matėme, kad šis konkretus modelis yra įmanomas.

Atsižvelgiant į šias galingesnes užpuoliko galimybes, ataka dabar gali tęstis. Atminkite, kad užpuolikas žino, kur antraštėje rodomas šifruotas seanso slapukas, ir valdo prieš jį pateikiamos HTTP užklausos ilgį. Todėl jis gali manipuliuoti HTTP užklausa taip, kad paskutinis slapuko baitas būtų suderintas su bloko pabaiga. Dabar šis baitas tinka iššifruoti. Galite tiesiog pridėti vieną simbolį prie užklausos, o priešpaskutinis slapuko baitas liks toje pačioje vietoje ir bus tinkamas pasirinkti naudojant tą patį metodą. Ataka tęsiasi tokiu būdu, kol slapukų failas bus visiškai atkurtas. Tai vadinama POODLE: „Oracle“ papildymas senesnio lygio šifravimu.

NUSKENDINTI

Kriptografinės atakos: sumišusių protų paaiškinimasKaip minėjome, SSLv3 turėjo trūkumų, tačiau iš esmės skyrėsi nuo savo pirmtako, nes nesandarus SSLv2 buvo kitos eros produktas. Čia galite pertraukti pranešimą viduryje: соглашусь на это только через мой труп virto соглашусь на это; klientas ir serveris gali susitikti internete, sukurti pasitikėjimą ir keistis paslaptimis užpuoliko akivaizdoje, o šis galėtų lengvai apsimesti abiem. Taip pat yra eksporto kriptografijos problema, kurią minėjome svarstydami apie FREAK. Tai buvo kriptografinė Sodoma ir Gomora.

2016 m. kovą įvairių technikos sričių mokslininkų komanda susibūrė ir padarė stulbinantį atradimą: SSLv2 vis dar naudojamas apsaugos sistemose. Taip, užpuolikai nebegalėjo atnaujinti šiuolaikinių TLS seansų iki SSLv2, nes ši skylė buvo uždaryta po FREAK ir POODLE, tačiau jie vis tiek gali prisijungti prie serverių ir patys inicijuoti SSLv2 seansus.

Galite paklausti, kodėl mums rūpi, ką jie ten veikia? Jie turi pažeidžiamą seansą, bet tai neturėtų paveikti kitų seansų ar serverio saugumo – tiesa? Na, ne visai. Taip, teoriškai taip ir turėtų būti. Bet ne – nes SSL sertifikatų generavimas užkrauna tam tikrą naštą, todėl daugelis serverių naudoja tuos pačius sertifikatus ir dėl to tuos pačius RSA raktus TLS ir SSLv2 ryšiams. Dar blogiau, dėl OpenSSL klaidos parinktis „Išjungti SSLv2“ šiame populiariame SSL diegime iš tikrųjų neveikė.

Tai leido įvykdyti kryžminę TLS ataką, vadinamą NUSKENDINTI (RSA iššifravimas naudojant pasenusią ir susilpnintą šifravimą, RSA iššifravimas pasenusiu ir susilpnėjusiu šifravimu). Prisiminkite, kad tai nėra tas pats, kas trumpalaikė ataka; užpuolikui nereikia veikti kaip „žmogui viduryje“ ir nereikia įtraukti kliento, kad jis dalyvautų nesaugiame seanse. Užpuolikai tiesiog patys inicijuoja nesaugų SSLv2 seansą su serveriu, atakuoja silpną protokolą ir atkuria serverio privatųjį RSA raktą. Šis raktas taip pat galioja TLS ryšiams ir nuo šio momento jokia TLS sauga neleis jam pažeisti.

Tačiau norint jį nulaužti, reikia veikiančios atakos prieš SSLv2, kuri leidžia atkurti ne tik konkretų srautą, bet ir slaptą RSA serverio raktą. Nors tai sudėtinga sąranka, mokslininkai galėjo pasirinkti bet kurį pažeidžiamumą, kuris buvo visiškai uždarytas po SSLv2. Galiausiai jie rado tinkamą variantą: Bleichenbacherio ataką, apie kurią minėjome anksčiau ir kurią išsamiai paaiškinsime kitame straipsnyje. SSL ir TLS yra apsaugoti nuo šios atakos, tačiau kai kurios atsitiktinės SSL funkcijos kartu su trumpaisiais eksporto lygio kriptografijos raktais leido tai padaryti. konkretus DROWN įgyvendinimas.

Paskelbimo metu 25% populiariausių interneto svetainių buvo paveiktos DROWN pažeidžiamumo, o ataka galėjo būti įvykdyta naudojant nedidelius išteklius, prieinamus net išdykusiems vienišiems įsilaužėliams. Norint gauti serverio RSA raktą, reikėjo aštuonių valandų skaičiavimo ir 440 USD, o SSLv2 iš pasenusio tapo radioaktyviu.

Palaukite, o kaip dėl Heartbleed?

Tai nėra kriptografinė ataka aukščiau aprašyta prasme; Tai buferio perpildymas.

Padarykime pertrauką

Pradėjome nuo keleto pagrindinių metodų: brutalios jėgos, interpoliacijos, pažeminimo, kryžminio protokolo ir išankstinio skaičiavimo. Tada pažvelgėme į vieną pažangią techniką, galbūt pagrindinį šiuolaikinių kriptografinių atakų komponentą: orakulų ataką. Mes praleidome nemažai laiko, kol tai išsiaiškinome – ir supratome ne tik pagrindinį principą, bet ir technines dviejų konkrečių diegimų detales: Vaudenay ataką prieš CBC šifravimo režimą ir Kelsey ataką prieš suspaudimo šifravimo protokolus.

Apžvelgdami žemesnės versijos ir išankstinio skaičiavimo atakas, trumpai apibūdinome FREAK ataką, kuri naudoja abu metodus, nukreipiant tikslines svetaines į silpnus raktus ir pakartotinai naudojant tuos pačius raktus. Kitame straipsnyje išsaugosime (labai panašią) „Logjam“ ataką, kuri nukreipta į viešojo rakto algoritmus.

Tada pažvelgėme į dar tris šių principų taikymo pavyzdžius. Pirma, CRIME ir POODLE: dvi atakos, kurios rėmėsi užpuoliko galimybe įterpti savavališką grynąjį tekstą šalia tikslinio grynojo teksto, tada ištirti serverio atsakymus ir tada,naudodami oracle attack metodiką, išnaudokite šią negausią informaciją, kad iš dalies atkurtumėte paprastą tekstą. CRIME pasirinko Kelsey ataką prieš SSL suspaudimą, o POODLE vietoj to naudojo Vaudenay atakos prieš CBC variantą, turintį tokį patį poveikį.

Tada atkreipėme dėmesį į kryžminio protokolo DROWN ataką, kuri užmezga ryšį su serveriu naudodama seną SSLv2 protokolą ir atkuria slaptus serverio raktus naudojant Bleichenbacher ataką. Mes kol kas praleidome technines šios atakos detales; kaip ir Logjam, teks palaukti, kol gerai suprasime viešojo rakto kriptosistemas ir jų pažeidžiamumą.

Kitame straipsnyje kalbėsime apie pažangias atakas, tokias kaip susitikimas viduryje, diferencinė kriptoanalizė ir gimtadienio atakos. Greitai pažvelkime į šoninių kanalų atakas, o tada pereikime prie linksmosios dalies: viešojo rakto kriptosistemų.

Šaltinis: www.habr.com

Добавить комментарий