Оформление отчета:
В отчете следует привести краткие теоретические сведения. Кроме того, должны быть представлены: краткая блок-схема, текст программы, шифруемый набор символов, результаты выполнения программы.
Контрольные вопросы:
1.В чем заключается суть метода шифрования
Blowfish?
2.Какой характерной особенностью обладает функциональное преобразование сети Фейстеля?
3.Как выбирается начальное значения P-массива и таблица замен?
4.Каким образом можно зашифровать и расшифровать сообщение методом табличной перестановки, если размер шифруемого сообщения не кратен размеру блока?
5.Что такое монофонические шифры?
24
Практическая работа № 6 Шифрование данных с помощью алгоритма SEAL
Цель работы: изучить методы шифрования данных в алгоритме SEAL и освоить их практическое применение.
Теоретическое введение
Обозначения
Всюду далее 32-битная подпоследовательность именуется «слово», а 8-битная подпоследовательность – «байт». Пустая подпоследовательность обозначается λ.
Биты подпоследовательности x длины t обозначаются как x0x1...xt-1.
Шестнадцатиричные числа пишутся с помощью предшествующего им префикса «0х», символы «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.
25
Отображение ключа в таблицы
Первая задача – задать таблицы 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.
26
4)Для 0≤ t ≤79 выполнить:
TEMP = A 27 + ft(B,C,D) + E + Wt+ Kt E = D;
D = C;
C = B 2; B = A; A = TEMP.
5)H0= H0+ A; H1= H1+ B; H2= H2+ C; H3= H3+ D; H4= H4+ E;
После обработки M1 значение функции Ga(i) – это 160битная подпоследовательность H0H1H2H3H4.
Делается переиндексация функции G для построения функции Γ, образами которой являются 32-битные слова вместо 160-битных. Функция Γ задается выражением
Г |
a(i) |
|
H |
i |
|
i mod 5 |
||
|
, где |
H i |
H i |
H i |
H i |
H i |
G |
0 |
1 |
2 |
3 |
4 |
a i /5 . Таким образом, |
таблица значений Γ – это в точности таблица значений 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 килобайта.
27
Псевдослучайная функция
Имея число L, таблицы T, R и S, заданные ключом a, и 32-битный индекс n, представленный ниже алгоритм растягивает n в L-битную псевдослучайную последовательность y.
Алгоритм SEAL (отображение 32-битного
индекса в L бит)
function SEALa(n) y = λ;
for l ← 0 to ∞ do
Initialize a(n,l,A,B,C,D,n1,n2,n3,n4); for i ← 1 to 64 do
P←A&0x7fc; B←B+T[P/4]; A←A »»9; B←BA; Q←B&0x7fc; C←C T[Q/4]; B←B»»9; C←C+B; P←(P+C)&0x7fc; D←D+T[P/4]; C←C»»9; D←DC; Q←(Q+D)&0x7fc; A←A T[Q/4]; D←D»»9; A←A+D; P←(P+A)&0x7fc; B←B T[P/4]; A←A»»9; Q←(Q+B)&0x7fc; C←C+T[Q/4]; B←B»»9; P←(P+C)&0x7fc; D←D T[P/4]; C←C»»9; Q←(Q+D)&0x7fc; A←A+T[Q/4]; D←D»»9;
y ← y || B+S[4i-4] || СS[4i-3] || D+S[4i-2] || A S[4i-1]; if |y| ≥ L then return (y0y1...yL-1);
if odd(i) then (A,C) ← (A+n1,C+n2) else (A,C) ← (A+n3,C+n4).
Все деления на 4 необходимы потому, что индексирование таблицы осуществлено в единицах байтов, а не слов. Это более эффективно на некоторых вычислительных платформах.
Данный алгоритм использует подпрограмму Initialize для отображения n и l в слова A, B, C, D, n1, n2, n3, n4. Эта процедура инициализации заключается в следующем.
28