Криптографічні атаки: пояснення для зім'ятих умів

При слові «криптографія» деякі згадують свій пароль 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 і так далі. Ймовірно, доведеться зробити кілька спроб, але в порівнянні з повним брутфорсом ця атака відновлює вихідний текст у найкоротший термін:

там більше думок у неділю і вовні horatio than are dreamt of 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 та INRIA. Спочатку в лютому розголосили деталі атаки 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) – співавтор Twofish - Запропонував різні атаки оракула на системи, які стискають повідомлення, а потім шифрують їх. Найбільш помітною серед них була атака, яка використовувала те, що часто можна вивести вихідну довжину відкритого тексту від зашифрованого довжини тексту. Теоретично це дозволяє провести атаку оракула, яка відновлює частини вихідного відкритого тексту.

Далі ми наводимо детальніший опис атак Водене і Келсі (дамо детальніший опис атаки Блайхенбахера, коли перейдемо до атак на криптографію з відкритим ключем). Незважаючи на всі наші зусилля, текст стає дещо технічним; тому, якщо вищевикладеного вам достатньо, пропустіть наступні два розділи.

Атака Водене

Щоб зрозуміти атаку Водене, спочатку потрібно трохи докладніше поговорити про блокові шифри і режими шифрування. "Блоковий шифр" - це, як уже згадувалося, шифр, який приймає ключ і введення певної фіксованої довжини ("довжина блоку") і видає зашифрований блок тієї ж довжини. Блокові шифри широко використовуються та вважаються відносно безпечними. DES, який нині вийшов на пенсію, який вважають першим сучасним шифром, був блоковим. Як згадувалося вище, те саме вірно і для AES, широко використовуваного сьогодні.

На жаль, блокові шифри мають одну кричущу слабкість. Типовий розмір блоку становить 128 біт, або 16 символів. Очевидно, що сучасна криптографія вимагає працювати з вхідними даними більшого розміру, і тут з'являються режими шифрування. Режим шифрування - по суті хак: це спосіб якимось чином застосувати блоковий шифр, який приймає вхідні дані лише певного розміру до вхідних даних довільної довжини.

Атака Водене орієнтована популярний режим роботи CBC (Cipher Block Chaining, режим зчеплення блоків шифротекста). Атака розглядає базовий блоковий шифр як чарівну неприступну чорну скриньку і повністю обходить його безпеку.

Ось діаграма, яка показує, як працює режим CBC:

Криптографічні атаки: пояснення для зім'ятих умів

Криптографічні атаки: пояснення для зім'ятих умів

Обведений плюс означає операцію XOR (що виключає «АБО»). Наприклад, другий блок шифротексту отримано:

  1. Виконання операції XOR на другому блоці відкритого тексту з першим блоком шифротексту.
  2. Шифруванням отриманого блоку за допомогою блокового шифру, використовуючи ключ.

Оскільки CBC так інтенсивно використовує бінарну операцію XOR, давайте скористаємось моментом, щоб згадати деякі її властивості:

  • Ідемопотентність: Криптографічні атаки: пояснення для зім'ятих умів
  • Комутативність: Криптографічні атаки: пояснення для зім'ятих умів
  • Асоціативність: Криптографічні атаки: пояснення для зім'ятих умів
  • Самозворотність: Криптографічні атаки: пояснення для зім'ятих умів
  • Побайтовість: байт n з Криптографічні атаки: пояснення для зім'ятих умів = (байт n з Криптографічні атаки: пояснення для зім'ятих умів) Криптографічні атаки: пояснення для зім'ятих умів (байт n з Криптографічні атаки: пояснення для зім'ятих умів)

Як правило, ці властивості мають на увазі, що якщо ми маємо рівняння, що включає операції XOR і одне невідоме, його можна вирішити. Наприклад, якщо ми знаємо, що Криптографічні атаки: пояснення для зім'ятих умів з невідомим Криптографічні атаки: пояснення для зім'ятих умів та відомими Криптографічні атаки: пояснення для зім'ятих умів и Криптографічні атаки: пояснення для зім'ятих умів, то ми можемо покладатися на вищезгадані властивості вище, щоб вирішити рівняння для Криптографічні атаки: пояснення для зім'ятих умів. Застосувавши XOR з обох сторін рівняння з Криптографічні атаки: пояснення для зім'ятих умів, ми отримуємо Криптографічні атаки: пояснення для зім'ятих умів. За мить все це стане дуже актуальним.

