Encryption 使用AES使用弱密钥加密

Encryption 使用AES使用弱密钥加密,encryption,cryptography,key,aes,Encryption,Cryptography,Key,Aes,我使用AES加密一些数据,问题是我必须使用只包含4位数字的密钥(如pin码),因此任何人都可以循环9999次来查找我的密钥并解密我的文本。我在这里加密的数据是一条短信 有没有办法避免这种情况?假设您只能输入4位数字,在应用程序中键入发件人的电话号码或类似的内容?编辑:删除了我关于添加盐的评论,指出这一点的每个人都是正确的。您可能会增加解密的时间复杂性,这样暴力攻击将花费令人望而却步的时间 编辑:读一下:不,没有。你可以随心所欲地向PBKDF中添加盐和迭代次数,但最终攻击者只有10K次尝试通过,这

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


有没有办法避免这种情况?

假设您只能输入4位数字,在应用程序中键入发件人的电话号码或类似的内容?

编辑:删除了我关于添加盐的评论,指出这一点的每个人都是正确的。您可能会增加解密的时间复杂性,这样暴力攻击将花费令人望而却步的时间


编辑:读一下:

不,没有。你可以随心所欲地向PBKDF中添加盐和迭代次数,但最终攻击者只有10K次尝试通过,这是微不足道的

唯一合理的方法是使用一个单独的实体来执行解密。它可以将自己的秘密熵添加到密钥种子中,并使用强密钥。然后,实体将对PIN的身份验证设置限制


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

您可以采取与ATM机相同的方法:在有人输入三次错误的PIN后,该帐户暂时无效(您还可以设置一个长时间超时),该用户必须采取某种措施(例如,单击电子邮件中的确认链接)才能对其帐户作出反应

您还必须使用该用户的唯一属性(最好是该用户注册时随机生成的字符串)对PIN进行加密。我还建议在硬编码或从配置文件读取的所有哈希中添加一个额外的加密(在数据库受损的情况下很有用,但其余的则不会)

这种方法仍然使您容易受到攻击,其中有人选择一个PIN并强制使用用户名。您可以通过对IP地址应用相同的策略来对此采取一些对策,但这仍然远远不是最优的


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

黑客也会这样做,因为他知道我的电话号码,不是吗?你能解释一下为什么你只能使用4位密钥吗?这是一个系统tem规范,我必须能够从电话中编辑代码(交互式语音响应),所以它只能是数字。然后正如steve所说,在代码中添加一个只有你知道的盐,这样它就不是一个直接的AES解密。出于兴趣,你是存储这些数据?还是发送它?不,我发送它,服务器必须解密它,读取它,然后返回一个加密的答案,我应该再次解密以读取它。我必须加密并解密一个数据d通信两端(手机和短信服务器),我不明白我该如何限制,因为任何知道源代码的人,都可以在某处实现它并使用蛮力,我认为我应该改用RSA。谢谢,但我是密码学的初学者,我不理解你关于质询-响应协议的建议,但就我而言,现在我认为RSA比AES更安全。它当然是用于将数据加密到服务器,但我删除了一些注释,因为我仍在了解使用情况。只需在安全密钥存储中分发公钥(例如,在应用程序中)并使用该密码进行加密。仅使用带有PKCS v1.5填充的RSA。如果可能,您可以使用从PIN派生的密钥对数据进行身份验证。小心填充oracle和重播攻击。抱歉,这里没有简单的答案。感谢您的回复,但我计划做的是,将客户端的私钥和服务器的公钥存储在客户端。在服务器端,我将存储他的私钥和客户端的公钥,因此两个参与者将加密和解密,对吗?另一个限制是,我使用SMS作为通信通道,因此解密的数据不能比原始数据长(每个SMS仅160个字符),我认为填充会在密文中添加更多数据:(好吧,是的,至少你正确地理解了非对称密钥的功能。不过,它的功能远不止于此。链接很棒,但正如链接所表明的那样,仅仅添加一个salt对只有10K条目的搜索空间没有帮助,至少对存储没有帮助。在我的情况下,它没有帮助,我发送加密数据,而不是存储它。我不知道我该怎么做。)我有一个移动应用程序,可以向服务器发送加密短信,这样中间的人就可以截取我的信息并使用暴力手段,因为他知道我在使用AES以及我是如何使用AES的。啊,我以为你想将加密用于另一个目的。我扩展了我的答案。我不建议实施任何加密加密算法本身,因为这些算法可能容易受到旁道攻击,或者可能包含可利用的漏洞。可能有一些非常可靠且经过大量测试的实现可用于您的平台,所以请使用这些实现。