CRYPTON

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
Алгоритм блочного шифрування
Crypton cipher.png
Назва: CRYPTON
Розробник: Чьо Хун Лім (Future Systems, Inc.)
Створений: 1998 рік
Опублікований: 1998-1999
Розмір ключа: 128, 192, 256 біт
Розмір блоку: 128 біт
Число раундів: 12
Тип: SP-мережа

CRYPTON — алгоритм симетричного блочного шифрування (розмір блоку 128 біт, ключ довжиною до 256 біт), розроблений південнокорейським криптологом Чьо Лім Хун (англ. Chae Hoon Lim) з південнокорейської компанії Future Systems, яка з кінця 1980-х років працює на ринку забезпечення мереж і захисту інформації. Алгоритм був розроблений в 1998 році в якості шифру — учасника конкурсу AES. Як зізнавався автор, конструкція алгоритму спирається на алгоритм SQUARE[1]. В алгоритмі Crypton немає традиційних для блочних шифрів мережі Фейстеля. Основу даного шифру становить так звана SP-мережа (повторювана циклова функція, що складається із замін-перестановок, орієнтована на розпаралелену нелінійну обробку всього блоку даних). Крім високої швидкості, перевагами таких алгоритмів є полегшення дослідження стійкості шифру до методів диференціального та лінійного криптоаналізу, що є на сьогодні основними інструментами розтину блочних шифрів. На конкурс AES була представлена версія алгоритму Crypton v0.5. Однак, як казав Чьо Лім Хун, йому не вистачало часу для розробки повної версії. І вже на першому етапі конкурсу AES в ході аналізу алгоритмів, версія Crypton v0.5 була замінена на версію Crypton v1.0. Відмінність нової версії від первинної полягала в зміні таблиці замін та в модифікації процесу розширення ключа.

Структура алгоритму. Основні характеристики[ред. | ред. код]

Як і інші учасники конкурсу AES, Crypton призначений для шифрування 128-бітових блоків даних[2]. При шифруванні використовуються ключі шифрування для декількох фіксованих розмірів — від 0 до 256 біт з кратністю 8 бітів. Структура алгоритму Crypton — структура «Квадрата» — багато в чому схожа на структуру алгоритму Square, створеного в 1997 році. Криптографічні перетворення для алгоритмів з даною структурою можуть бути виконані як для цілих рядків і стовпців масиву, так і над окремими його байтами. (Варто зазначити, що алгоритм Square був розроблений авторами майбутнього переможця конкурсу AES — авторами алгоритму Rijndael — Вінсентом Ріджменом і Джоан Дейменом.)

Шифрування[ред. | ред. код]

Алгоритм Crypton являє 128-бітовий блок шифруємих даних у вигляді байтового масиву 4×4, над якими в процесі шифрування проводиться кілька раундів перетворень. У кожному раунді передбачається послідовне виконання наступних операцій:

  • Таблична заміна ;
  • Лінійне перетворення ;
  • Байтова перестановка ;
  • Операція .
Таблична заміна

Таблична заміна [ред. | ред. код]

Алгоритм Crypton використовує 4 таблиці замін. Кожна з яких заміщає 8-бітне вхідне значення на вихідне такого ж розміру.

Обчислення похідних таблиць замін (<<n - є циклічне зрушення вліво значення оброблюваного байта на n бітів)

Всі таблиці є похідними від основної таблиці (див. рисунок — обчислення похідних таблиць замін).

Нижче представлений приклад таблиць: Таблиця :

63 ec 59 aa db 8e 66 c0 37 3c 14 ff 13 44 a9 91
3b 78 8d ef c2 2a f0 d7 61 9e a5 bc 48 15 12 47
ed 42 1a 33 38 c8 17 90 a6 d5 5d 65 6a fe 8f a1
93 c2 2f 0c 68 58 df f4 45 11 a0 a7 22 96 fb 7d
1d b4 84 e0 bf 57 e9 0a 4e 83 cc 7a 71 39 c7 32
74 3d de 50 85 06 6f 53 e8 ad 82 19 e1 ba 36 cb
0e 28 f3 9b 4a 62 94 1f bd f6 67 41 d8 d1 2d a4
86 b7 01 c5 b0 75 02 f9 2c 29 6e d2 f5 8b fc 5a
e4 7f dd 07 55 b1 2b 89 72 18 3a 4c b6 e3 80 ce
49 cf 6b b9 f2 0d dc 64 95 46 f7 10 9a 20 a2 3f
d6 87 70 3e 21 fd 4d 7b 3c ae 09 8a 04 b3 54 f8
30 00 56 d4 e7 25 bb ac 98 73 ea c9 9d 4f 7e 03
ab 92 a8 43 0f fa 24 5c 1e 60 31 97 cd c6 79 f5
5e e5 34 76 1c 81 b2 af 0b 5d d9 e2 27 6d d0 88
c1 51 e6 9c 77 be 99 23 da eb 52 2e b5 08 05 6c
b8 1b a3 69 8c d3 40 26 f1 c4 9f 35 ee 7c 4b 16

