加密技术的基础知识

时间:2022-10-13 19:01:15

互联网极大丰富了我们的生活,同时也带来了大量的安全风险。然后就兴起了各种各样的安全技术,其中最底层的就是加密技术。在工作中发现,不管是从事网络、开发还是技术支持,都免不了和加密技术打交道,一般而言,整个密码学技术领域都是由以下几种技术构建:

  1. 对称密码,symmetric cryptography

  2. 公钥密码,public-key cryptography,非对称性密码

  3. 单向散列函数,one-way hash function,保证完整性,检查数据是否被篡改

  4. 消息认证码,message authentication code,简称mac,保证完整性且提供认证,确认消息是否来自期待的对象。

  5. 数字签名,digital signature,保证完整性、提供认证并防止否认的技术。

  6. 伪随机数生成器,pseudo random number generator,简称PRNG

1. 对称加密

简单来说就是加密和解密都使用一个相同的密码。常见的对称加密算法有des、3des、aes等等。

这种方法的优点是加密速度特别快,算法也比较简单,因为简单所以更容易实现用硬件加密。但是缺点也相对比较明显,因为数据加密的关键点在于密钥,如果密钥被窃取了,加密数据就很容易泄露。但是密钥也需要通过互联网传输,这本身就是不安全的,如果为了安全对传输的密钥也进行加密传输,就成了死循环了,首个密钥总是存在被窃取的危险。为了密钥的安全,就需要复杂的密钥管理系统。

以下图为例: 加密技术的基础知识

  1. 发送方和接收方使用对称密钥加密数据

  2. 攻击者可以中途截获密钥

  3. 密钥被截取后,攻击者可以轻易获取数据。甚至可以篡改数据后再使用密钥发给接收方

  4. 接收方不能保证自己收到的数据没被窃取,甚至不能保证数据没被篡改。

2. 非对称加密

就是加密和解密的密钥不是1个,一个密钥用来加密,一个就用来解密,反之亦然。非对称加密中最著名的就是公钥系统,对应的两把密钥就是我们常说的公钥和私钥。常见的非对称算法有DH、RSA、ECC等。

非对称的加密的优点是加密和解密的密钥是分开的,任何一份只要确保自己的私钥不泄露,就可以保证数据不被窃取,自然也就不需要复杂的密钥管理系统了;但是非对称加密的计算量比较大,性能导致的加密速度特别慢,不适合加密大量的数据。所以非对称加密,一般和对称加密结合使用。

以下图为例:

加密技术的基础知识

  1. 发送方使用随机的对称密钥加密原始数据,发送给接收方

  2. 接收方通过网络获取接收方的公钥

  3. 发送方使用接收方的公钥加密自己的随机对称密钥

  4. 发送将公钥加密过的密钥包传给接收方

  5. 接收方使用自己的私钥解密对称密钥包获取随机对称密钥

  6. 接收方使用得到的随机对称密钥解密对称加密数据包,获取原始数据。

  7. 正常情况下,攻击者截获加密数据包无法得到对称密钥,数据安全;攻击者截获加密的对称密钥包,没有接收方的私钥,数据也是安全的。

异常风险:

  1. 发送方获取接收方公钥后,并没有能力判断这个公钥是否接收方的

  2. 攻击者可以拦截接收方发给发送方的公钥,然后将自己的公钥发给接收方

  3. 接收方使用攻击者的公钥加密后,攻击者可以使用自己的私钥解开。然后再用接收方的公钥加密后再发给接收方。

  4. 攻击者拿到密钥后,可以截获加密数据包来窃取甚至篡改数据,接收方并没有能力证明。

3. 数字签名

数据签名就是“非对称加密+散列算法”,目的是为了防止非法的第三者篡改数据。

散列算法就是通过接受一大块的数据,并将其压缩成最初数据的一个fingerprint,也称为指纹或摘要。 这个指纹其实就是一个比最初数据小的定长哈希值,如果你修改了最初的数据,哪怕只改了1位,那么输出的值就会不同。常见的散列算法有MD5和SHA。

通过散列算法得到的值无法反向推到数据本身,这些值也无法说明任何原始明文的信息。散列伏安法多数情况下用来验证数据的完整性,比如我们下载软件的时候,随软件带的md5文件就可以认为是一个指纹,想要验证数据是否被篡改,需要对得到数据再次进行散列运算,用得到的指纹和原始指纹去对比即可,如果一样说明原始数据未被篡改。

