Wallet-Security
擴展公鑰如何生成子公鑰而不生成HD錢包中的子私鑰?
根據bitcoin.org上的文件和Mastering Bitcoin一書,你可以通過結合父鏈碼的雜湊輸出左側+父公鑰+索引,使用擴展公鑰在HD錢包中創建子公鑰:
雜湊輸出左側看似隨機的 256 位用作整數值,與父私鑰或父公鑰結合,分別創建子私鑰或子公鑰
我了解此左側輸出如何與父私鑰結合以生成子私鑰,而子私鑰又可用於生成有效的子公鑰。
將雜湊輸出與父公鑰組合生成的子公鑰怎麼可能對應於將相同的雜湊輸出與父私鑰組合生成的子私鑰?
我認為如果不確切知道私鑰是什麼,就不可能生成公鑰。以這種方式單獨生成子私鑰和公鑰(K = k * G)之間的關係如何保持?
經過一番搜尋,我在這裡找到了獲取沒有私鑰的子公鑰的推導:
child_private_key == (parent_private_key + lefthand_hash_output) % G child_public_key == point( (parent_private_key + lefthand_hash_output) % G ) child_public_key == point(child_private_key) == parent_public_key + point(lefthand_hash_output)
就K、k和G而言,其中 prime 表示子節點,h表示左側雜湊輸出:
k' = (k + h) % G K' = point ( (k + h) % G) K' = point (k') K' = K + point(h)
以下是 BIP 32 文件中的具體實現細節
子私鑰和公鑰的關係如何(K = k*G)
(a+b)*G = aG + bG