比特幣錢包安全

本文是有關比特幣相關的系列文章,發佈於GIT-HUB,地址如下:
https://github.com/junahan/JU...

比特幣錢包安全概要

有關比特幣錢包安全,可以簡單的分爲兩類,一類是做爲用戶的你不可控制的安全問題,一類是做爲用戶的你可以控制的安全問題。之所以這樣看似廢話的區分,提醒你集中你的注意力在你可以控制的安全問題上。

要點提醒:確保比特幣錢包安全的全部在於確保錢包私鑰安全,好消息是,這個你可以採取措施。

你不能控制的安全問題

  1. 比特幣選擇的密碼學算法安全問題,例如,比特幣創世之初選擇了採用SECP256K1算法,如果該算法失效,則會從根本上威脅比特幣安全
  2. 51%算力攻擊導致的交易安全問題,這個可能導致你收不到比特幣,但不會導致你持有的比特幣產生安全問題

你可以控制的安全問題

  1. 你可以選擇使用那個錢包 - 比特幣賬本完全開放,任何人都可以構建一個支持比特幣的錢包
  2. 你可以選擇採用什麼機制來存儲和保護你的私鑰,例如,你可以採用冷熱存儲或者分割和共享密鑰的方式
  3. 你可以養成良好的使用錢包的習慣,例如,定期備份錢包、必要的時候及時將熱錢包內的比特幣轉移到冷錢包等

比特幣錢包安全機制

安全機制從來就是方便易用和安全可靠(防盜和防災)之間的平衡機制。既然說確保錢包安全的全部在於確保私鑰安全,那就把重點放在錢包如何存儲私鑰以確保它的安全上。下表是相關安全機制的一個簡單的總結。

機制 易用性 可用性(1) 安全性(2)
本地存儲
冷熱存儲
分割和共享密鑰
在線錢包 中(3) 低(4)
比特幣交易所 中(5) 中(6)
  1. 可用性(Availablity): 和存儲介質可能自然損壞有關,可以簡單的理解爲防災,高可用性往往意味着更低的安全性,想一想你把私鑰備份到公共網絡上就明白了。
  2. 安全性(Security): 可簡單的理解爲防盜。
  3. 在線錢包的可用性取決於錢包提供方的服務能力。
  4. 在線錢包的安全性取決於錢包提供方的安全措施和信用,但很重要的是,做爲用戶的你要意識到錢包提供方存儲你的密鑰也意味着可以訪問你的密鑰。而且在線錢包供應商更有可能遭受黑客的攻擊而導致客戶錢包的損失。
  5. 使用比特幣交易所服務就像你把錢存入銀行一樣,可謂是省心省力、方便易用。但其可用性取決於交易所的防災能力。
  6. 對於使用比特幣交易所的安全問題,不再是密鑰的安全問題,而是你在比特幣交易所賬戶的安全問題,你需要像信任銀行一樣信任交易所不破產、不跑路、不作惡。

本地存儲

本地存儲是一種最簡單的方式,Bitcoin-qt錢包默認就是把產生的私鑰存儲在一個名字爲keystore的本地文件裏面,keystore文件的訪問簡單的通過用戶指定密碼保護。錢包被設計爲最多產生和管理1000個密鑰對(對大多數用戶來說這不是問題),例如,每次交易中用於找零的地址就有對應的密鑰對(爲了隱私和安全的因素,每次找零地址都各不相同)。錢包應用管理所有產生的密鑰對和地址併爲用戶統計相應地址中的比特幣,比特幣錢包裏面看到的餘額就是這些地址上所有比特幣的總和。

使用本地存儲方便快捷,但可用性和安全性均較差,也就是說,你既要防盜還要防災才行,這種情況下,你最好定期備份keystore並確保將備份安全。

冷熱存儲

鑑於本地存儲安全性的問題,我們希望能夠在保留便利的情況下提升安全性。基本的思路是我們可以創建兩個錢包,一個鏈接網絡,可以發送和接受比特幣,我們稱之爲熱錢包,另外一個錢包從不連接網絡(安全威脅更多來自網絡),我們稱之爲冷錢包,熱錢包知悉冷錢包地址,從而可以向冷錢包轉移價值。這樣以來,我們同時擁有熱錢包的便利和冷錢包的安全。

考慮到隱私和安全問題,我們希望每次熱錢包向冷錢包轉移比特幣的時候使用不同的地址,該地址需要和冷錢包相應的密鑰對匹配,那麼如何確保熱錢包知道冷錢包的多個地址?答案是利用稱之爲分級密鑰生成模式的密碼學技巧,如下圖所示:

分級密鑰生成

  • 分級密鑰生成程序不直接生成密鑰對,而是生成兩段信息,一段是私鑰生成信息,該信息存儲於冷錢包這側,另外一段是地址生成信息,該段信息傳遞給熱錢包一側。
  • 在熱錢包一側,分級密鑰生成程序使用地址生成信息和索引值“i”(一個整數)生成第“i”個地址。
  • 在冷錢包一側,分級密鑰生成程序使用私鑰生成信息和索引值“i”生成第“i”個私鑰,並確保該私鑰和熱錢包一次第“i”個地址相匹配,這點至關重要,否則,就無法確保冷錢包用於該地址上的比特幣。
  • 密碼學保證攻擊者無法通過熱錢包一次的地址生成信息推導出私鑰生成信息及私鑰,從而可以確保私鑰的安全。
  • 比特幣使用的數字簽名算法(ECDSA)支持分級密鑰生成模式(這很重要)。

