使用加密模块从node.js中的Curve25519(或X25519)非对称密钥对生成共享秘密密钥

Darshan Jain

我试图Diffie Hellman密钥交换一样,使用密钥交换算法Curve25519(或X25519)非对称密钥之间创建共享密钥可以使用以下代码中的加密模块在node.js中完成Diffie Hellman密钥交换

const crypto = require('crypto');

// Generate Alice's keys...
const alice = crypto.createDiffieHellman(2048);
const aliceKey = alice.generateKeys(); // Returns public key

// Generate Bob's keys...
const bob = crypto.createDiffieHellman(alice.getPrime(), alice.getGenerator());
const bobKey = bob.generateKeys(); // Returns public key

// Exchange and generate the secret...
const aliceSecret = alice.computeSecret(bobKey);
const bobSecret = bob.computeSecret(aliceKey);

// Should be equal
console.log(aliceSecret === bobSecret)

X25519非对称密钥可以使用以下代码生成

const crypto = require('crypto');
const { publicKey, privateKey } = crypto.generateKeyPairSync('x25519', {
  publicKeyEncoding: {
    type: 'spki',
    format: 'pem'
  },
  privateKeyEncoding: {
    type: 'pkcs8',
    format: 'pem',
  }
});

密钥生成没有任何问题,但是我不知道如何生成共享密钥。我尝试使用以下代码将X25519键转换为Diffie Hellman键:

...
const dhKey= crypto.createDiffieHellman(2048);
// privateKey => Generated in the above code
dhKey.setPrivateKey(privateKey)
// publicKey => Generated in the above code
dhKey.setPublicKey(publicKey)
...

使用上面的代码生成两个dhKey并执行密钥交换时,出现以下错误:

Error: Supplied key is too large

有什么办法可以生成共享机密?提前致谢。

总统詹姆斯·波尔克

不幸的是,此子API的文档有些薄。我拼凑了一个示例,但没有更好的文档,我不确定它是否有用。

const crypto = require('crypto');

const aliceKeyPair = crypto.generateKeyPairSync('x25519');

const alicePubExport = aliceKeyPair.publicKey.export(
    {type: 'spki', format: 'pem'}
    );

const bobKeyPair = crypto.generateKeyPairSync('x25519');

const bobPubExport = bobKeyPair.publicKey.export(
    {type: 'spki', format: 'pem'}
    );

const bobKeyAgree = crypto.diffieHellman({
    publicKey : crypto.createPublicKey(alicePubExport),
    privateKey: bobKeyPair.privateKey
});

const aliceKeyAgree = crypto.diffieHellman({
    publicKey : crypto.createPublicKey(bobPubExport),
    privateKey: aliceKeyPair.privateKey
});

console.log(bobKeyAgree.toString('hex'));
console.log(aliceKeyAgree.toString('hex'));

这缺少身份验证,因此不添加该部分就不安全。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

使用Java创建Node.js加密密钥

来自分类Dev

Node.js-在加密模块中设置填充

来自分类Dev

SSL在使用对称加密密钥时的奇怪行为?

来自分类Dev

如何将AES加密中使用的秘密密钥共享给其他一些解密应用程序?

来自分类Dev

如何使用Blowfish在Node.js中加密密码

来自分类Dev

无法使用密钥对通过Node.js加密验证签名

来自分类Dev

在Laravel中设置加密密钥以注销

来自分类Dev

node.js加密模块无法加密16个以上字符

来自分类Dev

HKDF或PBKDF2用于生成对称加密密钥?(Python密码学)

来自分类Dev

无法使用HMAC在Ruby中生成正确的加密密钥

来自分类Dev

JWT:什么是很好的秘密密钥,以及如何将其存储在Node.js / Express应用程序中?

来自分类Dev

Node.js的使用Java加密密钥创建

来自分类Dev

Node.js的使用Java加密密钥创建

来自分类Dev

使用pkcs11模块使用公共密钥加密数据失败

来自分类Dev

JWT使用非对称加密

来自分类Dev

如何在Node.js堆栈上的Azure Function App中从Azure密钥库提取秘密密钥

来自分类Dev

Node.js:无法使用本机加密模块获取安全的随机数

来自分类Dev

如何导出对称加密密钥?

来自分类Dev

如何使用Blowfish在Node.js中加密密码

来自分类Dev

在模块中生成用于加密的秘密密钥

来自分类Dev

如何在Java中以非对称加密生成密钥对?

来自分类Dev

使用ursa(nodejs模块)生成对称密钥?

来自分类Dev

了解加密密钥

来自分类Dev

使用用户标识生成加密密钥

来自分类Dev

DES加密密钥

来自分类Dev

从钥匙串生成用于AES 256加密的秘密密钥

来自分类Dev

如何使用加密密钥加密消息

来自分类Dev

如果使用非对称密钥加密的消息损坏,会发生什么情况?

来自分类Dev

使用 Node.js 加密生成多对公钥/私钥

Related 相关文章

  1. 1

    使用Java创建Node.js加密密钥

  2. 2

    Node.js-在加密模块中设置填充

  3. 3

    SSL在使用对称加密密钥时的奇怪行为?

  4. 4

    如何将AES加密中使用的秘密密钥共享给其他一些解密应用程序?

  5. 5

    如何使用Blowfish在Node.js中加密密码

  6. 6

    无法使用密钥对通过Node.js加密验证签名

  7. 7

    在Laravel中设置加密密钥以注销

  8. 8

    node.js加密模块无法加密16个以上字符

  9. 9

    HKDF或PBKDF2用于生成对称加密密钥?(Python密码学)

  10. 10

    无法使用HMAC在Ruby中生成正确的加密密钥

  11. 11

    JWT:什么是很好的秘密密钥,以及如何将其存储在Node.js / Express应用程序中?

  12. 12

    Node.js的使用Java加密密钥创建

  13. 13

    Node.js的使用Java加密密钥创建

  14. 14

    使用pkcs11模块使用公共密钥加密数据失败

  15. 15

    JWT使用非对称加密

  16. 16

    如何在Node.js堆栈上的Azure Function App中从Azure密钥库提取秘密密钥

  17. 17

    Node.js:无法使用本机加密模块获取安全的随机数

  18. 18

    如何导出对称加密密钥?

  19. 19

    如何使用Blowfish在Node.js中加密密码

  20. 20

    在模块中生成用于加密的秘密密钥

  21. 21

    如何在Java中以非对称加密生成密钥对?

  22. 22

    使用ursa(nodejs模块)生成对称密钥?

  23. 23

    了解加密密钥

  24. 24

    使用用户标识生成加密密钥

  25. 25

    DES加密密钥

  26. 26

    从钥匙串生成用于AES 256加密的秘密密钥

  27. 27

    如何使用加密密钥加密消息

  28. 28

    如果使用非对称密钥加密的消息损坏,会发生什么情况?

  29. 29

    使用 Node.js 加密生成多对公钥/私钥

热门标签

归档