Public-Key
如果沒有散列函式,ECDSA 還能工作嗎?
根據維基百科 ECDSA 主題的演練步驟,如下所示,如果我們不對原始消息應用散列函式(圖中以藍色突出顯示)會產生什麼影響?
雖然這聽起來有點傻,但假設我們有或沒有 SHA256 引擎測試案例,如下所示。
十六進制消息(256 位):“0123456789012345678901234567890123456789012345678901234567890123”
SHA256(256 位)後的十六進制消息:“9674d9e078535b7cec43284387a6ee39956188e735a85452b0050b55341cda56”
如果我繼續執行後續的 ECDSA 簽名流程,誰能解釋第一個 Hex 消息有什麼問題?
假設 Alice 在這種情況下簽署了原始消息?
這裡的真實答案是我不知道。我很確定實際上更好的答案是這是未知的。雜湊僅用於抗碰撞的假設是公然錯誤的,因為通常需要一個隨機預言機來實現這種方案。特別是在 ECDSA 中,即使使用隨機預言機,我們實際上也沒有安全證明,所以情況更糟。然而,鑑於它已經存在了這麼多年,它的安全性本質上是一個被廣泛接受的假設。然而,一旦你改變了一些東西,而不是散列消息肯定會改變一些東西,那麼它就會分崩離析。
如果您所做的唯一更改是刪除散列步驟,那麼事情肯定會分崩離析。使用您在問題中使用的維基百科的描述,這意味著將第一步替換為 $ e := m $ 然後繼續其餘步驟不變。
然後第二步將定義 $ z $ 作為 $ L_n $ 最左邊的位 $ m $ . 因此,任何僅在位不同的消息在右邊比 $ L_n $ 會立即發生碰撞,從而允許進行微不足道的偽造。
如果您進一步修改簽名方案以排除這種類型的偽造,例如通過限制消息長度,則適用 Yehuda 的答案。