Між нашим сценарієм Аліси та атакою Водене є дві незначні відмінності та одна головна відмінність. Два незначні:

  • У сценарії Аліса очікувала, що відкриті тексти закінчуються символами a, bb, ccc і так далі. В атаці Водене жертва натомість очікує, що відкриті тексти закінчуються N разів байтом N (тобто шістнадцятковим 01 або 02 02, або 03 03 03 і так далі). Це суто косметична відмінність.
  • У сценарії Аліси було легко сказати, чи прийняла Аліса повідомлення за відповіддю «Неправильний фіктивний текст». В атаці Водене потрібно більший аналіз і важлива точна реалізація на стороні жертви; але для стислості візьмемо за даність, що це аналіз все ще можливий.

Головна відмінність:

  • Оскільки ми використовуємо не ту саму криптосистему, зв'язок між контрольованими зловмисником байтами шифрованого тексту і секретами (ключ і відкритий текст), очевидно, буде іншим. Тому зловмиснику доведеться використати іншу стратегію під час створення шифротекстів та інтерпретації відповідей сервера.

Це головна відмінність — останній фрагмент головоломки, щоб зрозуміти атаку Водене, тому на мить подумаємо про те, чому і як взагалі можна організувати атаку оракула на CBC.

Припустимо, дано шифротекст CBC із 247 блоків, і ми хочемо його розшифрувати. Ми можемо надсилати на сервер підроблені повідомлення, як раніше могли надсилати підроблені повідомлення Алісі. Сервер для нас розшифровуватиме повідомлення, але не показуватиме розшифровку — натомість, знову ж таки, як і у випадку з Алісою, сервер повідомить лише один біт інформації: у відкритого тексту допустиме заповнення чи ні.

Врахуйте, що у сценарії Аліси ми мали такі відносини:

$$display$$text{SIMPLE_SUBSTITUTION}(text{ciphertext},text{key}) = text{plaintext}$$display$$

Назвемо це «рівнянням Аліси». Ми контролювали шифротекст; сервер (Аліса) зливав розпливчасту інформацію про отриманий відкритий текст; і це дозволило нам вивести інформацію про останній фактор - ключ. За аналогією, якщо ми зможемо знайти такий зв'язок для сценарію 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 загальнодоступний).

Цей конкретний метод грає вирішальну роль в атаці оракула, з якою ми зіткнемося пізніше.

Атака Келсі

Близький нам за духом Джон Келсі викладав принципи, що лежать в основі багатьох можливих атак, а не лише докладні деталі конкретної атаки на конкретний шифр. Його стаття 2002 року - Це дослідження можливих атак на зашифровані стислі дані. Ви думали, що для проведення атаки недостатньо однієї інформації, що дані були стиснуті перед шифруванням? Виявляється, достатньо.

Цей дивовижний результат зумовлений двома принципами. По-перше, існує сильна кореляція між довжиною відкритого тексту та довжиною шифротексту; для багатьох шифрів точну рівність. По-друге, коли виконується стиск, існує також сильна кореляція між довжиною стисненого повідомлення та ступенем «гучності» відкритого тексту, тобто частки символів, що не повторюються (технічний термін — «велика ентропія»).

Щоб побачити принцип у дії, розглянемо два відкриті тексти:

Відкритий текст 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

Нарешті, після детального вивчення теорії, ми можемо подивитися, як ці методи застосовуються у реальних криптографічних атаках.

ЗЛОЧИН

Криптографічні атаки: пояснення для зім'ятих умівЯкщо атака націлена на браузер та мережу жертви, щось буде простіше, а щось складніше. Наприклад, побачити трафік жертви легко: достатньо сидіти з нею в тому самому кафе з WiFi. Тому потенційним жертвам (тобто всім) зазвичай рекомендується використовувати зашифроване з'єднання. Буде складніше, але все одно можливе виконання HTTP-запитів від імені жертви на якийсь сторонній сайт (наприклад, Google). Зловмисник повинен заманити жертву на шкідливу веб-сторінку зі скриптом, який зробить запит. Веб-браузер автоматично надасть відповідну сеансову куку.

