美文网首页
算法和数据结构5.9数字签名

算法和数据结构5.9数字签名

作者: 数字d | 来源:发表于2019-12-26 10:08 被阅读0次

    数字签名不紧可以实现消息认证码认证和检测窜改功能,还可以预防事后否认问题的发生。

    由于在消息认证码中使用的是共享密钥加密,所以持有密钥的收信人也有可能是消息的发送者,这样是无法预防事后否认行为的。

    而数字签名是只有发信人才能生成的,因此使用它就可以确定谁是消息发送者。

    流程:

    假设A要向B发送消息。

    在发送前A给消息加上数字签名。数字签名只能由A生成。

    B收到消息后,可以确认数字签名确实是由A生成的。

    只要发送的消息上有A的数字签名,就能确定消息的发送者是A.

    B可以验证数字签名的正确性,但是无法生成数字签名。

    数字签名的生成使用的是公开密钥加密。

    公开密钥加密,加密使用的是公开密钥,解密使用的是私有密钥。任何人都可以使用公开密钥对数据进行加密,但是只有持有私有密钥的人才能解密数据。

    然而,数字签名却是恰恰相反的。

    数字签名的生成步骤:

    首先:由A准备好需要发送的消息、私有密钥和公开密钥。

    由消息的发送者来准备这两个密钥,这一点与公开密钥加密有所不同。

    A将公开密钥发送给B.

    A使用私有密钥加密消息。加密后的消息就是数字签名。A将消息和签名都发送给了B。

    B使用公开密钥对密文(数字签名)解密。

    B对解密后的消息进行确认,看它是否和收到的消息一致。

    在流程中:

    生成的是“只能由持有私钥密钥的A来加密,但只要有公开密钥,谁都可以进行解密”的密文。这个密文作为密码似乎没有任何意义。

    但是换一个角度看就会发现,它可以保证这个密文的制作者只能是持有私有密钥的A。

    在数字签名中,是将“只能由A来加密的密文”作为“签名”来使用的。

    严格来说,也有使用加密运算以外的方法来生成签名。

    但是,用私有密钥生成签名、用公开密钥验证建明这一机制是相同的。

    在公开密钥加密中,用公开密钥加密的数据都可以用私有密钥还原。

    数字签名利用的是用私有密钥加密的数据,用公开密钥解密还原这一性质。

    也就是说,即使密钥使用顺序不一样,运行结果都是一样的。

    并不是所有的公开密钥加密都具有这个性质。

    不过RSA加密算算法是可以的。

    能够用A的公开密钥解密的密文,必定是有A生成的。

    因此,我们可以利用这个结论来确定消息的发送者是否为A,消息是否被人篡改。

    由于B只有公开密钥,无法生成A的签名,所以也预防了时候否认这一问题。

    补充:
    在实际的应用场景中,公开密钥加密和解密都比较耗时。为了节约运算时间,实际上不会直接对消息进行加密。

    而是先求得消息的哈希值,再对哈希值进行加密,然后将其作为签名来使用。

    缺陷:

    虽然数字签名可以实现“认证”,“检测篡改”,“预防事后否认”三个功能,但是它也有一个缺陷。

    那就是,虽然使用数字签名后,B会相信消息的发送者是A,但是实际上也有可能是X冒充了A.

    其根本原因在于使用公开密钥加密无法确定公开密钥的制作者是谁。收到的公开密钥是哪个也没有任何制作者的信息。

    因此,公开密钥有可能是由某个冒充A的人生成的。

    使用数字证书就能解决这个问题。

    相关文章

      网友评论

          本文标题:算法和数据结构5.9数字签名

          本文链接:https://www.haomeiwen.com/subject/idkkoctx.html