encryption - 密码可以比原始文本短吗?
问题描述
我正在阅读 Jean-Philippe Aumasson 的《Serious Cryptography》一书,在这本书的开头有一条注释说:
“对于某些密文,密文与明文大小相同;对于另一些,密文略长。但是,密文永远不能比明文短。”
这对我来说似乎不正确,因为我不明白为什么密码也不能压缩它正在加密的文本。例如,我可以创建一个密码,其中每个字母映射到字母表中的 1 个字母,除了单词“THE”映射到 1,单词“IS”映射到 2。
使用此密码对文本“The cat is old”进行加密将产生“1 dbu 2 pme”,它比原始文本短。有什么我想念的吗?
编辑:我还想限制我接受的纯文本输入只包含字母。
解决方案
通常加密作用于无法压缩的输入。应该可以输入任何类型的消息。由于大多数现代密码都是面向位/字节的,这意味着所有可能的特定位/字节大小的消息都是可能的。
请注意,现代密码应该是 IND-CPA 安全的。这意味着任何相同大小的消息都应该返回无法区分的密文。如果您有一组特定的消息可以增加密文,那么显然它们可以与其他消息区分开来。而且由于鸽子洞原理,当然不可能对所有可能的消息都有更小的密文。
如果您的消息集较小,可以使用压缩算法来压缩特定类型的消息。但是,您应该记住,生成的密文的大小可能会将信息泄露给对手。对压缩音频流或 HTTPS 连接的攻击当然不仅仅是理论上的威胁,它们都太实际了。
请注意,即使没有压缩,密文大小也总是会泄漏有关明文的信息。由于上述原因,明文所包含的信息毕竟必须少于特定密文大小所能编码的信息。
推荐阅读
- reactjs - localhost:3000 已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。REACT 和 DJANGO
- java - 将文本视图移动到文本视图的末尾
- r - 如何将列的特定值与R中的特定值相乘
- javascript - 尝试使用 this.activateRoute.snapshot.params.id 时,Ctx.post 未定义
- mysql - AWS Lambda 会自动关闭 MySQL 连接吗?
- rest - Express REST API 和 multer 单文件更新中间件的单元和集成测试
- raku - 有没有办法只使用预编译模块
- web - 有效载荷格式 FCM 推送通知 web
- laravel - Laravel - 如何使用 Laravel 权限创建基于公司的用户角色
- forms - Quasar (Vue.js) q-form 不验证子组件中的输入