密码学总结系列

密码学总结(一) 古典密码汇总

古典密码基本上都是替代密码,细微的差别就只是在替代规则上的不同。较简单的就是固定移位的位数来确定加密的秘钥,另外的一种就是自己约定的无规律的秘钥。
移位加密–>单字母替换无规律秘钥加密–>多字母替换秘钥加密

Atbash密码

Atbash密码是一种替代密码,其中一个特定的密钥在字母的字母颠倒。也就是说,所有’A’被替换为’Z’,所有’B’被替换为’Y’,等等。它最初用于希伯来语字母表,但可用于任何字母表。它的安全性很差,只要知道是替代密码就可以甚至用其他替代密码的破解方式破解。

算法

1
2
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ZYXWVUTSRQPONMLKJIHGFEDCBA

按照表上的对应关系,直接替换就可以了。

Rot13密码

ROT13密码是具有特定密钥的替代密码,其中字母的字母被偏移13个位置。也就是说,所有’A’被替换为’N’,全部’B’被替换为’O’等等。它也可以被认为是一个13的变化凯撒密码。

算法

和Atbash一样仅为移位更换

1
2
ABCDEFGHIJKLMNOPQRSTUVWXYZ
NOPQRSTUVWXYZABCDEFGHIJKLM

##凯撒密码
凯撒密码是最早已知和最简单的密码之一。它是一种替代密码,其中明文中的每个字母都在字母表中“移动”了一定数量的位置。例如,如果移位1,则A将被B替换,B将变成C,依此类推。

算法

首先我们把所有的字符翻译成数字,’a’= 0,’b’= 1,’c’= 2,…,’z’= 25。我们现在可以代表凯撒密码加密函数e(x),其中x是我们正在加密的字符,

##仿射密码
该密码是少比一个安全的替代密码。密码的主要弱点来自这样一个事实:如果密码分析者能够通过频率分析,暴力破解,猜测或者其他方法发现两个密文字符的明文,那么通过求解一个联立方程可以得到密钥。
拥有两个秘钥

1
2
加密 c = (key1*p+key2) (mod m)
解密 p = key1~1(c-key2)

培根密码

培根的密码是以其发明者弗朗西斯·培根爵士的名字命名的。培根的密码是一个替换密码,其中每个字母被替换为5个字符的序列。在原始密码中,这些是“A”和“B”的序列,例如字母“D”被“aaabb”替换,字母“O”被“abbab”替换。

算法

1
2
3
4
5
6
7
8
A = aaaaa I / J = abaaa R = baaaa
B = aaaab K = abaab S = baaab
C = aaaba L = ababa T = baaba
D = aaabb M = ababb U / V = baabb
E = aabaa N = abbaa W = babaa
F = aabab O = abbab X = babab
G = aabba P = abbba Y = babba
H = aabbb Q = abbbb Z = babbb

培根密码是一种替代密码,这里就不把替换密码单独提出来了,替换密码其实就是将上面提到的移位规律打乱,生成只有自己人知道的对应秘钥。其与移位密码有共同之处,或者说是其的强化版。但是相比于简单的凯撒和仿射密码,其秘钥的可能性更多。在破解秘钥难度上相比较后两者要难得多,但是我们可以利用爬山算法进行猜解,解出经过预估秘钥解密后最符合英文语句(明文)的可能性。详见网站https://quipqiup.com/

Polybius广场密码

Polybius Square与简单替换密码基本相同,只是每个明文字符都被加密为2个密文字符。如果密文中只有5或6个不同的字符,通常可以检测到。

例子

1
2
3
4
5
6
7
A B C D E
- - - - -
A| p h q g m
B| e a y l n
C| o f d x k
D| r c v s z
E| w b u t i

框中的字母就是秘钥,边框外的是加密后会出现的字母。例如我们对字母’a’进行加密就是在秘钥矩阵中找到a,然后找到对应框外的密文’BB’

列转换密码

列转换密码是一个相当简单,易于实现的密码。它是一个转置密码,它遵循一个简单的规则来混合明文中的字符来形成密文。

