加密是为了满足以下需求:在不安全的信道上保护所传输信息的机密性、完整性以及可认证性。有两种重要的加密算法——对称密钥与非对称密钥。
对称密钥
在对称密钥系统中,由于加密与解密的算法相同,它们的密钥也是相同的。多年来,最流行的对称密码算法是数据加密标准(DES)。DES是一种分组密码,也就是说每次对固定数目的比特块进行操作。DES使用64比特的数据块与56位的密钥。如今被更高级的AES所取代,AES的不同版本提供了长度不同的密钥,比如128位,192位以及256位,即AES-128,AES-192以及AES-256。
它加密过程效率高,但是密钥的分配和保存是一个问题,在互联网上转发密钥时,如果通信被监听那么密钥就可落入攻击者者手中,加密也就丧失了意义。
非对称密钥
上图过程是加密的过程,因为公钥是可以公开的,那么任何人都可以给私钥的拥有者发送信息,而接受者无法追溯信息的来源。如果这个过程翻过来,就变成了一个认证过程。例如A用自己的私钥加密了一个邮件(用私钥加密也被称为签名),发送给B,B有A的公钥,知道该信息一定来源于A,因为只有A有A的私钥。但是这样,该信息就丧失了加密的属性,因为大家都有A的公钥。
如何即实现加密,又实现认证呢?首先A准备一把公钥和私钥,B也准备一把公钥和私钥,仍是A给B发信息,先用A的私钥进行加密,然后再用B的公钥加密,传递给B。此时,B先用自己的私钥解锁,然后再用A的公钥进行解密。
非对称加密的过程效率比较低,在混合密码系统中,用非对称密钥对一会话密钥进行加密(对称的),然后用会话密钥对文件进行加密。
数字签名过程
非对称加密还是存在一些问题,那就是无法证明公开密钥本身就是货真价实的公开密钥,比如正准备和某台服务器建立公开密钥加密方式下的通信,如何证明收到的公开密钥就是原本预想的那台服务器发型的公开密钥。或许在公开密钥传输途中,真正的公开密钥已经被攻击者替换掉了。
数字签名的功能可用于维护信息的可认证性与不可抵赖性。证书的办法过程如下图所示。
消息认证码
消息认证码(简称为MAC,有时候也叫MIC)用于保证消息的完整性。
以上图为例,介绍消息认证过程。A公司要给B公司发送一个文件,为了保证文件的完整性,A公司首先对文件用加密散列函数进行处理,得到一个固定大小的摘要(或指纹)。加密列散函数需要满足三个特征:
- 原像不可计算性:在给定摘要而未知消息的情况下,很难计算出消息得值。
- 原像不相同性:找到一对消息内容不同,但摘要相同是很困难的。
- 抗碰撞性:找出一对摘要相同,但消息不同是十分困难的。
其中一种常用的加密列散算法是MD5算法。它的输出是一个128位的摘要。使用A的私钥对这份摘要进行签名。然后A公司将文件,摘要以及A的公钥一起发给B。
B使用同样的加密散列函数得到一个摘要。使用A的公钥对签名的摘要进行处理,然后将这两份摘要进行比对,如果一致,则可断定文件没有得到篡改。