Когато чуят думата "криптография", някои си спомнят за паролата си за WiFi, зеленото ключе до адреса на любимия сайт и как е трудно да влезеш в чуждата поща. Други си спомнят за поредицата уязвимости от последните години с красноречивите абревиатури (DROWN, FREAK, POODLE…), стилните логотипи и спешното предупреждение да обновиш браузъра си.
Криптографията обхваща всичко това, но същността е в друго. Същността е в тънката граница между простото и сложното. Някои неща е лесно да се направят, но трудно да се върнат обратно: например, да счупиш яйце. Други неща са лесни за изпълнение, но трудно се връщат обратно, когато липсва малка важна решаваща част: например, да отвориш заключена врата, когато "решаващата част" е ключът. Криптографията изучава тези ситуации и начините за тяхното практическо приложение.
През последните години колекцията от криптографски атаки се е трансформирала в зоопарк от крещящи логотипи, препълнени с формули от научни статии и е породила общо мрачно усещане, че всичко е счупено. Но всъщност много от атаките са основани на няколко общи принципа, а безкрайните страници с формули често се свеждат до лесни за разбиране идеи.
В тази серия статии ще разгледаме различните типове криптографски атаки, със акцент върху основните принципи. В общи линии и не точно в този ред, но ще обсъдим следното:
- Основни стратегии: брутфорс, честотен анализ, интерполация, понижение и крос-протоколи.
- "Брендови" уязвимости: FREAK, CRIME, POODLE, DROWN, Logjam.
- Напреднали стратегии: атаки на оракули (атака Воденэ, атака Келси); метод на среща по средата (meet-in-the-middle), атака "рожден ден", статистическо изкривяване (диференциален криптоанализ, интегрален криптоанализ и т.н.).
- Атаки по странични канали и техните близки роднини, методи за анализ на повреди.
- Атаки върху криптографията с отворен ключ: кубичен корен, излъчване, свързано съобщение, атака на Копперсмит, алгоритъм на Полига – Хелман, числово сито, атака на Винер, атака на Блайхенбахер.
Тази конкретна статия обхваща посочения материал до атака Келси.
Основни стратегии
Следващите атаки са прости в смисъла, че могат да бъдат обяснени почти напълно без специални технически детайли. Ще обясним всеки тип атака с най-прости термини, без да задълбочаваме в сложни примери или разширени варианти на използване.
Някои от тези атаки основно са изгубили актуалност и не са прилагани от много години. Други - стари познайници, все още редовно подстъпват към нищо неподозиращи разработчици на криптосистеми в 21-ви век. Може да се счита, че епохата на съвременната криптография е започнала с появата на IBM DES - първият шифър, който устоя на всички атаки в този списък.
Прост брутфорс
Схемата за шифриране се състои от две части: 1) функция за шифриране, която приема съобщение (открит текст) в комбинация с ключ, а след това създава зашифрено съобщение - шифротекст; 2) функция за дешифриране, която приема шифротекст и ключ и създава открит текст. И шифрирането, и дешифрирането трябва да бъдат лесно изчислими с ключа - и трудни без него.
Нека предположим, че виждаме шифротекст и се опитваме да го дешифрираме без никаква допълнителна информация (това се нарича атака „само шифротекст“). Ако по някакъв вълшебен начин намерим правилния ключ, можем лесно да проверим дали той наистина е правилен, ако резултатът е разумно съобщение.
Обърнете внимание, че тук има две неявни предположения. На първо място, че знаем как да извършим дешифриране, т.е. как работи криптосистемата. Това е стандартно предположение при обсъждане на криптографията. Скриването на детайли за реализацията на шифъра от злоумышленици може да изглежда като допълнителна мярка за сигурност, но щом веднъж злоумышленикът разкрие тези детайли, тази допълнителна сигурност незабележимо и необратимо се губи. Такъв е : предаването на системата в ръцете на врага не трябва да създава неудобства.
На второ място, предполагаме, че правилният ключ е единственият ключ, който ще доведе до разумно дешифриране. Това също е разумно предположение; то важи, ако шифротекстът е значително по-дълъг от ключа и е добре четим. Като правило, така е в реалния свят, с изключение на или (ако не ви харесва, че отхвърлихме обясненията, моля вижте теоремата 3.8 ).
С оглед на изложеното по-горе, възниква стратегия: да се провери всеки възможен ключ. Това се нарича брутфорс и такава атака гарантирано работи срещу всички практическите шифри — в крайна сметка. Например, брутфорс е достатъчен, за да се счупи , древен шифър, при който ключът е една буква от азбуката, което предполага малко над 20 възможни ключа.
За съжаление на криптоанализаторите, увеличаването на размера на ключа добре защитава от брутфорс. С нарастването на размера на ключа, количеството възможни ключове нараства експоненциално. Със съвременните размери на ключовете, простият брутфорс е напълно непрактичен. За да разберем какво имаме предвид, нека вземем най-бързия известен суперкомпютър към средата на 2019 година: от IBM, с пикова производителност около 1017 операции в секунда. Днес, типичната дължина на ключа е 128 бита, което означава 2128 възможни комбинации. За да премине през всички ключове, суперкомпютърът Summit ще се нуждае от време, което е приблизително 7800 пъти по-дълго от възрастта на Вселената.
Трябва ли да считаме брутфорс за исторически куриоз? Никак не: това е необходима съставка в готварската книга на криптоанализа. Рядко се срещат толкова слаби шифри, че да могат да бъдат разбити само с интелигентна атака, без да се прилага сила в една или друга степен. Много успешни разбивания първо използват алгоритмичен метод, за да отслабят целевия шифър, а след това стартират брутфорс.
Частотен анализ
Повечето текстове не са тарабарщина. Например, в англоезичните текстове много букви ‘e’ и артикли ‘the’; в двоичните файлове — много нулеви байтове като запълващи между фрагменти информация. Частотен анализ — всяка атака, която използва този факт.
Каноничният пример за шифър, уязвим за тази атака, е простият шифър на заместване. В този шифър ключът представлява таблица с подмяна на всички букви. Например, ‘g’ се замества с ‘h’, ‘o’ — с ‘j’, затова думата ‘go’ става ‘hj’. Този шифър е труден за разбиване чрез прост брутфорс, тъй като съществуват много възможни таблици за заместване. Ако се интересувате от математика, ефективната дължина на ключа е около 88 бит: това
. Но честотният анализ обикновено бързо се справя със задачата.
Нека разгледаме следния шифротекст, обработен с прост шифър на подмяна:
XDYLY ALY UGLY XDWNKE WN DYAJYN ANF YALXD DGLAXWG XDAN ALY FLYAUX GR WN OGQL ZDWBGEGZDO
Тъй като Y се среща често, в това число и в края на много думи, можем предварително да предположим, че това е буквата e:
XDeLe ALe UGLe XDWNKE WN DeAJeN ANF eALXD DGLAXWG XDAN ALe FLeAUX GR WN OGQL ZDWBGEGZDO
Пара XD се повтаря в началото на няколко думи. В частност, съчетанието XDeLe очевидно предполага думата these или there, затова продължаваме:
theLe ALe UGLe thWNKE WN heAJeN ANF eALth DGLAtWG thAN ALe FLeAUt GR WN OGQL ZDWBGEGZDO
Следва да предположим, че L съвпада с r, A — a и така нататък. Вероятно ще се наложи да направим няколко опита, но в сравнение с пълния брутфорс, тази атака възстановява оригиналния текст за кратко време:
there are more things in heaven and earth horatio than are dreamt of in your philosophy
За някои хора, решаването на такива „криптограми“ е любопитно хоби.
Идеята за честотния анализ е по-фундаментална, отколкото изглежда на пръв поглед. И тя е приложима към много по-сложни шифри. През цялата история различни конструкции на шифри се опитвали да устояват на такава атака с помощта на „полиалфавитна подмяна“. Тук по време на шифрирането таблицата за замяна на букви се променя по сложни, но предсказуеми начини, зависещи от ключа. Всички тези шифри някога са били смятани за трудно преодолими; и все пак скромният честотен анализ в крайна сметка ги превъзмогна.
Най-амбициозният полиалфавитен шифър в историята и вероятно най-известният е шифърът „Енигма“ по време на Втората световна война. Той беше сравнително сложен в сравнение с предшествениците си, но в резултат на дълга и упорита работа, британските криптоаналитици го разкриха с помощта на честотен анализ. Разбира се, те не успяха да разработят елегантна атака, както е показано по-горе; те трябваше да сравняват познати двойки от открит и шифрован текст (така наречената „атака на основата на открити текстове“) и дори да провокират потребителите на „Енигма“ да шифроват определени съобщения с анализ на резултата („атака на основата на подбран открит текст“). Но това не улесни съдбата на победените армии на враговете и на потопените подводници.
След тази победа честотният анализ изчезна от историята на криптоанализата. Шифрите на съвременната цифрова епоха са създадени да работят с битове, а не с букви. Още по-важно е, че тези шифри са разработени с мрачното разбиране за това, което по-късно стана известно като : всеки може да създаде алгоритъм за шифриране, който сам не може да разбие. Не е достатъчно шифровата система да изглежда сложна: за да докаже стойността си, тя трябва да премине през жесток преглед на безопасността от много криптоаналитици, които ще направят всичко възможно, за да разбият шифъра.
Предварителни изчисления
Да вземем хипотетичния град Преком Хайтс с население от 200 000 души. Във всяка къща в града има ценности в среден размер от $30 000, но не повече от $50 000. Пазарът на безопасност в Преком е монополизиран от компанията ACME Industries, която произвежда легендарните врати на клас Coyote ™. Според експертния анализ, заключалката от клас Coyote може да бъде разбита само от много сложна хипотетична машина, създаването на която изисква около пет години и $50 000 инвестиции. Градът в безопасност?
Вероятно не. В крайна сметка ще се появи достатъчно амбициозен престъпник. Той ще разсъждава така: „Да, ще понеса големи авансови разходи. Пет години търпеливо чакане и $50 000. Но в края на работата ще имам достъп до цялото богатство на този град. Ако изиграя картите си правилно, тази инвестиция ще се изплати многократно.“
Аналогично и в криптографията. Атаките срещу конкретен шифър се подлагат на безмилостен анализ на разходите и ползите. Ако съотношението е благоприятно, атаката няма да се случи. Но атаките, които действат едновременно срещу много потенциални жертви, почти винаги се изплащат, и в този случай най-добрата практика при проектирането е да се предположи, че те са започнали от първия ден. Всъщност имаме криптографска версия на закона на Мърфи: „Всичко, което реално може да разбие системата, ще я разбие“.
Най-простият пример за криптосистема, уязвима на атака с предварителни изчисления, е шифърът с постоянен алгоритъм без използване на ключ. Така беше в случая с , който просто премества всяка буква от азбуката с три места напред (таблицата е циклична, така че последната буква в азбуката се шифрова с третата). Тук отново се проявява принципът на Керчхофф: щом системата е пробита, тя е пробита завинаги.
Концепцията е проста. Дори начинаещ разработчик на криптосистеми вероятно е наясно с заплахата и ще се подготви съответно. Ако погледнем еволюцията на криптографията, такива атаки бяха неуместни за повечето шифри, започвайки от първите подобрени версии на Цезаровия шифър и до упадъка на полиалфавитните шифри. Такива атаки се завърнаха едва с настъпването на съвременната ера на криптографията.
Това завръщане е предизвикано от два фактора. Първо, най-накрая се появиха достатъчно сложни криптосистеми, където възможността за експлоатация след пробив не беше очевидна. Второ, криптографията получи такова широко разпространение, че милиони непрофесионалисти ежедневно вземаха решения, къде и какви части от криптографията да използват отново. Измина известно време, преди експертите да осъзнаят възникналите рискове и да алармират.
Запомнете атаката с предварителни изчисления: в края на статията ще разгледаме два криптографски примера от реалния живот, където тя изиграва важна роля.
Интерполация
Пред вас е известният детектив Шерлок Холмс, изпълняващ атака с интерполация срещу нещастния доктор Уотсън:
Веднага се досетих, че сте дошли от Афганистан… Мислите ми бяха следните: „Този човек по тип е лекар, но походката му е военна. Значи, военен лекар. Той току-що се е върнал от тропиците - лицето му е тъмно, но това не е естественият тон на кожата му, тъй като китките му са много по-бели. Лицето му е изтощено - очевидно е изтърпял много и е преминал през болест. Беше ранен в лявата ръка - държи я неподвижно и малко неестествено. Къде военен лекар от Англия може да се е сблъскал с лишения и да е получил рана в тропиците? Разбира се, в Афганистан.“ Целият ход на мислите не отне и секунда. И ето, аз казах, че сте дошли от Афганистан, а вие се учудихте.
От всяко доказателство поотделно Холмс можеше да извлече много малко информация. Той успяваше да достигне до заключенията си само след като разгледа всички тях заедно. Интерполационната атака работи по подобен начин, като изследва известни двойки от открит и шифрован текст, получени при прилагането на един и същ ключ. От всяка двойка се извличат отделни наблюдения, които позволяват да се направи общо заключение за ключа. Всички тези умозаключения са неясни и изглеждат безполезни, докато внезапно не достигнат критична маса и не доведат до единственото възможно заключение: какъвто и да е невероятен, той трябва да е истинен. След това или ключът се разкрива, или процесът на дешифриране става толкова усъвършенстван, че може да бъде тиражиран.
Нека илюстрираме с прост пример как работи интерполацията. Да предположим, че искаме да прочетем личния дневник на нашия враг, Боб. Той шифрова всяко число в дневника си с помощта на проста криптосистема, за която е научил от рекламно обявление в списанието „Подигравка с криптографията“. Системата работи по следния начин: Боб избира две числа, които му харесват:
и
. От този момент, за да шифрова всяко число
, той изчислява
. Например, ако Боб е избрал
и
, то цифрата
ще бъде шифрована като
.
Да предположим, на 28 декември сме забелязали, че Боб нещо драска в дневника си. Когато приключи, незабелязано ще го вземем и ще погледнем последната му записка:
Дата:
235/520Скъпи дневник,
Днес беше хубав ден. След
64дни имам среща с Алиса, която живее в апартамент843. Наистина мисля, че тя може да бъде26!
Тъй като сме много сериозно решени да проследим Боб на срещата му (в този сценарий ние сме на 15 години), е критично важно да знаем датата, както и адреса на Алиса. За щастие, забелязваме, че криптосистемата на Боб е уязвима към интерполационна атака. Може и да не знаем
и
, но знаем днешната дата, така че имаме две двойки „открит текст – шифрован текст“. А именно, знаем, че
се шифрова в
, а
— в
. И ще го запишем:


