尚維斯,高睿
[1.上海二秒科技有限公司,上海200050;
2.賽迪(青島)區塊鏈研究院,山東青島266000]
區塊鏈技術問世不久,便在很短的時間內風靡全球。2017年起,這項萬眾矚目的新技術受到諸多風險投資的青睞。
以“中國知網”數據庫文獻為例,以“區塊鏈”為關鍵詞進行篇名檢索,共能獲得區塊鏈相關文獻高達1881篇的檢索量。然而,以“區塊鏈”和“安全”為關鍵詞進行篇名檢索,獲得的相關文獻卻僅有65篇。
事實上,隨著區塊鏈的不斷發展,數字通證被盜的案件也與日俱增。
2 0 1 4 年2 月2 4 日,M t.G o x(俗 稱“門 頭溝”)其交易平臺85萬個比特幣被盜;2015年2月18日,比特幣存錢罐3000個比特幣被盜;2016年8月3日,Bitfinex被盜取119756枚比特幣;2017年7月17日coindash被盜取4萬個以太幣。
互聯網時代的到來,使人們的生活水平得到了極大提升。電子信息技術的發展,加快了日常的生活節奏。伴隨而來的就是電子信息安全出現各種安全問題[1],這樣的情況同樣發生在區塊鏈行業中。市場上正在有越來越多的投資機構、企業和創業團隊進入到區塊鏈這個領域,他們持有的各類數字通證規模也在快速擴大。在過去的幾年中,區塊鏈領域的一些團隊也曾嘗試過或正在嘗試利用各種技術增強數字通證錢包的安全性,但是目前針對企業級別的數字通證管理系統十分缺乏,也沒有完整的多人共同管理通證的有效手段。這種情況與企業傳統的資產管理流程存在巨大差別。客觀地說,中國在人類第五活動空間的生活當前還處于劣勢[2]。
科技的快速發展推動了計算機技術的進步,其被運用于社會生活的多個方面。但由于其自身特點與缺陷,加之其它因素的影響,使得人們也逐漸開始關注計算機網絡信息的安全,并采取積極防御措施[3]。
類比計算機技術,區塊鏈的發展同樣離不開安全的城池。而支持多通證的區塊鏈在線授信數字系統的誕生,實實在在彌補了這個新行業的一大漏洞。授信系統是一套企業自主擁有的數字通證管理系統。針對企業程式化、自動化使用做了完備的工作。它沒有使用花哨的技術,而是使用區塊鏈公理性技術,通過授信系統統一管理企業所擁有的各類數字通證,例如BTC、ETH、USDT、EOS等主流通證。在信息傳遞上使用了獨創的公鑰交換協議來保障員工間信息流轉互信;在通信上,使用了迪菲-赫爾曼密鑰交換(Diffie-hellman Key Exchange)安全協議,來確保通信安全以及確保通信前向安全。前向安全能夠保護過去進行的通訊不受密碼或密鑰在未來暴露的威脅。如果系統具有前向安全性,就可以保證密碼或密鑰在某個時刻不慎泄露,過去已經進行的通訊依然是安全的;通過將私鑰運行時駐留內存中的方式讓其永不暴露,通過企業自主擁有的私有區塊鏈網絡保證操作指令和資產數據的存證和驗真,通過順序性私鑰簽名方式構建企業訂制化資產管理業務流,同時授信系統具有入侵鎖死、系統重置等安全機制,以此保證企業數字通證的高安全性。
2.1.1 系統總體設計
授信系統是一整套企業數字通證解決方案。如圖1所示,其從整體架構上分為授權層、私鏈層、接入層和客戶端。
授權層負責兩件事情:接受私鑰管理者的指令,啟動或停止簽名服務;對輸入的數據進行校驗,校驗通過則根據業務流轉信息內的指令向公鏈發起轉移數字通證動作。
私鏈層負責對來往信息數據存證和驗真。私鏈由以太坊構建,伴生程序是私鏈和其它層之間交互的橋梁。
接入層負責與企業用戶之間業務交互。
2.1.2 角色
授信系統角色分為兩種:最高權限管理者和普通員工。最高權限管理者擁有對授信系統數字通證賬戶的私鑰管理權限和審核模版設置的權限,普通員工擁有發起數字通證轉移申請、審批的權限。最高權限管理者持有私鑰APP,普通員工持有員工APP。最高權限管理者持有者推薦最少人數為2n+1人,普通員工沒有人數限制。
2.1.3 初始化工作
當整個系統初始化時,由最高權限管理者共同創建新的數字通證賬戶。賬戶對應的操控私鑰將會在初始化結束之前以加密二維碼的形式備份下來。有多少個最高權限管理者,就有多少張二維碼,每人各持一張,只有所有人的二維碼全部解密之后組合才能還原出私鑰。備份的私鑰最終以法律+實體約束的形式保管。
2.1.4 信息流轉
授信系統內信息流轉的內容為數字通證轉移申請以及對其審批消息。在發起數字通證轉移申請之前需要最高權限管理者建立一批申請模版。申請模版中定義了審批層級有幾層,每層審批需要多少人,誰有審批權,單次轉移的通證數量。這些申請模版由全體最高權限管理者全票通過后方可被使用。投票通過后的申請模版將通過授權層的服務保存到區塊鏈上存證,為后續驗真時提供依據。申請人挑選合適的申請模版發起申請,經過模版中指定的人審批通過后,最終由授權層的服務驗證有效性。驗證通過后即自動地向公鏈發起合法的數字通證轉移動作。

