關於 Harden 和 Normal Key 派生的問題
我正在閱讀 Andreas 的“Mastering Bitcoin”一書的第 5 章中有關 Hardened 和 Normal 子密鑰的內容,以及這個詳細的執行緒和BIP-32。以下是我對這兩個過程的一些理解:
k
: 私鑰 //K
: 公鑰 //i
索引 //c
鏈碼 //H
HMAC 雜湊結果 // 雜湊結果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]
鑑於這三種方法,我有些困惑:
case 1 和 case 2 之間的生成方程的差異非常微妙,因此我們只需要乘以
kchild = (kpar + Hleft) mod n
G 就可以得到 case 2。不過,由於最後有一個因素mod n
,我不知道是不是Kchild
Case 1 將與案例 2 相關。如果沒有,那麼只生成公鑰而不花費發送給它的資金又有什麼意義呢?這與上面的問題無關,而與主私鑰的生成有關:我看過,得到Root種子後,將種子放入HMAC-SHA512函式中得到一個512位的雜湊,前32位其中的字節用作主私鑰。所以我的問題是,由於 HMAC 函式接受 2 個輸入,即
key
和text
,在這種情況下,“關鍵”是什麼?如果沒有“密鑰”,那麼為什麼不只使用 SHA-512 散列函式呢?非常感謝您提前。
儘管如此,由於最後有一個因子 mod n,我無法判斷案例 1 的 Kchild 是否與案例 2 相關。
是的,案例 1 中的子私鑰是案例 2 中派生的公鑰的密鑰。n $ n $ 是生成點的順序G $ G $ 所以它不會影響密鑰的正確性。
由於 HMAC 函式接受 2 個輸入,即鍵和文本,在這種情況下,“鍵”是什麼?如果沒有“密鑰”,那麼為什麼不只使用 SHA-512 散列函式呢?
在種子的特定情況下,密鑰是“比特幣種子”,並用作一種域分離 - 一個唯一的字元串,僅用於此目的。
在 BIP 32 中 HMAC 的其他用途中,關鍵是“鏈碼”,而文本/數據與您在上面的問題中所寫的一樣。此鏈碼確保子密鑰不僅從父密鑰派生,而且還使用一些額外的熵,為了派生子密鑰必須知道這些熵。因此,如果您希望人們能夠派生子密鑰,您可以選擇提供鏈碼,或者將其保密以使其無法獲得。