希尔密码是由莱斯特·希尔于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,就可以进行解密。
|