Тъй като сме на 15 години, вече знаем за системата на две уравнения с две неизвестни, което в тази ситуация е достатъчно за намирането.
и
без особени проблеми. Всяка двойка „открит текст-шифротекст“ налага ограничение на ключа на Боб, и две ограничения заедно са достатъчни, за да възстановят напълно ключа. В нашия пример отговор
и
(при
, така че 26 в дневника съответства на думата ‘the one’, тоест „тази“ — прим. прев.).
Интерполационните атаки, разбира се, не са ограничени до толкова прости примери. Всяка криптосистема, която може да бъде сведена до добре познат математически обект и списък от параметри, е изложена на риск от интерполационна атака — колкото по-ясен е обектът, толкова по-висок е рискът.
Новичките често се оплакват, че криптографията е „изкуството да проектираме колкото се може по-грозни неща“. Вероятно в голяма степен вината е на атаките от интерполация. Боб може или да използва елегантен математически дизайн, или да запази конфиденциалността на срещата с Алиса — но уви, обикновено не може да получи и двете. Това ще стане напълно ясно, когато в крайна сметка преминем към темата за криптографията с отворен ключ.
Крос-протокол/понижение
Във филма „Илюзия обмана“ (2013) група илюзионисти се опитват да измамят цялото състояние на корумпирания застрахователен магнат Артър Треслър. За да получат достъп до банковата сметка на Артър, илюзионистите трябва или да представят неговото потребителско име и парола, или да го накарат да се появи лично в банката и да участва в схемата.
И двата варианта са много трудни; момчетата са свикнали да излизат на сцена, а не да участват в операции на тайни служби. Затова те избират третия възможен вариант: техният съучастник звъни в банката и се представя за Артър. Банкът задава няколко въпроса за проверка на самоличността, като името на дядо и името на първия домашен любимец; нашите герои предварително . От този момент отличната сигурност на паролата няма значение.
(Според градска легенда, която лично проверихме и потвърдихме, криптографът Ели Бихъм веднъж се сблъскал с касиер в банка, който настоявал за поставяне на секретен въпрос. Когато касиерът попитал името на бабата по майчина линия, Бихъм започнал да диктува: „Главна X, малка y, три…“.)
Също така и в криптографията, ако за защита на един и същи актив паралелно се използват два криптографски протокола, като един е значително по-слаб от другия. Резултатната система става уязвима за крос-протоколна атака, когато по-слабият протокол се атакува, за да се достигне до целта, без да се засяга по-силният.
В някои сложни случаи не е достатъчно просто да се свържете със сървъра по по-слабия протокол, а е необходимо неволното участие на легитимен клиент. Това може да се организира с т.нар. атака за понижаване (downgrade). За да разберем тази атака, предположим, че задачата на нашите илюзионисти е по-сложна, отколкото във филма. Предположим, че на банкера (касиера) и Артур се появяват непредвидени обстоятелства, в резултат на което се случва следния диалог:
Хакер: Алло? Артур Тресълър. Искам да възстановя паролата си.
Касир: Отлично. Моля, погледнете в личната си книга на тайни кодове, страница 28, дума 3. Всички следващи съобщения ще бъдат криптирани с това конкретно слово като ключ. PQJGH. LOTJNAM PGGY MXVRL ZZLQ SRIU HHNMLPPPV…
Хакер: Ей-ей, изчакай. Наистина ли е необходимо? Не можем ли да говорим като нормални хора?
Касир: Не бих препоръчал да го правите.
Хакер: Просто… слушай, имах ужасен ден, ясно е? Аз съм VIP клиент и не съм в настроение да ровя в тези глупави кодови книги.
Касир: Добре. Ако настоявате, г-н Тресълър. Какво желаете?
Хакер: Моля, искам да прехвърля всичките си пари в Националния фонд на жертвите на Артур Тресълър.
(Пауза).
Касир: Разбирам. Моля, посочете ПИН кода ви за големи транзакции.
Хакер: Какво?!
Касир: По ваше лично искане, транзакциите от такъв размер изискват въвеждане на ПИН код за големи транзакции. Този код ви беше даден при откриването на сметката.
Хакер:… Загубих го. Наистина ли е необходимо? Не можете ли просто да одобрите сделката?
Касир: Не. Извинете, г-н Тресълър. Отново, това е мярка за сигурност, която вие поискахте. Ако желаете, можем да изпратим нов ПИН код на пощенския ви адрес.
Нашите герои отлагат операцията. Те подслушват няколко големи транзакции на Тресслер, надявайки се да чуят ПИН кода; но всеки път разговорът се превръща в неразбираем шум, преди да прозвучи нещо интересно. Накрая, в един прекрасен ден реализират плана си. Те търпеливо чакат момента, когато Тресслер трябва да извърши голяма транзакция по телефона, той се свързва с линията и след това…
Тресслер: Здравейте. Искам да направя дистанционна транзакция, моля.
Касир: Отлично. Моля, погледнете в личната си книга със секретни кодове, страница…
(Хакерът натиска бутона; гласът на касиера се превръща в неразбираем шум).
Касир: — #@$#@$#*@$$@#* ще бъде криптиран с тази дума като ключ. AAAYRR PLRQRZ MMNJK LOJBAN…
Тресслер: Извинете, не съвсем разбрах. Още веднъж? На коя страница? Коя дума?
Касир: Това е страница @#$@#*$)#*#@()#@$(#@*$(#@*.
Тресслер: Какво?
Касир: Думата номер двадесет @$#@$#%#$.
Тресслер: Сериозно! Престави го! Ти с твоя протокол за сигурност — това е някакъв цирк. Знам, че можеш просто да говориш нормално с мен.
Касир: Не бих препоръчал…
Тресслер: А аз не искам да губя времето си. Не искам повече да чувам за това, докато не оправите проблемите с телефонната линия. Можем ли да завършим тази сделка или не?
Касир:… да. Добре. Какво желаете?
Тресслер: Искам да преведа 20 000 лв. на компания Lord Business Investments, номер на сметката…
Касир: Минута, моля. Това е голяма сделка. Моля, посочете своя ПИН код за големи транзакции.
Тресслер: Какво? А, точно. 1234.
Ето атаката на понижаване. По-слабият протокол "просто говорете направо" беше предвиден като опция за извънредни случаи. И все пак сме тук.
Можете да зададете въпрос, кой в нормален ум би проектирал истинска система от типа "сигурно, докато не поискаш обратното", каквато е описаната по-горе. Но така, както измисленият банк рискува, за да запази клиентите си, които не обичат криптографията, така и системите като цяло често се накланят към изисквания, които са равнодушни или дори явно враждебни към сигурността.
Такава история се е случила с протокола SSLv2 през 1995 година. Правителството на САЩ отдавна разглежда криптографията като оръжие, което е по-добре да се държи далеч от външните и вътрешните врагове. Фрагменти от кода бяха одобрявани за експорт от САЩ при условие за умишлено отслабване на алгоритъма. Компании като Netscape, разработчикът на най-популярния браузър Netscape Navigator, получиха разрешение за SSLv2 само с първоначално уязвим ключ RSA с 512 бита (и 40 бита за RC4).
До края на хилядолетието правилата бяха облекчени и достъпът до съвременна криптография стана широко достъпен. Въпреки това, клиентите и сървърите в продължение на много години поддържаха отслабена "експортна" криптография заради същата инерция, която поддържа всяка остаряла система. Клиентите смятаха, че могат да се срещнат със сървър, който не поддържа нищо друго. Сървърите правеха същото. Разбира се, протоколът SSL предписва, че клиентите и сървърите не трябва да използват слаб протокол, когато е наличен по-добър. Но същият принцип важеше за Тресслер и неговата банка.
Тази теория намери приложение в две значителни атаки, които една след друга разтърсиха сигурността на протокола SSL през 2015 година, и двете открити от изследователите на Microsoft и . Първо, през февруари бяха разкрити детайлите на атаката FREAK, а три месеца по-късно – на друга подобна атака, наречена Logjam, която ще обсъдим по-подробно, когато преминем към атаките срещу криптографията с открит ключ.
Уязвимост (известна също като "Smack TLS") се прояви, когато изследователите анализираха реализации на клиент-сървър TLS и откриха любопитна грешка. В тези реализации, ако клиентът дори не поиска да използва слаба експортна криптография, но сървърът все пак отговаря с такива ключове – клиентът казва: "Добре" и преминава на слаб набор от шифри.
По това време всички считаха износната криптография за остаряла и забранена за използване, така че атаката стана истински шок и засегна много важни домейни, включително сайтовете на Белия дом, данъчната служба на САЩ и АНБ. По-лошото е, че много уязвими сървъри оптимизираха производителността, като повторно използваха едни и същи ключове, вместо да създават нови за всяка сесия. Това позволи след понижаване на протокола да се проведе и атака с предизчисление: заразяването на един ключ остана относително скъпо (100 $ и 12 часа по време на публикуване), но практическата цена на атаката на съединението значително намаля. Достатъчно е един път да се подбере сървърен ключ – и да се разчупят шифрите за всички последващи съединения от този момент.
И преди да продължим нататък, трябва да споменем една напреднала атака…
Атаката на оракула
е най-известен като баща на крос-платформения криптомесенджър Signal; но лично ни харесва едно от по-малко известните му нововъведения – (Cryptographic Doom Principle). Леко перефразирано, можем да кажем следното: "Ако протоколът извършва каквато и да е криптографска операция над съобщение от потенциално вредоносен източник и се държи по различен начин в зависимост от резултата, той е обречен." Или в по-остра форма: "Не взимай информация от врага за обработка, а ако се наложи, поне не показвай резултата."
Оставяме настрана препълванията на буфера, инжекции на команди и подобни; те излизат извън обсега на това обсъждане. Нарушаването на "принципа на обреченост" води до сериозни пробиви в криптографията, тъй като протоколът се държи точно така, както се очаква.
Например, нека разгледаме измислена конструкция с уязвим шифър за подмяна, а след това ще демонстрираме възможна атака. Въпреки че вече видяхме атака на шифър за подмяна с помощта на честотен анализ, това не е просто "друг начин да се пробие същия шифър". Напротив, атаките на оракула – са много по-съвременно изобретение, приложимо в множество ситуации, когато честотният анализ не успява, и ще видим демонстрация на това в следващия раздел. Тук простият шифър е избран само, за да направи примера по-разбираем.
И така, Алиса и Боб комуникират с помощта на прост шифър за подмяна, използвайки ключ, известен само на тях. Те много строго се отнасят към дължината на съобщенията: тяхната дължина е точно 20 символа. Затова се споразумяха, че ако някой иска да изпрати по-кратко съобщение, трябва да добави някакъв фалшив текст в края на съобщението, за да е точно 20 символа. След известно обсъждане те решиха, че ще приемат само следните фалшиви текстове: a, bb, ccc, dddd и т.н. По този начин, фалшивият текст с всяка необходима дължина е известен.
Когато Алиса или Боб получава съобщение, те първо проверяват дали съобщението има правилната дължина (20 символа), а суфиксът - правилен фалшив текст. Ако не е така, отговарят с подходящо съобщение за грешка. Ако дължината на текста и фалшивият текст са в ред, получателят чете самото съобщение и изпраща криптирания отговор.
В процеса на атака злоумышленикът се представя за Боб и изпраща фалшиви съобщения на Алиса. Съобщенията са пълна глупост - злодеят няма ключ и затова не може да фалшифицира смислено съобщение. Но тъй като протоколът нарушава принципа на обреченост, злодеят все пак може да примами Алиса в капан, така че тя да разкрие информация за ключа, както е показано по-долу.
Хакер:
PREWF ZHJKL MMMN. LAАлиса: Невалиден фалшив текст.
Хакер:
PREWF ZHJKL MMMN. LBАлиса: Невалиден фалшив текст.
Хакер:
PREWF ZHJKL MMMN. LCАлиса:
ILCT? TLCT RUWO PUT KCAW CPS OWPOW!
Хакерът няма представа какво току-що каза Алиса, но отбелязва, че символът C трябва да съответства на a, тъй като Алиса е приела фалшивия текст.
Хакер:
REWF ZHJKL MMMN. LAAАлиса: Невалиден фалшив текст.
Хакер:
REWF ZHJKL MMMN. LBBАлиса: Невалиден фалшив текст.
След поредица от опити…
Хакер:
REWF ZHJKL MMMN. LGGАлиса: Невалиден фалшив текст.
Хакер:
REWF ZHJKL MMMN. LHHАлиса:
TLQO JWCRO FQAW SUY LCR C OWQXYJW. IW PWWR TU TCFA CHUYT TLQO JWFCTQUPOLQZ.
Отново, хакерът няма представа какво току-що каза Алиса, но отбелязва, че H трябва да се сравнява с b, тъй като Алиса е приела фалшивия текст.
И така нататък, докато злодеят не разбере значението на всеки символ.
На пръв поглед, методът напомня на атака, основана на избран открит текст. В крайна сметка, злонамереният потребител избира шифротексти, а сървърът послушно ги обработва. Основната разлика, която прави тези атаки жизнеспособни в реалния свят, е, че на злонамерения потребител не му е необходим достъп до фактическото разшифроване – достатъчен е отговорът на сървъра, дори такъв безобиден, като „Неправилен фиктивен текст“.
Въпреки че тази конкретна атака е поучителна, не бива да се зацикля на спецификата на схемата „фиктивен текст“, конкретната използвана криптосистема или точната последователност от съобщения, изпратени от злонамерения потребител. Основната идея е, как Алиса реагира по различен начин, базирайки се на свойствата на открития текст, и го прави без проверка на това, дали съответният шифрован текст наистина е получен от доверена страна. По този начин, Алиса позволява на злонамерения потребител да извлече секретна информация от нейните отговори.
В този сценарий може да се промени много. Символите, на които реагира Алиса, или самата разлика в нейното поведение, или дори използваната криптосистема. Но принципът ще остане същият и атаката като цяло ще остане жизнеспособна по един или друг начин. Основната реализация на тази атака помогна да се открият няколко уязвимости в сигурността, които скоро ще разгледаме; но преди това, трябва да усвоим някои теоретични уроци. Как да използваме този измислен „сценарий на Алиса“ в атака, която би могла да работи на съвременен шифър? Възможно ли е това изобщо, дори теоретично?
През 1998 година швейцарският криптограф Даниел Блайхенбахер (Daniel Bleichenbacher) отговори на този въпрос утвърдително. Той демонстрира атака на оракул в широко използваната криптосистема RSA с публичен ключ, използвайки определена схема за съобщения. В някои реализации на RSA сървърът отговаря с различни съобщения за грешка, в зависимост от това дали откритият текст отговаря на схемата или не; това беше достатъчно, за да се проведе атака.
Четири години по-късно, през 2002 година, френският криптограф Серж Воденé (Serge Vaudenay) демонстрира атака на оракул, почти идентична на описаната по-горе в сценария на Алиса — с изключение на факта, че вместо измислен шифър той наруши цял респектабилен клас от съвременни шифри, които хората наистина използват. В частност, атаката на Воденé е насочена към шифри с фиксиран размер на входа („блочни шифри“) при тяхното използване в така наречения „CBC режим на шифриране“ и с определена популярна схема за запълване, основно еквивалентна на тази в сценария на Алиса.
Също така през 2002 година американският криптограф Джон Келси (John Kelsey) — съавтор — предложи различни атаки на оракула срещу системи, които компресират съобщения и след това ги шифрират. Най-забележителната сред тях беше атака, която използваше това, което често може да се изведе от оригиналната дължина на открития текст от дължината на шифрования текст. В теорията това позволява провеждането на атака на оракула, която възстановява части от оригиналния открит текст.
Нататък предоставяме по-подробно описание на атаките на Воденé и Келси (ще дадем по-подробно описание на атаката на Блайхенбахер, когато преминем към атаките на криптография с открит ключ). Въпреки всички наши усилия, текстът става малко технически; следователно, ако предоставеното по-горе е достатъчно за вас, пропуснете следващите два раздела.
Атака на Воденé
За да разберете атаката на Воденé, първо трябва да говорим малко по-подробно за блочните шифри и режимите на шифриране. „Блочен шифър“ е, както вече беше споменато, шифър, който приема ключ и вход с определена фиксирана дължина („дължина на блока“) и издава шифрован блок със същата дължина. Блочните шифри се използват широко и се считат за относително безопасни. Понастоящем пенсионерът DES, който се смята за първия съвременен шифър, беше блочен. Както беше споменато по-горе, същото важи и за AES, широко използван днес.
За съжаление блочните шифри имат една крещяща слабост. Типичният размер на блока е 128 бита или 16 символа. Очевидно е, че съвременната криптография изисква обработка на входни данни с по-голям размер, и именно тук влизат в игра режимите на шифроване. Режимът на шифроване по същество е хак: това е начин по някакъв начин да се приложи блочен шифър, който приема входни данни само с определен размер, към входни данни с произволна дължина.
Атаката Воденé е насочена към популярния режим на работа CBC (Cipher Block Chaining, режим на свързване на блокове шифротекст). Атаката разглежда основния блочен шифър като магически непробиваем черен ящик и напълно заобикаля неговата безопасност.
Ето диаграма, която показва как работи режимът CBC:


