数字签名与数字证书

in OS/Network with 0 comment

数字签名

数字签名,就像现实中的文件签字盖章,别人一看到这个签字盖章就知道这个文件是谁的,同样数字签名也起到这个作用。

现在比如有一段文本 'hello, digital signature', 这段文本首先使用HASH算法(MD5,SHA1,SHA256等)生成摘要(digest),接着用非对称加密算法比如(RSA)的私钥对摘要(digest)进行加密,这样生成一串字符就是数字签名(signature)。然后把文本'hello, digital signature' + 数字签名 + RSA的公钥一起发送到远程。

紧接着,上边生成的数字签名(signature)通过网络传递到远程,远程通过RSA的公钥对数字签名进行解密,得到摘要(digest)和文本信息'hello, digital signature',由此证明这对RSA的公钥与私钥是一对,因为能解开这个数字签名, 然后再对解密的文本信息 'hello, digital signature' 使用相同的HASH算法,将结果与解密的摘要进行比对,如果一致,说明文本信息完整,没有被改动过。

因此,数字签名算法保证了数据传输的安全性(RSA)与完整性(Hash)。

数字证书

上边的过程一般是没问题的,但是如果在传输的过程中 文本 + 数字签名 + RSA的公钥 被第三方劫持了,这时劫持者就可以把RSA的公钥换成自己的,同时用自己的一套数字签名算法对文本进行签名,接收方接收到公钥后同样可以进行解密,验证摘要等操作。

因此要保证信息传输过程不被第三方劫持篡改,就要保证传输过程中的RSA公钥不被修改,这时候数字证书 CA(digital signature)就派上用场了, 数字证书就是要保证发送方的公钥不被篡改。数字证书同样使用非对称加密算法,如RSA, 用私钥对发送者的公钥和一些其它信息进行加密生成数字证书CA,当然这个CA必须是大家都信任的,有公信力才行, 保证它无法被伪造。

这时,发送方发送的信息就是 文本 + 数字签名 + RSA的公钥 + 数字证书 ,这时接收方使用制作数字证书时对应的公钥对信息进行解密,拿到的RSA的公钥就能确保这个公钥就是发送者的,确保是没有被篡改过的,这一过程一般都是在本地计算机完成的,比如windows系统中查看数字证书(个人理解,这里存储的就是制作数字证书时对外提供的公钥),这里的受信任的根证书颁发机构都存储在计算机本地。

微信图片_20210624104848.png

数字证书使用场景https

  1. 首先,客户端向服务器发出加密请求。 服务器用自己的私钥加密网页以后,连同本身的数字证书,一起发送给客户端
  2. 客户端(浏览器)的"证书管理器",有"受信任的根证书颁发机构"列表。客户端会根据这张列表,查看解开数字证书的公钥是否在列表之内。
  3. 如果数字证书记载的网址,与你正在浏览的网址不一致,就说明这张证书可能被冒用,浏览器会发出警告
  4. 如果这张数字证书不是由受信任的机构颁发的,浏览器会发出另一种警告。
  5. 如果数字证书是可靠的,客户端就可以使用证书中的服务器公钥,对信息进行加密,然后与服务器交换加密信息。

常见摘要算法

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

常见的摘要算法有:MD5、SHA-1、MAC、CRC等

常见对称加密算法

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

常见的对称加密算法有:DES、3DES、AES、RC4、IDEA等。

常见非对称加密算法

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

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

常见的非对称加密算法有:RSA、DSA、Diffie-Hellman、ECC等。

评论已关闭.