图解数字签名过程

数字签名,它的作用跟手写签名其实是一样的,用来证明某个消息或者文件是本人发出/认同的,利用公钥加密系统保证不可伪造不可抵赖两个特性
使用的签名算法有:

RSA,基于大整数分解问题
DSA,基于离散对数问题
ECDSA,属于DSA的一个变种,基于椭圆曲线上的离散对数问题

我们以RSA做简单分析,如果你生成了一对RSA密钥,你把公钥公布出去,并告诉别人这个公钥是你的。之后你只要在发送的消息后面加上用私钥加密过的密文,其他人拿公钥解密,看解密得到的内容是不是你发的内容,就可以知道这个内容是不是你发的。
那么怎么体现两大特性呢?

不可伪造

其他人因为没有对应的私钥,所以没法生成公钥可以解密的密文,所以是不可伪造的。

不可抵赖

又因为公钥对应的私钥只有一个,所以只要能成功解密,那么发消息的一定是你,不会是其他人,所以是不可抵赖的。

具体签名过程如下
一个具体的RSA签名过程如下:
1.服务器外发布公钥,并声明对应的私钥在自己手上
2.服务器对消息M计算摘要,得到摘要D
3.服务器使用私钥对D进行签名,得到签名S
4.将M和S一起发送出去
验证过程如下:
1客户端首先对M使用跟服务器一样的摘要算法计算摘要,得到摘要D
2.使用服务器公钥对S进行解签,得到摘要D’
3.如果D和D’相同,那么证明M确实是服务器发出的,并且没有被篡改过
数字签名过程图by hj

用到的部分名词解释

消息摘要:

消息摘要就是将消息哈希转换成一个固定长度的值唯一的字符串,该过程不可逆,基本上做不到通过消息摘要转换成消息的。
实际应用中,由于直接对原消息进行签名有安全性问题,而且原消息往往比较大,直接使用RSA算法进行签名速度会比较慢,所以我们一般对消息计算其摘要(使用SHA-256等安全的摘要算法),然后对摘要进行签名。只要使用的摘要算法是安全的(MD5、SHA-1已经不安全了),那么这种方式的数字签名就是安全的。

非对称加密:

在通信双方,如果使用非对称加密,一般遵从这样的原则:公钥加密,私钥解密。同时,一般一个密钥加密,另一个密钥就可以解密。
因为公钥是公开的,如果用来解密,那么就很容易被不必要的人解密消息。因此,私钥也可以认为是个人身份的证明。
如果通信双方需要互发消息,那么应该建立两套非对称加密的机制(即两对公私钥密钥对),发消息的一方使用对方的公钥进行加密,接收消息的一方使用自己的私钥解密。

猜你喜欢

转载自blog.csdn.net/HJsir/article/details/80472510