不久前,作为加密练习,我编写了一个“密码锁定”C#应用程序。我想把数据转移到网上,这样我就可以在任何地方访问它,而不损害我的密码数据。我只想通过社区运行我的想法,以确保我不会犯错误,因为我不是一个加密专家。
以下是我的设想:
以下是我的假设:
因此,基于这些假设:我的数据安全吗?我意识到我的数据和密码的强度一样安全.我能做些什么来改善这一点吗?Rijndael解密速度慢到足以防止暴力攻击吗?
我想使用一个随机的盐值,但它仍然需要传输,因为这一点,它似乎不会更安全。我倾向于不将密码以任何形式(散列或其他形式)存储在网络上。
编辑:我正在考虑使用,所以我的“拦截”假设在这种情况下可能无效。
编辑2:基于Joachim Isaksson的评论,我将使用SSL运行。请继续打破我的假设!
编辑3:基于的评论,我将在每个用户的基础上使用salt。此外,我还使用PBKDF2来根据密码派生密钥,因此我将在这里获得“慢度”以抵抗野蛮的武力攻击。
发布于 2012-09-26 21:00:06
即使不以任何方式进入密码分析,如果您假设您的所有信息都可以被截获(即您运行时没有SSL),那么您是而不是安全的。
因为任何人都可以拦截Javascript,所以他们也可以更改Javascript,使浏览器在解密后将明文传递到其他地方。
而且,任何侵入站点(或站点所有者)的人都可以恶意地更改Javascript以做同样的事情,即使SSL是开着的。
发布于 2012-09-26 21:11:39
“密码数据”,我想你是指“密码保护数据”吧?
盐必须是随机的。在透明的环境中传播是很好的。盐的目的是防止字典攻击。也就是说,如果有人设法获得您的整个加密数据库,他们可以快速地针对您的所有用户尝试一个大型密码字典。对于随机盐类,他们需要针对每个用户尝试字典。
或者,即使在不损害数据库的情况下,他们也可以为大量字典单词生成大量预先加密的数据集,并立即能够识别任何由这些密钥加密的已知明文。
即使使用salt,字典攻击也可能比您想要的更快,因此从密码中提取密钥数据要比大多数人意识到的要微妙得多。
底线:一如既往,永远不要发明你自己的密码学,甚至你自己的操作模式。若要从密码中派生加密密钥,请使用众所周知的标准,如PBKDF2 (又名)。PKCS#5)。
发布于 2012-09-26 22:48:57
嗯,因为这是一个悬而未决的问题:
问题1
如果提供的密码不正确,或者盐类/密文被更改,您将做什么?您将得到一个不正确的解密结果,但您将如何测试呢?如果密码的最后一部分被修改了会发生什么?还是完全被移除?
解决方案:提供针对此类攻击的完整性保护。使用不同的键添加HMAC,或者使用GCM模式。
问题2
如果您更改密码或向密码中添加几个字节(及时比较加密存储),会发生什么情况?
解决方案:每次用不同的IV加密密钥存储。
这已经发现了4个问题:)密码是困难的。
https://stackoverflow.com/questions/12610248
复制相似问题