Модель XOR-шифрования¶
Реализуем очень базовый алгоритм симметричного шифрования XOR (гаммирование) и изучим процент ошибок.
Описание задачи¶
Симметричные шифры позволяют шифровать и расшифровывать сообщения при помощи одного и того же ключа. Это очень частый компонент алгоритмов шифрования. Несмотря на то, что он уязвим для частотного анализа и многих других методов подбора.
Операция XOR
(исключающее ИЛИ) осуществляет над входными битами следующую операцию:
a | b | XOR(a, b) |
---|---|---|
1 | 1 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
0 | 0 | 0 |
Следующая схема позволяет экспериментировать с сообщениями в строковом представлении, сравнивать их и подсчитывать ошибки расшифровки.
- Первый блок XOR осуществляет шифрование, дальше по сигнальной линии идут биты шифротекста.
- Второй блок XOR осуществляет расшифровку, используя те же байты ключа, что и первый блок XOR.
Если в промежуточном канале возникнут задержки передачи, сравнение Сообщения и Шифротекста в блоке Error Rate Calculation
можно делать со смещением (см. настройки блока).
Запуск модели¶
Модель можно запустить при помощи команд программного управления:
# Загрузим модель, если она еще не открыта на холсте
if "xor_cipher_model" ∉ getfield.(engee.get_all_models(), :name)
engee.load( "$(@__DIR__)/xor_cipher_model.engee");
end
model_data = engee.run( "xor_cipher_model" );
Выведем количество ошибок расшифровки:
print( "Количество ошибок расшифровки: ", Int32(model_data["Кол-во ошибок"].value[end]) )
Посмотрим, какие биты пришли после расшифровки:
out_vector = collect(model_data["Расшифровка"]).value;
received_bytes = [ UInt8(evalpoly(2, reverse(out_vector[1+8*start:8*start+8]))) for start in 0:div(length(out_vector),8)-1 ]
Чтобы собрать Unicode-строку из байтов:
String( received_bytes )
Мы получили на выходе то же сообщение, которе отправили на вход.
Результат работы модели можно изучать без скриптов, достаточно изучить информацию на панели Графики.
Как мы видим, процент ошибок не растет, потому что для шифрования и расшифровки используются одинаковые биты ключа, а также потому что в канале нет шума.
Заключение¶
Мы создали окружение для изучения простейшего криптографического алгоритма XOR, также называемый гаммированием. Модель осуществляет шифрование и расшифрование, в нее легко добавить шум и смещение, а в качестве дальнейших шагов можно попробовать провести частотный анализ.