一般來講,一旦和 PKI (公鑰基礎設施)打上交道,就擁有了軟件工程師,技術支持員,專業組織和商務人員的重重保護。儘管 PKI 號稱公鑰基礎設施,也的確存在於基礎設施中,但卻是一種與外界隔絕的密鑰。

區塊鏈基於數字簽名,這點是 PKI 的核心。

比特幣的興起帶來了許多 PKI 複議和重新申請的使用案例。

作爲區塊鏈架構師,我被一遍遍要求解釋 PKI,也由此精煉了一套解釋的藝術。這篇文章用最簡短的篇幅和最精煉的語言完成了對 PKI 的解析。

第一次接觸 PKI 的時候,我纔不到 13 歲,我們一見如故,也因此讓我在甘肅省圖書館一泡就是數月。儘管如此,我更想用寥寥數分鐘來詮釋 PKI。

科普 PKI

本文旨在讓 PKI 淺顯易懂。儘管我的日常工作是圍繞着區塊鏈展開的,但爲了讓讀者更清晰地理解 PKI,本文將不含蓋區塊鏈的內容。

僅有密碼還不夠

密碼作爲針對已知和受信方的驗證工具非常有效。下面是一個簡單的例子:

保險公司:您是我們的用戶嗎?

用戶:是的,這是我的密碼。

事情就這麼簡單。

當需要驗證第三方是,密碼就沒用了。

第三方:你是某保險公司用戶嗎?

用戶:是的

第三方:請證明。

用戶 : 這是我的密碼。

第三方 :(登入中) 密碼正確,可以。

第三方 : 腦子中在想 : 既然我也可以登錄你的賬戶,我就能冒用你的身份了…

如果這時你在想“單點登錄”,暫且打住。我現在沒有空理會“單點登錄”,我會另找時候好好解釋。

密碼的缺陷還不僅如此,比如同一密碼是在不同場合重複使用的。當你需要登錄的網站被入侵了,你不僅需要改掉該網站的密碼,同時還要改掉使用同一密碼的其他網站的密碼。

最後,密碼在驗證過程中大量使用,注意是驗證不是授權,兩者有本質區別。

銀行 : 我們將受理您的退款申請,首先需要您的密碼。

用戶 :dogBreath#231!

銀行 : 好的。是您本人的操作。根據我們的記錄,該筆付款是經您授權的。

用戶 : 我沒有授權。

銀行 : 您昨天登錄了我們的網上銀行。

用戶 : 是的

銀行 : 然後您點擊了“授權支付”。

用戶 : 我沒有!

銀行 : 您的確點擊了。

用戶 : 證據呢?

銀行:計算機顯示您的確做了該項操作。

用戶 : 你的計算機怎麼顯示還不是你說了算!那是你的計算機!

該案例中,密碼無法讓銀行提供授權證明。

1) PKI 運行原理:數字簽名

首先,你通過計算機獲取一個私鑰和一個公鑰。你不需要也不可以接受別人給你私鑰,因爲別人給你的私鑰是他們的而不是你的。

然後,你把公鑰給其他人。哪天你要發送給那人信息時,只需附上簽名,就能證明這條信息的確來自於你本人。

簽名 := 簽上 (信息 , 私鑰)【:= 意味着‘由某人獲取’.】

然後接收方可以驗證:驗證 (信息 , 簽名 , 公鑰)

回覆將會是真的或假的,意味着簽名的合法與否。

你可能會問:“何必那麼麻煩?如果 Alice 寫一封郵件給同事 Bob,即使不用複雜的數字簽名,Bob 也知道時 Alice 寄郵件給他,因爲 Bob 的收件箱裏標記着這封郵件來自 Alice。

Bob 的自信來自他對收件箱的信任。數字簽名是證明信息本身,無論該信息存儲在何處。如果 Bob 把郵件從郵箱裏複製到 U 盤裏,拿着 U 盤給 Carol 看,Carol 很可能不會相信是 Alice 寫的該封郵件。有了數字簽名,Alice 的信息就是 Alice 的,並與 Bob 和他的郵箱的可信度無關。

“有什麼大不了的。”我聽見你在嘀咕:“好像收件箱還不夠好似的。”信任信息本身的確是件重要的事。試想你從郵局收到一張支票,你需要這是一張有簽名的支票嗎?是的。即使郵政局說這張支票是寄件人本人給的,你需要有簽名嗎?沒錯,你仍然需要支票上的簽名。很顯然,這就是數字簽名這麼重要的原因。

2) PKI 運行原理:權威

