Signature

具有公私鑰的 HMAC

  • March 10, 2019

我需要一種方法來保護我的數據。

除了加密之外,我還需要一種方法來保證完整性和真實性,但我還需要成為唯一能夠理解完整性和真實性的人。

我發現HMAC是實現完整性和真實性的好方法,但它基於我應該在我的軟體中共享的單個密鑰,我不喜歡它。

是否有類似 HMAC 但帶有公私鑰的東西,以便我只能共享一個密鑰?

考慮以下涉及消息認證程式碼(如 HMAC-SHA256)的系統:

  • Alice 生成一個密鑰並與 Bob 共享,並且只與 Bob 共享。
  • Alice 使用密鑰對消息進行身份驗證。
  • Bob 僅在可以使用密鑰驗證消息時才對消息採取行動。

當然,Alice 也可以驗證消息,Bob 也可以偽造消息。事實上,任何擁有密鑰的人都可以驗證偽造消息:密鑰必然賦予兩者同時進行的權力。因此,Alice 無法向第三方提供消息來自 Bob 的加密證明,因為 Alice 可能偽造了該消息;反之亦然。因此,該系統具有“可否認性”,或缺乏第三方可驗證性。

考慮以下涉及數字簽名方案的系統,如 RSASSA-PSS 或 Ed25519:

  • Alice 生成一個密鑰對並與 Bob 共享公鑰,並且只與 Bob 共享。
  • Alice 用她的私鑰簽署了一條消息。
  • Bob 僅在可以使用 Alice 的公鑰驗證消息時才對消息採取行動。

只有 Alice 可以簽署消息;任何擁有公鑰的人都可以驗證它們,但不能對其進行簽名。 您要求只有 Bob能夠驗證消息。公鑰是否可以保密,以便 Bob 可以單獨驗證它們?

簽名安全的標準是自適應選擇消息攻擊EUF-CMA下的存在不可偽造性,這意味著可以向預言機查詢他們選擇的任何消息的簽名的對手仍然不能為他們的任何消息偽造簽名沒有查詢神諭。沒有什麼能阻止 EUF-CMA 簽名方案簡單地在簽名本身中包含公鑰的副本,這樣就不會讓 Alice 的公鑰保密。

一些公鑰密碼系統有一個非標準屬性,稱為密鑰隱私——形式化用於公鑰加密方案,這意味著給定兩個公鑰和一個密文,對手無法分辨密文對應於哪個公鑰。當然,這不會自然地延續到簽名中,因為如果您擁有公鑰和消息,您只需驗證簽名即可。

有一個與匿名簽名方案相關的概念,其中對手提供了兩個公鑰和一個簽名*,但沒有消息*無法分辨出哪個公鑰製作了它,哪些典型的基於 RSA 的簽名方案因德國坦克問題而失敗,令人懊惱澳大利亞公共服務部希望它提供的隱私,但它沒有。像 Ed25519 這樣的標準組中的 Schnorr 類型簽名方案確實傾向於在這個意義上提供匿名性。

還有另一個與密鑰不可區​​分性(免付費牆)相關的概念,對手提供了兩個公鑰和一個簽名預言機,無法判斷公鑰是否具有相同的私鑰,但這是在異國情調的情況下,其中一組很多使用者可以使用各自的私鑰對消息進行簽名,但只有一方可以區分使用者的簽名。

你想要這些中的哪一個?我不知道——我不清楚你想在更高的層次上完成什麼,所以很難給出更具體的建議。

似乎要求一種方法來驗證消息 $ m $ 使用公鑰 $ \mathrm{pubk} $ , 這樣一個私鑰 $ \mathrm{privk} $ 需要進行驗證。

這是不可能的,因為對手知道 $ \mathrm{pubk} $ 可以將該方法應用於她/他選擇的任何消息。更一般地說,沒有秘密/私鑰的公共軟體不能用於驗證數據。

但是,可以進行身份驗證 $ m $ 使用密鑰 $ \mathrm{sk} $ 和公鑰 $ \mathrm{pubk} $ ,因此驗證只能使用 $ \mathrm{sk} $ 和 $ \mathrm{privk} $ . 一種解決方案是計算 HMAC $ m $ 使用 $ \mathrm{sk} $ ,並使用加密結果 $ \mathrm{pubk} $ (例如,根據RSAES-OAEP),產生身份驗證器。驗證破譯該身份驗證器使用 $ \mathrm{privk} $ ,然後驗證 MAC。

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