初識Clef

以太坊版本1.8.4開始,增加了獨立簽名人Clef功能,該功能目前尚處在alpha階段。它主要實現了簽署交易、簽署數據和管理賬戶。它的README中是這樣描述的:

Clef可以用來簽署交易和數據,并且可以代替geth的賬戶管理。

這使DApps不依賴于geth的賬戶管理。 當DApp想要簽署數據時,它可以將數據發送給簽名者,然后簽名者將向用戶提供上下文并要求用戶簽署數據。 如果用戶授予簽名請求,簽名者將簽名發送回DApp。

此設置允許DApp連接到遠程以太坊節點并發送本地簽名的事務。 這可以在DApp連接到遠程節點的情況下提供幫助,因為本地以太坊節點不可用,不與同步鏈或沒有內置(或有限)帳戶管理的特定以太坊節點同步。

Clef可以在同一臺機器上作為守護進程運行,也可以在usb-stick(如usb armory)中運行,或者在QubesOS類型的os設置中運行單獨的虛擬機。

乍聽起來好像沒什么新鮮的,目前以太坊DApp通過web3接口就可以完成的功能。通過通讀代碼和文檔說明后發現,其實它最大的亮點有兩個:

  1. 人機交互,實現對一筆發起的交易進行另一方批準確認;
  2. 規則引擎,實現自動化交易確認。

Clef內置了一個JS解釋器引擎,使用JS編寫自動化批準規則,來達到自動化交易確認的目的。以下是我對Clef服務的理解:

clef_ structure.png

Clef命令行做三件事:

  1. 初始化一個密碼,用以后續加密以太坊賬戶密碼、加密規則集文件信息摘要值,以及其他需要加密的信息;
  2. 添加一個規則集文件摘要信息,并保存規則集文件;
  3. 添加一個以太坊賬戶和密碼,信息會以加密方式保存;

之后啟動Clef,它會提供HTTP RPC服務,調用它的接口,發起交易;經過規則引擎確認,使用以上第三步保存的以太坊賬戶,從keystore中用密碼解開賬戶私鑰,對交易進行離線打包,并返回打包后的結果。這里的初始化密碼很重要,它是一切加密存儲的源頭,Clef文檔中提到該密碼需要由用戶自行保管,就像是用戶保管ssh key一樣。

每一個Clef RPC請求都會用單獨的JS解釋器引擎處理,因此全局變量在規則集文件中是沒有作用的。可以通過磁盤存儲文件的方式共享變量。

規則引擎很強大,可以做一些智能合約做不到的事情,比如定時轉賬、24小時內轉賬限額等等。可以說彌補了智能合約的不足,并且可想象的空間有很多。目前Clef和以太坊并未完全打通,Clef返回值只會吐出離線簽名后的原始數據,還需要客戶端自行將原始數據發送給以太坊節點;并且Clef安全性也有待考證,一旦初始化密碼被竊取,用戶的以太坊賬戶就有被盜走的風險。

BOX (A business wallet solution)在保護企業私鑰方面考慮得比較多,企業的私鑰由多人共管,缺少任何一個人的口令都無法還原私鑰。并且BOX的私鑰保存在簽名機內存中,受到守護程序的保護,一旦檢測到異常情況,守護程序會將簽名機殺死,簽名機在停機前會清零私鑰所在內存數據。

BOX對簽名機私鑰所在內存也做了防護,在私鑰所在內存段前后設置內存守護頁,所以如果任何操作嘗試讀寫這些頁的話,SIGSEGV就會拋出一個訪問沖突,進而保護私鑰不被竊取。

Clef的規則引擎很好,BOX或許將借鑒Clef的優秀思想,擴充基礎功能。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容