密码学是信息安全的重要基石,它保证了信息的机密性、完整性、可靠性。本文介绍了密码学的6个重要工具所组成的基础体系。其中6个重要工具分别是:对称密码、公钥密码、单向散列函数、消息认证码、数字签名和伪随机数生成器。
对称密码
对称密码(symmetric cryptography)是指在加密和解密时使用同一密钥的方式。它是最常见的一种加密方式,通过将信息编码,利用公开的加密算法和保密的密钥完成对信息的加密和解密,其中加密过程和解密过程是对称的,因此被称为对称密码。
这里出现了公开的加密算法的概念,人们通常存在一种错误的观点,即保密的加密算法具有更高的安全性,这被现代密码学称之为“隐蔽式安全性”。因为保密的加密算法只要被使用,迟早会公诸于世,想依靠对密码算法本身进行保密来确保机密性的密码系统也就土崩瓦解了。相反,如果加密算法从一开始就没设想过要保密,则它会得到各种攻击的洗礼,从而实现更强的保密性。因此现代密码学的加密方式基本以“公开加密算法+保密密钥”组成。
- 组成:公开的加密算法+保密的密钥;
- 加密过程:A向B发送加密信息t时,需要利用加密算法和密钥对t进行加密;
- 解密过程:加密过程的逆过程;
- 优点:巨大的密钥空间能够抵御暴力破解、算法上没有弱点可以抵御其他类型的攻击、加解密运算效率高等优点;
- 缺点:密钥配送问题(这也是必须用到其它密码技术的原因);
- 常见密码算法:DES、AES等;
- 用途:加密信息;
公钥密码
公钥密码(public-key cryptography)是指在加密和解密时使用不同密钥的方式,与对称密钥正好相反,因此也被称为非对称密码(asymmetric cryptography)。
- 组成:公开的加密算法+公开密钥(公钥)+保密密钥(私钥);
- 加密过程:A向B发送加密信息t时,需要利用加密算法和B的公钥对t进行加密;
- 解密过程:B需要利用解密算法(通常与加密算法相同)和B的私钥对t进行解密;
- 优点:解决了密钥配送的问题;
- 缺点:加解密算法效率低(意味着它无法直接用于信息加密),中间人攻击(B无法确定密文是由A发来的,因此需要引入新的安全技术);
- 常见密码算法: RSA等;
- 用途:加密对称密钥等;
单向散列函数
首先说明,后面这几项技术都不是直接用于加密的。单向散列函数(one-way hash function)有一个输入和一个输出,其中输入称为消息,输出称为散列值。它通过一个不可逆的函数y=f(x)将x映射为y,通过对比传输前后y的变化来判断x是否被篡改。举个例子:假设A要传输t给B,并且要能够让B判断传输过程中是否有人修改过t,那怎么做呢?A可以利用单向散列函数,求出y=f(t),并将t和y一起发给B;B得到t和y后,利用f(t)=y1,判断y和y1是否相同,不同则说明传输过程中t或y出现了错误,信息不完整,相同则说明传输过程中t没有被修改过。
- 组成:单向散列函数;
- 优点:算法效率高、辨别篡改;
- 缺点:无法辨别伪装(这就需要新的安全技术来保证);
- 常见密码算法:MD5、SHA1等;
- 用途:判断篡改、基于口令的加密、消息认证码、数字签名等;
消息认证码
说到这里,B仍然无法确定与他通信的人是A。那如何认证A就是A呢?本节介绍的消息认证码(message authentication code)是一种确认完整性并进行认证的技术,简称MAC。它的思想很朴素,为了确保完整性,需要MAC与信息内容相关,为了能够认证,可以利用公共密钥来提供。很显然,MAC可以用单向散列函数与密钥的组合来实现,这也是现实中MAC的一种实现方案。
- 组成:完整性技术(单向散列函数等)+保密密钥;
- 加密过程:将密钥作为完整性技术的种子引入,从而得到MAC;
- 认证过程:将信息t做相同的操作,并与传来的MAC对比,辨别伪装;
- 优点:辨别篡改和伪装;
- 缺点:存在密钥传递的问题,当然可以引入公钥方案解决,但又会引入中间人攻击的问题(这也是数字签名的作用)。另外也存在无法防止否认的问题;
- 常见密码算法:HMAC等;
- 用途:判断篡改、认证;
数字签名
上一节提到了一种认证方案,但在某些场景下还存在诸多不足,如无法防止否认、无法抵御中间人攻击的问题。无法防止否认是因为密钥相同,无法判断谁发出了这条消息,因此将密钥分开为加密密钥和解密密钥就可以解决无法防止否认的问题。这是不是跟公钥密码很相似,可以将数字签名看成是公钥密码的反过程,用私钥加密来生成签名,用公钥解密来验证签名(这也要求不对称加密算法可逆,由此可是RSA多牛逼)。但前文讨论过RSA算法效率不高,因此数字签名的做法通常:单向散列函数+RSA算法。
- 组成:单向散列函数+公钥密码算法+公钥;
- 加密过程:A将信息t经过单向散列函数运算得到h,利用A的私钥对h加密得到数字签名s;
- 认证过程:B收到t和s,利用A的公钥对s进行解密,再将t散列,对比两者是否一致即可。
- 优点:能够识别篡改和伪装,还可以防止否认;
- 缺点:由于用到了公钥密码,那仍然无法理想的解决中间人攻击,因此提出了证书的概念;
- 常见密码算法:RSA等算法组合;
- 用途:各种需要认证的场景;
证书
通过上面的讲解可以看出,密码学的基础是对称密码+公钥密码,但它们仍然无法抵御中间人攻击,也即M想办法阻断A和B的直接通信,同时伪装成B然后与A通信,伪装成A然后与B通信。这个问题在密码学看来就是个死循环,因此需要引入额外的技术——社会学知识:让公钥以及数字签名技术成为一种社会性的基础设施,即公钥基础设施(public key intrastructure),简称PKI。而证书,就是将公钥当作一条消息,由一个可信的第三方对其签名后所得到的公钥。
伪随机数生成器
前面介绍的几项技术仿佛能保证信息的安全性,但其中仍然存在着坑:密钥的由来以及各种算法参数的由来。很显然,如果它是由特定的序列来生成的,那么攻击者很容易就能推测出密钥。那如何才能让攻击者没法推测出来呢?那就是用随机数。可又出现了一个问题,怎么得到随机数呢?一次次的扔硬币肯定不行,那还是需要一个算法来快速的生成类似随机数的数,这就是伪随机数生成器。因此这个伪随机数生成器的算法还是需要一番功夫的,这里就不再赘述。
总结
至此,如果A和B有了以上6项技术,那么它们就足以保证通信机密性、完整性和可靠性,也就意味着这6项技术构成了现代密码学的技术栈。如果有兴趣深挖,可以再详细了解各项技术。