虽然它本身很弱,但可以与其他密码相结合,比如替代密码,它们的组合可能比其自身的密码更难以破解。该 adfgvx密码使用柱状换位,大大提高了其安全性。

1
2
3
4
5
6
7
G E R M A N
- - - - - -
d e f e n d
t h e e a s
t w a l l o
f t h e c a
s t l e x x

横线上是关键字,将要加密的明文进行填充,不足的地方用特定的字符填充,如此处使用的是x(可以更换成自己约定好的字符)来填充明文填进后的不足的两位。
然后将单词打乱

1
2
3
4
5
6
7
AEGMNR
------
nededf
ahtese
lwtloa
ctfeah
xtsexl

最后按照列输出密文。

自动秘钥密码

自动密钥密码是一种多字母替代密码。

算法

自动密钥密码的“关键”是一个关键词。例如’FORTIFICATION’
自动密钥密码使用下面的表格(’tabula recta’)来加密明文:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
---------------------------------------------------
A A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
B B C D E F G H I J K L M N O P Q R S T U V W X Y Z A
C C D E F G H I J K L M N O P Q R S T U V W X Y Z A B
D D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
E E F G H I J K L M N O P Q R S T U V W X Y Z A B C D
F F G H I J K L M N O P Q R S T U V W X Y Z A B C D E
G G H I J K L M N O P Q R S T U V W X Y Z A B C D E F
H H I J K L M N O P Q R S T U V W X Y Z A B C D E F G
I I J K L M N O P Q R S T U V W X Y Z A B C D E F G H
J J K L M N O P Q R S T U V W X Y Z A B C D E F G H I
K K L M N O P Q R S T U V W X Y Z A B C D E F G H I J
L L M N O P Q R S T U V W X Y Z A B C D E F G H I J K
M M N O P Q R S T U V W X Y Z A B C D E F G H I J K L
N N O P Q R S T U V W X Y Z A B C D E F G H I J K L M
O O P Q R S T U V W X Y Z A B C D E F G H I J K L M N
P P Q R S T U V W X Y Z A B C D E F G H I J K L M N O
Q Q R S T U V W X Y Z A B C D E F G H I J K L M N O P
R R S T U V W X Y Z A B C D E F G H I J K L M N O P Q
S S T U V W X Y Z A B C D E F G H I J K L M N O P Q R
T T U V W X Y Z A B C D E F G H I J K L M N O P Q R S
U U V W X Y Z A B C D E F G H I J K L M N O P Q R S T
V V W X Y Z A B C D E F G H I J K L M N O P Q R S T U
W W X Y Z A B C D E F G H I J K L M N O P Q R S T U V
X X Y Z A B C D E F G H I J K L M N O P Q R S T U V W
Y Y Z A B C D E F G H I J K L M N O P Q R S T U V W X
Z Z A B C D E F G H I J K L M N O P Q R S T U V W X Y

将要加密的明文放在关键字的放在关键字的下方,和关键字的字母一一对应,如果关键字的位数不够,那么就从明文的开头截取字母补充进关键字,如下:

1
2
FORTIFICATIONDEFENDTHEEASTWA
DEFENDTHEEASTWALLOFTHECASTLE

上面第一行是关键字和明文补充上来生成的秘钥,下方为明文。
加密过程:现在我们把我们要编码的字母’D’,并在画面的第一列找到它。然后,我们沿着画面的“D”行移动,直到我们到达顶部具有“F”的列(“F”是第一个“D”的关键字字母),交集就是我们的密文字符, ‘I’

博福特密码

这个密码是在上面的自动秘钥密码的基础上微创新而来的(古人是真的烦,这种创新都可以成为一种新密码,也是无语了)。
其所采用的加密图形和上面一样。

算法

在秘钥生成上,博福特密码所采用的依旧是关键字,不过对应的不足位是由关键字补充的,这和上面的自动秘钥密码有很大的区别,个人觉得秘钥的随机性有所减弱,但是依旧有效(即使这种加密并不安全)。
在密文生成上,和自动秘钥密码刚好相反。它是从最上面的一行找出要加密的明文字母然后再从这一列读取对应关键字字母的密文。例如:

1
2
3
关键字秘钥:FORTIFICATIONFORTIFICATIONFO
明文: DEFENDTHEEASTWALLOFTHECASTLE
密文: CKMPVCPVWPIWUJOGIUAPVWRIWUUK

Porta密码

一种多字母替代密码。

算法

和上面的博福特加密方式大同小异,依旧采用关键字座位加密的秘钥,但是在加密矩阵的密文字符使用更加隐晦的排列规律。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Keys| a b c d e f g h i j k l m n o p q r s t u v w x y z
---------------------------------------------------------
A,B | n o p q r s t u v w x y z a b c d e f g h i j k l m
C,D | o p q r s t u v w x y z n m a b c d e f g h i j k l
E,F | p q r s t u v w x y z n o l m a b c d e f g h i j k
G,H | q r s t u v w x y z n o p k l m a b c d e f g h i j
I,J | r s t u v w x y z n o p q j k l m a b c d e f g h i
K,L | s t u v w x y z n o p q r i j k l m a b c d e f g h
M,N | t u v w x y z n o p q r s h i j k l m a b c d e f g
O,P | u v w x y z n o p q r s t g h i j k l m a b c d e f
Q,R | v w x y z n o p q r s t u f g h i j k l m a b c d e
S,T | w x y z n o p q r s t u v e f g h i j k l m a b c d
U,V | x y z n o p q r s t u v w d e f g h i j k l m a b c
W,X | y z n o p q r s t u v w x c d e f g h i j k l m a b
Y,Z | z n o p q r s t u v w x y b c d e f g h i j k l m a

在加密过程中是以关键字去寻找明文所对应的字母加密,不再是像上面那样是用明文去匹配关键字的对应字母进行加密
例如:

1
2
3
关键字:FORTIFICATIONFORTIFICATIONFO
明文 :DEFENDTHEEASTWALLOFTHECASTLE
密文: synnjscvrnrlahutukucvryrlany

加密过程:我们取第一个关键字母“F”,并在画面的第一列(包含两个字母的关键列)上找到它。然后,我们沿着画面的’F’行移动,直到到达顶部带有’D’的列(’D’是第一个明文字母),交集就是我们的密文字符’S’。所有字符都重复相同的过程。

运行秘钥加密

这种加密方式也是属于在自动秘钥加密基础上的改进加密方式。其在关键字的选择上不在选择短的关键单词组,而是截取一段完整的话作为对应的关键字。加密使用的矩阵和自动秘钥使用的矩阵一模一样。

算法:
参照自动米要加密,这里就不重复造轮子了。

同调替换密码

同音替换密码是一种替代密码,其中单个明文字母可以被几个不同的密文字母中的任何一个替代。它们通常比标准的替代密码更难破解。与其他替换密码所不同的就是其单个字母可以有多种可供替换的字母,这就让其安全性有很大提高,非常难被破解。

算法

例如:

1
2
3
4
5
6
明文中的字母:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
-----------------------------------------------------
可供替换密文:D X S F Z E H C V I T P G A Q L K J R U O W M Y B N
可供替换密文 9 7 3 5 0 4 6
2
可供替换密文 1

四方密码

使用5x5排列的矩阵,每个矩阵包含25个字母,但是有26个英文字母,所有会将其中两个字母合并成为一个字母表示(由于q和j在英文中较少见,所以默认q可以代表i和它本身)。一般情况下左上角和右下角是明文的字母参照表,右上角和左下角是秘钥的字母参照表。
秘钥可以是任意的,两个秘钥矩阵可以是不一样的。

算法

先将要加密的明文英文字符串每两个分为一组。例如:I LOVE YOU—>IL OV EY OU如果出现单个字符就使用x来补充长度。

1
2
3
4
5
6
7
8
9
10
11
a b c d e Z G P T F
f g h i k O I H M U
l m n o p W D R C N
q r s t u Y K E Q A
v w x y z X V S B L
M F N B D a b c d e
C R H S A f g h i k
X Y O G V l m n o p
I T U E W q r s t u
L Q Z K P v w x y z