Таблиця

8d b3 65 aa 6f 3a 99 03 dc f0 50 ff 4c 11 a6 46
ec e1 36 bf 0b a8 c3 5f 85 7a 96 f2 21 54 48 1d
b7 09 68 cc e0 23 5c 42 9a 57 75 95 a9 fb 3e 86
4e 2b bc 30 a1 61 7f d3 15 44 82 9e 88 5a Ef f5
74 d2 12 83 fe 5d a7 28 39 0e 33 e9 c5 e4 1f c8
d1 f4 7b 41 16 18 bd 4d a3 b6 0a 64 87 ea d8 2f
38 a0 cf 6e 29 89 52 7c f6 db 9d 05 63 47 b4 92
1a de 04 17 c2 d5 08 e7 b0 a4 b9 4b 7d 2e f3 69
93 fd 77 1c 55 c6 ac 26 c9 60 e8 31 da 8f 02 3b
25 3f ad e6 cb 34 73 91 56 19 df 40 6a 80 8a fc
5b 1e c1 f8 84 f7 35 ed 0f ba 24 2a 10 ce 51 e3
c0 00 59 53 9f 94 ee b2 62 cd ab 27 76 3d f9 0c
ae 4a a2 0d 3c eb 90 71 78 81 c4 5e 37 1b e5 d7
79 97 d0 d9 70 06 ca be 2c 6d 67 8b 9c b5 43 22
07 45 9b 72 dd fa 66 8c 6b af 49 b8 d6 20 14 b1
e2 6c 8e a5 32 4f 01 98 c7 13 7e d4 bb f1 2d 58

Таблиця

b1 72 76 bf ac ee 55 83 ed aa 47 d8 33 95 60 c4
9b 39 1e 0c 0a 1d ff 26 89 5b 22 f1 d4 40 c8 67
9d a4 3c e7 c6 b5 f7 dc 61 79 15 86 78 6e eb 32
b0 ca 4f 23 d2 fb 5e 08 24 4d 8a 10 09 51 a3 9f
f6 6b 21 c3 0d 38 99 1f 1c 90 64 fe 8b a6 48 bd
53 e1 ea 57 ae 84 b2 45 35 02 7f d9 c7 2a d0 7c
c9 18 65 00 97 2b 06 6a 34 f3 2c 92 ef dd 7a 56
a2 c4 88 b9 50 75 d3 e4 11 ce 4b a7 fd 3f be 81
8e d5 5a 49 42 54 70 a1 df 87 ab 7d f4 12 05 2e
27 0f c1 30 66 98 3d cb b8 e6 9c 63 e3 bc 19 fa
3a 2f 9e f2 6f 1a 28 3b c2 0e 03 c0 b7 59 a9 d7
74 85 d6 ad 41 ec 8c 71 f0 93 5d b6 1b 68 e5 44
07 e0 14 8a f9 73 cd 4e 25 bb 31 5f 4a cc 8f 91
de 6d 7b f5 b3 29 a0 17 6c da e8 04 96 82 52 36
43 5c db 8d 80 d1 e2 b4 58 46 ba e9 01 20 fc 13
16 f8 94 62 37 cf 69 9a af 77 c5 3e 7e a5 2d 0b

Таблиця :