Обграденият плюс означава операция XOR (изключително "ИЛИ"). Например, вторият блок шифротекст е получен:
- Чрез извършване на операция XOR на втория блок на открития текст с първия блок на шифротекста.
- Шифроване на получения блок с помощта на блочен шифър, използвайки ключ.
Тъй като CBC толкова интензивно използва бинарната операция XOR, нека се възползваме от момента, за да си спомним някои от нейните свойства:
- Идемпотентност:
- Комутативност:
- Ассоциативност:
- Самообратимост:
- Побайтовост: байт n от
= (байт n от
)
(байт n от
)
Обикновено тези свойства означават, че ако имаме уравнение, включващо операции XOR и една неизвестна, то може да бъде решено. Например, ако знаем, че
с неизвестното
и известните
и
, тогава можем да разчитаме на по-горе споменатите свойства, за да решим уравнението за
. Прилагането на XOR от двете страни на уравнението с
, получаваме
. След миг всичко това ще стане много актуално.
Между нашия сценарий на Алиса и атаката Воденé има две незначителни разлики и едно основно отличие. Две незначителни:
- В сценариите Алиса очаква, че откритите текстове завършват с символи
a,bb,cccи така нататък. В атаката Воденé жертвата вместо това очаква, че откритите текстове завършват N пъти с байта N (тоест шестнадесетично 01 или 02 02, или 03 03 03 и така нататък). Това е чисто козметична разлика. - В сценария на Алисa беше лесно да се разбере дали Алиса е приела съобщението по отговора „Неправилен фиктивен текст“. В атаката Воденэ се изисква по-дълбок анализ и точната реализация от страна на жертвата е важна; но за краткост, ще приемем, че този анализ все още е възможен.
Основна разлика:
- Тъй като не използваме една и съща криптосистема, връзката между контролируемите от нарушителя байтове на шифрования текст и тайните (ключ и открит текст) ще бъде очевидно различна. Следователно, нарушителят ще трябва да използва различна стратегия за създаване на шифротекст и интерпретиране на отговорите на сървъра.
Тази основна разлика е последната част от пъзела, за да разберем атаката Воденэ, така че да помислим за момент как и защо може да бъде организирана атака на оракула върху CBC.
Да предположим, че имаме шифротекст CBC от 247 блока, и искаме да го дешифрираме. Можем да изпращаме фалшиви съобщения на сървъра, както преди можем да изпращаме фалшиви съобщения на Алиса. Сървърът ще ни дешифрира съобщенията, но няма да показва дешифрирането — вместо това, както при Алиса, сървърът ще предостави само един бит информация: дали откритият текст разполага с допустимо попълване или не.
Имайте предвид, че в сценария на Алиса имахме следните отношения:
$$display$$text{SIMPLE_SUBSTITUTION}(text{ciphertext},text{key}) = text{plaintext}$$display$$
Нека наречем това „равенството на Алисa“. Контролирахме шифротекста; сървърът (Алиса) предоставяше размито информация за полученото открит текст; и това ни позволи да извлечем информация за последния фактор — ключа. По аналогия, ако можем да намерим такава връзка за сценариите CBC, би било възможно да извлечем и там малко секретна информация.
За щастие, там наистина съществуват отношения, които можем да използваме. Нека разгледаме изхода от финалния повик за дешифриране на блочен шифър и да обозначим тези данни като
. Нека също обозначим блоковете на открития текст
и блоковете на шифротекста
. Погледнете отново диаграмата на CBC и обърнете внимание на получения резултат:

