Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Мокрoусов_ПЗ_Криптопротоколы

.pdf
Скачиваний:
50
Добавлен:
31.05.2015
Размер:
1.09 Mб
Скачать

Порядок выполнения работы:

написать на языке программирования функцию шифрования, в которую в качестве параметров передается ключ и символ (или строка символов) исходного текста.

написать функцию дешифрования, в которую в качестве параметров передается ключ и символ (или строка символов) зашифрованного текста.

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

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

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

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

2.Какой характерной особенностью обладает шифр

А5/3?

3.В чем заключается суть алгоритма Касуми?

4.Опишите алгоритм любого метода шифрования перестановкой. Приведите пример шифрования некоторого сообщения этим методом. Каков алгоритм расшифрования в этом методе?

5.К какой группе методов шифрования с закрытым ключом относится метод с использованием таблицы Вижинера? Каковы алгоритмы шифрования и расшифрования

вэтом методе? Приведите пример шифрования некоторого сообщения этим методом.

19

Практическая работа № 5 Шифрование данных с помощью алгоритма Blowfish

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

Теоретическое введение

Функциональное преобразование F(x) сети Фейстеля (рис. 5):

1.32-битный блок делится на четыре 8-битных блока (X1, X2, X3, X4), каждый из которых является индексом массива таблицы замен S1-S4

2.значения S1[X1] и S2[X2] складываются по модулю 232, после «XOR»ятся с S3[X3] и, наконец, складываются с S4[X4] по модулю 232.

3.Результат этих операций — значение F(x).

Рис. 5. Функциональное преобразование

При работе алгоритма используются следующие данные:

секретный ключ K (от 32 до 448 бит)

32-битные ключи шифрования P1-P18

32-битные таблицы замен S1-S4:

20

S1[0] S1[1] .. S1[255]

S2[0] S2[1] .. S2[255]

S3[0] S3[1] .. S3[255]

S4[0] S4[1] .. S4[255]

Алгоритм шифрования 64-битного блока с известным массивом P и F(x)

Алгоритм шифрования 64-битного блока с известным массивом P и F(x) (рис. 6):

разделение на 32-битные блоки : L0, R0.

Рис. 6. Шифрование 64-битного блока

вычисления в i-том раунде:

Li Li Pi

Ri F(Li ) Ri

21

Ri и Li меняются местами.

после 16 раунда L16, R16 вновь меняются местами:

и «XOR»-ся ключами P17,P18.

Алгоритм Blowfish

Алгоритм разделён на 2 этапа:

1.Подготовительный — формирование ключей шифрования по секретному ключу.

o Инициализация массивов P и S при помощи секретного ключа K

1.Инициализация P1-P18 фиксированной строкой, состоящей из шестнадцатеричных цифр числа пи, следующих после 3, то есть после запятой.

2.Производится операция XOR над P1 с первыми 32

битами ключа K, над P2 со вторыми 32-битами и так далее. Если ключ K короче, то он накладывается циклически.

oШифрование ключей и таблиц замен

1.Алгоритм шифрования 64-битного блока, используя инициализированные ключи P1-P18 и таблицу замен S1-S4, шифрует 64 битную строку, состоящую из 0 и 1 (важно чтобы она была фиксированной длины). Результат записывается в

P1, P2.

2.P1 и P2 шифруются изменёнными значениями ключей и таблиц замен. Результат записывается в

P3 и P4.

3.Шифрование продолжается до изменения всех ключей и таблицы замен.

22

2.Шифрование текста полученными ключами и F(x), с предварительным разбиением на блоки по 64 бита. Если невозможно разбить начальный текст точно на блоки по 64 бита, используются различные режимы шифрования для построения сообщения, состоящего из целого числа блоков. Cуммарная требуемая память 4168 байт: P1-P18:18 переменных по 32 бита; S1-S4: 4x256 переменных по 32 бита.

Дешифрование происходит аналогично, только P1-P18 применяются в обратном порядке.

Выбор начального значения P-массива и таблицы замен

Нет ничего особенного в цифрах числа пи. Данный выбор заключается в инициализации последовательности, не связанной с алгоритмом, которая могла бы быть сохранена как часть алгоритма или получена при необходимости. Как указывает Шнайер: «Подойдёт любая строка из случайных битов цифр числа e, RAND-таблицы, или случайные сгенерированные цифры».

Задание:

Используя алгоритм шифрования данных Blowfish, написать программу шифрования и дешифрования произвольного набора символов на любом языке программирования.

Порядок выполнения работы:

написать на языке программирования функцию шифрования, в которую в качестве параметров передается ключ и символ (или строка символов) исходного текста.

написать функцию дешифрования, в которую в качестве параметров передается ключ и символ (или строка символов) зашифрованного текста.

23

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

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

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

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