p>
{(CipherKey, ExpandedKey);// Розширення ключа (State, ExpandedKey);// Додавання циклового ключа (i=1; i
}
Якщо попередньо виконана процедура розширення ключа, то Rijndael буде виглядати наступним чином:
Rijndael (State, CipherKey)
{(State, ExpandedKey); (i=1; i
}
Зауваження: Розширений ключ повинен завжди виходити з ключа шифрування і ніколи не вказується безпосередньо. Немає жодних обмежень на вибір ключа шифрування.
Blowfish
Алгоритм був розроблений в 1993 році Брюсом Шнайєром (Bruce Schneier). Цей алгоритм, за заявою учасника, розроблявся як швидкий, компактний і простий алгоритм з настроюваної стійкістю (ключ до 448 біт). Є мережею Фейштеля, у якої кількість ітерацій дорівнює 16. Довжина блоку дорівнює 64 бітам, ключ може мати будь-яку довжину в межах 448 біт. Хоча перед початком будь-якого шифрування виконується складна фаза ініціалізації, само шифрування даних виконується досить швидко.
Алгоритм складається з двох частин: розширення ключа і шифрування даних. Розширення ключа перетворить ключ довжиною, принаймні, 448 біт в кілька масивів подключей загальною довжиною 4168 байт.
В основі алгоритму лежить мережу Фейштеля з 16 итерациями. Кожна ітерація складається з перестановки, залежною від ключа, і підстановки, залежною від ключа і даних. Операціями є XOR і додавання 32-бітних слов.іспользует велика кількість подключей. Ці ключі повинні бути обчислені заздалегідь, до початку будь-якого шифрування або дешифрування даних. Елементи алгоритму:
1. Р - масив, що складається з вісімнадцяти 32-бітних подключей: Р1, Р2, ..., Р18.
2. Чотири 32-бітових S-boxes c 256 входами кожен. Перший індекс означає номер S-box, другий індекс - номер входу.
3. S1, 0, S1, 1, ... S1, 255;
4. S2, 0, S2, 1, ... S2, 255;
. S3, 0, S3, 1, ... S3, 255;
. S4, 0, S4, 1, ... S4, 255;
Метод, використовуваний для обчислення цих подключей, буде описаний нижче.
Входом є 64-бітний елемент даних X, який ділиться на дві 32-бітові половини, X1 і Xr.
=Xl XOR Pi (2.5)
Xr=F (Xl) XOR Xr (2.6)
Xl and Xr
Розділити Xl на чотири 8-бітних елемента A, B, C, D.
F (Xl)=((S1, А + S2, B mod 232) XOR S3, C) + S4, D mod 232
Дешифрування відрізняється від шифрування тим, що Pi використовуються в зворотному порядку.
Генерація подключей: Підключи обчислюються з використанням самого алгоритму Blowfish. Для цього слід:
1 Ініціалізувати перший Р-масив і чотири S-boxes фіксованою рядком.
2 Виконати операцію XOR P1 з першими 32 бітами ключа, операцію XOR P2 з другими 32 бітами ключа і т.д. Повторювати цикл доти, поки весь Р-маса не буде побитно складний з усіма біт...