【问题标题】:How are pairs of asymmetric encryption keys generated?如何生成非对称加密密钥对?
【发布时间】:2017-12-04 01:22:49
【问题描述】:

我最近在计算机科学课程中学习了公钥/私钥加密,以及它在数据加密/解密方面的工作原理。我们还介绍了它如何用于数字签名。但是,我们没有详细说明实际密钥是如何自己生成的。

我知道它以一个非常大的数字开头,然后通过某种 keygen 算法传递,该算法返回两个不同的密钥,一个是私有的,另一个是公共的。这些算法是已知的还是黑盒系统?一个用户是否总是有相同的一对密钥链接到他们,或者他们是否在任何时候都改变过?

这似乎是一个非常数学的问题,因为密钥是相互关联的,但其中一个不能从另一个推导出来。

【问题讨论】:

  • 感谢您花时间为您的问题绘制图纸。
  • PK 加密的一般类比是将它们视为至少分两步计算的数学恒等式。对于 RSA,使用带有指数的身份...加密应用一步(求幂),解密(也是求幂)完成身份以达到等于“1”的指数...将消息返回给它原始状态。对于 EC ElGamal,它是相同的概念,但在循环组上使用组运算符:加密在循环中以某种方式发送消息,而解密将其推向其余的方式以完成 1 个循环。

标签: encryption cryptography public-key-encryption private-key key-generator


【解决方案1】:

我知道它以一个非常大的数字开头,然后通过某种 keygen 算法传递,该算法返回两个不同的密钥,一个是私有的,另一个是公共的。

嗯,这并不完全正确。大多数非对称算法当然是基于大数的,但这不是必需的。例如,有一些基于散列的算法,而散列是基于位/字节,而不是数字。

但是是的,对于非对称算法,通常包含一个特定的算法来执行密钥对生成。例如,非对称加密由三元组GenEncDec 组成,其中Gen 代表密钥对生成。而密钥对当然是由公有部分和私有部分组成。

RSA 基本上从生成两个大的随机素数开始,它不一定以单个数字开头。

这些算法是已知的还是黑盒系统?

它们是已知的,它们是系统安全的基础。您不能只使用任何数字来执行,例如 RSA。请注意,对于 RSA,可能有不同的算法和配置;并非每个系统都会使用相同的Gen

一个用户是否总是有相同的一对密钥链接到他们,或者他们在任何时候都改变过?

这取决于系统的密钥管理。通常有一些刷新或重新生成密钥的方法。例如 X.509 证书往往有一个结束日期(到期日期或到期日期),因此您甚至不能永远使用相应的私钥;您必须不时刷新证书和密钥。

这似乎是一个非常数学的问题,因为密钥是相互关联的,但其中一个不能从另一个推导出来。

这通常是不正确的。公钥通常很容易从私钥导出。对于 RSA,公共指数可能未知,但通常设置为固定数字 (65537)。这与模数(也是私钥的一部分)一起构成公钥。对于椭圆曲线密钥,首先生成一个私有随机值,然后直接从中派生公钥。

当然,您永远不能从公钥中导出私钥;这是没有意义的——如果可以的话,它不会很私密。

【讨论】:

    【解决方案2】:

    RSA 中生成的两个数字pq 是大小差不多的非常大的素数,用于计算N,它使用modulo arithmetic 派生公钥/私钥。

    下面的answer in crypto.stackexchange.com 更详细地描述了我们如何从一个随机(大)数开始,并使用Fermat testMiller-Rabin tests 得到一个很可能是素数的数。

    【讨论】:

    • 这个答案是 RSA 特有的,在你的答案中可能值得注意。
    • @LukePark 我不熟悉任何其他使用可能会产生歧义的公钥/私钥对的加密算法。
    • 艾尔伽玛?动态搜索广告?严格来说,DH 也有公钥和私钥。有无数算法被认为是公钥和私钥算法。您应该在回答中说明您是在专门谈论 RSA,因为 OP 通常询问的是 PKC。
    猜你喜欢
    • 2023-03-13
    • 2010-10-30
    • 1970-01-01
    • 2013-06-01
    • 2013-06-23
    • 2021-05-30
    • 2011-01-14
    • 2011-04-20
    • 2015-05-04
    相关资源
    最近更新 更多