Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Алгоритм генерации подключей для расшифрования




 

Раундовые ключи для расшифрования рассчитываются из раундовых ключей шифрования  по следующим формулам:

(1)

Для ключа key =00111010100101001101011000111111 рассчитанные значения раундовых ключей для расшифрования приведены на рис.17.

K0=0011101010010100, L0=1101011000111111 K1=1010100101001101, L1=0100111000110101 K2=1001010011010110, L2=1010011100011010 K3=0100110101100011, L3=1101001110000101 K4=1101011000111111, L4=0011101010010100

Рисунок 17 – Подключи шифрования и расшифрования

 

Задание 5

Написатьметодround_keys_to_decrypt(self, key), гдеkey – ключшифрования(рис.18). Функция формирует список раундовых ключей для расшифрованияпо формуле (1).

def round_keys_to_decrypt(self, key):    K = self.round_keys(key)    L = [ ] % код    return L

Рисунок 18

 

Для =734533245 результат работы функции приведен на рис.19.

L0=0001011001111101 L1=1000001100110101 L2=1100100100010010 L3=1110010010001001 L4=0010101111001000

Рисунок 19

defround_keys_to_decrypt(self, key):

   K = self.round_keys(key)

   L = [ ]

L.append (K[4])

L.append (self.apbox(K[3]))

L.append (self.apbox(K[2]))

L.append (self.apbox(K[1]))

L.appendK[0])

return L

Задание6

Написатьметодdecrypt(self,x, rl, rounds), который выполняет расшифрование одного блока данных (числа x). rl-список ключей для расшифрования, rounds-количество раундов (в данном случае - 4). Структурно метод совпадает с методом шифрования encrypt (рис.20), т.к. используется одна и та же схема (рис.1).

# Шифруемодночисло def encrypt(self, x, rk, rounds):    for i in range(rounds-1):        x = self.round(x, rk[i])    x = self.last_round(x, rk[rounds-1], rk[rounds]) return x

Рисунок 20

 

Отличие заключается в том, что вместо round и last_round надо вызывать другие функции, т.к. обработка внутри раундов меняется – используются обратные перестановки и замены. Следовательно, надо еще добавить методы round_decrypt и last_round_decrypt.

Пример вызова метода приведен на рис.21.

x = 9911 k = 982832703 print('x={}'.format(bin(x)[2:].zfill(16))) rk = e.round_keys(k) y = e.encrypt(x, rk, rounds=4) lk = e.round_keys_to_decrypt(k) x_ = e.decrypt(y, lk, rounds=4) print('y={}'.format(bin(y)[2:].zfill(16))) print('x_={}'.format(bin(x_)[2:].zfill(16)))   x=0010011010110111 y=1011110011010110 x_=0010011010110111

Рисунок 21

defround_decypt(self, p, k):

   u=p

   v = []

   # run through substitution layer

for x in self.demux(u):

v.append(self.asbox(x))

 

   # run through permutation layer

   w =self.mix(self.apbox(self.mux(v)),k)

return w

 

deflast_round_decrypt(self, p, k):

   u=p

   v = []

   # run through substitution layer

 

for x in self.demux(u):

v.append(self.asbox(x))

   #XOR key

   u = self.mix(self.mux(v), k)

return u

def decrypt(self, x, lk, rounds):

print(x,lk[0])

   x=self.mix(x,lk[0])

for i in range(1,rounds):

print('раунд=',i+1)

       x = self. round_decypt(x, lk[i])

print('раунд=',rounds)

   x = self.last_round_decrypt(x,lk[rounds])

return x

Задание7

Написатьфункциюdecrypt_data(self, data, key, rounds), гдеdata –списокчисел (данные, прочитанныеиззашифрованногофайла), key – ключшифра, rounds – количествораундов. В этой функции надо сформировать список раундовых ключей расшифрования и для каждого числа (16 бит) в списке data вызвать функцию decrypt. Функция возвращает список расшифрованных данных (рис.22).

x = [9911, 12432, 456, 21] k = 982832703 print('x={}'.format(x)) y = e.encrypt_data(x, k, rounds=4) x_ = e.decrypt_data(y, k, rounds=4) print('y={}'.format(y)) print('x_={}'.format(x_))   x=[9911, 12432, 456, 21] y=[48342, 41317, 8756, 23451] x_=[9911, 12432, 456, 21]

Рисунок 22

defdecrypt_data(self, data, key, rounds):

res=[]

lk = self.round_keys_to_decrypt(key)

for d in data:

res.append(self.decrypt(d,lk,rounds))

returnres

Задание 8

Зашифровать и расшифровать содержимое файла (‘123.txt’) с помощью функций encrypt_data и decrypt_data. Для получения содержимого файла в виде списка чисел использовать функцию read_data_2byte. Для записи функции в файл использовать функцию write_data_2byte.

Убедиться, что расшифрованный после шифрования файл совпадает с исходным (рис.23).

from read_write_file import read_data_2byte as read2 from read_write_file import write_data_2byte as write2 e = spn1.SPN1() # шифрование data = read2('123.txt') cypher_data = e.encrypt_data(data, key=452342216, rounds=4) write2('123_encrypt.txt', cypher_data) # расшифрование data = read2('123_encrypt.txt') decrypt_data = e.decrypt_data(data, key=452342216, rounds=4) write2('123_decrypt.txt', decrypt_data)

Рисунок 23

Задание 9

Расшифровать файл d5_spn_c_all.bmp – зашифрованное шифром на основе сети SPN изображение в формате bmp. Ключ равен 34523456231.

Полученное изображение в формате bmp зашифровать. Сохранить в файле следующие данные: первые 50 байт – исходные (незашифрованные) данные, все последующие байты – зашифрованные. Полученный файл открыть в редакторе. Вставить в отчет исходное и зашифрованное таким образом изображение.

Задание 10

Расшифровать файл d9_spn_c_cbc_all.bmp – зашифрованное шифром на основе сети SPN изображение в формате bmp. Режим шифрования CBC. Ключ равен 345238754631. Вектор инициализации равен 9.

Полученное изображение в формате bmp зашифровать, используя режим шифрования CBC. Сохранить в файле следующие данные: первые 50 байт – исходные (незашифрованные) данные, все последующие байты – зашифрованные. Полученный файл открыть в редакторе. Вставить в отчет исходное и зашифрованное таким образом изображение.

Задание 11

Расшифровать файл f3_spn_c_ofb_all.bmp – зашифрованное шифром на основе сети SPN изображение в формате bmp. Режим шифрования OFB. Ключ равен 37884354631. Вектор инициализации равен 29.

Полученное изображение в формате bmp зашифровать, используя режим шифрования OFB. Сохранить в файле следующие данные: первые 50 байт – исходные (незашифрованные) данные, все последующие байты – зашифрованные. Полученный файл открыть в редакторе. Вставить в отчет исходное и зашифрованное таким образом изображение.

Задание 12

Расшифровать файл f7_spn_c_cfb_all.bmp– зашифрованное шифром на основе сети SPN изображение в формате bmp. Режим шифрования CFB. Ключ равен  37635643231. Вектор инициализации равен 39.

Полученное изображение в формате bmp зашифровать, используя режим шифрования СFB. Сохранить в файле следующие данные: первые 50 байт – исходные (незашифрованные) данные, все последующие байты – зашифрованные. Полученный файл открыть в редакторе. Вставить в отчет исходное и зашифрованное таким образом изображение.

Задание 13

Расшифровать файлd11_spn_c_ctr_all.bmp– зашифрованное шифром на основе сети SPN изображение в формате bmp. Режим шифрования CTR. Ключ равен 37643325531. Вектор инициализацииравен 49.

Полученное изображение в формате bmp зашифровать, используя режим шифрования СTR. Сохранить в файле следующие данные: первые 50 байт – исходные (незашифрованные) данные, все последующие байты – зашифрованные. Полученный файл открыть в редакторе. Вставить в отчет исходное и зашифрованное таким образом изображение.



Литература

[1] Бабенко Л.К., Ищукова Е.А. "Современные алгоритмы блочного шифрования и методы их анализа. Учебное пособие для вузов", Гелиос АРВ, 2006, 376 с.

[2] DouglasR. Stinson. Cryptography: Theory and Practice, Third Edition (Discrete Mathematics and Its Applications), p.616, 2005.

[3] Christopher Swenson. Modern Cryptanalysis: Techniques for Advanced Code Breaking, Wiley Publishing, 2008

 










Последнее изменение этой страницы: 2018-05-10; просмотров: 161.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...