先在明文矩阵中找到明文对应的字母’i’和’l’然后在秘钥矩阵中找到对应的密文,密文的确定是以能和明文的两个点构成矩形来确定的。例如这里我们找到仅有的’o’和’g’两个点能满足条件,所以il对应的密文就是og。以此类推就行了

Playfair密码

Playfair算法基于一个5*5的字母矩阵,该矩阵使用一个关键词构造,方法是按从左到右、从上到下顺序,填入关键词的字母(去除重复字母)后,将字母表其作余字母填入。

算法

1.若明文出现相同字母在一组,则在重复的明文字母中插入一个填充字母(eg:z)进行分隔后重新分组(eg: balloon被重新分组为ba lz lo on)
2.若分组到最后一组时只有一个字母,则补充字母z
3.若明文字母在矩阵中同行,则循环取其右边下一个字母为密文(矩阵最右边的下一个是最左边的第一个)(eg: ar被加密为RM)
4.若明文字母在矩阵中同列,则循环取其下边下一个字母为密文(矩阵最下边的下一个是最上边的第一个)(eg: mu被加密为CM)
5.若明文字母在矩阵中不同行不同列,则取其同行且与同组另一字母同列的字母为密文(eg: hs被加密为BP,ea被加密为IM或JM)

例如:

1
2
明文:we are discovered save yourself
密文:UG RM KC SX HM UF MK BT OX GC MV AT LU KV

ADFGVX密码

一种德军在一战中基于广场密码开发的密码,有点类似列转换密码和广场密码的整合。
其由两个关键的秘钥,一是秘钥矩阵,而是关键字秘钥。
例如:

1
2
3
4
5
6
7
8
A D F G V X
--------------
A | p h 0 q g 6
D | 4 m e a 1 y
F | l 2 n o f d
G | x k r 3 c v
V | s 5 z w 7 b
X | j 9 u t i 8

关键字:G E R M A N

算法

矩阵内为秘钥矩阵,里面的字母对应明文的字符,外面的大写是第一次加密出来的密文字母。

例如:ATTACK—>DG XG XG DG GV GD

然后使用关键字秘钥进行二次加密。

1
2
3
4
G E R M A N
------------
D G X G X G
D G G V G D

然后按照字母顺序进行排列二次加密

1
2
3
4
A E G M N R
-----------
X G D G G X
G G D V D G

然后按照列读取最终的密文
XG GG DD GV GD XG

与ADFGVX密码类似的是ADFGX密码,其工作方式和前者一模一样,差别在于后者是5x5的加密矩阵,且不能对J进行加密。

双岐密码

Bifid是将Polybius平方与转置相结合的密码,并使用分割实现扩散。并且这是一个完全没有军事和政府背景的密码。

秘钥的依旧是矩阵秘钥,但是通过秘钥转换后还是需要处理转换

1
2
3
4
5
6
7
1 2 3 4 5
-----------
1| p h q g m
2| e a y l n
3| o f d x k
4| r c v s z
5| w b u t i

算法

在加密明文时,每个字母都会被左侧和上方的数字替换。然后如步骤1(如下)所示将这些文件重叠在一起。例如,’d’在关键方块的第3行第3列,所以3写在第一行,第3行写在第二行。这是为所有明文信件完成的。步骤2:然后把这些数字组合成一定大小的块(这称为周期,并形成密钥的一部分)。在这个例子中,周期是5.然后从左到右读取这些组。步骤3显示从左到右阅读组后的新数字序列,首先是组的最上一行,然后是最后一行。

棋盘密码

一种俄罗斯间谍在冷战中使用的VIC密码
其依旧有一个矩阵秘钥,但和别的矩阵有所区别。

1
2
3
4
5
0 1 2 3 4 5 6 7 8 9
-------------------
f k m c p d y e
3: h b i g q r o s a z
7: l u t j n w v x

第一行是前八个关键字,留下两个空白点。它没有行标签。第二行和第三行标有最上面一行没有得到字母的两个数字,然后填写其余的关键字母。

