问题标签 [curve-25519]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
417 浏览

.net-core - 为什么 Curve25519 的参数错误,却能正确计算密钥对?

.NET (Core 3.1) 似乎支持 ECC 中的自定义曲线。所以我定义了Curve25519,并通过以下代码生成了密钥对:

示例输出如下:

然后我想与另一个库/平台交叉检查,即 x-cube-cryptolib/stm32f103c8。给定 ECDiffieHellman 生成的私钥(第 1 行),控制库计算相同的公钥(第 2 行),验证该对(万岁)。

在进入密钥交换阶段之前,我想尝试一下,并更改 Curve25519 的参数,如代码中注释掉的素数。我预计这两个平台会看到错误或计算来自同一私钥的不同公钥。但是不,ECDiffieHellman 总是计算控制库确认的密钥对。我将曲线参数更改为错误、交换或归零,我对每个参数都这样做了,清理并重建了项目,但每次都是一样的。即使我进入密钥交换阶段,ECDiffieHellman 也计算出与控制库相同的共享密钥材料。

为什么 ECDiffieHellman/Curve25519 以某种方式生成与控制库一致的正确密钥对和共享密钥,即使其定义参数错误,似乎忽略了它们?或者这可能是关于 .Net Core 的 ECDH 实现?

0 投票
0 回答
65 浏览

c++ - CryptoPP::ed25519::Verifier 显示与 libsignal 不同的结果

我正在尝试使用 CryptoPP 实现curve25519 验证。我首先尝试了libsignal图书馆,女巫显示了正确的结果。然后我用 CryptoPP 尝试了相同的数据,但显示错误的结果。

这是libsignal用于验证签名的代码:

结果为 1,表示正确。请注意libsignal要求pub_key以字节 0x05(key-type)开头,CryptoPP此处不适用。

使用的代码CryptoPP

它显示0,代码有什么问题?

0 投票
1 回答
166 浏览

go - 如何添加两个curve25519点

我在curve25519上有两个点([32]字节)。我如何添加它们(a + b)。我显然不能使用 big.Int 来做到这一点,因为它们不是数字而是曲线上的点。到目前为止,我还没有找到任何库来做类似于我可以使用edwards25519做的事情:

我已经尝试使用它并使用 将结果转换为蒙哥马利曲线&edwards25519.Point{}.BytesMontgomery(),但我既不能导入也a不能b导入 edwards25519 曲线,因为它们是曲线 25519 上的点。

0 投票
1 回答
283 浏览

java - 在 BouncyCastle BCFKS 密钥库中存储 X25519 密钥对

为了与 执行 Diffie-Hellman 密钥协议Curve25519,我使用 生成以下密钥对BouncyCastle 1.68

使用这个密钥对,我现在可以成功地执行密钥协议:

现在我想将此密钥对安全地存储在 BCFKS 密钥库中以供将来使用,如下所示:

...除了KeyStore.PrivateKeyEntry构造函数需要证书(而不是公钥),并且X25519根据定义不能用于签署证书。(尝试使用它创建签名者自然会失败java.lang.IllegalArgumentException: Unknown signature type requested: X25519

我在这里遗漏了一些明显的东西,还是目前没有简单的方法将X25519密钥对放入BCFKS密钥库?考虑到我真的不需要证书,是否可以应用一种解决方法,只是一种将私钥/公钥存储在密钥库中的方法?

0 投票
1 回答
274 浏览

java - Java 11 Curve25519 实现不像 Signal 的库

在 Java 11 中引入了 curve25519 内置实现。由于我对此一无所知,并且最近才发现它,因此我正在使用Signal 的库。这是我在切换到 Java 11 实现之前的代码:

这是我现在的代码:

显然,第二个实现不起作用,而第一个实现。最初,我认为我做错了什么,所以我阅读了文档并检查了类似的答案,但是,由于我没有发现任何有用的信息,我决定进一步挖掘并尝试检查 Signal 的库和 Java 是否生成相同的公钥给私人的。为此,我写了这个片段:

(Java 实现之后用于计算公钥的代码是从 sun.security.ec.XDHKeyPairGenerator 中提取的)

此方法打印 false,这意味着这两个实现实际上的行为方式不同。在这一点上,我想知道这是一个 Java 错误还是我遗漏了什么。提前致谢。

0 投票
0 回答
69 浏览

swift - 用curve25519加密[String:Any]

我想用curve25519加密我上传到Firebase的数据。

Atm 我将我的自定义模型转换为 [String: Any] 并将其上传到 firebase firestore。现在我想加密数据。我以为我了解公钥/私钥的工作原理,但是当我搜索指南时,他们总是(如果我理解正确的话)使用私钥加密(签名)数据和公钥解密(isValidSignature)数据。

我不明白这一点。我认为你需要公钥来加密数据,所以接收者必须使用私钥来解密数据并读取它。

到目前为止,其他人用来加密我的 Dic 的代码如下所示:

但我不明白公钥在哪里进入代码。我如何使用公钥以便接收者可以用他的私钥解密它?

希望可以有人帮帮我。我真的卡住了,找不到任何可以帮助我的东西。我只会更加困惑。

问候

0 投票
1 回答
229 浏览

java - Bouncy Castle (Java): How to correctly generate a PGP keyring with EC keys?

As such, the following code seems to correctly generate a PGP keyring with EC keys (as in: it can be parsed with Bouncycastle). However, both Thunderbird and GnuPG do have issues with it. Here is the code, which is based on an already working RSA/Elgamal based implementation of mine (I included only the relevant methods for the sake of readability):

So, what do I get here and what are the issues:

  1. When I pick SHA1 as hashing alg. for the master key, GnuPG actually does read the keyring, but the subkey is missing the "E" (encryption) key capability (and also we get the perfectly correct warning about SHA1 being insufficient):
  1. With SHA256, the keyring cannot be parsed at all:

Can anyone spot the issue with the code, so that both GnuPG and Thunderbird will be able to correctly parse the keyring?

0 投票
0 回答
194 浏览

ios - 如何使用 ECDH swift iOS 生成 Curve 25519 密钥对?

我想用 ECDH 生成一个 Curve25519 密钥对用于加密和解密。我正在使用 CryptoKit 生成密钥对。

但是,我未能使用 ECDH 算法生成密钥对。

迅速

输出:

这是使用 bouncycastle 的 Java 代码之一

java代码的输出:

任何人都可以指导我吗?