术语表
公钥密码是什么 — 用公钥与私钥这对密钥进行加密与签名
公钥密码使用公钥与私钥这一对密钥:公钥用来加密和验证签名,私钥用来解密和签名。本文讲解它如何支撑 TLS(HTTPS)、数字签名与 Passkey,以及务实的防御要点:不要自造加密、保护好私钥。
「公钥」和「私钥」这两个词随处可见——TLS(HTTPS)、数字签名、Passkey 等等。这里不涉及攻击手法,只讲公钥密码的思路,以及实务中值得掌握的防御要点。
公钥与私钥的角色
密钥成对出现,角色恰好相反——这正是关键所在。
它被用在哪里
加密(私密的往来)
- 用对方的公钥加密后发送
- 只有持有对应私钥的本人才能解密
- 在 TLS 中,用于「安全地共享一把对称密钥」
数字签名(证明真实性)
- 发送方用私钥生成签名
- 接收方用公钥验证,确认本人身份与是否被篡改
- 用于 TLS 证书、软件分发、Passkey 认证
真实的 TLS(HTTPS) 是混合式的:先用公钥密码安全地共享一把对称密钥,之后的通信再用快速的对称加密来保护。Passkey 也是用设备内的私钥签名、用服务器的公钥验证,从而实现抗钓鱼的认证。
需要做对的地方
不要自造加密
即便理论正确,也会因随机数质量、填充、时序差异等实现细节而被攻破。请使用标准协议与久经考验的库,避免自定义实现。
严密保护私钥
私钥不要放进代码或仓库。把它隔离到专用的保管处(密钥库/密钥管理服务),并让运维具备在泄露时**吊销并重新签发(轮换)**的能力(→ 不要把机密放进公开目录)。
把密钥长度和算法保持在最新
推荐值会随时代变化。不要放任过时的密钥长度或已弃用的算法,要紧跟最新推荐。证书可用 Let's Encrypt 等自动续期。
本站的观点:使用者的责任在于『密钥管理』
公钥密码本身很强,通常没必要去费力破解它。现场的事故并非出在加密的数学上,而是出在私钥的存放位置、吊销机制、以及被放任的老旧配置这些运维层面。本站也是把私钥隔离在公开面之外,一旦怀疑泄露就按「已被读取」的前提立即轮换。加密不要自造,而是搭上标准——这才是最安全的捷径。
延伸阅读
- 术语:OpenSSL 是什么(TLS 的实现) / Passkey 是什么 / Let's Encrypt 是什么
- 实务:不要把机密文件放进公开目录 / 机密的守护方法·入门
- 历史:安全的历史(年表)
FAQ
Q公钥密码与对称(共享密钥)密码有什么区别?
对称密码用同一把密钥加密和解密,速度快,但难点在于如何把这把密钥安全地交给对方。公钥密码使用公钥与私钥这一对密钥,公钥可以分发给任何人。实际的 TLS(HTTPS)是混合式的:先用公钥密码把一把对称密钥安全地共享出去,之后大量的数据再用快速的对称加密来保护。
Q数字签名是如何证明『是真的』的?
发送方用自己的私钥对数据生成签名,接收方用发送方的公钥来验证这个签名。由于私钥只有本人持有,验证通过就意味着『持有该公钥的人签署了它,且内容未被篡改』。TLS 证书和软件分发的真实性确认,都依赖这套签名机制。
Q我可以自己实现加密吗?
请避免。即便理论正确,加密也会因实现细节(随机数质量、填充、时序差异等)而被攻破。防御的原则是『不要自造,使用久经考验的库与标准协议』。请设计好密钥的生成、保管、吊销(轮换)流程,并让密钥长度和算法紧跟最新推荐。