问题标签 [ecdh]

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

android - ECDH 与 Android Key Store 中的密钥

我正在开发一个生成 EC 不对称密钥的 Android 应用程序。当我的应用程序连接到设备时,它们会交换他们的公钥。然后他们使用 ECDH 建立一个共享秘密。然后使用此共享密钥来派生 AES 会话密钥。所有这一切都很好。

我现在正在处理不对称密钥的存储。我想把它放在 Android KeyStore 中,但我不知道如何进行 ECDH 操作。密钥库中的密钥可用于签名、解密或加密,但我看不到进行 ECDH 操作的可能性。可能吗?

在浏览 SO 时,我看到了这个讨论,它说这是不可能的。如果是这种情况,我怎样才能“保护”我的非对称密钥?

谢谢

0 投票
3 回答
1242 浏览

javascript - C# 和 javascript 之间的 ECDH

我正在构建一个 Web API,我需要实现 ECDH 来执行端到端加密。在服务器端我有一个 C# 应用程序,在客户端我有一个 Javascript 应用程序。

我能够交换密钥、生成私钥并加密消息,但我在解密它时遇到了问题。

我认为问题在于公钥的交换。在 javascript 键以字节“4”开始,.NET 键以 8 字节开始,标识键的类型和大小,我需要更改此字节以导入每个键(我在这里找到的信息)。也许这会导致一些不一致。

在客户端,我使用 Web Cryptography API 来处理 ECDH。我正在执行如下。

生成密钥

像这样导出公钥:

导入外部公钥

最后推导出密钥

在服务器端,我正在执行以下相同的步骤。生成公钥

导出公钥。请注意,我更改了第一个字节

导入公钥和派生私钥。请注意,我更改了第一个字节

我相信问题出在那些钥匙上。无论如何,这些都是加密和解密代码:

Javascript

C#

我真的不知道如何解决这个问题。

0 投票
3 回答
900 浏览

cryptography - 是什么让 ECDH 单独依赖两个公钥?

我有一个关于 ECDH(椭圆曲线 Diffie-Hellman)的基本问题。

整个想法是双方交换自己的公钥并获得相同的私钥。但是,您可以轻松地拦截这两个密钥。输入另一个公钥是微不足道的。

所以主要问题是生成你自己的公钥。这是否意味着重新生成给定的公钥并非易事,即在您可以输入另一个公钥并获得相同的私钥之前,不可能恢复用于生成给定公钥的原始参数?

0 投票
1 回答
796 浏览

ssl - openssl 1.0.2,如何强制服务器只选择一组密码

我有使用 opensl 1.0.2j 的客户端服务器,并希望强制服务器仅使用以下密码。

我的服务器端代码如下所示。

最后一步 ssl_accept 失败

我对上述代码中的每个 ssl 调用进行了错误检查,为了清楚起见,没有放置所有代码。如果我对 SSL_CTX_set_cipher_list() 使用“TLSv1.2:!ADH:!NULL”,它工作正常。

编辑:生成的密钥是 RSA:4096。我是否需要为 ECDH/ECDHE/DHE 生成不同的密钥?

你能帮我找出它失败的原因以及我该如何解决它?

如果您需要更多信息,请与我们联系。

谢谢,纳迦

0 投票
1 回答
790 浏览

ssl - openssl 1.0.2j,如何强制服务器选择 ECDH* 密码

我有使用 opensl 1.0.2j 并使用 RSA:4096 密钥和证书的客户端服务器,并且希望强制服务器仅使用以下密码。

我的服务器端代码如下所示。

我的客户端代码如下所示

服务器上的最后一步 ssl_accept() 失败

如果我在客户端使用ECDHE*RSA*DHE*RSA*密码,它工作正常。

你能告诉我我错过了什么吗?

编辑:服务器的证书(certFilePath)包含一个 RSA 公钥而不是 ECDH 公钥。

0 投票
1 回答
1056 浏览

ruby - 使用已知公钥设置 Ruby OpenSSL

我有一个公钥的内容,我将其作为输入传递给我的系统:

我需要将其输入OpenSSL,以便它可以参与一些 ECDH 解密。

我似乎找不到让 OpenSSL 接受上述输入的方法。

