javascript - 使用错误密钥的 AES 解密。如何隐藏密钥错误的事实?
问题描述
我正在使用CryptoJS。当我用错误的密钥使用 AES.decrypt 时,我注意到它通常有一个负数“sigBytes”,这告诉我我使用了错误的密钥。为什么这可能?它与无效填充有关吗?我尝试了不同的AES模式,同样的问题。AES甚至有可能不承认失败吗?
是否有标准的加密算法可以解密为随机字节而没有成功或失败的指示?
解决方案
是的,基于流的密码通常不会报告失败。基本上,如果您知道密文大小与明文大小相同,则无法报告失败。这是因为通用密码通常接受任何消息,这意味着对于特定位长度的每个明文只有一个密文,反之亦然,与使用的密钥无关。这种 1:1 映射称为伪随机排列或 PRP。由于每个密文都返回有效的明文消息,因此不会返回错误。
因此,所有流密码(例如 ChaCha)和块密码流模式都将具有此属性。流模式是不需要填充的模式,因此与明文大小相比,密文大小不应扩大。当然,如果您主动指出需要填充,则可能会破坏此特定属性。目前最常见的计数器模式可能是 CTR 模式,也因为它用于几乎所有的认证模式。CFB/OFB 通常仅用于遗留用途。
请注意,对手可能仍会根据明文中的信息获取信息。通常即使知道很少的明文也可以找到密钥(例如,JPEG 标头很容易成为足够的知识)。对错误明文的其他操作也可能很容易表明失败(将接收方变成所谓的明文预言机)。
推荐阅读
- javascript - 如何使用 Graphql 查询特定节点?
- python - 将标签列添加到 DataFrame
- azure - Azure 多分支管道
- python - TooManyRequests: 429 Too Many Requests while running tweepy
- javascript - 如何将对象值加入数组?
- ios - Swift iOS,如何使阴影出现在另一个视图之上?
- android - 如何使我的应用程序不会因缩放而在某些屏幕尺寸上中断
- python - 从 S3 读取 csv 的最佳方法,将每一行处理为 json 并发布到 kafka 主题
- javascript - Internet Explorer 浏览器:TextAudio() 方法未定义错误 & 'SpeechSynthesisUtterance' 未定义
- php - 使用php和mysql将具有相同纬度和经度的标记的所有数据显示到1个info_window中