深入剖析BIP39補充協議

2021-09-14 02:13:28 字數 1965 閱讀 8898

在一般數字貨幣中是使用 256 位的隨機整數作為私鑰的,但是這個記憶起來比較困難,所以為了解決記憶和易用性的問題 bip39 規範提出了一種通過助記詞來推算種子的演算法,來幫助我們的降低使用門檻。

現在已經規範化的助記詞詞典有簡體中文、正體中文、英文、日文、法語、義大利語、韓語、西班牙語上述語言的助記詞都可以生成,但大部分主流錢包做法還是只使用英文。

一般錢包的助記詞個數是 12 或 24 個,但是這個標準也還可以生成 15、18、21 個數的助記詞,甚至是低於 12 個詞也可以。如果開發錢包時為了安全性考慮一般採用 24 個詞,為了相容其他主流錢包或易用性一般採用 12 個詞。低於 12 個詞的話碰撞機率太大、風險太高不建議使用。

生成乙個 128-256 bit 的隨機數,但是這個隨機數的位數必須是 32 的倍數。

將隨機數進行 sha256 然後取前 x 位當做校驗位。具體幾位需要看產生隨機數的位數。( x = 隨機數字數 / 32 )。

將效驗位新增到隨機數後面。

將新增效驗位的隨機數按位分成每 11 位為一組,分成若干組。

那麼每 11 位都可以得到值範圍是 0~2047 的數,根據這些數去查助記詞詞典,就可以得到助記詞了。

助記詞詞典就是乙個 2048 個詞的列表,具體可檢視 英文詞典示例

隨機數字數

校驗位位數

隨機數加校驗位位數

助記詞個數

對助記詞和鹽進行使用 nfkd 進行規範化編碼。( 鹽是 「mnemonic」 + 密碼 )

使用 pbkdf2 演算法獲得 512 位的種子。pbkdf2 使用 hmac-sha512 作為雜湊演算法,並進行 2048 次計算。

前 256 位就是我們的私鑰,至於後 256 位的作用暫時不用知道,我們使用 bip32 的時候才會用到。

去詞典查詞,看看使用者輸入的詞在不在詞典裡。

把所有詞的索引拿出來按順序轉成由位組成二進位制資料然後進行拼接組合。

把二進位制資料再拆分成 隨機數 和 校驗位 ,把隨機數進行 sha256 然後對比校驗位結果是否正確

由於使用了 hmac-sha512 的 pbkdf2 演算法,所以無法由 512 位的種子反向推出助記詞。

助記詞和 128 位的隨機數是可以相互轉換的,但是沒有什麼太大實際意義。

助記詞生成私鑰的時候是可以加入自己的密碼來降低碰撞率以及安全性的,但是國內大部分錢包都不支援這一特性。

在開發中,如果你使用的是第三方的**來生成 12 個詞的助記詞,然後再通過助記詞產生私鑰的時候,助記詞可能會驗證失敗。但是使用 24 個詞的助記詞,驗證就不會失敗。為什麼會這樣的,一般我們在開發中會使用 byte 陣列或 char 陣列可以用來儲存相關的資料,但是乙個 byte 佔空間最小也是乙個位元組(8 位),除了 24 個助記詞的校驗位能佔滿 8 位,其他個個數的助記詞都佔不滿 8 位,很多第三方庫校驗位都是存了1個位元組,可助記詞恢復出來的資料確是丟位的,然後進行校驗也是按照位元組對比,而不是對比每一位,所以會出現驗證失敗的問題。

網上有人說助記詞每乙個詞都是唯一不能重複出現的,但是我們根據具體生成過程發現,詞重複是不可避免的,只不過是小概率事件。

bittribelab

閃電網路北京研發小組王榮強

深入剖析C 繼承機制3

三.訪問與隱藏基類成員 1 訪問基類成員 通過base 關鍵字訪問基類的成員 呼叫基類上已被其他方法重寫的方法。指定建立派生類例項時應呼叫的基類建構函式。基類訪問只能在建構函式 例項方法或例項屬性訪問器中進行。從靜態方法中使用 base 關鍵字是錯誤的。示例 下面程式中基類 person 和派生類 ...

PGA深入剖析

pga pga系統全域性區 program global area 程序全域性區 process global area pga是乙個記憶體區域,該區域包含了一些與某個特定伺服器程序相關的資料和控制資訊,每個程序都有自己的私有pga區,所以這塊區域只能被其所屬程序進入,而不能被其他程序訪問,所以在p...

epoll LT ET 深入剖析

epoll lt et 深入剖析 epoll事件有兩種模型 level triggered lt 水平觸發 socket接收緩衝區不為空 有資料可讀 讀事件一直觸發 socket傳送緩衝區不滿 可以繼續寫入資料 寫事件一直觸發 符合思維習慣,epoll wait返回的事件就是socket的狀態 ed...