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 |
以下方案允许您尝试使用字符串表示的信息,比较它们并计算解密错误。
- 第一个 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]) )
让我们看看解密后得到了哪些比特:
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,也称为伽马算法。该模型可以执行加密和解密,很容易添加噪声和偏差,我们还可以尝试频率分析。