当前位置: 首页 > 面试题库 >

ECDH和ECDSA密钥之间有区别吗?

赵健柏
2023-03-14
问题内容

我正在构建一个使用BouncyCastle作为加密提供程序的网络应用程序。假设您具有生成密钥对的方法:

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 fine来建立AES密钥,但是现在我想使用相同的EC密钥来使用ECDSA签名每条消息


问题答案:

ECDSA和ECDH来自不同的标准(分别为ANSI
X9.62和X9.63),并在不同的上下文中使用。X9.63显式重用X9.62中的元素,包括公共密钥的标准表示(例如,在X.509证书中)。因此,ECDSA和ECDH密钥对在很大程度上可以互换。但是,给定的实现是否将允许这种交换是一个悬而未决的问题。历史上,(EC)DSA和(EC)DH来自不同的世界。

但是请注意,用法上下文非常不同。密码学比椭圆曲线的计算要多得多。必须考虑“关键生命周期”。简而言之,您不想使用相同的过程来管理密钥协商密钥和签名密钥。例如,如果您丢失了密钥协议密钥(您的狗吃了您的智能卡-
别笑,这确实发生了),那么您将无法再解密相对于该密钥加密的数据(例如,发送给您的加密电子邮件,以及以加密格式存储)。从业务的角度来看,密钥的丢失也可能是雇员的丢失(雇员被解雇,被公共汽车撞倒,退休或其他原因)。因此,必须经常托管加密密钥(包括密钥协商密钥)(例如,私人密钥的副本将被打印并存储在保险箱中)。另一方面,签名密钥的丢失意味着没有数据丢失。先前签发的签名仍然可以被验证;从这种损失中恢复就像创建一个新的密钥对一样简单。但是,代管系统的存在往往会自动剥离可能附加在其上的任何合法价值的签名。

另外,在更一般的基础上,我强烈建议不要在两种不同的算法中使用相同的私钥:还没有充分研究算法之间的交互(仅研究一种算法已经很辛苦了)。例如,如果有人开始向您的基于ECDH的协议提供从ECDSA签名中提取的曲线点(您使用相同的私钥计算),该怎么办?

因此,您实际上不应为ECDH和ECDSA重用同一密钥。



 类似资料:
  • 问题内容: cacerts和密钥库之间有什么区别? 如果我使用在这些链接中找到的定义cacerts和keystore,则它们似乎是证书的集合,但是是在(Java)分布式系统的上下文中。SSL连接期间使用哪一个进行身份验证?两者还是只是其中之一,还是交替? 问题答案: “ cacerts”是一个信任库。信任库用于验证对等方。密钥库用于验证您的身份。

  • 问题内容: 我对Java- NSS库感兴趣,并且正在阅读《Sun的P11指南》。我对以下内容感到困惑: 使用PKCS12密钥库和PKCS11密钥库有什么区别? 密钥库只是密钥库,对吗?有什么区别吗?它们可以在任何方面互换使用吗? 问题答案: PKCS#12是一种文件格式(通常称为.p12或.pfx),您可以在其中存储私钥和证书。主要用于转换/传输密钥和证书。如果您从浏览器中导出私钥+证书,则可能采

  • 本文向大家介绍超级密钥和候选密钥之间的区别,包括了超级密钥和候选密钥之间的区别的使用技巧和注意事项,需要的朋友参考一下 超级键和候选键都用于从表中获取记录。这些键还用于创建表之间的关系。超级键和候选键都用于唯一标识表中的记录。两个键都可以具有空值。 以下是超级键和候选键之间的重要区别。 序号 键 超级钥匙 候选键 1 定义 超级键用于标识关系中的所有记录。 候选键是超级键的子集。 2 使用 所有超

  • 问题内容: 我需要了解超级密钥和复合密钥之间的区别。我发现的例子更加令人困惑。您能简单说明一下有什么区别吗?谢谢 问题答案: 超级键唯一地标识一行。它可以由一列或多列组成。复合键是由多个列组成的键。 如果超级键由多列组成,则它也是一个复合键。 如果复合键唯一地标识一行,则它也是超级键。 我看不到“超级密钥”这个名称使用过多:通常只称其为“唯一密钥”。

  • 本文向大家介绍私钥和公钥之间的区别,包括了私钥和公钥之间的区别的使用技巧和注意事项,需要的朋友参考一下 私钥和公钥术语用于加密和解密。这些键用于加密/解密敏感信息。 私钥 私钥用于加密和解密数据。此键在加密的敏感信息的发送者和接收者之间共享。私钥也被称为对称的,对双方都是通用的。私钥加密比公钥加密机制更快。 公钥 公共键用于加密,私有键用于解密数据。私钥在加密的敏感信息的发送者和接收者之间共享。公

  • 问题内容: 我的Google-fu使我失败了。 在Python中,以下两个相等测试是否等效? 这是否适用于您要比较实例(list说)的对象? 好的,这样可以回答我的问题: 因此,==测试重视在哪里is进行测试以查看它们是否是同一对象? 问题答案: 如果两个变量指向同一个对象(如果变量引用的对象相等),则将返回。 在您的情况下,第二个测试仅能工作,因为Python会缓存小的整数对象,这是实现细节。对