基础概念
- 消息(明文):Message or Plaintext ——用M或者P表示
- 密文:Ciphertext——用C表示
- 加密算法:Encryption——C()
- 解密算法:Decryption——M()
- 加密过程:E(M)=C;解密过程:D(C)=M。这个过程一般表示传统的基于算法安全性的加密方法,但是这种方法当今几乎是不可行的,只会用于低密性的应用。
- 引入密钥K来解决算法必须要保密的特性。这种算法基于密钥的安全性
- 加密过程:EK(M)=C;解密过程:DK(C)=M。这样基于密钥的安全,密码算法可以公开。
- 对称算法:加密密钥可以从解密密钥中推算出来,反过来也可以,大多数对称算法的加解密用的同一个密钥。
- 非对称算法(公开密钥算法):这种算法的加密密钥和解密密钥不相同。
- 非对称加密的两个密钥,加密密钥叫做公开密钥,解密密钥叫做私人密钥。数字签名中可用私人密钥加密,公钥解密。
- 序列算法和分组算法。现代计算机密码学典型分组长度为64位,这个长度长到难以被分析破解但小到方便使用。
密码分析
def:在不知道密钥的情况下恢复明文。
泄露:密钥通过非密码分析方式的丢失。
常用的密码分析攻击方式主要有这4种:
- 唯密文攻击:
- 已知明文攻击:
- 选择明文攻击:
- 自适应明文攻击:
Kerckhoffs假设:如果新密码系统的强度依赖于攻击者不知道算法的内部机制,那注定会失败。
好的密码算法是经过世界上最好的密码分析家多年的攻击,但还是不能破译的算法。
一次一密乱码本
可以说是一种理想的绝对安全的加密方案。原理很简单,通信双方手中都有一本乱码本,这个密码本就是个大的不重复的真随机密钥字母集,这个密钥字母集被写在数张纸上,粘成一个乱码本。
加密过程就是明文字符和乱码本上的对应字符进行模26加法。每次通信完即销毁对应的乱码页。
只要攻击者没有当时的乱码本,就无法进行攻击。因为这种方式各个字母的出现有均匀的频率分布。
但是这个算法在目前来说,基本是用不上了。用于计算机通信的话,存在很多问题,比如存储这么大的密钥本身很不经济,比如一次一密本身是不提供鉴别的。
计算机算法
目前常用的计算机密码算法很多,最通用的几种:
- DES:最通用的计算机加密算法,一种对称算法
- RSA:最流行的公开密钥算法,可以用作加密和数字签名
- DSA:数字签名算法,也是公开密钥算法,只用做数字签名
单向函数
单向函数的概念是公开密钥密码的中心,是一个基本结构模块。
单向函数就是说,计算起来容易,求逆很难,也就是说已知x,求f(x)很简单,但已知f(x)求x很难。很难就是说在计算上的耗费是非常大的:世界上所有的计算机一起计算要计算数百万年的时间。
单向函数不能用于加密,因为你加密了他之后,对于接收者来说怎么去得到明文呢?比如你在盘子上写上你要说的话,然后把盘子砸个稀烂,把碎片给你朋友,让他读上面的消息。
所以要用到陷门单向函数。这是一个有秘密陷门的特殊单向函数。它在反向上依然是难以计算的,但是如果你知道那个秘密陷门,就能很容易计算出来。比如一个精密器件,拆开来让你去还原,非常困难,但是给你一个组装说明说,就很容易还原了。
单向散列函数
one-way hash function——压缩函数,收缩函数,消息摘要,指纹,密码校验和,信息完整性检验(MIC),操作校验码(MDC)。
它是现代密码学的中心,是许多协议的结构模块。
公开密钥密码系统通信
公开密钥密码系统主要就是基于陷门单向函数,这个陷门就是私人密钥。
在这个系统中,每个人都有自己的公钥和私钥,公钥可以公开,放在公共数据库中都行,任何人需要和你通信,就在数据库中取出公钥,加密消息发给你,而只有你能用私钥解密消息,所以协议大致如下:
- Alice从数据库中取得Bob的公钥
- Alice用这个公钥加密消息,传送给Bob
- Bob接收后用私钥解密消息
在这个过程中,即使Eve从信道中取得了加密后的消息,但是由于没有私钥,所以无法解密。
混合密码系统
公开密钥算法不会代替对称算法,他一般不用来加密消息,一般都是用来加密密钥(对称密码的密钥)的,理由:
- 公开密钥算法比对称算法慢1000倍。(这个应该主要是说的RSA比DES)
- 公开密钥密码系统对选择明文攻击是脆弱的。使用公钥加密过程:Ek§=C,因为公钥和算法是公开的,如果P是n个可能的明文集中的一个明文时,攻击者只需要加密这n个明文,对比密文就可以得出P,虽然拿不到私钥,但是能拿到P有时候就够了。对称密码就没这个问题,因为攻击者连密钥都拿不到。
所以如上所说,公开密钥密码一般用来保护和分发会话密钥(Session Key),这个Key用于对称算法,协议:
- Bob给Alice发他的公开密钥
- Alice那边产生随机会话密钥K,用Bob的公钥加密这个K,把产生的EB(K)发送给Bob
- Bob用私钥恢复:DB(EB(K))=K,得到这个会话密钥K。
- 这样两个人就都有了密钥K,可以进行基于对称密钥算法的通信会话
这种混合密码系统,解决了对称密钥会话中,密钥分配和管理的问题。