BIP32 HD錢包可能的攻擊向量
我一直在閱讀有關 BIP32 HD 錢包及其實現的資訊,並遇到了一些關於洩露的私有子密鑰和已知
xpub
父密鑰的可能已知“攻擊”向量導致發現父私鑰的一些問題。給定 HD 錢包的以下路徑:
m/b/p/c
m
從種子派生的主節點在哪裡,b, p, c
是不同深度的索引節點。想像一下,一個伺服器正在監視並創建來自’s 的接收
c
地址。如果’ 節點的私鑰之一被洩露並且伺服器被黑客入侵,從而向攻擊者透露,攻擊現在可以生成’並且這樣,所有’ 節點的私有和公共地址都可以由攻擊者派生(硬化包括節點)。p``xpub``c``xpub``p``xpriv``c``c
第一個問題:如果
p
是一個硬化節點,攻擊者還能從它xpub
和一個孩子的私鑰中計算出它的私鑰嗎?第二個問題:攻擊者能否從洩露的密鑰和’s計算’s後一路“爬升”深度(計算 parent’s
xpriv
)?在這裡會變硬還是有所作為?p``m``p``xpriv``c``p``xpub``b``p
第三個問題:如果來自 ’s 深度的私鑰
c
被洩露並且攻擊者知道m
’sxpub
,攻擊者可以計算m
‘‘‘‘‘‘‘‘‘‘‘’exploit 是否只允許計算被洩露孩子的直接父母?額外問題:誰能給出在路徑中使用一個或多個硬化節點的實際案例?
第一個問題:如果
p
是一個硬化節點,攻擊者還能從它xpub
和一個孩子的私鑰中計算出它的私鑰嗎?是的。
p
如何生成並不重要。重要的是如何c
生成。第二個問題:攻擊者能否從洩露的密鑰和’s計算’s後一路“爬升”深度(計算 parent’s
xpriv
)?p``m``p``xpriv``c``p``xpub
僅當攻擊者也有and
b
時。派生的一個重要部分是父鏈碼。鏈碼是其中的一部分,如果攻擊者沒有鏈碼,那麼他就無法導出父級的私鑰。m``xpub``xpub
在這裡會變硬
b
還是p
有所作為?如果攻擊者有
b
和m
的鏈碼,是的,強化會有所作為。硬化完全可以防止這種攻擊。但是,強化不允許某人擁有xpub
並且能夠在沒有私鑰的情況下生成密鑰。
c
第三個問題:如果來自’ 深度的私鑰被洩露,並且攻擊者知道m
‘xpub,攻擊者是否可以計算 m 的私鑰,或者該漏洞是否只允許計算洩露孩子的直接父級?該攻擊僅對子密鑰及其直接父擴展公鑰進行。
然而,給定
m
的 xpub 和s 的私鑰,即使它不是的直接父級c
,仍然有可能恢復的私鑰。如果and是使用未硬化的推導推導的,則可以用於推導and的s。從那裡,使用所有這些s,攻擊者可以從那裡向後工作以獲得.m``c``b``p``m``b``p``xpub``xpub``c``m
如果
b
和p
被硬化,那麼這是不可能的。額外問題:誰能給出在路徑中使用一個或多個硬化節點的實際案例?
以 BIP 44 為例。它定義了一個標準的推導路徑
m/44'/0'/0'/i/k
。xpub atm/44'/0'/0'
已發出。但是由於它本身是通過強化派生得到的,如果m
,m/44'
或中m/44'/0'
的任何一個xpub
被洩露,使用者的主密鑰仍然是安全的,因為使用了強化派生。此外,Bitcoin Core 使用強化派生來派生所有密鑰。這是因為它使用 BIP 32 來實現更簡單的備份功能(您可以使用較舊的備份並仍然獲得所有相同的密鑰),而不是用於可審計性。