基於以上基本原理,我們可以設計如下幾種冷熱存儲錢包:

  1. 分級錢包: 直接基於分級密鑰生成模式打造,在這種方案中,冷錢包可以存放在不連網的PC/筆記本電腦上,也可以存放在不連接網絡的移動設備上,並記得把它放在安全可靠的地方 - 注意防盜防災。
  2. 大腦錢包: 基本原理是根據口令短語(一組足夠長的詞語組合)產生密鑰對並結合分級密鑰生成模式,我們可以基於口令短語生成一系列地址和相應的私鑰。需要重點關注的是,私鑰僅僅由口令短語保護:

    • 爲防止攻擊者發起猜測攻擊,口令短語需要足夠長,要比Email口令和銀行卡密碼長的多才行。例如這樣的口令短語 - "worn till alloy focusing okay reducing earth dutch fake tired dot occasions"。
    • 同時要確保你的確能夠記住口令短語(你也可以寫下來並放在安全的地方,把它變成成一個簡單的紙張錢包),否則你就無法重建私鑰系列,從而永遠丟失這些地址上的比特幣。
  3. 紙張錢包: 和大腦錢包原理一樣,如果你把口令短語打印在紙張上,大腦錢包就變成紙張錢包。不過,既然都要打印在紙上了,不妨直接把私鑰和地址打印在紙上。在此提醒,請把紙張錢包放置在安全可靠的地方 - 注意防盜防災。

共享密鑰

我們說冷熱存儲可以提供更高的安全性(防網絡攻擊),但是卻面臨一個問題就是我們需要將冷私鑰存儲在介質上並好生照料介質以防止介質自然損壞(防災)而導致低可用性。如果有辦法同時提高可用性和安全性就再好不過了。答案是有,我們再一次利用密碼學技巧 - 共享密鑰來做到這一點。

簡單的說,共享密鑰允許將你的密鑰分成N個碎片,只需要其中的K個碎片(K<=N)就可以恢復原始密鑰,而且,如果只有少於K個碎片,則無法恢復原始密鑰並切無法獲得原始密鑰的任何信息,這就是密鑰共享的K-of-N模式。

這裏需要提醒用戶的是,這裏的N個碎片只是個比喻,並非簡單的把原始密鑰串直接切成N個碎片。這裏想到一個網絡盛傳高曉鬆2017年12月8日微博分享的故事(看下圖),這個故事告訴我們,這個人腦2-of-2密碼模式安全但可用性顯然不行。

高曉鬆微博調侃比特幣

在線錢包

一個在線錢包類似於本地錢包,區別在於錢包信息存儲於雲端,可以通過Web瀏覽器或者是App訪問。在線錢包很是便利,但它的安全不僅取決於在線錢包服務供應商(通常是比特幣交易所)的安全措施,還取決於服務供應商的信譽:

  • 在線錢包供應商安全措施:

    • 是否提供類似本地存儲的大腦錢包的機制,允許通過一個受複雜口令短語保護的冷錢包支持,讓用戶可以在本地通過該口令短語重建一個冷錢包,這樣以來,用戶只要在線使用一個受密碼保護的熱錢包,同時又能夠在必要的時候把在線錢包的比特幣及時轉移至冷錢包地址。
    • 網絡防攻擊 - 在線錢包供應商大量存放客戶的錢包密鑰信息,容易成爲黑客攻擊目標。
  • 在線錢包供應商信譽: 供應商在雲端存儲你的密鑰,他們至少有能力訪問你的密鑰!通常,類似於大腦錢包,你可以提供一個足夠複雜的口令短語來加密和保護你的密鑰,但你得信任供應商不會有意(作惡)或者無意(例如他們錢包的代碼漏洞)泄漏你的密鑰和口令短語。

比特幣交易所

把比特幣存在比特幣交易所而不是自己的比特幣錢包是另外一種選擇,這個類比於把錢存進銀行,你在比特幣交易所的賬戶本質上已經不是比特幣錢包賬戶,也無需擔心自己比特幣存儲的問題。就像從銀行取現到你的錢包一樣,你也可以隨時向比特幣交易所要求提幣,提幣的過程就是將你的比特幣從交易所賬戶轉移至你自己的比特幣錢包的過程。將比特幣存進交易所,你可以無需在擔心比特幣錢包的安全問題,但你面臨另外一個可能更加不安全的因素,那就是比特幣交易所本身可能破產(就像銀行破產一樣),甚至比特幣交易所卷幣跑路的風險。

你可以採取的措施

  1. 選擇錢包 - 儘可能選擇官方的,開源的,具有高級安全選擇(如支持冷熱存儲)的錢包。
  2. 使用更高級的安全防護,如採用冷熱錢包,兼顧方便易用和安全
  3. 及時將不用的比特幣從熱錢包轉移至冷錢包,如果只有口令短語保護的情況下,儘可能使用專業軟件生成口令短語,不要使用過於簡單的口令短語

參考文獻

  1. Satoshi Nakamoto(中本聰),"Bitcoin: A Peer-to-Peer Electronic Cash System", http://www.bitcoin.org/en/bit..., 2009.
  2. Arvind Narayanan, Joseph Bonneau, Edward Felten, Andrew Miller, Steven Goldfeder, " Bitcoin and Cryptocurrency Technologies, 2016.
  3. BIP 32, "Hierarchical Deterministic Wallets", https://github.com/bitcoin/bi..., 2012.
本作品採用知識共享署名 4.0 國際許可協議進行許可。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章