![]() |
1
4
有趣的问题。 首先,初始向量不一定是加密的强随机量,但是它们 应该 每条消息都是唯一的。IV实际上只是一种salt值,它确保使用相同密钥加密的类似消息不会 看 类似的,一旦加密。您可以使用任何快速伪随机生成器生成IV,然后将其与加密数据一起发送(最好是加密的)。 当然,钥匙应该尽可能结实。 在我看来,您对包含nonce、密码短语和有效性数据的文本字符串进行哈希处理的建议是非常合理的——这与使用密码短语生成密钥的其他系统所做的操作大致一致。为了使密钥生成的计算成本更高(对于任何试图强行使用密钥的人来说,这将是一个比对您更大的问题),您应该多次(而不仅仅是一次)散列。 您可能还需要查看pkcs 5中规定的密钥生成方案(例如 http://www.faqs.org/rfcs/rfc2898.html )它在Cryptopp中实现为密码基密钥派生函数。这种机制已经被广泛使用,并被认为是合理的安全机制(请注意,pkcs 5建议对密码短语数据进行至少1000次哈希处理)。您只需将您的有效期和索引数据附加到密码短语中,并按原样使用PasswordBasedKeyDerivationFunction。 你没有说你打算用什么加密算法来加密数据,但我建议你应该选择一些广泛使用并且已知是安全的…尤其是我建议你使用AES。我还建议使用sha摘要函数之一(可能作为passwordbasedKeyDerivationFunction的输入)。sha-2是当前的,但sha-1足以用于密钥生成。 您也不知道要生成的密钥长度,但是您应该知道密钥中的熵量取决于您使用的密码短语的长度,除非密码短语是 非常 长度远小于理想的键长要求。 这个方案中最薄弱的环节就是密码本身,这总是会限制您可以实现的安全级别。只要您盐渍您的数据(如您所做的),使密钥生成成本高昂,以减缓暴力攻击,您应该是好的。 |
![]() |
2
1
嗯,我 认为 部分解决方案是使用非基于时间的生成器。这样,如果双方从相同的种子开始,那么它们都会产生相同的随机流。你可以把你的“1970年第1周以来的几周”逻辑放在上面。
要做到这一点,你需要
实际上,crpyto++在
呼叫
有另一个生成器也可以这样做,但它不是Crypto++库的一部分。它叫
另请参见主题
Reproducibility
对于
|
![]() |
EinderJam · 使用文件源加密内容后无法删除文件 7 年前 |
|
Lery · 使用ECDSA或DSA对预计算哈希进行签名 7 年前 |
![]() |
EinderJam · 如何在文件中读写AES密钥? 7 年前 |
![]() |
Paz Haviv · 用C#加密和用Crypto++解密不起作用 7 年前 |
![]() |
James Combs · 通过套接字验证消息RSA签名方案时出现问题 8 年前 |
![]() |
stacker · ECDSA未正确签名/验证 10 年前 |