网络安全 / A LEAF IN THE GARDEN

多表替换

网络安全 · crypto / 古典密码。来自 Daily Learning 的学习笔记。

概念

用多张替换表,按密钥循环切换,让同一个明文字母在不同位置被替换成不同密文字母,单字母频率分析失效

维吉尼亚密码

流程

  1. 去掉明文非字母部分
  2. 秘钥与明文循环对齐
  3. 每个明文字母按对应的秘钥字母选择替换表进行替换

密码表

ABCDE…
AABCDE…
BBCDEF…
CCDEFG…
DDEFGH…
EEFGHI…
…

示例

明文: there is a cipher
秘钥: password

过滤对齐

明文: thereisacipher
秘钥: passwordpasswo
密文: ihwjawjdrihzaf

普莱菲尔密码

基于 5×55\times 5 矩阵为字母对进行加密

流程

  1. 对秘钥字母去重,按顺序填入矩阵
  2. 其余字母按字母表顺序填入(ij合并)
  3. 明文按字母对分组,组内相同或单字母则补x
  4. 按规则替换字母对:
  • 同行:右移一位(循环式)
  • 同列:下移一位(循环式)
  • 不同行列:
    1. 取以两个字母为对角矩形
    2. 用矩形另一对角字母替换(同行或同列替换)

示例

明文: test with playfair cipher
秘钥: hello
去重秘钥: helo

5×55\times 5 矩阵

12345
1hbi/jqv
2eckrw
3ldmsx
4ofnty
5agpuz
密文: ortukvoqamzogokqkbaicw

希尔密码

使用矩阵进行可逆线性映射

流程

  1. 选择可逆矩阵 Kn×nK_{n\times n} 作为秘钥
  2. 将明文字母按 26 进制解析为 nn 维向量 pp
  3. 计算密文向量 c=Kpmod  26c=Kp\mod 26
  4. 将密文向量 cc 转换为字母输出

示例

明文: act(n=3)

明文向量(3维):

p=(0219)p=\begin{pmatrix}0 \\ 2 \\ 19\end{pmatrix}

秘钥矩阵(3×3):

K=(6241131610201715)K=\begin{pmatrix} 6 & 24 & 1 \\ 13 & 16 & 10 \\ 20 & 17 & 15 \end{pmatrix} c=Kpmod  26=(6241131610201715)(0219)mod  26=(15147)\begin{aligned} c &=Kp\mod 26 \\ &=\begin{pmatrix} 6 & 24 & 1 \\ 13 & 16 & 10 \\ 20 & 17 & 15 \end{pmatrix}\begin{pmatrix}0 \\ 2 \\ 19\end{pmatrix}\mod 26 \\ &=\begin{pmatrix}15 \\ 14 \\ 7\end{pmatrix} \end{aligned}
密文: poh