|純文本|-& 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。