У криптографії, режими дії () — це математичні операції для уможливлення повторюваного і убезпеченого використання блокового шифру з одним ключем. Блоковий шифр дозволяє шифрування тільки одного блоку даних встановленої довжини. Для роботи з блоками різних довжин, дані спочатку потрібно розбити на окремі блоки встановленої даним шифром довжини. Зазвичай, останній блок треба доповнити до відповідної довжини підхожим доповненням. Режими дій описують процес шифрування кожного з цих блоків і звичайно використовують рандомізацію засновану на додатковому значені на вході, відомим як ініціалізаційний вектор, з ціллю зробити це безпечно.
Режими дії первісно були розроблені для шифрування й автентифікації. Історично, режими шифрування широко вивчались зважаючи на їх властивості поширення помилок при різних сценаріях зміни даних. Подальший розвиток поставив цілісність інформації як цілком окрему від шифрування ціль криптографії. Деякі сучасні режими дії поєднують шифрування і автентифікацію ефективним чином, і відомі як режими автентифікованого шифрування.
Хоча режими дії звичайно пов'язують з симетричним шифруванням, в принципі, їх також можна застосувати до примітивів шифрування з відкритим ключем таких як RSA (хоча на практиці шифрування довгих повідомлень з відкритим ключем найчастіше здійснюють із використанням гібридного шифрування).
Ініціалізаційний вектор (IV)
Ініціалізаційний вектор () — це блок біт, який використовують декілька режимів для увипадковлення шифрування і, таким чином, видають різні шифротексти навіть на одному відкритому тексті зашифрованому декілька разів, без потреби в повільнішому процесі отримання нового ключа.
Ініціалізаційний вектор має інші вимоги до безпеки ніж ключ, отже він не повинен бути секретним. Однак, здебільшого, важливо щоб IV не використовувався двічі з одним і тим самим ключем. Для CBC і CFB, повторне використання IV призводить до витоку інформації про перший блок відкритого тексту. Для OFB і CTR, повторне використання IV повністю руйнує безпеку. В режимі CBC, IV повинен бути непрогнозовним під час шифрування; зокрема, звична раніше практика використання останнього блоку шифротексту як IV для наступного повідомлення небезпечна (цей метод, наприклад, використовувався в SSL 2.0). Якщо нападник знає IV (або попередній блок шифротексту) до того як він визначив наступний відкритий текст, він може перевірити свій здогад щодо відкритого тексту для якогось блоку зашифрованого раніше (це відомо як атака TLS CBC IV).
Як особливий випадок, якщо відкриті тексти завжди достатньо малі для одного блоку (без доповнення), тоді для деяких режимів (ECB, CBC, PCBC), перевикористання IV призведе до витоку лише якщо два шифротексти однакові. Це може бути корисним у випадках коли треба перевіряти на рівність без дешифрування.
Доповнення
Блоковий шифр опрацьовує інформацію блоками встановленої довжини (відомої як розмір блока), але повідомлення мають різну довжину. Отже деякі режими (а саме ECB і CBC) вимагають доповнення завершального блоку перед шифруванням. Існує декілька схем доповнення. Найпростіша полягає в додаванні нульових байтів до відкритого тексту для доведення його довжини до кратної до розміру блоку, але треба потурбуватись, щоб можна було відновити початкову довжину тексту; наприклад, якщо відкритий текст є рядком у стилі C, що не містить нульових байтів окрім як останній байт. Первісний метод DES трошки складніший, який додає один одиничний біт за яким слідують нульові біти; якщо повідомлення завершується врівно з блоком, додається цілий блок доповнення. Найускладненіший варіант схем специфічних для CBC таких як викрадення шифротексту або завершення залишкового блоку, які не призводять до збільшення шифротексту, натомість трошки ускладнюють алгоритм. Брюс Шнайдер і Нілс Ферґюсон запропонували дві можливості, обидві прості: додати байт зі значенням 128 (шістнадцяткове 80), з наступними нульовими байтами до повного блоку або доповнити n байтами зі значенням n.
CFB, OFB і CTR режими не потребують якихось особливих заходів для опрацювання повідомлень не кратних розміру блоку, бо режими працюють через XOR відкритого тексту з виходом блокового шифру. Останній неповний блок відкритого тексту XOR-иться з першими кількома байтами потоку ключа, на виході отримуємо завершальний блок шифротексту однакової довжини з завершальним блоком відкритого тексту. Така властивість потокових шифрів робить їх придатними для використання в ситуаціях коли необхідна однакова довжина шифро і відкритого тексту, і в застосунках де дані передаються в потоковому вигляді і незручно доповнювати блоки.
Електронна книга кодів (ECB) Найпростішим з режимів шифрування є режим електронної книги кодів (), він же режим простої заміни. Повідомлення розбивається на блоки і кожен блок шифрується окремо.
Вадою цього методу є те, що однакові блоки відкритого тексту шифруються в однакові блоки шифротексту; отже шаблон погано приховується. Цей режим не забезпечує серйозну безпеку повідомленням, і його взагалі не радять використовувати в криптографічних протоколах.
Типовий приклад ступеня збереження шаблонів ECB відкритого тексту в шифротексті можна побачити, коли ECB використовують для шифрування bitmap зображень, які використовують великі площі однорідних кольорів. Хоча колір кожного окремого пікселя зашифровано, загальну картинку можна розрізнити як маску однокольорових пікселів картинки на вході.
Ланцюгування шифроблоків (CBC) IBM винайшла режим ланцюгування шифроблоків () у 1976.William F. Ehrsam, Carl H. W. Meyer, John L. Smith, Walter L. Tuchman, "Message verification and transmission error detection by block chaining", US Patent 4074066, 1976 В CBC режимі, кожен блок відкритого тексту XOR-ять з попереднім шифроблоком перед шифруванням. Так, кожен шифроблок, залежить від усіх блоків оброблених до нього. Для отримання унікальних повідомлень потрібно використовувати ініціалізаційний вектор у першому блоці.
Якщо перший блок має індекс 1, математична формула для CBC шифрування така
тоді як математична формула для CBC розшифрування така
CBC найчастіше використовний режим. Основна його вада це властива послідовність (тобто не можливість упаралелення), і необхідність доповнення повідомлення до розміру кратного розміру блоку. Один зі способів уникнути доповнення полягає в використанні методу викрадення шифротексту. Зауважте, що зміна одного біта в відкритому тексті або IV впливає на всі наступні шифроблоки.
Розшифрування з неправильним IV спричиняє пошкодження першого блоку відкритого тексту, але наступні блоки будуть правильними. Це відбувається через можливість відновити відкритий текст з двох суміжних блоків шифротексту. Як наслідок, розшифрування можна упаралелити. Зауважте, що зміна одного біту в шифротексті спричиняє повне пошкодження відповідного блоку відкритого тексту, але інші блоки залишаються незачепленими.
Режим CBC не стійкий до атаки на основі підібраного шифротексту. Отримавши в CPA-запиті , в ССА-запиті передаємо
CBC теорема (непередбачуваність CBC) Для будь-якого , якщо є безпечною PRP над , тоді — значеннєво безпечна щодо CPA над .
Зокрема, для супротивника з q-запитами, що атакує існує PRP супротивник такий що:
Отже CBC залишається безпечним доки
Ланцюгування шифроблоків із поширенням (PCBC) Режим ланцюгування шифроблоків із поширенням ()Propagating cipher-block chaining або ()Kaufman, C., Perlman, R., & Speciner, M (2002). Network Security. Upper Saddle River, NJ: Prentice Hall. Page 319 (2nd Ed.) спроектували для введення маленьких змін в шифротексті для нескінченного поширення при розшифруванні як і при шифруванні.
Шифрування і розшифрування такі:
Кербер v4 і WASTE використовують PCBC. Якщо повідомлення зашифроване у PCBC режимі, тоді переставка двох сусідніх блоків не впливає на розшифрування наступних блоків.Kohl, J. "The Use of Encryption in Kerberos for Network Authentication", Proceedings, Crypto '89, 1989; published by Springer-Verlag; http://dsns.csie.nctu.edu.tw/research/crypto/HTML/PDF/C89/35.PDF Через це, Кербер v5 не використовує PCBC.
Зворотний зв'язок по шифротексту (CFB) Режим зворотного зв'язку по шифротексту (), близький родич для CBC, перетворює блоковий шифр на потоковий, що самосинхронізується. Дія дуже схожа; зокрема, розшифрування CFB майже тотожне до шифрування CBC виконаного навпаки:
Описаний вище найпростіший спосіб використання CFB ані трохи не більш самосинхронізовний ніж інші режими на кшталт CBC. Якщо губиться цілий блок шифротекту, то обидва CBC і CFB синхронізуються, тоді як втрата одного байту або біту остаточно відкине розшифрування. Для уможливлення синхронізації після втрати одного байту або біту, за раз треба шифрувати один байт або біт. CFB можна так використовувати разом з зсувним регістром на вході до блокового шифру.
Для використання CFB як самосинхронізовного потокового шифру, який синхронізуватиметься для будь-якої втрати кратної x бітам, починають з встановлення зсувного регістра розміром в один блок ініціалізаційним вектором. Це шифрується блоковим шифром, і старші x біт висліду XOR-рять з x бітами відкритого тексту для отримання x біт шифротексту. Ці x біт на виході заштовхуються в зсувний регістр, і процес повторюється з наступними x бітами відкритого тексту. Розшифрування схоже, починається з ініціалізаційним вектором, шифрується і XOR-иться x старших бітів висліду з x бітами шифротексту для отримання x бітів відкритого тексту. Заводимо x біт шифротексту в зсувний регістр. Цей спосіб обробки відомий як CFB-8 або CFB-1 (відповідно до розміру зсуву).NIST: Recommendation for Block Cipher Modes of Operation
В записі, де — i-й стан зсувного регістра, це зсунуте на біт, це старших бітів і це кількість біт в IV:
Якщо x біт шифротексту втрачено, шифр видаватиме неправильний відкритий текст доки зсувний регістр не набуде стану, який він мав під час шифрування, тут шифр ресинхронізується. Це призводить до того, що підтасується вихід розміром в один блок.
Подібно до режиму CBC, зміни в відкритому тексту поширюються на весь шифротекст, і шифрування не можна упаралелити. Також подібно до CBC, розшифрування упаралельнюване. При розшифруванні, зміна одного біту в шифротексті впливає на два блоки відкритого тексту: однобітова зміна в відповідному блоці відкритого тексту і повне пошкодження наступного блоку. Подальші блоки розшифровуються нормально. Через це, якщо зловмисник знає відкритий текст, він може змінити біти в блоці шифротексту як він захоче і призвести до отримання потрібного йому блоку відкритого тексту, наступний блок буде перетасовано, але на той час вже може бути заподіяна шкода.
CFB разом з режимами потокових шифрів OFB і CTR поділяє дві переваги над CBC режимом: блок шифр використовується лише в напрямку шифрування, і повідомлення не потребує доповнення до розміру кратного розміру блоку (хоча також можна використати викрадення шифротексту і таким чином зробити доповнення необов'язковим).
Зворотний зв'язок по виходу (OFB) Режим зворотного зв'язку по виходу () утворює з блокового шифру синхронний потоковий шифр. Він утворює потік ключа, який потім XOR-иться з блоками відкритого тексту для утворення шифротексту. Як і передбачає ім'я, OFB використовує попередній вихід блокового шифру, а не попередній шифротекст як CFB, що робить шифротекст незалежним від відкритого тексту і шифротексту, саме через це OFB є синхронним потоковим шифром. Так само як і з іншими потоковими шифрами, обернення біту в відкритому тексті призводить до обернення відповідного біту в шифротексті. Ця властивість дозволяє багатьом кодам виправлення помилок виконуватись нормально навіть при застосуванні до шифрування.
Через симетричність операції XOR, шифрування і розшифрування однакові:
Для кожного нового повідомлення треба використовувати новий IV, інакше повідомлення будуть шифруватись з тим самим потоком ключа. IV можна відправляти у відкритому вигляді, однак, якщо зловмисник підмінив IV, тоді на відміну від CFB режиму, отримати відкритий текст з шифротексту неможливо.