本文是有關比特幣相關的系列文章,發佈於GIT-HUB,地址以下:
https://github.com/junahan/JU...
比特幣錢包安全概要
有關比特幣錢包安全,能夠簡單的分爲兩類,一類是作爲用戶的你不可控制的安全問題,一類是作爲用戶的你能夠控制的安全問題。之因此這樣看似廢話的區分,提醒你集中你的注意力在你能夠控制的安全問題上。git
要點提醒:確保比特幣錢包安全的所有在於確保錢包私鑰安全,好消息是,這個你能夠採起措施。github
你不能控制的安全問題
- 比特幣選擇的密碼學算法安全問題,例如,比特幣創世之初選擇了採用SECP256K1算法,若是該算法失效,則會從根本上威脅比特幣安全
- 51%算力攻擊致使的交易安全問題,這個可能致使你收不到比特幣,但不會致使你持有的比特幣產生安全問題
你能夠控制的安全問題
- 你能夠選擇使用那個錢包 - 比特幣帳本徹底開放,任何人均可以構建一個支持比特幣的錢包
- 你能夠選擇採用什麼機制來存儲和保護你的私鑰,例如,你能夠採用冷熱存儲或者分割和共享密鑰的方式
- 你能夠養成良好的使用錢包的習慣,例如,按期備份錢包、必要的時候及時將熱錢包內的比特幣轉移到冷錢包等
比特幣錢包安全機制
安全機制歷來就是方便易用和安全可靠(防盜和防災)之間的平衡機制。既然說確保錢包安全的所有在於確保私鑰安全,那就把重點放在錢包如何存儲私鑰以確保它的安全上。下表是相關安全機制的一個簡單的總結。算法
機制 |
易用性 |
可用性(1) |
安全性(2) |
本地存儲 |
高 |
低 |
低 |
冷熱存儲 |
中 |
中 |
中 |
分割和共享密鑰 |
中 |
高 |
高 |
在線錢包 |
高 |
中(3) |
低(4) |
比特幣交易所 |
高 |
中(5) |
中(6) |
- 可用性(Availablity): 和存儲介質可能天然損壞有關,能夠簡單的理解爲防災,高可用性每每意味着更低的安全性,想想你把私鑰備份到公共網絡上就明白了。
- 安全性(Security): 可簡單的理解爲防盜。
- 在線錢包的可用性取決於錢包提供方的服務能力。
- 在線錢包的安全性取決於錢包提供方的安全措施和信用,但很重要的是,作爲用戶的你要意識到錢包提供方存儲你的密鑰也意味着能夠訪問你的密鑰。並且在線錢包供應商更有可能遭受黑客的攻擊而致使客戶錢包的損失。
- 使用比特幣交易所服務就像你把錢存入銀行同樣,可謂是省心省力、方便易用。但其可用性取決於交易所的防災能力。
- 對於使用比特幣交易所的安全問題,再也不是密鑰的安全問題,而是你在比特幣交易所帳戶的安全問題,你須要像信任銀行同樣信任交易所不破產、不跑路、不做惡。
本地存儲
本地存儲是一種最簡單的方式,Bitcoin-qt錢包默認就是把產生的私鑰存儲在一個名字爲keystore的本地文件裏面,keystore文件的訪問簡單的經過用戶指定密碼保護。錢包被設計爲最多產生和管理1000個密鑰對(對大多數用戶來講這不是問題),例如,每次交易中用於找零的地址就有對應的密鑰對(爲了隱私和安全的因素,每次找零地址都各不相同)。錢包應用管理全部產生的密鑰對和地址併爲用戶統計相應地址中的比特幣,比特幣錢包裏面看到的餘額就是這些地址上全部比特幣的總和。瀏覽器
使用本地存儲方便快捷,但可用性和安全性均較差,也就是說,你既要防盜還要防災才行,這種狀況下,你最好按期備份keystore並確保將備份安全。安全
冷熱存儲
鑑於本地存儲安全性的問題,咱們但願可以在保留便利的狀況下提高安全性。基本的思路是咱們能夠建立兩個錢包,一個連接網絡,能夠發送和接受比特幣,咱們稱之爲熱錢包,另一個錢包從不鏈接網絡(安全威脅更多來自網絡),咱們稱之爲冷錢包,熱錢包知悉冷錢包地址,從而能夠向冷錢包轉移價值。這樣以來,咱們同時擁有熱錢包的便利和冷錢包的安全。網絡
考慮到隱私和安全問題,咱們但願每次熱錢包向冷錢包轉移比特幣的時候使用不一樣的地址,該地址須要和冷錢包相應的密鑰對匹配,那麼如何確保熱錢包知道冷錢包的多個地址?答案是利用稱之爲分級密鑰生成模式的密碼學技巧,以下圖所示:加密

