以太坊版本1.8.4開(kāi)始欺缘,增加了獨(dú)立簽名人Clef功能栋豫,該功能目前尚處在alpha階段。它主要實(shí)現(xiàn)了簽署交易谚殊、簽署數(shù)據(jù)和管理賬戶丧鸯。它的README中是這樣描述的:
Clef可以用來(lái)簽署交易和數(shù)據(jù),并且可以代替geth的賬戶管理嫩絮。
這使DApps不依賴于geth的賬戶管理丛肢。 當(dāng)DApp想要簽署數(shù)據(jù)時(shí),它可以將數(shù)據(jù)發(fā)送給簽名者絮记,然后簽名者將向用戶提供上下文并要求用戶簽署數(shù)據(jù)摔踱。 如果用戶授予簽名請(qǐng)求,簽名者將簽名發(fā)送回DApp怨愤。
此設(shè)置允許DApp連接到遠(yuǎn)程以太坊節(jié)點(diǎn)并發(fā)送本地簽名的事務(wù)派敷。 這可以在DApp連接到遠(yuǎn)程節(jié)點(diǎn)的情況下提供幫助,因?yàn)楸镜匾蕴还?jié)點(diǎn)不可用撰洗,不與同步鏈或沒(méi)有內(nèi)置(或有限)帳戶管理的特定以太坊節(jié)點(diǎn)同步篮愉。
Clef可以在同一臺(tái)機(jī)器上作為守護(hù)進(jìn)程運(yùn)行,也可以在usb-stick(如usb armory)中運(yùn)行差导,或者在QubesOS類型的os設(shè)置中運(yùn)行單獨(dú)的虛擬機(jī)试躏。
乍聽(tīng)起來(lái)好像沒(méi)什么新鮮的,目前以太坊DApp通過(guò)web3接口就可以完成的功能设褐。通過(guò)通讀代碼和文檔說(shuō)明后發(fā)現(xiàn)颠蕴,其實(shí)它最大的亮點(diǎn)有兩個(gè):
- 人機(jī)交互,實(shí)現(xiàn)對(duì)一筆發(fā)起的交易進(jìn)行另一方批準(zhǔn)確認(rèn)助析;
- 規(guī)則引擎犀被,實(shí)現(xiàn)自動(dòng)化交易確認(rèn)。
Clef內(nèi)置了一個(gè)JS解釋器引擎外冀,使用JS編寫(xiě)自動(dòng)化批準(zhǔn)規(guī)則寡键,來(lái)達(dá)到自動(dòng)化交易確認(rèn)的目的。以下是我對(duì)Clef服務(wù)的理解:
Clef命令行做三件事:
- 初始化一個(gè)密碼雪隧,用以后續(xù)加密以太坊賬戶密碼西轩、加密規(guī)則集文件信息摘要值,以及其他需要加密的信息脑沿;
- 添加一個(gè)規(guī)則集文件摘要信息藕畔,并保存規(guī)則集文件;
- 添加一個(gè)以太坊賬戶和密碼庄拇,信息會(huì)以加密方式保存注服;
之后啟動(dòng)Clef,它會(huì)提供HTTP RPC服務(wù),調(diào)用它的接口祠汇,發(fā)起交易;經(jīng)過(guò)規(guī)則引擎確認(rèn)熄诡,使用以上第三步保存的以太坊賬戶可很,從keystore中用密碼解開(kāi)賬戶私鑰,對(duì)交易進(jìn)行離線打包凰浮,并返回打包后的結(jié)果我抠。這里的初始化密碼很重要,它是一切加密存儲(chǔ)的源頭袜茧,Clef文檔中提到該密碼需要由用戶自行保管菜拓,就像是用戶保管ssh key一樣。
每一個(gè)Clef RPC請(qǐng)求都會(huì)用單獨(dú)的JS解釋器引擎處理笛厦,因此全局變量在規(guī)則集文件中是沒(méi)有作用的纳鼎。可以通過(guò)磁盤(pán)存儲(chǔ)文件的方式共享變量裳凸。
規(guī)則引擎很強(qiáng)大贱鄙,可以做一些智能合約做不到的事情,比如定時(shí)轉(zhuǎn)賬姨谷、24小時(shí)內(nèi)轉(zhuǎn)賬限額等等逗宁。可以說(shuō)彌補(bǔ)了智能合約的不足梦湘,并且可想象的空間有很多瞎颗。目前Clef和以太坊并未完全打通,Clef返回值只會(huì)吐出離線簽名后的原始數(shù)據(jù)捌议,還需要客戶端自行將原始數(shù)據(jù)發(fā)送給以太坊節(jié)點(diǎn)哼拔;并且Clef安全性也有待考證,一旦初始化密碼被竊取禁灼,用戶的以太坊賬戶就有被盜走的風(fēng)險(xiǎn)管挟。
BOX (A business wallet solution)在保護(hù)企業(yè)私鑰方面考慮得比較多,企業(yè)的私鑰由多人共管弄捕,缺少任何一個(gè)人的口令都無(wú)法還原私鑰僻孝。并且BOX的私鑰保存在簽名機(jī)內(nèi)存中,受到守護(hù)程序的保護(hù)守谓,一旦檢測(cè)到異常情況穿铆,守護(hù)程序會(huì)將簽名機(jī)殺死,簽名機(jī)在停機(jī)前會(huì)清零私鑰所在內(nèi)存數(shù)據(jù)斋荞。
BOX對(duì)簽名機(jī)私鑰所在內(nèi)存也做了防護(hù)荞雏,在私鑰所在內(nèi)存段前后設(shè)置內(nèi)存守護(hù)頁(yè),所以如果任何操作嘗試讀寫(xiě)這些頁(yè)的話,SIGSEGV
就會(huì)拋出一個(gè)訪問(wèn)沖突凤优,進(jìn)而保護(hù)私鑰不被竊取悦陋。
Clef的規(guī)則引擎很好,BOX或許將借鑒Clef的優(yōu)秀思想筑辨,擴(kuò)充基礎(chǔ)功能俺驶。