我尝试了以下方法:

  • OpenSSL::PKey::RSA.new public_key
  • OpenSSL::PKey::RSA.new "-----BEGIN PUBLIC KEY-----\n#{public_key}\n-----END PUBLIC KEY-----\n"

这两个都返回:

我可以:

  • OpenSSL::PKey.read "-----BEGIN PUBLIC KEY-----\n#{public_key}\n-----END PUBLIC KEY-----\n"

这不会返回错误,但是我看不到将组设置为 secp128r2 而不会引发错误的方法。

在 with 之后执行c = OpenSSL::PKey::EC.new("secp128r2")并尝试设置密钥c.public_key = OpenSSL::PKey.read("-----BEGIN PUBLIC KEY-----\n#{public_key}\n-----END PUBLIC KEY-----\n").public_key会引发错误:

0 投票
2 回答
1130 浏览

c# - ECDH nodejs 和 C# 密钥交换

我迷失了自我,我需要帮助才能朝着正确的方向前进:) 我有 nodejs 服务器,它必须与用 C# 编写的服务器交换一些关键数据,所以在这种情况下,我希望我的数据被加密不知何故。我在考虑 AES,为了安全地交换密钥,我想使用 ECDH,但我不知道如何让它正常工作......如果我想正确的方式,我可以让我的 C#“allice”像这样:

而nodejs“鲍勃”的一面是这样的:

好的,所以我已经对所有这些进行了一些调整,但现在我不知道如何处理这条线如何让它工作...... var aliceSecret = alice.DeriveKeyMaterial(/*ECDiffieHellmanPublicKey bobKeyBytes*/);

#BIG EDIT从 ByteArray 获得了 ECDiffieHellmanPublicKey 的帮助(使用 ECDiffieHellman NamedCurves) ,现在我遇到了另一个问题 -_- 我的节点 js 代码没有从上面更改,但 c# 看起来像:

它正在工作,但它给了bob.computeSecret(aliceKey)我不同的密钥......如果 我 认为正确的话,它们应该是平等的。我想错了吗?iIoH9aJoWf3666QQ6X+kj4iUKrk9j+hbRuXbhgs7YzM=alice.DeriveKeyFromHash(bobPublic, HashAlgorithmName.SHA256);wJ7O4Hm2Jxs1FcLx6KaMmENvqdTQJPZ/YNSs1+MQDOQ=

#编辑完成!!

因此,在 js 文件末尾添加此代码给了我我需要的东西。

0 投票
1 回答
742 浏览

c# - 来自 ByteArray 的 ECDiffieHellmanPublicKey(使用 ECDiffieHellman NamedCurves)

我正在研究通信 nodejs -> c# 服务器。我需要保护它们之间的连接,所以我选择 ECDiffieHellman 作为密钥交换机制(nodejs 支持它)。我遇到了一些问题......只是我缺乏知识,所以我已经上课了,现在我可以生成和导出密钥,因为base64和nodejs接受c#密钥没有问题,但另一方面c#......赢了甚至不拿他自己的钥匙…… 是的error System.Security.Cryptography.CryptographicException: 'The parameter is incorrect.' ,我知道我做错了,但是什么?

你可以在那里找到故事的其余部分 ECDH nodejs 和 C# 密钥交换

0 投票
0 回答
838 浏览

webcrypto-api - 如何导入 ECDH 公钥(无法使用指定的密钥用法创建密钥)

我正在尝试使用 webcrypto 运行代码,但似乎无法导入 ECDH 公钥。我错过了什么?

我收到此错误:无法使用指定的密钥用法创建密钥

浏览器:Google Chrome 版本 71.0.3578.98(官方版本)(64 位)

(在 Firefox 上运行良好)。

0 投票
0 回答
829 浏览

c# - 如何在 NET 4.5.1 上将私钥从 X509Certificate2 导入 CngKey

我使用的 .NET 版本(4.5.1)在 X509Certificate2 中没有 GetCngPrivateKey() 方法。我没有找到任何作品。

不幸的是,我使用的 .NET 版本是不可协商的。

我试图把这样的事情拉下来:

同样,我没有可用的方法,例如 GetCngPrivateKey()、HasCngKey()、GetRSAPrivateKey() 等。

* 更新 * 所有这些导入尝试都失败,但有以下例外: