Алгоритм шифрування RSA
RSA - криптографічна система відкритого ключа, що забезпечує такі механізми захисту як шифрування і цифровий підпис (аутентифікація - встановлення автентичності). Криптосистема RSA розроблена в 1977 році і названа на честь її розробників: Rivest, Shamir і Adleman.
Алгоритм RSA працює наступним чином: беруться два досить великих простих числа p і q і обчислюється їх добуток n = p * q; n називається модулем.
Потім вибирається число e, що задовольняє умові:
і не має спільних дільників крім 1 (взаємно просте) з числом (p-1) * (q-1).
Потім обчислюється число d таким чином, що (e * d - 1) ділиться на
e - відкритий (public) показник
d - секретний (private) показник.
(N; e) - відкритий (public) ключ
(N; d) - секретний (private) ключ.
Подільники (фактори) p і q можна або знищити або зберегти разом із секретним (private) ключем.
Якби існували ефективні методи розкладання на множники (факторингу), то, розклавши n на множники (фактори) p і q, можна було б отримати секретний (private) ключ d. Таким чином надійність криптосистеми RSA заснована на важкою - практично нерозв'язною - завданню розкладання n на множники (тобто на неможливості факторингу n) так як в даний час ефективного способу пошуку співмножників не існує.
Припустимо, Аліса хоче послати Бобу повідомлення M. Аліса створює зашифрований текст С, зводячи повідомлення M в ступінь e і примножуючи на модуль n: C = M ** e * (mod n), де e і n - відкритий (public) ключ Боба .
Потім Аліса посилає С (зашифрований текст) Бобу. Щоб розшифрувати отриманий текст, Боб зводить отриманий зашифрований текст C до рівня d і примножує на модуль n:
M = c ** d * (mod n); залежність між e і d гарантує, що Боб обчислить M вірно. Так як тільки Боб знає d, то тільки він має можливість розшифрувати отримане повідомлення.
В даний час Лабораторія RSA рекомендує для звичайних завдань ключі розміром 1024 біта, а для особливо важливих завдань - 2048 бітів.
На практиці криптосистема RSA часто використовується разом з криптографічного системою секретного ключа типу DES для зашифровування повідомлення ключем RSA за допомогою цифрового конверта.
Криптосистема RSA може використовуватися також і для підтвердження автентичності або ідентифікації іншої людини або юридичної особи. Це можливо тому, що кожен зареєстрований користувач криптосистеми має свій унікальний секретний (private) ключ, який (теоретично) більше нікому недоступний. Саме це робить можливим позитивну і унікальну ідентифікацію.
DES (Data Encryption Standart) це алгоритм з симетричними ключами, тобто один ключ використовується як для шифрування, так і для розшифровки повідомлень. Розроблений фірмою IBM і затверджений урядом США в 1977 як офіційний стандарт
DES має блоки по 64 біт і заснований на 16 кратною перестановці даних, також для шифрування використовує ключ в 56 біт. Існує кілька режимів DES, наприклад Electronic Code Book (ECB) і Cipher Block Chaining (CBC).
56 біт - це 8 семібітових ASCII символів, тобто пароль не може бути більше ніж 8 букв. Якщо ж використовувати тільки букви і цифри, то кількість можливих варіантів буде істотно менше максимально можливих 2 ^ 56.
Один із кроків алгоритму DES:
Вхідний блок даних ділиться навпіл на ліву (L ') і праву (R') частини. Після цього формується вихідний масив так, що його ліва частина L '' представлена правою частиною R 'вхідного, а права R' 'формується як сума L' і R 'операцій XOR. Далі, вихідний масив шифрується перестановкою з заміною. Можна переконатися, що всі проведені операції можуть бути звернені і розшифрування здійснюватись за число операцій, лінійно залежне від розміру блоку. Після кількох таких збивання можна вважати, що кожен біт вихідного блоку шифровки може залежати від кожного біта повідомлення.
Rijndael (AES, Advanced Encryption Standard)
Даний алгоритм розроблений двома фахівцями з криптографії з Бельгії. Він є нетрадиційним блоковим шифром, оскільки не використовує мережу Фейштеля для криптоперетворень. Алгоритм представляє кожен блок кодованих даних у вигляді двовимірного масиву байт розміром 4х4, 4х6 або 4х8 в залежності від встановленої довжини блоку. Далі на відповідних етапах перетворення виробляються або над незалежними стовпцями, або над незалежними рядками, або взагалі над окремими байтами в таблиці.
Всі перетворення в шифрі мають суворе математичне обґрунтування. Сама структура і послідовність операцій дозволяють виконувати даний алгоритм ефективно як на 8-бітних так і на 32-бітних процесорах. У структурі алгоритму закладена можливість паралельного виконання деяких операцій, що на багатопроцесорних робочих станціях може ще підняти швидкість шифрування в 4 рази.
Алгоритм складається з певної кількості раундів (від 10 до 14 - це залежить від розміру блоку і довжини ключа), в яких послідовно виконуються наступні операції:
ByteSub - таблична підстановка 8х8 біт,
ShiftRow - зсув рядків в двовимірному масиві на різні зміщення,
MixColumn - математичне перетворення, переміщуючий дані всередині стовпчика,
AddRoundKey - додавання матеріалу ключа операцією XOR.
В останньому раунді операція перемішування стовпців відсутній, що робить всю послідовність операцій симетричною.
Симетричні алгоритми шифрування
Існують два різновиди алгоритмів шифрування з використанням ключів - симетричні і з відкритим ключем. Симетричним називають криптографічний алгоритм, в якому ключ, який використовується для шифрування повідомлень, може бути отриманий з ключа розшифрування і навпаки. У більшості симетричних алгоритмів застосовують всього один ключ. Такі алгоритми називаються одноключевой, або алгоритмами з секретним ключем, і вимагають, щоб відправник повідомлень і їх одержувач і ріпаку домовилися про те, яким ключем вони будуть користуватися. Надійність одноключевого алгоритму визначається вибором ключа, оскільки його значення дає можливість зловмиснику безперешкодно розшифровувати все перехоплені повідомлення. Тому обраний ключ слід зберігати в таємниці від сторонніх.
Шифрування і розшифрування в симетричних криптографічних алгоритмах задаються вже знайомими формулами:
Симетричні алгоритми шифрування бувають двох видів. Одні з них обробляють відкритий текст побитно. Вони називаються потоковими алгоритмами, або потоковими шифрами. Згідно з іншими, відкритий текст розбивається на блоки, що складаються з декількох біт. Такі алгоритми називаються блоковими, або блоковими шифрами. В сучасних комп'ютерних алгоритмах блокового шифрування зазвичай довжина блоку становить 64 біта.
Приклади симетричних блокових алгоритмів шифрування: DES, AES, IDEA, CAST, SAFER, 3-WAY, CRAB, RC5, Blowfish, GOST і ін.