Нека наречем това „равенството на CBC“.
В сценария на Алиса, контролирайки шифротекста и наблюдавайки за изтичането на информация за съответния открит текст, успяхме да организираме атака, която възстанови третия член на уравнението – ключа. В сценария CBC също контролираме шифротекста и наблюдаваме изтичания на информация по съответния открит текст. Ако аналогията е валидна, ще можем да получим информация за
.
Да предположим, че наистина възстановихме
, какво тогава? Ами, тогава можем веднага да изведем целия последен блок от открития текст (
), просто въвеждайки
(който имаме) и
възстановения
в уравнението CBC.
Така че, ние сме оптимистично настроени по отношение на общия план за атака и е време да работим по детайлите. Обърнете внимание на начина, по който на сървъра става изтичането на информация за открития текст. В сценария на Алиса изтичането се случи, защото Алиса отговори с правилно съобщение само ако $inline$text{SIMPLE_SUBSTITUTION}(text{ciphertext},text{key})$inline$ завършваше със строка a (или bb, и така нататък, но шансовете за случайно задействане на тези условия бяха много малки). Аналогично в CBC, сървърът приема запълване, ако и само ако
завършва с шестнадесетичен 01. Така че, да опитаме същия трик: изпращане на фалшиви шифротексти с нашите собствени фалшиви стойности
, докато сървърът не приеме запълването.
Когато сървърът приема запълването за едно от нашите фалшиви съобщения, това означава, че:

