密码学的发展的三个阶段:
手工阶段(传统密码学)
从古代到1949年为密码学诞生的前夜。这一阶段虽然有众多密码实践,比如两次世界大战中通信密码的大规模应用和密码的破译活动,但密码技术不是一种科学,而可称之为一种艺术。
这一时期的密码专家常常靠直觉、猜测和信念来设计、分析密码,而不是凭借推理和证明。
机械阶段(传统密码学)
1949年,香农(Claude Shannon)在《贝尔系统技术杂志》上发表论文《保密系统的通信理论》,为对称密码系统奠定了理论基础,从而密码成为一门科学。而从1949年到1975年这段时间内,密码学的理论进展不大。
电子计算机出现以后(现代密码学)
直到1976年,Diffie和Hellman发表了《密码学的新方向》一文,建立了公钥密码系统,引发了密码学上的一次革命性的变革。
密码学的四个空间:
密码学的三个操作:
加密
明文、加密算法 —— 【加密密钥的作用下】 ——> 密文
解密
密文、解密算法 —— 【解密密钥的作用下】 ——> 明文
破译
密文、解密算法 —— 【没有解密密钥的情况下】 ——> 明文
老师手迹~
1、老师提问:上图里对称加密下面的 C、D 的英文全称是什么?
答: 扩散(Diffusion) 和 混淆(Confusion)。
2、老师提问:现代密码学为什么N个人两两通讯所需的算法数只有1?
答:算法公开,所有的秘密都在密钥上。
3、老师提问:公开加密 中公开的是什么?
答案 :加密算法,解密算法,一部分密钥都是公开的。私钥是保密的。
密码的安全性取决于以下几点:
密码算法本身的安全性(质变)
密钥的长度(量变)
随机数发生器的随机性(熵)
熵是不确定性的量度,密钥空间为 2 128 2^{128} 2128(不完全随机)并不意味着熵就能达到128,声称的熵和实际达到的熵不一样。熵为128只能说明破解密钥的最大工作量,丝毫不能说明最小量。
随机数完全随机 ——> 密钥出现概率相等 ——> 达到最大熵
算法和密钥都必须保密,如模3的恺撒加密算法。
缺点是:N个人两两相互通信则需要互不相同的算法太多。
理论不可破解的加密算法:一次一密钥(无实用价值,密钥和明文一样长)
计算不可破解的加密算法:如,在现有商用计算机条件下,112 位的 3DES 算法 和 1024 位的 RSA 算法。
密码学常见表示:
密码学基本要求:
知道 K 时, C = E ( M , K ) C = E(M,K) C=E(M,K) 要容易计算
在某个加密算法E下,对明文M使用密钥K加密,获得的密文为C
知道 K 时, M = D ( C , K ) M = D(C,K) M=D(C,K) 要容易计算
在某个解密算法D下,对密文C使用密钥K解密,获得的明文为M
不知道 K 时,由 C 不容易推导出 M(难以破译)
设计原则:
假定明文是 M = ( m 0 , m 1 , … , m n − 1 ) M = (m_0,m_1,…,m_{n-1}) M=(m0,m1,…,mn−1)
用下述算法 C i = E K i ( m i ) = ( m i + K i ) ( m o d 26 ) 0 ≤ i < n ( 1 ) C_i = E_{Ki}(m_i) = (m_i + K_i)(mod 26) 0\leq i < n(1) Ci=EKi(mi)=(mi+Ki)(mod26)0≤i<n(1)
可以得出密文 C = ( C 0 , C 1 , … , C n − 1 ) C =(C_0,C_1,…,C_{n-1}) C=(C0,C1,…,Cn−1)
把明文的每一位( M i M_i Mi)加上密钥的每一位( K i K_i Ki),模上26,得到密文的每一位( C i C_i Ci),这就是流密码体系,明文与密文一一对应。
有以下几点要求:
明文为 send help,由 0-a,1-b,2-c,3-d,4-e … 对应规则可知:
M = ( 18 , 4 , 13 , 3 , 7 , 4 , 11 , 5 ) , n = 8 M = (18,4,13,3,7,4,11,5),n=8 M=(18,4,13,3,7,4,11,5),n=8
上面提到,把明文的每一位( M i M_i Mi)加上密钥的每一位( K i K_i Ki),模上26,得到密文的每一位( C i C_i Ci)。
通讯双方在知道密钥(K)的情况下,可以很容易的将密文©还原为明文(M)。
老师提问:一次一密密码例子中,由密文5 - 密钥20,不够减怎么办?
答:由于算法中明文的每一位与密钥相加后会模26,因此解法为: 5 + 26 − 20 = 11 5+26-20 = 11 5+26−20=11
不知道 K 无法破解出明文 M:
密钥序列 2 6 n 26^n 26n 可能是个天文数字,用穷尽搜索方法工作量大。
上述例子中 K=(4,3,2,21,22,24,20,20)
时,由同一个密文 C,可生成另一个有意义明文:M =(t,o,m,i,s,i,1,1)。
“send help” 和 “tom is ill” 作为明文的可能性相同,获悉密文丝毫不能增加破译的可能性。
实际不可攻破的密码系统是指:它们在理论上是可以攻破的,但所需计算资源超出实际的可能性。
对称加密算法的唯一功能:保证机密性的加密和解密(与后面的公开加密算法区分)
特点:加密密钥和解密密钥完全相同,相反过程迭代就可解密。
常见的对称加密:
对称加密的优点:
对称加密的缺点:
公开加密算法具有难解性(通常是难以解决的数学难题)。
公开加密算法公开了:加密算法,解密算法,一部分密钥。
公开加密算法的三个功能:
常见的公开加密算法:
RSA
基于大合数分解成大质数的困难。(可用于加密和数字签名)
公开密钥的三个功能都可以做到,缺点是速度慢
D-H
基于有限域上计算离散对数的难解性。(只用于密钥交换)
椭圆曲线
基于椭圆曲线点群上计算离散对数的难解性。(可以取代RSA)
公开密钥的三个功能都可以做到,并且速度比RSA快
公开加密算法的发展方向
DSS(数字签名标准)
只能进行数字签名
两个大质数 (1024bi) 相乘容易,但将一个大合数分解成两个大质数难(计算上不可行)。
相互通信的每个用户生成一对密钥(N个人共有2N个密钥),一个可以公开发布(公钥),另一个自己使用,只能自己知道(私钥)。
为什么公开加密算法中密钥需要1024 位强度才够,而对称加密只需要100多位?
1)对称密钥是完全保密的,所以短密钥就可以具有高强度;
2)公开密钥算法毕竟公钥已公开,公钥和私钥肯定有一定联系(尽管难以推导),所以长密钥才安全。
对称加密系统中,由于加密的密钥就是解密的密钥,因此对称加密担心泄露密钥。
公开加密系统中,用户的公钥不担心泄密,但是担心公钥被人篡改,也称为公钥担心被假冒。解决方案是,利用 CA(电子认证服务),由CA这个可信第三方来颁发数字证书,保证公钥数据的真实性。
公开加密算法的两种用法:
情况:A 发送消息给 B
A 用 B 的公钥加密 ——> B 用自己私钥解密
非 B 不能得到 A 发送的消息(保证了机密性)
A 用自己私钥加密 ——> B 用 A 的公钥解密
别人也不能假冒 A 发送消息(没有 A 的私钥,其他无法用A 的公钥解密开,因此无法假冒 A)
A 也不能否认发送过该消息(数字签名不可否认)
以上用法有两个前提:
B 要确认自己得到的声称是 A 公钥的密钥确实是 A 的公钥,而不是其他人的公钥(否则别人就可以冒充 A 发送消息, 也可以得到原来是发送给 A 的机密数据)—— 需要从 CA 处得到 A 的公钥,CA 以自己的私钥加密 A 的公钥担保,而 CA 的公钥众所周知。
综合上述两种用法:
加密:A 先用自己的私钥加密,再用 B 的公钥加密
解密:B 先用自己的私钥解密,再用 A 的公钥解密
公式化描述:
C = E B 的 公 钥 ( E A 的 私 钥 ( M ) ) C = E_{B的公钥}(E_{A的私钥}(M)) C=EB的公钥(EA的私钥(M)) —> M = D A 的 公 钥 ( D B 的 私 钥 ( C ) ) M = D_{A的公钥}(D_{B的私钥}(C)) M=DA的公钥(DB的私钥(C))
以上操作:
老师问题:讨论A发消息给B的所有情况:
(1)A用自己的公钥加密,能否加密,有没有意义?
(2)A用自己的私钥加密,能否加密,有没有意义?
(3)A用B的公钥加密,能否得到B的正确公钥,安全意义?
(4)A用B的私钥加密,有没有意义?
接收端不可否认 —— 数字签名收条(S/MIME v3)
时间不可否认(抗重放)—— 时间戳
优点:
产生密钥个数少,公开分发密钥
数字签名
适用于互联网环境
缺点:
公开加密与对称加密结合使用,形成了 PGP 加密算法雏形 (简单了解)
A 发送前:
B 接收后:
雪崩效应:明文修改一点点,散列函数不变,散列值发生巨大变化
(1)算法公开:MD5、SHA1、…
(2)数字指纹(压缩函数):使得散列算法具有完整性(数据在发送过程中不被破坏,发怎样收怎样)
(3)散列算法与加密算法的区别:
(4)如何用散列算法实现完整性:
(5)冲突(碰撞)