- •1 Основні види й джерела атак на інформацію
- •1.1 Сучасна ситуація в області інформаційної безпеки
- •1.2 Категорії інформаційної безпеки
- •1.3 Абстрактні моделі захисту інформації
- •1.4 Огляд найпоширеніших методів "злому"
- •2 Криптографія
- •2.1 Основні відомості про криптографію
- •2.2 Предмет криптографії
- •2.3 Математичні основи криптографії
- •2.4 Нові напрями
- •2.5 Класифікація криптоалгоритмів
- •3 Симетричні криптоалгоритми
- •3.1 Скремблери
- •3.2 Блокові шифри Загальні відомості про блокові шифри
- •3.3 Мережа Фейштеля
- •3.4 Блоковий шифр tea
- •4 Симетричні криптосистеми
- •4.1 Функції криптосистем
- •4.2 Алгоритми створення ланцюжків
- •4.3 Методи рандомізації повідомлень
- •4.5 Хешування паролів
- •4.6 Транспортне кодування
- •4.7 Загальна схема симетричної криптосистеми
- •5 Асиметричні криптоалгоритми
- •5.1 Загальні відомості про асиметричні криптоалгоритми
- •5.2 Алгоритм rsa
- •5.3 Технології цифрових підписів
- •5.4 Механізм поширення відкритих ключів
- •5.5 Обмін ключами за алгоритмом Діффі-Хеллмана
- •Перелік рекомендованих джерел
5.2 Алгоритм rsa
Алгоритм RSA стоїть у джерел асиметричної криптографії. Він був запропонований трьома дослідниками-математиками Рональдом Ривестом (R.Rivest), Аді Шамиром (A.Shamir) і Леонардом Адльманом (L.Adleman) в 1977-78 роках.
Першим етапом будь-якого асиметричного алгоритму є створення пари ключів: відкритого й закритого, й поширення відкритого ключа "по усьому світі". Для алгоритму RSA етап створення ключів складається з наступних операцій:
вибираються два простих (!) числа p й q;
обчислюється їхній добуток n=p*q;
вибирається довільне число e (e<n), таке, що НСД (e,(p-1)(q-1))=1, тобто e повинне бути взаємно простим із числом (p-1)(q-1);
методом Евкліда вирішується в цілих числах (!) рівняння e*d+(p-1)(q-1)*y=1. Тут невідомими є змінні d й y - метод Евкліда саме й знаходить множину пар (d,y), кожна з яких є рішенням рівняння в цілих числах;
два числа (e,n) - публікуються як відкритий ключ;
число d зберігається в найсуворішому секреті - це і є закритий ключ, що дозволить читати всі послання, зашифровані за допомогою пари чисел (e,n).
Як же провадиться шифрування за допомогою цих чисел:
Відправник розбиває своє повідомлення на блоки, рівні k=[log2(n)] біт, де квадратні дужки позначають узяття цілої частини від дробового числа.
Подібний блок, як відомо, може бути інтерпретований як число з діапазону (0;2k-1). Для кожного такого числа (назвемо його mi) обчислюється вираз ci=((mi)e)mod n. Блоки ci й є зашифроване повідомлення Їх можна спокійно передавати по відкритому каналі, оскільки операція піднесення до степеня за модулем простого числа, є необоротною математичною задачею. Зворотна їй задача зветься "логарифмування в кінцевому полі" й є на кілька порядків більш складною задачею. Тобто навіть якщо зловмисник знає числа e й n, то за ci прочитати вихідні повідомлення mi він не може ніяк, крім як повним перебором mi.
А от на прийомній стороні процес дешифрування все-таки можливий, і допомагає збережене в секреті число d. Досить давно була доведена теорема Ейлера, окремий випадок якої стверджує, що якщо число n представити у вигляді двох простих чисел p й q, то для будь-якого x має місце рівність (x(p-1)(q-1))modn=1. Для дешифрування RSA-повідомлень скористаємося цією формулою. Зведемо обидві її частини в степінь (-y): (x(-y)(p-1)(q-1))modn=1(-y)=1. Тепер помножимо обидві її частини на x: (x(-y)(p-1)(q-1)+1)modn=1*x=x.
А тепер згадаємо як ми створювали відкритий і закритий ключі. Ми підбирали за допомогою алгоритму Евкліда d таке, що e*d+(p-1)(q-1)*y=1, тобто e*d=(-y)(p-1)(q-1)+1. А отже в останньому виразі попереднього абзацу ми можемо замінити показник степеня на число (e*d). Одержуємо (xe*d)modn=x. Тобто для того щоб прочитати повідомлення ci=((mi)e)modn досить піднести його до степеня d за модулем m: ((ci)d)mod n = ((mi)e*d)mod n = mi.
Операції піднесення до степеня великих чисел досить трудомісткі для сучасних процесорів, навіть якщо вони провадяться за оптимізованим за часом алгоритмами. Тому звичайно весь текст повідомлення кодується звичайним блоковим шифром (набагато більш швидким), але з використанням ключа сеансу, а от сам ключ сеансу шифрується саме асиметричним алгоритмом за допомогою відкритого ключа одержувача й міститься в початку файлу.
