最近上课又重起了密码学,就想对各类密码做一个汇总,看起来更有条理一些:

        加密的分类方式有很多,比如按照一般的加密模式或者密钥的数量来分可以分为对称加密和非对称加密(公共密钥加密),按照加密的方式来分可分为替换和换位,按照明文的处理过程来分可分为Block cipher和Stream cipher,等等。

        我们先用加密方式,即替换与换位,来划分一下古典密码:

     (前提:由于是简单介绍各类密码,所以默认加密明文都是英语26字母(*^▽^*))

 一、替换 (Substitution)

        The letters of plaintext are replaced by other letters or by numbers or symbols.

        也就是说,替换是明文映射到另一个元素,可以是原本明文的元素,也可以是其他元素(数字,符号等)。

  1、Caesar cipher(凯撒密码):

        设:明文空间为P,密文空间为C,加密算法为E,解密算法为D,则密钥k∈{1,2, ... ,25},

                                        C = E(k, P) = (P + k) mod 26

                                        P = D(k, C) = (C - k) mod 26

        注意:(1) 凯撒密码比较简单,就不详细讲述了;

                   (2) 可被暴力破解:① 加解密算法已知

                                                  ② 仅25个密钥,数量太少

                                                  ③ 明文语言已知;

                   (3) 与换位进行区分:换位只能是原本明文进行换位操作,不会有新加元素。

  2、Mono-alphabetic substitution ciphers(单字母替换密码):

        顾名思义,每一个明文元素对应一个密文元素,类似一个密码集。

For example:

             明密文对应表:

              

restHighLevelClient初始化配置密码 represent密码_密码学

             明密文加密效果:

              

restHighLevelClient初始化配置密码 represent密码_ci_02

注意:(1) 密钥集有26!种,即

restHighLevelClient初始化配置密码 represent密码_流程图_03

种;

                   (2) 可被频率分析 (Frequency analysis) 破解。

  3、Homophonic substitution cipher(同音替换密码):

        简单理解就是,一个明文对多个密文。

   For example:

               A = {x, y}, H(x) = {00, 10} and H(y) = {01, 11}

               则H(xy) = {0001, 0011, 1001, 1011}

        注意:依然可以破解,双字母组合频率 (digram frequencies)。

  4、Playfair cipher(波雷费密码):

        使用一个关键词 (keyword),构造一个5*5(基于26个字母)的字母矩阵。

        所需知识点:

           (1) 关键词 (keyword),一般是字母串,不超过25个;

           (2) I和J看做一个字母;

           (3) 将关键词的字母放在矩阵的前面,剩余的字母按顺序填充矩阵;

           (4) 插入填充符 (insert filler),遇到分组中为重复字母或者字母个数不够分组时使用;

           (5) 分组字母在同一行时,各后移一位。如果到达最右侧,则回到本行第一个字母 (back to start from the end);

           (6) 分组字母在同一列时,各下移一位。如果到达最底部,则回到本列第一个字母 (back to top from the bottom);

           (7) 分组字母不同行同列,各字母所在行与分组另一个字母所在列的交点字母即为加密所得。

        For example:

               已知:keyword 为 monarchy,

                          insert filler 为 X,

                          明文 (Plaintext) 为 BALLOON。

               构建矩阵:

M

O

N

A

R

C

H

Y

B

D

E

F

G

I/J

K

L

P

Q

S

T

U

V

W

X

Z

X (LL重复,所以需要填充)

               按照规则进行加密,得:I/JB SU PM NA

        注意:为什么分组为两个字母?行列各需一个。

  5、Polyalphabetic substitution cipher (多字母替换密码):

        使用不同的单字母替换密码,即不同单字母替换密码的组合。

        以Vigenere cipher(维吉尼亚密码)为例:

                           已知:明文 P = restHighLevelClient初始化配置密码 represent密码_ci_04, … , restHighLevelClient初始化配置密码 represent密码_流程图_05

                                      密钥 K = restHighLevelClient初始化配置密码 represent密码_ci_06, … , 

restHighLevelClient初始化配置密码 represent密码_信息安全_07

 Typically m < n,

                                      密文 C = restHighLevelClient初始化配置密码 represent密码_ci_08, … , restHighLevelClient初始化配置密码 represent密码_流程图_09

                           则:restHighLevelClient初始化配置密码 represent密码_加密解密_10 = (restHighLevelClient初始化配置密码 represent密码_ci_11 + 

restHighLevelClient初始化配置密码 represent密码_ci_12

) mod 26,                                   restHighLevelClient初始化配置密码 represent密码_ci_11 = (restHighLevelClient初始化配置密码 represent密码_密码学_14 −

restHighLevelClient初始化配置密码 represent密码_密码学_15

) mod 26

For example:

               已知:密钥为 deceptive,明文为 “we are discovered save yourself”

               则加密为:

                            

restHighLevelClient初始化配置密码 represent密码_密码学_16

注意:(1) m<n时,重复密钥使用;

                   (2) 先选定密钥,再与明文单词模26加。

  6、Vernam cipher(佛纳姆密码):

        该密码的核心就是异或操作 (XOR),在这简单提一下异或操作:

                

restHighLevelClient初始化配置密码 represent密码_信息安全_17

        该密码的流程图为:

               

restHighLevelClient初始化配置密码 represent密码_加密解密_18

        明文密文均为二进制进行操作:

                

restHighLevelClient初始化配置密码 represent密码_信息安全_19

        注意:和一次一密有什么区别?密钥K的要求没有一次一密那么高。

  7、One-time pad(一次性密码):

        密钥 K 是绝对随机的,并满足以下几点:

                      (1) 和明文等长;

                      (2) 密钥不能重复使用;

                      (3) 加解密完成后,密钥要被销毁;

                      (4) 密文中不能有关于明文的任何内容。

       该密码流程图为:

              

restHighLevelClient初始化配置密码 represent密码_加密解密_20

  注意:(1) 构成 K 的字符流随机,那么加密的 C 的字符流也是随机的,所以保证了不被能破解

                  (2) 实际困难:① 需要大量随机密钥 ② 密钥如何分配和保护。

 

        到这,替换密码就汇总结束了,以后有什么新的知识,会继续补充。

        That's all, good luck.