Сега използваме свойството на побайтовото XOR:

Знаем първия и третия член. И вече видяхме, че това позволява да възстановим оставалия член – последния байт от
:

Това също ни дава последния байт от крайния блок на открития текст чрез уравнението CBC и свойството на побайтовото.
Можехме да приключим тук и да се задоволим с това, че сме извършили атака на теоретично устойчив шифър. Но всъщност можем да направим много повече: можем наистина да възстановим целия текст. Това изисква определен трик, който не беше в оригиналния сценарий на Алиса и не е част от задължителните условия за атака на оракула, но методът определено си заслужава да бъде изучен.
За да го разберете, първо обърнете внимание, че в резултат на извеждането на правилната стойност на последния байт
Получихме нова способност. Сега, когато подправяме шифротекстовете, можем да контролираме последния байт на съответстващия открит текст. Отново, това е свързано с уравнението CBC и свойството на байтовост:

Тъй като сега знаем втория член, можем да използваме контрола си над първия, за да управляваме третия. Просто изчисляваме:

По-рано не можехме да направим това, тъй като не разполагахме с последния байт.
.
Как ще ни помогне това? Да предположим, че сега ще създадем всички шифротексти така, че последният байт на съответстващите открити текстове да бъде 02. Сега сървърът приема запълване само в случай, че откритият текст завършва на 02 02. Тъй като коригираме последния байт, това ще се случи само ако предпоследният байт на открития текст също е равен на 02. Продължаваме да изпращаме фалшиви шифротекстови блокове, променяйки предпоследния байт, докато сървърът не приеме запълването за един от тях. В този момент получаваме:

