【发布时间】:2015-04-03 18:50:39
【问题描述】:
我正在使用 Crypto++ 库:
DH dh;
AutoSeededRandomPool rnd;
SecByteBlock priv(dh.PrivateKeyLength());
SecByteBlock pub(dh.PublicKeyLength());
这会使用 diffie-hellman 生成私钥和公钥:
dh.GenerateKeyPair(rnd, priv, pub);
在这里,我将无法读取的私钥和公钥转换为 Integer(数字,例如 123)
// SecByteBlock -convert-> Integer
Integer a, b;
a.Decode(priv.BytePtr(), priv.SizeInBytes());
b.Decode(pub.BytePtr(), pub.SizeInBytes());
我从Integer 转换回SecByteBlock 的代码是什么?
Integer -convert-> SecByteBlock
【问题讨论】:
-
如果你从一个不太安全的类型构造它,
SecByteBlock的想法会不会丢失?如果我理解名称(API 严重缺乏信息),那么这个想法是这个块在安全内存中。当您从不安全的内存中生成它时,大部分安全性都会丢失。 -
@MaartenBodewes -
Integer也将 bignum 字节存储在基于SecBlock的类型中(SecByteBlock是SecBlock<byte>的类型定义)。根据对源代码的粗略阅读,唯一的安全功能是在释放时将内存归零;我没有看到它阻止交换到磁盘的证据。我想,例如,面对 Heartbleed 式攻击归零可以提供一些好处,但在 OP 问题的背景下,真正缓解泄漏密钥材料的方法显然是使用 HSM 而不是软件加密库无论如何。 -
@softwariness 这是很好的信息,谢谢。即使我家里没有 HSM(无论如何也不适合我的笔记本电脑:))
-
@MaartenBodewes 说得好 ;-)
-
@Maarten - 良好的观察力;你不是第一个。 Crypto++ 有很多自我记录的代码和一个 wiki 来尝试填补空白。您可以在 Crypto++ Wiki 找到 wiki。
标签: c++ cryptography crypto++ diffie-hellman