密码学是科学而非工程学

简介: 托马斯.普塔切克曾经发过一条Twitter“如果你不是编写攻击代码的时候学习的密码学,那么你可能根本没有在学密码学”。 从Twitter上对这条信息的关注及其引用数来看,它似乎得到了很多人的认同。尽管我很尊重托马斯,但我绝对不同意他的观点。我认为学习密码学,不仅不需要写代码,而且编写攻击代码对于学习现代密码学根本毫无用处。学习现代密码学最好的方式是研究数学论证。

image.png

托马斯.普塔切克曾经发过一条Twitter“如果你不是编写攻击代码的时候学习的密码学,那么你可能根本没有在学密码学”。 从Twitter上对这条信息的关注及其引用数来看,它似乎得到了很多人的认同。尽管我很尊重托马斯,但我绝对不同意他的观点。我认为学习密码学,不仅不需要写代码,而且编写攻击代码对于学习现代密码学根本毫无用处。学习现代密码学最好的方式是研究数学论证。


如果我们仍然是处在20世纪90年代的话,我会同意托马斯的观点。当时的密码学充满了漏洞,你能想到的最浪漫的事就是了解你的工具是如何崩溃的,因为之后你就可以去解决它们的问题。那时,DES和RC4加密算法,尽管有很多已知的缺陷,却被广泛地使用;那时,人们避免使用CTR模式去转换块密码到序列密码,因为他们担心如果所提供的输入数据块中包含有很多相同(0)数据的话,脆弱的块密码会被破解;那时,人们关心块密码的误差传播能力,这关系到在密文中有少量的位发生未知变化后,对于解密数据的正确性会产生多少影响;那时,人们通常建议在加密数据前,先对其进行压缩,因为这将会“压缩”信息熵使得攻击者即使得到了秘钥也很难理解密文。因此,诞生于这个时代的SSL,有很多很多的缺陷,也就不足为奇了。


但是,从2010年开始密码学变得完全不同了。现在,我们开始有了可以高度信赖的的基础构件——比如:块密码已被确信是近似随机排列,并且已经从数学上证明它是足够安全的,可以抵御某些类型的攻击——比如:AES是已知的可以抵御差分密码分析的加密算法。我们以这些组件为基础,利用已被证明是不会引入漏洞的机制创建高阶的系统。例如,如果你在CTR模式下,使用类随机排列的块加密算法(比如,AES)对数据加密,从而产生一个有序的分组序列,并使用分组序列号作为CTR随机数,然后追加一个不易伪造的针对被加密数据的MAC地址(比如,HMAC-SHA256)及分组序列号,那么这些分组既可以保密数据,也可以禁止任何未声明的篡改(包括报文重放和重新排序)。一旦Keccak(即SHA-3)得到更加广泛地检验和信任,生活甚至会变得更加美好,因为它类似海绵的弹性结构去构造大量重要的加密构件,这已经被证明是安全的了。


在20世纪90年代的密码学就像是在尝试建一种桥,你花了许多时间确保你的桥能屹立不倒,并且为此忧心忡忡,即使有一些地方焊接的不够完美,一些螺丝生锈了,由于周期性的负载导致的金属疲劳,等等。虽然从理论上讲量身定制可以有很好效果,但你知道的实际总是与理论不符,因此这座桥实际是建在了安全与不安全的边界上,这使得桥的构造成本更高,也更加复杂。这就是纯粹的工程学。


但是,现代密码学是截然不同的,它不是在建造一座桥,而是像规划一个依靠重力辅助的星际的轨道。当然,这是复杂的,你必须正确的掌握所有的细节。但是,如果你做到了,一旦开始运行,使你无法到达目的地的唯一可能就是物理或数学定理改变了。现代密码学已经充分地发展到理论与实际相符,因此,相比通过观察桥的倒塌进行学习,理论学习就已经十分有效了,然后你需要遵从一个简单的原则:只做数学告诉你你能做的事情。这就是纯粹的科学。


