了解数字签名

(1)什么是数字签名?
A发消息给B, A将消息用散列函数生成一个散列值确保信息不被修改,然后A用自己的私钥对散列值进行加密,A将加密后的散列值和消息一起发送给B
B接收到消息后,B也用散列函数生成一个散列值,然后用A的公钥将A发送来的加密的散列值进行解密,两个散列值进行对比,看消息是否被修改过
如下图:

 (2)为什么需要数字签名? 如下图


A喜欢B,于是A一个消息"我爱你" 给B,
但C也喜欢B,C通过某种手段拦截到了A发送给B的消息,于是将消息改为"我不爱你".
结果A还傻傻的以为已经向B进行了表白.....

(3)数字签名存在的问题?
不能确保人与加密对的对等.如下图:


A将消息的散列值加密和消息体发送给B,结果被C拦截到,C事先将B中保存的A的公钥替换成了自己的公钥,
C修改消息并用自己的私钥加密散列值发送给B,B收到消息后用被C替换的公钥进行解密,结果散列值无误

(4)怎么解决数字签名存在的人与消息对不对等的问题?
PKI(公钥基础设施),通过颁发数字证书的方式将特定密钥对和特定人进行绑定.
如下图是A的数字证书:(类似于身份证)

A在发消息前将自己的数字证书发给了B, B用权威机构的公开密钥对该证书内容进行验证,发现就是A的证书,然后再用证书里A的公钥对A发来的消息中的散列值进行解密
查看消息的完整性,确保消息没被修改

(5)用openssl实现数字签名过程
1) 生成RSA私钥
openssl genrsa  -out private.pem  1024
2)从私钥成提取公钥
openssl rsa -in private.pem  -pubout -out public.pem
3)用私钥对文件摘要进行签名(采用sha1进行摘要计算)
openssl dgst -sha1 -sign private.pem -out sing.txt te.c
4)将sing.txt  public.pem te.c发送给对方

(6)用openssl验证数字签名

1)有对方发来的sing.txt(签名的摘要)  public.pem(对方公钥) te.c(原文件)
2)执行openssl命令对于签名进行验证
openssl dgst -sha1 -verify public.pem -signature sing.txt te.c 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值