代码改变世界

了解数字证书、数字签名与常见的加密算法

2017-03-12 16:34  hduhans  阅读(6792)  评论(0编辑  收藏  举报

  常见的加密算法可以分为对称加密算法、非对称加密算法和摘要算法,数字签名使用了非对称加密算法和摘要算法来保证数据传输的完整性和安全性。数字证书由权威的CA机构颁发,用于互联网通信时验证通信实体的身份。

一、对称加密

  对称加密指加密和解密使用相同密钥的加密算法,也称为单密钥加密。他的特点是算法公开、计算量少、加密速度快,对于同样大小的传输对象,对称加密效率通常为非对称加密的千倍左右,因此通常被广泛应用于很多加密协议的核心工作(如https在真正数据通信时就使用的对称加密算法)。对称加密算法的缺点是加解密使用同一把密钥,一旦一方密钥泄露,传输的数据就存在安全风险。此外,与多方的通信需要使用不同的密钥,通信双方需要管理大量的密钥。

  常见的对称加密算法有:DES3DESAESRC4IDEA

二、非对称加密

  非对称加密使用一对公钥和私钥来加密通信数据,也称为双密钥加密。公钥和私钥是成对出现的,通信数据使用公钥加密后,只能通过对应私钥来解密,同样使用私钥加密后也只能通过公钥来解密查看。公钥是对外公开的,外界通信方可以很容易获取到,而私钥是不公开的,只存在于己方。服务器使用私钥加密数据往外传输时,可以被持有公钥的客户端解密查看,但客户端使用公钥加密数据传输给服务端时,数据是严格安全的,只有服务器使用私钥才能解密查看。因此非对称密钥数据通信是单向安全的,客户端使用服务端的公钥加密数据传向服务端是严格加密安全的

  非对称加密的主要用途:① 单向传输加密数据,防止中间人攻击。使用公钥加密数据并传输给接受者,可以确保只有接受者才能获得明文信息,一般用于交换对称密钥;② 身份验证和数据校验。发送方使用私钥加密明文数据的hash值,并将明文、加密后的数据和公钥一起发送给接收方,接收方只需要通过公钥解密密文,然后与相同hash算法获取明文的hash值进行比较,一致则说明明文数据没有被篡改,一般用于数字签名

  常见的非对称加密算法有:RSADSADiffie-HellmanECC等。

三、摘要算法

  摘要算法也称为哈希算法、散列算法,可以将任意长度的数据转换成一个定长的、不可逆的数字。只要原文本不同,计算的结果必然不同(几乎不用考虑重复的情况)。摘要算法用于对比信息源是否一致,因为只要数据源发生变化,得到的摘要信息必然不同,通常用于签名校验。

  常见的摘要算法有:MD5SHA-1MACCRC等;

四、数字签名

  数字签名是非对称加密算法和摘要算法的一种应用,能够保证信息在传输过程中不被篡改,也能保证数据不能被伪造。使用时,发送方使用摘要算法获得发布内容的摘要,然后使用私钥对摘要进行加密(加密后的数据就是数字签名),然后将发布内容、数字签名和公钥一起发送给接收方即可。接收方接收到内容后,首选取出公钥解密数字签名,获得正文的摘要数据,然后使用相同的摘要算法计算摘要数据,将计算的摘要与解密的摘要进行比较,若一致,则说明发布内容没有被篡改。 

  实际上,单一的数字签名应用,可能会存在安全风险。假设发送方为A,接收方为B,出现的一个不安全分子为M,原本A将发布内容、数字签名和A的公钥发送给B,结果半道被M截获了,M修改了发布内容,用自己的私钥生成了数字签名,然后将修改的发布内容、M的数字签名、M的公钥发送给了B,B接收时验证一样可通过,但实际上接收的已经是被篡改的数据(见图1)。实际使用中,数字签名常常同数字证书一同出现

图1 单一数字签名被中间人攻击示意图

五、数字证书

  数字证书是由权威的CA机构颁发的无法被伪造的证书,用于校验发送方实体身份的认证。解决如上问题,只需要发送方A找一家权威的CA机构申请颁发数字证书,证书内包含A的相关资料信息以及A的公钥,然后将正文A、数字证书以及A生成的数字签名发送给B,此时中间人M是无法篡改正文内容而转发给B的,因为M不可能拥有这家CA的私钥,无法随机制作数字证书。当然,如果M也申请了同一家CA的数字证书并替换发送修改后的正文、M的数字证书和M的数字签名,此时B接收到数据时,会校验数字证书M中的信息与当前通信方是否一致,发现数字证书中的个人信息为M并非A,说明证书存在替换风险,可以选择中断通信。

  为什么CA制作的证书是无法被伪造的?其实CA制作的数字证书内还包含CA对证书的数字签名,接收方可以使用CA公开的公钥解密数字签名,并使用相同的摘要算法验证当前数字证书是否合法。制作证书需要使用对应CA机构的私钥,因此CA颁发的证书是无法被非法伪造的(CA的私钥泄露不在考虑讨论与考虑范围内)。

  数字证书签名的基础就是非对称加密算法和数字签名,其无法伪造的特性使得其应用面较广,HTTPS中就使用了数字证书来保证握手阶段服务端传输的公钥的可靠性。

参考资料

  数字签名是什么?