圖1 系統邏輯設計圖
2.2.1 實時在線,自動處理
在區塊鏈世界里,按照對數字通證存放方式劃分,“錢包”可分為“冷錢包”和“熱錢包”。“冷錢包”通常是指硬件,這一類的硬件有一套完整的交互協議,它可以存儲加密過后的私鑰。例如,Ledger Nano S硬件錢包。私鑰對應一個賬戶,而賬戶內擁有數字通證。私鑰是鑰匙,是數字通證歸屬權的證明。區塊鏈是一個巨大的分布式賬本,所有在其之上的賬戶內所擁有的數字通證,每一筆轉移記錄都統統記錄在冊。“冷錢包”并非真正地把數字通證留存在硬件中,但可以近乎永久地保存操控數字通證的私鑰。因此,需要長期保存的數字通證適合保存在“冷錢包”中。
與“冷錢包”相對的是“熱錢包”。“熱錢包”內的數字通證較“冷錢包”會經常流動,像各大公鏈配套出品的錢包就可以屬于“熱錢包”。這種劃分方式之間最大的區別就在于“熱錢包”是實時在線的,而“冷錢包”只有在使用時才會接觸網絡。或者更高級一點的硬件設備做冷錢包時可以支持離線簽名。授信系統就屬于“熱錢包”,它最大的好處就在于實時在線,使用便捷,不受制于地理條件,有配套完善的APP,使用方便。
同時,授信系統提供了自動化處理審批通過的申請,實現自動化轉移數字通證,這是所有“冷錢包”不具備的。自動化帶來的好處就是降低了人工干預,為通證的流轉提供了更多的可能性。
2.2.2 多種數字通證一站式管理
目前,市面上有許多區塊鏈網絡,不同的網絡之間并不互通。比特幣有比特幣配套的錢包,以太坊有以太坊的配套錢包,相互之間并無適配。如果沒有一站式管理,需要記憶一大堆的區塊鏈賬戶名稱,甚至為其設置不同的私鑰密碼。授信系統允許接入所有支持離線簽名的區塊鏈網絡,高度抽象統一各個區塊鏈賬戶模型,僅用一把私鑰一站式管理不同區塊鏈網絡賬戶。這大大減輕記憶難度,也為管理不同數字通證提供了便捷的方式。

