Rsa

確定性 RSA 盲法

  • June 4, 2020

我在無法訪問熵源的上下文中實現了 RSA 私鑰操作。我想為它添加致盲(消息和指數),以使其抵抗一些側通道攻擊。

(隨後的填充操作確實可以訪問熵源。只有取冪運算不能使用 RNG。)

如果需要,我可以在 RSA 私有操作中執行 PRNG。我的約束是rsa_private必須是確定性的:它的操作只能依賴於它的輸入(消息和私鑰)。

確定性地進行致盲是否明智,即使用由消息和密鑰播種的 PRNG?如果是這樣,它應該通過消息+密鑰還是單獨的密鑰播種?或者致盲需要是不可預測的?

我對 CRT 和直的答案很感興趣 $ m^d $ 實施。

好吧,讓我們首先在一些事情上達成一致:

  • rsa_private操作是需要知道秘密 RSA 密鑰的操作。以下過程之一需要此操作:
  1. RSA 簽名,以可公開驗證的方式確保給定消息的真實性和完整性
  2. RSA解密,解密發送給您的消息,使用您的公鑰加密,
  3. 更罕見的是,它也可能用於加密消息,以便任何知道您的公鑰的人都可以解密它。這個最新的用法是有爭議的,因為它只提供了一個簽名。
  • 在 RSA 中,不同階段需要隨機性:
  1. 使用 RSA-PSS(可證明安全的 RSA 簽名方案)進行簽名時,您需要 PSS 編碼操作中的隨機性。
  2. 使用 RSA-OAEP(可證明安全的 RSA 加密方案)進行加密時,您需要 OAEP 編碼操作中的隨機性。
  3. 在對 RSA 操作執行盲法時,盲法是隨機生成的。

現在,您在詢問如何在沒有熵的情況下生成隨機性,並且您提到了 PRNG、密鑰和 $ m^d $ ,所以我假設您只需要隨機性來進行 RSA 解密,並使其失明。

請注意,它與用於遮罩方案的 PRNG 和用於密鑰生成的 PRNG 所期望的屬性不同。當你屏蔽某些東西時,PRNG 主要需要均勻分佈和其他良好的統計特性。但它不一定需要是加密安全的 PRNG。這是因為所有生成的值都應該是一個秘密,所以你主要需要一個好的初始熵源……這可能與你目前的要求相矛盾。

在我看來,從(部分)密鑰以及消息(通常通過將(部分)密鑰與消息的串聯散列)生成隨機性,為您提供了攻擊者可以使用的種子在不知道您的私鑰的情況下不可能猜測,因此那裡沒有安全風險。

此外,根據定義,私鑰可以被視為良好的熵源,因為它的生成需要良好的熵,而 RSA 方案的安全性關鍵依賴於生成密鑰對時使用的隨機性。

使用(部分)私鑰的方法實際上已經被EdDSA使用,例如確定性地生成一個秘密隨機數,其披露將允許私鑰材料恢復。

現在,你問:

如果是這樣,它應該通過消息+密鑰還是單獨的密鑰播種?或者致盲需要是不可預測的?

正如我試圖解釋的那樣,私鑰可以被認為是一個很好的熵源,但這只是一個一次性的熵源,所以如果你簡單地使用私鑰播種你的 PRNG,並且有一種方法可以重置設備,這樣它就可以使用相同的私鑰再次播種,那麼就有一種方法可以讓每個新的 RSA 操作都使用相同的隨機值進行,這實際上意味著你不能依賴隨機值作為隨機數, 之後總是會生成相同的遮罩 $ x $ 呼叫剛剛播種的 PRNG ……

對此的一種解決方案必須確保您可以依賴計數器並使用與該計數器連接的私鑰的雜湊來為您的 PRNG 播種。

最後,通過添加消息值來獲取更多“偽熵”也不會受到傷害。

固定的隨機性當然很痛,但問題是到什麼程度?

您沒有提到為什麼以及如何執行致盲,但是假設您正在嘗試防止時序功率分析(或此類旁通道)攻擊,並且您正在使用致盲。

現在,這一切都取決於你實際上是如何進行致盲的,如果你通過隨機添加一個簡單的致盲 $ r $ 價值,計算 $ r^e\bmod n $ 然後解密消息 $ m^e=c $ 通過做 $ (r^ec)^d \bmod n $ 並將您的結果乘以 $ r^{-1} \bmod n $ ,那麼你真的想採取不同的 $ r $ 對於每個計算,即使是相同的消息,否則,你會洩露秘密值 $ d $ ,因為攻擊的目標是恢復使用的指數。

現在,如果您有另一種致盲方法,它也使指數失明,它可能會起作用,但在這些方法中,我知道的是使用歐拉定理的致盲方法,與前一種方法相同,但也採用隨機的 $ s $ 價值觀和做事: $ (rc)^{d+s\cdot \phi(n)} \bmod n $ 而是將結果乘以 $ r^{-1} $ ,但請再次注意,如果兩者 $ r $ 和 $ s $ 可以針對給定的消息進行修復 $ m $ ,然後攻擊可以恢復 $ d+s\cdot \phi(n) $ ,這將允許他解密任何東西,因為 $ a^{s\cdot \phi(n)}= (a^s)^{\phi(n)}\equiv 1 \bmod n $ ,根據歐拉定理…所以最後,你真的希望每次計算都有不同的盲注

請注意,依賴計數器意味著如果攻擊者能夠重置該計數器,那麼攻擊者可以導致 PRNG 重複自身,這使我們回到使用固定盲注的問題……但這可能不是問題對你來說,這取決於攻擊者是否應該有權訪問設備。

順便說一句,既然你提到了那些,對這兩種常見的攻擊 $ m^d $ 和 CRT 實現存在,最值得注意的是:

P. Kocher:對 Diffie-Hellman、RSA、DSS 和其他系統實現的定時攻擊。載於:N. Koblitz (ed.): Crypto 1996, Springer, Lecture Notes in Computer Science 1109, Heidelberg 1996, 104–113。

W. Schindler:用中國剩餘定理對 RSA 進行時序攻擊。在:Ç.K. Koç, C. Paar (eds.): Cryptographic Hardware and Embedded Systems — CHES 2000, Springer, Lecture Notes in Computer Science 1965, Berlin 2000, 110–125。

最後,讓我添加一個關於SPADPA等邊通道的詞:如果您使用的是易受攻擊的冪運算算法(例如普通平方和乘法,請參閱本文了解更多資訊),僅使用遮罩無法防止 SPA,它更多地取決於您的求冪算法。如果攻擊者能夠收集到足夠多的相關踪跡,那麼定時攻擊和 DPA 都會起作用,因此只要避免使用固定遮罩,就應該使用遮罩來擊敗它們。

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