隨機密鑰的 MAC 值簽名
是否可以創建這樣的簽名方案: $ \DeclareMathOperator{Gen}{Gen_{\Mac}} \DeclareMathOperator{Mac}{Mac} \DeclareMathOperator{Sign}{Sign} \DeclareMathOperator{F}{F} \DeclareMathOperator{H}{H} $
$$ k_d = \Gen $$ $$ m_d = \Mac(k_d, M) $$ $$ S = \big(k_d, \Sign(K_{priv}, m_d)\big) $$
因此,您將使用隨機密鑰而不是雜湊。
我知道$$ H = \big(k_d, \Mac(k_d, M)\big) $$不一定安全,因為您可以讓對手選擇任何密鑰。但是,在這種情況下,結果也會被簽名。
如果它不安全,有沒有辦法讓它安全?例如,我可以想像 RSA 包含 $ k_d $ 並使用消息恢復來恢復它。或 ECDSA,其中計算額外的雜湊值 $ k_d $ 和 $ m_d $ .
主要目標是通過用可能更快的 MAC(例如 GMAC)替換較慢的雜湊來更快地生成簽名。
是否可以創建這樣的簽名方案:
據我了解,您的建議是簽名由 MAC 密鑰以及消息的簽名 MAC 值組成。
一般來說,這是不安全的,原因有兩個:
- 對於許多 MAC,如果您知道密鑰,不難找到與現有 MAC 具有相同 MAC 的第二條消息。
- 很難找到 MAC 對應特定值的第二個密鑰和消息對,這不是 MAC 假設的一部分。
由於這些屬性而不安全的 MAC 包括 CMAC 和 GMAC。
如果它不安全,有沒有辦法讓它安全?
好吧,如果您將自己限制為 HMAC 或 KMAC,那將是安全的(只要您沒有過度截斷 MAC);但這主要是因為這兩個 MAC 主要是散列(散佈了一些關鍵位),並且簽名散列是安全的。這兩個 MAC 實際上是抗衝突的,即使您選擇了密鑰(這是一個比標準 MAC 安全屬性所假設的更強大的假設)。
另一方面,如果目標是使用更快的 MAC 而不是更慢的雜湊,那麼這個建議會對您有很大幫助。在這種情況下,使用 GMAC 的問題是,如果您知道密鑰,GMAC 實際上並沒有給您任何加密屬性。創建第一個原像(例如)實際上很容易……