数字签名介绍

        数字签名的意义:防止抵赖、保证信息没有被更改过。

        

假如A公司要发一份合同给B公司,过程如下:

        1 A公司使用一个单向散列函数算法(比如使用MD5)对合同计算一个摘要,得到摘要S(A),再使用A的私钥对摘要S(A)加密得到PS(A)(即为合同的签名),此时A将合同、摘要S(A)、数字签名PS(A)一起发送给B。

        2 B收到上述信息后如何判断合同是否就是A发送的呢?

        B也使用一个单向散列函数算法(比如使用MD5)对合同计算得到一个摘要S(B),再用A的公钥解密PS(A)得到PS(B),如果S(B)与PS(B)相同则判定合同没有被改过,如果不相同,则合同被改过。

        以上过程A无法抵赖合同是他发送的,因为根据非对称加密的性质,B能用A的公钥解密PS(A),则说明签名是属于A的,只有A才有私钥,别人无法伪造,所以合同肯定是A发送的。

        以上过程中的安全机制依赖于A的公钥是否是可信的,如果公钥不可信则后面的安全都无法保证,此时B拿到A发过来的合同时,首先要验证的是A的公钥的可信度,如果证书验证不通过,则说明A不可信;若验证通过才能进行后面的签名验证。

        同时由摘要算法的性质,我们指定如果S(B)与PS(B)相同则合同没有被更改过,也就是保证了信息的完整性。

        那想一想如果合同被更改过会发生什么呢?假如只有合同被更改,则在对比摘要的时候S(B)与PS(B)会不相同,则验证不通过;那假如连摘要S(A),数字签名PS(A)也一起更改呢?要修改数字签名,那Hacker只能连证书一起也替换了,那么在B进行证书验证的时候将验证失败,也不会通过。所以也就能保证信息的完整性。

你可能感兴趣的:(HTTPS,数字签名,安全)