豪密科技第 16 期密评实操能力验证培训 - 2025/02/17 上午
有幸参加了公司安排的豪密科技第 16 期密评实操能力验证培训,本文是第一课《公钥基础设施》的培训内容。
公钥密码功能和应用基础
- 公钥加密
- 数字信封
- 实体鉴别
- 数字签名
- 不可否认性 → 抗抵赖
- 实体鉴别
- 密钥协商
简单交换公钥是不安全的!易受中间人攻击。公钥必须可靠保障!
公钥基础设施是一个包括硬件、软件、人员、策略和规程的集合,用来实现基于公钥密码体制的密钥和证书的产生、管理、存储、分发和撤销等功能。
基本概念与体系
PKI 体系理解的视角
- 证书管理角度:全生命周期管理(申请;签发;存储;分发;撤销)
- 用户角度
- 本人证书
- 申请(自产生密钥;CA 产生密钥);获得证书(和个人密钥)
- 个人证书数据转移(多平台间)
- 申请撤销证书
- 目标对象证书
- 查询获得
- 验证证书:对收到或自查询得到的目标对象证书
- 有效性:CA 签名;有效期
- 是否撤销
- 本人证书
- CA 角度:接受申请;审核;产生密钥签发证书;证书存储;证书撤销;提供验证
- 体系角度:CA 层次化;多 CA
体系要点

需要解决的主要问题
- 体系
- PKI 体系整体协调(核心是域间关系)
- 域内各层 CA 关系的协调:证书链
- CA 内各模块协调
- 规定
- 业务流程
- 协作协议
- 数据和消息语法结构
- 证书管理
- 存储:轻量级目录访问协议 LDAP
- 撤销:证书撤销列表 CRL
- 验证:在线证书状态协议 OCSP
PKI 相关的主要标准体系
- X.509:基于 X.500 目录服务定义证书目录(含格式标准)
- PKIX:IETF 基于 X.509 制定
- PKCS:Public-Key Cryptography Standards
- 早期业界“大拿”RSA 公司牵头制定的一系列公钥密码标准
- 关于证书的多个标准被广泛采用或参照
- 我国国家标准体系
- 商密应用相关标准
关键功能实现
CA 体系

证书验证与证书链
证书验证首先验证 CA 签名的有效性
层次化体系下基于证书链
- 终端实体证书 - 直接上级 CA 签发
- 直接上级 CA 证书 - 再上一级 CA 签发
- ……
- XXX 级证书 - 根 CA 证书(自签发)
验证证书有效性须验证到根证书,各级都须有效
应用中证书链验证的实现方式
- 证书提供方提供证书和证书链,验证方直接验证。例:SSL 协议客户端通过服务器证书验证服务器;有些网站 ServerHello 消息中证书传送整个证书链(演示打开“ssl.pcapng”包搜索十六进制值“3082”可以看到三个证书)
- 证书提供方仅提供证书不提供证书链,验证方处理
- 验证方预置证书链
- 浏览器:预置许多不同层级 CA 证书(演示打开任意一个浏览器查看 SSL 证书)
- 签名验签服务器:服务器需配置各域目标客户对应的证书链
- 验证方联网处理
- 验证方预置证书链
证书撤销与撤销列表
特殊情况下(如私钥泄露)须撤销证书(还在有效期内的)
实现方法:CA 定期更新并通过指定的 CRL 分发点(CDP)发布
CRL:Certificate Revocation List
- 被撤销证书信息的列表
- CA 对列表内容的签名
用 CRL 验证是否撤销的基本方法
- 证书提供方提供 CRL 地址(可在证书中嵌入 CRL 的 URL)
- 证书接收方根据证书 CA 信息查询
证书验证与在线证书状态协议 OCSP
基于 CRL 实施证书撤销:必须经常在客户端下载以确保列表的更新
在线证书状态协议 Online Certificate Status Protocol
OCSP 应用
- CA 端运行 OCSP 服务
- 证书验证者(客户端):发送一个对于证书状态信息的请求
- 服务器:核查后回复“有效”、“过期”或“未知”的响应
OCSP 协议:规定了服务器和客户端应用程序的协议语法
OCSP 响应可能结果
- 良好:证书有效
- 已撤销:证书已撤销
- 未知
- 不能访问 OCSP 响应程序。
- OCSP 响应程序已发送响应,但其签名值验证失败。
- OCSP 响应程序已发送响应,指出它没有证书的撤销数据。
证书认证系统
体系与特点
证书认证系统:对生命周期内的数字证书进行全过程管理的安全系统
- 用户注册管理
- 证书/证书撤销列表的生成与签发
- 证书/证书撤销列表的存储与发布
- 证书状态的查询
- 证书管理及安全管理
核心标准
- GB/T 25056-2010 信息安全技术 证书认证系统密码及其相关安全技术规范
- GM/T 0014-2023 数字证书认证系统密码协议规范

