當前位置:
首頁 > 最新 > 密碼學及公鑰基礎設施入門

密碼學及公鑰基礎設施入門


學習密碼學背後的基本概念,主要是保密性、完整性和身份認證。
-- Alex Wood
致謝
編譯自 |https://opensource.com/article/18/5/cryptography-pki作者 | Alex Wood譯者 | Andy Song (pinewall) 共計翻譯:25篇 貢獻時間:87 天
學習密碼學背後的基本概念,主要是保密性、完整性和身份認證。
安全通信正快速成為當今互聯網的規範。從 2018 年 7 月起,Google Chrome 將對全部使用 HTTP 傳輸(而不是 HTTPS 傳輸)的站點開始顯示「不安全」警告
[1]

。雖然密碼學已經逐漸變廣為人知,但其本身並沒有變得更容易理解。Let"s Encrypt

[2]

設計並實現了一套令人驚嘆的解決方案,可以提供免費安全證書和周期性續簽;但如果不了解底層概念和缺陷,你也不過是加入了類似「貨物崇拜cargo cult

[3]

」的技術崇拜的程序員大軍。

安全通信的特性
密碼學最直觀明顯的目標是保密性confidentiality:消息message傳輸過程中不會被窺探內容。為了保密性,我們對消息進行加密:對於給定消息,我們結合一個密鑰key生成一個無意義的亂碼,只有通過相同的密鑰逆轉加密過程(即解密過程)才能將其轉換為可讀的消息。假設我們有兩個朋友Alice 和 Bob
[4]

,以及他們的八卦nosy鄰居 Eve。Alice 加密類似 "Eve 很討厭" 的消息,將其發送給 Bob,期間不用擔心 Eve 會窺探到這條消息的內容。

對於真正的安全通信,保密性是不夠的。假如 Eve 收集了足夠多 Alice 和 Bob 之間的消息,發現單詞 「Eve」 被加密為 "Xyzzy"。除此之外,Eve 還知道 Alice 和 Bob 正在準備一個派對,Alice 會將訪客名單發送給 Bob。如果 Eve 攔截了消息並將 「Xyzzy」 加到訪客列表的末尾,那麼她已經成功的破壞了這個派對。因此,Alice 和 Bob 需要他們之間的通信可以提供完整性integrity:消息應該不會被篡改。
而且我們還有一個問題有待解決。假如 Eve 觀察到 Bob 打開了標記為「來自 Alice」的信封,信封中包含一條來自 Alice 的消息「再買一加侖冰淇淋」。Eve 看到 Bob 外出,回家時帶著冰淇淋,這樣雖然 Eve 並不知道消息的完整內容,但她對消息有了大致的了解。Bob 將上述消息丟棄,但 Eve 找出了它並在下一周中的每一天都向 Bob 的郵箱中投遞一封標記為「來自 Alice」的信封,內容拷貝自之前 Bob 丟棄的那封信。這樣到了派對的時候,冰淇淋嚴重超量;派對當晚結束後,Bob 分發剩餘的冰淇淋,Eve 帶著免費的冰淇淋回到家。消息是加密的,完整性也沒問題,但 Bob 被誤導了,沒有認出發信人的真實身份。身份認證Authentication這個特性用於保證你正在通信的人的確是其聲稱的那樣。
信息安全還有其它特性
[5]

,但保密性、完整性和身份驗證是你必須了解的三大特性。

加密和加密演算法
加密都包含哪些部分呢?首先,需要一條消息,我們稱之為明文plaintext。接著,需要對明文做一些格式上的初始化,以便用於後續的加密過程(例如,假如我們使用分組加密演算法block cipher,需要在明文尾部填充使其達到特定長度)。下一步,需要一個保密的比特序列,我們稱之為密鑰key。然後,基於私鑰,使用一種加密演算法將明文轉換為密文ciphertext。密文看上去像是隨機雜訊,只有通過相同的加密演算法和相同的密鑰(在後面提到的非對稱加密演算法情況下,是另一個數學上相關的密鑰)才能恢復為明文。
(LCTT 譯註:cipher 一般被翻譯為密碼,但其具體表達的意思是加密演算法,這裡採用加密演算法的翻譯)
加密演算法使用密鑰加密明文。考慮到希望能夠解密密文,我們用到的加密演算法也必須是可逆的reversible。作為簡單示例,我們可以使用XOR
[6]

。該運算元可逆,而且逆運算元就是本身(),故可同時用於加密和解密。該運算元的平凡應用可以是一次性密碼本one-time pad,不過一般而言並不可行

[7]

。但可以將 XOR 與一個基於單個密鑰生成任意隨機數據流arbitrary stream of random data的函數結合起來。現代加密演算法 AES 和 Chacha20 就是這麼設計的。

我們把加密和解密使用同一個密鑰的加密演算法稱為對稱加密演算法symmetric cipher。對稱加密演算法分為流加密演算法stream ciphers和分組加密演算法兩類。流加密演算法依次對明文中的每個比特或位元組進行加密。例如,我們上面提到的 XOR 加密演算法就是一個流加密演算法。流加密演算法適用於明文長度未知的情形,例如數據從管道或 socket 傳入。RC4
[8]

是最為人知的流加密演算法,但在多種不同的攻擊面前比較脆弱,以至於最新版本 (1.3)的 TLS (「HTTPS」 中的 「S」)已經不再支持該加密演算法。Efforts

[9]

正著手創建新的加密演算法,候選演算法ChaCha20

[10]

已經被 TLS 支持。

分組加密演算法對固定長度的分組,使用固定長度的密鑰加密。在分組加密演算法領域,排行第一的是先進加密標準Advanced Encryption Standard
[11]

(AES),使用的分組長度為 128 比特。分組包含的數據並不多,因而分組加密演算法包含一個工作模式

[12]

,用於描述如何對任意長度的明文執行分組加密。最簡單的工作模式是電子密碼本Electronic Code Book

[13]

(ECB),將明文按分組大小劃分成多個分組(在必要情況下,填充最後一個分組),使用密鑰獨立的加密各個分組。



喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Linux中國 的精彩文章:

AWS 案例研究:LBE

TAG:Linux中國 |