Модель перестановочного шифра¶
Реализуем модель перестановочного шифра, который изменяет порядок бит в символах входного сообщения.
Описание задачи¶
Перестановочный шифр, который мы реализуем, будет осуществлять побитовую перестановку каждого байта из входного сообщения. Если на вход придет символ 31 (00011111
), то после применения таблицы перестановки [2, 1, 5, 8, 4, 6, 7, 3]
мы получим зашифрованный символ 62 (00111110
).
Модель с описанием этой задачи приведена ниже:
За блоками пермутации скрыты подсистемы, которые осуществляют
- разложение входного символа на битовый массив (блок
Integer to Bit Converter
), - пермутацию бит при помощи блока (блок
Permute Matrix
), - формирование числа UInt8 из вектора битов (блок
Bit to Integer Converter
).
Число на лицевой стороне блока обозначает заданное значение для инициализации генератора случайных чисел. При изменении этого значения (поле Seed
маски блока) порядок перестановки внутри элемента автоматически перезаписывается на заданный функцией shuffle
порядок пермутации.
Запуск модели и анализ результатов¶
# Загрузим модель, если она еще не открыта на холсте
if "permutation_cipher_model" ∉ getfield.(engee.get_all_models(), :name)
engee.load( "$(@__DIR__)/permutation_cipher_model.engee");
end
model_data = engee.run( "permutation_cipher_model" );
Посмотрим, какие значения проходили по каждой из линий связи в течение симуляции:
source_message = collect(model_data["Сообщение"]).value
cipher_text = Int.(collect(model_data["Шифротекст"]).value)
received_message = Int.(collect(model_data["Расшифровка"]).value)
println( "Отправленное сообщение: ", source_message )
println( "Зашифрованное сообщение: ", cipher_text )
println( "Полученное сообщение: ", received_message )
Декодируем сообщение:
alphabet_dict = Dict( zip( 1:33, "абвгдеёжзиёклмнопрстуфхцчшщъыьэюя" ))
print( "Расшифрованное сообщение: ", join( [alphabet_dict[d] for d in received_message], "" ) )
Заключение¶
Мы создали еще один базовый блок для построения криптографических систем - простейший блок для прямой и "обратной" пермутации бит внутри символов сообщения.