- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在构建一个实现 ECDSA_METHOD 的 OpenSSL 引擎,其中包括签名创建和签名验证功能。由于 ECDHE 私钥的唯一用途是与签名创建相关,因此不需要从引擎导出 key 并将其呈现在其他任何地方。
但是,如果我不通过 SSL_set_private_key 函数向 SSL_Context 提供私钥,SSL 握手将失败并出现以下错误:
error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
我还尝试向 SSL_set_private_key 函数提供一个模拟 key (与证书中的公钥无关的 key ),但此函数确实验证私钥/公钥是否匹配,如果出现错误,则会抛出错误证书他们没有。
在某些情况下,openssl 似乎允许绕过此验证,例如这是我在 ssl/ssl_rsa.c 中找到的
#ifndef OPENSSL_NO_RSA
/*
* Don't check the public/private key, this is mostly for smart
* cards.
*/
if ((pkey->type == EVP_PKEY_RSA) &&
(RSA_flags(pkey->pkey.rsa) & RSA_METHOD_FLAG_NO_CHECK)) ;
else
#endif
if (!X509_check_private_key(c->pkeys[i].x509, pkey)) {
X509_free(c->pkeys[i].x509);
c->pkeys[i].x509 = NULL;
return 0;
}
我想,我需要类似的 EC key ,但我没有在任何地方找到它。也欢迎任何其他解决方案。
最佳答案
Any other solutions are appreciated as well.
这可能不是您唯一的选择,但我认为您可以通过创建自己的 EVP_PKEY_METHOD
来实现您正在寻找的东西。并根据需要履行其职能。这样,您可以存储您自己的句柄,例如,基于智能卡的 key ,然后在适当的时候调用适当的签名方法。您必须使用 EVP_PKEY_meth_set_Xyz()
设置正确的方法功能,如 EVP_PKEY_meth_set_sign(<yourSigningFunction>)
.例如,如果您使用的是 Windows 加密 API,则必须调用 NCryptSignHash()
从您的签名功能。这样,您就不必从 Windows keystore 中导出私钥来获取签名。
我以前做过这个,我遇到的唯一大问题(除了缺少文档和示例)是 EVP
缺少 key 存储功能。等级。如您所见here,似乎正在进行一些工作.作为解决方法,我不得不从商店中选择 key /证书作为 key 生成机制的一部分,但它并不是真正用于此目的。
如果您决定走这条路,请准备好几周的反复试验。
关于ssl - 如何在没有可导出私钥的情况下进行 ECDHE 握手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33977131/
因此,我尝试使用椭圆曲线 DH 的 OpenSSL EVP 方法执行 key 交换,以派生共享 key 。这对于在 GCM 模式下使用 AES 为自定义协议(protocol)提供强大的安全性是必要的
在我的场景中,Alice 和 Bob 已就使用哪条曲线达成一致。 Alice 生成公钥和私钥 Alice 将公钥发送给 Bob Bob 生成他的 key ,并根据他收到的 Alice 公钥生成 ses
我在 Windows 7 系统上使用 Oracle Java 8 (8u112) 和“适用于 JDK/JRE 8 的 Java 加密扩展 (JCE) 无限强度管辖策略文件”。为了提高我对安全套接字的理
我正在寻找示例 Java 代码来实现 ECDH 加密的密码。我已经找到了获取所需 key 的方法,但仍未找到加密文本的解决方案。如果有人可以提供一些指导,我们将不胜感激。 顺便说一下,我在为 Andr
我对 OpenSSL 库中的 ECDH 有疑问。 在文件'ecdhtest.c'的第159行,我们可以确认私钥的值如下: BN_print(out, a->priv_key); 但是,当我使用 Mak
我知道 ECDH 中的 key 大小取决于椭圆曲线的大小。 如果是256位曲线(secp256k1), key 将为: Public: 32 bytes * 2 + 1 = 65 (uncompres
我正在构建一个实现 ECDSA_METHOD 的 OpenSSL 引擎,其中包括签名创建和签名验证功能。由于 ECDHE 私钥的唯一用途是与签名创建相关,因此不需要从引擎导出 key 并将其呈现在其他
Java Cryptography ArchitectureStandard Algorithm Name Documentation Java 6 的页面列出了 ECDHE 密码套件。因此,我希望它
我正在尝试了解 HTTPS 的工作原理并进行一些实际测试。 我有一个通过 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA 加密的 HTTPS 通信捕获的数据。 如果我没理解错的话
我正在尝试使用 ECDH key 实现 CMS 加密。引用 openssl CMS with ECDH EnvelopedData命令行运行完美,但我的程序出现错误 - Error Encryptin
我读过这篇文章document通过ECDH-CURVE25519算法生成 key 对。但是当我在 window.crypto.subtle.generateKey 中指定 ECDH-CURVE2551
我正在将一个方法从 nodeSJ 转换为 Java,但我无法使其正常工作。我一直在尝试计算派生共享 secret 。 希望有人能发现我在将 NodeJS 移植到 Java 时做错了什么。 NodeJS
前言:我不知道这个问题在这里问更合适还是在 Crypto 网站上问更合适。请随意移动或删除或任何适当的 SE 操作。 有人要求我帮助更新一些加密软件。一般来说,该软件已经执行了以下步骤,其中没有一个是
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我目前正在研究 ECDH key 交换实现。我为此使用 P-384 曲线。其他曲线也是可能的,但我认为实现应该非常相似。 客户端(Javascript)和服务器(Java)想要找到一个共享的 secr
我正在开发一个 iOS 应用程序,我想实现 ECDH 以确保安全。我使用这个应用程序(https://github.com/DigitalLeaves/AsymmetricCrypto)生成一对 ke
我正在尝试使用本地证书颁发机构,但我不断收到“ECDH 服务器 key 交换消息上的无效签名”错误。提前为这个问题的复杂性道歉。您可以通过以下方式从 github 获取完整的源代码: git clon
根据 RFC客户端发送使用服务器的 RSA 公钥加密的预主 key 。但是当他们使用 ECDHE 作为非对称算法时,客户端 key 交换消息将包含客户端的公钥。如果是这样的话?客户端何时发送预主 ke
我正在构建一个 Web API,我需要实现 ECDH 来执行端到端加密。在服务器端我有一个 C# 应用程序,在客户端我有一个 Javascript 应用程序。 我能够交换 key 、生成私钥并加密消息
我对 ECDH(椭圆曲线 Diffie-Hellman)加密有一个小问题。我使用 BouncyCaSTLe 库。 这是我生成 key 的函数: public static KeyPair genera
我是一名优秀的程序员,十分优秀!