非对称加密的应用
|纯文本|-& gt;公钥加密->;|密文|-& gt;私钥解密->;纯文本|
这个加密路径用于与他人的加密通信,相当于对称加密。
让我们回到爱丽丝和鲍勃的例子。
如果Bob想用非对称加密算法接收别人私信发送的信息,步骤如下。
1.首先,Bob需要使用特定的约定算法(比如RSA)来生成一个密钥和一个公钥。密钥由自己保管,公钥公开。
2.Alice得到Bob的公钥后,可以发送消息“Alice已将1BTC转给Bob,请查收。”加密。
3.然后,Alice将密文(例如,“FH39ggJ+shi3djifg35”)发送给Bob。
4.收到消息后,Bob用自己的私钥解密,还原出原始消息“Alice已将1BTC转给Bob,请核对。”
因为用Bob的公钥加密的消息只能用Bob的私钥解密(Bob的公钥也不好),而私钥只有Bob一个人拥有,所以即使消息被第三方劫持,他也无法还原消息明文。
应用2:数字签名
另一方面,如果先用私钥加密呢?这就催生了非对称加密的另一个重要应用:数字签名。
让我们回到爱丽丝和鲍勃的例子。
在比特币系统中,类似于“爱丽丝已转账1BTC给鲍勃,请查收。”这样的消息最终会被矿工记在账本上,关系到双方的利益。这种信息的受益者是鲍勃。让我们考虑一下。如果Bob一直在网上广播Alice给他转账的消息怎么办?
Bob:“Alice已将1BTC转给Bob”
鲍勃:“爱丽丝将2BTC转给了鲍勃”
鲍勃:“爱丽丝将3BTC转给了鲍勃”
…
所以我们需要一个机制来证明爱丽丝是“自愿”的,也就是消息是爱丽丝自己发出的。步骤如下:
1.Alice需要使用特定的约定算法(如RSA)来生成密钥和公钥。密钥由她自己保管,公钥公开。
2.爱丽丝要发消息的时候,爱丽丝已经转了1BTC给鲍勃,请查收。|我的公钥是:“gh3giPGFN2jgh3sF”。爱丽丝用她的私人密钥加密信息。假设加密后的密文是SHG356g3T4+dh4fh,现在可以把这个密文看作是Alice的数字签名。
3.Alice将消息明文和数字签名放在一起,并将其发送到网络。
发出的信息与此类似。爱丽丝已经将1BTC转给鲍勃。请检查一下。|我的公钥是:“gh3giPGFN2jgh3sF”。|签名:“SHG356g3T4+dh4fh”
4.收到消息后,网络中的每个人都可以执行以下操作来完成验证:
收到Alice已将1BTC转给Bob的消息,请查收。|我的公钥是:“gh3giPGFN2jgh3sF”。|签名:“SHG356g3T4+dh4fh”
用私钥签名的数字签名SHG356g3T4+dh4fh用Alice在消息中提供的公钥gh3giPGFN2jgh3sF解密。
请检查Alice是否已将1BTC转给Bob。|我的公钥是:“gh3giPGFN2jgh3sF”进行对比。
如果一致,说明消息是爱丽丝自己发的,因为只有爱丽丝自己有爱丽丝的密钥。
如果不是,说明消息不是爱丽丝发的,或者消息是爱丽丝发的但是被别人篡改了。
5.于是,通过4中描述的方法,Bob确认Alice给了他1BTC的转账。
网络中的其他人(矿工)已经成功验证了这条消息的真实性,为鲍勃作证,他的账户增加了1 BTC,而爱丽丝的账户减少了1 BTC。