现代密码学--结课论文---《70年代公钥传奇》
摘要:在70年代之前,密码学主要被军方用于通信保护。密码学的主要研究也是由情报机构(GCHQ、NSA等)或IBM等企业运营的获得许可的实验室中进行。这时公众几乎无法获得密码学知识,直到由三位密码学家Hellman、Diffie和Merkle出版的公开密码学打破了密码学的垄断,同时也引起了密码学的第一次大热潮。
关键词:密码学;通信保护;垄断;热潮
1 公共密码学的定义和工作原理
密码学是保护信息免受敌人或者无权获取信息的人截取的作用,即如何在敌人存在的环境中进行正常通信。它是确保信息真实性和完整性的底层机制,也是使区块链和加密货币变成现实的原因之一。公钥加密是加密使用的一种范式转变,现在依然是大多数加密货币协议采用的加密方式之一。从本质上讲,公钥密码学允许人们通过不安全的渠道将加密信息发送到公共地址,只有有权访问公共地址对应的私钥的人才能获得解密信息。私钥还用于签署和验证发送的信息,以验证其来源的合法性。通过区块网络,人们可以将比特币发送到公共地址并查看它持有多少比特币,但只有拥有相应私钥的所有者才能使用比特币进行交易。密码学的第一次大热潮,如何摆脱政府对密码学知识的控制?
2 Hellman一个雄心勃勃的年轻人
Hellman从小就是一个书呆子,他的父亲是当地一所高中的物理老师,所以他从小就能接触到科学知识。他回忆说:“我父亲的书架上有一些书,我时常会阅读它们。包括我现在还记得的一本书《Ganot's Physics》,1890年代的旧物理文本。显然即使对父亲来说也算是老古董了,但我很喜欢。所以我对科学感兴趣,但并不是从开始就特别喜欢密码学。”。
Hellman并非从小开始接触密码学,也许他在某个时段学习过密码学,但直到后来他才与计算机科学产生了很多的联系。甚至说他在早年就已经规划好自己的未来的生活。他在1967年在斯坦福大学获得电气工程硕士学位,并在学校里表现出色,度过了非常愉快的时光。他设想自己将在35岁结婚,在此之前环游世界,在大型企业中从事管理工作。
22岁时,他为了加深自己管理方面的研究,选择攻读他在研究决策逻辑相关的思维方式研究,并以此来完成博士学位。令人意想不到的是,攻读博士学位的第一年他就结婚了,这并没有让他放慢脚步,在攻读博士学位的第二年,他就发表了著名的论文:《Learning with Finite Memory》。
到目前为止,他坚持自己的人生计划,按照自己的梦想为IBM工作,选择可环游世界和拥有更多财富的生活方式。
Hellman去了IBM在纽约的Thomas J. Watson研究中心工作,他当时的工作跟密码学毫不相关。但IBM有专注于密码学研究的部门。通过密码学研究中心部门,他认识了一个名叫Horst Feistel的密码学研究员,在此之后,他们经常共进晚餐,讨论密码学和一些还未解决的研究问题。Feistel为政府设计数据加密标准(DES)。在Feistel的介绍下,Hellman开始接触密码学,Feistel也是对Hellman早期影响最大的引路人之一。
当他妻子怀孕时:他开始思考一个不得不面对的永恒困境:家庭和自由?他问自己“我是真的想要环游世界还是想要更多的时间陪伴家人?”
最终他选择了家庭,因此他去了麻省理工电子工程系当助理教授,在那里他遇见了麻省理工电子工程系主任Peter Elias,另一个影响重大的引路人。Peter Elias与信息论之父Claude Shannon合作发明了二战时期使用的现代密码学。Hellman与Elias成为了很好的朋友,这也加深了他对密码学的迷恋。
1971年Hellman回到了斯坦福,到了年底,他开始从事密码学研究。他在斯坦福的朋友和同事都不支持他这样做的决定,他们担心美国政府对密码制作和破解机构的封锁政策。但Hellman相信密码学未来将具有重要的商业价值。1973年,Hellman进行了第一次的密码学演讲,并发布了第一份加密技术报告,引起了大众的关注,这时一位名叫Whitfield Diffie研究员联系到了他。
3 Whitfield Diffie一个聪明到无聊的年轻人
与Hellman不同,Diffie早在10岁时就第一次接触到密码学。他的父亲是一位历史教授,并从当地图书馆带回了一些关于密码学的书籍。Diffie喜欢数学,但讨厌学校,因此即使大家都认为迪菲非常聪明,他却从未想过像父亲所希望的安排自己的生活,迪菲只是勉强毕业。尽管他在学校表现的并不出色,但他很聪明,并在麻省理工的入学考试中取得了优异的成绩。他曾尝试如何自学编程,但认为这是非常低级的学习,觉得很是无聊,他选择把大部分时间都花在了学习数学上。
Diffie刚毕业的时候,美国政府开始征召年轻人参与越南战争,但他对战争并不感兴趣,无奈之下,转而从事软件开发和做其他低级的工作。与此同时,他还开始在麻省理工的Project MAC的人工智能实验室做兼职,该工作室是由两个非常聪明的人在管理:Marvin Minsky和John McCarthy。
Diffie与McCarthy保持着良好的关系,并从身上学到了很多。Diffie和当时的许多人都不知道的是,McCarthy后来被视为人工智能之父,AI这个词就是由他创造的。McCarthy相信,学习的每一个过程和智能生物的任何特征原则上都可以精确地描述出来,然后可以通过制造机器来模拟这个过程。McCarthy非常关注未来,他相信智能的概念将会在未来的某一个时刻出现。在他的指导下,Diffie对网络、电子密钥和身份验证有了深入的了解,后来Diffie跟随McCarthy来到斯坦福,加入了新成立的人工智能实验室(SAIL:Stanford Artifical Intelligence Laboratory)。
在斯坦福大学期间,Diffie阅读了David Kahn出版的《The Codebreakers: The Story of Secret Writing》。这本书总结了从古埃及到当时的密码学历史,深刻地影响了Diffie对于隐私的信念。他在1973年离开SAIL,继续专注于密码学的研究。第二年他在全国各地参与活动,与不同的专家一起讨论密码学的未来。他说:我正在做我擅长的事情,那就是在图书馆里寻找稀有手稿,开车四处走动,拜访大学的朋友。
1974年,他访问了IBM Thomas J. Watson实验室,与密码学研究团队会面。当时向Hellman介绍密码学Horst Feistel领导这个团队。在当时,Diffie无法了解很多被NSA列为机密的工作。后来他被推荐给了Martin Hellman,他正好也在研究类似的密码学。
4 Hellman与Diffie的相遇
1974年秋天,Diffie出现在我的门前,我永远都不会忘记那一天,Hellman在2011年曾回忆道。通过介绍,他们约定在Hellman家中会面。Diffie下午就来了,晚上11点才离开。在这几个小时的时间里,他们讨论地越来越忘我,从密码学到哲学。Hellman讲述说,找到志同道合的朋友真的很重要,在不被理解的环境里工作是一种极大的负担。不久之后,Diffie在当地的一个研究小组工作,平时他会花更多的时间和Hellman一起研究密码学。
1975年初,美国政府制定了数据加密标准DES,这是第一个被批准用于公共和商业用途的加密协议。在NSA的推动下,金融服务业和其他需要强加密的商业部门(SIM卡、网络设备、路由器和解调器)等陆续采用DES。
在DES公布之前,密码学和军用性质的物品一样,必须获得许可才能被采用,或从事相关的工作。DES是第一次公开批准使用这种技术。
在1972年美国国家标准与技术研究院NIST进行的一个研究中,人们意识到了对大众加密密码的需求。1973年和1974年人们开始向美国各地的研究中心提议设计出适用于大众生活的加密密码。1974年IBM构思出了一种名为Lucifer的加密密码。
Lucifer是由IBM密码学研究部门研究员Horst Feistel领导设计的。该密码是对先前开发的密码的改进,但符合NSA的设计要求。在经过NSA的实际使用之后,NSA希望将密钥大小从64位减少到48位,这意味着只需要更少的处理能力即可加密和解密。在经过讨论之后,最终密钥的大小减少到56位。
Hellman和Diffie最初是张开双臂拥抱DES的,因为他们认为这是将密码学带入公众视野的一大步。但他们发现缩短密钥的长度非常容易受到攻击,无法保障信息的安全。更重要的是,IBM研究团队指责NSA擅自篡改了密码。在密码被华盛顿进行审批返回后,研究人员发现密码被更改过。
在70年代,人们普遍对政府不信任,这种警惕源于二战前后集权主义政府对民众的控制。在1984有许多探讨关于政府监督、社会控制和个人自由的言论热潮,这场讨论也反映了公众对政府角色的警惕。这种情绪一直持续到到60年代,期间因肯尼迪遇刺、古巴导弹危机、黑人权利和同性恋权利等发生了影响重大的社会政治运动。70年代水门事件加剧了这种恐慌,尼克松总统授权窃听民进党全国委员会总部的会议。对于公众来说,他们的恐慌正在慢慢变成现实。
人们甚至相信美国国家安全局已经建立了不为公众所知的获取信息的方式。
5 Merkle一个发挥关键作用却还未察觉的年轻人
DES发布后不久,Hellman和Diffie发布了一篇名为Multi-User Cryptographic Techniques的技术论文,他们很快了解到来自伯克利的23岁计算机科学专业的学生Ralph Merkle同样在研究这个问题。
在遇见Hellman和Diffie之前,Merkle就已经开始研究公钥加密概念了,这就是后来的Merkle谜题。他在学习计算机科学课程时偶然提出了一个问题:当敌人已经知道所有的信息时,如何重建新的安全通信?他把这个问题当成了这门课程的研究主题开始研究。
当我想到窃听者知道一切并且在被监听的情况下,你似乎无法建立安全性。所以我第一个想法是,我要尝试证明它是不可能的。但当我开始证明这种情况下无法建立安全性时,我尝试了很多次,最终发现无法证明它是不可能的。
然后我想了想,既然我不能证明你做不到,我就反过来想办法去做。在我试图证明无法做到的过程中,我很清晰证明过程中存在的一些缺陷。当我开始证明它是能够做到的时候,我尝试用各种办法来完善存在的缺陷,当我清楚如何做到时,这一切发生的非常迅速。我可以找到一个即使敌人、闯入者、倾听者知道一切的前提下通过加密密钥来建立安全的通信路线的方式。
由于Merkle并没有了解过密码学的历史,也没有学习过密码学的理论知识,所以他并不认为这个问题是无法解决的。他把所有的想法写下来,然后当初分享,却遭到了很多人的质疑和否定。
计算机安全课的老师听不懂他的作业内容,叫Merkle停止这种天真的想法。计算机科学期刊拒绝发表他的研究内容,因为编辑认为他的工作内容并不在当时密码学思想的主流当中。
在机缘巧合之后,Merkle与一位名叫Peter Blatman的计算机科学家分享他的想法,后者立即注意到了他的研究价值。Merkle不知道Blatman是Diffie的朋友,在Diffie邀请Blatman去斯坦福参加密码学聚会的途中,Blatman简要概述了Merkle正在解决的问题。
显然,Diffie多年来一直在为同一个问题着迷,在听说某个年轻的计算机科学专业学生如何潜在地解决了这个问题后,他先是直接否认了这种可能性,然后开始对这种解决方案的可能性感到兴奋。随后Diffie发给了Merkle一篇最近提交的论文,主要内容是在假设可能的情况下探索公钥加密的应用。
在读完寄来的论文之后,Merkle把自己的论文也寄了过去。Hellman和Diffie看完之后,深受启发,完全转变了研究思路。尽管Merkle年轻且完全缺乏密码学知识,但他的创作力已经解决了公钥分配问题。这位年仅23岁的年轻人设法实现了诸多学者多年来努力未能做到的事情。
但是Hellman和Diffie发现他的解决方案效率低下,凭借他们对密码学的理解,很快就找到了解决密钥分配问题更加高效的方案,并提出了公钥密码学新的发展方向。很快,他们的研究内容被写成一篇论文,被称为密码学的新方向。
Merkle也接受了Hellman的邀请,前往斯坦福大学,并作为博士生在Hellman手下工作。
6 密码学的新方向
在1976年11月发表的《密码学的新方向》论文中,主要讨论了密码学、公钥密码和促进认证通信协议的基本问题。
Merkle因其工作而受到赞誉,但最终通信协议被命名为:Diffie-Hellman密钥交换。然而尽管如此,在1977年公钥加密获得专利时,Merkle被认为是三位发明者之一,Diffie认为默克尔可能是公钥传奇中最具创造力的角色。
在这篇文章当中,讨论的概念就是用于设计和保护我们今天所使用的区块链。最后他们表明本文的目的之一:激励其他人在这个令人着迷的领域工作,这个几乎被政府完全垄断的领域——密码学新方向。
Hellman他们的工作打破了政府对密码学知识的控制,公众也第一次获得使用强大的加密技术的机会。由于对政府的DES密码的不信任,论文中的技术引发了公众对加密学和加密研究的第一次大浪潮。
后来知道Hellman、Diffie和Merkle并不是公钥密码学的第一批构思者,它的一种形式最初是由英国情报机构(GCHQ)的研究人员创建并应用于通信的,但它一直都属于机密,无法被公众所知道。想象一下,如果这三位从未公开过公钥加密,我们的世界可能会非常不同。
Hellman、Diffie和Merkle发表的论文成功地激发了新一轮的创新浪潮。这场浪潮将持续数十年,而政府机构却对他们的发现不加理睬,这种对比非常突出了密码学和其他科学领域中开放式协作工作的重要性。
正如论文第一行开头写到的那样,我们今天站在密码学革命的边缘。Merkle作为Hellman和Diffie的学生,在80十年代发明加密散列技术,继续影响密码学的发展。
7 总结
Hellman、Diffie和Merkle三位密码学家打破了公众和密码学之间的障碍,80年代被称为David Chaum的密码学将继续直接建立在他们的工作之上,将匿名通信、支付以及去中心化服务的需求概念化。显然只有通过70年代三位密码学家的奉献,David Chaum的工作才变得可能。
相关文章:
现代密码学--结课论文---《70年代公钥传奇》
摘要:在70年代之前,密码学主要被军方用于通信保护。密码学的主要研究也是由情报机构(GCHQ、NSA等)或IBM等企业运营的获得许可的实验室中进行。这时公众几乎无法获得密码学知识,直到由三位密码学家Hellman、Diffie和Mer…...
cf1348B phoenix and beauty(双指针滑动窗口的构造)
C 题面 Problem - 1348B - Codeforces 输出标准输出 凤凰网喜欢美丽的数组。如果一个数组中所有长度为k的子数组 的子数都有相同的总和,那么这个数组就是美丽的。一个数组的子数组是任何连续元素的序列。 凤凰网目前有一个数组a 的长度为n . 他想在他的数组中插入…...
一文读懂JAVA的hashCode方法:原理、实现与应用
目录 一、概述二、实现原理和重写规则三、如何重写hashCode方法3.1 Objects.hash()方法3.2 Apache HashCodeBuilder.3.3 Google Guava3.4 自定义哈希算法四、hashcode和equals的联系五、注意事项和建议5.1 注意事项5.2 建议六、总结一、概述 在Java中,每个对象都有一个hashCod…...
RocketMQ部署
一 安装mq 1.下载RocketMQ 本教程使⽤的是RocketMQ4.7.1版本,建议使⽤该版本进⾏之后的demo训练。 运⾏版:https://www.apache.org/dyn/closer.cgi?pathrocketmq/4.7.1/rocketmq-all-4.7.1-bin-release.zip 源码:https://www.apache.org…...

