【发布时间】:2013-12-30 01:52:26
【问题描述】:
我想在我的一个 C# .NET 应用程序中合并文件的加密和解密。场景很简单:用户 A 向用户 B 发送一个 AES256 加密文件。明文密码在不同的渠道(例如电话或其他)上交换。
据我了解,我应该使用 Rfc2898DeriveBytes 将用户的明文密码转换为更安全的密码,大约需要 10,000 轮。 (见this article)。
我不明白盐在我的场景中的作用。通常盐用于散列密码以防止字典攻击。但在我的场景中,PBKDF2 算法用于通过添加 PBKDF2 轮次所需的额外计算来弥补简短或易于猜测的明文密码的弱点。
如果我选择随机盐,那么接收者也需要知道该盐才能正确解密。如果我使用常量盐,那么黑客可以轻松地对我的代码进行逆向工程并使用我的常量盐进行暴力攻击(尽管由于 PBKDF2 迭代它们会非常慢)。
据我了解,我别无选择,只能在我的场景中使用常量盐并强制执行良好的明文密码规则来弥补常量盐的弱点。我的假设正确吗?
【问题讨论】:
标签: security encryption passwords cryptography salt