德阳吧

您现在的位置是:首页 > 生活经验 > 正文

生活经验

数字签名的作用(简述数字签名的原理)

zhiyongz2024-05-23生活经验

数字签名

我们考虑个场景:Alice需要向Blob借款100w,不过,Alice和Blob离得很远,无法直接见面,只有通过银行转账可以完成借款,但是Alice怎么把借条给Blob呢!

为了保证借条传递过程中,保证借条不被修改,我们考虑使用加密方法:

对称加密

借条内容:Alice借Blob 100w,Alice和Blob协商了一个同一密钥,Alice用密钥对借条做了加密,传递给Blob,Blob对内容进行 *** 。 *** 出来获取借条的明文内容,这个协商的密钥由于第三方无法得知,可以保护借条的内容。但是有个问题,由于Blob也有密钥,Blob伪造一个借条:Alice借Blob 200w,并用密钥加密,到时候Alice还钱的时候 *** 内容,发现是借了200w,说不清了

非对称加密

同样的借条内容:Alice借Blob 100w,我们来看分别由Alice、Blob分别生成公私钥对有啥问题。

Alice生成公私钥,公钥给到blob,私钥用来加密借条内容,Alice用了私钥加密内容,传递过去blob公钥 *** 内容,但是有个问题,公钥是可以公开的,这样第三方也是可以获取到公钥,那么第三方可以 *** 出加密内容,并且篡改为借款200w,再用自己的私钥加密内容,把传递给blob的公钥替换成自己的。这样blob就会收到借款200w的借条假设是Blob生成公私钥,公钥给到Alice,Alice通过公钥加密借条内容后,由于只有Blob只有私钥,其他人无法得知这个加密数据,也无法 *** 出内容,在传递过程中保护了不被修改。这个由于私钥只有blob有,公钥分发下去,这样也会有个问题,第三方用公钥加密“Alice借Blob 200w”,这样给到blob也会导致争议,不知道哪个借条是真实的

那么遇到这个问题怎样解决呢?

通过数字签名解决问题

既然使用一套密钥无法解决问题,那么采用两套密钥呢,alice一套、blob一套。在考虑人在社会中的指纹都是独一无二的,这个只要按了手印就可以判断是这个人做出的决定,没必要对整个人做信息采集

数字中也可以参考这种方式,不需要对整个信息进行加密处理,是不是可以只对这个信息的“指纹”来做呢?为了保证信息“指纹”得独一无二,可以采用hash方式进行,这个方法是不可逆,并且更改一个字节都会引起hash值的变化。

那么产生hash的算法有sha256等等,那么把信息和这个指纹传递过去是不是就行了,这里还有个中间人的问题,中间人可以把这段信息获取到,同样改了信息,再重新sha256生成一个hash值,同样验证hash也是正确的。

那么保证信息不被篡改,一个是采用两套密钥来进行,另一种是采用数字证书来保证,数字证书这个后续再讨论

从上面可以看到,出现了两种行为:

生成消息签名的行为验证消息签名的行为

生成消息签名的行为是由消息的发送者Alice完成的,生成签名就是根据消息内容计算数字签名的值,这个行为意味着"我认可该消息的内容"

验证消息的签名,是否接收者Blob完成的,验证签名就是检查该消息的签名是否真的属于Alice,验证的结果可以是成功或失败

在数字签名中,生成签名和验证签名的密钥是不同的,是由各自的密钥来完成的

数字签名对签名密钥和验证密钥是有区分的,使用验证密钥是无法生成签名的

签名密钥只能由签名的人持有,验证密钥则是可以由任何验证签名的人持有

我们来对比下:

非对称密钥:公钥加密,私钥 ***

数字签名:私钥加密,公钥 ***

数字签名的方法

(1) Alice用单向散列函数对消息计算散列值,并且用blob的公钥加密信息,用自己的私钥加密散列值

(2) Alice将加密消息和签名信息发送给blob

(3) blob用alice的公钥对签名进行 *** , *** 出散列值

(4) blob用自己的私钥 *** 出加密信息,计算散列值

(5) 对比散列值,一致说明没有被篡改。

发表评论

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~