比特幣對於隨機地址生成攻擊有多安全?
想像一下,攻擊者在最快的 ASIC 農場貨幣上實現了類似以下虛擬碼的東西:
attack(blockchain, my_address) addresses = generate_tree_of_all_nonempty_addresses(blockchain) while true: private_key = generate_random_private_key() public_key = generate_public_key(private_key) address = ripemd160(sha256(public_key)) if is_matched(address, addresses): steal_bitcoins(private_key, public_key, address, my_address)
鑑於 RIPEMD-160 將地址減少到 160 位(二進制形式),並且(IIRC)有超過一百萬個非空地址,是否真的仍然需要很長時間才能找到衝突?我應該可以自己做數學,但我知道你們中的一些人比我更擅長這種事情……
或者換一種說法,與簡單地使用完整的 ECDSA 公鑰長度相比,考慮到更高的衝突風險,決定以比特幣的方式對公鑰進行雜湊處理的決定是否可能在未來變得不明智?
好吧,我破壞了你自己解決問題的樂趣,但我自己解決問題太有趣了,所以不發帖。
為了有盡可能多的目標地址,我們假設每個將存在的聰(21e6 * 100e6 = 2.1e15 或 2.1 萬億)都在不同的地址。讓我們假設有人開發了一個 ASIC,它以與今天的 ASIC 計算 SHA256D 相同的速度,可以生成一個私鑰,計算相應的公鑰和地址,並與所有 2.1 萬億個目標進行核對。(這很荒謬——生成 ECDSA 公鑰比 SHA256 雜湊複雜許多數量級。)假設他們以與今天整個比特幣挖礦網路相同的規模部署了這個 ASIC。
目前的比特幣難度約為 4e10,這意味著整個網路每秒計算 4e10 * 2^32 = 1.7e20 雜湊。假設我們想像中的攻擊者的網路每秒生成 1.7e20 個私鑰。每個私鑰匹配目標地址之一的機率為 2.1e15 / 2^160 = 1.4e-33。因此,攻擊者以每秒 1.7e20 * 1.4e-33 = 2.4e-13 的速度找到匹配項。平均而言,找到一個匹配項需要 1/2.4e-13 = 4.0e12 秒,或大約 130,000 年。
因此,這位在 ASIC 和電力上花費數百萬(如果不是數十億)美元的高度敬業的攻擊者將能夠平均每 13 萬年竊取一個聰。
人們真的必須接受指數函式增長的速度有多快。160 位似乎是非常少量的數據,但 2^160 是一個非常大的數字。