密码学分为两个学科: 密码编制学, 密码分析学
密码编制学: 研究密码的编制,即如何加密
密码分析学: 研究密码的破解,即如何破译
密码学基本安全目标:
- 保密性
- 完整性
- 可用性
一个密码体制由5个部分组成:
(1).明文空间M
,全体明文的集合
(2).密文空间C
,全体密文的集合
(3).秘钥空间K
,全体秘钥的集合,每一个秘钥K由加密秘钥Ke和解密秘钥Kd组成 K = < Ke, Kd>
(4).加密算法E
,一族由M到C的加密变换
(5).解密算法D
,一族由C到M的解密变换
对称密码体制
: 加密密钥Ke = 解密密钥Kd 的密码体制,也叫单密钥密码体制或传统密码体制
双密钥密码体制
: 加密密钥Ke != 解密密钥Kd 的密码体制
公钥密码体制
:在计算上,Kd无法由Ke推出,即得到Ke无法推出Kd,从而将Ke公开的密码体制
密码的可破译
:通过明文-密文对,能够推算出密钥,那么这个密码就是可破译的
密码的绝对不可破译
:攻击者无论截获多少密文或者用什么技术方法攻击都不能被攻破,理论上是存在的,这就是”一次一密
“密码,但是由于密钥管理上的困难,这种密码是不实用的;也就是说理论上,只要有足够多的资源,那么任何实际可使用的密码都是可破译的
密码的攻击方式:
(1)穷举攻击法:
攻击者一次遍历所有可能的密钥对密文进行解密,直到得到正确的明文;或者用一个确定的密钥对所有可能的明文进行加密,直至与密文相同
(2)数学分析法:
通过利用某些密码学特性,或者加密算法的漏洞,通过数学求解的方式来破译密码,这是目前各种密码的主要威胁
(3)基于物理的攻击:
利用密码系统实现过程中的各种旁路信息泄露,推导出密码系统中的重要参数;比如:功耗攻击,电磁场分析,时间比较攻击等
根据可利用的数据资源分类:
(1)仅知密文攻击:
攻击者仅根据截获到的密文进行破解,所能利用的数据资源只有密文,这是对攻击者最不利的情况
(2)已知明文攻击:
攻击者已经知道某些明文-密文对,来攻击密码。例如:知道一段了明文中的前几个单词,如当用户终端送到计算机的数据中以”LOGIN”标准词开头,或者一段程序中经常有”IF”, “ELSE”, “END”, “RETURN”等关键词的密文有规律的出现,攻击者可以合理的猜测它们。一个密码仅当它经得起已知明文攻击才是可取的
(3)选择明文攻击:
攻击者能够选择自定义的明文来进行加密,获得相对应的密文,然后通过分析明文-密文对,来破译出密钥。也就是说攻击者可以通过选择一些容易破解出密钥的明文来进行加密,如单个的字母,数字,或者某些常用的单词如login,admin,root等,这种攻击方式主要攻击数据库或者计算机文件系统
(4)选择密文攻击:
攻击者可以自定义密文并获得相对应的明文,然后通过密文-明文对,来分析出密钥。这种攻击方式主要针对公开密钥密码体系,特别是攻击其数字签名
古典密码学实例:
1.置换密码
将明文中的字母重新排列,字母本身不变,只是位置改变了,这样编成的密码叫置换密码
例如把明文按照某一顺序排列成一个矩阵,其中不足的位置用$
填充,$
是明文中没有的一个符号。然后按照另一顺序选出矩阵中的字母形成密文,最后截成固定长度的字母组作为密文
例:
明文: MING CHEN WU DIAN FA DONG FAN GONG
矩阵: M I N G C H
E N W U D I
A N F A D O
N G F A N G
O N G $ $ $
密文: MEANO INNGN NWFFG GUAA$ CDDN$ HIOG$
置换密码比较简单禁不起已知明文攻击,所以需要与其他密码相结合。
2.代替密码
首先构造一个或多个密文字母表,然后用密文字母表中的字母或字母组
来替代明文中的字母或字母组
,各字母或字母组的相对位置不变,但其本身改变了,这样编成的密码叫替代密码
单表替代密码: 仅使用一个密文字母表,并且用密文字母表中的一个字母来替代明文字母表中的字母
例:
设A为明文字母表,其中包含n个字母
A = {a0,a1, a2, a3, ..., an-1}
设B为密文字母表,其中包含n个字母
B = {b0, b1, b2. b3, ..., bn-1}
定义一个由A到B的映射f: A -> B
f(ai) = bi,也即A1=B1, An-1=Bn-1
设明文M = (m0,m1,m2...,mn-1)
则密文C = (f(m0), f(m1)..., f(mn-1))
*密钥也就是映射函数f或者密文字母表B
简单替换密码:
(1)加法密码/凯撒加密:
映射函数f为:
f(ai) = bi = aj
j = (i + k) mod n
其中, ai ∈ A, 0 < k < n
例:
选 K = 3, n = 26
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 = {D,E,F,G,H,J,I,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A,B,C}
明文: MING CHEN WU DIAN FA DONG FAN GONG
密文: PLQJ FKHQ ZX GLDQ ID GRQJ IDQ JRQJ
首先明文第一个字母M,然后在A中找到M,然后通过映射函数,找到B中对应的字符,以此类推,得出密文
破译方法:
穷举分析:由映射函数可分析得知,密钥就是K(偏移整数),而k是有范围的,只有 n-1 个取值。对于明文字母表为26个字母的情况来说(明文里面都是字母),k只有25种取值 1-25 ,那么进行穷举即可破译出密钥K,从而得到明文。即使明文字母表为8位扩展ASCII码
(2)乘法密码:
映射函数f为:
f(ai) = bi = qj
j = ik mod n
其中,要求k与n互素,因为一旦k与n不互素,那么将会造成多个明文字母对应1个密文字母,这将造成无法解密
例:
选 k = 5, n = 26
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 = {A,F,K,P,U,Z,E,J,O,T,Y,D,I,N,S,X,C,H,M,R,W,B,G,L,Q,V}
明文: MING CHEN WU DIAN FA DONG FAN GONG
密文: IONE KJUN GW POAN ZA PSNE ZAN ESNE
破译方法:
穷举分析:根据映射函数可知,密钥是K,而K为了满足条件与n互素,对于明文字母表是26个字母的话,那么n=26,去掉K=1的情况(恒等),那么K的取值只可能为3,5,7,9,11,15,17,19,21,23,25这11种情况,那么只要最多试11次即可破解出密钥K,得到明文
(3)仿射密码:
仿射密码: 乘法密码与加法密码相结合
映射函数f为:
f(ai) = bi = aj
j = (ik1 + k0) mod n
其中,要求k1与n互素,0 <= k0 < n, 且不能同时有k1 = 1, k0 = 0
例:
选 k1 = 3, k0 = 2, n = 26
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 = {C,F,I,L,O,R,U,X,A,D,G,J,M,P,S,V,Y,B,E,H,K,N,Q,T,W,Z}
明文: MING CHEN WU DIAN FA DONG FAN GONG
密文: MAPU IXOP QK LACP RC LSPU RCP USPU
破译方法:
穷举分析: 根据映射函数可知,密钥是K1和K0,K1和n互素,k0有n-1种取值,对于明文字母表是26个字母的情况,那么K1取值有12种情况,K0有26种取值,那么总共的密钥也就是12 x 256 = 312种情况,去掉K1和K0同时为0的情况,也就是311种情况,这对于计算机来说微不足道。破译出K1和K0,从而得到明文
3.多表密码
多表密码: 使用多个密码表对同一个字母进行加密,即每一个字母可能有多种可能的字母来替代
首先构造d个字母表:
Bj = {bj0, bj1, bj2 ... bjn-1} j=0, 1, 2 ... d-1
定义d个映射
fj: A -> Bj
fj(aj) = bj1 j = (ik) mod n
明文M = (m0, m1, m2 ... md-1, md, ...)
密文C = (f0(m0), f1(m1), f2(m2) ... fd-1(md-1), fd(md) ...)
*密钥就是这组映射函数或者密文字母表
维吉尼亚密码:
维吉尼亚密码: 使用26个密文字母表,像加法密码一样,依次把明文字母表右移0,1,2…,25位,形成一个26 X 26的密文字母表。然后选用一个一个词组或者短语作为密钥,用密钥来控制使用密文字母表的哪一行。这个密码字母表又叫维吉尼亚方阵。
维吉尼亚方阵:
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
任取一面为明文字母,另一面则就是密钥字母
替代规则:
利用明文字母行和密钥字母列的交点作为密文字母
如: 明文字母为 h,密钥字母为 s,那么密文就是 Z
例:
密钥选定为 HELLO
明文: MING CHEN WU DIAN FA DONG FAN GONG
密钥: HELL OHEL LO HELL OH ELLO HEL LOHE
密文: TMYR QOIY HI KMLY TH HZYU MEY RCUK
破译方法: 维吉尼亚方阵反替代
3.代数密码(Vernam密码)
Vernam密码中明文,密钥,密文都用二元数字
表示(二进制数)
Vernam密码: 首先将明文和密钥表示成二元序列(二进制数ascii),然后按位模2相加
得到密文
例:
明文: DATA
1000100 1000001 1010100 1000001 (ascii转化为二进制数)
密钥: LAMB
1001100 1000001 1001101 1000010 (ascii转化为二进制数)
密文: 0001000 0000000 0011001 0000011 (按位模2相加)
Vernam密码经不起已知明文攻击
【*】对于单表密码的破译方法: 频率分析法
各个字母在英文文章中出现的频率:
a 8.2 b 1.5 c 2.8 d 4.3
e 12.7 f 2.2 g 2.0 h 6.1
i 7.0 j 0.2 k 0.8 l 4.0
m 2.4 n 6.7 o 7.5 p 1.9
q 0.1 r 6.0 s 6.3 t 9.1
u 2.8 v 1.0 w 2.4 x 0.2
y 2.0 z 0.1