第二個 EC 私鑰可以從公鑰派生嗎?
我了解公鑰不會公開私鑰。那不是問題。
問題是:給定一個 EC 公鑰,是否可以派生一個不同但合理且實用的私鑰來匹配公鑰?
換句話說:
在基本算術中,如果你知道
a x b = c
,並且你知道任何兩個變數,那麼你可以計算第三個。但是在 ECC 中,我們有一個公鑰q
、一個眾所周知的點G
和一個私人號碼d
。公鑰是通過ECPoint q = CreateBasePointMultiplier().Multiply(parameters.G, d) 從私鑰派生而來的;. 我必須假設Multiply
是一種特殊形式的乘法,這樣知道q
和G
不導致知道d
。也許它本質上是在有限域上循環多次,或者類似的東西。但是可以選擇不同的私鑰來產生相同的公鑰嗎?換句話說,具體來說,讓 Alice 和 Bob 都有 ECDH 密鑰對,並交換公鑰。他們每個人都記住對方的公鑰以供以後驗證。當有人向愛麗絲聲稱“我是鮑勃,這是我的公鑰”時,愛麗絲確認公鑰與她所記得的相符,然後她向他提出質疑,“好的,證明它。這是我(愛麗絲)的公鑰。使用它導出我們的共享密鑰,HMAC 簽署以下質詢。將結果作為質詢響應發回給我。如果你能做到,你必須知道你的私鑰對應於公開的公鑰。Eve 能否擷取 Bob 的公鑰,然後派生一些不同的私鑰來對應它,然後通過說“我是 Bob,這是我的公鑰”來冒充 Bob。即使夏娃沒有鮑勃’其他與 Bob 的公鑰兼容的私鑰?
給定一個 EC 公鑰,是否可以派生一個不同但合理且實用的私鑰來匹配公鑰?
不,一個公鑰將只對應一個私鑰(有一個小例外,我將在下面解釋)。對於橢圓曲線系統,私鑰是整數 $ d $ 介於 1 和 $ q $ (生成點的順序 $ G $ ),而公鑰是最常見的點 $ dG $ , 定義為 $ \underbrace{G + G + … + G}_\text{d copies} $ .
現在,生成器的順序具有這個屬性:小於順序的所有倍數都是不同的。也就是說,如果我們考慮點的序列 $ G, 2G, 3G, 4G, …, (q-1)G, qG $ , 該序列中不會有重複項。這意味著,由於公鑰出現在序列中的某個位置,所以這是唯一的出現;不會有另一個私鑰(小於 $ q $ ) 這也將產生該公鑰。
現在,我提到的小例外:一些橢圓曲線系統不使用全點 $ dG $ 作為公鑰,有時他們只使用 x 座標作為公鑰。
事實證明,在這種情況下,第二個私鑰值會產生相同的公鑰;價值 $ q-d $ . 沒有其他密鑰,第二個密鑰對攻擊者來說毫無用處;恢復該值並不比恢復原始值更容易 $ d $ .