Це здається дивовижним. Якщо Боб зайшов на evil.com, невже скрипт на цьому сайті може просто попросити Google надіслати пароль Боба електронною поштою на [email protected]? Ну, теоретично так, але насправді ні. Такий сценарій називається атакою на підробку міжсайтових запитів (Підробка міжсайтових запитів, CSRF), і він був популярний приблизно в середині 90-х. Сьогодні, якщо evil.com спробує такий трюк, Google (або будь-який сайт, що поважає себе) зазвичай відповість: «Відмінно, але ваш токен CSRF для цієї транзакції буде… ммм… три триллиона и семь. Будь ласка, повторіть це число». Сучасні браузери застосовують щось під назвою «політика однакового походження» (same-origin policy), згідно з якою скрипти на сайті A не отримують доступу до інформації, надісланої веб-сайтом B. Тому скрипт на evil.com може надсилати запити до google.comале не може прочитати відповіді або насправді завершити транзакцію.

Ми повинні наголосити, що якщо Боб не використовує зашифроване з'єднання, всі ці захисту безглузді. Зломщик може просто прочитати трафік Боба та відновити сеансову куку Google. З цією кукою він просто відкриє нову вкладку Google, не виходячи з власного браузера, і видасть себе за Боба, не зустрічаючись із прикрими політиками same-origin policy. Але, на жаль для зломщика, таке трапляється все рідше. Інтернет загалом давно оголосив війну незашифрованим з'єднанням, і вихідний трафік Боба, мабуть, зашифрований, подобається йому це чи ні. Крім того, з самого початку впровадження протоколу трафік також стискався перед шифруванням; це була звичайна практика зменшення затримки.

Тут в гру вступає ЗЛОЧИН (Compression Ratio Infoleak Made Easy, простий витік через коефіцієнт стиснення). Уразливість, яку показали у вересні 2012 року дослідники безпеки Джуліано Ріццо (uliano Rizzo) та Тай Дуонг (Thai Duong). Ми вже розібрали всю теоретичну базу, що дозволяє зрозуміти, що вони зробили і як. Зломщик може змусити браузер Боба надсилати запити до Google, а потім прослуховувати відповіді в локальній мережі у стислому, зашифрованому вигляді. Тому ми маємо:

Криптографічні атаки: пояснення для зім'ятих умів

Тут зломщик контролює запит і має доступ до сніфер трафіку, включаючи розмір пакетів. Вигаданий сценарій Келсі втілився у життя.

Розуміючи теорію, автори CRIME створили експлоїт, який може вкрасти сеансові куки для широкого спектру сайтів, включаючи Gmail, Twitter, Dropbox та Github. Вразливість торкнулася більшості сучасних веб-браузерів, внаслідок чого були випущені патчі, які мовчки поховали функцію стиснення SSL, щоб вона взагалі не використовувалася. Єдиним захищеним від уразливості став поважний Internet Explorer, який взагалі ніколи не використовував стиснення SSL.

ПУДЕЛЬ

Криптографічні атаки: пояснення для зім'ятих умівУ жовтні 2014 року команда безпеки Google набула шереху в спільноті безпеки. Вони змогли експлуатувати вразливість у протоколі SSL, виправлену понад десять років тому.

Виявилося, що хоча на серверах працює чудовий новенький TLSv1.2, багато хто залишив підтримку застарілого SSLv3 заради зворотної сумісності з Internet Explorer 6. Ми вже говорили про атаки на зниження, так що можете уявити, що відбувається. Добре організований саботаж протоколу рукостискання — і сервери готові повернутися на старий добрий SSLv3, суттєво скасувавши останні 15 років досліджень у сфері безпеки.

Для історичного контексту ось коротке резюме історії SSL аж до версії 2 від Метью Гріна:

