签名算法是使用私钥签名,公钥验证的方法,对一个消息的真伪进行确认。如果一个人持有私钥,他就可以使用私钥对任意的消息进行签名,即通过私钥sk
对消息message
进行签名,得到signature
:
signature = sign(message, sk);
签名的目的是为了证明,该消息确实是由持有私钥sk
的人发出的,任何其他人都可以对签名进行验证。验证方法是,由私钥持有人公开对应的公钥pk
,其他人用公钥pk
对消息message
和签名signature
进行验证:
isValid = verify(message, signature, pk);
如果验证通过,则可以证明该消息确实是由持有私钥sk
的人发出的,并且未经过篡改。
数字签名算法在电子商务、在线支付这些领域有非常重要的作用,因为它能通过密码学理论证明:
- 签名不可伪造,因为私钥只有签名人自己知道,所以其他人无法伪造签名;
- 消息不可篡改,如果原始消息被人篡改了,对签名进行验证将失败;
- 签名不可抵赖,如果对签名进行验证通过了,签名人不能抵赖自己曾经发过这一条消息。
简单地说来,数字签名可以防伪造,防篡改,防抵赖。
对消息进行签名,实际上是对消息的哈希进行签名,这样可以使任意长度的消息在签名前先转换为固定长度的哈希数据。对哈希进行签名相当