将一个CryptoStream封装在其他几个中可以提高安全性吗?

bbo*_*sak 2 c# cryptography windows-phone-7

我正在开发一个用于存储高度安全信息的Windows Phone 7项目.此数据受密码保护.如果我在另外3个CryptoStream中加密一个CryptoStream(共有4个隐藏流互相嵌入,每个使用不同的方法来生成密钥,初始化向量和盐).这种方法是否足够安全,还是需要更多的CryptoStream(每个使用256位AES加密)?

Tal*_*joe 7

由于密码通常具有比密钥更小的位空间,因此更有可能是某人蛮力或社交工程密码而不是破解单个加密的流.所有加密多次都会增加用O(n)强制密码所需的时间或精力(你真的希望复杂度增加O(n ^ 2)或更多).

但是,如果您需要超级安全加密,请不要推出自己的策略,选择DOD标准(或等效标准)并实施它.


为了进一步解释,AES是一种具有三种不同密钥长度的分组密码.策略的第一部分是确定要使用的密钥长度.您可以随机选择一个,或选择最大的,但您真的想为您的情况选择最佳选择.接下来是AES的实际用法.由于它是一个分组密码,它会将相同的明文编码为相同的密文,因此您需要使用初始化向量和salt以及其他此类技术来确保明文将成为不同的密文.

然后就是如何从密码中获取密钥,这可能很弱.如果每次都生成密钥,则可能会意外缩小密钥空间并将其削弱.您还必须考虑使用的随机数生成器,因为它可能会产生可预测的值.如果您使用密码以某种方式解锁密钥存储,那么您的数据仅受该密钥存储的保护.如果只在成功收到密码后远程获取密钥,那么您就可以防止数据的离线攻击,并可以主动检测暴力攻击.

最后是密码本身的方面,这是加密策略中最薄弱的一点.如果用户选择弱密码,则使用多少密码并不重要.这就是为什么即使你只使用一个128位AES加密来加密数据,攻击者更有可能试图破坏密码而不是试图破解加密.

除非您计划在渗透测试和安全审核上花费必要的资金,否则选择一组经过测试的策略将比提出您自己的策略更好.


为了好玩,请阅读TrueCrypt的工作原理.

  • 是的,但您使用AES的方式与DOD使用AES的方式不同.如果您使用AES加密某些内容然后在维基百科上发布密钥,那么您使用的是DOD级加密,但却采用了不合标准的加密策略. (2认同)
  • 您正在为不安全的设备编写代码.预计您的攻击者将对您的应用程序进行逆向工程,并找出您用于加密数据的确切方法 - 它们并非秘密.话虽如此,随机决定加密数据的四种方法并不能保证安全性; 选择一个经过审查的策略??? NSA的数学天才确保最大限度地防止攻击是您最好的选择.它不仅仅包括用于包括密钥派生,密钥管理和其他事物的算法. (2认同)