问题标签 [x25519]

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 投票
2 回答
345 浏览

openssl - 我在哪里可以找到 Curve25519 派生方法实现?

我正在使用opensslx25519玩 python 库密码学

通过寻找代码EVP_PKEY_derive

我可以看到:

我正在寻找的是 x25519 的派生方法的实现。
但不可能在 openSSL 代码中找到它。

有人知道我在哪里可以找到它吗?

0 投票
0 回答
680 浏览

openssl - 如何从 XZ 坐标创建 x25519 公钥?

据我了解,Curve25519 上使用的 x25519 DH 函数仅使用我在维基百科定义X中看到的坐标:

XZ 坐标 [数据库条目] 将 xy 表示为 XZ,满足以下等式:

x=X/Z

根据本文档

我在这个堆栈交换答案中找到了这些方程:

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

我查看了X25519_public_from_private函数并发现:

我想知道的是如何从 u,v 或 x,y(或 X,Y)坐标创建公钥。尤其是如果它甚至可能的话?

例如,使用经典的 ecdsa,可以通过 x,y 坐标和曲线创建公共数字,从而从它们创建公钥。使用密码学 python 库
的示例:

我想用 Curve25519 实现同样的目标。

参考资料:
https://medium.com/@chain_66731/a-deep-dive-into-x25519-7a926e8a91c7
https://hackernoon.com/what-is-the-math-behind-elliptic-curve-cryptography-f61b25253da3
https ://crypto.stackexchange.com/questions/74598/key-specifications-for-x25519-need-two-clarifications-please

0 投票
1 回答
1078 浏览

swift - 如何将 openssl 创建的 44 字节 x25519 公钥传递给需要 32 字节密钥长度的 CryptoKit

假设我使用 openssl 创建了一个 x25519 密钥对,它将输出一个 64 字节的私钥和相应的 44 字节 Base64 编码的公钥,看起来像

Swift CryptoKit 只接受 32 字节的私钥和公钥初始化。

如果我理解正确的话,64 字节的私钥是种子,前 32 字节是实际的私钥。

尽管如此,对公钥使用相同的原则还是行不通(这并不奇怪)

现在的问题是:如何将公钥转换为 Swift CryptoKit 所需的 32 字节?

这是使用 base64 解码公钥的前 32 个字节的非功能示例

0 投票
1 回答
134 浏览

c++ - How to calculate public key for TLS key exchange using OpenSSL functions?

I'm learning TLS 1.3 scheme and trying to implement basic handshake steps in C++ without using ready wrappers from OpenSSL such as SSL_accept or SSL_do_handshake. The project already uses OpenSSL for common crypto operations, so I would like not to link it with any other crypto libraries where the x25519 calculation is more obvious than in OpenSSL. So...

there are two buffers:

Which method(s) of OpenSSL should I use to fill public_key buffer with bytes computed from private_key using x25519 algo (copying and allocating as less as possible)?

0 投票
0 回答
1079 浏览

ssl - TLS 1.3 客户端和服务器无法通信,因为它们没有共同的算法

我无法再使用 c# WebClient.DownloadFile() 或 HttpClient.ReadAsStreamAsync() 下载公开可用的文件。我可以使用 Chrome 或 Firefox 手动下载。

该网站升级到 TLS 1.3,我的程序以前使用 TLS 1.2。返回的第一个错误是“无法建立 SSL/TLS 安全通道”。TLS 1.3 不是 .Net 中定义的枚举,因此我从 .Net v4.78 升级到 v4.80 以指定 ServicePointManager.SecurityProtocol 和 HttpHandler.SslProtocols(用于 HttpClient)的 TLS 1.3 协议。该操作通过了安全通道错误,现在我陷入了常见的算法错误。

Chrome 显示该站点使用 TLS 1.3 和 X25519 以及 AES_128_GCM。我的理解是 X25519 是密钥交换,算法是 AES_128_GCM。我运行了 PowerShell 命令“get-TlsCipherSuite”,它首先显示密码 TLS_AES_256_GCM_SHA384,然后是 TLS_AES_128_GCM_SHA256。这些是协议 772 的仅有的 2 个密码,现在在 Windows 10 中默认启用。我相信这个十进制数字表示 TLS 1.3 (0x0304)。该网站由 Apache 提供支持,证书显示算法 SHA256RSA。

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 回答
153 浏览

openssl - mbedTLS ECDH 曲线 25519 和 openSSL

我尝试学习一些关于 diffie-hellman 椭圆曲线的知识……我的目标实际上是在我的 windows pc 上使用 openSSL 生成一个密钥对,将生成的公钥传输到我的 stm32 目标,然后使用 mbedTLS 库计算秘密,等等 ...

视窗:

目标:

我在 stm32 上的代码基于此示例: https ://github.com/ARMmbed/mbedtls/blob/development/programs/pkey/ecdh_curve25519.c

我现在的问题是,我不知道如何使用 mbedTLS 解析生成的 PEM(或 DER)格式,以便我可以正确使用此示例代码和由 openSSL 生成的公钥。

我对 PEM 或 DER 文件的内部 ASN.1 结构了解不多,所以我需要帮助来找到正确的 API 来解析密钥并提取所需的数据。

谢谢

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 投票
0 回答
236 浏览

java - 作为 jar 运行但不在 ide 中运行时出现 SSL 握手问题

我有一个尝试连接到电子邮件服务器的 Java 16 程序。通过 Eclipse IDE 运行时它工作正常。这是成功连接请求和响应的调试日志(抱歉,它太长了——我不确定哪些位是最相关的,所以我放了很多):

但是,当我将它捆绑为 uberjar 并尝试运行它时,我收到了握手错误。这是调试日志中的连接请求:

这是错误响应:

我不确定如何阅读日志(对 SSL 没有太多经验),但我可以看到当它在 IDE 中工作时,从服务器返回的“命名组”是 x25519。但是当我将它作为 uberjar 运行时,支持的组列表中似乎缺少这个。如果我以某种方式返回日志,我会看到以下错误:

所以这是我的问题吗?如果是这样,我该如何包含它?

0 投票
2 回答
331 浏览

c# - (C#) 在 (EC)DHE x25519 上使用私钥和公钥计算密钥份额

我正在使用 (EC)DHE 加密类型 x25519,我在计算共享密钥时遇到了一个大问题。

我有三个关键:

  • 爱丽丝的私钥:

  • 爱丽丝的公钥:

  • Bob 的公钥:

所以现在我需要像这样组合 Alice 的私钥和 Bob 的公钥(以找到它们之间的共享密钥):

有人用 C# 帮我解决这个问题吗?(我需要一个编程代码)。