- 密钥管理中心:对生命周期内的加密证书密钥对进行全过程管理
- 密钥生成、密钥存储、密钥分发
- 密钥备份、密钥更新、密钥撤销
- 密钥归档、密钥恢复
- 安全管理
- ……
- 证书/CRL 存储发布系统:数字证书、CRL 存储和签发
- 证书管理系统:实现对证书/CRL 管理控制
- 申请
- 审核
- 生成
- 签发
- 存储
- 发布
- 作废
- 归档
- ……
- 安全管理系统:主要包括安全审计系统和安全防护系统
- 证书/CRL 查询系统(可选系统):为用户和应用系统提供证书状态查询
- LDAP
- OCSP
- 用户注册管理系统:用户的证书申请、身份审核和证书下载,可分为本地和远程
模块功能概要
- 用户注册管理系统:证书申请(在线/离线);身份审核;证书下载(在线/离线)
- 证书/证书撤销列表生成与签发系统
- 证书类型
- 按主体对象:人员;设备;机构
- 按功能:加密证书;签名证书
- 密钥产生
- 签名密钥可由用户产生
- 加密密钥由密钥管理中心产生并负责安全管理
- 证书签发
- 用户证书由 CA 签发
- 下级 CA 证书由上级 CA 签发
- 根 CA 证书由根 CA 自己签发
- 证书撤销列表:用户证书撤销列表 CRL;CA 证书撤销列表 ARL
- 证书类型
- 证书/CRL 存储与发布系统
- 数据库
- 目录:主;从(可分布式,面向用户)
- 证书状态查询系统:CA 需实现两种之一或全部
- CRL 查询:证书中标识 CRL 地址,下载 CRL
- 在线证书状态查询
- 证书管理系统:实现对证书/证书撤销列表管理控制的系统:申请、审核、生成、签发、存储、发布、作废、归档等
- 安全管理系统
- 安全审计系统:提供事件级审计功能,对涉及系统安全的行为、人员、时间等记录进行跟踪、统计和分析
- 安全防护系统:提供访问控制、入侵检测(入侵防御)、漏洞扫描、病毒防治等网络安全功能
GB/T 25056 证书认证系统密码及其相关安全技术规范其余内容概要
- 密码要求
- 密钥管理
- 密码算法、设备和接口
- 重点两大中心:证书认证中心;密钥管理中心
- 功能要求
- 性能要求
- 管理要求
- 运行管理
- 证书操作流程
- 证书申请、更新、注销流程
- 用户密钥恢复流程;司法密钥恢复
- 证书挂起和解挂流程
密码协议规范(GM/T 0014)
主要内容
- 协议体系
- 业务流程:总业务流程;相关主体间业务流程
- 相关主体间协议(流程与数据格式)
- 协议报文语法:加密数据、杂凑数据、数字签名、数字信封报文的语法
- 附录
- 系统与格式定义
- 非实时发布证书流程
- RA 与 CA 间相关协议
- 协议报文实例





协议报文语法
- 加密报文:原始密文(不附带任何编码标示);SM2 算法从 GM/T 0009
- 数字签名报文:SM2 算法报文从 GM/T 0009;RSA 算法从 PKCS #7
- 数字信封报文:SM2 算法报文从 GM/T 0009;RSA 算法从 PKCS #7
- 杂凑数据报文
相关标准概要
GB/T 25018 信息安全技术 公钥基础设施 数字证书格式
主要内容
- 证书格式:DER 编码描述
- CRL 格式:DER 编码描述
- 附录
- 证书结构:整体结构;标准域;扩展域
- 证书结构实例:用户证书;服务器证书
- CRL 结构:自签名 CA 证书;下级 CA 证书;终端实体签名证书;终端实体加密证书;CRL
- 实例
- 算法支持(SM2;SM3)
证书结构-总体结构
项名称 | 描述 |
---|---|
TBSCertificate | 基本证书域 |
signatureAlgorithm | 签名算法域 |
signatureValue | 签名值域 |
证书结构-基本证书域
项名称 | 描述 | 备注 |
---|---|---|
version | 版本号 | |
serialNumber | 序列号 | |
signature | 签名算法 | |
issuer | 颁发者 | |
validity | 有效日期 | |
subject | 主体 | |
subjectPublicKeyInfo | 主体公钥信息 | |
issuerUniqueID | 颁发者唯一标识符 | 本标准中不使用 |
subjectUniqueID | 主体唯一标识符 | 本标准中不使用 |
extensions | 扩展项 | 按本标准的扩展项进行定义,参考 A.3 |
证书结构-扩展域
名称 | 描述 | 关键度 |
---|---|---|
authorityKeyIdentifier | 机构密钥标识符 | 非关键 |
subjectKeyIdentifier | 主体密钥标识符 | 非关键 |
keyUsage | 密钥用法 | 双证书标记为关键,单证书标记为非关键 |
extKeyUsage | 扩展密钥用法 | 如果密钥的用法只限于所指示的用途时标记为关键,否则标记为非关键 |
privateKeyUsagePeriod | 私有密钥使用期 | 非关键 |
certificatePolicies | 证书策略 | 非关键 |
policyMappings | 策略映射 | 如果证书用户需要正确解释发布的 CA 设定的规则时标识为关键,否则标识为非关键 |
subjectAltName | 主体可选替换名称 | 非关键 |
issuerAltName | 颁发者可选替换名称 | 非关键 |
subjectDirectoryAttributes | 主体目录属性 | 非关键 |
basicConstraints | 基本限制 | CA 证书标记为关键,终端实体证书标记为非关键 |
nameConstraints | 名称限制 | 如果证书用户系统应检验所处理的认证路劲与此扩展中的值是否一致时标记为关键,否则标记为非关键 |
policyConstraints | 策略约束 | 如果证书用户需要正确地解释认证机构 CA 设定的规则时标识为关键,否则标识为非关键 |
CRLDistributionPoints | CRL 发布点 | 非关键 |
inhibitAnyPolicy | 限制所有策略 | 如果证书用户需要正确地解释认证机构 CA 设定的规则时标识为关键,否则标识为非关键 |
freshestCRL | 最新的 CRL | 非关键 |
id-pkix | 私有的 Internet 扩展 | 非关键 |
authorityInfoAccess | 机构信息访问 | 非关键 |
SubjectInformationAccess | 主体信息访问 | 非关键 |
IdentifyCardNumber | 个人身份证号 | 非关键 |
InuranceNumber | 个人社会保险号 | 非关键 |
ICRegistrationNumber | 企业工商注册号 | 非关键 |
OrganizationCode | 企业组织机构代码 | 非关键 |
TaxationNumber | 企业税号 | 非关键 |
GM/T 0089 简单证书注册协议规范
- 一种证书管理的简单协议
- 主要用于客户端和服务器(RA/CA)间证书自动注册
- 结合了 PKCS#7 和 PKCS#10
- 在大规模设备证书自动注册中简化了对请求者身份鉴别的工作
GM/T 0092 基于 SM2 算法的证书申请语法规范
- 定义了基于 SM2 算法的证书申请和证书申请信息语法格式
- 参照 PKCS#10,面向 SM2 算法
- 证书申请
- 申请信息
- 签名算法
- 对申请信息的签名
- 证书申请信息
- 主体名称
- 公钥信息
- 一组可选属性集
- 增添扩展属性和响应格式
GM/T 0093 证书与密钥交换格式规范
- 交换:将个人的证书和密钥(含私钥)从一个平台传递到另一个平台
- 参照 PKCS#12(个人信息交换语法)
- 面向基于 SM2 算法的证书
- 传递证书和密钥涉及机密和完整性保护
- 支持四种组合保护
- 机密性:公钥加密;口令
- 完整性:数字签名;口令
- 口令方式:基于口令导出密钥对称加密或消息鉴别,安全级低
- 公钥方式:安全级高,但双方平台须提供公钥加密和数字签名支持
PKCS 系列标准要点与应用
PKCS 简介
- 1977 年 RSA 算法一发成名
- 1982 年 RSA 数据安全公司乘势而起
- 以业界“大拿”身份牵头制定一系列以公钥密码为主(围绕公钥密码)的标准
- PKCS:Public-Key Cryptography Standards
- 在国际具有重要影响,我国国家标准和商密标准适度参照
PKCS 目前共发布 15 个标准
- PKCS#1:RSA 加密标准
- PKCS#2:涉及 RSA 的消息摘要加密,后并入 PKCS#1 中
- PKCS#3:Diffie-Hellman 密钥协议标准
- PKCS#4:规定 RSA 密钥语法,后被包含进 PKCS#1
- PKCS#5:基于口令的加密标准
- PKCS#6:扩展证书语法标准
- PKCS#7:密码消息语法标准
- PKCS#8:私钥信息语法标准
- PKCS#9:可选属性类型
- PKCS#10:证书请求语法标准
- PKCS#11:密码令牌接口标准
- PKCS#12:个人信息交换语法标准
- PKCS#13:椭圆曲线密码标准
- PKCS#14:伪随机数产生标准
- PKCS#15:密码令牌信息语法标准
PKCS 标准体系
- 公钥算法类
- RSA 算法(含 2、4)
- DH 协议
- ECC
- 格式规范类
- 扩展证书
- 密码消息
- 私钥信息
- 证书请求
- 个人信息交换
- 密码令牌信息
- 相关密码类:基于口令加密
- 配套类
- 可选属性类型
- 密码令牌接口
- 伪随机数产生
PKCS 与证书相关标准
- PKCS#7:密码消息语法标准
- PKCS#10:证书请求语法标准
- PKCS#12:个人信息交换语法标准
- PKCS#8:私钥信息语法标准
- PKCS#5:基于口令的加密标准
- PKCS#6:扩展证书语法标准
- PKCS#9:可选属性类型
PKCS#1(#2,#4)RSA 加密标准(v2.2)概要
主要内容
- 基础
- 密钥(N,e,d):模数 N;公钥 e;私钥 d
- 数据转换:整数 <–> 字符串
- 基础运算:机密和验证 $X^e$ mod N;解密和签名 $X^d$ mod N
- 算法
- 基础运算 + 相关技术 → 一定安全目标算法
- 加密算法:RSAES-OAEP;RSAES-PKCS1-V1_5
- 签名算法:RSASSA-PSS;RSASSA-PKCS1-V1_5
- 配套
- 签名的编码和解码(PSS 签名随机化的具体实现)
- 安全考虑
- 附录
国家和商密标准一般要求采用 RSA 算法时密钥结构采用 PKCS#1
PKCS#7 密码消息语法标准(v1.5)概要
主要内容
- 概要
- 为使用密码算法的数据规定了通用语法,如数字签名和数字信封
- 提供了许多格式选项
- 未加密或签名的格式化消息
- 已封装(加密)消息
- 已签名消息
- 既经过签名又经过加密的消息
- 重点:公钥密码数据规定
- 数字签名结果:包含签名证书(一列相关证书撤回列表)和已证明路径上任何其他证书
- 加密数据:通常包含发行者的参考消息和证书的序列号
- 填充
- 填充:a 个字节“a”
- “a”:输入最后一个分组达到分组长度所需要的字节数
PKCS#12 个人信息交换语法标准概要
- 定义了一种存档文件格式,扩展名为“.p12”或“.pfx”
- 文件通常是被加密的,内部存储容器被称作“安全包裹”,通常同时也被加密及单独存在
- 一些安全包裹被预先定义用来存储证书、私钥以及证书吊销列表等
- 也可以使用一些安全包裹存储任意数据
- 实际应用:通常只用来存储一个私钥以及与之有关的证书或证书链
- 通过加密对私钥进行保护,主要采用基于口令的加密
PKCS#8 私钥信息
定义
- 私钥信息语法
- 加密私钥语法:使用 PKCS#5 标准
PKCS#5 基于口令的加密标准概要
- 定义一个基于口令的加密方法
- 密钥:由口令生成
- 明文:八位位组串
- 密文:八位位组串
- PKCS#8(私钥信息语法标准)中用于加密私钥,以便于密钥的安全传输
PKCS#10 证书请求语法标准(v1.7)概要
证书请求信息
- 一个唯一识别名
- 公钥
- 可选的一组属性
PKCS 学习使用要点
- 了解或易于查阅各标准的基本功能
- 熟悉文件类型(扩展名决定的文件特性)
- 了解和国家和商用密码相关标准对照关系(下表)
国家/商用密码标准 | PKCS | 对应文件类型 |
---|---|---|
GM/T 0093 证书与密钥交换格式规范 | PKCS#12 个人信息交换语法标准 | .p12 .pfx |
GM/T 0092 基于 SM2 算法的证书申请语法规范 | PKCS#10 密码消息语法标准 | |
GM/T 0089 简单证书注册协议规范 | PKCS#7 证书请求语法标准 PKCS#10 | .p7b |
证书相关文件类型
- 不含私钥
- X.509 DER 编码(二进制):.DER、.CER、.CRT
- X.509 PAM 编码(Base64):.PEM、.CER、.CRT
- P7b:树状证书链,也支持单个证书
- 包含私钥:PKCS#12:.P12、.PFX(用于存放个人证书/私钥,通常包含保护密码)
- 其他
- P10:证书请求
- P7r:CA 对证书请求的回复,只用于导入
PKCS#7 常用后缀:.P7B .P7C .SPC
证书导出演示(证书文件主要类型和内容)
certmgr.msc # Windows 系统运行证书管理器
导出文件格式:可以用不同的文件格式导出证书。
- DER 编码二进制 X.509(.CER)
- Base64 编码 X.509(.CER)
- 加密消息语法标准 - PKCS #7 证书(.P7B)
- 如果可能,则包括证书路径中的所有证书
- 个人信息交换 - PKCS #12(.PFX)
- 如果可能,则包括证书路径中的所有证书
- 如果导出成功,删除私钥
- 导出所有扩展属性
- 启用证书隐私
- Microsoft 系列证书存储(.SST)