算法

为了加密,最上面一行的一个字母只是简单地用列上的数字来代替。其他行上的字母被它们的行号替换。

1
2
D E F E N D T H E E A S T W A L L O F T H E C A S T L E
6 9 0 9 74 6 72 30 9 9 38 37 72 75 38 70 70 36 0 72 30 9 4 38 37 72 70 9

生成的数字就是最简单的明文,但是为了安全考虑可以和别的加密方式联用,例如生成一个二次加密的数字秘钥进行加法,再将结果通过矩阵转换为字母。

Trifid密码

一种将替换、转置、分割的密码。初始秘钥被分为三个方块。

1
2
3
4
5
6
7
8
秘钥 = EPSDUCVWYM.ZLKXNBTFGORIJHAQ
square 1 square 2 square 3
1 2 3 1 2 3 1 2 3
1 E P S 1 M . Z 1 F G O
2 D U C 2 L K X 2 R I J
3 V W Y 3 N B T 3 H A Q

将秘钥填入方块中

算法

例如加密:D E F E N D T H E E A S T W A L L O F T H E C A S T L E .第一步意味着在上面的正方形中定位明文字母,D在方形1,行2,列1中,所以D变成121。以同样的方式,E变成111。如果我们垂直写下每个字母对应的数字,就会变成:

1
2
3
4
D E F E N D T H E E A S T W A L L O F T H E C A S T L E .
1 1 3 1 2 1 2 3 1 1 3 1 2 1 3 2 2 3 3 2 3 1 1 3 1 2 2 1 2
2 1 1 1 3 2 3 3 1 1 3 1 3 3 3 2 2 1 1 3 3 1 2 3 1 3 2 1 1
1 1 1 1 1 1 3 1 1 1 2 3 3 2 2 1 1 3 1 3 1 1 3 2 3 3 1 1 2

然后将这些密文数字进行分割,分割的组数一般是5-20自由选择,这里是每五个为一组

1
2
3
4
DEFEN DTHEE ASTWA LLOFT HECAS TLE。
11312 12311 31213 22332 31131 2212
21113 23311 31333 22113 31231 3211
11111 13111 23322 11313 11323 3112

然后按列读取

1
2
3
4
5
113122111311111 123112331113111 312133133323322 223322211311313
S U E F E C P H S E G Y Y J I X I M F O
311313123111323 221232113112
F O C E J L B S P

生成的英文即为密文

希尔密码

一种和线性代数矩阵关联的密码。这里就不描述具体过程了。是一种比较接近现代算法的加密方式。详情看文章传送门

分馏摩尔斯密码

一种摩尔斯电码的变种,有篇文章总结得很好传送门

文章目录
  1. 1. 密码学总结(一) 古典密码汇总
    1. 1.1. Atbash密码
      1. 1.1.1. 算法
    2. 1.2. Rot13密码
      1. 1.2.1. 算法
      2. 1.2.2. 算法
    3. 1.3. 培根密码
      1. 1.3.1. 算法
    4. 1.4. Polybius广场密码
      1. 1.4.1. 例子
    5. 1.5. 列转换密码
    6. 1.6. 自动秘钥密码
      1. 1.6.1. 算法
    7. 1.7. 博福特密码
      1. 1.7.1. 算法
    8. 1.8. Porta密码
      1. 1.8.1. 算法
    9. 1.9. 运行秘钥加密
    10. 1.10. 同调替换密码
      1. 1.10.1. 算法
    11. 1.11. 四方密码
      1. 1.11.1. 算法
    12. 1.12. Playfair密码
      1. 1.12.1. 算法
    13. 1.13. ADFGVX密码
      1. 1.13.1. 算法
    14. 1.14. 双岐密码
      1. 1.14.1. 算法
    15. 1.15. 棋盘密码
      1. 1.15.1. 算法
    16. 1.16. Trifid密码
      1. 1.16.1. 算法
    17. 1.17. 希尔密码
    18. 1.18. 分馏摩尔斯密码