Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Математические основы криптологии..pdf
Скачиваний:
102
Добавлен:
05.02.2023
Размер:
6.01 Mб
Скачать

c = cn2n + cn–12n–1 + … + c121 – 1.

Последовательность максимального периода, генерируемая FCSR, называется l- последовательностью. l-последовательность генерируется FCSR с числом обратной связи c, для которого 2 является корнем примитивным.

Поточные шифры Обозначения

Ниже используются следующие обозначения:

+: (x + y) означает x + y (mod 232), где 0 x < 232 и 0 y < 232.

: поразрядное исключающее ИЛИ (XOR).

: поразрядное И (AN),ключи).ВD).

&: логическое И.

||: конкатенация.

>>: оператор сдвига вправо. x >> n означает, что x сдвигается вправо на

n бит.

<<: оператор сдвига влево. x << n означает, что x сдвигается влево на n

бит.

>>>: оператор циклического сдвига вправо. x >>> n означает ((x >> n) (x << (32 – n)), где 0 n < 32, 0 x <232.

<<<: оператор циклического сдвига влево. x <<< n означает ((x << n) (x >> (32 – n)), где 0 n < 32, 0 x <232.

: (x y) означает x – y (mod 512).

A[g..h] обозначает биты с g по h переменной A.

Поточный шифр HC-128

Поточный шифр HC-128 [6] – упрощенная версия поточного шифра HC-256 для 128битового уровня безопасности. HC-128 – простой и свободно доступный шифр, ориентированный на программную реализацию. Поточный шифр HC-128 использует 128 битовые ключ и вектор инициализации IV.

HC-128 состоит из двух секретных таблиц, каждая из которых содержит 512 32разрядных элемента. На каждом шаге один элемент таблицы обновляется с помощью нелинейной функции обратной связи. Все элементы этих двух таблиц обновляются каждые

176

1024 шага. На каждом шаге, нелинейной функцией фильтрации выхода генерируется один 32-разрядный выходной блок.

Инициализация

Процесс инициализации HC-128 состоит в расширении ключа и вектора инициализации в таблицы P и Q (подобно SHA-256) и выполнении цикла шифрования (1024 раза), без генерации выходной последовательности (выходные последовательности используются для обновления P и Q).

В процессе инициализации выполняются следующие шаги:

1. Пусть K = K0||K1||K2||K3 и IV = IV0||IV1||IV2||IV3, где Ki and IVi обозначают 32-битовые числа. Ключ и IV расширяются в массив Wi (0 i 1279):

 

 

 

 

Ki

 

 

 

0 i 7

 

 

 

 

IVi 8

 

 

8 i 15

Wi

 

W

W

W

 

f

f

W

i

16 i 1279

 

2

i 2

i 7

1

i 15

i 16

 

 

где функции f1(x) и f2(x) при x = x3||x2||x1||x0, (x – 32-битное слово, x0, x1, x2, и x3 – четыре байта. x3 и x0 обозначают соответственно самый старший байт и самый младший байт величины x) определяются как

f1(x) = (x >>> 7) (x >>> 18) (x >> 3), f2(x) = (x >>> 17) (x >>> 19) (x >> 10).

2.Обновить таблицы P и Q массивом W. P[i] = Wi+256, для 0 ≤ i ≤ 511,

Q[i] = Wi+768, для 0 ≤ i ≤ 511.

3.Выполнить цикл шифрования 1024 раза и использовать выходные последовательности

для замены элементов таблицы следующим образом:

for i = 0 to 511 do

P[i] = (P[i] + g1(P[i3], P[i10], P[i511])) h1(P[i12]);

for i = 0 to 511 do

Q[i] = (Q[i] + g2(Q[i3], Q[i10], Q[i511])) h2(Q[i12]);

где функции g1(x), g2(x), h1(x) и h2(x) при x = x3||x2||x1||x0 определяются как g1(x, y, z) = ((x >>> 10) (z >>> 23)) + (y >>> 8),

g2(x, y, z) = ((x <<< 10) (z <<< 23)) + (y <<< 8), h1(x) = Q[x0] + Q[256 + x2],

h2(x) = P[x0] + P[256 + x2].

Для функции h1(x) таблица Q используется как S-блок. Для функции h2(x), таблица P используется как S-блок.

177