bbo*_*sak 2 c# cryptography windows-phone-7
我正在开发一个用于存储高度安全信息的Windows Phone 7项目.此数据受密码保护.如果我在另外3个CryptoStream中加密一个CryptoStream(共有4个隐藏流互相嵌入,每个使用不同的方法来生成密钥,初始化向量和盐).这种方法是否足够安全,还是需要更多的CryptoStream(每个使用256位AES加密)?
由于密码通常具有比密钥更小的位空间,因此更有可能是某人蛮力或社交工程密码而不是破解单个加密的流.所有加密多次都会增加用O(n)强制密码所需的时间或精力(你真的希望复杂度增加O(n ^ 2)或更多).
但是,如果您需要超级安全加密,请不要推出自己的策略,选择DOD标准(或等效标准)并实施它.
为了进一步解释,AES是一种具有三种不同密钥长度的分组密码.策略的第一部分是确定要使用的密钥长度.您可以随机选择一个,或选择最大的,但您真的想为您的情况选择最佳选择.接下来是AES的实际用法.由于它是一个分组密码,它会将相同的明文编码为相同的密文,因此您需要使用初始化向量和salt以及其他此类技术来确保明文将成为不同的密文.
然后就是如何从密码中获取密钥,这可能很弱.如果每次都生成密钥,则可能会意外缩小密钥空间并将其削弱.您还必须考虑使用的随机数生成器,因为它可能会产生可预测的值.如果您使用密码以某种方式解锁密钥存储,那么您的数据仅受该密钥存储的保护.如果只在成功收到密码后远程获取密钥,那么您就可以防止数据的离线攻击,并可以主动检测暴力攻击.
最后是密码本身的方面,这是加密策略中最薄弱的一点.如果用户选择弱密码,则使用多少密码并不重要.这就是为什么即使你只使用一个128位AES加密来加密数据,攻击者更有可能试图破坏密码而不是试图破解加密.
除非您计划在渗透测试和安全审核上花费必要的资金,否则选择一组经过测试的策略将比提出您自己的策略更好.
为了好玩,请阅读TrueCrypt的工作原理.