- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在构建一个使用 BouncyCaSTLe 作为加密提供程序的网络应用程序。假设您有此生成 key 对:
ECParameterSpec ecSpec = ECNamedCurveTable.getParameterSpec("prime192v1");
KeyPairGenerator g = KeyPairGenerator.getInstance("ECDSA", "BC");
g.initialize(ecSpec, new SecureRandom());
KeyPair pair = g.generateKeyPair();
我很困惑为什么您要获取 ECDSA KeyPairGenerator 的实例。为什么它不直接说EC?我知道 BouncyCaSTLe 附带了一个 ECDH key 类型,但我认为这两个代表关于曲线上的点的相同内容——或者我对它背后的理论完全错误?
我问的原因是,现在我的应用程序可以很好地使用 ECDH 来建立 AES key ,但现在我想使用相同的 EC key 来使用 ECDSA 对每条消息进行签名。
最佳答案
ECDSA 和 ECDH 来自不同的标准(分别为 ANSI X9.62 和 X9.63),并在不同的上下文中使用。 X9.63 明确地重用了 X9.62 中的元素,包括公钥的标准表示(例如在 X.509 证书中)。因此,ECDSA 和 ECDH key 对在很大程度上是可以互换的。然而,给定的实现是否允许这种交换是一个悬而未决的问题。从历史上看,(EC)DSA 和 (EC)DH 来自不同的世界。
但请注意,使用上下文非常不同。密码学比椭圆曲线的计算要多一些;必须考虑“ key 生命周期”。简而言之,您不想使用相同的过程来管理 key 协商 key 和签名 key 。例如,如果您丢失了 key 协议(protocol) key (您的狗吃掉了您的智能卡——别笑,这真的发生了),那么您将无法再解密相对于该 key 加密的数据(例如发送给您的加密电子邮件,以及以加密格式存储)。从业务的角度来看,丢失 key 也可能是失去员工(员工被解雇、被公共(public)汽车撞到、退休或其他)。因此,加密 key (包括 key 协商 key )必须经常被托管(例如,打印一份私钥副本并将其存储在保险箱中)。另一方面,丢失签名 key 意味着没有数据丢失;以前签发的签名仍然可以验证;从这种损失中恢复就像创建一个新的 key 对一样简单。然而,托管系统的存在往往会自动剥夺签名可能附加的任何合法值(value)。
此外,在更一般的基础上,我强烈建议不要在两种不同的算法中使用相同的私钥:算法之间的交互尚未得到充分探索(仅研究一种算法已经很困难)。例如,如果有人开始向您的基于 ECDH 的协议(protocol)提供从您使用相同私钥计算的 ECDSA 签名中提取的曲线点,会发生什么情况?
所以你真的不应该为 ECDH 和 ECDSA 重复使用相同的 key 。
关于java - ECDH 和 ECDSA key 之间有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4969570/
因此,我尝试使用椭圆曲线 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
我是一名优秀的程序员,十分优秀!