b1 f6 8e 07 72 6b d5 e0 76 21 5a 14 bf c3 49 a8
ac 0d 42 f9 ee 38 54 73 55 99 70 cd 83 1f a1 4e
ed 1c df 25 aa 90 87 bb 47 64 ab 31 d8 fe 7d 5f
33 8b f4 4a 95 a6 12 cc 60 48 05 8f c4 bd 2e 91
9b 53 27 de 39 e1 0f 6d 1e ea c1 7b 0c 57 30 f5
0a ae 66 b3 1d 84 98 29 ff b2 3d a0 26 45 cb 17
89 35 b8 6c 5b 02 e6 da 22 7f 9c e8 f1 d9 63 04
d4 c7 e3 96 40 2a bc 82 c8 d0 19 52 67 7c fa 36
9d c9 3a 43 a4 18 2f 5c 3c 65 9e db e7 00 f2 8d
c6 97 6f 80 b5 2b 1a d1 f7 06 28 e2 dc 6a 3b b4
61 34 c2 58 79 f3 0e 46 15 2c 03 ba 86 92 c0 e9
78 ef b7 01 6e dd 59 20 eb 7a a9 fc 32 56 d7 13
b0 a2 74 16 ca 4c 85 f8 4f 88 d6 94 23 b9 ad 62
d2 50 41 37 fb 75 ec cf 5e d3 8c 69 08 e4 71 9a
24 11 f0 af 4d ce 93 77 8a 4b 5d c5 10 a7 b6 3e
09 fd 1b 7e 51 3f 68 a5 a3 be e5 2d 9f 81 44 0b

У парних раундах використовується операція в непарних — . Ці операції і таблиці замін вволодіють рядом якостей, які є важливі, особливо для уніфікації операцій шифрування і розшифрування. Властивості таблиць і операцій:

де  — поточне значення блоку шифруємих даних. Операції і можна визначити наступним чином:

де:

— поточне значення конкретного байта даних;

— значення байта даних після виконання операції;

Лінійне перетворення [ред. | ред. код]

Лінійне перетворення

Тут використовується 4 спеціальні константи, шістнадцяткові значення яких наведені нижче:

Ці константи об'єднані в маскуючі послідовності, наведені нижче:

де  — операція конкатенації.

Сама ж операція  — являє собою бітову перестановку. У непарних раундах використовується операція :

де:

— логічна побітова операція «і»;

і  — значення i-го рядка оброблюваних даних до і після виконання операції відповідно.

У парних раундах використовується операція :

Фактично ця операція забезпечує наявність в кожному результуючому байті кожного стовпця двох біт кожного початкового байта того ж стовпця.

Байтова перестановка [ред. | ред. код]

Байтова перестановка

Дана перестановка перетворює найпростішим чином рядок даних у стовпець:

Операція [ред. | ред. код]

Побітове додавання всього масиву даних з ключем раунду

Дана операція є побітовим складанням всього масиву даних з ключем раунду:

де:  — нове значення блоку шифруємих даних;  — ключ поточного раунду .

Зауважимо, саме 12 раундів шифрування рекомендується автором алгоритму Чьо Хун Лімом, проте сувора кількість раундів не встановлена. Крім 12 раундів шифрування, перед першим раундом алгоритму виконується попередня операція , а по завершенні 12 раундів виконується вихідне перетворення , що складається з послідовно виконуваних операцій , і .

Розшифрування[ред. | ред. код]

Розшифрування виконується застосуванням зворотних операцій в зворотній послідовності. Всі операції, крім і є зворотними самим собі, а самі і зв'язані наступними співвідношеннями:

тому при дешифруванні  — використовується в парних раундах, а  — в непарних.

Варто відзначити ще одну особливість: кожен етап може бути виконуватися паралельно, що важливо при реалізації на сучасних багатоядерних і мультипоточних системах. Алгоритм має структуру SP-мережі, як і Rijndael (який є переможцем конкурсу AES) Також особливістю шифру є те, що для зашифрування та розшифрування може використовуватися одна і та ж процедура, але з різними підключами. Алгоритм ефективний як при програмній, так і апаратній реалізації. Шифр досить швидкий — на конкурсі AES при використанні компілятора Borland C показав найкращі результати серед всіх учасників.

Процедура розширення ключа[ред. | ред. код]

Алгоритм Crypton вимагає наявність 128 — бітового ключа для кожного раунду, а також 128 бітового ключа для попередньої операції σ. Розширення ключа відбувається в два етапи:

  1. на першому етапі відбувається формування восьми розширених ключів;
  2. на другому етапі відбувається обчислення ключів раундів з розширених ключів.

Формування розширених ключів[ред. | ред. код]

