以上圖為例,解釋非對稱加密模式的流程:
1.Bob 與 Alice 透過非對稱演算法生成各自的私鑰和公鑰(公鑰可以透過私鑰推導);
2.Bob 想給 Alice 傳送一份加密資訊;
3.Bob 用 Alice 的公鑰對資訊進行加密;
4.加密的資訊僅能透過 Alice 的私鑰解密;
當前數字貨幣(比特幣、以太幣等)採用的是「橢圓曲線演算法」,橢圓曲線演算法同樣也是非對稱演算法,相比起 RSA 演算法有更多的優勢,比如安全效能高、計算量小、儲存空間佔用小、頻寬要求低等。
每一個錢包賬戶包含一份金鑰對,即私鑰與公鑰。私鑰(k)是一個數字,通常是隨機選出的。有了私鑰,我們就可以使用橢圓曲線乘法這個單向加密函式生成一個公鑰(K)。有了公鑰(K),我們就可以使用一個單向加密雜湊函式生成該賬戶地址(A)。
當你發生交易時,每筆交易都需要一個有效的簽名才會被儲存在區塊鏈。只有有效的私鑰才能產生有效的數字簽名,因此擁有錢包賬戶的私鑰就擁有了該賬戶的支配權。
錢包形態
在瞭解錢包的生成機制後,我們很快就明白一點,我們備份錢包,就是備份私鑰,但因保管方式不同,所表現的形態也不一樣。
目前常見的私鑰形態:
1.Private Key
2.Keystore && Password
3.Mnemonic Seed
Private Key
Private Key 就是一份隨機生成的 256 位二進位制數字,你甚至可以用硬幣、鉛筆和紙來隨機生成你的私鑰:擲硬幣 256 次,用紙和筆記錄正反面並轉換為 0 和 1,隨機得到的 256 位二進位制數字可作為私鑰。這 256 位二進位制數字,就是私鑰原始的狀態。
Keystore && Password
在以太坊官方錢包中,私鑰與公鑰將會以加密(建立錢包時設定的密碼,請務必記住!)的方式儲存為一份 JSON 檔案,儲存在 /Users/yourname/Library/Ethereum/keystore 中。 這份 JSON 檔案就是 keystore,所以你需要同時備份 keystore 和對應的 password。
Mnemonic code
Mnemonic code 由 BIP 39 提案提出,目的是透過隨機生成 12 ~ 24 個容易記住的單詞,單詞序列透過 PBKDF2 與 HMAC-SHA512 函式建立出隨機種子,該種子透過 BIP-0032 提案的方式生成確定性錢包。
BIP 39 定義助記碼建立過程如下:
1.創造一個 128 到 256 位的隨機順序(熵)。
2.提出 SHA256 雜湊前幾位,就可以創造一個隨機序列的校驗和。
3.把校驗和加在隨機順序的後面。
4.把順序分解成 11 位的不同集合,並用這些集合去和一個預先已經定義的 2048個單詞字典做對應。
5.生成一個 12 至 24 個單詞的助記碼。
所以當你記住 12 ~ 24 個助記碼後,就相當於記住私鑰。助記碼要比私鑰更方便記憶和保管。目前支援助記碼的錢包有 imToken 和 jaxx 。
錢包備份方式
因為錢包的形態多樣(本質一樣),所以備份的方式也同樣多點,但最終的目的: 防盜,防丟,分散風險 。
防盜:分離備份,假如 keystore 或密碼被盜,但對應的密碼 和 keystore 依然安全;
防丟:多處備份,降低丟失所有對應的 keystore && password 、助記碼、私鑰等等風險;
分散風險:將資金適當分散,降低損失程度,同時採取多重簽名方式,提取超過限制金額,需要多把私鑰授權;
下面為大家介紹常見的備份方式:
1.多處和分離備份 keystore && password
2.紙錢包
3.腦錢包
4.多重簽名
多處和分離備份 keystore && password
1.開啟以太坊官方錢包,在選單欄中選擇 ACCOUNTS -> BACKUP -> ACCOUNTS,你會看到一個 keystore 資料夾,在裡面儲存你建立過的錢包賬戶,以 UTC--2016-08-16....... 格式命名的 JSON 檔案,這就是你的 keystore 檔案。
2.將 keystore 檔案放置多處安全的位置,如離線的 USB 以及你信任的雲端儲存服務商。
3.keystore 對應的 password,你應該採用強密碼,同樣多處且與 keystore 分離備份。
紙錢包備份
紙錢包實質就是將 keystore 或 私鑰以紙質化形式儲存,一般為二維碼形式。
你可以透過命令列的方式
cat /Users/yourname/Library/Ethereum/keystore/ | qrencode -o keystore.png
也可以到 MyEtherWallet: Open Source JavaScript Client-Side Ether Wallet 離線提交你的 keystore 或 私鑰,就可以直接列印對應的二維碼紙錢包。
腦錢包
我們所說的腦錢包並不是由使用者自身輸入自定義的詞句生成私鑰(因為這並不安全),而是透過 BIP 39 提案的方式生成足夠隨機的,可記憶的助記碼。這是一個方案,但不是一個非常好的方案,因為人類的大腦並不總是靠譜。
多重簽名
多重簽名是一個不錯的選擇,它的優勢是當你需要提取超過限制的金額時,需要多把私鑰同時授權,同時提升防盜,防丟的安全性。
在以太坊官方錢包中,你可以在 Wallet Contracts 下方中選擇 Add Wallet Contract,前提是你用來建立 Wallet Contract 的 account 有不少於 0.02 ETH,足以支付交易所需的費用。
當你選擇 MULTISIGNATURE WALLET CONTRACT ,將會看到如下提示:
“This is a joint account controlled by X owners. You can send up to Y ether per day. Any transaction over that daily limit requires the confirmation of Z owners.”
X 代表此錢包合約由多少賬戶控制
Y 代表在單個賬戶授權情況下,每日可提款的上限
Z 代表突破提款上限,需要多少賬戶授權
預設我們採取 X = 3 ,Z =2 的方式,錢包合約由三個賬戶管理,需突破取款上限需要兩個賬戶同時授權。
採取多重簽名的機制後,你可以多處且分離的方式保管你的 keystore 和 password,提升防盜,防丟的安全性。
關於更多多重簽名的詳情可看官方文件: Account Management — Ethereal Homestead 0.1 documentation
結語
不管你用任何方式備份錢包,達到 防盜,防丟,分散風險 的目的即可。
參考:
Account Management — Ethereum Homestead 0.1 documentation
Technical background of version 1 Bitcoin addresses - Bitcoin Wiki
GitHub - bitcoinbook/bitcoinbook: Mastering Bitcoin - Unlocking digital currencies
wallets - What is the recommended way to safely store Ether? - Ethereum Stack Exchange
accounts - How to backup mist wallets? - Ethereal Stack Exchange
security - Is there a way to generate ethereum paper wallets? - Ethereum Stack Exchange
contract design - How can I create a multi signature address on Ethereal? - Ethereal Stack Exchange
Do you need to backup ETH Wallet Contracts? - Support - DAOhub.org
更多區塊鏈數字貨幣資訊:http://www.qukuaiwang.com.cn/news