- 分級密鑰生成程序不直接生成密鑰對,而是生成兩段信息,一段是私鑰生成信息,該信息存儲於冷錢包這側,另一段是地址生成信息,該段信息傳遞給熱錢包一側。
- 在熱錢包一側,分級密鑰生成程序使用地址生成信息和索引值「i」(一個整數)生成第「i」個地址。
- 在冷錢包一側,分級密鑰生成程序使用私鑰生成信息和索引值「i」生成第「i」個私鑰,並確保該私鑰和熱錢包一次第「i」個地址相匹配,這點相當重要,不然,就沒法確保冷錢包用於該地址上的比特幣。
- 密碼學保證攻擊者沒法經過熱錢包一次的地址生成信息推導出私鑰生成信息及私鑰,從而能夠確保私鑰的安全。
- 比特幣使用的數字簽名算法(ECDSA)支持分級密鑰生成模式(這很重要)。
基於以上基本原理,咱們能夠設計以下幾種冷熱存儲錢包:spa
- 分級錢包: 直接基於分級密鑰生成模式打造,在這種方案中,冷錢包能夠存放在不連網的PC/筆記本電腦上,也能夠存放在不鏈接網絡的移動設備上,並記得把它放在安全可靠的地方 - 注意防盜防災。
-
大腦錢包: 基本原理是根據口令短語(一組足夠長的詞語組合)產生密鑰對並結合分級密鑰生成模式,咱們能夠基於口令短語生成一系列地址和相應的私鑰。須要重點關注的是,私鑰僅僅由口令短語保護:設計
- 爲防止攻擊者發起猜想攻擊,口令短語須要足夠長,要比Email口令和銀行卡密碼長的多才行。例如這樣的口令短語 - "worn till alloy focusing okay reducing earth dutch fake tired dot occasions"。
- 同時要確保你的確可以記住口令短語(你也能夠寫下來並放在安全的地方,把它變成成一個簡單的紙張錢包),不然你就沒法重建私鑰系列,從而永遠丟失這些地址上的比特幣。
- 紙張錢包: 和大腦錢包原理同樣,若是你把口令短語打印在紙張上,大腦錢包就變成紙張錢包。不過,既然都要打印在紙上了,不妨直接把私鑰和地址打印在紙上。在此提醒,請把紙張錢包放置在安全可靠的地方 - 注意防盜防災。
共享密鑰
咱們說冷熱存儲能夠提供更高的安全性(防網絡攻擊),可是卻面臨一個問題就是咱們須要將冷私鑰存儲在介質上並好生照料介質以防止介質天然損壞(防災)而致使低可用性。若是有辦法同時提升可用性和安全性就再好不過了。答案是有,咱們再一次利用密碼學技巧 - 共享密鑰來作到這一點。blog
簡單的說,共享密鑰容許將你的密鑰分紅N個碎片,只須要其中的K個碎片(K<=N)就能夠恢復原始密鑰,並且,若是隻有少於K個碎片,則沒法恢復原始密鑰並切沒法得到原始密鑰的任何信息,這就是密鑰共享的K-of-N模式。
這裏須要提醒用戶的是,這裏的N個碎片只是個比喻,並不是簡單的把原始密鑰串直接切成N個碎片。這裏想到一個網絡盛傳高曉鬆2017年12月8日微博分享的故事(看下圖),這個故事告訴咱們,這我的腦2-of-2密碼模式安全但可用性顯然不行。

在線錢包
一個在線錢包相似於本地錢包,區別在於錢包信息存儲於雲端,能夠經過Web瀏覽器或者是App訪問。在線錢包非常便利,但它的安全不只取決於在線錢包服務供應商(一般是比特幣交易所)的安全措施,還取決於服務供應商的信譽:
-
在線錢包供應商安全措施:
- 是否提供相似本地存儲的大腦錢包的機制,容許經過一個受複雜口令短語保護的冷錢包支持,讓用戶能夠在本地經過該口令短語重建一個冷錢包,這樣以來,用戶只要在線使用一個受密碼保護的熱錢包,同時又可以在必要的時候把在線錢包的比特幣及時轉移至冷錢包地址。
- 網絡防攻擊 - 在線錢包供應商大量存放客戶的錢包密鑰信息,容易成爲黑客攻擊目標。
- 在線錢包供應商信譽: 供應商在雲端存儲你的密鑰,他們至少有能力訪問你的密鑰!一般,相似於大腦錢包,你能夠提供一個足夠複雜的口令短語來加密和保護你的密鑰,但你得信任供應商不會有意(做惡)或者無心(例如他們錢包的代碼漏洞)泄漏你的密鑰和口令短語。
比特幣交易所
把比特幣存在比特幣交易所而不是本身的比特幣錢包是另一種選擇,這個類比於把錢存進銀行,你在比特幣交易所的帳戶本質上已經不是比特幣錢包帳戶,也無需擔憂本身比特幣存儲的問題。就像從銀行取現到你的錢包同樣,你也能夠隨時向比特幣交易所要求提幣,提幣的過程就是將你的比特幣從交易所帳戶轉移至你本身的比特幣錢包的過程。將比特幣存進交易所,你能夠無需在擔憂比特幣錢包的安全問題,但你面臨另一個可能更加不安全的因素,那就是比特幣交易所自己可能破產(就像銀行破產同樣),甚至比特幣交易所卷幣跑路的風險。
你能夠採起的措施
- 選擇錢包 - 儘量選擇官方的,開源的,具備高級安全選擇(如支持冷熱存儲)的錢包。
- 使用更高級的安全防禦,如採用冷熱錢包,兼顧方便易用和安全
- 及時將不用的比特幣從熱錢包轉移至冷錢包,若是隻有口令短語保護的狀況下,儘量使用專業軟件生成口令短語,不要使用過於簡單的口令短語
參考文獻
- Satoshi Nakamoto(中本聰),"Bitcoin: A Peer-to-Peer Electronic Cash System", http://www.bitcoin.org/en/bit..., 2009.
- Arvind Narayanan, Joseph Bonneau, Edward Felten, Andrew Miller, Steven Goldfeder, " Bitcoin and Cryptocurrency Technologies, 2016.
- BIP 32, "Hierarchical Deterministic Wallets", https://github.com/bitcoin/bi..., 2012.
本做品採用
知識共享署名 4.0 國際許可協議進行許可。