问题标签 [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.
c++ - 使用 Crypto++ 的curve25519 基点乘法
当我们将 的基点乘以curve25519
标量数时,会引发异常。
除了这条曲线中的基点,我们如何获取生成器?
go - 在 Go 中解析使用 openssl 生成的 curve25519 键
使用OpenSSL
1.1 或更高版本,我可以生成一个 curve25519 密钥:
这会产生一个形式为的私钥:
我想在 Go 中解析这个密钥文件,并可能使用golang.org/x/crypto/nacl/box使用它。查看crypto/x509文档,我找不到解析curve25519的解析函数。有人有想法吗?
我试过了:
我得到错误unknown public key algorithm
。
java - 来自 Scrypt 输出的 Bouncy Castle Curve25519 私钥
我正在尝试实现 ECIES 加密,下面的代码正在工作。
问题是私钥元素“d”。如果我尝试用 scrypt 哈希的输出替换它,私钥无法在 PrivateKey 实例中转换。
我浏览了网络资源https://github.com/bcgit/bc-java/issues/251,https://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 的输出作为私钥。
问题:
我非常感谢有人帮助我理解 libSodium 和 Bouncy Castle 方法之间的区别。libSodium 提到它使用 X25519。当我尝试从 32 字节创建 X25519 密钥,但 BC 密码(ECIESwithAES-CBC)然后抱怨它不是 EC 点,来自此资源' https://github.com/bcgit/bc-java/issues/251 '似乎也存在差异(Curve25519 vs X25519)。
私钥'd',如何解释。我在 Bouncy Castle 文档和测试用例中看到了这些随机值,这仅仅是有效密钥规定范围内的数字吗?在创建 BigInteger 实例之前,会处理这个数字(小端与大端)。我的意思是我的代码示例中“d”的原始值是从其他数字转换而来的?
理解 Curve25519 的不同机制和 BC API 本身之间的斗争,我真的很困惑。
一些对我进一步研究的指导会很有帮助。
cryptography - 信号协议中Curve25519中的不同基点?
几天以来我一直在研究Curve25519和信号协议。我了解到,通常 Curve25519 使用“9”作为基点,但使用的信号基点是 convert_mont(9)。convert_mont(9) 是使用蒙哥马利私钥作为参数生成扭曲爱德华曲线密钥对的函数。这是为什么?
还提到在文档中
我认为这意味着如果 Ed25519 签名是使用 convert_mont() 计算的,那么它等同于 XEd25519 签名。
如果我必须实现 convert_mont() 那么我如何在 libsodium 中进行空气计算操作,因为我对密码学很陌生。
谢谢。
node.js - 使用加密模块从 node.js 中的 Curve25519(或 X25519)非对称密钥对生成共享密钥
我正在尝试使用密钥交换算法在Curve25519(或 X25519)非对称密钥对之间创建共享密钥,就像Diffie Hellman key exchange一样。Diffie Hellman密钥交换可以在 node.js 中使用以下代码中的加密模块完成:
可以使用以下代码生成X25519 非对称密钥:
生成的密钥没有任何问题,但我不知道如何生成共享密钥。我尝试使用以下代码将 X25519 密钥转换为Diffie Hellman密钥:
在生成两个 dhKey 并执行密钥交换时使用上述代码时,会出现以下错误:
有什么方法可以生成共享秘密?提前致谢。
javascript - 我想在java中将我的ed25519密钥对转换为curve25519(类似于js中的ed2curve)
我想问一下是否有任何API支持将ed25519密钥对转换为curve25519密钥对。
现在使用ed2curve
node.js,如果你有更好的建议,我会很感激你的建议。
也在寻找一个支持curve25519
加密/解密的 API ......(我尝试了 tweetnacl 的 nacl.box 并且不知道 nonce 是什么)
所以这就是我需要的
- 转换
ed25519 to curve25519
(加密/解密 aes256key) - JAVA api curve25519
加密/解密(充气城堡会这样做吗?) - JAVA,Javascript
我真的很感谢你的帮助。谢谢,祝你有美好的一天!
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.
javascript - 曲线 25519 标量乘法库
我正在将一些后端/sdk 移植到 nodejs/typescript 并且我遇到了一个阻止程序,源代码使用的libsodium
函数crypto_scalarmult_curve25519()
在 Go 中也具有等价的功能(通过crypto/curve25519
(ScalarMult
))。
自从我在 nodejs/typescript 中寻找类似版本以来已经有一个小时了,我什至尝试了 ; 的 javascript 版本libsodium
。这指向我libsodium-wrapper
,不幸的是,我正在寻找的功能 ( crypto_scalarmult_curve25519
) 丢失且不受支持。crypto
库也node-forge
没有曲线标量乘法。
javascript/typescript 中是否有任何替代方法?
node.js - 如何在节点 js 中使用 ECDH 生成曲线 25519 密钥对?
我想用ECDH生成一个Curve25519密钥对用于加密和解密。我正在使用Crypto节点模块来生成密钥对。
但是,我未能使用 ECDH 算法生成密钥对。
节点JS
输出:
这是使用bouncycastle的 Java 代码之一
https://github.com/gsasikumar/forwardsecrecy
Java代码的输出:
任何人都可以指导我吗?
ios - ECC曲线25519钥匙串
我正在尝试使用 iOS 上的 KeyChain 创建 Curve25519 键。我知道 CryptoKit 的存在,不幸的是,它不适用于 iOS 12。有没有办法在 CryptoKit 之前创建 Curve25519 密钥,也许是我在 KeyChain 中生成它时缺少的参数?下面的代码只会生成 P-256 密钥。