И възстановяваме предпоследния байт
точно както възстановихме последния. Продължаваме със същото: коригираме последните два байта на открития текст на 03 03, повтаряме тази атака за третия от края байт и така нататък, в крайна сметка напълно възстановявайки
.
Какво ще кажете за останалия текст? Обърнете внимание, че стойността на
всъщност е $inline$text{BLOCK_DECRYPT}(text{key},C_{247})$inline$. Можем да поставим всякакъв друг блок вместо
, и атаката все пак ще бъде успешна. Всъщност, можем да помолим сървъра да направи $inline$text{BLOCK_DECRYPT}$inline$ за всякакви данни. В този момент играта е свършила - можем да декриптираме всеки шифротекст (погледнете отново диаграмата на декриптиране на CBC, за да се уверите в това; и обърнете внимание, че векторът IV е публичен).
Този конкретен метод играе решаваща роля в атаката на оракула, с която ще се сблъскаме по-късно.
Атаката на Келси
Джон Келси, близък по дух до нас, изложи принципите, които стоят в основата на многото възможни атаки, а не само подробностите за конкретна атака срещу конкретен шифър. Неговата е изследване на възможните атаки срещу криптирани компресирани данни. Мислехте, че за провеждане на атака е недостатъчна само информацията, че данните са били компресирани преди криптиране? Оказва се, че е достатъчно.
Този удивителен резултат е основан на два принципа. Първо, съществува силна корелация между дължината на открития текст и дължината на шифротекста; за много шифри точното равенство. Второ, когато се извършва компресия, също така съществува силна корелация между дължината на компресираното съобщение и степента на "шумност" на открития текст, т.е. делът на неповтарящите се символи (технически термин - "висока ентропия").
За да видим принципа в действие, нека разгледаме два открити текста:
Открит текст 1:
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAОткрит текст 2:
ATVXCAGTRSVPTVVULSJQHGEYCMQPCRQBGCYIXCFJGJ
Предположим, че двата открити текста са компресирани и след това шифровани. Получавате два резултатни шифротекста и трябва да познаете кой шифротекст отговаря на кой открит текст:
Шифротекст 1:
PVOVEYBPJDPVANEAWVGCIUWAABCIYIKOOURMYDTAШифротекст 2:
DWKJZXYU
Отговорът е ясен. Сред откритите текстове само открит текст 1 може да бъде компресиран до малка дължина на втория шифротекст. Разбрахме това без да знаем нищо за алгоритъма за компресия, ключа за шифроване или дори самия шифър. В сравнение с йерархията от възможни криптографски атаки, това е вид лудост.
Келси добавя, че при определени необичайни обстоятелства този принцип също може да се използва за извършване на атака на оракул. В частност, той описва как атакувач може да възстанови тайния открит текст, ако може да накара сървъра да шифрова данни от форма (открит текст, след който следва
, докато контролира
и може по някакъв начин да проверява дължината на шифрования резултат.
Отново, както и при другите атаки на оракул, ние имаме съотношение:

Отново, ние контролираме един член (
), виждаме малка информация, която изтича за друг член (шифротекста) и се опитваме да възстановим последния (открит текст). Въпреки аналогията, това е малко необичайна ситуация в сравнение с другите атаки на оракул, които сме виждали.
За да илюстрираме как такава атака може да работи, използваме измислена схема за компресия, която току-що измислихме: TOYZIP. Тя търси текстови редове, които вече са се появявали в текста, и ги заменя с три байта-запълвачи, които указват къде да намерите по-ранен екземпляр на реда и колко пъти там се среща. Например, редът helloworldhello може да бъде компресирано в helloworld[00][00][05] дължина 13 байта в сравнение с оригинала от 15 байта.
Да предположим, че хакерът се опитва да възстанови открития текст на формуляра password=..., където самата парола не е известна. Съгласно модела на атаката на Келси, хакерът може да помоли сървъра да компресира и след това да криптира съобщенията на формуляра (откритият текст, последван от
), където
— произволен текст. Когато сървърът завърши работа, той съобщава дължината на резултата. Атаката протича по следния начин:
Хакер: Моля, компресирайте и криптирайте открития текст без никакви запълвания.
Сървър: Дължината на резултата е 14.
Хакер: Моля, компресирайте и криптирайте открития текст, към който е добавено
password=a.Сървър: Дължината на резултата е 18.
Хакерът отбелязва: [оригинал 14] + [три байта, които заменят password=] + a
Хакер: Моля, компресирайте и криптирайте открития текст, към който е добавено
password=b.Сървър: Дължината на резултата е 18.
Хакер: Моля, компресирайте и криптирайте открития текст, към който е добавено
password=с.Сървър: Дължината на резултата е 17.
Хакерът отбелязва: [оригинал 14] + [три байта, които заменят password=c]. Това предполага, че оригиналният открит текст съдържа редица password=c. Тоест паролата започва с буква c
Хакер: Моля, компресирайте и криптирайте открития текст, към който е добавено
password=сa.Сървър: Дължината на резултата е 18.
Хакерът отбелязва: [оригинал 14] + [три байта, които заменят password=с] + a
Хакер: Моля, компресирайте и криптирайте открития текст, към който е добавено
password=сb.Сървър: Дължината на резултата е 18.
(… малко по-късно…)
Хакер: Моля, компресирайте и криптирайте открития текст, към който е добавено
password=со.Сървър: Дължината на резултата е 17.
Хакерът отбелязва: [оригинал 14] + [три байта, които заменят password=co]. По същата логика хакерът стига до извода, че паролата започва с буквите co
И така нататък, докато не бъде възстановена цялата парола.
Читателят може да си помисли, че това е чисто академично упражнение и такъв сценарий на атака никога няма да се случи в реалността. Уви, както скоро ще видим, в криптографията е по-добре да не се заричаш.
Брандови уязвимости: CRIME, POODLE, DROWN
Накрая, след задълбочено проучване на теорията, можем да видим как тези методи се прилагат в реални криптографски атаки.
CRIME
Ако атаката е насочена към браузъра и мрежата на жертвата, нещо ще бъде по-лесно, а нещо - по-трудно. Например, да видите трафика на жертвата е лесно: достатъчно е да седите с нея в едно и също кафе с WiFi. Поради тази причина на потенциалните жертви (т.е. на всички) обикновено се препоръчва да използват криптирано съединение. Ще бъде по-трудно, но все пак възможно, да се извършват HTTP заявки от името на жертвата на някой трети сайт (например Google). Злоумислителят трябва да примамва жертвата на злонамерена уеб страница с скрипт, който ще направи заявката. Уеб браузърът автоматично ще предостави съответстващата сесийна бисквитка.
Това изглежда удивително. Ако Боб е влязъл на evil.com, не е ли възможно скриптът на този сайт просто да помоли Google да изпрати паролата на Боб по имейл на attacker@evil.com? Ну, в теории да, но на самом деле нет. Такой сценарий называется атакой на подделку межсайтовых запросов (, CSRF), и той беше популярен около средата на 90-те години. Днес, ако evil.com опита такъв трик, Google (или който и да е уважаващ себе си сайт) обикновено ще отговори: «Добре, но вашият CSRF токен за тази транзакция ще бъде… хмм… три трилиона и седем. Моля, повторете това число». Съвременните браузъри прилагат нещо, наречено «политика за същия произход» (same-origin policy), съгласно която скриптовете на сайт A нямат достъп до информация, изпратена от уебсайт B. Следователно скриптът на evil.com може да изпраща заявки до google.com, но не може да чете отговорите или наистина да завърши транзакцията.
Трябва да подчертаем, че ако Боб не използва криптирано свързване, всичките тези защити са безсмислени. Хакерът може просто да прочете трафика на Боб и да възстанови сесийната бисквитка на Google. С тази бисквитка той просто ще отвори нов таб в Google, без да излиза от собствения си браузър, и ще се представи за Боб, без да се сблъсква с досадните политики за същия произход. Но, за съжаление за хакера, такова нещо се среща все по-рядко. Интернетът изцяло обяви война на некриптираните свързвания, и изходящият трафик на Боб вероятно е криптиран, без значение дали иска или не. Освен това, от самото начало на внедряването на протокола, трафикът също беше компресиран преди криптиране; това беше обичайна практика за намаляване на забавянията.
Тук в игра влиза (Compression Ratio Infoleak Made Easy, лесна уязвимост чрез коефициента на компресия). Уязвимост, която бяха демонстрирали през септември 2012 година изследователите по сигурност Джулиано Риццо (Juliano Rizzo) и Тай Дуонг (Thai Duong). Вече разгледахме цялата теоретична основа, която позволява да разберем какво направиха и как. Хакерът може да накара браузъра на Боб да изпраща заявки до Google, а след това да подслушва отговорите в локалната мрежа в компресиран, криптиран вид. Следователно имаме:

Тук хакерът контролира заявката и има достъп до подслушвача на трафика, включително размера на пакетите. Измисленият сценарий на Келси се е превърнал в реалност.
Разбирайки теорията, авторите на CRIME създадоха експлоат, който може да открадне сесиите на бисквитки за широк спектър от сайтове, включително Gmail, Twitter, Dropbox и Github. Уязвимостта засегна повечето съвременни уеб браузъри, в резултат на което бяха издадени пачове, които молчаливо погребаха функцията за компресия в SSL, за да не се използва изобщо. Единственият защитен от уязвимостта стана уважаваното Internet Explorer, който никога не е използвал компресия SSL.
POODLE
През октомври 2014 година екипът по сигурността на Google предизвика вълнение в общността за сигурност. Те успяха да експлоатират уязвимост в протокола SSL, поправена преди повече от десет години.
Оказа се, че въпреки че на сървърите работи чудесно новият TLSv1.2, много от тях оставиха поддръжката на остарелия SSLv3 за обратно съвместимост с Internet Explorer 6. Вече говорихме за атаки за понижаване, така че можете да си представите какво се случва. Добре организиран саботаж на протокола за ръкостискане - и сървърите са готови да се върнат обратно на добрия стар SSLv3, на практика анулирайки последните 15 години изследвания в сферата на сигурността.
За исторически контекст, :
Transport Layer Security (TLS) е най-важният протокол за сигурност в интернет. [..] почти всяка транзакция, която извършвате в интернет, зависи от TLS. [..] Но TLS не винаги е бил TLS. Протоколът започна живота си в с наименованието "Secure Sockets Layer" или SSL. Ходят слухове, че първата версия на SSL е била толкова ужасна, че разработчиците са събрали всички разпечатки на кода и са ги закопали на тайно сметище в Ню Мексико. Следователно, първата публично достъпна версия на SSL всъщност е . Тя е доста стряскаща и [..] беше продукт от средата на 90-те, който съвременните криптографи разглеждат като "". Много от най-ужасяващите криптографски атаки, за които знаем днес, все още не са били открити. В резултат на това разработчиците на протокола SSLv2 се наложи в същността да проучват пътя в тъмнината, и те се сблъскаха с — за тяхно огорчение и наша полза, тъй като атаките срещу SSLv2 оставиха безценни уроци за следващото поколение протоколи.
След тези събития, през 1996 година, разочарованата компания Netscape преработи протокола SSL от нула. Резултатът стана SSL версия 3, който .
За щастие за хакерите, "няколко" не означава "всички". По принцип, SSLv3 предоставяше всички необходими строителни блокове за стартиране на атаката Воденэ. Протоколът използваше блоков шифър в режим CBC и небезопасна схема за запълване (което беше коригирано в TLS; следователно, възникна необходимостта от атака на понижение). Ако си спомняте схемата за запълване от нашето първоначално описание на атаката Воденэ, схемата на SSLv3 е много подобна.
Но, за нещастие на хакерите, "подобна" не означава "идентична". Схемата за запълване на SSLv3 има вид "N произволни байта, следвани от число N". Опитайте при тези условия да изберете въображаем блок от зашифрована информация и да преминете през всичките етапи на оригиналната схема Воденэ: ще откриете, че атаката успешно извлича последния байт от съответния блок на открития текст, но не продължава по-нататък. Декодиране на всеки 16-ти байт от зашифрования текст е отличен трик, но това не е победа.
Срещайки неуспех, екипът на Google прибегна до крайна мярка: те се прехвърлиха на по-мощна модел на заплаха — тази, която се използва в CRIME. Ако предположим, че злонамереният актьор е скрипт, стартиран на таба на браузъра на жертвата, и той може да извлече сесийни бисквитки, атаката остава впечатляваща. Въпреки че по-широкият модел на заплаха е по-малко реалистичен, в предишния раздел вече видяхме, че този конкретен модел е осъществим.
Като се вземат предвид тези по-мощни възможности на хакера, атаката може да продължи. Имайте предвид, че нападателят знае къде в заглавката се показва криптирания сесионен файл с бисквитки и управлява дължината на предходния HTTP-запит. Затова той е способен да манипулира HTTP-запита, за да подравни последния байт на бисквитките в съответствие с края на блока. Сега този байт е подходящ за декриптиране. Може просто да добавите един символ към запитването, а предпоследният байт на бисквитките да остане на същото място, за да се пробва със същия метод. Атаката продължава така, докато файлът с бисквитки не бъде напълно възстановен. Това се нарича POODLE: Padding Oracle on Downgraded Legacy Encryption, запълване на оракула на пониженото остаряло криптиране.
DROWN
Както вече споменахме, SSLv3 имаше недостатъци, но той бе напълно различен от предшественика си, тъй като уязвимият SSLv2 представляваше продукт от друга епоха. Там можеше да се прекъсне съобщението на средата: съгласявам се с това само през моето тяло превръщаше се в съгласявам се с това; клиентът и сървърът можеха да се срещнат в интернет, да установят доверие и да обменят тайни пред очите на нападателя, който след това лесно се представяше и за единия, и за другия. Имаше и проблем с износната криптография, който споменахме при разглеждане на FREAK. Това бяха криптографските Содом и Гомор.
През март 2016 година екип от изследователи от различни технически области се събра и направи удивително откритие: SSLv2 все още се използва в системите за сигурност. Да, нападателите повече не можеха да понижават съвременните сесии TLS до SSLv2, тъй като този пропуск бе затворен след FREAK и POODLE, но те все още могат да се свързват със сървъри и да инициират сесии SSLv2 самостоятелно.
Може да попитате какво ни интересува, какво правят те там? Имат уязвима сесия, но това не би трябвало да влияе на другите сесии или на сигурността на сървъра — нали? Ами, не съвсем. Да, в теорията така трябва да бъде. Но не — защото генерирането на SSL сертификати налага определено бреме, в резултат на което много сървъри използват едни и същи сертификати и, следователно, едни и същи RSA ключове за TLS и SSLv2 връзки. Още по-зле, поради бъг в OpenSSL в тази популярна реализация, опцията "Изключи SSLv2" всъщност не работеше.
Това направи възможна крос-протоколна атака върху TLS, наречена (Decrypting RSA with Obsolete and Weakened eNcryption, декриптиране на RSA с остаряла и отслабена криптография). Нека припомним, че това не е същото като атака на понижаване; на хакера не му е нужно да действа като „човек в средата“ и не е необходимо да ангажира клиента в небезопасна сесия. Злоумишлениците просто сами инициират небезопасна SSLv2 сесия със сървъра, атакуват слабо протокола и възстановяват закрития RSA сървърен ключ. Този ключ също е валиден за TLS връзките, и от този момент нататък никаква TLS сигурност няма да го предпази от хакване.
Но за хакерство е необходима работеща атака срещу SSLv2, която позволява възстановяването не само на конкретния трафик, но и на тайния RSA сървърен ключ. Въпреки че това е сложно да се реализира, изследователите можеха да изберат всяка уязвимост, която беше напълно поправена след SSLv2. В крайна сметка те намериха подходящ вариант: атаката на Блайхенбахер, за която споменахме по-рано и ще обясним подробно в следващата статия. SSL и TLS са защитени от тази атака, но някои случайни функции на SSL в комбинация с къси ключове в криптографията за експортно ниво направиха възможно .
Към момента на публикуване, уязвимостите на DROWN бяха изложени на 25% от топ сайтовете в интернет, а атаката можеше да бъде проведена с скромни ресурси, достъпни дори за опозиционни хакери. За извличането на RSA ключа на сървера бяха необходими осем часа изчисления и 440 $, а SSLv2 смени статуса си от „остарял“ на „радиоактивен“.
Извинете, а какво ще кажете за Heartbleed?
Това не е криптографска атака в смисъла, в който описахме по-горе; това е преливане на буфер.
Нека направим пауза
Започнахме с някои основни методи: брутфорс, интерполация, понижаване, крос-протокол и предварителни изчисления. След това разгледахме една напреднала техника, вероятно основен компонент на съвременните криптографски атаки: атаката на оракула. Прекарахме доста време в справяне с нея и разбрахме не само принципа, който стои зад нея, но и техническите детайли на две конкретни реализации: атаката на Воденэ срещу режима на криптиране CBC и атаката на Келси срещу протоколите за криптиране с предварително компресиране.
При преглед на атаките на понижение и с предварителни изчисления, ние накратко изложихме атаката FREAK, която използва и двата метода, тъй като целевите сайтове се снижават до слаби ключове и след това повторно използват същите ключове. В следващата статия оставихме (много подобна) атака Logjam, която е насочена към алгоритмите с открит ключ.
След това разгледахме още три примера за приложение на тези принципи. Първо, CRIME и POODLE: две атаки, които разчитат на способността на хакера да внедри произволен открит текст до целевия открит текст, след което да изследва отговорите на сървера и след това, използвайки методологията на атаката на оракула, да използва тази скудна информация за частично възстановяване на открития текст. CRIME следваше пътя на атаката на Келси върху компресията на SSL, докато POODLE вместо това използваше вариант на атаката на Воденах на CBC с същия ефект.
След това се фокусирахме върху крос-протоколната атака DROWN, която установява връзка с сървъра през остарелия протокол SSLv2 и след това възстановява секретни сървърни ключове с помощта на атаката на Блайхенбахера. В момента пропуснахме техническите детайли на тази атака; както и Logjam, тя ще трябва да изчака, докато не проучим задълбочено криптосистемите с открит ключ и техните уязвимости.
В следващата статия ще говорим за напредналите атаки — като метода на срещата по средата (meet-in-the-middle), диференциалния криптоанализ и атаката „дни на раждане“. Ще направим кратък преглед на атаките чрез странични канали и след това ще се заемем с най-вкусното — криптосистемите с открит ключ.
Източник: habr.com

= (байт n от
)
(байт n от
)