【译】PGP Web of Trust: Core Concepts Behind Trusted Communication
但是,還有另一個廣泛使用的PKI標準,其開發的具體目標是不需要集中的認證機構,而是依賴于常規用戶之間的信任關系。 它在1991年首次在原始的PGP軟件中實現,并從那時起發展成為一個強大的開放標準,稱為OpenPGP。
如果你曾經使用過Linux,你很可能沒有意識到使用OpenPGP。 OpenPGP的開源實現稱為GnuPG(代表“GNU Privacy Guard”),幾乎所有的發行版都依賴GnuPG進行包完整性驗證。 下一次運行“yum install”或“yum update”時,每個軟件包將在其允許安裝到您的系統上之前根據其加密簽名進行驗證。 這確保軟件在主服務器上的分發開發人員加密簽名的時間和下載到系統的時間之間沒有發生變化。
然而,實際上使用GnuPG的人數遠遠少于原來的設計 - 在不受信任的媒體(如互聯網)中安全地交換信息,甚至更少人對信任關系應該如何工作有很好的理解。
在這個迷你系列文章中,我們將看看信任網絡是什么以及如何使用它來建立安全可靠的通信。
需要信任
密碼通信涉及兩個核心方面:
- 混淆 - 即使他們可以竊聽你的所有通信,你的敵人也不能讀取你的消息內容
- 驗證 - 您的朋友必須能夠驗證郵件是否來自您,并且沒有任何改動
為了模糊消息,我們加密它。 為了使消息可驗證,我們為其添加密碼數字簽名。 一條既加密又簽名的消息滿足我們的安全要求。 然而,在你的朋友可以驗證你的數字簽名之前,他或她必須非常確定用于簽名的密鑰實際上是你的,而不是只假裝成你的敵人。
這種確定性就是我們所說的“信任”。
核心PKI概念
我們只是在同一頁面上,讓我們回顧一些核心的PKI概念。 PKI依靠一些非常大素數的整齊數學特性來工作。 這篇文章的細節并不重要,所以我們會直接跳到實際的結果。 在PKI中,您有兩個密鑰 - 一個只有您可以訪問(“私鑰”),一個您可以隨意發給任何想要與您安全通信的人(“公鑰”)。
把它想象成一個奇特的鎖和兩把鑰匙 - 公鑰只能鎖住它,而私鑰只能解鎖它。 如果有人想給你發一條消息,他們首先用你的公鑰加密它。 使用公鑰鎖定的消息只能使用相應的私鑰解鎖,因此,當您收到此類消息時,可以確保沒有人能夠在傳輸過程中讀取其內容。
但是,由于您的公鑰可供所有人使用,任何人都可以向您發送加密郵件。 你怎么知道這個消息實際上來自你的朋友愛麗絲而不是你的敵人夏娃,假裝是愛麗絲? 這是數字簽名進入的地方。在加密消息之前,Alice用她的私鑰簽名。 當你收到消息并解密它時,你可以通過將簽名與你知道屬于Alice的公鑰進行比較來驗證它是否來自Alice。
只要您和愛麗絲都能很好地保護您的私鑰,這種通信就可以保證安全和防篡改。
信任的問題
正如我前面所說的,“信任”是我們對Alice擁有的公鑰實際上屬于Alice的確定性。 如果你和愛麗絲住在同一棟房子或鄰居,建立這樣的信任很容易 - 你見面喝咖啡,面對面交換你的公鑰。
但是如果你需要與Chloe進行安全溝通呢? 她是愛麗絲的好朋友,但她住在另一個海岸,你們兩人從未見過面。 或者如果Chloe邀請Dharma和Ezri,他們又邀請Finn和Gabby? 你怎么能相信你從未見過的人的關鍵?
這就是X.509和OpenPGP在解決這個問題的方法上存在分歧的地方。 X.509建立了一個可信機構體系。 比如說,西海岸的每個人都必須在愛麗絲驗證(簽署)它的密鑰才能被信任,而東海岸的每個人都必須有克洛伊簽署的密鑰。 Alice和Chloe交叉簽名他們自己的密鑰,所以你最終得到一個信任等級。 只要你信任愛麗絲,你就可以安全地與其他人溝通。 這很簡單直接,但它有一個重要的缺點。 邪惡的夏娃只需要訪問克洛伊的私鑰就可以滲透你的整個組織。
OpenPGP決定選擇一種不同的方法,而不是像Alice和Chloe那樣指定信任當局(CA),他們必須信任CA層次結構才能工作,OpenPGP讓您,用戶,決定您信任的人,以及多少。
由此產生的框架被稱為“信任網”。 讓我們看看更詳細的工作原理。
Alice,Bob和Anne d'Autriche
密碼學家通常使用諸如“愛麗絲,鮑勃和夏娃”之類的標記來描述朋友和竊聽者之間的關系,這正是我上面所做的。 但是,如果我們要考慮廣泛的信任網絡,我們很快就會感到困惑。 為了說明一些事情,我要帶上大槍,或者大槍,也就是三劍客。 如果你不完全記得整個情節,請不要擔心。 隨著我們的進展,我會更新你的記憶。
直接的信任關系
一開始,d'Artagnan以一匹黃馬抵達巴黎,然后迅速與另外三個人發起戰斗:
- M. de laFère(阿索斯)
- M. du Vallon(Porthos)
- M. d'Aramitz(阿拉米斯)
在決斗中,他們遭到試圖逮捕他們進行非法決斗的警衛的伏擊,所以四人聯合起來,共同對抗守衛,成為這個過程中的親密朋友。
為了密封他們的友誼,他們決定交換他們的公鑰。 他們還簽署了對方的公鑰,作為一種說法,“我,d'Artagnan,通過添加我的簽名證明此密鑰屬于Porthos。”
以下是命令行中的外觀:
dartagnan [?] $ gpg --edit-key porthos pub 2048R / 51CDD613 created:2014-01-23 expires:永遠不會用法:SC信任:未知有效期:未知 [未知](1)。 M. du Vallon(Porthos) gpg>標志 pub 2048R / 51CDD613 created:2014-01-23 expires:永遠不會用法:SC信任:未知有效期:未知主要指紋:611C 0C6D 9B61 A091 1439 EE83 B9AE 772F 51CD D613 M. du Vallon(Porthos) 你確定你想和你簽署這個密鑰嗎? 關鍵“Charles d'Artagnan(d'Artagnan)”(CD3B1D5E) 真的簽名? (y / N)y了解關鍵有效性
現在,如果我們看看屬于Porthos的鑰匙,它會說明以下內容:
dartagnan [?] $ gpg --edit-key porthos pub 2048R / 51CDD613 created:2014-01-23 expires:永遠不會用法:SC信任:未知有效性:完整 [未知](1)。 M. du Vallon(Porthos)理解“信任”和“有效性”之間的區別很重要,因為它們是同一枚硬幣的兩個不同的面。 用GnuPG的說法,“有效性”代表我們確定他們的關鍵實際上屬于 Porthos。 在上述輸出中,“有效性:完整”告訴d'Artagnan他可以絕對確定它是Porthos的關鍵(在這種情況下,因為d'Artagnan自己簽了名)。 但“信任:未知”的含義是什么?
在這種情況下,“信任”(也稱為“所有者信任”)是d'Artagnan信任Porthos以驗證其他人的身份(通過查看護照,要求他們的共同朋友為他們擔保等)。 假設D'Artagnan完全信任Porthos在簽署密鑰之前做好驗證人身份的工作。 他編輯Porthos的關鍵字并將所有者信任設置為“完整”:
dartagnan [?] $ gpg --edit-key porthos pub 2048R / 51CDD613 created:2014-01-23 expires:永遠不會用法:SC信任:未知有效性:完整 [未知](1)。 M. du Vallon(Porthos) gpg>信任 pub 2048R / 51CDD613 created:2014-01-23 expires:永遠不會用法:SC信任:未知有效性:完整 [完整](1)。 M. du Vallon(Porthos) 請確定您信任此用戶的距離,以便正確驗證其他用戶的密鑰 (通過查看護照,檢查來自不同來源的指紋等) 1 =我不知道或不會說 2 =我不信任 3 =我相當信任 4 =我完全信任 5 =我最終信任 m =回到主菜單 你的決定? 4 pub 2048R / 51CDD613 created:2014-01-23 expires:永遠不會用法:SC信任:完整有效性:完整 [完整](1)。 M. du Vallon(Porthos) 請注意,顯示的密鑰有效期不一定是正確的 除非你重新啟動程序。 gpg> q在D'Artagnan為Athos,Porthos和Aramis簽名后,他的信任網絡非常直接,可以用簡單的圖表顯示出來。
當Porthos送過Planchet成為d'Artagnan的新代客時,d'Artagnan用??信任網證實Planchet是他自稱的人,因為他的鑰匙帶有Porthos的簽名:
dartagnan [?] $ gpg --list-sigs planchet pub 2048R / 30EA3A2A 2014-01-23 uid Planchet sig 3 30EA3A2A 2014-01-23 Planchet sig 51CDD613 2014-01-23 M. du Vallon(Porthos)GnuPG告訴他關鍵是完全有效的:
dartagnan [?] $ gpg --edit-key planchet pub 2048R / 30EA3A2A創建時間:2014-01-23過期時間:永不使用:SC信任:未知有效性:完整 [完整](1)。 圓片這是行動中的信任網絡。 由于d'Artagnan信任Porthos在簽署密鑰前驗證人的身份,當Planchet出現時,d'Artagnan知道他實際上是Planchet--因為Porthos通過簽署密鑰為他提供了保證。
設置所有者信任
您會注意到我們對Planchet再次有“信任:未知” - 這是因為我們還沒有將所有者信任分配給他的鑰匙。 作為一般規則, “有效性”是我們根據人的鑰匙上的簽名計算出來的,而“信任”是我們必須自己分配給每個鑰匙的東西,以便它說出“未知”以外的東西(除非信任簽名,但我們將在下一篇文章中詳細介紹)。
每次我們簽署某人的密鑰時,最好還是設置所有者信任,以便將來我們可以使用這種信任關系來驗證其他人的密鑰的身份。 在Planchet的案例中,d'Artagnan決定只是暫時地相信他,至少在目前這一點上 - 畢竟他們只是剛剛見過面:
gpg>信任 pub 2048R / 30EA3A2A創建時間:2014-01-23過期時間:永不使用:SC信任:未知有效性:完整 [完整](1)。 圓片 請確定您信任此用戶的距離,以便正確驗證其他用戶的密鑰 (通過查看護照,檢查來自不同來源的指紋等) 1 =我不知道或不會說 2 =我不信任 3 =我相當信任 4 =我完全信任 5 =我最終信任 m =回到主菜單 你的決定? 3 pub 2048R / 30EA3A2A創建時間:2014-01-23過期時間:永不使用:SC信任:邊際有效性:完整 [完整](1)。 圓片 請注意,顯示的密鑰有效期不一定是正確的 除非你重新啟動程序。 gpg> q他為所有朋友的代言人都做了同樣的事情 - 他相信巴贊,格里莫和Mousqueton的關鍵是“邊緣化”。 所以,現在d'Artagnan的信任網絡看起來像下面的圖表。 盒子的顏色顯示了Artagnan對每個鍵所賦予的信任(紅色表示完全信任,而藍色表示邊際信任),箭頭表示誰簽了誰的鍵。
理解邊際信任
當我們發現一個由我們僅僅信任的人簽署的密鑰時會發生什么? 假設有一天d'Artagnan會見了他的房東M. Bonacieux,并且M. Bonacieux的唯一簽名是Planchet? 這是gpg會議:
dargagnan [?] $ gpg --list-sigs bonacieux pub 2048R / D672573B 2014-01-28 uid M. Bonacieux sig 3 D672573B 2014-01-28 M. Bonacieux sigchet 99CCAC09 2014-01-28 Planchet dargagnan [?] $ gpg --edit-key bonacieux pub 2048R / D672573B已創建:2014-01-28過期:從未使用過:SC信任:未知有效性:邊際 [邊際](1)。 M. Bonacieux正如你所看到的,有效性被標記為“邊際”,這是gpg的說法,只能邊際保證這個“M. Bonacieux”實際上是他所說的他是誰。 事實上,如果d'Artagnan從M. Bonacieux收到gpg簽名的消息,并對其運行“gpg --verify”,它將返回以下輸出:
dartagnan [?] $ gpg - 驗證message-from-bonacieux.asc gpg:簽名使用RSA密鑰ID D672573B 2014年1月28日02:10:41 EST gpg:來自“M. Bonacieux的好簽名 gpg:警告:此密鑰未通過足夠可信的簽名認證! gpg:簽名不屬于所有者。 主要指紋:BE8B 2FE0 C433 79A4 7A6B C045 F04F 9E3D D672 573B如果我們將信任關系表示為圖表,我們會將M. Bonacieux的方框標記為灰色,因為沒有足夠的簽名來確保完整的有效性。
為了加強關鍵效度,我們需要有一個我們完全信任的人簽署他的密鑰,或者我們需要找到另外兩個邊緣信任的人,所以M. Bonacieux的關鍵是總共有3個邊緣信任簽名 。 當Mousqueton和Bazin都將他們的簽名添加到M. Bonacieux的關鍵字時,會發生以下情況:
dartagnan [?] $ gpg - 驗證message-from-bonacieux.asc gpg:簽名使用RSA密鑰ID D672573B 2014年1月28日02:10:41 EST gpg:來自“M. Bonacieux”的好簽名 主要指紋:BE8B 2FE0 C433 79A4 7A6B C045 F04F 9E3D D672 573B dargagnan [?] $ gpg --edit-key bonacieux pub 2048R / D672573B已創建:2014-01-28過期:從未使用過:SC信任:未知有效性:完整 [完整](1)。 M. Bonacieux因為M. Bonacieux現在在他的密鑰上有三個邊緣信任的簽名,所以他的密鑰有效期現在標記為“滿”。
概括
這基本上都是理解OpenPGP的信任網絡的核心概念。 回顧一下:
- 您通過簽署密鑰來擔保某人的身份。
- 關鍵的“有效性”是我們確信有問題的關鍵屬于我們想與之交流的人。 它是根據所有者信任和密鑰上簽名的數量計算得出的。
- 密鑰“信任” 必須由用戶為密鑰環中的每個密鑰設置,然后才能包含在信任度計算網絡中。
- 信任可以是完全的或邊緣的。 它只需要一個完全可信的簽名將密鑰標記為“有效”,但至少需要3個邊緣信任的密鑰才能執行相同的操作。
信任網很快就會變得非常龐大而復雜。 在下一篇文章中,我們將探討OpenPGP使用社區開發的一些機制,以幫助簡化信任管理 - 即我們將討論關鍵服務器和委托信任。
https://www.linux.com/learn/pgp-web-trust-core-concepts-behind-trusted-communication
總結
以上是生活随笔為你收集整理的【译】PGP Web of Trust: Core Concepts Behind Trusted Communication的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vitalik Buterin:Casp
- 下一篇: Distributed TensorFl