如果我想要完整性、身份驗證和不可否認性,數字簽名可以基於 MAC 嗎?
假設我正在製作這樣的數字簽名:
hash = hash(message) digital signature = encrypt_with_private_key(hash)
其中私鑰是來自安全公鑰密碼系統的 Alice 的私鑰。
我正在製作這樣的MAC:
MAC = hash(message + some_secret_key)
然後我將這兩個都發送給我的朋友,使用 AES 或其他密碼進行加密。
我覺得我只是在為他創作作品。
我可以簡化這樣的事情嗎?
MAC = hash(message + some_secret_key) digital signature = encrypt_with_private_key(MAC)
請告訴我這樣做的利弊。
首先,在遵循散列簽名範式的數字簽名方案中 $ Enc_{sk}(hash(m)) $ 散列程序對於“適合”消息至關重要 $ m $ 在公鑰方案域中:例如,您不能使用 RSA 加密任何大小的消息。
第二個重點是數字簽名方案對公鑰加密有點封閉:因為我們考慮了一個不可信的通道來傳遞公鑰;另一個相似之處是簽名者希望簽名是可公開驗證的。
因此,當我們使用公鑰加密時,我們不想要的只是假設一個私有/安全通道來交換密鑰;如果您想使用像 mac 方案這樣的加密雜湊,您將需要一個。此外,簽名者必須與想要驗證簽名的每個人交換不同的密鑰。因此,創建不同的 MAC 標籤:因此,這樣的簽名不會是公開可驗證的,而是指定的。
另一個重要的一點是,在選擇加密雜湊時必須小心:HMAC的設計並未考慮碰撞攻擊M. Bellare,NMAC 和 HMAC 的新證明:沒有防碰撞的安全性。所以,如果你沒有防碰撞的 mac 方案,如果對手可以找到另一個怎麼辦? $ tag’i=mac(m_i) $ , 在諮詢多項式後 $ m_i, tag_i, Enc{sk}(tag_i = mac(m_i)) $ ,然後偽造簽名?
順便說一句,不可偽造性是數字簽名方案的基石安全屬性。
最後但並非最不重要的。通過僅使用 mac 方案和共享密鑰,我們沒有不可否認性或身份驗證。如果歌手和驗證者共享一個密鑰,我們如何證明是誰創建了標籤?所以 mac 是不夠的:你還需要一個公鑰方案。
嗯……專業人士……我看不到任何人。對不起。
你似乎遇到了兩個沙坑。
第一個是簽名在某種程度上與使用密鑰的私有/秘密部分而不是公共部分進行加密有關。據我所知,這個假設源於 RSA,這是我所知道的唯一具有這種非常奇怪的特性的非對稱加密方案。
簽名和加密方案是完全分開的。它們有不同的正確性目標和不同的安全要求。
您可以在優秀的“現代密碼學簡介”中查看相應的章節
另一種是MAC可以由 $ \text{hash}(\text{key}\ |\ \text{message}) $ . 這已被長度擴展攻擊一次又一次地證明是錯誤的。
此外,您可以僅依靠簽名來獲得完整性和不可否認性。
最好的,安比索