PKI 是一个看似复杂但逻辑非常清晰的体系。要真正理解它,需要从一个根本性的问题出发:在一个互不相识的网络世界里,两个人如何安全地建立信任?
这个问题的答案,是几千年密码学演进的终点,也是 PKI 诞生的起点。
一、密码学简史:从古代战场到信息时代
传统密码学:换位与替换
密码技术最早的驱动力是军事保密通信。传统密码学只有两种基本手法:
| 类型 | 原理 | 典型案例 |
|---|---|---|
| 换位加密 | 不改变字符本身,只改变排列顺序 | 古希腊 Scytale 棒、中国藏头诗 |
| 替换加密 | 保持顺序,用其他符号替换原字符 | 凯撒密码(单表)、维吉尼亚密码(多表) |
公元9世纪,阿拉伯数学家肯迪在《解码手册》中提出频率分析法:不同字母在文本中出现的频率是固定的,通过统计密文中字符频率就能推导出替换规则。这一方法成为破解单表替换密码的利器,也推动了多表替换密码的发展。
两次世界大战将密码学推向了机械化时代。德国”隐谜”密码机、英国”炸弹”破译机——这场以数学和电气工程为武器的博弈,标志着传统手工密码的终结。
现代密码学:三类算法
二战结束后,随着计算机的出现,密码学完成了一次彻底的范式转变。加密对象从”文字书写”变成了”数字化比特流”,数学成为核心工具。
现代密码学的安全性遵循科考夫原则(Kerckhoffs’s Principle):密码系统的算法可以公开,安全性完全依赖于密钥的保密。
现代密码学按技术特征分为三类:
1. 对称算法(密码密钥算法 / 单密钥算法)
加密密钥和解密密钥相同,又分为:
- 流密码:每次加密一位或一字节,代表算法:RC4
- 分组密码:将明文分成固定长度的块处理,代表算法:DES、AES、SM4
对称加密速度快,适合大量数据加密,但密钥分发是核心难题——双方要在安全的前提下共享同一个密钥。
2. 非对称算法(公钥算法)
加密密钥和解密密钥不同,一个可公开(公钥),另一个必须保密(私钥)。从公钥很难推导出私钥。代表算法:RSA、ECC、SM2。
公钥密码的出现从根本上改变了密钥管理的方式:公钥不怕泄露,密钥分发问题迎刃而解。
3. 摘要算法(哈希函数)
将任意长度的输入转化为固定长度的输出(哈希值),不可逆,无密钥。代表算法:MD5、SHA1、SM3。
用途:验证数据完整性(内容一旦改变,哈希值就会变化)。
二、密钥管理:从对称到非对称
密钥生命周期
在算法公开的现代密码学中,安全性的核心是密钥安全。密钥管理覆盖其整个生命周期:
产生 → 传输 → 验证 → 更新 → 存储 → 备份 → 使用 → 销毁密钥攻击的两种方式:
- 穷举攻击:尝试所有可能的密钥组合
- 字典攻击:只尝试人们最常用的密码集合
对抗方法:密钥长度要足够长、随机性要足够高,避免弱密钥。
密钥备份的三种方式:
- 密钥托管:交第三方中心保管
- 密钥分割:拆成碎片分开存储,合并才能使用
- 密钥共享(门限方案):拆成 n 份,知道任意 m 份即可恢复,知道少于 m 份则无法恢复
对称密钥管理的瓶颈
对称密钥管理有两种模式,都存在致命缺陷:
| 模式 | 密钥数量 | 核心问题 |
|---|---|---|
| 无中心模式 | N(N-1)/2 对 | 用户数增加时密钥数量爆炸式增长,只适合小规模 |
| 有中心模式 | N 个 | 需要在线验证,无法脱机通信,中心成性能瓶颈 |
非对称密钥管理的优势与残留问题
公钥可以公开,解决了密钥传输泄露的风险——但仍有一个关键问题没有解决:
如何证明一个公钥确实属于某个特定的人,而不是被人伪造或替换?
这就是 PKI 要解决的核心问题。
三、PKI 的本质:把非对称密钥管理标准化
PKI(Public Key Infrastructure,公钥基础设施)通过引入一系列标准化组件,解决了”公钥与用户映射关系容易被篡改”的问题,同时解决了集中服务性能瓶颈和脱机状态查询等问题。
核心组件
CA(证书权威)
CA(Certificate Authority)是 PKI 的信任核心。它本质上是一种特殊的公钥管理中心,拥有自己的公私钥对,使用私钥为用户签发数字证书。
数字证书的签发过程:
- 将用户身份信息 + 用户公钥,按特定格式组成数据 D
- 用摘要算法对 D 计算得到摘要 H
- 用 CA 私钥对 H 加密,得到数字签名 S
- 将身份信息、公钥信息和签名 S 打包成数字证书
CA 对证书进行全生命周期管理:签发、更新、作废(吊销/撤销)、冻结/解冻、查询下载。
数字证书
数字证书是一种特殊的文件格式(标准:X.509),包含三类信息:
- 用户身份信息:姓名/名称、单位、城市、国家等
- 用户公钥信息:与私钥对应的公钥
- CA 私钥的数字签名:防伪标记
数字证书的两个关键特性:
- 防伪性:用 CA 公钥验证签名,立即可知是否被篡改
- 公开性:不含私密信息,可以任意公开传播
数字证书就是网络版的身份证:CA 相当于公安部,证书相当于二代身份证,CA 签名相当于防伪水印。
CA 自签名证书:CA 中心也为自己签发证书(根证书/CA 证书),用于让用户验证 CA 本身的公钥是否合法。
【重要】密钥对的归属:谁的钥匙归谁用
PKI 中同时存在多个相互独立的密钥对,初学时很容易把它们混为一谈。理清这一点是理解整个体系的关键。
PKI 中有两套完全独立的密钥对:
| CA 的密钥对 | 用户的密钥对 | |
|---|---|---|
| 由谁持有 | CA 自己持有,绝不对外 | 用户自己持有 |
| 私钥的用途 | 给用户证书”盖章”(签名) | 用户签署数据 / 解密数据 |
| 公钥的用途 | 让任何人验证证书是否被篡改 | 让任何人向用户加密数据 / 验证用户签名 |
| 公钥存放在哪 | CA 自己的证书(根证书)里 | 用户的数字证书里 |
这两套密钥对之间没有任何数学关系,它们是完全独立的两对钥匙。
证书申请流程(从密钥视角看):
① 用户生成自己的密钥对:SK_用户(私钥)+ PK_用户(公钥)
② 用户提交 CSR(证书签名请求)给 CA
CSR 内容 = 用户身份信息 + PK_用户
③ CA 验证用户身份后,用【CA 自己的私钥 SK_CA】对(身份信息 + PK_用户)的摘要签名
→ 生成数字签名 S
④ CA 将(用户身份信息 + PK_用户 + 签名 S)打包成证书,返回给用户
⑤ 用户拿到证书,自己保管 SK_用户(私钥永远不离开用户)关键一句话:证书里的公钥是用户自己的公钥 PK_用户,CA 只是用自己的私钥给这个证书盖了个章。CA 的私钥本身从不出现在证书中,只有 CA 的签名出现。
**验证证书时:**用 CA 的公钥(从根证书获取)解开证书中的签名,确认证书没被篡改——这与用户的私钥完全无关。
KMC(密钥管理中心)
当私钥丢失时,公钥加密的数据将永远无法解密。KMC(Key Management Center)专门负责私钥的备份与恢复。
这引出一个矛盾:
- 签名私钥:必须唯一,不能备份(备份了就不能代表唯一身份)
- 加密私钥:必须可恢复(否则数据永久丢失)
PKI 用双证书机制解决这一矛盾:
| 签名证书 | 加密证书 | |
|---|---|---|
| 用途 | 仅用于签名/验签 | 仅用于加密/解密 |
| 密钥对由谁生成 | 用户自己(或硬件设备内部) | KMC |
| 证书中的公钥 | 用户自己的公钥 PK_sign | KMC 生成的公钥 PK_enc |
| 私钥交给谁 | 留在用户手里,KMC 不知道 | KMC 移交给用户,KMC 保留备份 |
| CA 知道私钥吗 | 不知道(从不接触 SK_sign) | 不知道(SK_enc 由 KMC 生成和托管) |
| 备份策略 | 不备份,永不可恢复 | KMC 备份,可按需恢复 |
| 目的 | 保证唯一性,防止身份冒用 | 保证可恢复性,防止数据丢失 |
三个独立角色各司其职:CA 只用自己的 SK_CA 给证书盖章,从不接触用户私钥;用户 自持签名私钥,接收加密私钥;KMC 生成并托管加密私钥,代用户向 CA 申请加密证书。CA 与用户、CA 与 KMC 之间的密钥对彼此完全独立。
LDAP(轻量目录访问协议)
CA 中心存储所有用户证书,但如果每次查询都访问 CA,会造成性能瓶颈。LDAP 是一种专门优化读取性能的目录服务——其底层目录服务技术(DAP)对查询功能进行了专项优化,读取速度比自身的修改操作快 10 倍以上,适合高并发的证书查询和下载服务。由于 X.500/DAP 协议过于复杂,国际组织对其进行简化并增加 TCP/IP 支持,形成了更轻量的 LDAP 标准。
CRL 与 OCSP:证书状态查询
当用户私钥泄露,CA 需要将该证书标记为失效。用户如何知道对方证书是否失效?
CRL(证书作废列表,Certificate Revocation List)
- 包含:所有失效证书清单 + 下次 CRL 生成时间 + CA 签名
- CA 定期生成,用户下载后可本地脱机验证
- 缺点:存在滞后性——私钥泄露到下次 CRL 生成之间有时间窗口
OCSP(在线证书状态协议,Online Certificate Status Protocol)
- 解决 CRL 滞后问题
- 用户实时查询 CA 获取证书当前状态
- 适用于高实时性、高风险的交易场景
RA(注册中心)
RA(Registry Authority)是 CA 的前端服务机构,负责面对面接受用户的证书申请和作废申请、核实用户身份,再将材料提交 CA 系统处理。在网银等场景中,RA 功能通常与业务流程集成。
各角色整体流转图
了解了每个组件之后,下图展示用户、RA、CA、KMC、LDAP/CRL 之间的完整交互流程,涵盖签名证书申请、加密证书申请和证书吊销三个阶段:
sequenceDiagram
actor 用户
participant RA as RA<br/>注册中心
participant CA as CA<br/>证书权威
participant KMC as KMC<br/>密钥管理中心
participant DIR as LDAP / CRL<br/>目录与状态服务
rect rgb(219, 234, 254)
Note over 用户,CA: 阶段一:签名证书申请
用户->>用户: ① 硬件设备内生成密钥对<br/>SK_sign(私钥,不可导出)<br/>PK_sign(公钥)
用户->>RA: ② 提交一次申请<br/>身份信息 + PK_sign
RA->>RA: ③ 核实用户真实身份
RA->>CA: ④ 审核通过,转交 CSR(签名证书)
CA->>CA: ⑤ 用 SK_CA 签名<br/>生成签名证书(内含 PK_sign)
CA-->>RA: ⑥ 返回签名证书
CA-->>DIR: 发布签名证书
end
rect rgb(254, 243, 199)
Note over CA,KMC: 阶段二:加密证书申请(CA 识别策略后自动触发,用户无感知)
Note right of CA: CA 收到签名证书 CSR 后<br/>识别证书策略(CP/CPS):<br/>"此类用户须同时签发加密证书"
CA->>KMC: ⑦ 根据策略触发:<br/>请求为该用户生成加密密钥对
KMC->>KMC: ⑧ 生成 SK_enc + PK_enc
KMC-->>CA: ⑨ 返回 PK_enc
CA->>CA: ⑩ 用 SK_CA 签名<br/>生成加密证书(内含 PK_enc)
CA-->>DIR: 发布加密证书
CA-->>KMC: ⑪ 通知证书已签发<br/>KMC 备份保留 SK_enc
CA-->>RA: ⑫ 同时返回<br/>签名证书 + 加密证书
RA-->>用户: ⑬ 一次性交付<br/>签名证书 + 加密证书 + SK_enc<br/>(写入 USB Key / IC 卡)
Note over 用户: USB Key 内含:<br/>SK_sign(硬件生成,不可导出)<br/>SK_enc(KMC 生成,已写入)<br/>签名证书 + 加密证书
end
rect rgb(220, 252, 231)
Note over 用户,DIR: 阶段三:证书吊销(私钥泄露时)
用户->>RA: 报告私钥泄露 / 申请注销
RA->>CA: 提交吊销申请
CA->>CA: 将该证书加入黑名单
CA-->>DIR: 更新 CRL(定期)<br/>OCSP 实时响应状态查询
end读图要点:
- 用户只需提交一次申请:签名证书和加密证书的申请流程由 RA 在后台编排,对用户透明
- CA 策略驱动:CA 在证书策略(CP/CPS)中预定义”此类用户须同时签发加密证书”,收到签名证书 CSR 后自动触发 KMC 生成加密密钥对,RA 和用户无需额外操作
- CA 的私钥 SK_CA 始终留在 CA 内部,仅用于签名,从不流出
- LDAP/CRL 是公开服务层,任何人均可查询证书和吊销状态
四、数字签名与电子签名法
数字签名的原理
私钥具有专有性:它由计算机随机生成,唯一且无法复制,只有持有者才能使用。用私钥对数据进行签名操作,就如同现实中的亲笔签名。
签名:用私钥对数据(的摘要)加密 验签:用对应的公钥解密,验证签名是否一致
注意:只有私钥加密才属于签名范畴。公钥加密是保密功能,不是签名。
【重要】两层签名,各有分工
PKI 中存在两种签名,用途完全不同,很容易混淆:
第一层:用户对数据签名(证明”这份数据是我发出的”)
Alice 用 SK_alice(自己的私钥)对文件签名
Bob 用 PK_alice(Alice 证书里的公钥)验签
→ 确认:文件确实由持有 SK_alice 的人签署,内容未被篡改第二层:CA 对证书签名(证明”这张证书本身是真的”)
CA 用 SK_CA(CA 自己的私钥)对证书签名
Bob 用 PK_CA(根证书里 CA 的公钥)验证 CA 签名
→ 确认:这张证书是由受信任的 CA 颁发的,PK_alice 确实属于 Alice为什么两层缺一不可?
假设没有第二层(CA 签名),攻击者 Mallory 可以:
- 自己生成一对密钥(SK_mallory, PK_mallory)
- 伪造一张证书,写上”PK_mallory 属于 Alice”
- 用 SK_mallory 签署文件
- Bob 用 PK_mallory 验签——通过!但 Bob 实际上验证的是 Mallory 的签名,不是 Alice 的
CA 的签名正是堵住这个漏洞的:只有受信任的 CA 才能权威地声明”这个公钥属于这个人”,任何人无法伪造 CA 签名(除非拿到 SK_CA)。
完整的签名验证流程因此是两步:
第一步:验证证书(建立对公钥的信任)
使用 PK_CA(根证书)→ 验证证书中 CA 的签名
→ 确认 PK_alice 确实是 Alice 的,证书未被篡改
第二步:验证数据(确认数据来源)
使用 PK_alice(刚刚确认过的证书中的公钥)→ 验证文件上 Alice 的签名
→ 确认文件由 Alice 签署,内容完整CA 签名回答的是”这把公钥可以信任吗?“,用户签名回答的是”这份数据是这把公钥的持有者发出的吗?“——两个问题,两层验证,缺一不可。
电子签名与手写签名的本质区别:
- 电子签名是一组代码,无法凭视觉辨认,需要计算机鉴别
- 电子签名容易被复制修改,且修改后不易被发现
- 电子签名可在线签署,效率更高
可靠的电子签名(法律效力)
《中华人民共和国电子签名法》(2005年4月1日施行)赋予电子签名法律效力,但并非所有电子签名都有效,只有可靠的电子签名才与手写签名具有同等法律效力。
可靠的电子签名需满足四个条件:
- 签名制作数据(私钥)属于签名人专有
- 签署时签名制作数据仅由签名人控制
- 签署后对签名的任何改动能够被发现
- 签署后对数据电文内容和形式的任何改动能够被发现
五、数字证书的四种安全功能
基于数字证书,可以实现四种基本安全功能:
1. 身份认证
出示数字证书 + 用私钥签名特定数据 → 对方用证书中的公钥验签 → 确认身份。
2. 保密性
用对方证书中的公钥加密数据 → 只有对方的私钥才能解密。
3. 完整性
用私钥对数据签名 → 任何篡改都会导致验签失败。
4. 抗抵赖性(不可否认性)
交易时要求对方用私钥签名 → 事后将交易数据和签名存档 → 发生纠纷时,签名可作为对方参与交易的证据,无法抵赖。
六、PKI 信任模型
PKI 的核心是”信任传递”。用户因为信任 CA,所以信任 CA 签发的证书。这条从 CA 到用户证书的信任路径,称为信任链(或认证路径、证书路径)。
PKI 有四种信任模型:
根 CA 信任模型(严格层次)
根CA(自签名)
├── 子CA1
│ └── 用户A证书
└── 子CA2
├── 子CA3
│ ├── 用户B证书
│ └── 用户C证书
└── 子CA4
└── 用户D证书信任链示例:根CA → 子CA1 → 用户A证书
交叉认证信任模型
根 CA 之间互相签发交叉认证证书,在不增加信任锚的前提下,将信任传递到其他 CA 管理域。
缺点:N 个根 CA 时,最多需要签发 N(N-1) 个交叉认证证书,随规模增长而爆炸。
桥 CA 信任模型
引入独立的桥 CA 作为虚拟根 CA,所有根 CA 只与桥 CA 互发交叉证书。
优势:N 个根 CA 只需 2N 个交叉认证证书,扩展性更好。
信任列表信任模型
用户可以拥有多个信任锚。Web 浏览器就是典型案例——浏览器内置了数百个受信任的根 CA 证书,这些都是信任锚。
七、PKI 标准体系
PKI 已形成完整的标准规范体系,主要包括:
国际标准:
- PKCS 系列(RSA 实验室主导):PKCS#1(RSA)、PKCS#7(消息语法)、PKCS#8(私钥格式)、PKCS#10(证书请求)、PKCS#11(Token接口)、PKCS#12(个人信息交换)等
- IETF PKIX 系列:RFC 5280(证书与CRL格式)、RFC 6960(OCSP)等
- ISO/IEC 7816:IC 卡相关标准
国内标准(商密系列):
- SM2 椭圆曲线公钥算法(GM/T 0003)
- SM3 密码杂凑算法(GM/T 0004)
- SM4 分组密码算法(GM/T 0002)
- 数字证书认证系统密码协议规范(GM/T 0014)
- 基于 SM2 的数字证书格式规范(GM/T 0015)
八、其他非对称密钥管理体系
除 X.509/PKIX 外,还有其他几种模式:
PGP(Pretty Good Privacy)
PGP 是一种基于”信任网(Web of Trust)“的去中心化公钥管理方式。
核心思想:
- 每个用户可以用自己的私钥对他人公钥签名,表示”我认识这个人,这个公钥是他的”
- 公钥的信任程度由”介绍人”的可信程度决定
- 模拟现实社会中人们的社交关系
适用场景:互联网上独立的小圈子内部使用,规模有限。
EMV(银行 IC 卡)
EMV 标准用于银行 IC 卡支付,采用两级非对称密钥体系:
- 根 CA 系统:签发发卡行证书
- 发卡行 CA 系统:管理 IC 卡应用密钥
与网银 PKI 证书的主要区别:
- EMV 证书数据为密文,需解密才能解析;X.509 证书为明文
- 证书格式完全不同(EMV 固定长度 vs X.509 DER 编码)
- 应用场景不同:EMV 主要用于线下 POS/ATM 脱机交易,X.509 主要用于互联网在线业务
小结
PKI 的本质是:把非对称密钥管理标准化,用 CA + 数字证书解决”公钥身份绑定”问题,用 LDAP 解决”高性能证书查询”问题,用 CRL/OCSP 解决”证书状态查询”问题。
整个体系的信任基础是 CA,信任的表达工具是数字证书,信任的传递路径是信任链。只要保住 CA 私钥的安全,整个 PKI 体系的可信性就得到了保障。
笔记整理自《PKI_CA与数字证书技术大全》第一部分