- •Безпека даних
- •Вступ. Основні поняття безпеки. Конфіденційність, цілісність та доступність даних. Класифікація загроз. Сервіси та механізми захисту.
- •Основні поняття і визначення криптографічного захисту даних.
- •Порушення, механізми і служби захисту.
- •Традиційне шифрування. Модель традиційного шифрування. Криптографія і криптоаналіз. Класична техніка шифрування: підстановки і перестановки.
- •Потокові і блокові шифри. Дифузія і конфузія. Шифр Файстеля. Диференційний та лінійний крипто аналіз. Принципи побудови блокових шифрів
- •Стандарт шифрування даних (des). Критерії, що лежать в основі конструкції des. Алгоритми "Подвійний" та "Потрійний" des.
- •Режими роботи блочних шифрів. Проблема та схеми розподілу ключів симетричного шифрування.
- •1. Режим електронної шифрувальної книги
- •2. Режим зчеплення шифрованих блоків
- •3. Режим шифрованого зворотного зв'язку
- •Генерування випадкових чисел. Використання та джерела випадкових чисел. Генератори псевдовипадкових чисел.
- •Криптографія з відкритим ключем. Принципи побудови криптосистем з відкритим ключем.
- •Алгоритм rsa
- •Порівняння основних характеристик симетричних та асиметричних алгориммів
- •Управління ключами і схема Діффі–Хеллмана.
- •1. Публічне оголошення
- •2. Публічно доступний каталог
- •3. Авторитетне джерело відкритих ключів
- •4. Сертифікати відкритих ключів
- •1. Простий розподіл секретних ключів
- •2. Розподіл секретних ключів із забезпеченням конфіденційності і аутентифікації
- •3. Гібридна схема
- •Аутентифікація повідомлень і функції хешування. Вимоги та функції аутентифікації.
- •1.1. Шифрування повідомлення
- •1.1.1. Традиційне шифрування
- •Коди автентичності повідомлень та функції хешування.
- •1. Коди автентичності повідомлень
- •1.1. Необхідні властивості кодів автентичності повідомлень
- •1.2. Коди автентичності повідомлень на основі des
- •2. Функції хешування
- •2.1. Вимоги, що пред'являються до функції хешування
- •2.2. Прості функції хешування
- •2.3. Атаки, в основі яких лежить парадокс задачі про дні народження
- •3. Захист функцій хешування і кодів автентичності повідомлень
- •3.1. Атаки з перебором всіх варіантів
- •3.2. Функції хешування
- •Алгоритми хешування. Алгоритм hmac.
- •1.1. Цілі розробки нмас
- •1.2. Алгоритм нмас
- •1.3. Захищеність нмас
- •Цифрові підписи та протоколи аутентифікації. Вимоги до цифрового підпису. Стандарт цифрового підпису dss.
- •1. Цифрові підписи
- •1.1. Вимоги
- •1.2. Безпосередній цифровий підпис
- •1.3. Арбітражний цифровий підпис
- •Протоколи аутентифікації. Взаємна та одностороння аутентифікація. (прочитати уважно номери малюнків і т.Д.)
- •2. Підходи на основі традиційного шифрування
- •3. Підходи на основі шифрування з відкритим ключем
- •4. Одностороння аутентифікація
- •5. Підхід на основі традиційного шифрування
- •6. Підходи на основі шифрування з відкритим ключем
- •Програмна реалізація криптографічних алгоритмів. Використання криптографічних функцій Microsoft CryptoApi в прикладному пз. Поняття про безпечний цикл розробки пз (sdl).
- •1. Будова і можливості Crypto api
- •2. Криптопровайдери
- •3. Контейнери ключів
- •4. Алгоритми
- •5. Сертифікати
- •6. Базові функції
- •6.1. Шифрування
- •6.2. Експорт сесійних ключів
- •6.3. Імпорт сесійних ключів
- •6.4. Розшифрування
- •6.5. Хешування
- •6.6. Цифровий підпис
- •6.7. Перевірка цифрового підпису
- •Методи і засоби створення захищеного програмного забезпечення.
- •3. Класифікація вразливостей захисту
- •4. Огляд існуючих аналізаторів
- •Відношення Історія експонатів
- •Список літератури
1.1. Шифрування повідомлення
Шифрування повідомлення саме по собі в деякій мірі може виконувати функції аутентифікації повідомлення. Аналіз схеми для традиційного шифрування й шифрування з відкритим ключем виявляється при цьому різним.
1.1.1. Традиційне шифрування
Розглянемо безпосереднє використання
традиційного шифрування (рис.
11.1 (а)). Повідомлення,
передане від джерела А адресатові
В, шифрується з використанням
секретного ключа
,
відомим обом сторонам, А і В.
Якщо ніхто інший не знає ключа,
конфіденційність гарантується - ніхто
інший не зможе відновити відкритий
текст повідомлення.
Крім того, можна стверджувати, що
користувач В буде впевнений у тім,
що відправником повідомлення, що прийшло,
є користувач А. Чому? Повідомлення
повинне виходити від користувача А
через те, що крім користувача В
тільки користувач А володіє ключем
і тому ніхто інший не має інформації,
необхідної для створення шифрованого
тексту, що може бути дешифрований за
допомогою
.
Крім того, якщо повідомлення
відновлюється, це доводить одержувачеві
В, що ніякий з битов
не був змінений, тому що супротивник,
що не володіє ключем
,
не зможе змінити біти в шифрованому
тексті так, щоб зробити бажані зміни у
відкритому тексті повідомлення.
Таким чином, можна сказати, що традиційне
шифрування забезпечує аутентифікацію
повідомлень, а не тільки їх конфіденційність.
Однак це просте твердження все-таки
вимагає уточнення. Розглянемо, наприклад,
що конкретно відбувається з погляду
користувача В. При наявності функції
дешифрування
й секретного ключа
адресат сприймає будь-які введені
дані
,
у результаті породжуючи висновок
.
Якщо при цьому
є шифрованим текстом істинного
повідомлення
,
породженого за допомогою відповідної
функції шифрування, то
виявиться текстом відкритого повідомлення
.
У противному випадку
буде являти собою безглузду послідовність
бітів. Тому одержувачеві В можуть
знадобитися деякі автоматизовані засоби
розпізнавання
як істинного відкритого повідомлення,
що надійшло від ініціатора А.
Наведені аргументи дуже важливі з погляду аутентифікації повідомлень. Припустимо, що повідомлення може виявитися будь-якою послідовністю бітів. У такому випадку не існує способу, що дозволяє розпізнати повідомлення в пункті призначення автоматично. Висновок невтішний: якщо може бути будь-якою послідовністю бітів, то, незалежно від одержуваного значення , значення виявляється деякою послідовністю бітів, і тому повинне вважатися справжнім відкритим текстом.
Таким чином, у загальному випадку доводиться вимагати, щоб тільки невелика підмножина всіх можливих послідовностей бітів розглядалися як істинні відкриті повідомлення. Тоді випадковий фальшивий шифрований текст навряд чи породить істинне відкрите повідомлення. Припустимо, наприклад, що тільки одна з 106 можливих послідовностей бітів є істинним відкритим повідомленням. При цьому ймовірність того, що взята наудачу послідовність бітів породить істинне відкрите повідомлення, виявляється рівної всього лише 10-6.
Іноді буває важко визначити автоматично, чи дешифрується вхідний шифрований текст у зрозумілий відкритий текст. Якщо ж відкритий текст є, скажемо, двійковим об'єктним файлом або цифровим записом рентгенівського випромінювання, визначення правильності дешифрування й дійсності одержуваного в такий спосіб відкритого тексту може виявитися досить важкою справою. У такому випадку супротивник може видати за повідомлення від законного джерела практично будь-яке повідомлення з довільним вмістом.
Рис. 11.1. Основні можливості шифрування повідомлень.
Однією з можливостей рішення цієї
проблеми є структурування відкритих
текстів таким чином, щоб відповідна
структура легко розпізнавалася, але не
могла бути відтворена без звертання до
функції шифрування. Наприклад, до кожного
повідомлення перед шифруванням можна
додати код розпізнавання помилок, який
називається також контрольною
послідовністю кадру (Frame check sequence – FCS),
або контрольною сумою, як показано на
рис. 11.2 (а). Відправник А бере відкритий
текст повідомлення
й подає його на вхід функції
,
яка обчислює контрольну суму. Значення
контрольної суми приєднується до
,
і отриманий у такий спосіб новий блок
шифрується. У пункті призначення
одержувач В дешифрує блок, що
надійшов, розглядаючи результат
дешифрування як повідомлення із
приєднаною контрольною сумою. Тому
одержувач В спочатку застосовує ту
ж саму функцію
,
щоб відтворити контрольну суму. Якщо
підрахована ним контрольна сума дорівнює
поступившій з повідомленням, повідомлення
вважається справжнім. Малоймовірно,
щоб випадкова послідовність бітів
задовольняла необхідному співвідношенню.
(б) Зовнішній контроль помилок
Рис. 11.2. Внутрішній і зовнішній контроль помилок
Зверніть увагу на порядок, у якому виконуються обчислення контрольної суми й шифрування. Послідовність виконання цих операцій, показана у вигляді схеми на рис. 11.2(а), називається внутрішнім контролем помилок, що автори протиставляють зовнішньому контролю помилок (рис. 11.2(б)). У випадку внутрішнього контролю помилок забезпечується й аутентифікація, оскільки супротивник зіштовхується із проблемою генерування шифрованого тексту, що дає при дешифруванні правильне значення контрольної суми. Якщо замість внутрішньої використати зовнішні контрольні суми, супротивник одержує можливість створювати повідомлення із правильними кодами контролю помилок. І хоча при цьому йому не вдасться одержати відкритий текст повідомлення, він зможе створювати помилкові й перекручені повідомлення.
Коди контролю помилок є тільки одним прикладом - насправді будь-яка структуризація переданих повідомлень розширює можливості аутентифікації. Така структуризація забезпечується архітектурою комунікацій, формованої з набору використовуваних при цьому протоколів передачі даних (наприклад TCP/IP).
Шифрування з відкритим ключем.
Просте шифрування з відкритим ключем
(див. рис. 11.1 (б)) забезпечує конфіденційність,
але не аутентифікацію. Джерело А
використовує відкритий ключ
адресата В, щоб зашифрувати
повідомлення
.
Оскільки тільки користувач
В має відповідний особистий
ключ
,
тільки він і зможе дешифрувати
повідомлення. Ця схема не забезпечує
можливості аутентифікації, тому що
супротивник теж може використати
відкритий ключ користувача В, щоб
зашифрувати повідомлення й представити
його як відправлене від імені користувача
А.
Щоб забезпечити аутентифікацію,
відправник А використовує особистий
ключ для шифрування повідомлення, а
одержувач В використовує відкритий
ключ користувача А, щоб це повідомлення
дешифрувати (див. рис. 11.1 (в)). У такий
спосіб забезпечується аутентифікація
певного рівня надійності, і, щоб це
стало ясно, можна використати аргументацію,
подібну тієї, котра приводилася раніше
для випадку традиційного шифрування.
Її суть полягає в тому, що відправником
повідомлення повинен бути користувач
А, оскільки тільки він має
й, отже, тільки користувач А має
інформацію, необхідну для створення
шифрованого тексту, що може бути
дешифрований за допомогою
.
Тут, як і у попередньому випадку, виникає
проблема: відкритий текст повинен мати
деяку внутрішню структуру, щоб одержувач
міг відрізнити явно структурований
відкритий текст від випадкової
послідовності бітів.
Припустимо, що відкритий текст такою структурою володіє. Тоді схема на рис. 11.1 (в) дійсно забезпечує можливість аутентифікації. Ця схема дозволяє також використати цифровий підпис. (Як ми побачимо надалі, реальна процедура, за допомогою якої звичайно створюються цифрові підписи, відрізняється від представленого тут опису, але принципово є точно такою.) Тільки користувач А міг створити такий шифрований текст, тому що тільки він володіє ключем . Навіть одержувач В не зміг би створити цей шифрований текст. Таким чином, одержавши шифрований текст, користувач В має можливість переконатися, що повідомлення напевне прийшло від відправника А. Насправді відправник А "підписав" своє повідомлення, використовуючи свій особистий ключ для шифрування цього повідомлення.
Зверніть увагу на те, що ця схема не забезпечує конфіденційності. Любий, хто володіє відкритим ключем користувача А, може дешифрувати шифрований текст.
Щоб забезпечити й конфіденційність, і аутентифікацію, відправник А може зашифрувати повідомлення двічі – спочатку з використанням свого особистого ключа, що забезпечить цифровий підпис, а потім з використанням відкритого ключа одержувача В, що забезпечить конфіденційність (див. рис. 11.1 (г)).
Недолік такого підходу полягає в тому, що алгоритм шифрування, який у схемі з відкритим ключем є досить складним, повинен у кожному сеансі зв'язку застосовуватися чотири рази, а не два.
Інформація про ступінь конфіденційності й аутентифікації, забезпечуваної при використанні різних підходів до шифрування повідомлень, представлена в табл. 11.1.
Таблиця 11.1. Конфіденційність й аутентифікація повідомлень при шифруванні
(а) Традиційне (симетричне) шифрування |
• Забезпечує конфіденційність
• Забезпечує певний рівень аутентифікації
• Не забезпечує підпис
|
(б) Шифрування з відкритим ключем (асиметричне шифрування) |
• Забезпечує конфіденційність
• Не забезпечує аутентифікацію
|
• Забезпечує аутентифікацію й підпис
|
• Забезпечує конфіденційність, оскільки використається • Забезпечує аутентифікацію й підпис, оскільки використається |
Код автентичності повідомлення
Альтернативна техніка аутентифікації
припускає приєднання до повідомлення
створеного з використанням секретного
ключа невеликого блоку даних фіксованого
розміру, звичайно званого криптографічною
контрольною сумою, або кодом автентичності
повідомлення (MAC – Message Authentication Code). При
цьому передбачається, що дві дані
сторони, що беруть участь в обміні,
скажемо А і В, використають
загальний
секретний ключ. Щоб послати повідомлення
адресатові В, відправник А
обчислює код автентичності повідомлення
як функцію повідомлення й ключа:
.
Повідомлення з доданим до нього значенням
MAC пересилається адресатові. Одержувач
виконує аналогічні обчислення з отриманим
повідомленням, використовуючи той же
секретний ключ, щоб обчислити нове
значення MAC. Обчислене значення MAC
рівняється з отриманим разом з
повідомленням (рис. 11.4(а)). Якщо припустити,
що секретний ключ знають тільки одержувач
і відправник й якщо отримане значення
MAC збігається з підрахованим, то можна
затверджувати наступне.
Отримувач може бути впевнений, що повідомлення не було змінено. Якщо супротивник змінить повідомлення, але не змінить відповідним чином значення MAC, тоді обчислене одержувачем значення MAC буде відрізнятися від отриманого з повідомленням. Якщо супротивникові секретний ключ невідомий, він не зможе правильно змінити значення MAC, щоб воно відповідало зміненому повідомленню.
Одержувач може бути впевнений, що повідомлення прийшло від зазначеного відправника. Оскільки нікому більше невідомий секретний ключ, ніхто іншої не може підготувати повідомлення з відповідним значенням MAC.
Якщо повідомлення включає привласнений йому порядковий номер (як це, наприклад, передбачається у випадку використання протоколів HDLC, X.25 або TCP), те одержувач може бути впевнений у тім, що повідомлення приходять у правильній послідовності, оскільки супротивник не має можливості змінити порядковий номер повідомлення.
Функція обчислення MAC подібна по своїх діях шифруванню. Різниця лише в тім, що для алгоритму обчислення MAC не потрібне властивість оборотності, як для алгоритму шифрування, щоб можна було дешифрувати повідомлення. Виявляється, що такі математичні властивості функції аутентифікації роблять її менш уразливої до злому в порівнянні з функцією шифрування.
Тільки що описаний процес забезпечує аутентифікацію, але не конфіденційність, оскільки повідомлення в цілому передається відкритим. Конфіденційність може бути забезпечена шляхом шифрування повідомлення або після (рис. 11.4(б)), або перед (рис. 11.4(в)) застосуванням алгоритму обчислення MAC. У кожному із цих випадків буде потрібно два ключі, відомі й відправникові, і одержувачеві. У першому випадку значення MAC обчислюється для повідомлення, що подається на вхід, і результат приєднується до повідомлення шляхом конкатенації. Потім весь блок шифрується. У другому випадку спочатку шифрується повідомлення, потім обчислюється значення MAC для шифрованого тексту й результат приєднується шляхом конкатенації до шифрованого повідомлення, щоб сформувати переданий блок. Звичайно переважніше зв'язувати код автентичності безпосередньо з відкритим текстом, тому частіше застосовується метод, схема якого представлена на рис. 11.4(б).
Рис. 11.4. Основні способи використання кодів автентичності повідомлень (MAC).
Оскільки традиційне шифрування забезпечує аутентифікацію й оскільки таке шифрування можна здійснити за допомогою вже доступних засобів, що перебувають у широкому використанні, чому б не вибрати саме цей спосіб, замість того щоб уводити новий код автентичності повідомлення? Пропонується розглядати наступні три ситуації, у яких має сенс використати коди автентичності повідомлень.
Є цілий ряд додатків, у яких те саме повідомлення може передаватися відразу декільком адресатам. Прикладами можуть служити повідомлення користувачів про те, що мережа в цей момент недоступна, або сигнал тривоги, що посилає із центрального військового штабу. Дешевше й надійніше мати одного адресата, відповідального за перевірку автентичності. При такому підході повідомлення повинне передаватися у відкритому виді разом з відповідним кодом автентичності повідомлення. Відповідальна за перевірку автентичності система повинна мати секретний ключ і виконати таку перевірку. Якщо буде виявлене порушення, інші системи-адресати предупреждаются про небезпеці сигналом загальної тривоги.
Ще одним можливим сценарієм є обмін, при якому одна зі сторін виявляється занадто завантаженої й тому не має часу на те, щоб дешифрувати всі вступники повідомлення. Аутентифікація проводиться на вибірковій основі - повідомлення для перевірки відбираються випадковим образом.
Приваблива можливість аутентифікації комп'ютерних програм у нешифрованому виді. Комп'ютерна програма може бути виконана й без того, щоб щораз дешифрувати її, що вимагає додаткових ресурсів процесора. Якщо з такою програмою зв'язати код автентичності, то його можна перевіряти щораз, коли буде потрібно перевірити цілісність програми.
До цих варіантів можна додати три наступних.
Для деяких додатків не потрібно зберігати таємність, але важливо перевірити автентичність повідомлень. Прикладом може служити протокол SNMP версії 3 (SNMPv3 - Simple Network Management Protocol Version 3), де функції конфіденційності й аутентифікації розділяються. У цьому додатку для керованої системи важливо гарантувати автентичність вступників SNMP-повідомлень, особливо, якщо повідомлення містить команди, що змінюють параметри керованої системи. У той же час необхідність приховувати потік обміну даними SNMP може не вимагатися.
Поділ функцій аутентифікації й конфіденційності забезпечує підвищення гнучкості архітектури. Наприклад, можна здійснити аутентифікацію на рівні додатка, а конфіденційність забезпечити на більше низькому рівні, наприклад на транспортному.
Користувач може побажати залишити повідомлення захищеним і після його одержання, але при цьому мати можливість ознайомитися з його вмістом. Після дешифрування повідомлення захист не гарантується, так що повідомлення виявляється захищеним від модифікацій тільки на шляху проходження, але не в самій системі призначення.
Нарешті, зверніть увагу на те, що код автентичності повідомлення не забезпечує цифровий підпис, тому що й відправник, і одержувач використають той самий загальний ключ.
У табл. 11.2 представлена підсумкова інформація про ступінь конфіденційності й аутентифікації, забезпечуваної різними підходами до рішення цих питань.
Таблиця 11.2. Використання кодів автентичності повідомлень
(а)
|
(б)
|
(в)
|
Функція хешування.
Варіацією ідеї використання кодів
автентичності повідомлень є однобічна
функція хешування. Як й у випадку кодів
автентичності повідомлень, функція
хешування одержує на вхід повідомлення
довільної довжини, а на вихід видає
хеш-код
фіксованого розміру, іноді називаний
профілем повідомлення. Хеш-код є функцією
всіх битов повідомлення й забезпечує
можливість контролю помилок: зміна
будь-якого числа битов у повідомленні
виливається в зміну хеш-кода.
Способи використання хеш-коду для аутентифікації повідомлень показані на рис. 11.5 і перераховані нижче.
Повідомлення разом із приєднаним до нього шляхом конкатенації хеш-кодом шифрується методами традиційного шифрування. З погляду загальної схеми це аналогічно стратегії контролю помилок, показаної на рис. 11.2 (а). Аргументація при цьому теж аналогічна: тому що тільки користувачам А и В стає відомий секретний ключ, повідомлення напевно прийшло від А и не могло бути змінене по шляху проходження. Хеш-код забезпечує структуризацію або надмірність, необхідну для аутентифікації. Оскільки шифрування виконується стосовно всього повідомлення разом з доданим хеш-кодом, при цьому забезпечується й конфіденційність.
Шифрується тільки хеш-код засобами традиційного шифрування. Це дозволяє знизити обчислювальне навантаження на систему, якщо мова йде про додатки, що не вимагають конфіденційності. Зверніть увагу на те, що хеширование й шифрування в комбінації фактично дають код автентичності повідомлення (див. рис. 11.4 (а)), тобто
являє собою функцію повідомлення
довільної довжини й секретного ключа
,
що дає на виході значення фіксованого
розміру, захищене від супротивника, що
не знає секретного ключа.Шифрується тільки хеш-код засобами шифрування з відкритим ключем з використанням особистого ключа відправника. При цьому забезпечується не тільки аутентифікація , як у попередньому випадку (б), але й цифровий підпис, тому що тільки відправник може зробити відповідним чином зашифрований хеш-код. Фактично в цьому й полягає суть техніки використання цифрового підпису.
Якщо потрібне забезпечення не тільки конфіденційності, але й цифрового підпису, можна зашифрувати повідомлення разом з хеш-кодом, шифрованим відкритим ключем. Для цього використаються методи традиційного шифрування із секретним ключем.
З метою аутентифікації повідомлень можна використати функцію хешування без шифрування. У такому випадку передбачається, що дві сторони, що беруть участь в обміні даними, використають відоме
тільки
їм секретне значення . Відправник А
обчислює значення функції хешування
для результату конкатенації
й
і приєднує отримане значення функції
хешування к.
Одержувачеві В значення
відомо, тому він може теж обчислити
значення функції хешування, щоб зрівняти
останнє із пришедшим разом з повідомленням.
Через того що секретне значення
безпосередньо не посилає, супротивник
не може модифікувати перехоплене
повідомлення або генерувати помилкове.Конфиденциальность може бути забезпечена при деякій модифікації підходу описаного в пункті (д), якщо зашифрувати повідомлення разом з доданим до нього хеш-кодом.
Коли конфіденційність не потрібно, методи (б) і (в) виявляються переважніше в порівнянні з методами, у яких передбачається шифрування всього повідомлення, оскільки вимагають менше обчислень. І, проте, спостерігається постійно зростаючий інтерес до методів, які дозволяють уникнути шифрування (рис. 11.5(д)). Це викликано цілим рядом причин.
Програмне забезпечення, що виконує шифрування, працює досить повільно. Навіть якщо обсяг даних, які шифруються при передачі повідомлення, буде невеликим, потік вихідних і вхідних повідомлень у системі може виявитися дуже інтенсивним.
Ціни на апаратні засоби шифрування досить високі. Хоча і є недорогі мікросхеми, що реалізують алгоритми DES, загальна їхня вартість може виявитися дуже високої, якщо задатися метою оснастити ними всі вузли мережі.
Апаратні засоби шифрування оптимизируются для роботи з більшими обсягами даних. При малих блоках даних значна частина часу витрачається непродуктивно на ініціалізацію/виклик.
Алгоритми шифрування можуть бути захищені патентами. Деякі алгоритми шифрування, наприклад алгоритм RSA шифрування з відкритим ключем, запатентовані, і тому на їхнє використання потрібні ліцензії, що теж виливається в додаткові витрати.
Алгоритми шифрування є одним з питань експортного державного регулювання США.
Рис. 11.5. Основні способи використання функції хешування
У табл. 11.3 представлена підсумкова інформація про ступінь конфіденційності й аутентифікації, забезпечуваної різними підходами до рішення цих питань, показаними на рис. 11.5.
Таблиця 11.3. Основні можливості
використання функції хешування
(а)
|
(г)
|
(б)
|
(д)
|
(в)
|
(е)
|
