什么是签名验签,以及非对称加密算法的使用
什么是签名验签,以及非对称加密算法的使用
在信息安全领域,加密技术是保护数据隐私和安全传输的核心手段。其中,非对称加密算法和签名验签机制是两种重要的加密方式。本文将详细介绍非对称加密的基本原理、签名验签的具体实现方式,以及它们在实际应用中的区别和联系。
1. 非对称加密算法
非对称加密中关于公钥、私钥的一些规则:
- 公钥加密的数据只有私钥能解开,即私钥只能解开自己对应公钥加密的数据。
- 私钥加密的数据只有公钥能解开,即公钥只能解开自己对应私钥加密的数据。
- 公钥可以有很多个,并且是公开的;私钥只有一个,并且不公开。
- 公钥是基于私钥而存在的,通过私钥经过一系列算法是可以推导出公钥,但无法通过公钥反向推导出私钥。
以上规则得出的结论:假设你有一把私钥和公钥,你给你的朋友ABCD一人一把公钥。
- 实现数据加密:如果你要加密一份信息,那很简单,只需要让你的朋友使用你给的公钥加密该信息即可,这样除了你手里的私钥,没有人能解密这份数据。
- 实现身份鉴别:如果你想要以自己的名义给朋友们发送信息,可以用私钥将该信息加密,这样你的朋友们就可以用你给的公钥解开这份数据,以此你的朋友们就能确定这份数据是你发的而不是其他人发的(因为只有你才能用私钥加密,如果使用你的公钥能解开接收到的加密信息,就证明信息就是你发的),这就好像你在信息上签了个名似的。
以上两种实现方式可能存在的问题:
- 实现身份鉴别(即签名验签)过程中,如果公钥是不可信任的:如果公钥被攻击者篡改,攻击者使用自己对应的私钥加密数据,再冒充你进行发送信息,你的朋友发现可以使用当前公钥(已被篡改的)可以解密数据,误以为此信息是由你发送。
- 实现数据加密过程中,如果公钥是不可信任的:如果公钥被攻击者篡改,你的朋友使用攻击者的假公钥加密数据后发送给你,假如攻击者截获了你朋友发送的信息,再使用自己的私钥就可以解密数据,从而造成敏感信息泄露。
非对称密钥体制:即公钥体制不能防御中间人攻击,即上述两个问题,所以应当辅以身份鉴别机制,我们可以借助权威第三方CA机构颁发的电子证书来帮助鉴别,因此就有了CA证书的概念,如果我们信任CA机构,也就是我们信任CA机构所信任的(假设你朋友和你不互相信任,但你朋友信任CA机构,而CA机构可以提供能证明你身份的证书,因此你朋友可以信任你,即信任手里的公钥就是你的)。
2. 签名验签
签名:发送方使用消息摘要算法(例如MD5)对发送的报文原文生成消息摘要,然后用自己的私钥对这个摘要进行加密,得到的密文就是这个报文原文对应的数字签名。通常来说,发送方会把数字签名和报文原文一并发送给接收方,用于接收方对报文原文生成消息摘要,比较二者是否一致,以判断数据是否被篡改。
验签:接收方同时接收报文原文和数字签名后,会使用发送方的公钥对数字签名进行解密,这个过程就被称为验签。成功解密后得到一个消息摘要A,同时使用相同的消息摘要算法(例如MD5)对报文原文进行hash处理,得到一个消息摘要B,最后对比报文摘要A和报文摘要B是否一致,即可确定报文原文是否被篡改过。
数字签名:非对称加密搭配对称加密使用,实现数字签名,常见的方式如RSA搭配SHA256。
数字签名的作用:
- 保证数据的真实性:如果接收方使用发送方的公钥能够成功解密出数据(即验签),就证明该数据是发送方发送的,因为别人没有发送方的私钥,加密不了数据,就生成不了签名,即假冒不了发送方的签名。
- 保证数据的完整性:如果接收方对发送方发送的报文原文使用消息摘要算法(例如MD5)生成hash值,和公钥解密出来的消息摘要一致,就证明数据没有被篡改。
3. 签名和加密的区别
区分签名和加密的概念:
- 签名:目的是为了验证身份,检查篡改,防止重放攻击(可通过加时间戳或者nonce的方式),防止中间人假装自己对外发送假信息,不需要对数据进行加密处理(因为加密了也没有,公钥是公开的,谁都可以解密),因此需要私钥进行加密(签名),用公钥进行解密(验签)。(谁都可以解密,但是只有自己能够加密)。
- 加密:目的是将明文变成密文进行传输,防止消息在传输中被人破解,因此使用公钥加密(谁都可以加密,但是只有自己能够解密),使用私钥解密。
总结:公钥加密、私钥解密;私钥签名(加密)、公钥验签(解密)。
为什么加密时使用公钥加密,私钥解密:既然是加密,那么只有自己能够解密,即只有自己拥有私钥,将公钥进行公开,所有人都可以使用该公钥进行加密,但是只有自己能够解密。如果自己使用私钥不能够进行解密,那么对应的密文也就不是使用自己的公钥进行加密的,即信息已经被篡改。另外,即使使用自己的公钥加密后的密文被窃取,别人也不能够进行解密。
为什么签名时使用私钥加密,公钥解密:既然是签名,那么只有自己能够加密,即只有自己拥有私钥,将公钥进行公开,所有人都可以使用该公钥进行解密,但是只有自己能够加密。如果其他人使用该公钥不能够进行解密(即验签不通过),即对应的密文就不是使用自己的私钥进行加密的,即信息已经被篡改。
4. 双向认证
数据伪造问题:非对称加密由于公钥公开,攻击者拿到公钥,截获客户端发来的消息,然后使用公钥加密伪造一份数据,然后发送给服务器。非对称加密只保证了数据的加密性(即攻击者无法解密数据),这里涉及到数据的完整性和真实性,如果想要解决此类问题,可结合身份验证措施和签名机制。
解决方案:
- 使用双向认证:服务器要求客户端进行身份验证,即客户端也需要提供CA证书给服务器进行认证。
- 引入数字签名:加密和验签同时使用,即发送方和接收方各自有一个公私钥,这样确保了内容即不会被读取(解决明文传输问题),也不会被篡改。发送方用自己的私钥完成数字签名,同时使用接收方的公钥完成报文数据的加密(不推荐),生成密文随同数字签名一同发送给接收方。接收方使用自己的私钥对密文进行解密,得到明文后生成消息摘要A,再使用发送方的公钥进行验签,得到消息摘要B,二者进行比较,确保发送方身份和数据的准确性。
5. 混合加密以及密钥交换
为什么不使用非对称加密的公钥直接对报文数据进行加密:
- 加密效率问题:非对称加密(例如RSA、ECC等)由于其复杂的数学计算,导致其加密速度比对称加密算法(例如AES、DES)要慢得多,影响通信效率。
- 服务端无法加密问题:客户端使用公钥加密的数据确实只有对应的私钥才能解密,但是服务器发送给客户端的数据则不能使用公钥加密,因为客户端没有私钥(私钥不能公开,因为可根据私钥推导出公钥),更不能使用私钥加密,因为公钥公开,任何人都可以解密。
**非对称加密 + 对称加密混合加密方式,实现密钥交换:**前端在发送登录请求时对用户名和密码进行加密,前端生成随机密钥,配合对称加密算法对用户登录数据进行加密,然后使用接收方传输过来的公钥再对随机密钥进行加密,随后将数据密文同密钥密文一同传递给后端,后端接收方通过自己的私钥解密出密钥明文,再用此密钥解密用户的密文数据。
可能存在的问题:此时接收方(即服务器)传输给发送方(即客户端)的公钥存在被攻击者篡改的问题,即前面提到的公钥体制不能防御中间人攻击的问题。因此在SSL/TLS加密协议实现的HTTPS加密传输中就引入了数字签名CA证书的概念,就是对服务器的公钥进行签名验签,保证服务器公钥的真实性。