Формування розширених ключів відбувається так:

  • Якщо ключ шифрування має розмір, менший 256 біт, він доповнюється бітовими нулями, поки не досягне 32-байтового вихідного ключа :
  • Ключ K розкладається на послідовності і , перша з яких містить тільки парні байти ключа, друга — тільки непарні:
  • Над послідовностями і виконується один раунд шифрування алгоритму Crypton з використанням ключа раунду, що складається з нульових бітів. Відповідно для виконуються перетворення непарного раунду, для відбувається перетворення парного раунду. Результуючі послідовності позначаються як і .
  • Відбувається обчислення 8 розширених ключів:

для де і  — послідовності, які визначаються наступними формулами:

Обчислення ключів раундів[ред. | ред. код]

Для обчислення з розширених ключів — ключів раундів, використовуються наступні константи:

Зауважимо, що псевдовипадкові константи A54FF53A і 3C6EF372 утворюються з дробових частин від чисел і відповідно.

Спочатку обчислюються ключі для попередньої операції σ і першого раунду:

де  — i-ий рядок ключа раунду . Як і для шифруємих даних, ключ надається у вигляді таблиці.

Подання ключа у вигляді таблиці аналогічно шифруємим даним

Константи обчислюються шляхом побітового циклічного зрушення кожного байта константи на 1 біт вліво.

Для другого та кожного наступного парного раунду ключ обчислюється наступним чином:

  • Виконується модифікація перших чотирьох розширених ключів:

де знаком <<< позначена операція побітового циклічного зрушення кожного байта (роздільно) розширеного ключа на вказане число біт вліво, а << — побітового циклічного зрушення всього ключа на вказане число біт вліво.

  • Обчислення ключа раунду за допомогою модифікованих розширених ключів:

Аналогічно відбувається обчислення ключів для непарних раундів:

Процедура розширення ключа дозволяє генерувати ключі раундів «на льоту», тобто в процесі шифрування по мірі необхідності. Це явна перевага алгоритму, принаймні тому, що не потрібно пам'яті для зберігання ключів раундів. Для розшифрування можливо і виконання прямої процедури розширення ключа і використання отриманих ключів раундів у зворотному порядку.

Безпека[ред. | ред. код]

Недоліки алгоритму Crypton[ред. | ред. код]

При аналізі вихідної версії алгоритму, Crypton v0.5, відразу двоє експертів незалежно виявили клас слабких ключів: таких виявилося 2 в ступені 32 256-бітових ключів. Також, була виявлена атака на шестираундову версію алгоритму Crypton, схожа на атаку на алгоритм Square. Це було однією з причин появи нової версії алгоритму — Crypton v1.0.

Переваги алгоритму Crypton[ред. | ред. код]

Однак на думку експертів інституту NIST, перераховані вище недоліки не є грубими. Крім того, плюсів у алгоритму було цілком достатньо:

  1. алгоритм ефективний на програмному та апаратному рівні завдяки високому ступені паралельності і використанні дуже простих логічних операцій ANDS/XORS;
  2. алгоритм не піддається атакам по часу виконання і споживаної потужності;
  3. хороша стійкість до існуючих атак;
  4. можливість розпаралелювання операцій в процесі шифрування;
  5. швидке розширення ключа, швидке формування ключів: шифрування з списоком ключів йде набагато швидше ніж шифрування з одним блоком, так що це дуже ефективно в додатках, що вимагають часті заміни ключів (наприклад, в хеш-режимі).
  6. досить висока швидкість на всіх цільових платформах;
  7. невеликі вимоги до оперативної пам'яті і можливість розширення ключа «на льоту» дозволяють використовувати алгоритм Crypton в смарткартах з мінімальними ресурсами;
  8. алгоритм підтримує додаткові розміри ключів, крім тих, що були встановлені конкурсом (128, 192, 256 біт).

Розробником була заявлена гарантована стійкість до лінійного та диференційного криптоаналізу і, в цілому, всім існуючим на момент розробки атак. Перероблений ключовий розклад і нові таблиці S-Box виключили всі виявлені недоліки та вразливості.

Інтегральна атака на шифр Crypton (4-х раундовий)[ред. | ред. код]