Transport Layer Security (TLS) – найважливіший протокол безпеки в інтернеті. [..] майже кожна транзакція, яку ви робите в інтернеті, залежить від TLS. [..] Але TLS не завжди був TLS. Протокол почав своє життя в Netscape Communications під назвою "Secure Sockets Layer" або SSL. Ходять чутки, що перша версія SSL виявилася настільки жахливою, що розробники зібрали всі роздруківки коду та закопали на секретному звалищі в Нью-Мексико. Як наслідок, перша загальнодоступна версія SSL насправді є версією SSL 2. Вона досить страшна, і [..] це був продукт середини 90-х, які сучасні криптографи розглядають як «темні віки криптографії». Багато з найогидніших криптографічних атак, про які ми знаємо сьогодні, ще не було виявлено. В результаті розробникам протоколу SSLv2 довелося по суті намацувати шлях у темряві, і вони зіткнулися з безліччю жахливих монстрів — на жаль і нашій вигоді, оскільки атаки на SSLv2 залишили безцінні уроки для наступного покоління протоколів.

Після цих подій, 1996 року, розчарована компанія Netscape переробила протокол SSL з нуля. Результатом став SSL версії 3, який виправив кілька відомих проблем безпеки свого попередника.

На щастя для зломщиків, дещо не означає все. В цілому SSLv3 надавав всі необхідні будівельні блоки для запуску атаки Водене. Протокол використовував блоковий шифр в режимі CBC і небезпечну схему заповнення (це виправили в TLS; отже, виникла потреба в атаці зниження). Якщо ви пам'ятаєте схему заповнення у нашому початковому описі атаки Водене, схема SSLv3 дуже схожа.

Але, на жаль для зломщиків, «схожа» не означає «ідентична». Схема заповнення SSLv3 має вигляд «N довільних байт, за якими слідує число N». Спробуйте в таких умовах вибрати уявний блок зашифрованого тексту і пройти через усі етапи оригінальної схеми Водене: ви виявите, що атака успішно витягує останній байт із відповідного блоку відкритого тексту, але далі не проходить. Розшифровка кожного 16-го байта зашифрованого тексту - чудовий фокус, але це не перемога.

Зіткнувшись із невдачею, команда Google вдалася до крайнього варіанту: вони перейшли на потужнішу модель загроз — ту, яка використовувалася в CRIME. Якщо припустити, що зловмисник - це скрипт, запущений на вкладці браузера жертви, і він може отримати сеансові куки, атака все одно залишається вражаючою. Хоча ширша модель загроз менш реалістична, але у попередньому розділі ми вже бачили, що ця конкретна модель здійсненна.

Враховуючи такі потужніші можливості зломщика, тепер атака може продовжитися. Врахуйте, що зловмисник знає, де в заголовку відображається зашифрований сеансовий файл cookie, і керує довжиною попереднього HTTP-запиту. Тому він здатний маніпулювати HTTP-запитом так, щоб вирівняти останній байт куки відповідно до кінця блоку. Тепер цей байт підходить для розшифрування. Можна просто додати до запиту один символ, а передостанній байт cookie залишиться на тому ж місці і придатний для підбору тим самим методом. Атака продовжується таким чином, поки файл cookie не буде відновлений повністю. Це називається POODLE: Padding Oracle on Downgraded Legacy Encryption, заповнення оракула на зниженому застарілому шифруванні.

ВТОПИТИ

Криптографічні атаки: пояснення для зім'ятих умівЯк ми вже згадували, у SSLv3 були недоліки, але він кардинально відрізнявся від попередника, оскільки дірявий SSLv2 був продуктом іншої епохи. Там можна було перервати повідомлення на середині: соглашусь на это только через мой труп перетворювалося на соглашусь на это; клієнт та сервер могли зустрітися в інтернеті, встановити довіру та обмінятися секретами перед очима зловмисника, який потім легко видавав себе і за того, і за іншого. Ще й проблема з експортною криптографією, яку ми згадали під час розгляду FREAK. Це були криптографічні Содом та Гоморра.

У березні 2016 року команда дослідників з різних технічних областей зібралася разом і зробила вражаюче відкриття: SSLv2, як і раніше, використовується в системах безпеки. Так, зловмисники більше не могли знижувати сучасні сеанси TLS до SSLv2, оскільки цю дірку закрили після FREAK та POODLE, але вони все ще можуть підключатися до серверів та ініціювати сеанси SSLv2 самостійно.

