- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为 Windows Phone 7 开发一个存储高度安全信息的项目。此数据受密码保护。如果我在 3 个其他 CryptoStreams 中加密一个 CryptoStream(总共 4 个密码流相互嵌入,每个使用不同的方法生成 key 、初始化向量和盐)。这种方法是否足够安全,还是我需要更多 CryptoStreams(每个都使用 256 位 AES 加密)?
最佳答案
与破解单一加密流相比,有人使用暴力破解或社会工程设计密码的可能性要大得多,因为密码通常比 key 具有更小的位空间。所有多次加密都会增加 O(n) 暴力破解密码所需的时间或精力(您确实希望复杂性增加 O(n^2) 或更多)。
但是,如果您需要 super 安全的加密,请不要制定自己的策略,选择一个 DOD 标准(或同等标准)并实现它。
进一步解释,AES 是一种具有三种不同 key 长度的分组密码。该策略的第一部分是确定您要使用的 key 长度。您可以随机选择一个,也可以选择最大的,但您确实想选择最适合您情况的选择。接下来是AES的实际使用。由于它是 block 密码,它将相同的明文编码为相同的密文,因此您将需要使用初始化向量和盐以及其他此类技术来确保明文将成为不同的密文。
然后是如何从密码中导出 key ,这可能很弱。如果每次都生成 key ,可能不小心把 key 空间缩小了,弱化了。您还必须考虑所使用的随机数生成器,因为它可能会产生可预测的值。如果您使用密码以某种方式解锁 key 存储,那么您的数据只会受到与该 key 存储一样的保护。如果您仅在成功收到密码后才远程获取 key ,那么您就可以防止对数据的离线攻击,并且可以主动检测暴力攻击。
最后是密码本身,这是迄今为止加密策略中最薄弱的环节。如果用户选择弱密码,则使用多少密码都没有关系。这就是为什么即使您仅使用单个 128 位 AES 加密来加密数据,攻击者也更有可能尝试破解密码而不是尝试破解加密。
除非您计划在渗透测试和安全审计上花费必要的资金,否则选择一组经过测试的策略比自己想出的策略更适合您。
为了好玩,请继续阅读如何 TrueCrypt does it .
关于c# - 将一个 CryptoStream 封装在多个其他 CryptoStream 中会提高安全性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5827348/
我是一名优秀的程序员,十分优秀!