通过一方的私钥对指纹进行加密,得到的加密指纹就是签名。

散列算法可以加入上上面的解决方案中,如下图: 加密技术的基础知识

  1. 发送方使用随机对称密钥加密数据发给接收方

  2. 发送方使用接收方的公钥加密对称密钥,发给接收方

  3. 发送方使用散列算法哈希原始数据得到指纹

  4. 发送方使用自己的私钥加密指纹,生成数字签名,发给接收方

  5. 接收方使用自己的私钥解密对称密钥包,得到对称密钥

  6. 接收方使用对称密钥解密加密数据包,得到原始数据

  7. 接收方使用同样的散列算法哈希接收到的原始数据,得到指纹

  8. 接收方使用发送方的公钥解密发送方的数字签名,得到发送方的指纹

  9. 接收方使用自己哈希的指纹和发送方的指纹进行对比,可以确认数据是否被篡改

异常风险:

  1. 如上个案例,攻击者可以使用自己的公钥替换接收发送方的公钥,中间截获数据。

  2. 但是如果攻击者篡改了原始数据,或者指纹数据,接收方收到后,两次指纹的对比会不匹配,得知数据被篡改,但是数据还是有被窃取的风险。

4. 数字证书

数字证书是由证书认证机构(CA)对证书申请者真实身份验证后,用CA的根证书对申请人的一些基本信息以及申请人的公钥进行签名(相当于加盖发证机构的公章)后形成的一个数字文件。实际上,数字证书就是经过CA认证的公钥,除了公钥,还有其他信息,比如Email、国家、城市、域名等。下图就是登录工商银行时使用的证书信息: 加密技术的基础知识

这基本就是目前世界终极的解决方案了,公共CA机构是全球公认的证书机构,公共CA机构之间互信。而接收方因为天然信任证书机构,所以信任证书机构的证书,所以信任证书中的公钥。

所以最终的解决方案如下图: 加密技术的基础知识

  1. 图中闪闪的红星表示最权威的CA,传送中涉及的公钥都包含在CA发放的证书中。

  2. 发送方使用随机对称密钥加密数据发给接收方

  3. 发送方使用接收方的公钥加密对称密钥,发给接收方

  4. 发送方使用的公钥包含在CA签发的证书中,经CA签名过,确保权威,证书中一定是接收方的公钥

  5. 发送方使用自己的私钥加密指纹,生成数字签名,发给接收方

  6. 接收方使用自己的私钥解密对称密钥包,得到对称密钥

  7. 接收方使用对称密钥解密加密数据包,得到原始数据

  8. 接收方使用同样的散列算法哈希接收到的原始数据,得到指纹

  9. 接收方使用发送方的公钥解密发送方的数字签名,得到发送方的指纹

  10. 接收方使用的公钥包含在CA签发的证书中,经CA签名过,确保权威,证书中一定是发送方的公钥

  11. 接收方使用自己哈希的指纹和发送方的指纹进行对比,可以确认数据是否被篡改

以上过程就是一个完整的加密数据传输。解释一下步骤4和11,目前主流的操作系统中,一般都和世界主流的公共CA机构合作,内置了这些CA机构的证书,所以会天然信任这些CA签发的证书,以Windows为例,可以通过证书管理查看到内置在计算机中的受信任的证书。

加密技术的基础知识

而连接使用不在受信任根证书列表时,通常会弹出警告提示,如下:

加密技术的基础知识

至此,形成闭环。

总结

  1. 因为性能的问题,对称加密通常用来加密明文数据。

  2. 对称加密的密钥管理复杂,而且密钥被截取后不安全,所以使用非对称加密来加密对称密钥。

  3. 为了解决数据篡改,使用散列算法对数据进行哈希得到指纹摘要,接收者接受到数据后再次哈希,对比摘要可获知数据是否完整。 为了安全,采用非对称加密摘要。

  4. 为了解决不可否认的问题,引入数字证书。 由权威的CA来发证书,收发双方的公钥通过经过ca签名的证书来确保可信。

  5. 操作系统默认内置了世界主流的ca证书,只要企业向这些ca申请到成功后,得到的证书含自己的私钥。那么操作系统就可用使用默认证书中的公钥来解密。