ки необхідно збільшити цю величину. Внутрішній стан RC4 представляється у вигляді масиву слів розміром 2n і двох лічильників, кожен розміром в одне слово. Масив відомий як S-бокс, і далі буде позначатися як S. Він завжди містить перестановку 2n можливих значень слова. Два лічильника позначені через i і j.
Цей алгоритм використовує ключ, збережений у Key, і має довжину l байт. Ініціалізація починається з заполненія масиву S, далі цей масив перемішується шляхом перестановок визначаються ключем. Так як тільки одну дію виконується над S, то має виконуватися твердження, що S завжди містить всі значення кодового слова.
Рисунок 2.1 - Реалізація шифру RC4
2.1.2 Шифр ??SEAL
Software-optimized Encryption Algorithm (програмно-оптимізований алгоритм шифрування) - симетричний потоковий алгоритм шифрування даних оптимізований для програмної реалізації.
Розроблено в IBM Філом Рогевеем і Доном Копперсмітом в 1993 році. Алгоритм оптимізований і рекомендований для 32-бітових процесорів. Для роботи йому потрібно кеш-пам'ять на декілька кілобайт і вісім 32-бітових регістрів. Швидкість шифрування - приблизно 4 машинних такту на байт тексту. Для кодування і декодування використовується 160-бітний ключ. Щоб уникнути небажаної втрати швидкості з причини повільних операцій обробки ключа, SEAL попередньо виконує з ним кілька перетворень, отримуючи в результаті три таблиці певного розміру. Безпосередньо для шифрування і дешифрування тексту замість самого ключа використовуються ці таблиці. Алгоритм вважається дуже надійним, дуже швидким.
Малюнок 2.2-Реалізація алгоритму SEAL
Щоб уникнути втрати швидкості шифрування на повільних операціях алгоритм використовує три таблиці: R, S і T. Ці таблиці обчислюються за допомогою процедури з алгоритму SHA - 1 і залежать тільки від ключа. Заповнення даних таблиць можна описати за допомогою функції G, яка з 160-бітної рядки і 32-бітного числа повертає 160-бітове значення.
Процес шифрування складається з великої кількості ітерацій, кожна з яких завершується генерацією псевдослучайной функції. Кількість пройдених ітерацій показує лічильник l. Всі вони поділяються на кілька етапів з схожими операціями. На кожному етапі старші 9 бітів одного з регістрів (A, B, C або D) використовуються в якості покажчика, по якому з таблиці T вибирається значення. Це значення складається арифметично або поразрядно по модулю 2 (XOR) з наступним регістром (знову один з A, B, C або D). Потім перший обраний регістр перетворюється циклічним зрушенням вправо на 9 позицій. Далі або значення другого регістра модифікується складанням або XOR з вмістом першого (вже зсунутим) і виконується перехід до наступного етапу, або цей перехід виконується відразу. Після 8 таких етапів значення A, B, C і D складаються (арифметично або XOR) з певними словами з таблиці S і додаються в ключову послідовність y. Завершальний етап ітерації полягає в додатку до регістрів додаткових 32-бітових значень (n1, n2 або n3, n4). Причому вибір конкретного значення залежить від парності номери даної ітерації.
При розробці цього алгоритму головну увагу приділялося наступним властивостям та ідеям:
· Використання великий (приблизно 2 Kбайт) таблиці T, одержуваної з великого 160-бітного клю...