Материал: Методические указания к практическим занятиям по дисциплине «Криптографические протоколы» для специальности «Компьютерная безопасность». Мокроусов А.Н., Остапенко А.Г

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Оформление отчета:

В отчете следует привести краткие теоретические сведения. Кроме того, должны быть представлены: краткая блок-схема, текст программы, шифруемый набор символов, результаты выполнения программы.

Контрольные вопросы:

1.В чем заключается суть метода шифрования

Blowfish?

2.Какой характерной особенностью обладает функциональное преобразование сети Фейстеля?

3.Как выбирается начальное значения P-массива и таблица замен?

4.Каким образом можно зашифровать и расшифровать сообщение методом табличной перестановки, если размер шифруемого сообщения не кратен размеру блока?

5.Что такое монофонические шифры?

24

Практическая работа № 6 Шифрование данных с помощью алгоритма 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.

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

Источник: https://studfile.net/preview/16563503/