数字签名
本文将讨论为什么需要数字签名,数字签名怎么实现,数字签名的主要目标是什么,数字证书最主要的目标就是实现不可抵赖性,其次同时实现了防篡改和防伪造性
不可抵赖性
先来解释一下什么是不可抵赖性,结合下图来做讲解,ServerA,ClientB,ClientC,B,C都拥有A的公钥,所以在向A发送数据的时候可以使用A的公钥将其加密再发送,这可以确保消息的机密性,但是当A接受到这两份数据后,无法确定这两份消息分别是由谁发出的,这就是为什么需要不可抵赖性,我们需要区分出哪个消息由谁发出
不可篡改性
假设ABC三者使用同一把对称加密算法密钥,A向B发消息“123”时,B接收到了“456”,B以为自己正在和A会话,实际上C在AB当中扮演了中间人的角色,拦截了A发出的“123”,并将消息篡改为“456”再发送给B,正因为ABC三者用的是同一把对称加密算法密钥,所以C可以在AB不知不觉中,篡改双方发送的信息
数字签名原理
RSA公开密钥算法中,公钥可以向所有人公开,而私钥只能创建人自己拥有,数字签名的原理就是依靠这个规则,在发送者发送一组数据时,先将明文进行HASH运算,再使用私钥结合数字签名算法(HASH值+私钥+数字签名算法)得出的值就是数字签名值,再将数字签名值与明文结合,便实现了数字签名,而接收端将数字签名通过发送者的公钥与数字签名算法,反解出原始的HASH值,再将发送的明文通过同样的HASH算法得出一个HASH值,如果前后的HASH值相同,则表示无内鬼,反之则说明有内鬼
数字签名实现流程
签名生成流程:
1.发送者对消息计算摘要值
2.发送者用私钥对摘要值进行签名得到签名值
3.发送者将原始消息和签名值一同发送给接收者
签名验证流程:
1.接收者接收到消息后,拆分出消息和消息签名值A
2.接收者使用公钥对消息进行运算得出摘要值B
3.接收者对摘要值B和签名值A进行比较,如果相同则表示签名验证成功,反之则失败