查看: 1640|回复: 3

[密码课] 希尔密码

  • 打卡总天数:1

积分成就

用户组:管理员

书币:127395

推理币:771923

发表于 2020-3-18 18:50:03 | 显示全部楼层 |阅读模式
180312113334371.500.266.0.2423_副本.jpg

希尔密码是由莱斯特·希尔于1929年发明的,是一种基于线性代数的多重替代密码。希尔使用矩阵和矩阵乘法来混合明文。
由于该密码加密方式过于复杂,莱斯特·希尔还特地制作了一个密码机用于加密,不过这台机器从没有真正出售。
莱斯特·希尔的主要贡献是利用数学来设计和分析密码系统。需要注意的是,对该密码的分析需要掌握一个分支数学的知识,称为数论。
许多初等数论教科书都叙述了希尔密码背后的原理,如果您想彻底的了解该密码,请尝试学一学这方面的内容。

例子:

这个例子将使用一些线性代数和一些数论来完成。
假设我们要加密消息ATTACK AT DAWN。
我们假设矩阵尺寸为3×3,但它可以是任何尺寸的(只要它是正方形)。
要对此进行加密,我们需要将消息分成3个矩阵。
现在我们从明文中提取前3个字母ATT,转换成26进制数字(将A替换为0,将B替换为1...z为25等。)
最后我们得到ATT的结果:[ 0 19 19 ]
希尔密码的密钥是矩阵,这里我们使用:CEFJCBDRH,转为进制数字如下
为了得到密文,我们要进行矩阵相乘,可逆的n × n 矩阵,然后MOD26计算。


接下来,我们对其他明文字母进行计算,以同样的方法分成三个字母一个矩阵。(如果我们加密的明文信息不规律,那么必须填充一些额外的字母,以确保形成完整的矩阵。)
对于棘手的部分,解密,我们需要找到一个求逆矩阵MOD26来当成我们的“解密密钥”,也就是说,它可以帮我们将密文' PFO '计算回' ATT '。
如果我们把3乘3密钥矩阵称为K,我们的解密密钥就是3乘3矩阵K - 1,它是K的逆。


要找到K - 1,我们必须用一点数学知识。上面的K - 1可以从我们的钥匙中计算出来,这里就不做长篇大论了,不过可以举一个简单的例子。
让K成为关键矩阵。设d是K的行列式,我们希望找到K - 1 ( K的倒数),这样K×K - 1 = I (MOD26),其中I是单位矩阵。
下面的公式告诉我们如何找到K - 1的K :
其中d×d - 1 = 1 (MOD26 ),且adj ( K )是K的辅助矩阵。
d (行列式)通常为K计算(对于上面的例子,它是489 = 21 ( mod 26 ) )。
通过找到这样一个数,即d×d - 1 = 1 ( mod 26 ) (对于上面的例子,这是5,因为5×21 = 105 = 1 ( mod 26 ) )。这样做的最简单方法是循环遍历数字1..并找到一个满足方程的方程。
如果gcd ( d,26 )⊰1 (这意味着d和26的共享系数,如果这种情况下K无法反转,这意味着你选择的密钥将不起作用,因此请选择另一个密钥从新计算)。
一旦找到K -1,就可以进行解密。

积分成就

用户组:通天干探

书币:0

推理币:9910

发表于 2020-3-18 18:54:28 来自移动端 | 显示全部楼层
密码好难学啊(ಥ_ಥ)

积分成就

用户组:通天干探

书币:0

推理币:11391

发表于 2020-3-19 15:37:27 来自移动端 | 显示全部楼层
这个好难〒▽〒

积分成就

用户组:推理新人

书币:0

推理币:96

发表于 2020-3-20 22:56:58 来自移动端 | 显示全部楼层
蓝爷666
返回列表 发新主题 回复
小黑屋| 隐私政策| 侵权投诉| 数字千年版权法(DMCA)| 切换繁体 |捐助本站
copyright 2019-2023 推理罪 All Rights Reserved