企業導入區塊鏈的第一道難題:私鑰管理!
前言
根據最新的 IDC 全球半年度區塊鏈支出指南,2019 年亞太地區在區塊鏈解決方案上的支出達到 5.227 億美元,與 2018 年相比增長 81%,預計企業導入區塊鏈的需求將在未來 5 年快速增長,複合年增長率為 59.8%。
雖然有越來越多企業想導入區塊鏈,然而區塊鏈卻不同於以往的企業 IT 技術,大部分的企業或技術廠商仍缺乏系統化的實作知識——例如企業參與聯盟鏈首先要面對的問題:企業該如何管理聯盟鏈的私鑰?
在這篇文章中,筆者將會提及企業私鑰管理的特殊考量、挑戰和解決思路,以及具體解決方案。
以下所稱的私鑰,若沒有特別註明,指的都是企業在聯盟鏈內的私鑰
*Daniel Huang 為本文的共同作者,同時特別感謝 李彥寬 Kevin Lee 、Frank Yang 的修訂與回饋。
企業私鑰管理的特殊考量
私鑰(Private Key)如同一枚印章,私鑰的使用者可使用私鑰在「訊息」(Message)上進行「簽章」(Sign),而簽章的結果即為「電子簽章」(Digital Signature),可以被與該私鑰成對的公鑰(Public Key)驗證。基於密碼學原理,私鑰做出的電子簽章是無法偽造的,因此可用來證明簽章者的身份。
而在企業區塊鏈 — — 也就是聯盟鏈的場景中,企業所擁有的聯盟鏈私鑰並非「個人印章」,而是如同無法任意鑄刻、對外能代表企業簽署的「公司章」。
聯盟鏈的准入制與實名制能夠讓各企業透過聯盟治理的程序知道並認同:哪個「公鑰」代表哪間公司,以認定該私鑰簽章的企業身份。這個聯盟鏈私鑰所簽署的「電子簽章」的公信力並不是企業自己說了算,而是企業與整個聯盟共同認可所賦予出來的。也就是說:聯盟鏈私鑰不是企業可以隨時任意變換的,還要整個聯盟也知道並認同才行,就如同企業不可能三天兩頭重刻公司章一樣,這一點是企業私鑰管理與公有鏈的個人私鑰保管最大的差異。
正因為聯盟鏈私鑰背後代表的主體是公司且不可隨意變更,因此企業的聯盟鏈私鑰不應該直接被個人所保管,否則隨著公司內保管人員的異動,私鑰安全便無法確保。
在理解聯盟鏈私鑰管理的特殊考量後,接下來我們就來看看:企業在私鑰管理上會碰到哪些挑戰。
企業聯盟鏈私鑰管理的挑戰
什麼是私鑰管理?
如果聯盟鏈私鑰就如同企業的公司章,那麼聯盟鏈私鑰管理其實就如同企業在管理公司章時使用的「印鑑管理」。印鑑管理就是企業內約定的一套「保管」和「調用」公司章的規則,當企業員工需要使用公司章時,就需要按照「印鑑管理」的流程向保管者調用印章;同樣地,私鑰管理指的也就是私鑰的「保管」與「調用」。
私鑰管理的難題
基於上述企業私鑰管理的特殊考量,在設計上我們會建議把私鑰的「保管權」和「調用權」分開,一來是因為私鑰代表公司,原本就不應該給個人保管,二來是基於專業分工,也不應該把保管的責任落到企業決策者們身上,企業決策者要負擔是的動用私鑰背後這件事情的決策責任,而不是提心吊膽的私鑰保管的責任。那麼,要完美實現上述「保管權」和「調用權」分開的方案,我們在設計上必須做到:
- 要找到一種可以安全保管私鑰方式,而且保管者必須安全妥善的保管私鑰,但不能有私鑰調用權限;
- 在調用私鑰簽章的同時,不可以對調用者揭露私鑰。
「保管權」和「調用權」分開的私鑰管理方案
理解上述需求與條件,我們就可以說明如上圖所示的方案設計:
- 調用者首先將「簽單」 — — 也就是需要私鑰簽章的訊息及簽章方式的要求,交給守門人;
- 守門人會判斷調用者及簽單是否滿足調用權限,若滿足則把「簽單」投入金庫;
- 金庫內進行簽章動作,最後將已經完成簽章的「簽單」交還給調用者。金庫如同黑盒子一般,外部無法窺知其運作細節,包括私鑰。
這個運作方式相當直觀,事實上也是目前企業聯盟鏈私鑰管理的最佳實務之一。那麼具體的實作方式是什麼呢?實際上能找到這樣的「金庫」跟「守門人」嗎?有的!這個技術就是筆者接下來要介紹的 Vault。
Vault:完全開源的私鑰管理方案
Vault 是由 Devops 工具領域大名鼎鼎的 Hashicorp 所開發、完全開源的秘密管理(Secret Management)系統,根據 Vault 官網,其價值主張為:“Manage Secrets and Protect Sensitive Data”,設計目標是透過秘密的集中式管理解決軟體開發中「秘密散落」(Secret Sprawl)的問題。
Vault 加密存放這些秘密,並為任何秘密——如 API 憑證,密碼,證書等等,提供統一的介面,同時提供嚴格的存取控制並記錄詳細的審計日誌(Audit Log)。
另外,除了儲存靜態秘密,Vault 提供了動態秘密(Dynamic Secret)的功能,能動態生成秘密,讓應用程式只能在一段時間內存取敏感資料,大大降低了秘密被偷竊後的風險。
在雲原生(Cloud Native)盛行的今天,從使用者到服務,再從服務到服務的每個環節都需要驗證,也因此 Vault 成為越來越炙手可熱的「加密即服務」(Encryption as a Service, EaaS)技術,不僅是雲服務平台 AWS、GCP、Azure 都提供了整合方案,連知名軟體 Kubernetes、MySQL 等都有整合 Vault 的方式,以取代原來直接接觸到秘密的操作方式。
Vault 加密即服務Vault 為什麼能作為企業私鑰管理的技術方案
回到上述我們的需求:
- 要找到一種可以安全保管私鑰方式,而且保管者必須安全妥善的保管私鑰,但不能有私鑰調用權限;
- 在調用私鑰簽章的同時,不可以對調用者揭露私鑰。
首先,它相當安全。Vault 天生就是為了保管秘密而設計,根據 Vault 的架構,甚至我們可以做到:沒有任何「單一的系統管理者」可以解密 Vault 並查看其內容。所以 Vault 來擔任「金庫」的角色,可以說是當之無愧。
接下來,誰要來擔任「守門人」?這就得靠 Vault 另一個聰明的設計——外掛程式(Plug-in)了。Vault 支援開發者能夠為其開發因為不同需求的外掛程式,而這得利於其本身良好的軟體架構。利用外掛程式,我們可以輕易地擴充 Vault 的應用程式介面(API),讓它能針對不同場景提供相應的功能。至於 Vault 是如何實現這樣的彈性的,有興趣的讀者可以參考這篇文章。
外掛程式即為守門人的角色,我們需要把「判斷可合法投遞到金庫簽章的條件」以及「簽章的方法」寫成外掛程式,跟 Vault 掛載在一起,透過 API 來跟 Vault 溝通,也就是把要簽章的內容及簽章方法透過外掛程式投遞到金庫。如此一來,就可以在「金庫」裡面完成私鑰簽章,達成調用私鑰簽章的同時,不對調用者揭露私鑰的目的。
接下來,我們即將完成最後一哩路:找到一個合適的守門人。
Vault-BX:BSOS 專為聯盟鏈私鑰管理打造的Vault 外掛程式
Vault 外掛程式運作流程完整的私鑰管理方案,除了安全的金庫之外,有賴設計良好、可滿足企業權限控管需求的守門人,而目前與區塊鏈私鑰管裡相關的 Vault 外掛程式當中比較知名的是 Vault-Ethereum。
由 Immutability 開發的 Vault-Ethereum 外掛程式是一種 Vault 區塊鏈錢包實作,這個外掛程式可以直接對區塊鏈交易進行簽章並將交易送到鏈上。然而,若對其再深入研究可以發現:Vault-Ethereum 僅針對個人使用場景設計,只能做到單一的鏈下使用者去操作 Vault 簽章,並不能滿足聯盟鏈私鑰管理「多個鏈下使用者對同一個 Vault 操作」的需求。
我們需要一個更強大的守門人
由於坊間並沒有全面為聯盟鏈而設計的 Vault 外掛程式,Vault-BX 便應運而生。Vault-BX 是 BSOS 研發團隊自主開發的 Vault 外掛程式,它完全針對聯盟鏈場景所設計,並補強了其他 Vault 區塊鏈私鑰管理外掛在企業功能上的不足,其重要功能如下:
- 多對一的私鑰調用: Vault-Ethereum 雖做到了對調用權限進行驗證,但只支援單一使用者,只要知道該使用者 ID 者,皆可調用私鑰。而 Vault-BX 支援的「驗證」功能可做到「多條簽核權限」,可以對同一個 Vault 調用同一把私鑰,滿足了企業多對一的私鑰管理需求。
- 支援各種聯盟鏈的簽章:不同的聯盟鏈技術,其交易格式亦不相同,例如:企業以太坊的交易流水號(Nonce)需要出現在簽章訊息中;而在 Fabric 中簽章訊息則需含有其他資訊如 channelID 與 chaincodeID 。Vault-BX 是支援最多聯盟鏈的 Vault 外掛程式,目前支援了多種企業以太坊客戶端如 Quorum / Besu、Hyperledger Fabric 以及 R3 Corda,功能上更通用。
- 支援私密交易的簽章:聯盟鏈特有的的私密交易(Private Transaction)在簽章時需要額外的參數實作,如 EEA 定義 privateFrom、privateFor 與 restriction。若外掛程式不特別支援,即便企業對接上了某聯盟鏈,亦無法執行該聯盟鏈的私密交易。Vault-BX 不僅支援不同聯盟鏈的簽章,對其私密交易也提供了相對應的支援,以滿足企業間私密交易的需求。
最後,我們再回顧一下這整套私鑰管理的解決方案,現在「金庫」就是 Vault,負責私鑰的安全保管及簽章,而「守門人」我們選擇了 Vault-BX 外掛程式,負責檢查調用權限並提供 Vault 正確的簽章方法。
結語
企業導入區塊鏈需求越來越多,但是對於私鑰管理往往缺乏意識,亦缺乏系統化的實作知識。區塊鏈私鑰管理不同於以往企業的密碼管理——企業內部的密碼隨時可以重新設置、重新配發,然而聯盟鏈私鑰代表公司章,更新後還需要取得其他成員的確認與認可,不可隨公司人員異動而隨意替換。因此一套調用權限和保管兩者分離、設想周全的私鑰管理機制,在系統設計上是必須的。
在本文中,筆者首先介紹了聯盟鏈私鑰管理的特殊考量,並且說明了私鑰管理的挑戰與解決思路。同時我們也看到:使用 Vault 與 Vault-BX 同時輔以企業內部的分責授權機制,即可組成一套完整的企業的私鑰管理方案。當然,BSOS 都已經完整地考量,並把這些方案都整合到我們的區塊鏈核心技術 BridgeX 內了。
最後提醒讀者,對於私鑰安全的完整性來說,調用權限管理也同等重要。本篇文章所描述之內容,並未提及企業內部的調用權限管理,例如:必須完成某一連串的簽核流程,才能夠跟守門人調用私鑰。實務上,企業可以選擇對接既有之簽核系統,也可另外導入市場上成熟的多層多簽安全方案,例如已整合進 BSOS BridgeX 的 CYBAVO 私鑰權限管理方案。