4

Pub Key交換を行うためにNodeでCrypto libを使用しています。これまでのところ.getDiffieHellman('modp5')、新しい接続ごとに新しい公開/秘密鍵を生成するだけでした。この方法論は、AES 暗号化で使用するシークレットを計算するのに最適です。

ただし、秘密鍵をファイルに保存して、次回の実行時にロードできるようにしたいと考えています。これを行う方法は.getPrivateKey()and thenのようですが、によって生成されたクラスで.setPrivateKey()使用すると機能しません。これは実際にドキュメントに記載されています:.setPrivateKey()crypto.createDiffieHellman.getDiffieHellman('modp5')

返されるオブジェクトは、上記の crypto.createDiffieHellman() によって作成されたオブジェクトのインターフェースを模倣しますが、キーを変更することはできません (たとえば、diffieHellman.setPublicKey() を使用)。

次のコードを使用して秘密鍵を生成した場合、これを知っています。

var crypto = require('crypto');
var Key = crypto.getDiffieHellman('modp5');
Key.generateKeys();
var PrvKey = Key.getPrivateKey();
save_to_file(PrvKey);

後日、同じ秘密鍵をロードするにはどうすればよいですか?

var crypto = require('crypto');
var PrvKey = load_from_file();
var Key = crypto.createDiffieHellman(prime, [encoding]);
Key.setPrivateKey( PrvKey )

暗号ドキュメントで指定されているRFC2412を調べたところ、グループ 5 の素数が次のようにリストされていることがわかりました。

2^1536 - 2^1472 - 1 + 2^64 * { [2^1406 パイ] + 741804}

241031242692103258855207602219756607485695054850245994265411 694195810883168261222889009385826134161467322714147790401219 650364895705058263194273070680500922306273474534107340669624 601458936165977404102716924945320037872943417032584377865919 814376319377685986952408894019557734611984354530154704374720 774996976375008430892633929555996888245787241299381012913029 4592999947926365264059284647209730384947211681434464714​​43848 8520940127459844288859336526896320919633919

FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1 29024E088A67CC74020BBEA63B139B22514A08798E3404DD EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245 E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F 83655D23DCA3AD961C62F356208552BB9ED529077096966D 670C354E4ABC9804F1746C08CA237327FFFFFFFFFFFFFFFF

この素数を に入れてみました.createDiffieHellman(prime, [encoding])。ただし、その後、.setPrivateKey()キーの長さが正しくないという苦情がありました。

任意の洞察をいただければ幸いです。

4

0 に答える 0