Bip32-Hd-Wallets

為什麼 BIP32 不是簡單的 PublicKey 乘法?

  • April 24, 2021

我明白那個:

pubkey(a + b) = pubkey(a).combine(pubkey(b))

whereab是密鑰。(見: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門羅幣區塊鏈上的輸出來建立共享秘密解決了備份問題。這可確保在重新同步區塊鏈時,接收者密鑰足以重新發現共享秘密。這帶來了一些權衡:查找所有收件人密鑰要慢得多(因為必須解析區塊鏈),而不是即使在離線設備上也可以使用本地數據完成的事情,並且每個地址創建都會向區塊鏈添加更多數據。

引用自:https://bitcoin.stackexchange.com/questions/105687