Вы находитесь на странице: 1из 1

Лабораторная работа N3

Сеть Фейштеля

Цель работы. Запрограммировать на языке Матлаб сеть Фейштеля.

1. Напишите на языке Матлаб функцию, вычисляющую выходы одного раунда сети Фейштеля.

X1 X2
K

Z1 Z2

Функция должна иметь вид:

function [z1,z2] = Nikolay(x1,x2,k)

Здесь “Nikolay” - имя функции (придумайте для себя какое-нибудь другое).

Пользователем на вход Вашей функции будут подаваться:


x1, x2 - исходные данные, которые нужно зашифровать (тип данных - uint32)
k - материал (фрагмент) ключа (тип данных - uint32)

На выходе функции должны быть:


z1, z2 - выходные зашифрованные данные (тип данных - uint32)

Пусть F(x1,k) вычисляется у Вас следующим образом:


Число x1 сдвигается влево на 2 бита (функция bitshift Матлаба).
Результат сдвига складывается суммой по модулю два с k (функция bitxor Матлаба).

2. Напишите на языке Матлаб функцию, которая декодирует данные одного раунда сети Фейштеля.

Функция должна иметь вид:

function [x1,x2] = Oleg(z1,z2,k)

Здесь “Oleg” - имя функции (придумайте для себя какое-нибудь другое).

Пользователем на вход Вашей функции будут подаваться:


z1, z2 - исходные данные, которые нужно расшифровать (тип данных - uint32)
k - материал (фрагмент) ключа (тип данных - uint32)

На выходе функции должны быть:


x1, x2 - выходные расшифрованные данные (тип данных - uint32)

Несложно заметить, что x1 равно z2. А для вычисления x2 придется снова вычислить F(x1,k) и сложить его суммой по
модулю два с z1.

3. Напишите функцию, которая для заданных данных выполнит 16 раундов сети Фейштеля.

function [z1, z2 ] = Taras (x1, x2, kar)

Здесь “Taras” - имя функции (придумайте для себя какое-нибудь другое).

Пользователем на вход Вашей функции будут подаваться:


x1, x2 - исходные данные, которые нужно зашифровать (тип данных - uint32)
kar - ключ (массив из 16-ти чисел типа uint32)

Из этой функции для выполнения каждого из 16-ти раундов вызывайте ранее написанную Вами функцию вычисления
выходов сети Фейштеля для одного раунда.

4. Самостоятельно попробуйте проверить работоспособность ваших функций (придумайте какой-нибудь тест).


Предоставьте преподавателю для проверки тексты программ в электронном виде.