Hyperledger Fabric中的Identity
Hyperledger Fabric中的Identity
什麽是Identity
區塊鏈網絡中存在如下的角色:peers, orderers, client application, administrators等等。每一個這樣的角色都有一個身份標識(Identity),該身份標識是通過X.509 數字證書來表示的。這些身份標識決定了該角色的對區塊鏈網絡上資源的權限,比如是否有權限訪問區塊鏈上的某種信息。
數字身份有很多附加屬性,供fabric來判斷權限。數字身份給出了一個身份的組合結構,與之相關的屬性稱之為principal。Principals 就像用戶ID或者是群組ID,但是更加復雜,因為principal中包含了該角色的一系列屬性信息。當我們談論principal的時候,就是在說覺得角色權限的各種屬性信息。
為了保證身份(identity)是可以被驗證的,Identity必須來自於一個受信任的頒發機構。在Fabric中,這是通過membership service provider (MSP) 來實現的。MSP是Fabric中的一個組件,它定義了管理有效identity的規則。Fabric中默認的MSP實現是使用X.509證書作為identity,采用傳統的PKI(Public Key Infrastructure )結構模型。
說明Identity使用的簡單場景
假設你正在逛超市買東西,在買單時發現收銀臺只支持銀聯和visa的銀行卡。這時如果你想使用一張不屬於銀聯和visa的卡來支付,無論你的卡中是否有足夠的余額,這都是不被收銀員接受的。
有一張有效的信用卡是不夠的,還需要被超市所支持。PKI和MSP以相同的方式運作,PKI提供了一系列identity,而MSP來指明哪一個identity才是區塊鏈網絡的參與者。
PKI證書頒發和MSP提供了相似的功能,PKI就像一個銀行卡發行機構,它分發很多不同類型的可以驗證的Identity。MSP就像被超市所接受的銀行卡,決定哪些Identity是可以信任的區塊鏈網絡成員。MSP講可驗證的Identity轉化為區塊鏈網絡的成員。
什麽是PKI
A public key infrastructure (PKI)是一組提供網絡通訊安全的信息技術。https中的"s"字母就是由PKI來實現的,在傳統的http上加入PKI技術來實現網絡通信安全。
PKI由Certificate Authorities(CA) 組成,它向各方(例如,服務的用戶、服務提供者)頒發數字證書,然後使用它們在與環境交換的消息中進行身份驗證。一個Certificate Revocation List (CRL) 中包含了那些已經失效的證書的引用。證書可以被撤銷,比如當一個與證書關聯的私有加密材料泄露時,該證書應該被撤銷。
盡管區塊鏈不僅僅是一個通訊網絡,但是它也是依賴於PKI來實現在網絡參與者之間的安全通訊的。理解基本的PKI與MSP,對於理解區塊鏈中消息的傳輸是十分重要的。
PKI有一下四個關鍵元素:
- Digital Certificate 數字證書
- Public and Private Keys 公鑰、私鑰
- Certificate Authorities 證書頒發機構
- Certificate Revocation List 證書撤銷列表
關於PKI的介紹可以看看Wikipedia的PKI詞條。
Digital Certificates 數字證書
數字證書是有個文檔,其中包含了一系列證書中包含的屬性。最常見的數字證書類型是符合X.509標準的證書,該標準允許在其結構中編碼identity細節。
比如說,位於底特律的某個汽車制造廠家可能在其數字證書中會包含諸如地點、行業、UID等一系列信息。數字證書就像身份證一樣,記錄了所有者的關鍵信息。在X.509證書中,有許多屬性信息,我們僅僅看一下如下圖所示的幾個。
上圖這個數字證書描述了一個名為Mary Morris的組織,Mary是證書的所有者(主人),黑色加粗的一行文字描述了Mary的關鍵信息。該證書也描述了很多其他信息。更重要的是,Mary的公鑰是隨著證書分發的,而私鑰卻不是。
Mary的所有屬性都可以用密碼學加密記錄,以防止被篡改。加密學允許Mary提供他的數字證書給其他人驗證他的身份,只要其他人相信證書的頒發機構(CA)。只要CA保證這種加密信息的安全,任何讀取該證書的人都可以確信Mary的信息沒有被篡改過。可以將Mary的X.509證書看做是不會被篡改的數字身份。
Authentication, Public keys, and Private Keys
在安全通訊中,身份認證和消息完整性是兩個很重要的概念。身份認證是說消息交換的雙方知道是哪個發來的消息。而消息完整性是說,消息在傳輸過程中沒有被破壞。比如說,你會去確認跟你交易的是否就是Mary而不是張三。Mary發給你一個信息,你想確認信息在傳輸中沒有被張三更改。
傳統的認證機制是基於數字簽名的,允許用戶對消息進行數字簽名。數字簽名也可以保證簽名消息的完整性。
技術角度來看,數字簽名需要各方都持有兩個加密秘鑰: 一個是公鑰,可以廣泛使用並朝哪個檔身份驗證錨;另一個是私鑰,用於在消息上生成數字簽名。數字簽名的接受方可以通過檢查其附屬簽名在於其發送方的公鑰下是否有效來驗證消息的來源和完整性。
私鑰與公鑰關系的唯一性使得加密的消息安全傳輸成為可能。唯一性的數學關系是這樣的,私鑰可以用來在消息上產生只符合特定公鑰的簽名,而且只在該消息上符合。
Certificate Authorities
一個節點加入區塊鏈網絡是通過節點從一個受信任的機構那裏獲取一個數字身份來達到的。在多數情況下,數字身份是以加密的數字證書(X.509)表示,該證書由Certificate Authorities(CA)所頒發。
CA是網絡安全協議的一部分,你可能聽過一些,比如:Symantec (originally Verisign), GeoTrust, DigiCert, GoDaddy, and Comodo等等。
CA向不同的角色分發證書,證書是被CA數字簽名的,並與角色通過公鑰綁定在一起的。因此,一個人如果信任CA(知道CA的public key),那麽他就可以信任與該公鑰綁定的角色。
證書可以被廣泛的傳播,因為證書中不包含角色或者是CA的私鑰。
CA也有證書,它們可以廣泛地提供證書。這允許給定CA頒發的標識的使用者通過檢查證書是否只能由相應的私鑰(CA)的持有者生成來驗證它們。
在區塊鏈網絡中,每個角色如果想與網絡中互動,都需要一個數字身份。您可能會說,可以使用一個或多個CA從數字的角度定義組織的成員。它是為組織的參與者提供可驗證的數字身份的基礎的CA。
Root CAs, Intermediate CAs and Chains of Trust
CA可以分為兩種:Root CA和Intermediate CA。因為Root CAs (Symantec, Geotrust等)必須安全地向網絡用戶分發數以億計的證書,所以將這個過程擴展到所謂的 Intermediate CA是有意義的。這些Intermediate CA由 Root CA或其他中介機構頒發證書,允許為鏈中的任何CA頒發的任何證書建立“信任鏈”。這種可以追蹤回Root CA的能力,不僅讓CA在提供安全的功能的同時進行擴展(這種方式允許組織受信任地使用Intermediate CA),而且CA鏈也避免了Root CA的泄露,ROOT CA泄露會危及整個鏈的信任。另一方面,如果一個中間CA被破壞了,暴露量就會小得多。
如上圖所示,信任鏈是通過一個ROOT CA和一系列intermediate CA來建立的。每個CA都可以簽署新的CA來構成信任鏈的一部分。
當涉及到跨多個組織頒發證書時,中間的CAs提供了大量的靈活性,這對於許可的區塊鏈系統(如Fabric)非常有用。例如,您將看到不同的組織可能使用不同的根CAs,或者相同的根CA使用不同的中間CAs——它確實取決於網絡的需要。
Fabric CA
CA太重要了,所以在Fabric中提供了一個內建的CA組件,以在區塊鏈中創建CA。這個組件就是Fabric CA,這是一個私有的Root CA提供者,可以用來管理網絡成員的數字身份(通過X.509證書)。因為Fabric CA是針對Fabric的根CA需求的定制CA,所以它本質上不能為瀏覽器中的通用/自動使用提供SSL證書。但是,由於某些CA必須用於管理標識(甚至在測試環境中),所以Fabric CA可以用於提供和管理證書。
Certificate Revocation Lists
Certificate Revocation Lists(CRL)很容易理解,他就是一系列已經被撤銷的證書的引用。
如果一個第三方想去驗證另一方的身份時,他首先會檢查CA中的CRL是否有該證書,已確認該證書沒有被撤銷。
Hyperledger Fabric中的Identity