上一章節裏,Alice 創建了私鑰和公鑰,她想寫封郵件給 Bob,並附上了簽名。然而,她沒法和 Bob 見面,所以 Bob 需要 Alice 的公鑰來鑑別簽名的真僞。

Alice 可以通過電子郵件把公鑰寄給 Bob。爲了確保郵件的真實性,她可以對郵件進行簽名。但 Bob 一開始並沒有 Alice 的公鑰,他要如何鑑別這封郵件的真僞呢?

Alice 和 Bob 需要一箇中間人 Carlos,Carlos 深得 Alice 和 Bob 的信任,並且兩人知道 Carlo 的公鑰,如果 Carlos 發送給他們任何信息,他們可以用公鑰鑑別 Carlos 數字簽名的真僞。

操作如下:

第一步,Alice 拜訪 Carlos。Carlos 簽了如下信息:
carlos 簽名 := 簽了 (“我與 Alice 會面,她告訴我她的公鑰是 0xd1fc.”,Carlos 公鑰)

第二步,Alice 寫了信息給 Bob,並簽了名。
Alice 簽名 := 簽了 (“Bob, 我們可以聯繫嗎 ?”,0xd1fc)

第三步,Alice 將信息整合打包發送給了 Bob:
Bob, 我們能聯繫嗎 ? 我是 Alice,附上 Carlos 的證明。
Alice 簽名 e

Carlos 寫道 :
我與 Alice 會面,她告訴我她的公鑰是 0xd1fc
carlos_ 簽名

Alice 的任務完成了,接下來到 Bob 了,要看到信息,要做兩件事:
1. 驗證 (“我與 Alice 會面,她告訴我她的公鑰是 0xd1fc”, carlos 簽名 e,carlos 公鑰)
2. 驗證 (“Bob, 我們能聯繫嗎 ? 我是 Alice,附上 Carlos 的證明”, alice_ 簽名 , 0xd1fc)

第一步 Bob 通過查看 Carlos 的簽名得知了 Alice 的公鑰是 0xd1fc。由於 Bob 信任 Carlos,他籤的任何信息 Bob 均相信,也更讓 Bob 相信 Alice 的公鑰是 0xd1fc.。
第二步用 Carlos 處確認到的公鑰檢查 Alice 的簽名,也更讓 Bob 相信是通過 Alice 公鑰加密的真實信息。

由此,Bob 認定信息是來自 Alice 的。

按照約定俗塵的說法,我們稱 Carlos 爲“權威”。“權威”最早用於 20 世紀 80 年代,如今已經過時並切不夠確切。如果 PKI 被比作法庭,那麼 Carlos 就是目擊證人,他並沒有任何權威,搖擺的空間也僅限於撒謊或者不撒謊而已。權威一次將 Carlos 認作爲法官,其實不然。權威的最初含義是可信力,同樣不然。比如,中國互聯網權威機構 CNNIC 在 2015 年公鑰事件上並沒有給出實情。(該組織勢力龐大,所以在第一次否認撒謊失敗後,將罪責推給了合作方,一家埃及企業。)

如果是我發明的 PKI,我會給他們起名叫作“公證人”或者“見證人”。
Carlos 被叫做權威的後果是,他所簽名的信息(我與 Alice 會面,她告訴我她的公鑰是 0xd1fc)。

3) PKI 工作原理:驗證真僞
PKI 提供可信的數字簽名,用以兩種用途,授權和驗證。

授權很好理解 :
“我,Alice,授權支付”
alice_ 簽名

相反,用戶被授權而不是授權的應用則更爲廣泛。這與科技無關,而關乎社會結構中的慣性,組織的授權需求總是先於個人授權的需求得到滿足。

至於驗證真僞,是這麼回事:
首先,得有一個被認證人,也就是用戶驗證的對象。比方說 Alice 要向 Victor 證明自己是 Alice,也就是被驗證人。

Victor: 如果你是 Alice,你就能以 Alice 的名義簽名。

Alice: 當然。
“我是 Alice.”
alice_ 簽名

Victor: 等等。真的 Alice 可能對另一個被認證人 Veronicau 做了同樣的事情,而你恰巧在場,你複製了她的簽名。

Alice: 那麼你要我怎麼證明?

Victor: 這樣籤 :“親愛的 Victor, 我是 Alice。”

Alice: 給你,現在你一定相信我了。
“親愛的 Victor, 我是 Alice。”
alice_ 簽名

