Addresses
為什麼將公鑰的最後 20 個字節用作地址?
根據這篇關於如何從公鑰中派生乙太坊地址的文章:
取此公鑰 (Keccak-256) 的最後 40 個字元/20 個字節。或者,換句話說,刪除前 24 個字元/12 個字節。這 40 個字元/20 個字節就是地址。當以 0x 為前綴時,它變為 42 個字元長。
我的問題是為什麼最後 20 個字節(而不是 20 個字節)是任意決定還是有潛在的數學目的?
完整的公鑰在 Ethereum* 中並沒有那麼有用,因為它們沒有任何實際用途。取最後 20 個字節是:
- 啟發式旨在簡化密鑰的管理;也就是說,在大額轉賬中通過電話複製和粘貼、校驗和或確認。
- 搶占式安全機制。散列函式每隔十年左右就會被破壞,因此切割完整的公鑰是一個很好的額外防禦層。中本聰在比特幣中做了同樣的事情,因為地址被雜湊了兩次:SHA-256 和 RIPEMD-160(如果一個被破壞,你仍然有另一個作為盾牌)。
*你可以使用乙太坊來發送消息,但你為什麼要這樣做?它很昂貴,您可以使用 PGP。