有一天,你突然收到了一条来自多年未曾联系的老友短信,内容是“老兄,兄弟我最近手头有点紧,借5000元给我周转下呗?”,此时你的第一反应肯定不是立马打钱过去,而是会想:这人该不会是个骗子吧?!我得打个电话过去问问,确认下身份再做定夺,直到当他确切地说出了你小时候鲜有人知的绰号“三毛”时,你才确信,他就是那个多年要么不联系,一联系就借钱的老兄(笑哭~)。
在互联网世界,为了认证对方身份,我们肯定不会用“绰号”,那我们用什么呢?没错——用数字签名,一个能辨别对方是否是个冒牌货的强有力手段。
数字签名,就是只有信息的发送者才能产生的别人无法伪造的一段字符串,这段字符串同时也是对信息的发送者发送信息真实性的一个有效证明。——百度百科
简单来讲,数字签名和私钥、公钥一样,就是个字符串,由于它是通过发送者的私钥加密产生,因此别人无法伪造,发送者也无法抵赖,除非,发送者私钥被别人盗取了。那么,问题来了,怎样才能获取数字签名呢?
你的那位老兄不想每次借钱都这么麻烦,每次被你逼着问“绰号”也是够够的了,同时你也不想每次被别人叫了“三毛”,还照样得借5000元,那么你和你的老兄可以这么做:
(1)你的老兄用你的公钥将“借我5000元”加密为密文。
(2)哈希密文,得到哈希值,比如35a504e2;
(3) 用他自己的私钥加密哈希值,得到数字签名,如:d9G5de3m5uL8pzUk9xb;
他将密文和数字签名,一同发给你,收到信息后,你只需做两步:
(1)获取明文。用你的私钥解密密文,获取明文信息,原文为“借我5000元”;
(2)验证身份。你得用他的公钥解密数字签名,如果解密结果是35a504e2,那么你就可以肯定,这就是那位老兄发的,如果不是,那就一定是冒牌货。此时你可能会问两个问题:
<1> 为什么解密结果是35a504e2就能确定是他?
答案就是:解密结果正是你把收到的密文哈希一次得到的结果。
<2>公钥不是用来加密的吗?怎么用来解密数字签名?
这就是非对称加密的神奇之处,公钥私钥对互为加解密工具,即:公钥加密,私钥可解;私钥加密,公钥可解,唯独不可用原来加密的钥匙解密,不然就成了对称加密了。
既然如此,非对称加密中,我们为什么不用私钥加密,而偏要用公钥加密?
因为公钥是公开的,如果用私钥加密,公钥解密,那么等于把信息都公开了,失去了加密意义。而数字签名我们使用私钥加密,是因为数字签名解密后为密文的哈希值,解密不为获取信息,只为校验身份。
比特币是一种完全匿名的数字货币,它的身份认证是基于ECDSA。比特币的账户地址就是对公钥计算摘要得到的,向全世界公布。而确认你是账户拥有者的唯一办法就是看你有没有账户对应的私钥。对于比特币中的任意一个交易记录,只有当其中付款方的签名是有效的,它才是有效的。如果账户私钥丢失,那么你将永远地失去里面的钱;一旦被黑客盗取,里面的钱就完全归黑客所有。因此,保管好你的私钥,就是保管好了你的数字财产!
(1)数字签名是发送者能证明信息是自己发的一种手段,既不能被他人伪造,自己也无法抵赖,因为私钥只有发送者才有,除非泄露。
(2)数字签名,是密文的哈希值通过私钥加密生成的,和公钥、私钥一样,都是字符串。
(3)公钥私钥对互为加解密工具,唯独不可自加密自解密。
(4)保管好私钥、保管好私钥、保管好私钥,重要的事情总结三遍。