圖2 信息流轉方式
2.2.3 多人共同管理最高權限
授信系統采用了一種偽隨機算法計算得出私鑰,偽隨機算法除必要的真隨機數,還由最高管理權限持有者的口令計算得出,其單個持有者無法獨自推導出私鑰,也就無法單獨動用賬戶內的數字通證,這使得數字通證歸屬于企業,而非個人。
2.2.4 企業審核流程
自動化轉賬的安全有兩個重要部分,其一是私鑰本身的安全,其二是使用權的安全。授信系統有完善的企業審核流程,允許設定企業財務審批流程,降低人為操作失誤的可能。一個合法的審批流需要經過私鏈存證、私鑰APP授權和公鏈確認。由于私鑰APP是由N位最高權限管理者掌控,因此審批流是否有效是由N位最高權限管理者共同確認,并且寫進公鏈私鏈,該審批流有效性無法被篡改。
數字通證轉移的有效性分為兩個部分,其一是本身簽名的有效性,其二是其對應的審批流的有效性。由于授信系統采用的是嵌套簽名的方法,因此只需要按照順序依次驗證簽名,即可知道簽名本身是否有效。數字通證轉移本身是對應一個審批流程,需要提取對應的申請模版,并在賬戶中驗證該審批流程是否有效。如果兩個條件均滿足,證明該次數字通證轉移是有效審批流程指定的,并且無法被篡改。
2.2.5 完備的安全機制
授信系統的安全分為三個層面:私鑰的安全、信息的安全和通信安全。私鑰安全是為了數字通證不被竊取;信息的安全是為了系統內流轉的數據不被篡改,進而保障數字通證不被竊取;通信的安全是為了敏感信息不被第三方截獲,即使截獲也不會影響后續的通信。從這三個維度出發,保障企業在使用授信系統時數字通證的安全。
3.1.1 私鑰的生成
授信系統控制數字通證的私鑰只有一把, 并采用了偽隨機算法, 為防止私鑰的生成被模擬, 采用RFC 6979的變形形式:key=sha 256(rando m() + sha256(password1) + sha256(password2) ... + sha256(passwordN))。其中,random()為真隨機數生成函數,sha256(passwordN)為最高權限管理者輸入的口令。真隨機數與口令首尾相接構成新的字符串再做一次哈希運算得出私鑰。
保 留 在 系 統 中 的 值 有hash=sha256(sha256(key))和random()結果值。每次重啟系統如果最高權限管理者輸入的口令有誤,是無法推導出Hash值的,也無法根據Hash逆向推導Key。
3.1.2 私鑰的保護
私鑰生成后,將駐留在系統內存中,由內存守護頁保護。在內存中創建的守衛頁面,并告訴操作系統內核禁止第一個和最后一個頁面的所有讀寫操作,所以如果任何操作嘗試讀寫這些守護頁的話,操作系統就會拋出一個Sigsegv訪問沖突信號,并且服務所在進程發生混亂,服務被停止。在停止前,服務駐留在內存中的私鑰地址將被清空。這樣可以立即檢測到緩沖區溢出,其他進程幾乎不可能定位和訪問數據。(在內存分配操作期間分配額外的不可訪問的內存是用于減輕堆緩沖區溢出的技術。這些保護頁面是放置在一頁或更大頁面的所有內存分配之間的未映射頁面。保護頁面在任何訪問時都會導致分段錯誤。)
夾在守護頁之間的頁面也被保護(避免Swap)。當系統內存耗盡時,操作系統內核會將非活動進程的內存復制到磁盤上,這是想要避免的。
最后一點是金絲雀:在私鑰之前放置一個隨機值。如果它發生了變化,知道出了什么問題——可能是緩沖區下溢。當程序第一次運行時,為金絲雀生成了一個全局值。

圖3 私鑰的保護
3.1.3 系統的保護
隨授信系統啟動的還有它的防護程序。防護程序會設置系統關閉所有非必要通信端口,僅留出系統內相互通信端口。同時防護程序啟動后會監控系統登錄情況和進程。如果出現異常進程或者賬戶登錄了私鑰所在的操作系統,防護程序會立即清空私鑰所在內存,并立即停止服務。
信息安全包含兩部分:信息源頭是否可信和信息本身是否可信。
3.2.1 組織架構
在授信系統中,有組織架構體系,員工與員工之間存在上下級關系。上級員工與下級員工之間建立關系,通過手機端員工APP掃描二維碼的方式來確定。每個員工APP都對應一個用于識別身份的通信密鑰對,下級員工要加入到授信系統中需要掃描上級員工的二維碼來確權。
約定n 代表隨機值,R 代表密碼,P 代表公鑰,K代表私鑰,c代表密文,s代表簽名,d代表信息摘要,ID代表身份識別串。假設層級關系如圖4所示。推演掃碼過程:

