我应该使用 public 密钥还是私钥来为 JWKS 端点生成模数和指数?
Should I use a public key or private key to generate modulus and exponent for a JWKS endpoint?
我尝试搜索此问题的答案,但没有找到任何答案。所以,我在问和回答。
我正在尝试实施 JWKS 端点。我找到了一些示例代码 here。请注意,作者对该回购协议的意图只是测试。他很清楚,他对加密的了解还不够多,无法知道它是否真的安全。
示例中私钥用于生成模数和指数:
const forge = require('node-forge')
const NodeRSA = require('node-rsa')
const helperKey = new NodeRSA()
helperKey.importKey(forge.pki.privateKeyToPem(privateKey))
const { n: modulus, e: exponent } = helperKey.exportKey('components')
由于这些值随后 public 可用(通过 JWKS 端点),模数和指数是否可以用于以某种方式获取私钥?我应该使用 public 键来生成模数和指数吗?
TL;DR:您应该使用 public 模数和指数
我尝试使用 public 键生成模数和指数,在 JWKS 端点中使用它们,并且成功了;它验证了 JWT。这是使用 public 键生成模数和指数的样子:
const forge = require('node-forge')
const NodeRSA = require('node-rsa')
const helperKey = new NodeRSA()
helperKey.importKey(forge.pki.publicKeyToPem(publicKey))
const { n: modulus, e: exponent } = helperKey.exportKey('components-public')
由于使用两者进行验证,这让我怀疑使用 public 或私钥时模数和指数相同。我比较了使用两个键生成的模数和指数,它们是相同的。
再仔细研究一下,public 和私钥 share the same modulus. So it makes sense that the modulus is the same in both cases. Also, the impression I get from the node-rsa documentation is that e
is the public exponent. So components
and components-public
will return the same value for e
. Furthermore, this value will always be 65537
because, according to RSA:
The signing algorithm SHOULD use a public exponent of 65537.
因此,结论是 您应该使用 public 模数和指数 。但是,如果您使用 node-rsa,exportKey
将 return 共享模数和 public 指数。
我尝试搜索此问题的答案,但没有找到任何答案。所以,我在问和回答。
我正在尝试实施 JWKS 端点。我找到了一些示例代码 here。请注意,作者对该回购协议的意图只是测试。他很清楚,他对加密的了解还不够多,无法知道它是否真的安全。
示例中私钥用于生成模数和指数:
const forge = require('node-forge')
const NodeRSA = require('node-rsa')
const helperKey = new NodeRSA()
helperKey.importKey(forge.pki.privateKeyToPem(privateKey))
const { n: modulus, e: exponent } = helperKey.exportKey('components')
由于这些值随后 public 可用(通过 JWKS 端点),模数和指数是否可以用于以某种方式获取私钥?我应该使用 public 键来生成模数和指数吗?
TL;DR:您应该使用 public 模数和指数
我尝试使用 public 键生成模数和指数,在 JWKS 端点中使用它们,并且成功了;它验证了 JWT。这是使用 public 键生成模数和指数的样子:
const forge = require('node-forge')
const NodeRSA = require('node-rsa')
const helperKey = new NodeRSA()
helperKey.importKey(forge.pki.publicKeyToPem(publicKey))
const { n: modulus, e: exponent } = helperKey.exportKey('components-public')
由于使用两者进行验证,这让我怀疑使用 public 或私钥时模数和指数相同。我比较了使用两个键生成的模数和指数,它们是相同的。
再仔细研究一下,public 和私钥 share the same modulus. So it makes sense that the modulus is the same in both cases. Also, the impression I get from the node-rsa documentation is that e
is the public exponent. So components
and components-public
will return the same value for e
. Furthermore, this value will always be 65537
because, according to RSA:
The signing algorithm SHOULD use a public exponent of 65537.
因此,结论是 您应该使用 public 模数和指数 。但是,如果您使用 node-rsa,exportKey
将 return 共享模数和 public 指数。