【问题标题】:Why does a .key file include P,Q,DP,DQ为什么 .key 文件包含 P,Q,DP,DQ
【发布时间】:2014-10-16 07:19:30
【问题描述】:

通过加载包含 RSA 私钥的预先创建的 .key 文件,我注意到它包含以下数字:

Modulus     (private modulus)
Exponent    (private exponent)
P           (prime exponent)
Q           (prime exponent)
DP
DQ
InverseQ

我将密钥文件保存在某个地方,存储空间非常小(便携式)。我虽然只保存模数和指数。我知道 P、Q 和 E 是创建模数和指数所必需的,但是:

问题:

当 PrivateModulus 和 PrivateExponent 足以签署解密消息时,将所有这些数据保存到 .key 文件的目的是什么?

【问题讨论】:

    标签: encryption rsa digital-signature


    【解决方案1】:

    嗯,您需要 公钥 ModulusExponent 进行加密,私钥 ModulusD 进行解密和签名。

    PQ 可能只是为了安全而添加到那里,因为没有有效的方法可以从其他给定值重建它们。因此,如果您的 D 被损坏,您可以重建它,或者如果特殊实现可能需要它们进行一些数学技巧来优化计算。

    DPDQInverseQ 的值被一些实现使用 中国剩余定理 计算 RSA 以加快整个过程.

    DP       = D mod (P - 1)
    DQ       = D mod (Q - 1)
    InverseQ = Q^-1 mod (P - 1)
    

    有关其工作原理的更多信息,最好查看此 crpypto.stackexchange-questionWikipedia-article

    【讨论】:

    • 所以如果存储是问题并且私钥的备份肯定存在,我可以安全地只使用私钥指数d,公钥指数e和模数n(两者相同)并牺牲计算速度。 您是否知道,在 Java 中,getPrimeP() 在 Java 中返回什么? getPrimeExponentP() 和 getPrimeP() 不是相同的值。
    • (我假设你在谈论RSAPrivateCrtKeygetPrimeP() 返回PgetPrimeExponentP() 返回DP。是的,您可以从技术上删除它们,但它不再是有效的 PKCS1 私钥 Crt(因为缺少某些值)。
    • 这里似乎有一个小小的误解:PQ 不是Modulus指数,而是质因数。我也在你的问题中更正了这一点。
    • 感谢您的澄清。我现在知道我需要使用 RSA 本质上是模数 n、私有指数 D 和公共指数 E。java getPrimeP()getPrimeExponentP() 中的方法名称让我感到困惑,因为它们最后都有 P 和 Eclipse描述没有澄清它们。
    • 也感谢您向我解释为什么关键文件中存在冗余信息(更快的计算和重新创建指数的方法)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-06
    相关资源
    最近更新 更多