為什麼使用 ISO/IEC 9796(帶有消息恢復的簽名)而不是僅使用私鑰加密短消息?
我看過“ISO/IEC 9796-2 和 EMV 簽名的實用密碼分析”並閱讀了非常好的答案https://crypto.stackexchange.com/a/17846/59673我知道簽名和加密是通常不同的算法。為了清楚起見,這裡我只是在談論 RSA。
對於長消息,通常會計算、填充散列,然後用私鑰加密,並與消息一起發送。接收者可以用公鑰解密簽名並與消息上計算的雜湊(重新)進行比較(並驗證填充完整性)。
對於短消息( m < N ),我(仍然)不明白的是需要像 ISO/IEC 9796 這樣的複雜算法。
鑑於加密不是重要因素,而只需要驗證,發送者可以使用私鑰加密整個消息(就像通常對散列所做的那樣)。接收方使用公鑰解密消息,獲取消息並隱式驗證發送方。
顯然,教科書 RSA 會受到存在偽造的影響(格式化消息不會有問題),並且可能會受到乘法偽造的影響。所以必須添加填充,就像在標準 RSA 中一樣。
如果此機制存在安全問題,據我所知,它們與標準簽名完全相同。所以唯一的缺點是沒有公鑰接收者不能得到消息。
編輯:我還閱讀了為什麼在使用 RSA 簽名之前對消息進行雜湊處理?但如前所述,我問的是 m < N 的情況。
那麼,是否有更多的理由不加密原始消息+一些填充?
我將把這個問題當作:在簽署足夠短的消息時,為什麼我們不簡單地將消息放在 RSA 簽名填充中的消息散列位置,例如RSASSA-PKCS1-v1_5或PKCS1v2.2 的 RSASSA-PSS?
附錄中常見的 RSA 確定性簽名 $ M\mapsto M\mathbin|((P(H(M)))^d\bmod N) $ 在哪裡 $ M\mapsto P(H(M)) $ 是從消息空間到的單向函式 $ [0,N) $ , 由可逆注入建構 $ P $ , 和一個雜湊 $ H $ 為單向性。建議將其更改為 $ M\mapsto (P(M))^d\bmod N $ . 這消除了單向性。
**我們沒有一個安全的建設性論點,**應該有足夠的理由不這樣做。更糟糕的是,消失的單向性具有安全作用:防止將 $ x\mapsto x^d\bmod N $ 進入攻擊,通過阻止從 $ x $ 具有合適的算術性質並在正確的子集中 $ [0,N) $ , 發消息 $ M $ 和 $ P(H(M))=x $ 允許利用所述屬性。
對於某些 padding shemes,去除單向性足以允許攻擊。考慮 RSASSA-PKCS1-v1_5:我們可以從三個選擇的簽名中獲得一個消息的簽名,這是一個中斷。
修改後,簽名 $ m $ -字節消息 $ M $ 使用私鑰 $ (N,d) $ 和 $ n $ -少量 $ N $ 是,按照 big-endian 約定將雙字元串同化為整數
$$ \begin{align} \mathcal S(M)&=(\mathtt{00,01,FF\dots FF,00,XX\dots XX}\mathbin|M)^d\bmod N\ &=(R\cdot2^{8m}+M)^d\bmod N\end{align} $$ 有一些固定的公共整數 $ R\lesssim2^{193} $ , 什麼時候 $ m=\left\lceil\displaystyle\frac n8\right\rceil-26 $ . 例如,考慮消息 $ M $ 的 $ m=230 $ 帶符號的字節 $ n=2048 $ -bit(256 字節)RSA 密鑰。 現在,如果我們找到 4 個不同的 $ m $ 字節消息 $ M_0 $ , $ M_1 $ , $ M_2 $ , $ M_3 $ 和
$$ (R,2^{8m}+M_0),(R,2^{8m}+M_1)=(R,2^{8m}+M_2),(R,2^{8m}+M_3)\tag{1}\label{eq1} $$ 然後它遵循 $ \mathcal S(M_0),\mathcal S(M_1)\equiv\mathcal S(M_2),\mathcal S(M_3)\pmod N $ , 因此 $$ \mathcal S(M_0)=\mathcal S(M_1)^{-1},\mathcal S(M_2),\mathcal S(M_3)\bmod N $$ 這很容易計算 $ N $ 和簽名 $ \mathcal S(M_1) $ , $ \mathcal S(M_2) $ , $ \mathcal S(M_3) $ . 我們可以採取
$$ \begin{align} M_0&=R,((2^{4m+i}+a),(2^{4m-i}+b)-2^{8m})\ M_1&=R,((2^{4m+i}+c),(2^{4m-i}+d)-2^{8m})\ M_2&=R,((2^{4m+i}+a),(2^{4m-i}+d)-2^{8m})\\ M_3&=R,((2^{4m+i}+c),(2^{4m-i}+b)-2^{8m})\ \end{align} $$ 確保 $ \eqref{eq1} $ 持有;並且適當小 $ i $ , $ |a| $ , $ |b| $ , $ |c| $ , $ |d| $ 以便 $ 0\le M_j<2^{8m} $ . 例如, $ i=0 $ , $ a=b=1 $ , $ c=2 $ , $ d=3 $ 會做。 使用那一大類消息,我們可以很容易地獲得 $ s $ 來自的虛假簽名 $ s+3 $ 所選消息的簽名。或者/並且,由於消息的選擇有相當大的自由度,我們可以將一些應用程序強加的字節串強製到消息的某些部分,使理論攻擊更接近實踐。還有更多類別的消息允許其他攻擊。