2

虽然我不是密码学家,但我确实认为自己在 [a] 对称加密、散列和加密随机数生成方面的最佳实践大多是最新的。我已经搜索并发现了许多关于 SO 和其他地方的帖子,这些帖子与加密数据、salt 和 IV 的持久性有关。我所要求的是查看我正在做的事情,以确保我正在拼凑的各个部分正确拼合,即安全拼合。这是我的计划:

在 C# 中,我使用 RSACryptoServiceProvider 生成一个漂亮的、大的 4096 位密钥对。为了持久保存到磁盘/数据库,我使用了包含私钥信息的 ToXmlString(true) 方法。然后,我使用 AES 加密整个 Xml 文档,如下所述:http: //msdn.microsoft.com/en-us/library/sb7w85t6 (v=VS.90).aspx ,使用从 Rfc2898DeriveBytes 派生的密钥使用 10,000 轮和从 RNGCryptoServiceProvider 生成的 64 位盐。但现在的问题是,储存盐以及静脉输液。我知道盐可以是公开的,我很确定 IV 也可以。因此,最简单的处理方法似乎是将它们与加密的 Xml 一起放入纯文本 Xml 文档中并完成。

有什么我想念的吗?

Edit0:是的,IV 不必保密:http ://www.w3.org/TR/xmlenc-core/#sec-Nonce 。

Edit1:盐现在是从密码产生的(在填充到至少 64 位后仍然使用 10k 轮),因此它不会单独保存。IV 会自动添加到 CipherValue 的前缀。

4

1 回答 1

0

IV 和 salt 应该是安全的随机数,并且可以公开存储。迭代计数也可以公开存储,尽管它通常是硬编码的。请注意保持迭代计数的上限,否则您可能容易受到拒绝服务攻击。

所以基本上你做得很好。如果加密 XML,我会遵守 XML 加密规范,使用(建议的)GCM 模式加密(如果可用)。确保在解密时检查所有参数。

于 2012-12-30T00:06:47.280 回答