我相信托马斯所做的事情,以及他在实施密码攻击上所积累的经验是非常有用的。毕竟,他是以挖掘应用缺陷为生,但他所遇到的绝大多数加密方法很可能是20世纪90年代的加密方法,那是一个已经逝去的时代。因此对于开发者,我推荐以一个更加现代化的方法学习密码学,那就是学习理论并设计出你能证明是安全的系统。

相关文章
|
2月前
|
人工智能 开发者
大喇叭:阿里云大模型就叫「千问」啦,英文名「Qwen」,忘掉通义吧~
阿里云大模型正式统一品牌为“千问”(Qwen),涵盖基础与专业领域模型,取代“通义千问”。通义实验室作为AI研发机构名称保留。即刻登录百炼平台或下载千问APP体验!
1532 1
|
6月前
|
Ubuntu Linux 开发工具
Linux操作技巧: 修改网卡名称方法详述
以上就是在Linux系统中修改网卡名称的详细步骤。希望这些信息能帮助到有此需求的用户。
687 12
|
6月前
|
开发框架 Java 测试技术
领域驱动设计(DDD)在中小型项目中的落地实践
本文探讨领域驱动设计(DDD)在中小型项目中的落地实践,涵盖核心概念如领域模型、聚合、限界上下文与事件驱动架构,并结合电商订单系统案例,展示分层架构、仓储模式与领域服务的实际应用,助力团队构建高内聚、易维护的业务系统。
1258 10
|
人工智能 Kubernetes Perl
2025 AI 原生编程挑战赛 术语说明与FAQ
本文档介绍了天池2025比赛的相关术语和一些疑问的解答。包括云监控平台(CloudMonitor 2.0)、日志服务(SLS)、观测数据租户(Workspace)、地域(Region)等平台与入口概念,并详解了Trace、Span、Log、Metric、Event等核心数据模型及其关键字段。文档还涵盖了PromQL告警规则、SPL日志查询、Kubernetes实体层级、诊断方法论术语等内容,同时提供了根因分析的命名规范、提交格式(JSONL)、时间窗口要求及常见问题解答,旨在帮助参赛者高效定位并解决系统故障。
1364 2
|
10天前
|
人工智能 开发工具 iOS开发
Claude Code 新手完全上手指南:安装、国产模型配置与常用命令全解
Claude Code 是一款运行在终端环境中的 AI 编程助手,能够直接在命令行中完成代码生成、项目分析、文件修改、命令执行、Git 管理等开发全流程工作。它最大的特点是**任务驱动、终端原生、轻量高效、多模型兼容**,无需图形界面、不依赖 IDE 插件,能够深度融入开发者日常工作流。
3250 9
|
3天前
|
人工智能 自然语言处理 文字识别
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
Qwen3.7-Max是阿里云百炼面向智能体时代推出的新一代旗舰模型,对标GPT-5.5、Claude Opus 4.7等闭源旗舰。该模型支持百万级token上下文窗口,具备顶级推理能力、多模态搜索与视觉理解增强、流式输出低延迟响应等核心优势,覆盖编程、办公、长周期自主执行等复杂场景。同时支持OpenAI接口兼容,便于系统快速迁移。用户可通过Token Plan团队或节省计划等订阅方式灵活调用,适合企业级高要求场景使用。
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
|
13天前
|
Shell API 开发工具
Claude Code 快速上手指南(新手友好版)
AI编程工具卷疯啦!Claude Code凭借任务驱动+终端原生的特性,成了开发者的效率搭子。本文从安装、登录、切换国产模型到常用命令,手把手带新手快速上手,全程避坑,30分钟独立用起来。
3295 23
|
7天前
|
人工智能 Linux BI
国内用 Claude Code 终于不用翻墙了:一行命令搞定,自动接 DeepSeek
JeecgBoot AI专题研究 一键脚本:Claude Code + JeecgBoot Skills + DeepSeek 全平台接入 一行命令装好 Claude Code + JeecgBoot Skills + DeepSeek 接入,无需翻墙使用 Claude Code,支持 Wind
2312 4
国内用 Claude Code 终于不用翻墙了:一行命令搞定,自动接 DeepSeek

热门文章

最新文章