3

加密技术的基础知识_httpblog.51cto.com的技术博客_51CTO博客

 1 year ago
source link: https://blog.51cto.com/u_137319/5753247
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

  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等。

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

以下图为例:

加密技术的基础知识_原始数据_02
  1. 发送方使用随机的对称密钥加密原始数据,发送给接收方

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

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

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

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

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

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

异常风险:

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

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

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

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

3. 数字签名

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

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

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

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

散列算法可以加入上上面的解决方案中,如下图:

加密技术的基础知识_数据_03
  1. 发送方使用随机对称密钥加密数据发给接收方

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

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

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

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

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

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

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

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

异常风险:

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

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

4. 数字证书

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

加密技术的基础知识_原始数据_04

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

所以最终的解决方案如下图:

加密技术的基础知识_非对称加密_05
  1. 图中闪闪的红星表示最权威的CA,传送中涉及的公钥都包含在CA发放的证书中。

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

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

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

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

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

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

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

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

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

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

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

加密技术的基础知识_数据_06

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

加密技术的基础知识_数据_07

至此,形成闭环。

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

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

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

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK