可以使用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); 
+0

但是用户必须仔细选择'E'吗?库不生成* n * s.t. 'E'与φ(* n *)互质? – Kar 2014-12-13 09:32:35

+0

是的,用户必须选择它,但为了与其他实现兼容,通常将其设置为0x10001。 – 2014-12-13 09:36:00

+0

我明白了。那么坚持到0x10001是否安全? – Kar 2014-12-13 10:02:18