Node 和 React 之间的 Crystals

编程入门 行业动态 更新时间:2024-10-03 14:29:35

<a href=https://www.elefans.com/category/jswz/34/1771450.html style=Node 和 React 之间的 Crystals"/>

Node 和 React 之间的 Crystals

我正在尝试合并 CRYSTALS-KYBER 以从我的服务器到客户端提供端到端加密。我在前端 (React) 和后端 (Node.js) 上独立工作,但在让它们相互通信时创建第二个对称密钥时遇到问题。我们将为每个会话生成一个新密钥。

我已经尽了一切我能想到的方法来找到问题,但还是找不到,如果更有经验的人可以给我指点,告诉我还可以在哪里查看,我将永远感激不已。

任何帮助将非常感激!


水晶-KYBER

这是我想要实现的目标的快速概述,您可以阅读更多。

  1. 在后端创建公钥和私钥
  2. 将公钥发送到前端
  3. 前端创建两个对称密钥中的第一个(ss1),以及该密钥的封装(c)
  4. 前端将封装后的key发送给后端
  5. 后端通过使用原始私钥解锁封装密钥来创建两个对称密钥中的第二个(ss2)
  6. 您现在在客户端和后端拥有两个对称密钥,因此您可以加密和解密数据。

我的问题是什么?

我的问题似乎出现在第 5 阶段,在我将封装密钥 (c) 发送回我的节点服务器后,我尝试使用原始私钥解锁它。它似乎可以工作,并创建一个与 AES-GCM-256 兼容的 32 字节密钥,但不幸的是它与前端的密钥不匹配。


我的代码在哪里?

这是一个删节版本,考虑到我当前正在执行的错误检查,它的数量是合理的。如果有帮助的话,很乐意发布更多内容。

Node.js

const kyber = require('crystals-kyber'); 

...
let pk_sk = await kyber.KeyGen1024()
let pk = pk_sk[0]; // Public key
let sk = pk_sk[1]; // Private key

... send it to the front end

反应

 ... receive the public key (pk) from the frontend

 let c_ss = Kyber1024.Encrypt1024(pk); // Using the public key sent by the server to encrypt the data
 let c = c_ss[0]; // c is the encapsulation of the symmetric key, this is sent to the server to decrypt data after transfer
 let ss1 = c_ss[1]; // ss is the symmetric key, this is used to encrypt the data
    
 ... send it to the backend

Node.js

let c = req.body.c; 
c = JSON.parse(c); // As sent as JSON, screenshots below confirm correct bytes

// PrivateKey is stored awaiting response
// In the screenshots below you can see that is in the correct format before use
let ss2 = kyber.Decrypt1024(c, session.privateKey); 

此时,前端对称密钥 (ss1) 和新后端对称密钥 (ss2) 应该匹配,但它们不匹配。它们都可与 AES-GCM-256 一起使用,并且具有 32 字节的正确长度,但并不相同。


我尝试了什么?

它可以在两个平台上运行,但我很难将两者结合在一起。

前端和后端模块会产生不同的结果吗? 没有

我已经复制了在 React 前端中使用的模块,并用它在后端生成密钥等。如果我使用前端代码生成公钥和私钥,然后按照创建前端对称密钥 (ss1) 和封装 (c)、然后后端对称密钥 (ss2) 的过程...然后一切都匹配并按预期工作,因此模块是交叉兼容的(如预期)。

前端或后端流程是否存在根本性错误? 没有

我创建了前端和后端都成功的测试页面。您可以在下面的屏幕截图中看到后端正在工作,但这是一个前端页面。

当我们从各种 base64 / hex / Uint8Arrays / Buffers / 等转换时是否存在格式问题? 看起来不像……

当我进行测试时以及从前端收到它之后,服务器端代码具有相同格式和长度的封装(c)和私钥(sk)。我已确认这些与前端发送的信息相符。

回答如下:

更多推荐

Node 和 React 之间的 Crystals

本文发布于:2024-05-31 06:46:09,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1771383.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Node   React   Crystals

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!