Signature

如果我想要完整性、身份驗證和不可否認性,數字簽名可以基於 MAC 嗎?

  • May 1, 2020

假設我正在製作這樣的數字簽名:

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}) $ . 這已被長度擴展攻擊一次又一次地證明是錯誤的。

此外,您可以僅依靠簽名來獲得完整性和不可否認性。

最好的,安比索

引用自:https://crypto.stackexchange.com/questions/80330