可以使用JSBN/Forge生成RSA私钥/公钥对吗?
问题描述:
查看JSBN,RSAGenerate(B,E)
以位长B
和公钥E
作为参数。这是否意味着公钥只能单独生成并作为参数提供?这是否也意味着Forge不能像BigInt那样生成密钥对http://www.leemon.com/crypto/BigInt.html?可以使用JSBN/Forge生成RSA私钥/公钥对吗?
感谢
答
RSAGenerate
不采取公开密钥,但在十六进制公钥指数。请注意,您必须仔细选择它,因为它必须与φ(n)互反。为了与其他实现兼容,一个很好的值是10001
(十六进制)。
公钥可从所述私钥通过设置Ñ和Ë创建:
var pubkey = new RSAKey();
pubkey.n = privKey.n;
pubkey.e = privKey.e;
的forge docs包含三个不同的例子的RSA密钥对如何与相同的公共指数所产生以上:
// generate an RSA key pair synchronously
var keypair = rsa.generateKeyPair({bits: 2048, e: 0x10001});
// generate an RSA key pair asynchronously (uses web workers if available)
// use workers: -1 to run a fast core estimator to optimize # of workers
rsa.generateKeyPair({bits: 2048, workers: 2}, function(err, keypair) {
// keypair.privateKey, keypair.publicKey
});
// generate an RSA key pair in steps that attempt to run for a specified period
// of time on the main JS thread
var state = rsa.createKeyPairGenerationState(2048, 0x10001);
var step = function() {
// run for 100 ms
if(!rsa.stepKeyPairGenerationState(state, 100)) {
setTimeout(step, 1);
}
else {
// done, turn off progress indicator, use state.keys
}
};
// turn on progress indicator, schedule generation to run
setTimeout(step);
但是用户必须仔细选择'E'吗?库不生成* n * s.t. 'E'与φ(* n *)互质? – Kar 2014-12-13 09:32:35
是的,用户必须选择它,但为了与其他实现兼容,通常将其设置为0x10001。 – 2014-12-13 09:36:00
我明白了。那么坚持到0x10001是否安全? – Kar 2014-12-13 10:02:18