小编Gui*_* K.的帖子

Node.js加密模块-ECDH

我正在尝试使用加密模块在Node.js 和使用Web密码API的Web客户端之间完成密钥交换。

到目前为止,我设法将密钥交换处理到在服务器和客户端上导出共享密钥的程度。在服务器端,我使用了“ secp521r1”曲线,在客户端端,使用了名称为“ P-521”的等效曲线。

在客户端上,我收到一个共享密码,该密码的长度为32个字节,我认为这是256位AES-GCM密钥的正确长度。但是在服务器上,我收到一个长度为66个字节的密钥。以下是生成的密钥的两个示例,一个示例以base64编码,另一个示例为字节数组:

Base64 encoded:
Client AES-Key: AJQQpnOjNe2/QQz5T9NmSPFpFgUG/20739EhdjVt//I=
Server AES-Key: AJQQpnOjNe2/QQz5T9NmSPFpFgUG/20739EhdjVt//LYZ+XeuTgkwv7CJFQrqNWxnny8R+VP3nJuk1SUyDJsa7+f

Byte array:
Client AES-Key: 0,249,8,221,38,57,84,243,202,83,90,68,4,41,49,224,69,89,162,74,47,72,134,169,32,3,133,55,109,105,144,249
Server AES-Key: 0,249,8,221,38,57,84,243,202,83,90,68,4,41,49,224,69,89,162,74,47,72,134,169,32,3,133,55,109,105,144,249,66,66,131,19,81,11,27,161,132,7,244,2,191,221,162,169,247,108,128,229,211,217,109,78,5,71,232,252,243,36,214,42,199,175
Run Code Online (Sandbox Code Playgroud)

我认为我在Node.js上配置错误,但是在文档中找不到有关如何正确执行操作的提示。

这是我在Node.js上提取密钥的操作:

var ecdh = crypto.createECDH('secp521r1');
ecdh.generateKeys();

ecdh.getPublicKey('base64'); // passed this to the client

// After I receive the public key of the client
var shared = ecdh.computeSecret(clientPublicKey, 'base64');
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  • 我的假设正确吗,Node.js的密钥不正确?
  • 我该怎么做才能正确提取AES-GCM 256位密钥?
  • 当前输出是什么意思?

任何指导表示赞赏。

javascript elliptic-curve node.js webcrypto-api node-crypto

5
推荐指数
0
解决办法
769
查看次数