43岁程序员,投了上万份简历都已读不回,只好把年龄改成40岁,这才有了面试机会,拿到了offer!...
40多岁找工作有多难? 一位43岁的程序员讲述了自己找工作的经历: 80年,大专,目前没到43周岁,年前被裁,简历上的年龄是42岁,两个多月投了上万份简历,99.5%是已读未回。后来改变策略把简…...
MySQL分区表相关知识总结
1.创建分区表: create table t(col11 int null, col22 …) engineinnodb partition by hash(col33) partitions 44; create table t(col11 int null, col22 …) engineinnodb partition by range(id) (partition p0 values less than (10), partition p1 values les…...

outlook邮箱pc/mac客户端下载 含最新版
新的 Outlook for Windows or mac 为 Outlook 应用带来了最新功能、智能辅助功能和新的新式简化设计。 你可以根据自己的风格定制它,并使用新的 Outlook for Windows/mac 执行更多操作! 览版,与我们一起开始旅程,并帮助我们塑造新…...
缓存雪崩、缓存穿透、缓存击穿分别是什么?如何解决?
缓存中存放的大多都是热点数据,目的就是从缓存中获取数据,而不用直接访问数据库,从而提高查询效率 缓存雪崩 概念 指缓存在同一时间大面积失效,后面的请求直接访问数据库,导致数据库短时间内压力过大而崩溃ÿ…...
VBA实战篇学习笔记02 Err错误处理
文章目录 专题VI 错误处理课时38 常见错误类型错误代码13 :类型不匹配错误代码91: 对象变量或者with变量未设置错误代码1004: 视具体错误类型而变化 课时39 Err错误处理On Error Resume Next :Resume语句:Resume Next语句:未知错误:Exit SubOn Error Goto 0 专题VI 错误处理 课…...

【Git】拉取代码/提交代码
1.从将本地代码放入远程仓库 (如果有分支的情况) [git checkout xx切换分支后 git add . 将本地所有改动文件新增 commit之后 git push(将代码全部提交)] 分支操作 #查看分支 git branch #创建分支 git branch test #切换分支 git checkout test #修改代码 #提交代码git ad…...

产品预览 | 系统仿真与三维专业场仿真融合——MWORKS模型降阶工具箱
1 引言 近二十年来,数字化技术迅猛发展,以美国和中国提出装备数字工程为标志,人类迈入全新的数字化时代。装备数字化需要对装备的运行状态和行为进行准确的模拟和预测,这就需要利用系统仿真技术。系统仿真技术能够综合考虑装备的…...
我们都遇到过的这些ajax代码到底什么意思?
hello,我是小索奇,本篇文章给大家带来ajax中常用的一些代码,为什么写这些呢? 因为小索奇也看黑马、尚硅谷等老师的视频,在学习java的时候经常会介绍ajax,导致很多不了解的伙伴一脸懵然,以防万一…...

TiDB实战篇-TiCDC
目录 简介 原理 使用场景 使用限制 硬件配置 部署 在安装TiDB的时候部署 扩容部署 操作 管理CDC 管理工具 查看状态 创建同步任务 公共参数 CDC任务同步到MySQL实战 同步命令 查看所有的同步任务 同步任务的状态 管理同步任务 查看一个同步信息的具体情况 …...
ElasticSearch第十七讲 ES索引别名的使用
索引别名 ES中可以为索引添加别名,一个别名可以指向到多个索引中,同时在添加别名时可以设置筛选条件,指向一个索引的部分数据,实现在关系数据库汇总的视图功能,这就是ES中别名的强大之处。别名是一个非常实用的功能,为我们使用索引提供了极大的灵活性,许多ES的API都支持…...

第二个机器学习应用:乳腺癌数据集在决策树模型上的挖掘
目录 决策树优化与可视化 1 决策树分类 2 决策树可视化 3 显示树的特征重要性 特征重要性可视化 决策树回归 1 决策树回归 决策树优化与可视化 1 决策树分类 from sklearn.datasets import load_breast_cancer from sklearn.tree import DecisionTreeClassifier from sk…...

前端canvas截图酷游地址的方法!
前情提要 想在在JavaScript中,酷游专员KW9㍠ㄇEㄒ提供用HTML5的Canvas元素来剪取画面并存成SVG或PNG。 程式写法(一) 首先,需要在HTML中创建一个Canvas元素<canvas id"myCanvas"></canvas> 在JavaScript中,使用canv…...
2018年入学,2021年入职
2018年的春天,凌晨紧张地查着考研成绩,运气好,384,远远超出了我的预期“能进复试就行”,秉承着“尽人事,知天命”的格言,坚持复习完,坚持到考试最后一秒。 在考试之前,我…...

python+nodejs+ssm+vue 基于协同过滤的旅游推荐系统
本文首先介绍了旅游推荐的发展背景与发展现状,然后遵循软件常规开发流程,首先针对系统选取适用的语言和开发平台,根据需求分析制定模块并设计数据库结构,再根据系统总体功能模块的设计绘制系统的功能模块图,流程图以及…...

【STL十四】函数对象(function object)_仿函数(functor)——lambda表达式
【STL十四】函数对象(function object)_仿函数(functor)——lambda表达式 一、函数对象(function object)二、函数对象优点三、分类四、头文件五、用户定义函数对象demo六、std::内建函数对象1、 算术运算函…...
如何写出高质量的前端代码
写出高质量的前端代码是每个前端开发人员的追求。在一个复杂的项目中,代码质量对于项目的可维护性、可扩展性和可读性都有很大的影响。本文将介绍一些如何写出高质量前端代码的技巧和最佳实践。 一、注重代码结构和组织 1.1 遵循一致的命名规范 命名规范是编写高…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error
在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...
Kafka主题运维全指南:从基础配置到故障处理
#作者:张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1:主题删除失败。常见错误2:__consumer_offsets占用太多的磁盘。 主题日常管理 …...

[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG
TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码:HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...