使用地址池與跨雲備份
傳統的錢包系統上,客戶和錢包系統請求產生一組新地址時,系統會生成一組私鑰及對應的地址,並儲存到資料庫,然後再將地址返回給客戶。看起來再平常不過的行為,卻牽涉到背後雲端服務的穩定性。試想,今天客戶請求了一筆地址,系統也如預期的產生了,接著你馬上將錢存了進去,結果錢包系統背後的雲端服務發生了異常情形,導致無法服務,過了幾分鐘後,全部環境都恢復上線,當你再次到錢包系統查詢餘額,卻得到0,甚至是找不到。
要確保回給客戶的地址不會遺失,第一個想法就是縮短雲端服務的備份時間即可,但這畢竟是有極限的。看似簡單的任務,實際上是很複雜的。
AMIS做為錢包系統的開發商,目標就是確保客戶資產不會有安全上的疑慮,除了使用跨雲備份解決上述問題外,還提供機構等級的安全性、反駭客竊盜技術、點對點資料加密等。
探討雲端服務
縮短雲端系統的備份時間,還是沒辦法解決問題,以AWS為例,RDS snapshot/Point-In-Time支援的最新還原點是5分鐘,但你不可能要求客戶5分鐘後才可使用提款/存款吧?
也許你會說,可以使用Aurora的資料同步功能,備份到S3,但因為S3不支援加密,所以你的資料將會在網路上裸奔。
接著,將焦點從單一服務拉到整個雲端服務來看,當你把客戶資產託管在單一雲端系統上更容易承受過大損失而倒閉,例如 AWS在 2017年就因為一位開發人員的失誤而造成了大規模的服務中斷,當時的S&P500損失了近1.5億美元,Azure在2018年則是因為天災而造成硬體裝置損毀,GCP在2019年則是發生了近三年最大規模的當機。
你沒辦法預測什麼時候當機,只能做足準備。更重要的是,在數位貨幣這行,你該如何向雲端服務商證明你的損失並且索賠?
由上述可發現,倚靠單一雲端平台是非常危險的。跨雲備份系統是必要的,設計上還要確保提供給客戶的地址不會在資料庫中遺失、已備份資料如何不外洩、資料的備份又該如何管理,又該如何監控備份資料是否完善等。
跨雲備份服務的產生
為了確保所有提供給客戶的地址不會遺失,我們使用了地址池的概念,也就是預先生成地址,並將其備份,接著就可確保此地址的使用性。
備份系統會從資料庫中輸出未備份的資料檔案,將其加密後上傳到第三方雲端儲存服務上(用來加密的私鑰則是存放於Vault中,管理者可以透過開設不同的帳號或 token 來限制不同的存取範圍),並利用檔案驗證碼確保遠端和本地是相同的。另外,檔案加密也可確保檔案在傳輸的過程中被側錄或是資料外洩時,也無從解開,還可避免自家人監守自盜的情況發生。
備份檔案的設計上,可以用差異備份又或是全部備份。差異備份的優點是速度較快,缺點是檔案過多,需要定期壓縮,且需儲存上次備份的位置。全部備份優點為還原和驗證的邏輯較為簡單,資料保存上可能僅需最後10筆資料即可,缺點就是備份時間較久。
跨雲備份檔案管理
由於內容極度敏感,所有檔案上傳後即無法被更改和刪除。現在許多雲端服務商都有提供保留原則政策的設定,主要是避免管理員操作失誤、符合法規控管,在時間上可以設定10年甚至更多,來確保資料不會無故消失。
在雲端服務商上啟用審計追蹤
這是一個非常重要的功能,開啟後我們可以知道雲端上的檔案今天被誰做了什麼操作,舉凡讀取、下載、編輯、增加新權限等都一覽無遺,當發生不可預期錯誤時,可以快速找到問題並解決。
監控備份資料檔案
監控已備份的地址數量與過去幾秒到幾分鐘的流量是非常重要的,做為錢包系統服務商,我們可以利用過去的數據來調整地址池的水位,以符合客戶的需求。
定期驗證在雲端服務上的備份檔案
確保檔案是正確可還原的,除了使用檔案驗證碼當作條件外,也將資料實際還原到資料庫中,確保這些檔案都沒有問題。
系統架構

基於前述的討論我們可以將系統設計成如上圖所示。
Address pool service
會不斷的監看已備份地址水位,如果不足的話則繼續生成地址。
Backup service
負責備份地址,產生加密備份檔案所需的私鑰,並儲存在Vault。接著將地址檔案加密後,上傳到Storage service。
Verification service
負責驗證檔案內容是否正確。
結語
確保客戶錢包地址的安全是非常重要的,現在交易所的錢包被盜,或是自家人偷竊的新聞都仍時有所聞。同時,雲端服務商的穩定性也是考量點之一,這些問題AMIS錢包都幫你想到了,近期也整合HTSS(Hierarchical Threshold Signature)到系統中,讓系統安全再上一層樓。
文章作者:AMIS Hung-Tao Hsieh