3.6、数字签名
目录
- 数字签名
- 数字签名与验证过程
数字签名
数字签名是签名者使用自己的私钥对待签名数据的哈希值做密码运算得到的一个结果
第一签名者用自己的私钥来对我们待签数据的哈希值进行签名,直接对数据进行签名其实也是可以的,只是对数据签名,这个量可能很大,比如说你实际的数据,我要用我的私钥对你进行签名,相当于用我的私钥加密10t的数据,这个过程可能需要三个小时,太慢了,但是如果我把10t的数据给生成128位的哈希值,然后用我的私钥对哈希值进行签名,也就是对哈希值进行加密128位128比特就很快,一秒都要不了就出来了,所以实际应用,我们都是用私钥来对数据的哈希值来进行签名
这个结果只能用签名者的公钥来进行验证,因为你是用自己的私钥签名的,那验证肯定就是公钥
私钥签名,公钥验证签名的过程,本质上还是用私钥来进行数据加密,只是它加密的不是数据,而是数据的哈希值。这样做的目的是为了速度更快,反正你就是要验证身份,怎么快怎么来
数字签名具备如下的几个特点,非否认性,数字签名的效果跟我们签字按手印是一样的,你摁了之后你就不能说,这不是你签的,因为上面有你的笔记,还有你的指纹,所以具备不可否认性,具备真实性,可以鉴别,找第三方机构或者仲裁机关可以鉴别真伪,不可篡改,因为私钥是不公开的,所以你是不能篡改签名,只有你自己才知道私钥,这是数字签名具备的几个特性
数字签名可以保证数据的完整性和不可否认性,完整性,因为你有私钥,完整性其实就对应着上面的不可篡改,不能被修改
数字签名常见的一些算法都是公钥加密算法或者叫非对称密码算法,最常用的是rsa、Rabin、ELGamal、dss等等也可以用于数字签名。只是我们日常用的多的都是rsa
数字签名与验证过程
首先这里面有一个电子合同,电子合同你可以看作是一个明文消息。我们首先进行一个哈希函数得到一个消息摘要。消息摘要如果用MD5可能是128位的,然后我们再对这个消息摘要进行签名,签名用的是发送者的私钥,签完名之后,然后再把这个签名融合到你的合同里面,跟这个消息相当于做一个融合加起来,就出现待签名的电子合同
我们把这个待签名的电子合同,把它发出去,发出去之后,对方要把它拆开,先拆成明文的电子合同,还有一个签名。签名我们首先用发送者的公钥对它进行解密,解密一般用公钥,解密完之后就得到一个哈希值,这是从数字签名得到的一个哈希值
我们这里有一个明文电子合同,我们也通过哈希函数再给它做一次哈希,对比一下这两个哈希值相不相同,如果相同,那就证明没有被篡改,同时也能够证明的确是用对方自己的私钥进行签名,因为我用公钥解开了,那你肯定是用私钥签的,私钥只有你自己有,那也能够证明这个人的确是你,你就不可否认了,这的确是你签的,所以这就是数字签名的过程与验证