我想在我的一个C#.NET应用程序中加入和解密文件.场景很简单:用户A向用户B发送AES256加密文件.明文密码在不同的频道上交换(例如电话或其他).
根据我的理解,我应该使用Rfc2898DeriveBytes将用户的明文密码转换为更安全的密码,使用10,000轮.(见本文).
我不明白的是盐在我的场景中的作用.通常在散列密码中使用salt来防止字典攻击.但在我的场景中,PBKDF2算法用于通过添加PBKDF2轮次所需的额外计算来弥补短或易猜测明文密码的弱点.
如果我选择随机盐,那么接收器也需要知道盐,以便正确解密.如果我使用恒定盐,那么黑客可以轻松地对我的代码进行逆向工程并使用我的恒定盐运行暴力攻击(尽管由于PBKDF2迭代它们会非常慢).
根据我的理解,我别无选择,只能在我的场景中使用恒定的盐,并强制执行一个良好的明文密码规则来弥补恒定盐的弱点.我的假设是否正确?