Security

保證賬戶唯一性?

  • May 10, 2018

當我們在乙太坊主網創建賬戶時,協議如何保證賬戶地址的唯一性?因為即使我們沒有連接到網路我們也可以創建一個帳戶,是否有可能兩個帳戶獲得相同的地址?賬戶資訊是否保存在區塊鏈中?

在乙太坊論壇上引用Chris613關於cpp ethereum

  1. 使用隨機數據初始化 256 位私鑰
  2. 秘密被測試為可接受的密鑰,這意味著非零且小於“曲線的順序”,我認為這是一個上限,之後密鑰很弱(歡迎更正)。
  3. 從該密鑰生成一個 512 位的公鑰,並由 secp256k1_ecdsa_pubkey_verify 進行測試。如果沒有更多研究(密鑰類型),我不完全理解此檢查,但我的理解是任何數字都可以是有效的密鑰,並且從中生成公鑰應該始終是可靠的(歡迎更正)。
  4. 公鑰使用 SHA-3 散列

$$ Keccak-256 $$產生一個 256 位的輸出。高 96 位被丟棄,低 160 位成為地址。

因此,由於用於地址的散列算法具有非常多的可能性和非常低的衝突率,因此最終地址應該是唯一的。

由於您無法從其地址中猜出 PK,因此創建與該地址匹配的 PK 將需要在找到匹配項之前嘗試大量 PK 組合。所以這不是暴力破解地址,而是嘗試公鑰然後私鑰最終匹配地址。

眾所周知,今天沒有人成功做到這一點。

一台量子電腦可能可以做到這一點,但能夠進行這種計算的電腦仍然不存在。下一代加密貨幣必須肯定考慮到量子電腦。

編輯:私鑰必須小於曲線的順序,否則由於 EC 組的工作方式,它們將“循環回來”並等於其他人的私鑰。想想一個模擬時鐘:在 13:00,時鐘指向 1。這裡發生的情況類似,但使用的數字要大得多(略低於 2^256)。在時鐘上這很好,因為我們知道是早上還是下午,但是這里相同的私鑰 => 相同的公鑰 => 相同的地址,這意味著如果兩個私鑰相等,則兩者的所有者都可以訪問並形成源自同一個帳戶。

公鑰檢查正在檢查它是否是曲線的有效、合理點。這幾乎只是檢查兩個 256 位數字是否為整數並滿足所有算術正確保持所必需的公式。

雜湊函式在量子密碼學下實際上並沒有被完全破壞,所以地址 -> 公鑰階段仍然可能相當健壯。然而,從人們的公鑰中計算出他們的私鑰是微不足道的,因此下一代加密貨幣確實必須採用量子加密!

引用自:https://ethereum.stackexchange.com/questions/4299