Bip32-Hd-Wallets
為什麼 BIP32 不是簡單的 PublicKey 乘法?
我明白那個:
pubkey(a + b) = pubkey(a).combine(pubkey(b))
where
a
和b
是密鑰。(見:https ://crypto.stackexchange.com/q/83694/17505 )如果,在這種情況下:
- Bob 想要通過創建交易輸出來支付 Alice,其私鑰只有 Alice 知道,但其公鑰與 Alice 的公鑰不同。
- 愛麗絲發布
pubkey(alice_secret)
.- Bob 創建了一個一次性的隨機密鑰
x_secret
。- 鮑勃發布
x_secret
.下列條件是否成立?
- 只有 Alice 可以使用密鑰簽署消息
(alice_secret + x_secret)
,因為沒有人知道這兩個密鑰。- 任何人都可以使用 驗證此類消息的簽名
pubkey(alice_secret).combine(pubkey(x_secret))
,這pubkey(x_secret)
可以從發布的x_secret
.如果是這樣,為什麼 BIP32 比這更複雜?
BIP32 的目的是為分層確定性 (HD) 密鑰派生提供標準。BIP32 允許使用者備份他們錢包的初始密碼,然後在將來從這個初始備份中重構所有派生地址。
您描述的機製本質上是應用橢圓曲線 Diffie-Hellman (ECDH) 來建立共享秘密。它依賴於外部輸入,因此(如前所述)無法實現此備份功能——每個新地址都需要保留發送者的秘密,以便將來可以恢復該地址。
Monero 的Stealth Addresses使用了類似的方法。AFAIU,門羅幣通過使用
OP_RETURN
門羅幣區塊鏈上的輸出來建立共享秘密解決了備份問題。這可確保在重新同步區塊鏈時,接收者密鑰足以重新發現共享秘密。這帶來了一些權衡:查找所有收件人密鑰要慢得多(因為必須解析區塊鏈),而不是即使在離線設備上也可以使用本地數據完成的事情,並且每個地址創建都會向區塊鏈添加更多數據。