Rsa

RSA:當您只有 N、E、D、P、Q 時,是否值得計算缺失的 CRT 參數?

  • July 18, 2022

OpenPGP 以不同於 PKCS #1 的方式定義 RSA 密鑰,具有上述值加上U = P^-1 mod Q. 然而,OpenSSL 似乎只適用於(N, E, D)(N, E, D, P, Q, dP, dQ, qInv)最後三個應滿足以下條件(從 PKCS #1 開始):

e * dP == 1 (mod (p-1))
e * dQ == 1 (mod (q-1))
q * qInv == 1 (mod p)

**問題:**從性能的角度來看,什麼會更快:只使用 (N, E, D) 進行密鑰操作,或者計算缺失的dP,dQqInv

從性能的角度來看,什麼會更快:只使用 (N, E, D) 進行密鑰操作,或者計算缺失的dP,dQqInv?

任何類型的性能問題總是特定於平台的,但是在這種情況下,計算 dP、dQ、qInv(然後使用 CRT 優化)似乎可以讓私有操作執行得更快(即使您需要執行私人操作只有一次)。

CRT 優化使 RSA 操作本身的速度提高了大約 4 倍;而不是進行 2048 位模冪運算(涉及 2048 位模數上的大約 2100 個模倍數),您進行兩個 1024 位模冪運算(涉及 1024 位模數上的大約 1050 個模數) - 模乘數大致相同,只有一個只有一半大的模數,如果你使用標準 $ O(n^2) $ 模乘常式,這是一個 4 倍的加速。開頭有最初的“mod p,mod q”操作,最後有一些修復操作,這些操作相對便宜。

現在,讓我們檢查計算成本 dP、dQ、qInv;dP 和 dQ 很便宜( $ dP = d \bmod p-1, dQ = d \bmod q-1 $ ),因此這些成本可以忽略不計。

計算 $ qInv = q^{-1} \bmod p $ 有點貴,計算它的一種方法是使用身份 $ q^{-1} \bmod p = q^{p-2} \bmod p $ (這是真的,因為 $ p $ 是素數);如果我們要使用該算法,那就是另一個大約 1050 模乘以 1024 位模數。

因此,這兩種方法的總費用(忽略僅執行一次或兩次的各種廉價操作)大約是 2100 模乘以 2048 位模數(對於僅使用 $ N, D $ )與大約 3150 模乘以各種 1024 位模數(用於“重建 CRT 參數並使用它們”算法);後者似乎很可能會更快(即使您使用比二次模乘算法更快的算法)。


重讀你的問題:我看到你有 $ U = p^{-1} \bmod q $ ; 這實際上是 qinv (交換 $ p $ 和 $ q $ ,它們是對稱的,所以哪個無關緊要)-您需要做的就是計算 $ dP $ 和 $ dQ $ (只要記住交換你告訴 OpenSSL 的那個是 $ dP $ 哪個是 $ dQ $ ),你很高興去。

因此,我的答案比我最初想像的還要正確。

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