浅谈什么是“数字签名”

数字签名的用途:数字签名是用来验证服务端与客户端之间发送的报文信息是否被篡改了。

数字签名的原理:服务端对客户端发送一个报文,服务端先用Hash算法对报文进行计算得到的值我们叫做信息摘要,接着用服务端的私钥对信息摘要进行加密得到密文我们叫做数字签名,服务器就把报文+数字签名一起发送给客户端,客户端先对数字签名进行解密,得到信息摘要,在对报文进行Hash计算,那计算值和信息摘要进行对比,两者相同就证明报文没有被修改。

注:这里的Hash算法一定是一种不可逆的算法,而且hash算法当你改变原文一处内容,计算的hash值也会更改。而且服务端的私钥是唯一,因为这里用的是非对称加密。

非对称加密文章:点击打开链接

缺点:在于服务端的公钥是对外公开,客户端获取公钥的途径是否是安全,这里存在公钥可能已经被第三方掉包,客户端以为拿到的是服务端的公钥,实际上是拿到的第三方的公钥,第三方冒充服务端与客户端进行信息交互,骗取客户端的重要信息。

疑问:事实上我们为什么要对报文进行Hash计算呢?如果我们只是把报文加密附在报文中一样也可以验证报文是否被篡改,因为私钥是唯一的。


答案:因为非对称加密算法非常消耗计算机性能的,而且我们的报文往往也会很长更会加大这种消耗,同时公钥解密也是非常消耗计算机性能,所以我们选择对报文进行Hash算法计算。


解决办法:服务端去认证中心申请数字证书,用来保证公钥的安全性,防止自己的公钥被掉包。

这里我们在举个例子:

“客户”->“服务器”:你好

“服务器”->“客户”:你好,我是服务器

“客户”->“服务器”:向我证明你就是服务器

“服务器”->“客户”:你好,我是服务器 {信息摘要}[私钥|RSA]


这里客户端收到信息你好,我是服务器{信息摘要}[私钥|RSA],对报文“你好,我是服务器”用RSA算法进行求值得到H,在用公钥对{信息摘要}进行解密得到H1,比对H和H1的值,相同就表示报文没有被篡改。



注:你好,我是服务器 {信息摘要}[私钥|RSA]这个内容是:{信息摘要}是对“你好,我是服务器”报文进行RSA算法进行计算得来值,在用私钥进行加密。


猜你喜欢

转载自blog.csdn.net/gelong_bokewang/article/details/80406766