區塊鏈常被比喻是一個分散式的公開帳本,帳本記錄了每個帳戶擁有那些加密貨幣資產,以及交易的紀錄。有幾個名詞會常看到:

 

l   公鑰(Public Key:又稱錢包地址(Wallet Address或是帳戶(Account

就像銀行帳戶,可以擁有加密貨幣資產。把地址告訴別人,對方就能轉帳進來,所以是可以公開的。

 

Pi的公鑰是以“G”開頭的、56個字元的字串。

 

(嚴格講起來,在比特幣中的公鑰與錢包地址是不同的,錢包地址是由公鑰單向推導而來,無法由錢包地址反推回公鑰。但在Pi當中我們就當成是相同的吧。)

 

l   私鑰(Private Key:又稱密鑰(Secret key錢包密碼(Wallet Password

可以想像成銀行帳戶的密碼,有了密碼就可以控制帳戶內的資產,所以千萬不能讓其他人知道

 

私鑰跟公鑰是成對的,私鑰是隨機產生的一串英文和數字,然後透過密碼學演算法從私鑰產生公鑰(但這個過程不可逆,無法由公鑰反推出私鑰)。所以是沒有「改密碼」這件事的,換一個私鑰,表示對應的公鑰也變了,但是可以建立許多對「私鑰+公鑰」的組合。

 

Pi的私鑰也是56個字元,但它以字母“S”開頭。

 

l   助記詞(Mnemonic Phrase:又稱助記碼助憶詞種子短語(seed phrase密語(secret phrase恢復密碼(Recovery Passphrase

因為私鑰實在太難記憶了,為了拯救人類可憐的腦袋,所以BIP39Bitcoin Improvement Proposal: 39)登場了,簡單的說:助記詞 à 種子 à 私鑰 à 公鑰。沒錯,是先有助記詞才推導出私鑰,不是把私鑰轉換成助記詞的格式。

 

助記詞為若干個常見的英文單字(例如Pi24個單字),容易閱讀與記憶,它的重要性等同於私鑰

 

但對於Pi錢包來講,根本就不顯示私鑰給使用者看,只有顯示助記詞(只有Developer App Wallet是用私鑰解鎖與簽署)。所以在Pi的世界中,助記詞常被視為私鑰,就連APP介面也是寫「助記詞(私鑰)」。

 

u  BIP32

區塊鏈是匿名的(KYC之後就難講了),但卻是透明的,一旦有人知道你的錢包地址,就能知道你所有的交易內容。所以你可能會想要有好幾個地址,不同的交易使用不同的地址。但如果要使用不同的地址,就需要不同的私鑰,也就產生了管理的麻煩。

 

BIP32就在這種情況下出現了,它定義了分層確定性錢包(Hierarchical Deterministic Wallets, HD Wallet。概念是用一個隨機的種子(Seed產生第一把私鑰,稱為Master Key,利用Master Key又可以繼續往下一層產生更多子Keys,而子Keys也都可以再往下產生多個孫Keys。其架構如下圖所示:

 

一個系統可以從單一個種子產生一樹狀結構儲存多組keypairs(私鑰和公鑰)。好處是可以方便的備份、轉移到其他相容裝置(因為都只需要種子),以及分層的權限控制等。

 

u  BIP39

即使有了種子可以管理多個私鑰,但仍然不方便記憶,所以BIP39提出使用隨機演算法生成的多個單詞,採用PBKDF2Password-Based Key Derivation Function)方法推導出二進位種子,用生成的種子來推導私鑰。

 

助記詞生成的過程是這樣的:先產生一個128位隨機數,再加上對隨機數做的校驗和4位,得到一個132位的數,然後按每11位做切分,這樣就有了12個二進位數字,然後用每個數去查BIP39定義的單詞表,這樣就得到12個助記詞。也可以用更長的隨機數,就能產生更多助記詞,被暴力解碼的難度就更大,更安全。如Pi就是用256位隨機數產生24個助記詞。

 

助記詞推導出種子:這個過程使用PBKDF2密鑰延伸(Key stretching)函數,來增強弱密鑰的安全性。基本原理是通過一個隨機函數(例如HMAC函數),把助記詞明文和“鹽”作為輸入參數,然後重複進行運算最終產生生成一個更長的(512位)密鑰種子。

 

“鹽”是由字串"mnemonic"及一個可選的密碼組成,可以提高暴力破解的難度,注意使用不同密碼,則延伸函數在使用同一個助記詞的情況下會產生一個不同的種子。

 

 

u  BIP44

因為Master Key底下可以生成出無限多的子密鑰、孫密鑰、...。所以BIP規範了這些分層路徑的定義,也擴展了對多幣種的支援。這裡有完整的幣種列表Pi NetworkCoin type 314159

 

有個觀念要澄清,錢包並沒有真正儲存加密貨幣資產,這些資產是在區塊鏈上,錢包只是提供與區塊鏈互動工具。基本上可以協助使用者管理私鑰的服務,都可以稱作錢包。那管理私鑰大致可分成三種功能:生成私鑰,儲存私鑰,使用私鑰。所以錢包有各種的形式,包含紙錢包(就是把私鑰印在紙上,這也算儲存私鑰)、硬體錢包、軟體錢包、網頁錢包、托管式錢包等等。若錢包能連上區塊鏈網路,就能做為參與區塊鏈網路的入口,比如發起交易、進行資產的轉移。

 

聰明的你有沒有發現一件事?私鑰與公鑰是可以離線生成的,只要在本機執行一個非對稱加密演算法即可,與是否連網無關。而且因為Pi有「最低餘額」的限制,光是有一對密鑰對,並不代表帳戶已經建立,必須由其他帳戶提供資金來建立。

 

最後談談私鑰儲存在手機的安全,這裡的「儲存」並不是指將助記詞截圖或文字儲存在手機,而是當你使用助記詞解鎖錢包後,可以選擇啟用生物辨識功能,以後就能用臉部辨識或指紋辨識來解鎖,因為Pi錢包就將你的助記詞加密後儲存在手機上。

 

這樣安全嗎?大家該有的觀念是,世界上沒有什麼系統是100%安全的,這一切都只是成本考量。使用助記詞也有可能被側錄、被釣魚騙走。也可以參考這篇對 Face ID 的報導。

 

回首頁