gpt4 book ai didi

javascript - 使用不同长度的公钥进行 ECDH key 交换?

转载 作者:行者123 更新时间:2023-11-29 19:33:52 25 4
gpt4 key购买 nike

我目前正在研究 ECDH key 交换实现。我为此使用 P-384 曲线。其他曲线也是可能的,但我认为实现应该非常相似。

客户端(Javascript)和服务器(Java)想要找到一个共享的 secret ,因此

1) 服务器创建公钥和私钥。

2) 服务器将公钥发送给客户端。注意:公钥的长度为120 字节

3) 客户端创建私钥和公钥。注意:公钥97字节,私钥48字节。

4) 客户端尝试计算共享 key 。但是,我收到“Bad argument”错误。

在客户端,我使用带有 e2e 包的 Google-Closure-Library。 ( https://code.google.com/p/end-to-end/source/browse/javascript/crypto/e2e#e2e%2Fecc )

为了实现,我查看了 ecdh.js 和 ecdh_test.html 文件。

我在客户端的实现是这样的:

var serverPublicKeyStringAsHex = "3076301006072a8648ce3d020106052b8104....." //*
var serverPublicKey = goog.crypt.hexToByteArray(serverPublicKeyStringAsHex)
var bobKeyPair = e2e.ecc.Protocol.generateKeyPair("P_384");
var bobECDH = new e2e.ecc.Ecdh("P_384");
var bobMessage = bobECDH.bob(serverPublicKey, bobKeyPair['privKey']);

如前所述,我在控制台中收到“错误参数”错误。更详细: Screenshot of the FF-console

我想知道这个错误是不是因为服务器公钥长度错误导致的?如果那是原因,我的实现中可能存在什么问题?我在服务器端使用相同的 EC。

有了这个"public-key-length"我发现的问题是, key 有未压缩和压缩的表示形式。但是,我不认为这可能是我的问题,因为 key 长度(服务器公钥:120 字节,客户端公钥:97 字节)与描述的模式不匹配(字段大小 + 1 与 2* 字段大小+ 1)

感谢您提供的任何帮助,因为我已经在这个问题上花费了很多时间并且不知道接下来可以尝试什么......

*如果知道很重要,那就是完整的公钥:3076301006072a8648ce3d020106052b8104002203620004f87dc79943b20e0f57d61f8b7d02425baa4d1220b8b8c1e3596f5ab49ae6ad2acffad95e5860231821b4aedefe5cf1d0262563cffdc8dbe4f28973ebebf3985ba50c7b275888934dcd607007c288a5afaf196834395983cd7f01c548e5edca0b

最佳答案

你这里有一个 ASN.1 encoded public key (可能与 X9.42 兼容)。我假设 JavaScript 只是期望其中编码的未压缩点。因此,您需要解析 ASN.1 并检索公钥内偏移量 23(十进制)处的未压缩点。

关于javascript - 使用不同长度的公钥进行 ECDH key 交换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26040715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com