问题标签 [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.
android - ECDH 与 Android Key Store 中的密钥
我正在开发一个生成 EC 不对称密钥的 Android 应用程序。当我的应用程序连接到设备时,它们会交换他们的公钥。然后他们使用 ECDH 建立一个共享秘密。然后使用此共享密钥来派生 AES 会话密钥。所有这一切都很好。
我现在正在处理不对称密钥的存储。我想把它放在 Android KeyStore 中,但我不知道如何进行 ECDH 操作。密钥库中的密钥可用于签名、解密或加密,但我看不到进行 ECDH 操作的可能性。可能吗?
在浏览 SO 时,我看到了这个讨论,它说这是不可能的。如果是这种情况,我怎样才能“保护”我的非对称密钥?
谢谢
javascript - C# 和 javascript 之间的 ECDH
我正在构建一个 Web API,我需要实现 ECDH 来执行端到端加密。在服务器端我有一个 C# 应用程序,在客户端我有一个 Javascript 应用程序。
我能够交换密钥、生成私钥并加密消息,但我在解密它时遇到了问题。
我认为问题在于公钥的交换。在 javascript 键以字节“4”开始,.NET 键以 8 字节开始,标识键的类型和大小,我需要更改此字节以导入每个键(我在这里找到的信息)。也许这会导致一些不一致。
在客户端,我使用 Web Cryptography API 来处理 ECDH。我正在执行如下。
生成密钥
像这样导出公钥:
导入外部公钥
最后推导出密钥
在服务器端,我正在执行以下相同的步骤。生成公钥
导出公钥。请注意,我更改了第一个字节
导入公钥和派生私钥。请注意,我更改了第一个字节
我相信问题出在那些钥匙上。无论如何,这些都是加密和解密代码:
Javascript
C#
我真的不知道如何解决这个问题。
cryptography - 是什么让 ECDH 单独依赖两个公钥?
我有一个关于 ECDH(椭圆曲线 Diffie-Hellman)的基本问题。
整个想法是双方交换自己的公钥并获得相同的私钥。但是,您可以轻松地拦截这两个密钥。输入另一个公钥是微不足道的。
所以主要问题是生成你自己的公钥。这是否意味着重新生成给定的公钥并非易事,即在您可以输入另一个公钥并获得相同的私钥之前,不可能恢复用于生成给定公钥的原始参数?
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 生成不同的密钥?
你能帮我找出它失败的原因以及我该如何解决它?
如果您需要更多信息,请与我们联系。
谢谢,纳迦
ssl - openssl 1.0.2j,如何强制服务器选择 ECDH* 密码
我有使用 opensl 1.0.2j 并使用 RSA:4096 密钥和证书的客户端服务器,并且希望强制服务器仅使用以下密码。
我的服务器端代码如下所示。
我的客户端代码如下所示
服务器上的最后一步 ssl_accept() 失败
如果我在客户端使用ECDHE*RSA*
或DHE*RSA*
密码,它工作正常。
你能告诉我我错过了什么吗?
编辑:服务器的证书(certFilePath)包含一个 RSA 公钥而不是 ECDH 公钥。
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
会引发错误:
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 文件末尾添加此代码给了我我需要的东西。
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# 密钥交换
webcrypto-api - 如何导入 ECDH 公钥(无法使用指定的密钥用法创建密钥)
我正在尝试使用 webcrypto 运行代码,但似乎无法导入 ECDH 公钥。我错过了什么?
我收到此错误:无法使用指定的密钥用法创建密钥。
浏览器:Google Chrome 版本 71.0.3578.98(官方版本)(64 位)
(在 Firefox 上运行良好)。
c# - 如何在 NET 4.5.1 上将私钥从 X509Certificate2 导入 CngKey
我使用的 .NET 版本(4.5.1)在 X509Certificate2 中没有 GetCngPrivateKey() 方法。我没有找到任何作品。
不幸的是,我使用的 .NET 版本是不可协商的。
我试图把这样的事情拉下来:
同样,我没有可用的方法,例如 GetCngPrivateKey()、HasCngKey()、GetRSAPrivateKey() 等。
* 更新 * 所有这些导入尝试都失败,但有以下例外: