HASH160 地址的後量子原像抗性
眾所周知,量子電腦可以使尋找 256 位雜湊衝突變得可行,並且它們可以打破目前在比特幣中使用的橢圓曲線公鑰加密。眾所周知,160 位地址不是抗衝突的,但這對於普通應用程序 (P2PKH) 來說並不是真正的問題。
那些從未公開公鑰的地址呢,它們在休息時會安全嗎?目前 HASH160 地址對原像攻擊具有 160 位的安全性,但 QC 理論上可以將其降低到 80 位,這將處於“危險區域”。
成功的原像攻擊不一定會產生原始公鑰,但在 QC 能夠破解 256 位雜湊原像的情況下,他們也可以輕鬆找到原像攻擊會產生的任何公鑰的私鑰,所以有些某種受限大小的量子原像搜尋會做嗎?
我發現討論這個問題的唯一文獻是Giechaskiel, I., Cremers, C., Rasmussen, KB (2016)中的這個多破損部分。存在被破壞的密碼原語的比特幣安全性。
我們可以設計一個黑盒函式,在 2^80 個單執行緒量子電腦週期內同時破解 P2PKH 和 P2SH(以及 P2WSH 等)地址。假設時鐘速度為 GHz,這將需要大約 1000 萬年。需要注意的重要一點是,將工作拆分並並行執行並不像經典電腦那樣有益,因為它只能提供二次加速(Fluhrer, S., Reassessing Grover’s Algorithm)。換句話說,在 1 年內完成這項工作將需要建造 100 萬億台量子電腦,因為
sqrt(100T) == 10M
. 因此,我們可以說打破 160 位雜湊原像在物理上是可能的,因為 1000 萬年是有限的時間,小於宇宙的年齡。但是,它仍然是不可行的。打破 P2PKH
輸出鎖定腳本模板為:
OP_DUP OP_HASH160 OP_DATA_20 pubkey-hash-20 OP_EQUALVERIFY OP_CHECKSIG
所以用假設的量子電腦破解它需要執行格羅弗的算法來找到一些
x
這樣的hash160(x) == pubkey-hash-20
。一旦我們找到x
,我們就會應用一個更簡單的 Shor 算法來找到密鑰。顯示的密鑰對很可能不是原始密鑰對,但這並不重要,因為腳本的密鑰認證部分對於任何滿足hash160(x)=pubkey-hash-20
.打破 P2SH
輸出鎖定腳本模板為:
OP_HASH160 OP_DATA_20 redeem-script-hash-20 OP_EQUAL
但是,實際的兌換腳本將在針對雜湊進行身份驗證後進行評估,並且它還必須通過驗證。因此,找到任何不會做的隨機
x
,因為它很可能是一個無效的兌換腳本。hash160(x) == redeem-script-hash-20
為了解決這個問題,我們可以對特定模板執行 Grover 搜尋。我們會通過設計一個類似的函式來做到這一點,f(x) = 0x21 || x || 0xac
然後將復合函式破解hash160(f(x))
為我們的黑盒函式。x
定義中附加的原始字節f(x)
將使我們的兌換腳本與付費公鑰 (P2PK) 模板相匹配:
OP_DATA_33 x OP_CHECKSIG
.使用 Grover 的算法,我們會發現
x
滿足hash160(f(x)) = redeem-script-hash-20
,然後我們會應用 Shor 的算法來破解 的密鑰x
。最後,我們可以使用公鑰、簽名和 P2PK 贖回腳本 (redeem-script=f(x)
) 來花費資金。發現的贖回腳本很可能不是原始的贖回腳本,但是這並不重要,因為贖回腳本身份驗證部分對於任何滿足的贖回腳本都會評估為真
hash160(redeem-script)=redeem-script-hash-20
。事後思考/潛在優化
我認為我們可以通過在組合中嵌入公鑰生成作為另一個函式來優化它,所以我們根本不需要 Shor 算法,因為我們會直接找到密鑰:
- 定義一個
g(x)=p
將密鑰映射到公鑰的函式。- 執行 Grover’s on
hash160(f(g(x))) = redeem-script-hash-20
一些匹配
x
將是滿足所有要求的密鑰,然後我們計算g(x)
得到公鑰,然後f(g(x))
得到贖回腳本,這將是可接受的消費方式,因為雜湊將匹配地址的雜湊。