我想在我的C# .NET应用程序中加入文件的加密和解密。场景很简单:用户A将AES256加密文件发送给用户B。明文密码通过不同的通道(例如电话或其他方式)进行交换。
据我所知,我应该使用Rfc2898DeriveBytes将用户的明文密码转换为更安全的密码,可能需要进行10000轮的计算。(参见这篇文章)
但是,在我的场景中,我不理解盐的作用。通常,在哈希密码时会使用盐来防止字典攻击。但是,在我的场景中,PBKDF2算法通过添加PBKDF2轮所需的额外计算来弥补短或容易猜测的明文密码的弱点。
如果我选择一个随机盐,则接收者也需要知道该盐才能正确解密。如果我使用恒定盐,则黑客可以轻松地反向工程我的代码,并使用我的恒定盐运行暴力攻击(尽管由于PBKDF2迭代,速度会非常缓慢)。
据我所知,在我的场景中,我别无选择,只能使用恒定盐并强制执行良好的明文密码规则以弥补恒定盐的弱点。我的假设是正确的吗?
据我所知,我应该使用Rfc2898DeriveBytes将用户的明文密码转换为更安全的密码,可能需要进行10000轮的计算。(参见这篇文章)
但是,在我的场景中,我不理解盐的作用。通常,在哈希密码时会使用盐来防止字典攻击。但是,在我的场景中,PBKDF2算法通过添加PBKDF2轮所需的额外计算来弥补短或容易猜测的明文密码的弱点。
如果我选择一个随机盐,则接收者也需要知道该盐才能正确解密。如果我使用恒定盐,则黑客可以轻松地反向工程我的代码,并使用我的恒定盐运行暴力攻击(尽管由于PBKDF2迭代,速度会非常缓慢)。
据我所知,在我的场景中,我别无选择,只能使用恒定盐并强制执行良好的明文密码规则以弥补恒定盐的弱点。我的假设是正确的吗?
RijndaelManaged
有什么问题吗?” 仅因为一个构建块是由专家编写的,并不意味着您在其上构建的系统是安全的。例如,您可能会错误地使用IV,忘记MAC,错误地使用MAC,... 使用低级加密API很棘手,大多数开发人员都会犯错。” - CodesInChaos