XOR加密模型
我们将实现一个非常基本的对称异或加密算法(gamming)并研究错误率。
任务说明
对称密码允许您使用相同的密钥加密和解密消息。 这是加密算法的一个非常常见的组件。 尽管它容易受到频率分析和许多其他匹配方法的影响。
运作 XOR (exclusive OR)对输入位执行以下操作:
|a/b|XOR(a,b)/
| :-: | :-: | :--------: |
| 1 | 1 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 0 | 0 | 0 |
以下方案允许您以字符串表示形式试验消息,比较它们并计算解密错误。
*第一个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]) )
让我们看看解密后有哪些位。:
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]:
从字节组装Unicode字符串:
In [ ]:
String( received_bytes )
Out[0]:
我们在出口处收到了我们在入口处发送的相同消息。
模型的结果可以在没有脚本的情况下进行研究,研究图形面板上的信息就足够了。
正如我们所看到的,错误率并没有增加,因为相同的密钥位用于加密和解密,并且还因为信道中没有噪声。
结论
我们创造了一个环境来研究最简单的加密算法XOR,也称为gamming。 该模型执行加密和解密,很容易向其添加噪声和偏差,并且作为进一步的步骤,您可以尝试执行频率分析。