7.3. Шифрування з ключем
Алгоритми шифрування з ключем поділяють на дві великі групи - алгоритми симетричного шифрування і алгоритми асиметричного шифрування [28-31].
Симетричне шифрування (рос. - симметричное шифрование, англ. - symmetric coding) - це метод, за якого ключі шифрування і розшифрування або однакові, або легко виводяться один з одного, забезпечуючи таким чином спільний ключ, який є таємним.
Асиметричне шифрування (рос. - асимметричное шифрование, англ. - asymmetric coding) - набір методів криптографічного шифрування, в яких використовують два ключі - таємний (приватний) і відкритий; жоден із ключів не може бути обчислений з іншого за прийнятний час [32-36]. Таке шифрування ще називають шифруванням з відкритим ключем (рос. - шифрование с открытым ключом, англ. - public key coding).
Наразі з-поміж криптографічних методів домінують симетричне й асиметричне шифрування. До 70-х років минулого століття застосовували лише криптографію з симетричними криптоалгоритмами. Криптографія з асиметричними криптоалгоритмами значно молодша. Початок її розвитку пов'язують із працею американських учених В. Діффі та М. Хеллмана, оприлюднену в 1976' році [32].
Симетричні та асиметричні криптоалгоритми мають свої переваги та недоліки. Симетричні криптоалгоритми порівняно з асиметричними мають більшу швидкодію та меншу довжину ключа. Асиметричне шифрування застосовують за такої організації криптосистем, коли використання симетричних алгоритмів є неможливим. А загалом порівнювати характеристики цих криптоалгоритмів було б некоректно: вони створені для розв'язування різних задач шифрування.
7.3.1. Симетричне шифрування
Симетричне
шифрування ще називають шифруванням
на таємному ключі, тобто на ключі, який
обидві сторони обміну таємно від інших
використовують для шифрування та
розшифрування повідомлень. На рис. 8.1
наведено структурну схему шифрування
на таємному ключі.
Основне призначення симетричних криптоалгоритмів - шифрування великих масивів даних із великою швидкістю. Разом із тим, через потребу мати захищений канал передавання таємного ключа ці криптоалгоритми під час створення сучасних криптосистем виявляють дуже низьку гнучкість.
Розрізняють дві великі групи алгоритмів симетричного шифрування: потокове шифрування та блокове шифрування.
Потокове шифрування
Потокове шифрування (рос. - поточное шифрование, англ. - stream coding) - це спосіб шифрування даних, коли кожний знак шифрується окремо. Цей криптоалгоритм обробляє інформацію посимвольно, тому, користуючись ним, можна послідовно шифрувати та розшифровувати інформацію будь-якого обсягу. Таке шифрування застосовують переважно в каналах зв'язку.
Найбільш поширені потокові шифри, накладаючи вихідний текст на попередньо згенеровану шифрувальну послідовність, посимвольно опрацьовують його. Таке накладання здійснюється з використанням відомої в арифметиці оборотної операції за модулем 2, яку застосовують для шифрування тексту. Знаючи результат і всі операнди, крім одного, за допомогою арифметичної операції за модулем 2 можна визначити цей невідомий операнд.
За використання потокового шифрування окремі символи згенерованої шифрувальної послідовності зазвичай позначаються грецькою літерою у (гамма). Тому потокові шифри ще називають шифрами гаммування.
Слід зазначити, що швидкодія потокових шифрів значно перевищує швидкодію блокових, розглянутих у наступному підрозділі.
Блокове шифрування
Блокове шифрування (рос. - блочное шифрование, англ. - block coding) - спосіб шифрування даних, коли кожний блок, що передається, може шифруватися окремо. Блоковий шифр - процедура відображення множини вхідних блоків вихідного тексту на множину блоків зашифрованого тексту. Блоки вихідних даних можуть налічувати від одного до кількох сотень бітів. У сучасних системах блокового шифрування використовують блоки з 64, 128, 192 або 256 біт. Алгоритми блокового шифрування - це комбінація оборотних криптоперетворень, які виконуються багаторазово.
Найбільшого поширення серед блокових шифрів набули шифри, які базуються на багаторазових циклічних повтореннях. Шифр такого типу називають мережею. Відомим шифром цього типу є мережа Фейстела (рос. - сеть Фейстела, англ. - feistel network), або мережа Фейстела 1-го типу - ітеративний блоковий шифр, побудований за принципом Фейстела [28, 29]. Саме цей шифр було застосовано під час розроблення стандарту шифрування DES (Data Encryption Standard) у США та ГОСТ 28147-89 у колишньому СРСР.
Стандарт шифрування (рос. - стандарт шифрования, англ. - encryption standard) - це повний опис алгоритму шифрування (та правил його використання), призначеного для програмної або апаратної реалізації, обов'язкового для використання організаціями, які зазначені в цьому стандарті. На сьогодні всі розвинені країни світу мають свої стандарти шифрування.
Стандарт шифрування DES - колишній федеральний стандарт шифрування США, введений у дію 23 листопада 1976 року; офіційний опис стандарту було опубліковано 15 січня 1977 року [37]. У 1981 році Американським національним інститутом стандартів (American National Standards Institute, ANSI) DES було прийнято як стандарт захисту інформації у комерційній галузі. Пізніше під назвою DEA (Data Encryption Algorithm) він отримав статус міжнародного стандарту шифрування інформації ISO 8731-1-87 [38]. Довжина блоку шифру DES становить 64 біти, довжина ключа - також 64 біти (з них 8 біт призначено для контролю парності), для шифрування виконується 16 циклів. Для шифрування та розшифрування використовують один і той самий алгоритм.
Стандарт шифрування інформації ГОСТ 28147-89 [39], введений у дію в колишньому СРСР 1 липня 1990 року, також базується на шифрі фейстелівського типу. Довжина блоку цього шифру - 64 біти, довжина ключа становить 256 біт, виконується 32 цикли. Для шифрування та розшифрування використовують один і той самий алгоритм.
Завдяки стійкості та легкості апаратної реалізації алгоритмів блокового шифрування (за наявності можливості організувати таємний канал обміну ключами) вони мають суттєві переваги порівняно з іншими симетричними алгоритмами.
Щоб позбавити стандарт DES виявлених у ньому свого часу слабких місць, Національним інститутом стандартів і технологій (National Institute of Standards and Technology, NIST) за дорученням уряду, США було запроваджено відкритий конкурс криптоалгоритмів - кандидатів на стандарт блокового шифрування - під назвою AES (Advanced Encryption Standard). За умовами конкурсу, який відбувався протягом 1997-2000 років, це мав бути симетричний блоковий шифр зі змінною довжиною ключа. Ще одною обов'язковою умовою конкурсу була підтримка алгоритмом шифрування ключів довжиною 128, 192 та 256 біт за довжини блоку вихідного тексту в 128, 192 та 256 біт. На останньому етапі конкурсу перемогу здобули алгоритми з назвами MARS, RS6, Rijndael, Serpent і TwoFish, остаточним переможцем було визнано алгоритм Rijndael [40].
