返回

理解PKI:从密码学历史到公钥基础设施

21

PKI 是一个看似复杂但逻辑非常清晰的体系。要真正理解它,需要从一个根本性的问题出发:在一个互不相识的网络世界里,两个人如何安全地建立信任?

这个问题的答案,是几千年密码学演进的终点,也是 PKI 诞生的起点。


一、密码学简史:从古代战场到信息时代

传统密码学:换位与替换

密码技术最早的驱动力是军事保密通信。传统密码学只有两种基本手法:

类型原理典型案例
换位加密不改变字符本身,只改变排列顺序古希腊 Scytale 棒、中国藏头诗
替换加密保持顺序,用其他符号替换原字符凯撒密码(单表)、维吉尼亚密码(多表)

公元9世纪,阿拉伯数学家肯迪在《解码手册》中提出频率分析法:不同字母在文本中出现的频率是固定的,通过统计密文中字符频率就能推导出替换规则。这一方法成为破解单表替换密码的利器,也推动了多表替换密码的发展。

两次世界大战将密码学推向了机械化时代。德国”隐谜”密码机、英国”炸弹”破译机——这场以数学和电气工程为武器的博弈,标志着传统手工密码的终结。

现代密码学:三类算法

二战结束后,随着计算机的出现,密码学完成了一次彻底的范式转变。加密对象从”文字书写”变成了”数字化比特流”,数学成为核心工具。

现代密码学的安全性遵循科考夫原则(Kerckhoffs’s Principle):密码系统的算法可以公开,安全性完全依赖于密钥的保密。

现代密码学按技术特征分为三类:

1. 对称算法(密码密钥算法 / 单密钥算法)

加密密钥和解密密钥相同,又分为:

对称加密速度快,适合大量数据加密,但密钥分发是核心难题——双方要在安全的前提下共享同一个密钥。

2. 非对称算法(公钥算法)

加密密钥和解密密钥不同,一个可公开(公钥),另一个必须保密(私钥)。从公钥很难推导出私钥。代表算法:RSA、ECC、SM2。

公钥密码的出现从根本上改变了密钥管理的方式:公钥不怕泄露,密钥分发问题迎刃而解。

3. 摘要算法(哈希函数)

将任意长度的输入转化为固定长度的输出(哈希值),不可逆,无密钥。代表算法:MD5、SHA1、SM3。

用途:验证数据完整性(内容一旦改变,哈希值就会变化)。


二、密钥管理:从对称到非对称

密钥生命周期

在算法公开的现代密码学中,安全性的核心是密钥安全。密钥管理覆盖其整个生命周期:

产生 → 传输 → 验证 → 更新 → 存储 → 备份 → 使用 → 销毁

密钥攻击的两种方式:

对抗方法:密钥长度要足够长、随机性要足够高,避免弱密钥。

密钥备份的三种方式:

对称密钥管理的瓶颈

对称密钥管理有两种模式,都存在致命缺陷:

模式密钥数量核心问题
无中心模式N(N-1)/2 对用户数增加时密钥数量爆炸式增长,只适合小规模
有中心模式N 个需要在线验证,无法脱机通信,中心成性能瓶颈

非对称密钥管理的优势与残留问题

公钥可以公开,解决了密钥传输泄露的风险——但仍有一个关键问题没有解决:

如何证明一个公钥确实属于某个特定的人,而不是被人伪造或替换?

这就是 PKI 要解决的核心问题。


三、PKI 的本质:把非对称密钥管理标准化

PKI(Public Key Infrastructure,公钥基础设施)通过引入一系列标准化组件,解决了”公钥与用户映射关系容易被篡改”的问题,同时解决了集中服务性能瓶颈和脱机状态查询等问题。

核心组件

CA(证书权威)

CA(Certificate Authority)是 PKI 的信任核心。它本质上是一种特殊的公钥管理中心,拥有自己的公私钥对,使用私钥为用户签发数字证书

数字证书的签发过程:

  1. 将用户身份信息 + 用户公钥,按特定格式组成数据 D
  2. 用摘要算法对 D 计算得到摘要 H
  3. 用 CA 私钥对 H 加密,得到数字签名 S
  4. 将身份信息、公钥信息和签名 S 打包成数字证书

CA 对证书进行全生命周期管理:签发、更新、作废(吊销/撤销)、冻结/解冻、查询下载。

数字证书

数字证书是一种特殊的文件格式(标准:X.509),包含三类信息:

数字证书的两个关键特性:

数字证书就是网络版的身份证: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_signKMC 生成的公钥 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)

OCSP(在线证书状态协议,Online Certificate Status Protocol)

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

读图要点:


四、数字签名与电子签名法

数字签名的原理

私钥具有专有性:它由计算机随机生成,唯一且无法复制,只有持有者才能使用。用私钥对数据进行签名操作,就如同现实中的亲笔签名。

签名:用私钥对数据(的摘要)加密 验签:用对应的公钥解密,验证签名是否一致

注意:只有私钥加密才属于签名范畴。公钥加密是保密功能,不是签名。

【重要】两层签名,各有分工

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 可以:

  1. 自己生成一对密钥(SK_mallory, PK_mallory)
  2. 伪造一张证书,写上”PK_mallory 属于 Alice”
  3. 用 SK_mallory 签署文件
  4. 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. 签署后对数据电文内容和形式的任何改动能够被发现

五、数字证书的四种安全功能

基于数字证书,可以实现四种基本安全功能:

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 已形成完整的标准规范体系,主要包括:

国际标准:

国内标准(商密系列):


八、其他非对称密钥管理体系

除 X.509/PKIX 外,还有其他几种模式:

PGP(Pretty Good Privacy)

PGP 是一种基于”信任网(Web of Trust)“的去中心化公钥管理方式。

核心思想:

适用场景:互联网上独立的小圈子内部使用,规模有限。

EMV(银行 IC 卡)

EMV 标准用于银行 IC 卡支付,采用两级非对称密钥体系

  1. 根 CA 系统:签发发卡行证书
  2. 发卡行 CA 系统:管理 IC 卡应用密钥

与网银 PKI 证书的主要区别:


小结

PKI 的本质是:把非对称密钥管理标准化,用 CA + 数字证书解决”公钥身份绑定”问题,用 LDAP 解决”高性能证书查询”问题,用 CRL/OCSP 解决”证书状态查询”问题。

整个体系的信任基础是 CA,信任的表达工具是数字证书,信任的传递路径是信任链。只要保住 CA 私钥的安全,整个 PKI 体系的可信性就得到了保障。

笔记整理自《PKI_CA与数字证书技术大全》第一部分



上一篇
【每周一书】你是你吃出来的
下一篇
【地铁时光】最好的时光在路上