虽然我不是密码学家,但我确实认为自己在 [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 的前缀。