如何設(shè)計(jì)一個(gè)安全的加密貨幣錢包
作為一名加密貨幣愛好者和區(qū)塊鏈行業(yè)建設(shè)者的一員,我將盡我最大的努力來更好地構(gòu)建加密貨幣生態(tài)系統(tǒng)。在這篇文章中,我將分享我的經(jīng)驗(yàn),如何為數(shù)字資產(chǎn)交易設(shè)計(jì)一個(gè)安全的加密貨幣錢包。希望對(duì)建立基于區(qū)塊鏈和加密貨幣經(jīng)濟(jì)的業(yè)務(wù)基礎(chǔ)有所幫助。
數(shù)字資產(chǎn)管理是至關(guān)重要的,尤其是對(duì)于那些建立在區(qū)塊鏈基礎(chǔ)上的機(jī)構(gòu)。一個(gè)典型的使用案例是加密貨幣交易所或場(chǎng)外交易平臺(tái)(OTC),使成千上萬的交易者在不受時(shí)間和空間限制的情況下提取或剝離他們的數(shù)字資產(chǎn),銀行級(jí)別的安全性和高可用架構(gòu)是這類創(chuàng)業(yè)公司要獲取的基本要求。
熱錢包,暖錢包和冷錢包
關(guān)于錢包的常識(shí)不會(huì)在文章中介紹,但是我們應(yīng)該學(xué)習(xí)三種錢包之間的交易業(yè)務(wù)系統(tǒng)。
· 熱錢包:僅用于從系統(tǒng)發(fā)送交易,應(yīng)保留足夠但不太多的資金來服務(wù)取款。它應(yīng)該有嚴(yán)格的政策限制硬幣的數(shù)量,也就是說,小額取款應(yīng)該盡可能自動(dòng)化,但大額提款應(yīng)該在提款前得到行政部門的批準(zhǔn)。
· 暖錢包:用于所有存款到系統(tǒng),請(qǐng)求一個(gè)地址發(fā)送資金到新用戶加入時(shí)??蛻舫渲档脚X包的資金應(yīng)自動(dòng)或定時(shí)提取到冷錢包。
· 冷錢包:用于系統(tǒng)大部分資金的存儲(chǔ),我想至少是7/10,用于暖錢包的充值。冷錢包也被稱為離線錢包,因?yàn)樗蛩阍诓贿B接任何網(wǎng)絡(luò)的設(shè)備上運(yùn)行。
因此,在討論加密貨幣錢包系統(tǒng)體系結(jié)構(gòu)的設(shè)計(jì)思想時(shí),需要考慮安全存儲(chǔ)私鑰、智能風(fēng)險(xiǎn)控制取款系統(tǒng)和存款鏈確認(rèn)三個(gè)關(guān)鍵問題。如果我們必須優(yōu)先考慮這些安全因素的發(fā)展,這些密鑰的重要性逐步減少,因?yàn)樽钪匾氖撬借€存儲(chǔ)。
基于實(shí)際用例的體系結(jié)構(gòu)
持有自己的私鑰是采用加密貨幣的主要原因。傳統(tǒng)的金融方式,尤其是跨境匯款,使得貨幣的轉(zhuǎn)移十分繁瑣。在使用數(shù)字資產(chǎn)錢包時(shí),個(gè)人或機(jī)構(gòu)之間的業(yè)務(wù)邏輯存在許多差異。
如何設(shè)計(jì)數(shù)字資產(chǎn)錢包取決于您存儲(chǔ)的私鑰的位置。主要有三種模式:在手機(jī)中存儲(chǔ)私鑰、區(qū)塊鏈全節(jié)點(diǎn)或安全的網(wǎng)絡(luò)程序環(huán)境。
1. 分散式移動(dòng)應(yīng)用錢包持有密鑰并簽署原始交易。當(dāng)手機(jī)app創(chuàng)建錢包時(shí),pubkic key注冊(cè)到網(wǎng)絡(luò)程序(主要是webservices)。網(wǎng)絡(luò)程序與p2p網(wǎng)絡(luò)交互,從區(qū)塊鏈臺(tái)賬中獲取信息(維護(hù)UTXO,查詢以太坊賬戶余額, nonce值,交易歷史等),并廣播新的交易。這些鏈能夠錢包滿足大多數(shù)人使用。
2. 帶錢包的區(qū)塊鏈節(jié)點(diǎn)提供全方位服務(wù),直接在網(wǎng)絡(luò)環(huán)境中創(chuàng)建和簽署原始交易。與全服務(wù)節(jié)點(diǎn)的系統(tǒng)集成通過JSON-RPC與區(qū)塊鏈全服務(wù)節(jié)點(diǎn)交互來管理錢包。錢包私鑰與區(qū)塊鏈分類賬一起存儲(chǔ),同時(shí)暴露在不太安全的開放網(wǎng)絡(luò)環(huán)境中。有許多黑客入侵案件引起的json - rpc連接。我認(rèn)為使用區(qū)塊鏈節(jié)點(diǎn)實(shí)現(xiàn)的原始錢包是不好的做法。有人建議比特幣內(nèi)核應(yīng)該將節(jié)點(diǎn)和錢包從功能中分離出來
3. 為了提高安全性,可以通過在更安全的環(huán)境中運(yùn)行的一個(gè)單獨(dú)的錢包程序生成私鑰,我們稱之為簽名程序。全服務(wù)的另一部分是網(wǎng)絡(luò)程序,它構(gòu)造原始交易和廣播簽名交易。整個(gè)過程是,網(wǎng)絡(luò)程序創(chuàng)建未簽名的交易,并以成功的方式將未簽名的交易轉(zhuǎn)移到簽名程序(然后簽名程序?qū)⒑灻蟮慕灰追祷亟o網(wǎng)絡(luò)程序,最后由網(wǎng)絡(luò)程序?qū)⒑灻慕灰讖V播到對(duì)等網(wǎng)絡(luò)。
簽名程序和網(wǎng)絡(luò)程序
錢包全方位服務(wù)包括四個(gè)部分。
· 首先是錢包管理,私鑰由wallet-core(簽名程序)程序生成,并由levelDB存儲(chǔ)
· 第二是外部端點(diǎn),取款流程和錢包生成,wallet-gateway(網(wǎng)絡(luò)程序)構(gòu)建原始交易,為業(yè)務(wù)系統(tǒng)提供外部端點(diǎn),使用wallet-core和wallet-gateway組件之間的gRPC協(xié)議傳輸數(shù)據(jù)。
· 第三個(gè)是ledger-monitor程序,它訂閱最佳塊事件并推送到MQ(RabbitMQ)。
· 最后一個(gè)是ledger-consumer,它與兩個(gè)MQ消費(fèi)者相結(jié)合,一個(gè)是為我們的系統(tǒng)錢包維護(hù)UTXO區(qū)塊鏈,另一個(gè)是處理消費(fèi)者(用戶通知)的存款。





