Whitfield Diffie 的公钥突破如何让 HTTPS、加密消息和数字身份成为可能——用关键思想与实际应用来解释。

每次你登录银行、在网上购物或发送私密消息时,你都依赖一个简单的想法:你可以在别人可以监听的网络上共享信息,同时把重要部分保密。
现在这听起来理所当然,但过去这是个实际的问题。如果两个人想使用加密,他们首先必须约定一个共享的秘密密钥。安全地传递这个密钥常常需要可信的信使、预先约定的会面或受保护的公司网络——这些方式都无法扩展到互联网上成千上万的陌生人。
公钥密码学改变了规则。它引入了一种可以公开发布一个密钥(公钥)并同时保留另一个密钥私密(私钥)的方法。有了这种分工,你可以在不事先共享秘密的情况下开始建立安全关系。Whitfield Diffie 在把这一突破公之于众并解释其重要性方面起到了关键作用。
我们会把核心概念和你实际使用的东西联系起来:
你会得到通俗解释,并有足够的数学直觉来理解为什么这些技巧有效——但不会变成教科书。目标是让公钥密码学不再像魔法,而更像安静地保护日常生活的实用工具。
在公钥密码学出现之前,安全通信主要意味着对称加密:双方使用相同的秘密密钥来锁定和解锁消息。
把它想象成一个挂锁和一把共享钥匙。如果你我都有相同钥匙的复制品,我可以锁上一个箱子寄给你,你就能打开。只要我们事先都有那把钥匙,锁和开都是简单的。
问题显而易见:我们首先如何安全地共享那把钥匙? 如果我通过电子邮件发送,可能会被拦截;短信也一样。把它放进密封信封邮寄可行,但不适合大规模、频繁的情况——慢、昂贵、且不总是可靠。
这造成了一个“先有鸡还是先有蛋”的难题:
当只有少数人且可以提前交换密钥时,对称加密运作良好。但在开放的互联网环境中,它很快失效。
想象一个网站需要与数百万个访客建立私密连接。如果只用对称密钥,网站需要为每个访客准备不同的秘密密钥,并且要有安全的方式分发每一个密钥。密钥数量以及管理它们(创建、存储、轮换、撤销)的后勤工作会成为重大负担。
这并不意味着对称加密“糟糕”。它在其擅长的领域表现出色:对大数据量的快速高效加密(比如 HTTPS 中的大部分流量)。Diffie 出现前的挑战不是速度——而是缺少一个实用的方法,能让陌生人在不提前共享秘密的前提下达成一致。
在 1970 年代初期,安全通信主要依赖共享秘密。两个人如果想使用加密,必须拥有相同的秘密密钥,并找到安全的方式交换它。这个假设在小范围、受控环境中可行,但无法扩展到需要与陌生人安全通信的世界。
Whitfield Diffie 是一位对隐私和当时密码学实际局限感兴趣的年轻研究员。他与斯坦福的 Martin Hellman 建立了联系,他们的工作受益于学术界对计算机安全和网络日益增长的关注——这些领域正从孤立系统向互联走去。
这不是孤立天才的故事,而是恰当的想法遇上恰当的环境:研究者交换观点、做思想试验、质疑长期以来被普遍接受的“显而易见”的限制。
Diffie 和 Hellman 的突破在于意识到加密可以使用两把相关但不同角色的密钥而不是一把共享秘密:
它强大的地方不仅在于两把密钥的存在,而在于它们承担不同的功能。公钥用于安全分发,私钥用于控制与独占。
这重塑了密钥共享问题。与其安排秘密会面或可信信使去交换一把秘密钥匙,不如广泛发布公钥,同时保持安全。
这个转变——从“我们必须先共享秘密”到“我们可以用公开信息安全地开始对话”——是后来支持安全网页浏览、加密消息和现代数字身份系统的概念基础。
Diffie–Hellman(DH)是一种巧妙的方法,允许两个人在所有消息都可见的情况下创建相同的共享秘密。然后这个共享秘密可以被用作常规对称密钥来加密会话。
把 DH 想象成按某种方式混合配料,向前混合很容易,但“逆向分离”却极其困难。配方使用:
窃听者可以看到公共参数和双方交换的公有值。但仅凭这些公有信息,几乎不可能恢复任一私有值或计算出共享秘密。使用恰当的参数,逆向过程需要不切实际的计算资源。
DH 本身不对消息加密——它产生了让快速、日常加密成为可能的共享密钥。
公钥密码学之所以有效,是因为某些数学运算具有“非对称性”:做起来很容易,但若没有特定的秘密就极难逆运算。
一个有用的心理模型是“单向函数”。想象一个机器能把输入快速转换成输出,任何人都能运行这个机器,但仅凭输出要找回原始输入在实际中几乎不可能。
在密码学中,我们不依赖机器本身的保密性,而依赖于逆向需要解决一个被认为极其耗费计算资源的困难问题。
“困难”并不意味着永远不可能,而是指:
因此安全基于假设(数学家与密码学家对这些问题的信念)和现实实践(密钥长度、可靠实现与最新标准)。
许多公钥数学发生在“模”某个数的环境下——把它想成时钟。
在 12 小时制时钟上,若现在是 10 点再加 5 小时,你不是得到 15,而是回绕到 3。那种回绕行为就是模运算。
对大数进行重复的“回绕”操作会产生看似混乱的输出。向前运算(做算术)很快,向后推(找回起始值)在没有秘密捷径(比如私钥)的情况下可能非常缓慢。
这种“向前易、向后难”的差距是密钥交换与数字签名背后的动力。
当你在浏览器看到挂锁时,通常是在使用 HTTPS:这是你设备与网站之间的加密连接。如果每个浏览器都必须与每个服务器预先共享秘密密钥,网页就无法扩展到数十亿的安全连接。
公钥密码学解决了“第一次接触”问题:它让你的浏览器能与一个从未见过的服务器安全地建立共享密钥。
现代 TLS 握手是一个快速协商,建立隐私与信任:
公钥运算较慢,设计用于协商和认证,而非大体量数据。TLS 建立会话密钥后,会切换到快速的对称加密(如 AES 或 ChaCha20)来保护实际传输的内容。
如果你想要 HTTP 与 HTTPS 的通俗区别,请参见 /blog/https-vs-http。
数字签名是用于让消息可“证明”的公钥工具。当某人用他们的私钥对文件或消息签名时,任何人都可以用对应的公钥来验证该签名。
一个有效签名证明两件事:
这两者常被混淆:
两者可以单独使用。比如一次公开公告可以被签名(让人们信任它),但不加密(因为它需要被所有人阅读)。
数字签名出现在你可能每天使用的场景:
签名的关键优势是验证不需要共享秘密。签名者一直保管私钥,而公钥可以广泛分发。这种私钥用于签名、公开用于验证的分离,使得陌生人可以在不先约定密码或秘密密钥的情况下在大规模上验证消息。
公钥密码学解决了“我们如何共享秘密”的问题,但留下了另一个问题:**这把公钥到底是谁的?**单独的公钥只是一个长数字。你需要一种可靠的方法把这个密钥附着到真实世界身份上,比如“我的银行”或“这家公司 的邮件服务器”。
数字证书是一份签名文件,意思是:“这个公钥属于这个身份。”它包含站点或组织名称(和其他信息)、公钥以及到期时间。重要部分是签名:受信任方对证书签名,设备可以检查签名以确认证书未被篡改。
这个受信任的方通常是一个证书颁发机构(CA)。你的浏览器和操作系统预装了一份受信任 CA 根列表。当你访问网站时,网站会出示其证书和中间证书,形成一条信任链回到设备已经信任的根 CA。
当你输入银行的网址并看到锁图标时,浏览器已经检查:
如果这些检查都通过,TLS 就能安全使用该公钥进行认证并帮助建立加密连接。
PKI 并非完美。CA 可能出错或被攻破,导致错误签发(为错误实体签发证书)。证书会过期,这有助于安全但若未及时续期会阻断访问。撤销(告知全网某证书不再可信)在互联网规模上也很棘手,浏览器并不总是一致地强制执行撤销检查。
端到端加密(E2EE)消息的目标很简单:只有会话中的参与者能读消息。应用提供者、运营商或网络监听者都不能读。
现代聊天应用通常在平衡三个目标:
加密需要密钥。但两个从未见过面的人不应必须事先共享秘密——否 则又回到原始的密钥共享问题。
公钥密码学解决了初始建立的问题。在许多 E2EE 系统中,客户端使用基于公钥的交换(沿用 Diffie–Hellman 的思路)在不受信任的网络上建立共享秘密。那些秘密随后被用于快速对称加密来保护实际消息流量。
前向保密意味着应用不依赖于一个长期密钥维持所有历史,而是不断刷新密钥——通常按会话甚至按消息刷新——这样就算某个密钥被破解,也无法解密整段历史。
这就是为什么“现在偷走设备,明天解密多年聊天记录”在实现了前向保密的系统里变得更加困难。
即便密码学很强,现实仍然带来摩擦:
从底层看,安全消息的故事主要是密钥交换与密钥管理的故事——因为正是它们把“加密”变成“即使网络不可信也私密”。
数字身份是你在使用服务时“你是谁”的线上版本:你的账户、登录方式,以及证明这确实是你(而不是猜到或偷到密码的人)的信号。多年来,大多数系统把密码当作证明——简单、熟悉,但也容易被钓鱼、重用、泄露或暴力破解。
公钥密码学提供了另一种方法:你不再证明你知道一个共享秘密(密码),而证明你控制一个私钥。服务可以保存你的公钥,而私钥则由你保管。
在基于密钥的登录中,服务发送一个质询(随机数据)。你的设备用私钥对其签名。服务用你的公钥验证签名。无需密码通过网络传输,也没有可被攻击者从登录表单中重复利用的凭证。
这个想法支撑了现代“无密码”体验:
公钥身份也适用于机器。例如,API 客户端可以用私钥对请求签名,服务器用公钥验证——这对服务间认证很有用,因为共享 API 密钥难以轮换且易泄露。
如果你想更深入了解真实世界的部署与用户体验,请参见 /blog/passwordless-authentication。
公钥密码学很强大,但并非魔法。许多现实失败并不是数学被攻破,而是系统周边出现问题。
随机性弱会悄然毁掉一切。如果设备在早期引导、虚拟机或受限物联网硬件上生成可预测的随机数,攻击者可能重构出秘密。
实现缺陷也是常见原因:使用过时的算法、跳过证书验证、接受弱参数或错误处理不当。即便是临时的“关掉 TLS 校验以便调试”的捷径,也常常被带入生产环境。
钓鱼与社会工程能完全绕过密码学。如果用户被骗去批准登录、泄露恢复码或安装恶意软件,强大的密钥也无济于事。
私钥必须以难以被复制的方式存储(理想状态放在安全硬件中),并在静态时加密保护。团队还需要为备份、轮换和撤销制定计划——因为密钥会丢失、设备会被盗、人员会离职。
如果安全流程令人困惑,人们会想办法绕过它:分享账户、重用设备、忽略警告或把恢复码存放在不安全的地方。良好的安全设计应减少“决策点”,并使安全行为成为最简单的选项。
如果你在快速构建与发布软件,最大风险常常不是密码学本身,而是不同环境间配置不一致。像 Koder.ai 这样的工具(从聊天界面生成网页、服务与移动应用的 vibe-coding 平台)能加速交付,但公钥的基本规则依旧适用:
简言之:更快的构建并不改变规则——Diffie 的思想仍是用户第一次连接时获取信任的基石。
Diffie 的突破不仅仅增加了一个新工具——它改变了安全的默认假设:从“我们必须先见面”到“我们可以在开放网络上安全地开始对话”。这一转变使数十亿设备与陌生人能够快速创建秘密、证明身份并在互联网规模上建立信任。
原始的 Diffie–Hellman 仍是基础,但大多数现代系统使用改进版本。
椭圆曲线 Diffie–Hellman(ECDH)保持了“在公开环境中达成共享秘密”的目标,同时使用更短的密钥与更快的运算。RSA 在 Diffie 之后不久发展起来,并在早期的网页安全中因可用于加密和签名而闻名;今天它被更谨慎地使用,而椭圆曲线签名和 ECDH 更为常见。
几乎每个现实部署都是混合方案:公钥方法处理握手(认证与密钥协商),然后快速的对称加密保护大部分数据。这种模式让 HTTPS 即能安全又能高效。
未来量子计算可能削弱今天广泛使用的公钥技术(尤其基于因数分解和离散对数的问题)。实用的方向是“增加新选项并安全迁移”,而不是立刻全部替换。许多系统正在测试后量子的密钥交换与签名,同时保持混合设计,以便在不把所有赌注压在单一算法上的情况下获得新保护。
即使算法变化,核心问题仍然相同:在可能从未见面的各方之间快速、全球性地交换秘密与信任,并尽量减少用户摩擦。
要点回顾: 公钥密码学使得安全的第一次接触成为可能;混合方案让其在规模上可用;下一阶段是谨慎演进。
下一篇阅读: /blog/diffie-hellman-explained, /blog/tls-https-basics, /blog/pki-certificates, /blog/post-quantum-crypto-primer
对称加密使用同一个共享秘密密钥来加密和解密。它速度快,适合大块数据,但有一个设置问题:你必须先找到安全的方式来共享那个密钥。
公钥密码学把角色分开成公钥(可分享)和私钥(保密),从而在没有预共享秘密的情况下实现“安全的第一次接触”。
它解决了密钥分发问题:两个陌生人在可被观察的网络上也能开始安全通信,而不用先见面交换秘密密钥。
这种转变使得互联网级别的安全成为可能,用例包括:
Diffie–Hellman(DH)是一种在公开信道上创建共享密钥的方法。
实际上:
DH 本身不负责加密消息;它帮助双方就用于加密的密钥达成一致。
单纯的 DH 并不能证明你在和谁通信。纯 DH 提供的是密钥协商,但不保证通信双方的身份。
为防止中间人攻击,DH 通常会与认证机制结合使用,例如:
TLS 在握手阶段主要使用公钥密码学来实现认证和密钥协商,之后切换到对称密钥保护实际数据。
简化流程:
数字签名让某人证明他们创建了某个内容并且内容未被篡改。
常见用途包括:
验证使用公钥;只有持有私钥的人才能生成有效签名。
证书将公钥和某个身份(比如网站名)绑定起来,并由受信任的机构签名。
浏览器之所以信任证书,是因为它们可以把站点证书通过中间证书串联起来,最终追溯到操作系统/浏览器预装的受信任根 CA。
在运维层面,这就是为什么证书续期、正确的主机名配置和有效的校验对 HTTPS 的可靠性至关重要。
端到端加密应用仍需在从未交换秘密的设备间建立共享密钥。
它们通常使用类似 DH 的交换(常基于椭圆曲线)来:
通行证(Passkeys,FIDO2/WebAuthn)用质询—响应签名代替密码登录。
实际流程:
因为没有可重复使用的秘密在网页表单中输入,这减少了钓鱼和凭证重用的风险。
现实中的失败大多来自实现和运维,而不是数学本身。
常见问题有:
实践建议:使用经过审查的库和默认安全配置,并把密钥管理当作一项核心需求来对待。