#简介
假设Alice需要向Bob借100万元,不过,Alice和Bob离得很远,无法直接见面。通过银行汇款,Alice可以立刻从Bob那里收到钱,但是Alice的借条应该怎样发送给Bob呢?可以用挂号寄过去,不过那样需要花上一段时间,能不能用电子邮件来发送借条呢?比如:
“Bob,我向你借款100万元。-----Alice"
显然,这样的邮件无法代替借条,Bob看到这封邮件也不会轻易相信,因为电子邮件是很容易被伪造的。Alice写的邮件可能被篡改,也有可能是有人伪装成Alice发送这封邮件,或者Alice也可以事后以”我不知道这张借条“为理由进行否认。
数字签名就是用来解决这样的问题,即识别篡改,伪装和防止否认。在数字签名总有两种行为:
- 生成消息签名行为
- 验证消息签名行为
生成消息签名是由消息的发送者Alice来完成的,也称为“对消息签名”,生成签名就是根据消息内容计算数字签名的值,这个行为意味着“我认可该消息的内容”。
验证签名这一行为是由消息的接收者Bob来完成的,但也可以由需要验证消息的第三方来完成,验证签名就是检查该消息的签名是否真的属于Alice,验证的结果可以是成功或者失败,成功以为着这个签名是属于Alice的,失败则意味着这个签名不是属于Alice的。
数字签名对签名密钥和验证密钥进行了区分,使用验证密钥是无法完成签名的,签名密钥只能由签名的人持有,而验证密钥则是任何需要验证签名的人都可以持有。实际上,数字签名和公钥密码有着非常紧密的联系,数字签名就是通过将公钥密码“反过来用”而实现的。