java - 使用 diffie-hellman 共享 key 继续加密

标签 java security key theory diffie-hellman

我目前正在研究一个协议(protocol),该协议(protocol)使用 Diffie-Hellman 进行 key 交换。 我收到一个数据包,其中包含一个 aes-128 加密部分和一个 128 位 DH 公钥。

在协议(protocol)的最后一步,aes key 被发送到网络中的另一个对等点。 此 aes key 应使用 128 位强 key 使用密码加密。

我打算使用 Blowfish(也可以是另一种密码,对问题来说并不重要)

现在要加密 aes key ,比方说河豚,我必须使用一个名为 SecretKeySpec 的类(我正在使用 javax.crypto 的东西)构建一个用于加密的 key ,它在构造函数中使用一个 byteArray 来构建 key 。

来自 DH 的共享 key 是一个 128 位的 BigInteger。 好吧,现在我可以将我的共享 key 解释为一个 byteArray(这仍然给我 16 字节中的 128 位 [其中数字被解释为 8 位数据的帧])

所以我的问题是,我的 key 到底有多强?

是否有任何影响,因为我只使用数字作为 byteArray 的输入(所以这会以任何方式限制键空间吗?)

我认为情况并非如此,但我不是 100% 确定。 也许有人可以计算并证明我是对还是错。

如果我错了,共享 key 的 key 大小是多少让我最终获得 128 位 SecretKey 进行加密?

最佳答案

Crypto++网站建议使用至少 3072 位的 p(或对于 ECC 实现为 256 位)来传输 128 位 AES key 。

您可能希望研究 http://www.keylength.com/en/compare/ 提供的引用资料有关比较不同算法之间的 key 长度的更多信息。

关于java - 使用 diffie-hellman 共享 key 继续加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7935890/

相关文章:

security - 如何保护 Hadoop 中的特定数据

c# - 如何安全存储mysql连接数据?

go - 根据 Golang 中 hashmap 的值获取键的简单方法

MySQL: Cannot add foreign key constraint in school project 报错

java - 需要删除 Selenium 中的日志文件警告

java - 使用哪种设计模式可以轻松添加新算法?

java - 我如何在 Java 中存储这些数据?

java - 检查一个单词是否是回文

jakarta-ee - Kerberos 身份验证 key 表 KVNO

python - 如何从 python 中的嵌套字典中获取特定键及其值?