Engee 文档
Notebook

XOR 加密模式

我们实现了一种非常基本的对称 XOR(伽明)加密算法,并对错误率进行了研究。

任务描述

对称密码允许使用相同的密钥对信息进行加密和解密。它是加密算法中非常常见的组成部分。尽管它容易受到频率分析和许多其他匹配技术的影响。

XOR (排他 OR)操作对输入比特执行以下操作:

| a | b | XOR(a, b) | XOR(a, b) | XOR(a, b) | XOR(a, b) | :-: | :-: | :--------: | | 1 | 1 | 0 | | 0 | 1 | 1 | | 1 | 0 | 1 | | 0 | 0 | 0 |

以下方案允许您尝试使用字符串表示的信息,比较它们并计算解密错误。

image.png

  • 第一个 XOR 块执行加密,然后是信号线上的密文位。
  • 第二个 XOR 块使用与第一个 XOR 块相同的密钥字节进行解密。

如果中间信道出现传输延迟,Error Rate Calculation 块中的信息密文的比较可以偏移(见块设置)。

运行模型

可使用软件控制指令启动模型:

In [ ]:
# Загрузим модель, если она еще не открыта на холсте
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" );

输出解码错误次数:

In [ ]:
print( "Количество ошибок расшифровки: ", Int32(model_data["Кол-во ошибок"].value[end]) )
Количество ошибок расшифровки: 0

让我们看看解密后得到了哪些比特:

In [ ]:
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 ]
Out[0]:
25-element Vector{UInt8}:
 0xd0
 0xa1
 0xd0
 0xbe
 0xd0
 0xbe
 0xd0
 0xb1
 0xd1
 0x89
 0xd0
 0xb5
 0xd0
 0xbd
 0xd0
 0xb8
 0xd0
 0xb5
 0xd0
 0xa1
 0xd0
 0xbe
 0xd0
 0xbe
 0xd0

用字节组合 Unicode 字符串:

In [ ]:
String( received_bytes )
Out[0]:
"СообщениеСоо\xd0"

**输出的信息与输入的信息相同。

无需脚本即可研究模型结果,只需研究图形面板上的信息即可。

image.png

我们可以看到,由于加密和解密使用的是相同的密钥比特,而且信道中没有噪音,因此错误率不会增加。

结论

我们创建了一个环境来研究简单的加密算法 XOR,也称为伽马算法。该模型可以执行加密和解密,很容易添加噪声和偏差,我们还可以尝试频率分析。