Key-Derivation

關於 Harden 和 Normal Key 派生的問題

  • March 6, 2022

我正在閱讀 Andreas 的“Mastering Bitcoin”一書的第 5 章中有關 Hardened 和 Normal 子密鑰的內容,以及這個詳細的執行緒BIP-32。以下是我對這兩個過程的一些理解:

k: 私鑰 // K: 公鑰 //i索引 //c鏈碼 // HHMAC 雜湊結果 // 雜湊結果 Hleft的前 32 位。//n橢圓曲線的順序。//G橢圓曲線的起點

普通密鑰派生

案例 1:parPrivkey -> childPrivkey(然後是 childPubkey)

H = HMAC(cpar, Kpar || ichild) 
=> kchild = (kpar + Hleft) mod n
=> Kchild = G*kchild = G*[ (kpar + Hleft) mod n)]

案例 2:parPubkey -> childPubkey

H = HMAC(cpar, Kpar || ichild)
=> Kchild = G*Hleft + Kpar

強化密鑰派生`

案例 3:parPrivkey -> childPrivkey(以及來自那個 childPubkey)

H = HMAC(cpar, kpar || ichild)
=> kchild = (kpar + Hleft) mod n
=> Kchild = G*kchild = G*[ (kpar + Hleft) mod n]

鑑於這三種方法,我有些困惑:

  1. case 1 和 case 2 之間的生成方程的差異非常微妙,因此我們只需要乘以kchild = (kpar + Hleft) mod nG 就可以得到 case 2。不過,由於最後有一個因素mod n,我不知道是不是KchildCase 1 將與案例 2 相關。如果沒有,那麼只生成公鑰而不花費發送給它的資金又有什麼意義呢?

  2. 這與上面的問題無關,而與主私鑰的生成有關:我看過,得到Root種子後,將種子放入HMAC-SHA512函式中得到一個512位的雜湊,前32位其中的字節用作主私鑰。所以我的問題是,由於 HMAC 函式接受 2 個輸入,即keytext,在這種情況下,“關鍵”是什麼?如果沒有“密鑰”,那麼為什麼不只使用 SHA-512 散列函式呢?

非常感謝您提前。

儘管如此,由於最後有一個因子 mod n,我無法判斷案例 1 的 Kchild 是否與案例 2 相關。

是的,案例 1 中的子私鑰是案例 2 中派生的公鑰的密鑰。n $ n $ 是生成點的順序G $ G $ 所以它不會影響密鑰的正確性。

由於 HMAC 函式接受 2 個輸入,即鍵和文本,在這種情況下,“鍵”是什麼?如果沒有“密鑰”,那麼為什麼不只使用 SHA-512 散列函式呢?

在種子的特定情況下,密鑰是“比特幣種子”,並用作一種域分離 - 一個唯一的字元串,僅用於此目的。

在 BIP 32 中 HMAC 的其他用途中,關鍵是“鏈碼”,而文本/數據與您在上面的問題中所寫的一樣。此鏈碼確保子密鑰不僅從父密鑰派生,而且還使用一些額外的熵,為了派生子密鑰必須知道這些熵。因此,如果您希望人們能夠派生子密鑰,您可以選擇提供鏈碼,或者將其保密以使其無法獲得。

引用自:https://crypto.stackexchange.com/questions/98972