Modular-Arithmetic

將大指數計算分解成更小的計算?

  • August 7, 2018

我正在嵌入式平台上實現 SRP。它具有加密加速功能,我正在使用其內置的模冪函式,但是它似乎無法處理超過 32 個字節長的指數。我需要使用一個 64 字節長的指數。

有沒有辦法把這個冪分解成模冪函式可以處理的更小的冪?

一種方法使用因式分解指數:如果 $ a=bc $ 然後 $ x^a \equiv x^{bc}\equiv (x^b)^c \mod m, $ 即首先計算 $ y=x^b\mod m $ 接著 $ y^c \mod m $ .

如果指數的最大因子最多有 32 個字節,則此方法將起作用。

否則,您始終可以使用平方和乘冪方法(請參閱https://en.wikipedia.org/wiki/Modular_exponentiation>或<https://en.wikipedia.org/wiki/Modular_exponentiationhttps://en.wikipedia .org/wiki/Exponentiation_by_squaring)循環遍歷指數的單個位。

有沒有辦法把這個冪分解成模冪函式可以處理的更小的冪?

就在這裡。通常,人們會使用預計算來執行此操作,以在每次迭代中處理多於一位的指數,但它應該很好地適應您的情況。

特別是我建議您使用應用密碼學手冊 ( PDF ) 中的算法 14.82。我將在此處重新說明此算法以適應您的需求。讓 $ e $ 成為你的指數,讓 $ e_0 $ 是最低有效的 31 個字節和 $ e_1 $ 是下一個更重要的 31 個字節和 $ e_2 $ 是最重要的 2 個字節。進一步讓 $ g $ 成為你的基點/基本元素。假設該組是用中性元素乘法編寫的 $ 1 $ . (這假設您實際上無法有效地計算 $ g^{2^{256}} $ 因為指數取 $ 33 $ 字節來表示)

現在計算

  1. $ A\gets 1 $
  2. $ A\gets A^{2^{248}} $
  3. $ A\gets A\cdot g^{e_2} $
  4. $ A\gets A^{2^{248}} $
  5. $ A\gets A\cdot g^{e_1} $
  6. $ A\gets A^{2^{248}} $
  7. $ A\gets A\cdot g^{e_0} $
  8. 返回 $ A $

使用您的加速引擎執行六個冪運算。

您可能還想探索使用 $ 255 $ 位寬值,看看是否實現了 2 位求冪 $ e_2 $ 在考慮位級編碼可能持有的額外成本的同時,您自己做可能會更便宜。

Side-Channel 注意:如果您的標準元素乘法指數是恆定時間,則此算法應該是恆定時間。

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