您现在的位置是:首页 > 技术笔记 > 密码学密码学
数字签名
冰山2019-10-09【密码学】人已围观
简介1.数字签名
1.1 从消息认证码到数字签名
1.2 签名的生成和验证
1.3 非对称加密和数字签名
1.4数字签名的方法
1.5通过RSA实现数字签名
1.5.1 生成数字签名
1.5.2 验证数字签名
1.6 通过椭圆曲线实现数字签名
1.6.1秘钥对称的生成, 并保存到磁盘
1.6.2使用私钥进行数字签名
1.6.3使用公钥验证数字签名
1.7 数字签名无法解决的问题
1.数字签名
1.1 从消息认证码到数字签名
消息认证码的局限性
还记得我们上篇文章所说的消息认证码吗,我们可以识别消息是否被篡改或者发送者身份是否被伪装,也就是可以校验消息的完整性,还可以对消息进行认证。然而,比如在出具借条的场景中却无法使用消息认证码,因为消息认证码无法防止否认,也就是说不能证明借条是谁签的。
消息认证码之所以无法防止否认,是因为消息认证码需要在发送者Alice和接收者Bob两者之间共享同一个密钥。正是因为密钥是共享的,所以能够使用消息认证码计算出正确MAC值的并不只有发送者Alice,接收者Bob也可以计算出正确的MAC值。由于Alice和Bob双方都能够计算出正确的MAC值,因此对于第三方来说,我们无法证明这条消息的确是由Alice生成的。
通过数字签名解决问题
下面我们再来假设一种环境,假设发送者Alice和接收者Bob不需要共享一个密钥,也就是说,Alice和Bob各自使用不同的密钥。
我们假设Alice使用的密钥是一个只有Alice自己才知道的私钥。当Alice发送消息时,她用私钥生成一个“签名"。相对地,接收者Bob则使用一个和Alice不同的密钥对签名进行验证。使用Bob的密钥无法根据消息生成签名,但是用Bob的密钥却可以对Alice所计算的签名进行验证,也就是说可以知道这个签名是否是通过Alice的密钥计算出来的。如果真有这么一种方法的话,那么不管是识别篡改、伪装还是防止否认就都可以实现了吧。
实际上,这种看似很神奇的技术早就已经问世了,这就是数字签名(digital signature)。
1.2 签名的生成和验证
让我们来稍微整理一下,在数字签名技术中,出现了下面两种行为:
-
生成消息签名的行为
-
验证消息签名的行为
生成消息签名这一行为是由消息的发送者Alice来完成的,也称为“对消息签名”。生成签名就是根据消息内容计算数字签名的值,这个行为意味着 “我认可该消息的内容,该内容是我亲自发送的"。
验证数字签名这一行为一般是由消息的接收者Bob来完成的,但也可以由需要验证消息的第三方来完成,这里的第三方我们暂且将其命名为验证者Victor。验证签名就是检查该消息的签名是否真的属于Alice,验证的结果可以是成功或者失败,成功就意味着这个签名是属于Alice的,失败则意味着这个签名不是属于Alice的。
在数字签名中,生成签名和验证签名这两个行为需要使用各自专用的密钥来完成。
Alice使用“签名密钥"来生成消息的签名,而Bob和Victor则使用“验证密钥"来验证消息的签名。数字签名对签名密钥和验证密钥进行了区分,使用验证密钥是无法生成签名的。这一点非常重要。此外,签名密钥只能由签名的人持有,而验证密钥则是任何需要验证签名的人都可以持有。
是不是觉得似曾相识的感觉呢?没错,这就是我们讲过的非对称加密。公钥密码和上面讲的数字签名的结构非常相似。在非对称加密中,密钥分为加密密钥和解密密钥,用加密密钥无法进行解密。此外,解密密钥只能由需要解密的人持有,而加密密钥则是任何需要加密的人都可以持有。
实际上,数字签名和非对称加密有着非常紧密的联系,简而言之,数字签名就是通过将非对称加密 “反过来用” 而实现的。下面我们来将密钥的使用方式总结成一张表:

微信扫一扫~
支付宝扫一扫~
很赞哦! ()
相关文章
随机图文
密码
1. 密码 1.1 发送者、接收者和窃听者 1.2 加密和解密 1.3 加密实现 1.3.1 密码算法 1.3.2 加密、解密及秘钥 1.4 凯撒密码 1.4.1 凯撒密码的加密 1.4.2 凯撒密码的解密 1.5 密码信息安全常识与威胁 1.5.1 密码信息安全常识SSL/TLS
1.SSL/TLS 1.1客户端与服务器 1.2 用SSL/TLS承载HTTP 1.3 HTTPS 1.3.1 HTTP和HTTPS 1.3.2 HTTPS优缺点分组密码
1. 分组密码的模式 1.1分组密码 1.2模式 1.3明文分组和密文分组 2.主要模式 2.1ECB 模式 2.2XOR运算 2.3CBC模式 2.4CFB 模式 2.5OFB 模式 2.6CTR 模式 2.7总结数字签名
1.数字签名 1.1 从消息认证码到数字签名 1.2 签名的生成和验证 1.3 非对称加密和数字签名 1.4数字签名的方法 1.5通过RSA实现数字签名 1.5.1 生成数字签名 1.5.2 验证数字签名 1.6 通过椭圆曲线实现数字签名 1.6.1秘钥对称的生成, 并保存到磁盘 1.6.2使用私钥进行数字签名 1.6.3使用公钥验证数字签名 1.7 数字签名无法解决的问题