数字签名

数字签名是非对称加密算法与数字摘要技术的应用,数字摘要验证了原文是否被篡改、公钥私钥保证了数字摘要的安全性,两者配合使用安全性高,速度快。

   非对称密钥加密: RSA 、ECC等,依赖密钥长度来提高安全性,

   数字摘要:将任意长度的消息变成固定长度的短消息,常用的加密算法包括 HASH (MD5、SHA1、SHA256)、HMAC(HmacMD5/HmacSHA1/HmacSHA256)等。

 

数字签名过程:

环境:A 的公钥公开,私钥保密 ,A 和 B 都使用同样的摘要算法 HASH。

•  A 给 B 发送一段数据data,首先 A 使用 HASH 算法生成 data 的数字摘要 digestA,然后利用A的私钥对数字摘要 digestA 进行加密生成 digestEncodeA ,然后将 data 和 digestEncodeA 一起发送给B。

•  B 收到 A 发过来的 data 和 digestEncodeA 以后,首先使用 HASH 算法生成 data 的数字摘要 digestB ,然后用 A 的公钥对 digestEncodeA 进行解密得到数字摘要 digestDecodeB,然后如果 digestB = digestDecodeB ,那么标明 data 是由 A 发送过来的 ,否则不是。

 

一、公钥加密  假设一下,我找了两个数字,一个是1,一个是2。我喜欢2这个数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1是我的公钥。

我有一个文件,不能让别人看,我就用1加密了。别人找到了这个文件,但是他不知道2就是解密的私钥啊,所以他解不开,只有我可以用 数字2,就是我的私钥,来解密。这样我就可以保护数据了。

我的好朋友x用我的公钥1加密了字符a,加密后成了b,放在网上。别人偷到了这个文件,但是别人解不开,因为别人不知道2就是我的私钥, 只有我才能解密,解密后就得到a。这样,我们就可以传送加密的数据了。

 

二、私钥签名 如果我用私钥加密一段数据(当然只有我可以用私钥加密,因为只有我知道2是我的私钥),结果所有的人都看到我的内容了,因为他们都知 道我的公钥是1,那么这种加密有什么用处呢?

但是我的好朋友x说有人冒充我给他发信。怎么办呢?我把我要发的信,内容是c,用我的私钥2,加密,加密后的内容是d,发给x,再告诉他 解密看是不是c。他用我的公钥1解密,发现果然是c。 这个时候,他会想到,能够用我的公钥解密的数据,必然是用我的私钥加的密。只有我知道我得私钥,因此他就可以确认确实是我发的东西。 这样我们就能确认发送方身份了。这个过程叫做数字签名。当然具体的过程要稍微复杂一些。用私钥来加密数据,用途就是数字签名

 

总结:公钥和私钥是成对的,它们互相解密。

公钥加密,私钥解密。

私钥数字签名,公钥验证。

posted @ 2019-10-22 13:47  linux——quan  阅读(1187)  评论(0编辑  收藏  举报