簡單地說,私鑰就是壹個256位的隨機數。這個隨機數的產生是錢包功能之壹。也就是說,錢包內置了密碼級別的隨機數產生器,保證產生的隨機數是沒有規律可循的,也就是說不易破解的。註意錢包是在用戶終端運行的,產生的私鑰就保存在用戶終端,不會也不應該上傳給錢包公司。這壹點非常重要。大家盡量要使用開源的,被公開考驗過的錢包軟件,保證安全。
進壹步說,現在的絕大多數錢包都是確定性錢包,它首先產生壹個根私鑰,而後根據這個根私鑰可以產生無數的派生私鑰,我們的錢包地址就是這些派生私鑰所對應的公鑰經過運算得到的地址。算法是固定的,因此地址也就是固定的。那麽,這裏,最重要的就是根私鑰了。因為有了根私鑰,根據固定的算法,就可以求出派生私鑰,壹切都可以簡單地計算出來。
這裏註意,根私鑰不壹定要是256位的。可以是128位,或196位或其他位數,只要強度足夠大(壹般要求至少128位)就行,而由其計算出來的派生私鑰則壹定是256位的。
根私鑰與助記詞是壹壹對應的關系。也就是說壹個根私鑰就對應壹組助記詞,壹組助記詞也對應壹個根私鑰。兩者可以簡單運算出來。
根私鑰與助記詞之間的對應關系可以查看 BIP39 (BIP的意思是比特幣的改進建議,BIP39是正式發布的第39號建議)。BIP39是壹部字典,這個字典有各種語言版本,我們最感興趣的就是中文版了。當然還有英文,韓文,德文,法文,日文等等。這個字典什麽樣呢?很簡單,每本字典都是壹個模子,都包含2048個常用字(比如中文版)或單詞(比如英文版),不多不少,就是2048個。每個字都有壹個編號,從0到2047,就這麽多。其他啥也沒有。
那麽這個字典表示什麽呢?就是表示壹個對應關系,也就是說通過字可以查編號,或者通過編號可以查到字。
好了,學過計算機或者了解2進制的朋友,當然知道2048(0~2047)意味著什麽,很簡單,就是2的11次方,也就是說11位2進制數可以表示0到2047。其實這就是助記詞和根私鑰的關系。
也就是說每壹個字表示壹個11位2進制數,或者說壹個11位2進制數通過查字典就知道它表示哪個字。舉個例子來說,我們產生了壹個128位的根私鑰,這樣從頭開始,每11位11位地分開,這樣我們就有了11個11位二進制碼,還剩下7位,咋辦?好辦。把最後7位也湊成11位就行了,差4位就補上。這4位正好可以為128為做校驗來保證正確性。整個過程是這樣:
那助記詞回推私鑰也就簡單了,這樣:
更多細節可以參看我的文章:
數字貨幣入門 之 錢包原理及錢包安全