密码学-数字签名-DSA与RSA

简介

数字签名就是用来解决篡改,伪装,和否认的问题。在数字签名中存在量中行为:

  • 生成消息签名

  • 验证消息签名

生成消息是由消息的发送者完成的,也称之为“对消息签名”,生成签名就是根据消息内容计算数字签名的值,这个行为意味这认可这个消息。

 

私钥

公钥

公钥密码

消息接收者解密时使用

消息发送者加密时使用

数字签名

签名这生成签名时使用

验证者验证签名时使用

谁持有**?

个人持有

只要需要,任何人都可以持有

公钥密码和数字签名

  • 用公钥进行加密(公钥密码):

密码学-数字签名-DSA与RSA

密码学-数字签名-DSA与RSA

  • 用私钥进行加密(数字签名):

密码学-数字签名-DSA与RSA

密码学-数字签名-DSA与RSA

数字签名的实例

  • 直接对消息签名(DSA)

a.Alice用自己的私钥对消息签名

用私钥得到的密文就时Alice对这条消息的签名,由于只有Alice才持有自己的私钥,因此除了Alice意外,其他人无法生成相同的签名。

b.Alice 将消息和签名发送给Bob

c.Bob用Alice的公钥对收到的签名进行解密

如果收到的签名确实使用Alice的私钥进行加密得到的,那么用Alice的公钥应该能正确解密。如果接收到的签名不是用Alice的私钥进行加密得到的密文,那么就无法用Alice的公钥正确的解密

d.Bob将签名后得到的消息与Alice直接发送的消息进行对比。

e.如果两者一致,则签名验证成功,如果两者不一致,则验证失败。

密码学-数字签名-DSA与RSA

  • 对消息散列值签名(RSA,椭圆加密)

上面我们使用直接对消息签名的颁发,但这种方法需要对整个消息进行极爱,非常耗时,这是因为公钥密码算法效率不高,所以我们可以求出消息的散列值然后对散列值加密。无论消息有多长,散列值是固定的,因此对散列值签名快很多。

(1).Alice用单向散列函数计算消息的散列值

(2).Alice用自己的私钥对散列值进行加密

用私钥加密散列值所得到的密文就是Alice对这条散列值的签名,由于只有Alice才持有自己的私钥,因此除了Alice以外,其他人无法生成相同的签名。

(3).Alice将消息和签名发送给Bob

(4).Bob用Alice的公钥对收到的签名进行解密

如果收到的签名确实使用Alice的私钥进行加密的而得到的密文,那么用Alice的公钥ing该可以正确解密,解密的结果应该等于消息的散列值。如果收到的签名不是用Alice的私钥进行加密而得到的密文,那么无法用Alice的公钥正确解密。

(5).Bob将签名解密后得到的散列值与Alice发送的消息散列值进行对比。

如果两者一致,则签名成功,否则签名失败。

密码学-数字签名-DSA与RSA