创建已生成数字的 RSA 公钥、私钥对

信息安全 密码学 javascript 密钥生成 RSA
2021-08-26 08:08:32

我想知道如何使用正确的语法生成有效的 RSA 密钥对假设我已经以某种方式生成了一个512位密钥的数字,它们是:

e = 00065537

d = 2a3ff2f501835d7d0f7ccad34265525b0c91f800fc252324e4bb5668392ba55a65d812d658b7065725c259a12115918dbdbbea6cead9225a91c3fcc6b43f1cb3

m = 4bb26cf2e1e1cdbbf78f89a60d5af5cf094a7216f9fe2d0e2288dc14e6005e0b6de46dc38f0e92b8b3281e9f1cf87257fb54bff579907e8a3c114133b74cb815

我如何从中生成正确的密钥对?有没有发电机可以自动化?对我来说最好的解决方案是在 javascript 中生成可以在https://www.pidder.com/pidcrypt/?page=demo_rsa-encryption与 pidcrypt 一起工作的密钥对。

1个回答

RSA 密钥对包括以下内容:

  • 模数n,一个大整数,等于两个大素数pq的乘积。
  • 公共指数e
  • 私人指数dd使得当取模p-1以及取模q-1时ed = 1 。
  • 第一个因素p
  • 第二个因素q
  • d p = d mod p-1
  • d q = d mod q-1
  • q' = q -1 mod p

公钥包含ne

私钥包含上面指定的所有值。严格意义上来说,一个简单的 RSA 实现只需要nd,但其他值允许更快的操作,以及“屏蔽”(防止侧通道泄漏),因此RSA 标准定义私钥包含所有值(见附录 A.1)。

从您拥有的值来看,假设您的“m”实际上是 RSA 模数,则可以通过一些努力重新计算其他值(不到一秒钟的 CPU 价值,但比我愿意投入的人力时间更多)。然后,您可以根据所有这些值对符合标准的 RSA 公钥和私钥进行编码;但这需要一些ASN.1的知识。最后,512 位的 RSA 密钥很弱;使用至少 1024 位,最好更多(2048 位应该没问题)。一些 RSA 实现将拒绝使用短于 1024 位的 RSA 密钥。

底线:不要自己生成密钥;使用OpenSSL使用命令行工具:

openssl genrsa -out rsakey.pem 2048

将生成具有所有正确编码的 2048 位 RSA私钥;那么这个:

openssl rsa -in rsakey.pem -pubout

将打印出公钥,再次完成编码。