WIF 與 legacy address 生成 一般講起來就是公鑰跟私鑰,很好理解,但實作上如前面幾篇說的,蠻多瑣碎的編碼細節。目前這部分算是搞定了,不過就僅止於公私鑰的部分。 主要參考 https://reference.cash/protocol/blockchain/encoding/base58check https://en.bitcoin.it/wiki/Base58Check_encoding http://www.righto.com/2014/02/bitcoins-hard-way-using-raw-bitcoin.html https://bitcoin.stackexchange.com/questions/67795/how-to-generate-scriptpubkey 然後可以用 http://gobittest.appspot.com/Address 來檢查程式正確性 過程筆記如附圖 程式碼方面不管用什麼語言大概都要先把下列函式 / library 先準備起來 - 大整數處理(big integer) - Hexadecimal 顯示 <--> 餵給雜湊跟編碼函式的轉換介面 - Base58 編碼(這邊須注意是否確實採用中本聰選擇的那 58個字元) - SHA-256 - RIPMD-160 - ECDSA(我是用 openssl;這邊格式跟編碼也是另一個瑣碎事) 比想像中的還麻煩得多。不過有了這些函式骨幹接下來要做簽署的部分希望可以順一些。 雖然是已知用火,還是丟上來,看有沒有要一起補課玩玩的。 玩了這一遭 WIF / Legacy Address,當然也就也會想了解一下 CashAddr (以至於 SegWit)的實作。這就且待後話了。 比較有趣的想法跟發現大概是 HD 的機制。如果我想的沒錯,HD 機制用的好,import 的時候都只用 WIF 的話(如果錢包支援),其實一個人一輩子可能只需要背一組助記詞就夠了。 是的我最近在嘗試背助記詞。12個還蠻可以的。24 稍有難度還在努力(可能也因為沒有很認真背)。 補充:Base58 是雙向的,圖裡少了一個箭頭;說一下,就不重發了。 更新:附圖裡對 0x04 的解說或許是片面有誤的,待查證。見 https://noise.cash/post/lrxm2x79
4 comments
一組助記詞用一輩子,跟多個網站用同一個密碼有類似的問題,如果洩露了會危及其他錢包。 派生路徑雖然熵可以到很高,但如果不使用常用路徑,變成要背派生路徑好像也沒有比背助記詞好。
所以就只記在腦裡這樣... 不知道會不會說夢話 XD 路徑的部分嚴謹一些可以用自己熟知的一些規律 不然我覺得用常用路徑也沒什麼問題 我的想法其實就只是把助記詞當冷錢包 絕不進到熱錢包裡 只用 WIF 來啟用熱錢包 註記詞->WIF 的過程也嚴格實體離線操作 當然現在用硬體冷錢包算是可以達到這樣的實體隔絕的效果,但真要說冷錢包跟熱錢包間畢竟還有一條線。錢包本身的保護機制就我了解是沒有區塊鏈的保護強的。 我自己也用硬體冷錢包,也覺得這是最折衷方便的方式,背助記詞就算是一個受啟發的突發奇想吧。
大大好猛啊 我來這邊偷筆記惹XDD
就麻煩你整理了~~ 一起解密 我也只是整理別人的東西而已(成至少我自己看得懂的方式;第三者看不看得懂我還沒考慮到就是了 XD)