圖4 層級關系假設
(1)E是C的下屬,E掃描C的二維碼獲一個加密密碼R;
(2)E 生成一個固定的隨機值E n,用于參與保存到服務器的公鑰進行信息摘要計算;
(3)E用R加密自己的公鑰Ep和隨機值En,Ec = encrypt(Ep,En,R),并通過服務器發送給C;
(4)C用R解密密文,EP,En = decrypt(Ec,R),將做三件事:
1)用C 的 私 鑰K,記為Ck。用Ck 簽名E的公鑰Ep,Es = sign(Ck,Ep),簽名的結果發送給A;
2)用C的固定隨機值Cn,計算EP的信息摘要,Ed= hash(Cn,Ep),連同Ep發送給服務器保存,保存結果類似一行記錄[EIDEd,EPCID];
3)向E確認結果。
當B移除C時,由于B持有C的固定隨機值Cn,B只需交驗Ep,Ed= hash(Cn, Ep),校驗通過即可認為E為C的下屬。
接入層中的服務來負責手機端信息傳遞與交互。假定授信系統接入層中數據可能不可信,一些中間結果保留在接入層為防止人為篡改,需要對保留的信息作信息摘要。參與信息摘要的部分信息來自于手機客戶端,這樣一來,就把風險分散在多個點上,大大降低系統性風險。
3.2.2 申請模版
前面提到數字通證轉移是有一套完整的審批流程。提交審批前先要有申請模版。申請模版也可看作是多重簽名列表,里面指定了參與審批人的公鑰,以及最少允許通過審批的人數。與多重簽名不同的是,多重簽名是有順序的,而授信系統的申請模版不需要簽名順序,只需要每個參與的簽名者簽出的結果驗證都為真。申請模版需要全體最高權限管理者投票通過方可生效,授信系統會對投票通過的申請模版作信息摘要,并對信息摘要上鏈保存。
員工申請轉移數字通證時選擇填寫并提交申請模版,經由企業內部員工逐級審批,審批的過程即對申請簽名。在通過全部審批后,本次申請被流轉到授權層服務中被處理。授權層服務會作最終的校驗,通過比對申請模版的信息摘要校驗其申請模版的合法性,如果合法,則校驗每一位簽名者的簽名結果是否有效。通過校驗的申請由授權層服務調用駐留在內存中的私鑰對數字通證轉移進行簽名,并發送到公鏈上實現自動轉移。
在通信方面,采用了迪菲-赫爾曼密鑰交換(Diffie-hellman Key Exchange)安全協議,來確保通信安全以及確保通信前向安全。
通信用的交換密鑰在內存中被切分成多份保存,保護密鑰的方式同保護私鑰,被切分的密鑰會定時變化,但最終的密鑰在提供服務階段保持不變。我們利用異或的特性來完成這一整套邏輯,如圖5所示。

圖5 通信安全邏輯
授權層中的簽名服務是整個系統中的重中之重。它是數字通證的真正出口,也是信息驗證的重要環節。私鑰在系統運行過程中就存放在簽名服務所在的內存中。簽名服務可以部署在一臺云端服務器,也可以是提供長期運行的安裝有Mac OS 操作系統筆記本。同時簽名服務配有守護程序,它會主動關閉所有操作系統端口,并實時監測操作系統運行情況,一旦發現有操作系統賬戶登陸系統或是異常的進程出現,它會第一時間停止簽名服務,簽名服務在停止前會立即清空內存中的敏感數據。簽名服務主動連接系統中的其他服務,只接受系統內協議數據。
簽名服務所在服務器相當于是一臺堡壘機,它應由最高權限管理者共同管理。為防止最高權限管理者之間發生問題,故將動用私鑰的權限分攤到每一個人之上,任何一個人都無法直接從服務器中直接拿取私鑰。
世界上任何一個系統都不可能百分之百安全,但只要做好足夠的防范措施,是可以預防入侵情況發生的。授信系統的安全核心技術雖然已經比較完備了,只要是人治的系統,一定存在人為或者程序漏洞,因此以下操作可以增加防范力度。
(1)任何對外接口均在Nginx層面記錄日志;
(2)配 置Nginx規則POST請求參數的記錄(發現黑客入侵點);
(3)通過日志請求可以識別不同的用戶,如記錄請求中Cookie或者AuthToken;
(4)日志實時同步到專門收集日志的服務器(防止黑客入侵后清理痕跡)。
(1)使用非Root用戶;
(2)對應項目程序僅僅擁有特定數據庫權限;
(3)用戶僅僅賦予“增、查、改”權限,所有數據都是基于狀態的假刪除(防止黑客操作數據庫后直接刪除數據)。
(1)SSH登錄服務器通知;
(2)SSH證書登錄;
(3)SSH證書加上密碼;
(4)禁止核心服務器互相加SSH Key;
(5)禁止使用Root用戶操作;
(6)服務器目錄權限禁止777;
(7)所有操作通過堡壘機操作,堡壘機器會有登陸認證,多因子驗證,會話管理,指令限制,錄像管理;
(8)服務器進程白名單,任何未知進程啟動直接殺死,通知提醒。
本文從區塊鏈技術角度出發,旨在探究其在企業組織多人共同安全管理和使用通證的應用模式,這也是本文主要的出發點和創新點。
伴隨著數字通證市場規模的快速增長,盜取通證事件發生得越來越頻繁,這些事件不斷被媒體爆光之后,使得企業對數字通證安全、使用便捷等問題產生嚴重擔憂。這些問題已經制約了企業用戶對數字通證的投資和管理,而好的一方面在于,因為大家的安全意識不斷提高,區塊鏈、數字通證的安全防護技術也在不斷加強。