攻擊忽略填充的 RSA 簽名驗證
我正在查看一個存在明顯缺陷的 RSA 簽名驗證,我想知道是否有辦法在實踐中利用該缺陷。
使用帶有 PKCS 1.5 填充的 RSA 生成簽名,即 $ S = M^d \mod N $ , 在哪裡 $ M $ 是一個填充消息: $ M = 00 | 01 | FFF … F|00|m $ 和 $ m $ 是被簽名的原始消息,它始終是一個 64 字元的偽隨機 ASCII 十六進製字元串(它是一個雜湊值)。
但是,在驗證簽名時,不檢查 padding。驗證是通過計算完成的 $ M = S^e \mod N $ ,將 M 轉換為字節數組,然後簡單地查找子字元串 $ m $ 在 $ M $ .
模數 $ N $ 是 2048 位和公共指數 $ e = 65537 $ .
攻擊者可以獲得有限數量的有效簽名(填充消息),但無法直接控制什麼 $ m $ 將被簽名(這是一個基於時間的雜湊值)。
你有沒有看到任何方法來偽造攻擊者選擇的簽名 $ m $ 這樣它就會被這個有缺陷的驗證程序所接受?
謝謝!
如果你正在使用 $ e=3 $ ,然後有一個眾所周知的 Bleichenbacher 攻擊,可以生成通過驗證的簽名。此攻擊從未發布,但在此處進行了描述。請注意,這種攻擊出現在Kindle(和某些版本的 Android)中的一個真實漏洞中。
在任何情況下,攻擊都不起作用 $ e=65536 $ . 但是,如果您的問題是是否可以使用它,那麼它肯定不是. 的存在 $ e=3 $ 攻擊應該足以說服你。另一方面,如果您的問題對於發現攻擊具有建設性,那麼我不知道 - 但這是一個很好的研究問題。
存在針對具有恆定填充的 RSA 簽名的多項式時間攻擊。所以,這實際上並沒有利用對填充的缺失檢查。它使用索引演算
我在本系列中知道的最新論文是http://www.dtc.umn.edu/~odlyzko/doc/index.calculation.rsa.pdf
但您可能也對這篇論文感興趣:https ://www.iacr.org/archive/crypto2001/21390431.pdf ,因為它完全著眼於固定填充的問題。