基于區(qū)塊鏈技術(shù)的企業(yè)級數(shù)字資產(chǎn)保險柜應(yīng)用BOX介紹
BOX(Enterprise Token Safe Box)是一個企業(yè)級數(shù)字資產(chǎn)保險柜應(yīng)用,它利用區(qū)塊鏈、密碼學(xué)、通信安全等領(lǐng)域的公理性技術(shù)對各類數(shù)字資產(chǎn)的私鑰、操作指令進(jìn)行保護(hù),從原理上解決了私鑰、指令的盜取、篡改等問題。
設(shè)計思想
BOX是一套企業(yè)自主擁有的數(shù)字資產(chǎn)銀行系統(tǒng)。通過BOX系統(tǒng)統(tǒng)一管理企業(yè)所擁有的各類數(shù)字資產(chǎn)錢包做到集中管理,通過將私鑰加密運(yùn)行在內(nèi)存中的方式讓其永不暴露,通過企業(yè)自主擁有的私有區(qū)塊鏈網(wǎng)絡(luò)保證操作指令和資產(chǎn)數(shù)據(jù)的存證和驗真,通過順序性私鑰簽名方式構(gòu)建企業(yè)訂制化資產(chǎn)管理業(yè)務(wù)流,通過 SSL/TLS 加密保證通信通道的絕對安全。BOX 從原理上做到了防范外部黑客、內(nèi)部黑客、單人誤操作等當(dāng)前個人錢包普遍存在的漏洞,同時,BOX 具有入侵鎖死、系統(tǒng)重置等安全機(jī)制,以此保證企業(yè)數(shù)字資產(chǎn)的高安全性。
私鏈節(jié)點數(shù)量為 2n+1(n≥1),私鑰 APP 數(shù)量最少為 3 個,具體數(shù)量由各企業(yè)內(nèi)部自主定制,簽名機(jī)是一臺獨立的物理服務(wù)器,應(yīng)用服務(wù)器為云端服務(wù)器,不會與簽名機(jī)有任何通信,簽名機(jī)僅能夠與私鏈通信,僅有簽名機(jī)才能向熱錢包發(fā)出轉(zhuǎn)賬指令,員工 APP 為轉(zhuǎn)賬指令發(fā)起方,管理 APP 執(zhí)行審批。
BOX系統(tǒng)可以接入所有支持離線簽名的數(shù)字貨幣。首次發(fā)行版將接入以太坊及 ERC20 代幣。在未來的版本中,將陸續(xù)接入其他幣種。
私鑰安全機(jī)制
1. 私鑰的存儲
私鑰儲存在簽名機(jī)的內(nèi)存中,不會做持久化存儲。在極端情況簽名機(jī)被入侵之后,入侵者很難在短時間內(nèi)尋找到私鑰,大大降低私鑰暴露的風(fēng)險。
簽名機(jī)是一臺獨立存放的服務(wù)器,建議存放在安全級別非常高的地點,例如金融級機(jī)房、企業(yè)自己控制的高安全性機(jī)房、某個私密地點。該簽名機(jī)需要有 24 小時不間斷供電和網(wǎng)絡(luò)接入及固定 IP 地址,該簽名機(jī)應(yīng)該不能輕易地被任何人接近和操作,包括企業(yè)的 IT 主管人員。
企業(yè)的數(shù)字資產(chǎn)實際存儲在各個數(shù)字貨幣公鏈上(本文內(nèi)指代為“熱錢包”),如果該數(shù)字貨幣的官方錢包支持離線簽名,則私鑰可以被存儲在簽名機(jī)的內(nèi)存中,通過離線簽名實現(xiàn)在不暴露私鑰的前提下,完成確權(quán)并轉(zhuǎn)賬。
2. 私鑰的生成
為了防止私鑰的生成被模擬,我們采用 RFC6979 協(xié)議的變形形式:k= SHA256(d + SHA256(m1) + SHA256(m2) + SHA256(m3) + … ), d 為服務(wù)器隨機(jī)數(shù),m 為私鑰 APP 輸入的關(guān)鍵句。私鑰的生成由三個私鑰 APP分別輸入關(guān)鍵句的方式生成,關(guān)鍵句是由任意的字母和數(shù)字組合而成的字符串。三個或多個私鑰 APP 依次輸入關(guān)鍵句后,由三個關(guān)鍵句生成的私鑰即被存放在簽名機(jī)的內(nèi)存中,同時由此私鑰生成的公鑰地址將被注冊在公鏈上,即生成公鏈熱錢包。私鑰 APP不會存儲該關(guān)鍵句,該私鑰 APP的源代碼也將同步開源。
私鑰 APP的所有傳輸過程都需要雙向認(rèn)證,私鑰 APP的授權(quán)方式為限制分發(fā)方式,即服務(wù)器分發(fā)的證書只有 N 個(N 為私鑰 APP 的個數(shù)),并且會將證書與其設(shè)備 ID 綁定,其他的連接請求都會被拒絕。
如果私鑰 APP丟失,因為 APP里并不記錄任何關(guān)鍵句和密碼,所以沒有安全風(fēng)險。擁有關(guān)鍵句的控制人可以重新安裝私鑰 APP,并使用原關(guān)鍵句重新獲取服務(wù)器證書,然后簽名機(jī)重新綁定新的私鑰 APP 的設(shè)備 ID。
3. 私鑰的恢復(fù)
由于簽名機(jī)一旦停機(jī),內(nèi)存中的私鑰會立即消失,所以當(dāng)簽名機(jī)需要重啟時,需要所有私鑰 APP重新輸入正確的關(guān)鍵句。如果某個私鑰 APP持有人無法輸入正確的關(guān)鍵句,此時需要啟用私鑰關(guān)鍵句的冷備份,由于此流程屬于實際企業(yè)管理流程,本文僅給出冷備份的建議方案。
私鏈
1. 私鏈的作用及優(yōu)勢
私鏈在整個BOX系統(tǒng)中起到存證和驗真的作用。利用區(qū)塊鏈的不可篡改的特性,將審批流程和轉(zhuǎn)賬審批流程上鏈保存,為程序?qū)崿F(xiàn)轉(zhuǎn)賬自動化提供可靠依據(jù)。BOX系統(tǒng)首次發(fā)行版本采用以太坊搭建私鏈,未來計劃支持更多的搭建私鏈的方案。
在企業(yè)內(nèi)部部署一套私鏈,企業(yè)不僅獲得一套存證和驗真的系統(tǒng),而且可以獨立自主控制其全部節(jié)點,通過設(shè)置節(jié)點參數(shù),來控制每個區(qū)塊最大可打包交易數(shù)量、出塊時間間隔和參與節(jié)點的數(shù)量。這些參數(shù)決定了單位出塊時間窗口內(nèi),可以接受的交易筆數(shù)——即審批流轉(zhuǎn)處理的吞吐量。
由于是私鏈,使得gas消耗可以忽略不計,同時對上層應(yīng)用弱化gasPrice 的消耗,使得在區(qū)塊鏈上驅(qū)使合約的代價降低。
私鏈采用PoA(Proof of Authority)共識機(jī)制,直接指定哪些私鏈節(jié)點擁有記賬權(quán)限,沒有記賬權(quán)限的節(jié)點將作為備份節(jié)點存在。
2. 伴生程序
伴生程序就是以太坊 DAPP。每個私鏈節(jié)點都會配備同一個伴生程序,被用于處理傳統(tǒng)的 CS(客戶端-服務(wù)器)應(yīng)用程序請求、處理數(shù)據(jù)上傳私鏈、執(zhí)行智能合約、監(jiān)聽智能合約事件、發(fā)送狀態(tài)通知、協(xié)調(diào)上層應(yīng)用和授權(quán)服務(wù)之間的交互等功能。
伴生程序之間是對等的,且只與處于同一臺服務(wù)器上的私鏈節(jié)點通信。伴生程序之間沒有直接的網(wǎng)絡(luò)連通。每個伴生程序都會對應(yīng)一個私鏈的賬戶,該賬戶用以執(zhí)行智能合約的方法。
伴生程序協(xié)調(diào)接入層與授權(quán)層之間的交互。發(fā)生一筆轉(zhuǎn)賬交易要經(jīng)過以下四個過程:1.發(fā)起交易;2.服務(wù)受理;3.交易成功;4.通知結(jié)果。我們將這四個過程劃分為四個象限,如下圖所示。伴生程序處于私鏈層這一象限維度,通過將數(shù)據(jù)上鏈實現(xiàn)對現(xiàn)實中的轉(zhuǎn)賬交易進(jìn)行存證和驗真,同時將成功的結(jié)果通知到簽名機(jī),由簽名機(jī)根據(jù)最終結(jié)果操作公鏈資金賬戶。伴生程序隔離了交易發(fā)起者與公鏈資金賬戶之間的直接關(guān)聯(lián),整個過程由程序根據(jù)審批流自動執(zhí)行。
3. 智能合約的共識機(jī)制
上鏈存證的數(shù)據(jù)存放在智能合約內(nèi)。智能合約采取投票的方式來確認(rèn)一筆上鏈存證的數(shù)據(jù),每一筆數(shù)據(jù)都必須通過 51%的私鏈節(jié)點投票,且每次投票的內(nèi)容一致才被確認(rèn)為有效存證。每個節(jié)點分別對應(yīng)一個操作同一合約的賬戶,除非超過 50%的節(jié)點被全部攻陷,否則上鏈存證的數(shù)據(jù)是可以被保證有效的。
智能合約投票系統(tǒng)需要分配合理的權(quán)限給正確的賬戶。所有私鏈賬戶在私鏈搭建完成后即被確定下來。當(dāng)需要增加私鏈節(jié)點時,必須由所有私鏈賬戶授權(quán)新帳號,系統(tǒng)將自動重新平衡 51%策略,無須重新部署新合約來適應(yīng)其變化。
存證的數(shù)據(jù)分為審核流程和轉(zhuǎn)賬申請。如下圖所示:在提現(xiàn)之前,需要設(shè)置審核流程;審核流程用于確定企業(yè)內(nèi)部在使用數(shù)字貨幣時需要參與審核的部門,參與審核的部門需要多少人確認(rèn);審核流程需要由掌握企業(yè)管理最高權(quán)限的所有私鑰 APP 來授權(quán);授權(quán)過后的審核流程可以用來發(fā)起轉(zhuǎn)賬申請。
接入層
接入層采用權(quán)力離散式的構(gòu)架方式。
整個系統(tǒng)的權(quán)力被離散在了各個 APP 端,接入層服務(wù)器雖然承擔(dān)了各種業(yè)務(wù)的轉(zhuǎn)承并合,但是卻對信息所行使的權(quán)利無法修改和執(zhí)行。權(quán)力離散式的實現(xiàn),依賴于基礎(chǔ)算法 ECDSA( Elliptic Curve Digital Signature Algorithm )。 算法中 ECC(EllipTIc curve cryptography)則采用比特幣經(jīng)典曲線 secp256K1。
轉(zhuǎn)賬過程為:由員工 APP 和管理 APP 產(chǎn)生簽名,然后在接入層完成轉(zhuǎn)移,并在私鏈層得到確認(rèn),最后簽名機(jī)在公鏈上進(jìn)行實施。
接入層業(yè)務(wù)分為兩大部分:1、審批流的構(gòu)建和修改。 2、審批流的執(zhí)行。
1. 審批流的構(gòu)建和修改
在執(zhí)行轉(zhuǎn)賬前需要先構(gòu)建企業(yè)轉(zhuǎn)賬審批流,該審批流為多級審核模型,最底層為員工管理組,其上可以有多級審核,每級審核可以有多個審核人,需要指定最小審核人數(shù)。
舉例說明,企業(yè)審批流如下圖所示:
當(dāng)企業(yè)確認(rèn)了審批流,則可以通過管理 APP 錄入系統(tǒng),構(gòu)建成系統(tǒng)可識別的協(xié)議格式,該協(xié)議格式在 BOX 系統(tǒng)中被命名為 boxflow。
boxflow 建立完成之后為未授權(quán)狀態(tài),如果需要授權(quán),則轉(zhuǎn)交給接入層,接入層檢查格式并哈希上私鏈,由私鏈所有節(jié)點投票存證,存證后通知簽名機(jī)。由私鑰 APP 授權(quán)簽名機(jī)將審批流哈希寫入公鏈,公鏈確認(rèn)后,將私鏈上審批流的哈希狀態(tài)設(shè)置為有效,則 boxflow 授權(quán)成功(關(guān)于私鑰APP 的安全性及重要性,見私鑰安全和指令安全章節(jié)),企業(yè)可以通過該boxflow 進(jìn)行轉(zhuǎn)賬。
boxflow 的修改流程需要私鑰 APP 先取消當(dāng)前 boxflow 的授權(quán),再重新建立 boxflow。
2. 審批流的執(zhí)行
當(dāng) boxflow 授權(quán)成功后,需要先建立員工賬號,才能進(jìn)行基于該boxflow 的審批流轉(zhuǎn)賬。
在 BOX 系統(tǒng)里員工賬號由員工管理組分配公私鑰。當(dāng) boxflow 授權(quán)成功后,員工 APP 將獲取到當(dāng)前 boxflow,員工選擇員工管理組申請私鑰,員工管理組衍生出子私鑰,分配給該申請員工 APP。
員工 APP 獲取私鑰后,可以發(fā)起轉(zhuǎn)賬申請。申請格式如下:
{ balance: 100E18,
TImestamp: 1512719484736,
desTInaTIon: ‘0x6E9483f00cCd685c5F12709Fd542Da1FB20c4d2e’,
miner: E16,
currency: ‘ETH’,
applicant:
{ username: ‘bluce’} }
此時生成的申請為未簽名狀態(tài),需要將該申請使用 SHA256 算法進(jìn)行哈希,并將哈希簽名放入申請中,格式如下:
{ balance: 100E18,
timestamp: 1512719484736,
destination: ‘0x6E9483f00cCd685c5F12709Fd542Da1FB20c4d2e’,
miner: E16,
currency: ‘ETH’,
applicant:
{ username: ‘bluce’,
sign:
‘474w3zgKRLwaddG6LadzKQ3ut1JyQUc4HpVLkydR6xdk2TwS7zEXKf4E5AyGH
xQkfLYxJsccxhqdY5Qm5352P2H4’ } }
該員工的申請,只能由其對應(yīng)的員工管理組賬號審核。
員工管理組審核通過后,對申請(包括簽名)進(jìn)行哈希并簽名。簽名完成后交給上級審核人進(jìn)行審核,上級審核人對下級簽名信息驗證后,對哈希進(jìn)行簽名。以此類推直至最上層審核人簽名完成。
最后生成的轉(zhuǎn)賬審核流視為一次記賬,稱之為 transbox。
該 transbox 哈希后為該次交易的交易 ID,當(dāng)接入層收到 transbox 并校驗其匹配對應(yīng)的 boxflow 后,將交易 ID(哈希)進(jìn)行上私鏈存證。私鏈通過投票確認(rèn)交易 ID 后通知簽名機(jī)進(jìn)行驗證和簽名。
簽名機(jī)收到原始信息后,從 transbox 中提取 boxflow 并在賬戶里驗證是否合法,然后依次檢驗簽名是否完整, 驗證通過 后說明為合法transbox,進(jìn)行公鏈轉(zhuǎn)賬,并將公鏈交易 ID 上私鏈存證。接入層可以根據(jù)交易 ID 在公鏈上實時查詢結(jié)果。
3. 多審批流的支持
在第一個公開發(fā)行版本中,BOX 僅支持單一審批流,在后續(xù)升級版本中,將支持多審批流。
審批流安全機(jī)制
自動化轉(zhuǎn)賬的安全有兩個重要部分,其一是私鑰本身的安全(已在私鑰安全性章節(jié)中闡述),其二是使用權(quán)(審批流)的安全。
1. 審批流的有效性
一個合法的審批流需要經(jīng)過私鏈存證、私鑰 APP 授權(quán)和公鏈確認(rèn)。由于私鑰 APP 是由 N 位企業(yè)管理人員掌控,因此審批流是否有效是由 N 位企業(yè)管理人員共同確認(rèn),并且寫進(jìn)公鏈私鏈,該審批流有效性無法篡改。
2. 轉(zhuǎn)賬的生成
轉(zhuǎn)賬由員工 APP 發(fā)起并簽名,經(jīng)過員工管理組及各層審核人員依次驗證無誤后簽名,轉(zhuǎn)賬即生成。因為公私鑰只有 APP 上存在,其他任何人在傳輸?shù)倪^程中都無法篡改轉(zhuǎn)賬信息。
3. 轉(zhuǎn)賬的有效性
轉(zhuǎn)賬的有效性分為兩個部分,其一是本身簽名的有效性,其二是其對應(yīng)的審批流的有效性。由于 BOX 采用的是嵌套簽名的方法,因此只需要按照順序依次驗證簽名,即可知道簽名本身是否有效。轉(zhuǎn)賬本身是對應(yīng)一個審批流,需要提取對應(yīng)的審批流,并在賬戶中驗證該審批流是否有效。如果兩個條件均滿足,證明該次轉(zhuǎn)賬是由有效審批流指定的 APP 確認(rèn)的,并且是無法篡改的。
通信安全機(jī)制
1. 簽名機(jī)與私鏈的通信
簽名機(jī)即授權(quán)層中的服務(wù)所在的服務(wù)器。簽名機(jī)與私鏈的通信即授權(quán)層的服務(wù)與私鏈層服務(wù)之間的通信。服務(wù)與服務(wù)之間的通信使用 gRPC +SSL/TLS 雙向證書認(rèn)證。gRPC 是一個高性能 RPC 框架,基于 HTTP/2 協(xié)議標(biāo)準(zhǔn)設(shè)計,基于 ProtoBuf(Protocol Buffers)序列化協(xié)議開發(fā),HTTP/2 協(xié)議標(biāo)準(zhǔn)本身要求對數(shù)據(jù)進(jìn)行加密傳輸(SSL/TLS)。BOX 系統(tǒng)將針對所有公鏈開發(fā)授權(quán)服務(wù)模塊。由于 SSL/TLS 雙向認(rèn)證證書的存在,將極大程度保證信息安全,服務(wù)器之間一旦有異常連接就會立即拒絕請求,可以防止中間人攻擊的風(fēng)險。
2. 員工 APP 與接入層的通信
所有與接入層通信的 APP,都采用 HTTPS 的方式。員工簽名用的私鑰是通過管理 APP 頒發(fā)的。處理步驟如下:
A) 管理 APP 生成員工私鑰,并生成對稱加密用的隨機(jī)數(shù)密碼;
B) 管理 APP 用密碼以對稱加密的方式將員工私鑰加密;
C) 管理 APP 通過線下方式將密碼告知員工;
D) 管理 APP 將加密后的員工私鑰發(fā)送給接入層暫存;
E) 員工 APP 從接入層下載加密數(shù)據(jù)并用給定密碼解密。
3. 接入層與私鏈節(jié)點的通信
接入層與私鏈之間屬于內(nèi)部通信,采用 TCP/IP 協(xié)議連接。此時接入層傳遞到私鏈的數(shù)據(jù)已經(jīng)經(jīng)過了簽名授權(quán),并產(chǎn)生了信息摘要,私鏈只需要使用簽名校驗程序?qū)ζ潋炚妫绻r炇?,拒絕服務(wù)。接入層向所有私鏈節(jié)點發(fā)送請求,每個私鏈節(jié)點對應(yīng)一個帳號,每個帳號將驗證后的請求數(shù)據(jù)以投票機(jī)制上鏈存證,私鏈上的智能合約被超過 50%帳號確認(rèn)之后,數(shù)據(jù)上鏈成功。接入層提供簽名和摘要供私鏈確認(rèn),私鏈通過投票向接入層提供投票結(jié)果。以上過程可以歸納為兩個公式:
signature = sign(hash)
public key == recover(hash, signature)
私鑰的冷備份
為了防止某個私鑰 APP 持有人的意外情況導(dǎo)致私鑰無法重置,我們建議將所有關(guān)鍵詞進(jìn)行物理備份。例如在每個私鑰 APP 持有人輸入關(guān)鍵詞后,私鑰 APP 所運(yùn)行的手機(jī)可以連接一臺不聯(lián)網(wǎng)的迷你型打印機(jī),采用打印的方式將該關(guān)鍵詞自動以二維碼的方式打印到紙條上,并且將打印兩份,所有關(guān)鍵詞紙條將被分為兩份,封存在兩個信封內(nèi),建議企業(yè)將此迷你打印機(jī)與兩份關(guān)鍵詞備份件分別存放于兩家銀行保險箱中,保險箱的其中一把鑰匙可以委托給企業(yè)律師持有,并約定僅允許在企業(yè)董事會決議的同意下才可以啟封此備份。
關(guān)于加密令牌 BOX 的分發(fā)
1. 令牌分發(fā)簡介
2. 分發(fā)比例及組成
3. 經(jīng)濟(jì)模型
BOX 作為一種 BaaS(Blockchain as a Service)解決方案,將以ERC20 代幣 BOX Token(縮寫符號為 BOX)作為 BOX 系統(tǒng)的價值中介及社區(qū)中的投票權(quán)。BOX Token 總量 1 億枚,永不增發(fā)。
BOX 系統(tǒng)將會全部開源,任何組織和個人均可以無償部署并使用該系統(tǒng),對項目團(tuán)隊有增值服務(wù)的需求時可以使用 BOX Token 購買官方的技術(shù)支持服務(wù),服務(wù)的價格會依市場供需關(guān)系動態(tài)調(diào)整。
團(tuán)隊收取的 BOX Token 將會鎖定,在每年的 12 月 26 日 UTC 倫敦時間 00:00:00 釋放,釋放方式為定向出售,價格為釋放開啟時間之前的最近7 日均價的 90%,所獲取資金全部用于團(tuán)隊發(fā)展運(yùn)營使用。
BOX 開源社區(qū)中的代碼更新、選舉、網(wǎng)絡(luò)參數(shù)變更等投票權(quán)重取決于錢包地址中 BOX Token 的數(shù)量。