Kerckhoffs 的原則——我為什麼要公開我的密碼?
據我了解,人們對我的協議或密碼的內部了解越少,協議就越安全。然而, Kerckhoffs 的原則指出
一個密碼系統應該是安全的,即使系統的所有內容,除了密鑰,都是公共知識。
更準確地說,這是第二條原則
絕不能要求保密,而且要能夠落入敵人手中而不會造成不便;
我當然明白為什麼我應該保密,但公佈我的協議的內部結構似乎違反直覺。我為什麼要這樣做?這不會給攻擊者帶來優勢嗎?
實際上,您在問題中提到的那篇維基百科文章已經回答了您的問題:
對於公司,有時甚至是標準機構來說,像 DVD 上的 CSS 加密一樣,它是相當普遍的——對系統的內部運作保密。一些人認為這種“默默無聞的安全性”使產品更安全,更不容易受到攻擊。一個反駁的論點是,對內部結構保密可能會在短期內提高安全性,但從長遠來看,只有已經發布和分析過的系統才應該被信任。
但無論如何,讓我們更深入地了解……
Kerckhoffs的原則
供參考,這裡是 Kerckhoffs 的原文(來自Auguste Kerckhoffs,“La cryptographiemilitaire”,Journal des Sciences Militaryire,第 IX 卷,第 5-38 頁“II. DESIDERATA DE LA CRYPTOGRAPHIE MILITAIRE。”,1883 年 1 月) :
在純文字中,內容如下:
1° 該系統必須在物質上(如果不是在數學上)難以辨認;
2°不得要求保密,並且必須能夠順利落入敵人手中;
3° 密鑰必須能夠在沒有書面筆記幫助的情況下進行交流和保留,並且可以根據通信者的心血來潮進行更改或修改;
4、必須適用於電報;
5° 必須是攜帶式的,其搬運或操作不得需要多人協助;
6° 最後,考慮到要求其應用的環境,該系統必須易於使用,既不需要精神緊張,也不需要遵守一系列規則的知識。
為了您的方便,這裡是我的英文翻譯:
- 該系統必須在物理上(如果不是在數學上)是不可破譯的;
- 不得要求保密,落入敵人手中時不得造成不便;
- 密鑰必須在沒有書面說明的情況下傳達和保留,並由通訊員自行決定更改或修改;
- 它必須適用於電報;
- 必須是便攜的,其使用和操作不需要多人協助;
- 最後,考慮到控制應用程序的情況,系統必須易於使用,不需要精神緊張,或者需要遵守一系列規則的知識。
敵人知道系統
Kerckhoffs 的生存原則 nr. 2(最初的六個軍事密碼設計原則)除了說你必須在“敵人知道算法”甚至“敵人攜帶資訊”方面查看密碼的安全性之外沒有別的意思。著名的克勞德·香農曾將柯克霍夫斯的原則簡化為:“敵人知道製度”。
在決定對算法保密時可能會考慮的*“對攻擊者的優勢”實際上是**“攻擊者發現的時間問題”,因為保持算法的秘密將依賴於“通過默默無聞的安全性”*,我們都知道這是一個壞主意。
Kerckhoffs 原則的思想是,如果密碼系統的任何部分(除了個人密鑰)必須保密,那麼密碼系統就是不安全的。那是因為,如果披露系統某些細節的簡單行為會使其突然變得不安全,那麼你手上就有問題了。任何保密系統的黃金標準是其所有細節都應該能夠在不損害系統安全性的情況下公開。安全性依賴於系統本身,而不是系統的保密性。
為什麼 Kerckhoffs 的原則有意義的一個很好的例子是二戰中使用的德國 Enigma 機器。通過竊取機器,盟軍了解了有關 Enigma 機器如何工作的所有資訊。他們只需要閱讀手冊、使用密碼書並查看機器的構造和工作方式。畢竟,他們手中有一個可行的例子。縱觀歷史,有無數的秘密算法的例子落入更廣泛的知識,各種通過間諜活動、背叛和逆向工程。有時,密碼是通過純粹的演繹來重構的。比如德國的洛倫茲密碼和日本的紫碼,以及各種經典方案。
因此,Kerckhoffs 的第二原則的核心思想至今仍然適用。HTTPS、SSL 和 AES 或 RSA 等密碼的安全性取決於算法的強度,而不是保密。這些算法都已發布,並且已經創建了詳細的標準,每個人都可以查看。唯一的*“秘密”*是當您連接到安全網站(由瀏覽器和伺服器自動隨機完成)或使用 GPG 等程序加密文件時選擇的密鑰。
回顧一下:為什麼要發布密碼算法?
不發布密碼算法沒有多大意義,因為攻擊者找出你的密碼是如何工作的只是時間問題。因此,安全收益只能是暫時的。
另一方面,加密算法的發布傾向於建立信任,因為其內部的發布允許驗證相關的安全聲明。
事實上,您甚至可以將*“為什麼要發布加密算法”*的答案轉移到一個更簡單的層面:您家門鎖的安全性並不取決於保持鎖的隱藏及其機制的秘密。它的安全性來自於您保持密鑰的安全。這是 Kerckhoffs 的第二條原則最簡單的例子之一。
許多例子之一
舉個例子,讓我指出——我稱之為—— “über-publication”: Joan Daemen 和 Vincent Rijmen的“Rijndael 的設計:AES - 高級加密標準”。
這本書由分組密碼的設計者編寫,從頭開始介紹 Rijndael(通常稱為 AES)。詳細解釋了作為基本設計思想的基礎數學和寬路徑策略,並對差分和線性密碼分析的基礎進行了重新設計。後續章節回顧所有已知的針對 Rijndael 結構的攻擊,並處理實施和優化問題。最後,介紹了與 Rijndael 相關的其他密碼。
正如您可能已經註意到的那樣:它並沒有以任何方式損害 Rijndael/AES 的安全性,因為它的所有內部都已發布。恰恰相反——相關的出版物只會讓人們對密碼更有信心。