現代密碼學中,加密算法包括兩部分。
- 算法,一組規定如何進行加解密的規則,描述加解密的具體操作步驟。為了方便使用及保證算法可靠性,算法都是公開的
- 密鑰,用於算法的秘密參數
在對稱加密中,無論加密還是解密,都使用同一個密鑰。因此,
- 對密鑰的保護十分重要,洩露則意味著通信密文不再安全
- 通信雙方在交換密鑰時,特別是在公開的、不可信的鏈路(互聯網)上交換密鑰時,要確保密鑰從未洩露(Diffie-Hellman 密鑰交換算法)
受Diffie-Hellman 密鑰交換算法的啟發,人們意識到加密和解密可以使用不同的密鑰,只要這對密鑰有某種對應關係即可。
這種新的加密模式被稱為非對稱加密,
- 有兩把密鑰,一把是公開的公鑰,還有一把是不公開的私鑰
- 公鑰和私鑰一一對應,有一把公鑰就必然有一把與之對應的、獨一無二的私鑰,反之亦成立
- 同時生成公鑰和私鑰應該相對容易,但從公鑰推算私鑰應是極其困難或是不可能的
- 所有的密鑰對(公鑰和私鑰)都是不同的
- 用私鑰可以解開公鑰加密的消息,反之亦成立
加密與解密
A事先生成好了一對密鑰,並公開了自己的公鑰。
B想加密發送給A的消息,需要
用A的公鑰,加密要發給A的信息,將密文發送給A
A收到密文後,用自己的私鑰解密
這段密文只有用對應的私鑰(A的私鑰)才可以解密。只要A的私鑰沒有洩露,這段密文就只有A能解開,即使其他人獲得密文,也無法解密。
常用的非對稱加密算法有RSA、ElGamal、ECC等。
摘要和簽名
舉個例子。B寫了一張紙條,讓同桌傳給A,紙條內容為
A,我是B,我喜歡你。
對通信的雙方,
- 要保證紙條在傳遞過程中未經改動。當內容被篡改時,接收方可以發現
- 接收方能確定紙條來自發送方,而不是他人冒充
用更簡單些的文字來描述整個過程,通信的雙方都知道,
- 發送方認可消息的內容(授權)
- 接收方能確定消息來源(身份認證)
- 消息在整個通信過程中未經改動(內容的完整性)
為了實現上述需求,B需要
- 將紙條內容哈希(Hash),得到摘要(Digest)
- 用自己的私鑰“加密”摘要,得到簽名(Signature)
- 讓同桌傳遞紙條和簽名
A收到紙條和簽名後,
- 用B的公鑰,對簽名“解密”,得到摘要[1]
- 將紙條內容哈希,得到摘要[2]
- 比較摘要[1] 和摘要[2] 的內容是否一致
如果內容相同,則說明紙條確實由B所寫,且內容未經改動。這是因為,
- 李雷的私鑰只有他自己擁有,用私鑰(李雷的私鑰)“加密”的內容(簽名)只有用對應的公鑰(李雷的公鑰)才能解開(身份認證)
- 哈希函數的特性保證,如果紙條內容在傳遞過程中改變,則得到的摘要[2] 一定與摘要[1] 不同(完整性)
總結
對於雙鑰系統,加密解密時,
- 公鑰用於加密,私鑰用於解密
身份認證時,
- 私鑰用於簽名,公鑰用於驗證
如果喜歡文章, 不妨按下喜歡訂閱支持
如果真的想支持我進行創作與實踐計畫, 也可以進行打賞
BTC (BTC) : 1LFRBqvWR9GGizBzoFddkb5xRpAzKRVoDC
BTC (BSC) : 0xe1cda3eb778d1751af17feac796a4bbe4dbca815
BTC (ERC20) : 0xe1cda3eb778d1751af17feac796a4bbe4dbca815
USDT (TRC20) : TT7wgKuYoHwfRy3vCr38Qy3gnS3JJ1aKvn
如果想使用幣安, 可以使用我的推薦連結可以節省手續費10%
或使用推薦碼 : A5YRMD2T