Ви запитаєте, яка нам річ, що вони там роблять? Вони мають вразливий сеанс, але це не повинно впливати на інші сеанси або безпеку сервера — правильно? Ну не зовсім. Так, так і має бути теоретично. Але ні — тому що генерація сертифікатів SSL накладає певний тягар, внаслідок чого багато серверів використовують одні й ті самі сертифікати і, як наслідок, одні й ті самі ключі RSA для з'єднань TLS та SSLv2. Що ще гірше, через бага OpenSSL у цій популярній реалізації SSL практично не працювала опція «Вимкнути SSLv2».

Це уможливило крос-протокольну атаку на TLS, яку назвали ВТОПИТИ (Decrypting RSA with Obsolete and Weakened eNcryption, розшифровка RSA із застарілим та ослабленим шифруванням). Нагадаємо, що це не те саме, що атака на зниження; зломщику не потрібно діяти як «людина у середині» і не потрібно залучати клієнта для участі у небезпечному сеансі. Зловмисники просто самі ініціюють небезпечний сеанс SSLv2 із сервером, атакують слабкий протокол та відновлюють закритий серверний ключ RSA. Цей ключ також дійсний для з'єднань TLS, і з цього моменту ніяка безпека TLS не врятує його від злому.

Але для злому потрібна робоча атака проти SSLv2, яка дозволяє відновити не лише конкретний трафік, а й секретний серверний ключ RSA. Хоча це складна постановка, але дослідники могли вибрати будь-яку вразливість, яку повністю закрили після SSLv2. Зрештою, вони знайшли підходящий варіант: атака Блайхенбахера, про яку ми згадували раніше і яку докладно пояснимо в наступній статті. SSL і TLS захищені від цієї атаки, але деякі випадкові функції SSL у поєднанні з короткими ключами у криптографії експортного класу зробили можливим певну реалізацію DROWN.

На момент публікації вразливості DROWN було піддано 25% топ-сайтів інтернету, і атаку можна було провести зі скромними ресурсами, доступними навіть для пустотливих хакерів-одинаків. Для вилучення ключа RSA сервера потрібно вісім годин обчислень і $ 440, а SSLv2 змінив статус із застарілого на радіоактивний.

Чекайте, а що щодо Heartbleed?

Це не криптографічна атака у тому сенсі, як описані вище; це переповнення буфера.

Зробимо перерву

Ми почали з деяких базових методів: брутфорс, інтерполяція, зниження, крос-протокол та передрахунки. Потім розглянули одну сучасну техніку, можливо, головний компонент сучасних криптографічних атак: це атака оракула. Ми досить довго з нею розбиралися — і зрозуміли не лише принцип в основі, а й технічні деталі двох конкретних реалізацій: атаки Водене на режим шифрування CBC та атаки Келсі на протоколи шифрування з попереднім стисненням.

При огляді атак на зниження і з попередніми обчисленнями ми коротко виклали атаку FREAK, яка використовує обидва методи, оскільки цільові сайти опускаються до слабких ключів, а потім повторно використовують ті самі ключі. Для наступної статті ми залишили (дуже схожу) атаку Logjam, яка орієнтована на алгоритми з відкритим ключем.

Потім ми розглянули ще три приклади застосування цих принципів. По-перше, CRIME та POODLE: дві атаки, які покладалися на здатність зломщика впроваджувати довільний відкритий текст поряд з цільовим відкритим текстом, потім вивчати відповіді сервера та потім, використовуючи методологію атаки оракула, використовувати цю мізерну інформацію для часткового відновлення відкритого тексту. CRIME пішла шляхом атаки Келсі на стиск SSL, в той час як POODLE замість цього використовував варіант атаки Водене на CBC з тим же ефектом.

Потім ми звернули увагу на крос-протокольну атаку DROWN, яка встановлює із сервером з'єднання за застарілим протоколом SSLv2, а потім відновлює секретні серверні ключі за допомогою атаки Блайхенбахера. Наразі ми пропустили технічні деталі цієї атаки; як і Logjam, їй доведеться почекати, поки ми добре не вивчимо криптосистеми з відкритим ключем та їх вразливості.

У наступній статті поговоримо про просунуті атаки — такі як метод зустрічі посередині (meet-in-the-middle), диференціальний криптоаналіз та атака «днів народження». Зробимо короткий набіг на атаки сторонніми каналами, а потім візьмемося за найсмачніше - криптосистеми з відкритим ключем.

Джерело: habr.com

Додати коментар або відгук