這樣的事情通常發生在 VISA 和 MasterCard 等支付通道。當你刷信用卡付款時,POS 機發出一個挑戰信息,就像“親愛的 Victor,我是 Alice。”事實上發送任何內容的挑戰信息都可以,因爲 Victor 的目的是確保 Alice 不可能在他發送挑戰信息之前預先準備信息。因此,POS 機使用隨機且不可預料的內容發信息。現實中,POS 機發出的一些信息很好預測,這是一種安全風險,是由墨爾本安全專家 PeterFillmore 最早發現。

總結

PKI 是一種基本的的信任機制。如不探究 PKI 的運行原因,而僅要理解 PKI 的工作原理還是很簡單的,對普通人來說一小時以內就能搞定,不需要大學學歷和數學背景,我本人就不具備任何大學學歷。然而要弄明白簽名機制或者 Sign ()簽名公式並不容易,好在對於大多數使用 PKI 的人,像法律工作者和區塊鏈倡導者完全無須接觸得那麼深入。

補充閱讀

PKI (Public Key Infrastructure)翻譯過來就是公鑰基礎設施,可以理解爲利用公鑰技術爲網絡應用提供加密和數字簽名等密碼服務以及必需的密鑰和證書管理體系。它是一個提供安全服務的基礎設施,PKI 技術是信息安全技術的核心,同時也是電子商務的關鍵和基礎技術。

PKI 既不是一個協議,也不是一個軟件,它是一個標準,在這個標準之下發展出的爲了實現安全基礎服務目的的技術統稱爲 PKI。

PKI 是一個標準,它包括一些基本的組件,不同的組件提供不同的服務,主要由一下幾個組件組成:

認證中心 CA(證書籤發):CA 機構,又稱爲證書授證 (Certificate Authority) 中心,是 PKI 的”核心”,即數字證書的申請及簽發機關,CA 必須具備權威性的特徵,它負責管理 PKI 結構下的所有用戶 (包括各種應用程序) 的證書,把用戶的公鑰和用戶的其他信息捆綁在一起,在網上驗證用戶的身份,CA 還要負責用戶證書的黑名單登記和黑名單發佈。

X.500 目錄服務器 (證書保存):X.500 目錄服務器用於”發佈”用戶的證書和黑名單信息,用戶可通過標準的 LDAP 協議查詢自己或其他人的證書和下載黑名單信息。

具有高強度密碼算法 (SSL) 的安全 WWW 服務器 (即配置了 HTTPS 的 apache):Secure socket layer(SSL) 協議最初由 Netscape 企業發展,現已成爲網絡用來鑑別網站和網頁瀏覽者身份,以及在瀏覽器使用者及網頁服務器之間進行加密通訊的全球化標準。

Web(安全通信平臺):Web 有 Web Client 端和 Web Server 端兩部分,分別安裝在客戶端和服務器端,通過具有高強度密碼算法的 SSL 協議保證客戶端和服務器端數據的機密性、完整性、身份驗證。

自開發安全應用系統:自開發安全應用系統是指各行業自開發的各種具體應用系統,例如銀行、證券的應用系統等。

縱觀供應鏈金融行業,目前有很多的痛點,比如:信息不對稱、信息無法傳遞、清算繁瑣等等。而區塊鏈對供應鏈金融的這些痛點,有着明顯的優勢:

首先,統一憑證:在應用區塊鏈之後,各個參與方共同創建並維護一份各個環節都認同的憑證,保障數據真實和共享。其次,信任傳遞:各個節點都是參與方,其數據不可篡改、不可抵賴。該數據可以傳遞下去。最後,清算快速:區塊鏈交易能夠瞬時結算,使結算幾乎實時完成,降低清算的複雜程度。

PKI 與區塊鏈的結合點涉及實名認證、數字證書頒發、電子簽章(簽名)、司法存證和證據保全等,應用的 CFCA 相關產品有網絡身份平臺、RA 系統、電子簽章、電子存證系統等。

作者簡介:張韡武

AlphaWallet CTO
中國籍澳大利亞居民。曾在澳大利亞聯邦銀行(澳大利亞最大的金融機構)擔任區塊鏈構架師,主導了 12 個區塊鏈項目。超過 5 年的區塊鏈開發經驗,從 alt 貨幣設計到交易算法等。 R3 Corda 專家 – 任 R3 全球構架師工作組。安全和加密專家,開源系統專家。區塊鏈開發者社區公認的區塊鏈專家。之前創辦過兩個技術公司(在線文檔編輯,Linux 系統安全),2012 開始接觸比特幣和區塊鏈。詠春拳愛好者。