Аналіз безпеки блочно-симетричного шифру (БСШ) Crypton показує, що 12-раундовий самозамінюючий шифр (з однаковими процесами для шифрування та розшифрування) з довжиною блоку 128 біт і довжиною ключа до 128 бітів володіє гарною стійкістю до існуючих атак. Інтегральна атака на 4-х раундовий БСШ Crypton набагато ефективніша, ніж повний перебір по всьому ключовому простору.

Короткий опис шифру[ред. | ред. код]

Crypton являє собою блочний шифр. Довжина ключа і довжина блоку 128 біт. Чотири перетворення працюють з проміжним результатом, так званим Станом (State). Стан можна представити у вигляді прямокутного масиву з 16 байт:

де

Позначимо стовпець з 4 байт як 

Так само уявімо ключ шифрування:

де і .

У шифрі визначено поле Галуа , елементами якого є байти. Байти розглядаються як многочлени над

Операція додавання  — при складанні байт відповідні їм многочлени складаються над  .

Операція множення — при множенні відповідні їм многочлени перемножуються над  і результуючий многочлен береться за модулем від простого многочлена

В процесі роботи алгоритму, ключ розширюється (Key Schedule, Key Expansion). Перші 4 стовпців (по 4 байти) є вихідним ключем . Кожний наступний -й набір з 4 стовпчиків обчислюється з попереднього набору і використовується для -ого раунду, позначимо його . Раунд складається з чотирьох різних елементарних перетворень, які перетворять стан у стан  :

  • Заміна байт — BS (Byte Substitution): застосування перестановки або
  • Зрушення рядків — SR (Shift Rows): циклічне зрушення байт за правилом:
  • Замішування стовпців — MC (Mix Columns: кожен стовпець стану змінюється лінійним перетворенням

Інакше кажучи, це є ніщо інше, як множення стовпців на матрицю зліва:

Операція оборотна :

  • Додавання раундового ключа — KA (Key Addition): до поточного стану додається раундовий ключ.

Фінальний раунд не містить операції MC. Формули, що зв'язують стан  і :

;
;

Алгоритм реалізації інтегральної атаки[ред. | ред. код]

Інтегральна атака заснована на можливості вільного підбору атакуючим деякого набору відкритих текстів для подальшого їх зашифрування. Вона ефективніша, ніж повний перебір по всьому ключовому простору.

Введемо визначення.

 — набір з 256 вхідних блоків (масивів State), кожен з яких має байти (назвемо їх активними), значення яких різні для всіх 256 блоків. Інші байти (пасивні) залишаються однаковими для всіх 256 блоків з -набору. Тобто для будь-яких то якщо байт з індексом (i, j) активний і інакше .

 —  k активними байтами.
 — множина станів в кінці раунду r.

-набір. Після елементарних перетворень BS і KA блоки -набору дадуть в результаті інший -набір з активними байтами в тих же позиціях, що й вихідний. Перетворення SR змістить ці байти відповідно заданим в ній зміщенням. Після перетворення MC -набору в загальному випадку необов'язково залишиться -набором (результат операції може перестати відповідати визначенню -набору). Так як кожен байт результату MC є лінійною комбінацією (з оборотними коефіцієнтами) чотирьох вхідних байт того ж стовпця , то стовпець з єдиним активним байтом на вході дасть у результаті на виході стовпець з усіма чотирма активними байтами.

Розглянемо шифрування -набору. У всіх блоках буде активний тільки один байт. Значення цього байта по-різному у всіх 256 блоках, а інші байти однакові. У першому раунді перетворення MC перетворює один активний байт в стовпець з 4-ма активними байтами, тобто є . У другому раунді ці 4 байта розійдуться на 4 різні стовпці в результаті перетворення SR, є -набором. Перетворення MC наступного, третього раунду перетворює ці байти в 4 стовпці, що містять активні байти. Цей набір все ще залишається -набором до того моменту, коли він надходить на вхід MC третього раунду.

Основна властивість -набору — порозрядна сума за модулем 2 () всіх байтів, які перебувають на одних і тих же місцях, по всьому набору дорівнює нулю (порозрядна сума неактивних (з однаковими значеннями) байтів дорівнює нулю за визначенням операції «», а активні байти, пробігаючи всі 256 значень, також при порозрядному додаванні дадуть нуль)

Результат перетворення MC в третьому раунді байтів вхідного масиву даних в байти вихідного масиву даних  — порозрядна сума всіх блоків вихідного набору буде дорівнювати нулю:

Таким чином є . Повна сума даних на вході дорівнює нулю. Ця рівність порушується подальшим перетворенням BS.

Ключ однозначно задається в R поданні:

Для проведення атаки потрібна множина , що складаються з 256 станів. Множину  можна отримати застосуванням 2 зворотніх перетворень SR і MC з вхідних даних шифру .

Схема базової інтегральної атаки на 4-раундовий Crypton: Для всіх

для

якщо ,

то

У цій схемі інвертується 4-й раунд крок за кроком, щоб отримати байти повна сума яких дорівнює 0. При сума

Якщо передбачуване значення байта ключа було вірне, то воно буде включене в можливі варіанти на місце . Велика частина невірних значень байта буде відсіяною. За рахунок того, що пошук може проводитися окремо (паралельно) для кожного байта ключа, швидкість підбору всього значення раундового ключа досить велика. Далі за значенням можна знайти , а потім і  — вихідний ключ.

Конкурс AES[ред. | ред. код]

Першими кроками назустріч зміні стандартів шифрування було створення конкурсу AES. Це був відкритий конкурс, що проводиться інститутом стандартів і технологій США — NIST (National Institute of Standart and Technology). Переможець конкурсу повинен був стати новим стандартом шифрування США. У конкурсі могли брати участь приватні особи, компанії як усередині США, так і за межами країни. Основні вимоги:

  1. 128 біт — розмір блоку шифруємих даних.
  2. Три або більшої кількості розмірів ключів має підтримуватися алгоритмом (128, 256, 192 — біт — обов'язкові розміри ключів для конкурсу).

Однак, незважаючи на малу кількість вимог для алгоритмів, було багато побажань:

  1. алгоритм повинен бути стійкий від криптоаналітичних атак, відомих на момент проведення конкурсу;
  2. структура алгоритму повинна бути ясною, простою і обґрунтованою;
  3. повинні бути відсутні слабкі і еквівалентні ключі;
  4. швидкість шифрування даних повинна бути високою на всіх потенційних апаратних платформах від 8 до 64 бітових.
  5. структура алгоритму повинна дозволяти розпаралелювати операції в багатопроцесорних системах і апаратних реалізаціях.
  6. алгоритм повинен пред'являти мінімальні вимоги до оперативної та енергонезалежної пам'яті.
  7. не повинно бути обмежень на використання алгоритмів.

Зауважимо, що учасникам конкурсу AES дозволялося вносити зміни в алгоритми в ході конкурсу, якщо це незначні модифікації. Для алгоритму Crypton при наданні нової версії, журі визнали зміни значними, так як вони стосувалися таблиці замін, процедури розширення ключа. В результаті, на конкурсі брала участь версія Crypton v0.5.

Відсутність явних мінусів і наявність переваг у алгоритмі Crypton все одно не дозволила йому вийти у фінал конкурсу AES. Причиною тому була участь в конкурсі двох алгоритмів: Rijndael і Twofish. Ці алгоритми не мали проблем слабких ключів як у алгоритмі Crypton. Більше того, вони були швидшими ніж Crypton на цільових платформах. Було вирішено, що надалі Crypton програє в будь-якому разі цим алгоритмам, тому експерти конкурсу не пропустили Crypton у фінал. (Rijndael — майбутній переможець конкурсу).

Версії алгоритму Crypton[ред. | ред. код]

У конкурсі брала участь первинна редакція алгоритму, яка отримала індекс 0.5 через деякий час. Через деякий час було запропоновано ще кілька редакцій, останньою з якої стала версія 1.0 з переробленим ключовим розкладом і новими таблицями підстановки.

Примітки[ред. | ред. код]

  1. {Chae Hoon Lim, CRYPTON: A New 128-bit Block Cipher - Specification and Analysis (Version 0.5), 1998}
  2. Joan Daemen, Lars Knudsen, Vincent Rijmen. The Block Cipher Square. Fast Software Encryption (FSE) 1997, Volume 1267 of Lecture Notes in Computer Science. Haifa, Israel: Springer-Verlag, pp. 149–165, 1997

Посилання та Література[ред. | ред. код]

  • Алгоритмы Шифрования. Специальный Справочник/ Автор: Сергей Петрович Панасенко/ Изд: «БХВ-Санкт-Петербург», 2009