本文翻译自《Learn Hill Cipher with 3x3 Matrix Multiplicative Inverse Example》,英文水平有限,如有不足之处还请指正。
文章目录
希尔密码是什么?
希尔密码是一种基于线性代数的多表替换密码。使用希尔密码需要对矩阵的有基本的了解。希尔密码也是一种分块加密算法(block cipher),它接受输入的明文,并生成一个密文块。希尔密码是由Lester S在1929年发明的。是第一个同时处理三个及以上符号或字母的多表密码。下面的公式用于加密和解密:
C i p h e r = ( P l a i n × K e y ) m o d N P l a i n = ( C i p h e r × K e y − 1 ) m o d N Cipher = (Plain \times Key) \mod N \\ Plain = (Cipher \times Key^{-1}) \mod N Cipher=(Plain×Key)modNPlain=(Cipher×Key−1)modN
其中, P l a i n Plain Plain是加密前的明文矩阵, C i p h e r Cipher Cipher是加密后的密文矩阵, K e y Key Key是密钥矩阵(要求是一个方阵), N N N是字符集的大小,, K e y − 1 Key^{-1} Key−1是密钥矩阵在模N空间上的逆矩阵。
希尔密码的加密步骤
接下来让我们通过下面的例子来理解希尔密码加密解密的流程。
加入我们要加密如下信息:“ATTACK IS TONIGHT”,密钥矩阵 K K K如下:
K = ( 3 10 20 20 9 17 9 4 17 ) K=\begin{pmatrix} 3 & 10 & 20 \\ 20 & 9 & 17 \\ 9 & 4 & 17 \end{pmatrix} K=
32091094201717
加密这一段明文的步骤如下:
1 将明文转化为数字矩阵
第一步是将给定的明文转化为明文数字矩阵,首先按照A-Z分别映射到0-25的方式,将原文字母映射为数字,并且将得到的数字序列根据密钥的维度排列成明文矩阵 P P P(在我们的教程中采用的是按行排列的方法)。
P = ( A T T A C K I S T O N I G H T ) = ( 0 19 19 0 2 10 8 18 19 14 13 8 6 7 19 ) P=\begin{pmatrix} A & T & T \\ A & C & K \\ I & S & T \\ O & N & I \\ G & H & T \end{pmatrix} = \begin{pmatrix} 0 & 19 & 19 \\ 0 & 2 & 10 \\ 8 & 18 & 19 \\ 14 & 13 & 8 \\ 6 & 7 & 19 \end{pmatrix} P=
AAIOGTCSNHTKTIT
=
00814619218137191019819
由于加密过程中使用了矩阵乘法运算,因此对于维度为 M × M M\times M M×M的密钥矩阵,我们需要将明文序列排列成一个 R × M R\times M R×M的矩阵,当序列长度不够时,可以用我们预先设定的方式进行填充。
2 计算矩阵乘法
第二步,做矩阵模 N N N乘法,即现将两矩阵相乘,再将所得结果每个元素均除 N N N取余,由于教程中加密字符集仅涉及26个字母,因此 N = 26 N=26 N=26,如下
C = P × K m o d N = ( 0 19 19 0 2 10 8 18 19 14 13 8 6 7 19 ) × ( 3 10 20 20 9 17 9 4 17 ) m o d 26 C=P\times K\mod N = \begin{pmatrix} 0 & 19 & 19 \\ 0 & 2 & 10 \\ 8 & 18 & 19 \\ 14 & 13 & 8 \\ 6 & 7 & 19 \end{pmatrix} \times \begin{pmatrix} 3 & 10 & 20 \\ 20 & 9 & 17 \\ 9 & 4 & 17 \end{pmatrix} \mod 26 C=P×KmodN=