我正在使用 AES 加密一些数据,问题是我必须使用仅包含 4 位数字的密钥(如密码),因此任何人都可以循环 9999 次来找到我的密钥并解密我的文本。我在这里加密的数据是一条短信。
有什么想法可以避免这种情况吗?
我正在使用 AES 加密一些数据,问题是我必须使用仅包含 4 位数字的密钥(如密码),因此任何人都可以循环 9999 次来找到我的密钥并解密我的文本。我在这里加密的数据是一条短信。
有什么想法可以避免这种情况吗?
编辑:删除了我关于添加盐的评论,指出这一点的每个人都是正确的。您也许可以增加解密的时间复杂度,这样暴力攻击将花费非常长的时间。
您可以采取与 ATM 机相同的方法:在某人输入错误的 PIN 三次后,该帐户暂时无效(您也可以设置一个沿用超时)并且该用户必须采取某种操作(例如单击一个电子邮件中的确认链接)以响应他/她的帐户。
您还必须使用该用户的唯一属性(最好是在该用户注册时随机生成的字符串)对 PIN 进行加盐。我还建议为所有硬编码或从配置文件读取的哈希添加额外的盐(如果您的数据库被破坏但其余部分没有被破坏,则很有用)。
这种方法仍然使您容易受到有人选择单个 PIN 并暴力破解用户名的攻击。您可以通过对 IP 地址应用相同的策略来对此采取一些对策,但这仍然远非最佳。
编辑:如果您的目标是加密流量而不是散列 PIN,您应该使用 HTTPS 或其他基于公钥加密的协议,这样您就不必使用您的 PIN 来加密这些 SMS。
不,没有。您可以随心所欲地向 PBKDF 添加盐和迭代计数,但最终攻击者只有 10K 次尝试通过,这只是花生。
唯一明智的做法是让一个单独的实体执行解密。它可以将自己的秘密熵添加到密钥种子中,并使用强密钥。然后,该实体将对使用 PIN 的身份验证进行限制。
您可能想仔细查看系统的安全架构,看看是否可以更改某些内容来避免此问题(访问控制、其他登录凭据等)。
假设您只能输入 4 位数字,请使用发件人的电话号码或类似的东西在应用程序中填充密钥长度?