问题标签 [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 回答
536 浏览

c++ - 使用 Crypto++ 的curve25519 基点乘法

当我们将 的基点乘以curve25519标量数时,会引发异常。

除了这条曲线中的基点,我们如何获取生成器?

0 投票
2 回答
946 浏览

go - 在 Go 中解析使用 openssl 生成的 curve25519 键

使用OpenSSL1.1 或更高版本,我可以生成一个 curve25519 密钥:

这会产生一个形式为的私钥:

我想在 Go 中解析这个密钥文件,并可能使用golang.org/x/crypto/nacl/box使用它。查看crypto/x509文档,我找不到解析curve25519的解析函数。有人有想法吗?

我试过了:

我得到错误unknown public key algorithm

0 投票
0 回答
904 浏览

java - 来自 Scrypt 输出的 Bouncy Castle Curve25519 私钥

我正在尝试实现 ECIES 加密,下面的代码正在工作。

问题是私钥元素“d”。如果我尝试用 scrypt 哈希的输出替换它,私钥无法在 PrivateKey 实例中转换。

我浏览了网络资源https://github.com/bcgit/bc-java/issues/251https://crypto.stackexchange.com/questions/51703/how-to-convert-from-curve25519-33-字节到 32 字节表示https://crypto.stackexchange.com/questions/72134/raw-curve25519-public-key-points

以上资源表明 Curve25519 的 Bouncy Castle 解释私钥的方式与某些 Internet 资源建议的方式不同。在帖子https://crypto.stackexchange.com/questions/51703/how-to-convert-from-curve25519-33-byte-to-32-byte-representation中提到如下。

根据 curve25519 论文,x25519 公钥可以用 32 个字节表示。

我正在使用的 x25519 库(bouncycastle)根据这个标准给了我一个 33 字节的表示。

我对 ECC 很陌生,这些资源让我很困惑,长度之间的差异,编码风格 big vs. little。

我已经通过其 Java 绑定尝试了 libSodium 'crypto_box_easy' 和 'crypto_box_open_easy' 并且一切正常。'crypto_box_seed_keypair' 使用 32 字节的 scrypt 输出来生成用于加密过程的密钥对。

正如我看到的,这里涉及到一些我目前缺乏的数学,或者我看不到转换。

我必须走这条路线 Scrypt 输出 -> 密钥对 -> 用于加密

直接使用来自 BC 的 KeyGenerator 是可行的,但它使用 SecureRandom,但我需要 Scrypt 的输出作为私钥。

问题:

  1. 我非常感谢有人帮助我理解 libSodium 和 Bouncy Castle 方法之间的区别。libSodium 提到它使用 X25519。当我尝试从 32 字节创建 X25519 密钥,但 BC 密码(ECIESwithAES-CBC)然后抱怨它不是 EC 点,来自此资源' https://github.com/bcgit/bc-java/issues/251 '似乎也存在差异(Curve25519 vs X25519)。

  2. 私钥'd',如何解释。我在 Bouncy Castle 文档和测试用例中看到了这些随机值,这仅仅是有效密钥规定范围内的数字吗?在创建 BigInteger 实例之前,会处理这个数字(小端与大端)。我的意思是我的代码示例中“d”的原始值是从其他数字转换而来的?

理解 Curve25519 的不同机制和 BC API 本身之间的斗争,我真的很困惑。

一些对我进一步研究的指导会很有帮助。

0 投票
0 回答
134 浏览

cryptography - 信号协议中Curve25519中的不同基点?

几天以来我一直在研究Curve25519信号协议。我了解到,通常 Curve25519 使用“9”作为基点,但使用的信号基点是 convert_mont(9)。convert_mont(9) 是使用蒙哥马利私钥作为参数生成扭曲爱德华曲线密钥对的函数。这是为什么?

还提到在文档中

我认为这意味着如果 Ed25519 签名是使用 convert_mont() 计算的,那么它等同于 XEd25519 签名。

如果我必须实现 convert_mont() 那么我如何在 libsodium 中进行空气计算操作,因为我对密码学很陌生。

谢谢。

0 投票
1 回答
1943 浏览

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

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

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

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

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

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

0 投票
0 回答
365 浏览

javascript - 我想在java中将我的ed25519密钥对转换为curve25519(类似于js中的ed2curve)

我想问一下是否有任何API支持将ed25519密钥对转换为curve25519密钥对

现在使用ed2curvenode.js,如果你有更好的建议,我会很感激你的建议。

也在寻找一个支持curve25519加密/解密的 API ......(我尝试了 tweetnacl 的 nacl.box 并且不知道 nonce 是什么)

所以这就是我需要的

  • 转换ed25519 to curve25519(加密/解密 aes256key) - JAVA api
  • curve25519加密/解密(充气城堡会这样做吗?) - JAVA,Javascript

我真的很感谢你的帮助。谢谢,祝你有美好的一天!

0 投票
2 回答
1166 浏览

algorithm - How do I sign a curve25519 key in golang?

I am trying to implement the X3DH algorithm from Signal in Go. However, I got stuck on how to sign the Public Signed PreKey.

Per the specifications it is supposed to be an X25519 key. In looking at previous implementations on Github they generated a [32]byte key from the curve25519 package and then converted it to an ed25519 key and then signed it.

However, the packages they used for the conversion are deprecated (github.com/agl/ed25519). Therefore, I either need to be able to convert the keys to ed25519 so I can sign them with the current ed25519 package (golang.org/x/crypto/25519) or implement a sign and verify function for curve25519 keys.

0 投票
1 回答
163 浏览

javascript - 曲线 25519 标量乘法库

我正在将一些后端/sdk 移植到 nodejs/typescript 并且我遇到了一个阻止程序,源代码使用的libsodium函数crypto_scalarmult_curve25519()在 Go 中也具有等价的功能(通过crypto/curve25519ScalarMult))。

自从我在 nodejs/typescript 中寻找类似版本以来已经有一个小时了,我什至尝试了 ; 的 javascript 版本libsodium。这指向我libsodium-wrapper,不幸的是,我正在寻找的功能 ( crypto_scalarmult_curve25519) 丢失且不受支持。crypto库也node-forge没有曲线标量乘法。

javascript/typescript 中是否有任何替代方法?

0 投票
0 回答
879 浏览

node.js - 如何在节点 js 中使用 ECDH 生成曲线 25519 密钥对?

我想用ECDH生成一个Curve25519密钥对用于加密和解密。我正在使用Crypto节点模块来生成密钥对。

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

节点JS

输出:

这是使用bouncycastle的 Java 代码之一

https://github.com/gsasikumar/forwardsecrecy

Java代码的输出:

任何人都可以指导我吗?

0 投票
1 回答
764 浏览

ios - ECC曲线25519钥匙串

我正在尝试使用 iOS 上的 KeyChain 创建 Curve25519 键。我知道 CryptoKit 的存在,不幸的是,它不适用于 iOS 12。有没有办法在 CryptoKit 之前创建 Curve25519 密钥,也许是我在 KeyChain 中生成它时缺少的参数?下面的代码只会生成 P-256 密钥。