【问题标题】:Crypting with a weak secret key using AES使用 AES 使用弱密钥进行加密
【发布时间】:2012-06-08 15:06:05
【问题描述】:

我正在使用 AES 加密一些数据,问题是我必须使用仅包含 4 位数字的密钥(如密码),因此任何人都可以循环 9999 次来找到我的密钥并解密我的文本。我在这里加密的数据是一条短信。

有什么办法可以避免这种情况吗?

【问题讨论】:

    标签: encryption cryptography key aes


    【解决方案1】:

    不,没有。您可以随心所欲地向 PBKDF 添加盐和迭代计数,但最终攻击者只有 10K 次尝试通过,这只是花生。

    做到这一点的唯一明智方法是拥有一个单独的实体来执行解密。它可以将自己的秘密熵添加到密钥种子中,并使用强密钥。然后该实体将对使用 PIN 的身份验证进行限制。

    您可能需要仔细查看您的系统的安全架构,看看是否可以更改某些内容来避免此问题(访问控制、其他登录凭据等)。

    【讨论】:

    • 我必须加解密和通讯的两端(手机和短信服务器),我不知道怎么做限制,因为任何知道源代码的人都可以实现它在某个地方并使用蛮力,我想我应该切换到 RSA。
    • 谢谢,但我是密码学的初学者,我不明白你关于质询响应协议的建议,但目前我认为 RSA 比 AES 更安全。
    • 它当然是用于将数据加密到服务器,但我已经删除了一些 cmets,因为我仍在弄清楚用例。只需将公钥分发到安全的密钥库中(例如在您的应用程序中)并使用它进行加密。仅将 RSA 与 PKCS v1.5 填充一起使用。如果可能,您可以使用从 PIN 派生的密钥来验证您的数据。谨防填充预言和重放攻击。抱歉,这里没有简单的答案。
    • 感谢您的回复,但我打算做的是,将客户端的私钥和服务器的公钥存储在客户端。在服务器端,我将存储他的私钥和客户端的公钥,所以两个参与者将加密和解密,这是正确的吗?另一个限制是我使用 SMS 作为通信通道,因此解密数据的长度不能比原始数据长(每条 SMS 仅 160 个字符),我认为填充会向密文添加更多数据:(
    • 嗯,是的,至少您正确掌握了非对称密钥的功能。不过,它的意义远不止于此。
    【解决方案2】:

    编辑:删除了我关于添加盐的评论,指出这一点的每个人都是正确的。您也许可以增加解密的时间复杂度,这样暴力攻击会花费非常长的时间。

    编辑:阅读:https://security.stackexchange.com/questions/6719/how-would-you-store-a-4-digit-pin-code-securely-in-the-database

    【讨论】:

    • 链接很棒,但正如链接所暗示的,仅添加盐对只有 10K 条目的搜索空间没有帮助,至少对于 storage 没有帮助。
    • 这对我没有帮助,我发送的加密数据不存储它。
    【解决方案3】:

    您可以采取与 ATM 机相同的方法:在某人输入错误的 PIN 三次后,该帐户暂时无效(您也可以设置一个沿用超时)并且该用户必须采取某种行动(例如,单击电子邮件中的确认链接)以响应他/她的帐户。

    您还必须使用该用户的独特属性(最好是在该用户注册时随机生成的字符串)对 PIN 进行加盐。我还建议为所有硬编码或从配置文件读取的哈希添加额外的盐(如果您的数据库受到损害但其余部分没有受到损害,则很有用)。

    这种方法仍然使您容易受到有人选择单个 PIN 并暴力破解用户名的攻击。您可以通过对 IP 地址应用相同的策略来对此采取一些对策,但这仍远非最佳。

    编辑:如果您的目标是加密流量而不是散列 PIN,您应该使用 HTTPS 或其他基于公钥加密的协议,这样您就不必使用您的 PIN 来加密这些 SMS。

    【讨论】:

    • 我不知道我该怎么做!我有一个将加密的 SMS 发送到服务器的移动应用程序,因此中间人可以拦截我的消息并进行暴力破解,因为他知道我正在使用 AES 以及我如何使用它。
    • 啊,我以为您想将该加密用于其他目的。我已经扩展了我的答案。
    • 我不建议自己实施任何加密算法,因为这些算法可能容易受到侧信道攻击或可能包含可被利用的错误。您的平台可能有一些非常可靠且经过大量测试的实现,因此请使用它们。
    【解决方案4】:

    假设您只能输入 4 位数字,请在应用程序中使用发件人的电话号码或类似的东西填充密钥长度?

    【讨论】:

    • 黑客也会这样做,因为他知道我的电话号码,不是吗?
    • 你能解释一下为什么你只能使用 4 位数字键吗?
    • 这是一个系统规范,我必须可以通过电话编辑该代码(交互式语音响应),所以它只能是数字。
    • 然后正如史蒂夫所说,在代码中添加只有你知道的盐,这样它就不是直接的 AES 解密。出于兴趣,您是否存储了这些数据?还是发送?
    • 不,我发送它,服务器必须解密它,读取它,然后给我发回一个加密的答案,我应该再次解密它才能读取它
    猜你喜欢
    • 1970-01-01
    • 2015-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多