圖1 區(qū)塊鏈2.0 技術(shù)架構(gòu)
金融業(yè)區(qū)塊鏈技術(shù)應(yīng)用面臨的安全威脅和應(yīng)對(duì)策略
1. 數(shù)據(jù)安全
區(qū)塊鏈中的數(shù)據(jù):區(qū)塊鏈?zhǔn)且粋€(gè)公開的鏈?zhǔn)劫~本,其中存儲(chǔ)的數(shù)據(jù)向網(wǎng)絡(luò)中所有用戶公開。而在金融業(yè)務(wù)場(chǎng)景中,業(yè)務(wù)規(guī)則和監(jiān)管機(jī)構(gòu)要求保護(hù)相關(guān)數(shù)據(jù)的隱私性、完整性等。在存儲(chǔ)、傳輸相應(yīng)數(shù)據(jù)時(shí),應(yīng)該使用哈希函數(shù)、同態(tài)加密、數(shù)字簽名等技術(shù)保護(hù)數(shù)據(jù)。
用戶私鑰:在區(qū)塊鏈中,用戶的資金安全完全依賴于私鑰的安全,無(wú)論是私鑰泄漏還是丟失,都將給用戶帶來(lái)財(cái)產(chǎn)損失。為了保護(hù)用戶的賬戶與資金安全,應(yīng)該對(duì)私鑰文件進(jìn)行加密存儲(chǔ)。同時(shí),應(yīng)該使用“秘密共享協(xié)議”等方法安全地備份私鑰文件。
密碼算法安全:保護(hù)區(qū)塊鏈數(shù)據(jù)安全的前提是密碼算法的安全。在設(shè)計(jì)應(yīng)用時(shí),應(yīng)該選擇安全性更高的密碼算法;應(yīng)用投入使用后還要及時(shí)替換掉不再安全的密碼算法。
2. 網(wǎng)絡(luò)層訪問(wèn)控制
公有鏈允許節(jié)點(diǎn)自由進(jìn)出網(wǎng)絡(luò),且區(qū)塊鏈的網(wǎng)絡(luò)層沒(méi)有登記用戶身份。金融行業(yè)的風(fēng)險(xiǎn)和安全性相對(duì)更高,未登記身份的節(jié)點(diǎn)自由進(jìn)出網(wǎng)絡(luò)為系統(tǒng)安全帶來(lái)很多不可控性。區(qū)塊鏈技術(shù)在金融行業(yè)應(yīng)用時(shí),應(yīng)結(jié)合業(yè)務(wù)需求,分析是否有必要使用公有鏈,并登記網(wǎng)絡(luò)中節(jié)點(diǎn)的身份。對(duì)于聯(lián)盟鏈和私有鏈,建議采用專線來(lái)接入?yún)^(qū)塊鏈網(wǎng)絡(luò)。此外,還應(yīng)采用VPN 專網(wǎng)、防火墻、物理隔離等技術(shù)對(duì)節(jié)點(diǎn),特別是礦工節(jié)點(diǎn)的物理網(wǎng)絡(luò)和主機(jī)進(jìn)行保護(hù)。
3. 共識(shí)層安全
共識(shí)協(xié)議應(yīng)具備的基本屬性:區(qū)塊鏈?zhǔn)褂梅植际焦沧R(shí)協(xié)議(見圖1)來(lái)防止單點(diǎn)故障等問(wèn)題,有效防范了雙重花費(fèi)、礦工惡意封鎖某個(gè)用戶的交易等攻擊。但這都建立在區(qū)塊鏈網(wǎng)絡(luò)節(jié)點(diǎn)的權(quán)利分布均勻、不存在51% 攻擊的前提下。很大程度上取決于區(qū)塊鏈的一致性不被破壞。因此,設(shè)計(jì)合適的共識(shí)算法對(duì)于區(qū)塊鏈應(yīng)用的安全性至關(guān)重要。
一般來(lái)說(shuō),要求共識(shí)算法具有以下幾個(gè)基本屬性。公平性:無(wú)論是算力高的大礦工還是算力低的小礦工都有幾率挖到礦,且?guī)茁逝c之前的挖礦結(jié)果無(wú)關(guān)。快速驗(yàn)證:確保挖礦難題驗(yàn)證簡(jiǎn)單、快速、開銷小。保證遍歷所有可能的nonce 值是解決難題最快方案。難度可調(diào)整:挖礦的難度可以調(diào)整,以保證挖礦速度平穩(wěn)。
此外,還應(yīng)該使用資產(chǎn)抵押、法律和監(jiān)管的形式對(duì)礦工節(jié)點(diǎn)進(jìn)行聯(lián)合管控。對(duì)于不誠(chéng)實(shí)、有不當(dāng)行為的礦工節(jié)點(diǎn)進(jìn)行懲罰。
軟分叉和硬分叉:分叉是指對(duì)區(qū)塊鏈的規(guī)則做一些改變。由于軟件更新,不同節(jié)點(diǎn)上運(yùn)行的軟件版本不同,導(dǎo)致其執(zhí)行規(guī)則不同,從而導(dǎo)致分叉(軟分叉和硬分叉)。軟分叉是讓原來(lái)可以被接受的交易或區(qū)塊不可以被接受,例如:比特幣中使用的P2PKH 腳本。與之相反,硬分叉是使原來(lái)不可以被接受的規(guī)則可以被接受,例如:增加區(qū)塊大小。這兩種分叉作用在區(qū)塊鏈中時(shí),軟分叉可以很好地被老版本軟件的節(jié)點(diǎn)兼容,并促進(jìn)其更新軟件,但硬分叉會(huì)受到排斥。圖2 是有60% 算力占比的節(jié)點(diǎn)更新軟件時(shí),硬分叉和軟分叉對(duì)新規(guī)則和舊規(guī)則支持情況。在更新區(qū)塊鏈應(yīng)用時(shí),應(yīng)該盡可能使用軟分叉完成,避免硬分叉。
4.激勵(lì)層安全
目前已提出的大多數(shù)數(shù)字貨幣系統(tǒng)都是去中心化的,它允許節(jié)點(diǎn)自行記錄數(shù)據(jù)、發(fā)行貨幣。區(qū)塊鏈中的節(jié)點(diǎn)都是匿名的,用戶在使用系統(tǒng)時(shí),并不需要注冊(cè)自己的真實(shí)身份。這樣的機(jī)制為設(shè)計(jì)法定數(shù)字貨幣帶來(lái)了一定的威脅。
壞賬。如果一個(gè)法定數(shù)字貨幣系統(tǒng)是匿名的,且支持借貸業(yè)務(wù),則該系統(tǒng)無(wú)法有效地對(duì)壞賬進(jìn)行管控。由于系統(tǒng)并沒(méi)有登記用戶的真實(shí)身份,用戶完全可以在花完借貸的款項(xiàng)后拋棄當(dāng)前賬戶,重新注冊(cè)一個(gè)新賬戶。如此一來(lái),借款人或銀行將無(wú)法收回應(yīng)收款項(xiàng)。
洗錢。由于系統(tǒng)的參與節(jié)點(diǎn)都是匿名的,系統(tǒng)不知道資金流向賬戶的真實(shí)身份。系統(tǒng)的去中心化導(dǎo)致在洗錢事件發(fā)生后,系統(tǒng)不能像傳統(tǒng)銀行一樣凍結(jié)賬戶。
貨幣發(fā)行不可控。出于國(guó)家安全考慮,法定貨幣的發(fā)行應(yīng)該由國(guó)家發(fā)行。而區(qū)塊鏈的去中心化、礦工節(jié)點(diǎn)的自由進(jìn)出導(dǎo)致貨幣發(fā)行不可控。因此,在設(shè)計(jì)法定數(shù)字貨幣時(shí),需要重新設(shè)計(jì)貨幣的發(fā)行機(jī)制,使貨幣發(fā)行中心化,結(jié)合匿名認(rèn)證等技術(shù),使系統(tǒng)中的資金流向可控。
5.智能合約層安全
區(qū)塊鏈2.0 版本中引入智能合約層,提出區(qū)塊鏈即服務(wù)(BaaS)的概念。智能合約層提供了自動(dòng)化腳本代碼組成的智能合約來(lái)開發(fā)應(yīng)用、操作數(shù)據(jù)。
智能合約本質(zhì)上而言仍然是編程語(yǔ)言,如果它是圖靈完備的,支持循環(huán)指令,攻擊者就可能構(gòu)造帶有死循環(huán)代碼的交易對(duì)網(wǎng)絡(luò)中的礦工發(fā)起DoS 攻擊。
在區(qū)塊鏈中設(shè)計(jì)驗(yàn)證腳本或智能合約時(shí),應(yīng)預(yù)防死循環(huán)導(dǎo)致的DoS 攻擊??梢栽谠O(shè)計(jì)腳本語(yǔ)言時(shí)禁止使用循環(huán)指令,也可以要求程序的創(chuàng)建人為程序執(zhí)行按照?qǐng)?zhí)行步數(shù)支付費(fèi)用,并設(shè)置費(fèi)用限額。超過(guò)限額后,停止執(zhí)行且不歸還費(fèi)用。其次,做好充分的容錯(cuò)機(jī)制,通過(guò)系統(tǒng)化手段,結(jié)合運(yùn)行環(huán)境隔離等機(jī)制,確保代碼在有限時(shí)間內(nèi)按預(yù)期執(zhí)行。
6.其他
除了前面提到的防范措施外,還要有相應(yīng)的風(fēng)險(xiǎn)控制手段,對(duì)系統(tǒng)的數(shù)據(jù)訪問(wèn)、交易頻度以及記錄到區(qū)塊中的交易進(jìn)行監(jiān)控和檢測(cè),對(duì)可疑操作和不當(dāng)行為進(jìn)行告警、合成和記錄,并評(píng)估損失,進(jìn)行補(bǔ)救,防止再次出現(xiàn)。
此外,為了提高開發(fā)效率和安全性,還可以將一些重要模塊(例如:私鑰的存儲(chǔ)與保護(hù)、共識(shí)協(xié)議等)剝離出來(lái),開發(fā)統(tǒng)一的安全組件、接口,以解決開發(fā)人員安全意識(shí)不足的問(wèn)題。
小結(jié)
區(qū)塊鏈技術(shù)為金融行業(yè)的業(yè)務(wù)和機(jī)構(gòu)運(yùn)作方式帶來(lái)新的轉(zhuǎn)變機(jī)遇的同時(shí),也帶來(lái)了新的安全挑戰(zhàn)。民生銀行將以支持業(yè)務(wù)和技術(shù)創(chuàng)新為目標(biāo),繼續(xù)深入研究區(qū)塊鏈的應(yīng)用安全,在應(yīng)用區(qū)塊鏈為業(yè)務(wù)帶來(lái)轉(zhuǎn)變的基礎(chǔ)上,保證業(yè)務(wù)系統(tǒng)的安全性。
(本文作者系中國(guó)民生銀行信息科技部總經(jīng)理助理呂曉強(qiáng);中國(guó)民生銀行信息科技部張磊、黃吉鯤)