Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 700218.doc
Скачиваний:
28
Добавлен:
01.05.2022
Размер:
1.36 Mб
Скачать

Шифрование данных с помощью алгоритма seal.

Цель работы: изучить методы шифрования данных в алгоритме SEAL и освоить их практическое применение.

Теоретическое введение Обозначения.

Всюду далее 32-битная подпоследовательность именуется "слово", а 8-битная подпоследовательность - "байт". Пустая подпоследовательность обозначается λ.

Биты подпоследовательности x длины t обозначаются как x0x1...xt-1.

Шестнадцатиричные числа пишутся с помощью предшествующего им префикса "", символы "a"-"f" представляют числа 10-15, соответственно. Как y»»t обозначается правый циклический сдвиг слова y на t бит; другими словами, i-ый бит в y»»t - это y(i - t) mod 32.

Символами v, &,  обозначены побитовые операции AND, OR и XOR; как A обозначен комплемент A, как A+B - сумма двух целых без знака, игнорирующая перенос (то есть сумма чисел по mod 232). Как "||" обозначен оператор конкатенации, как odd( ) - предикат, истинный тогда и только тогда, когда его аргумент - четное число.

Длина выхода.

SEAL полагается порождающим выход переменной длины. Пусть L - желаемое количество выходных бит. Подразумевается, что L имеет достаточно большую границу.

Алгоритм прекращает генерацию бит, как только порождено L' бит, где L' - наименьшее кратное 128, большее или равное L.

Отображение ключа в таблицы.

П

21

ервая задача - задать таблицы T, R и S, каждая из которых зависит только от ключа a. Единственное предназначение ключа a в алгоритме - задать три этих таблицы.

Таблицы задаются с помощью функции G, построенной непосредственно на основе известного алгоритма хэширования SHA, являющегося федеральным стандартом США.

Описание функции генерации таблиц.

Задается Ga(i) для 160-битовой подпоследовательности a и целого 0 ≤ i < 232.

Параметр i рассматривается как 32-битная подпоследовательность, значение которой - двоичное число без знака i.

Сначала даются следующие определения.

Для 0 ≤ t ≤ 19 положим Kt=0x5a827999 и ft(B,C,D) = (B&C)v(B&D).

Для 20 ≤ t ≤ 39 положим Kt= 0x6ed9eba1 и ft(B,C,D) = BCD.

Для 40 ≤ t ≤ 59 положим Kt= 0x8f1bbcdc и ft(B,C,D) = (B&C)v(B&D)v(C&D).

Для 60 ≤ t ≤ 79 положим Kt= 0xca62c1d6 и ft(B,C,D) = BCD.

Исходная 160-битная подпоследовательность a разбивается на пять 32-битных слов, a = H0H1H2H3H4, а 512-битная подпоследовательность M1 полагается равной i || 0480.

Затем выполняется следующая обработка:

  1. Разделить M1 на 16 слов W0, W1, ... ,W15, где W0 - самое левое слово, так что W0=i, W1= W2=...=W15.

  2. Для 16≤ t ≤79 пусть Wt= Wt-3⊕ Wt-8⊕ Wt-14⊕ Wt-16.

  3. Пусть A = H0, B = H1, C = H2, D = H3, E = H4.

  4. Для 0≤ t ≤79 выполнить:

TEMP = A 〉〉〉27 + ft(B,C,D) + E + Wt+ Kt

E = D;

D = C;

C = B 〉〉〉 2;

B

22

= A; A = TEMP.

  1. H0= H0+ A;

H1= H1+ B;

H2= H2+ C;

H3= H3+ D;

H4= H4+ E;

После обработки M1 значение функции Ga(i) - это 160-битная подпоследовательность H0H1H2H3H4.

Делается переиндексация функции G для построения функции Γ , образами которой являются 32-битные слова вместо 160-битных. Функция Γ задается выражением , где . Таким образом, таблица значений Γ - это в точности таблица значений G, считываемая слева направо и сверху вниз.

Теперь определяются

T[i] = Γa(i) для всех 0 ≤ i < 512,

S[j] = Γa(0x1000 + j) для всех 0 ≤ j < 256,

и

R[k] = Γa(0x2000 + k) для всех 0 ≤ k < 4(L-1)/8192.

Вычисление этих таблиц требует вычисления функции компрессии SHA применительно к переменному количеству блоков - 131 раз для получения выхода в 512 байт, 207 раз для выхода максимальной длины в 64 килобайта.