公开文集
0x01 SRC 资产管理系统
0x02 Web 漏洞案例库
0x03 小程序漏洞案例库
第一章:小程序渗透基础
1.1 微信小程序反编译与动态调试
1.2 微信小程序强制开启开发者模式
0x99 信息安全学习体系
01-网络安全基础
Day-001-TCP-IP协议栈安全分析
Day-002-DNS协议安全与DNS劫持攻防
Day-003-IPv6 安全基础与过渡
Day-004-HTTP-HTTPS协议深度解析
Day-005-网络嗅探与流量分析技术
Day-006-防火墙原理与配置实践
Day-007-网络地址转换 NAT 安全分析
Day-008-路由协议安全 RIP-OSPF-BGP
Day-009-VLAN 安全与 VLAN-Hopping
Day-010-无线网络基础与安全 802.11
Day-011-网络访问控制 802.1X-NAC
Day-012-网络分段与微隔离设计
Day-013-负载均衡器安全配置
Day-014-CDN安全与防护
Day-015-NTP安全
Day-016-DHCP安全与攻击防护
Day-017-ICMP协议安全分析
Day-018-网络协议模糊测试基础
Day-019-网络流量基线建立
Day-020-网络取证基础
Day-021-网络入侵检测系统 NIDS
Day-022-网络入侵防御系统 NIPS
Day-023-网络流量加密与解密
Day-024-网络协议逆向工程基础
Day-025-网络性能与安全权衡
Day-026-SDN 安全
Day-027-网络虚拟化安全
Day-028-网络欺骗技术
Day-029-网络威胁情报应用
Day-030-网络容量规划与安全
Day-031-网络安全架构设计实战
02-Web 安全
Day-032-OWASP-Top-10-2021详解
Day-033-SQL 注入原理与手工检测
Day-034-SQL注入进阶报错注入与盲注
Day-035-XSS跨站脚本攻击基础
Day-036-XSS 进阶绕过与利用
Day-037-XSS进阶绕过与利用
Day-038-CSRF 跨站请求伪造
Day-039-文件上传漏洞
Day-040-反序列化漏洞基础
Day-041-PHP反序列化深入
Day-042-Java反序列化深入
Day-043-SSTI 服务端模板注入
Day-044-文件包含漏洞 LFI-RFI
Day-045-命令注入漏洞
Day-046-XXE-XML 外部实体注入
Day-047-反序列化漏洞进阶
Day-048-API 安全基础
Day-049-API认证与授权安全
Day-050-API漏洞挖掘实战
Day-051-文件上传漏洞进阶
Day-052-反序列化漏洞实战
Day-053-Web 安全综合实战
Day-054-移动安全基础
Day-055-Android 应用安全测试
Day-056-iOS 应用安全测试
Day-057-移动应用综合实战
Day-058-云安全基础
Day-059-AWS 安全实战
Day-060-Azure 安全实战
Day-061-GCP 安全实战
Day-062-云安全综合实战
Day-063-容器安全基础
Day-064-Docker 安全实战
Day-065-Kubernetes 安全实战
Day-066-容器安全综合实战
Day-067-API 安全进阶
Day-068-服务端请求伪造 SSRF 深入
Day-069-文件上传漏洞进阶
Day-070-反序列化漏洞实战进阶
Day-071-业务逻辑漏洞深入
Day-072-前端安全深入
Day-073-Web 安全综合实战
Day-074-云安全进阶
Day-075-移动安全进阶
Day-076-API 安全进阶
Day-077-前端安全进阶
Day-078-业务逻辑漏洞进阶
Day-079-反序列化漏洞实战进阶
Day-080-文件上传漏洞实战进阶
Day-081-SSTI 服务端模板注入进阶
Day-082-XXE-XML 外部实体注入进阶
Day-083-SSRF 服务端请求伪造进阶
Day-084-命令注入漏洞进阶
Day-085-文件包含漏洞进阶
Day-086-反序列化漏洞实战进阶
Day-087-文件上传漏洞实战进阶
Day-088-SSTI 服务端模板注入实战进阶
Day-089-XXE-XML 外部实体注入实战进阶
Day-090-SSRF 服务端请求伪造实战进阶
Day-091-命令注入漏洞实战进阶
Day-092-Web 安全综合实战
Day-093-GraphQL 安全
Day-094-JWT 与 OAuth2 安全
03-系统安全
Day-095-系统监控与检测
Day-096-主机防火墙配置
Day-097-系统审计与合规
Day-098-Linux 系统安全进阶
Day-099-Windows 系统安全进阶
Day-100-容器安全进阶
Day-101-容器编排安全进阶
Day-102-Linux 内核安全
Day-103-Windows 内核安全
Day-104-系统安全总结与实战
Day-105-Linux 系统安全基础
Day-106-Windows 系统安全基础
Day-107-容器安全基础
Day-108-系统加固技术
Day-109-日志分析技术
Day-110-威胁狩猎技术
04-应用安全
Day-111-安全编码规范
Day-112-输入验证技术
Day-113-输出编码技术
Day-114-错误处理安全
Day-115-会话管理安全
Day-116-认证安全
Day-117-授权安全
Day-118-数据保护安全
Day-119-日志安全
Day-120-API 安全
Day-121-微服务安全
Day-122-新兴技术安全概论
Day-123-DevSecOps 流水线安全
Day-124-云原生安全架构
Day-125-API 安全最佳实践
Day-126-安全编码规范
Day-127-SDL 安全开发生命周期
Day-128-威胁建模实战
Day-129-安全需求分析
Day-130-安全架构设计
Day-131-安全编码实践Java
Day-132-安全编码实践Python
Day-133-代码审计方法论
Day-134-静态代码分析SAST
Day-135-动态应用测试DAST
Day-136-交互式测试IAST
Day-137-软件成分分析SCA
Day-138-依赖漏洞管理
Day-139-安全测试自动化
Day-140-漏洞管理与响应
Day-141-应用安全总结与展望
Day-142-OWASP-Top10-2024 详解
Day-143-CWE-Top25 分析
Day-144-漏洞挖掘方法论
Day-145-模糊测试技术
Day-146-逆向工程基础
Day-147-漏洞利用开发基础
Day-148-漏洞复现与验证
Day-149-漏洞披露流程
Day-150-CVE 申请与管理
Day-151-漏洞赏金计划
Day-152-等保2.0详解
Day-153-GDPR 合规实践
Day-154-数据安全法解读
Day-155-个人信息保护法与合规指南
Day-156-个人信息保护法解读
Day-157-ISO-27001 信息安全管理体系
Day-158-SOC-2 合规与审计
Day-159-PCI-DSS 支付卡行业数据安全标准
Day-160-网络安全审查办法解读
Day-161-数据出境安全评估办法
Day-162-应用安全评估实战
Day-163-红蓝对抗演练
Day-164-安全应急响应
Day-165-安全运营中心建设
Day-166-应用安全总结与展望
05-密码学
Day-167-密码学基础
Day-168-对称加密算法详解
Day-169-非对称加密算法详解
Day-170-哈希函数与数字签名
Day-171-密钥管理与PKI
Day-172-TLS-SSL 协议详解
Day-173-国密算法详解
Day-174-认证与密钥协议
Day-175-随机数生成与熵源
Day-176-椭圆曲线密码学详解
Day-177-后量子密码学详解
Day-178-高级密码学主题
Day-179-密码学行业应用精选
Day-180-常用加密算法原理与实现
Day-181-密码学总结与展望
Day-182-密码学系列总结与展望
06-渗透测试
Day-183-渗透测试方法论
Day-184-信息收集技术详解
Day-185-漏洞扫描技术详解
Day-186-漏洞利用技术详解
Day-187-渗透测试中的漏洞利用框架
Day-188-漏洞利用框架与 Metasploit 深入
Day-189-渗透测试中的 WAF 绕过技术
Day-190-渗透测试中的模糊测试技术
Day-191-渗透测试中的代码审计与静态分析
Day-192-渗透测试中的密码哈希破解技术
Day-193-渗透测试报告编写指南
Day-194-Web 应用渗透测试
Day-195-渗透测试中的 API 安全测试
Day-196-渗透测试中的 GraphQL 安全测试
Day-197-渗透测试中的前后端分离应用测试
Day-198-渗透测试中的小程序安全测试
Day-199-渗透测试中的浏览器安全测试
Day-200-OAuth-SSO安全测试
Day-201-渗透测试中的业务逻辑漏洞测试
Day-202-渗透测试中的厚客户端安全测试
Day-203-渗透测试综合实战演练
Day-204-内网渗透技术详解
Day-205-渗透测试中的内网信息收集进阶
Day-206-渗透测试中的域森林渗透技术
Day-207-渗透测试中的权限维持技术
Day-208-渗透测试中的横向移动技术
Day-209-渗透测试中的痕迹清理与反取证技术
Day-210-渗透测试中的数据窃取与 Exfiltration 技术
Day-211-渗透测试中的内部威胁与数据泄露测试
Day-212-渗透测试中的物理安全渗透
Day-213-社会工程学攻击技术
Day-214-移动应用渗透测试
Day-215-云安全渗透测试
Day-216-渗透测试中的容器与 Kubernetes 安全渗透
Day-217-渗透测试中的 Serverless 安全测试
Day-218-渗透测试中的微服务安全测试
Day-219-物联网安全渗透测试
Day-220-工业控制系统安全渗透测试
Day-221-无线网络安全渗透测试
Day-222-数据库安全渗透测试
Day-223-渗透测试中的供应链安全测试
Day-224-红队演练技术详解
Day-225-渗透测试中的红队基础设施搭建
Day-226-渗透测试中的威胁情报与狩猎
Day-227-渗透测试中的综合指纹识别技术
Day-228-自动化渗透测试技术
Day-229-渗透测试中的运维安全测试
Day-230-渗透测试中的区块链与智能合约安全测试
Day-231-渗透测试中的漏洞管理与修复验证
Day-232-渗透测试法律与合规
Day-233-后渗透攻击技术详解
Day-234-渗透测试中的人工智能应用
Day-235-漏洞利用开发深入
Day-236-云原生渗透测试深入
07-应急响应
Day-237-应急响应概述与核心概念
Day-238-应急响应流程框架
Day-239-CSIRT 团队组建与职责分工
Day-240-应急响应工具包准备
Day-241-应急响应法律与合规要求
Day-242-安全事件检测方法与指标
Day-243-云原生应急响应
Day-244-日志收集与分析技术
Day-245-网络流量分析与异常识别
Day-246-自动化响应与 SOAR
Day-247-端点监控与 EDR 技术
Day-248-威胁狩猎方法论
Day-249-威胁情报在检测中的应用
Day-250-数字取证基础与证据链管理
Day-251-内存取证技术
Day-252-磁盘取证与文件恢复
Day-253-网络取证与数据包分析
Day-254-云环境与容器取证
Day-255-恶意代码静态分析技术
Day-256-恶意代码动态分析技术
Day-257-恶意代码行为分析方法
Day-258-逆向工程基础与工具
Day-259-沙箱技术与自动化分析
Day-260-事件隔离与遏制策略
Day-261-威胁根除与系统修复
Day-262-系统恢复与数据重建
Day-263-业务连续性计划
Day-264-事件复盘与经验总结
Day-265-APT 攻击事件复盘分析
Day-266-勒索软件事件响应实战
Day-267-数据泄露事件处置流程
Day-268-内部威胁调查与取证
Day-269-综合应急响应演练
08-安全运维
Day-270-安全运营中心 SOC 概述
Day-271-安全监控指标体系
Day-272-安全告警管理
Day-273-安全可视化与仪表盘
Day-274-监控工具选型
Day-275-日志采集技术
Day-276-日志标准化与解析
Day-277-日志存储与归档
Day-278-日志分析技术
Day-279-日志合规要求
Day-280-SIEM 架构与设计
Day-281-关联规则引擎
Day-282-高级关联分析
Day-283-UEBA 用户实体行为分析
Day-284-威胁狩猎
Day-285-SOAR 基础概念
Day-286-剧本设计
Day-287-自动化响应技术
Day-288-安全工具集成
Day-289-SOAR 度量与优化
Day-290-安全基线管理
Day-291-漏洞管理流程
Day-292-补丁管理策略
Day-293-变更安全管理
Day-294-合规审计技术
Day-295-7x24 安全运营
Day-296-安全事件管理流程
Day-297-安全运营度量体系
Day-298-持续改进机制
Day-299-安全运维综合演练
Day-300-云原生安全运营
Day-301-AI 与机器学习安全运营
Day-302-安全自动化脚本实战
09-移动安全
Day-303-移动安全威胁概述
Day-304-移动设备安全架构
Day-305-移动操作系统安全模型
Day-306-移动应用权限管理
Day-307-移动端数据加密
Day-308-330-Android 安全合集
Day-309-Android 安全架构
Day-310-Android 组件安全
Day-311-Android 权限与隐私
Day-312-Android 逆向工程
Day-313-Android 应用加固
Day-314-iOS 安全架构
Day-315-iOS 应用沙盒机制
Day-316-越狱与反越狱
Day-317-iOS 逆向工程
Day-318-iOS 企业分发安全
Day-319-移动安全开发生命周期
Day-320-移动应用安全测试
Day-321-移动应用加固技术
Day-322-移动威胁防护
Day-323-移动安全合规
10-云安全
Day-324-云计算安全模型
Day-325-责任共担模型
Day-326-云安全威胁模型
Day-327-云安全合规框架
Day-328-云安全架构设计
Day-329-AWS IAM 安全
Day-330-AWS 网络安全
Day-331-AWS 存储安全
Day-332-AWS 安全监控
Day-333-AWS 安全最佳实践
Day-334-Azure AD 安全
Day-335-Azure 网络安全
Day-336-Azure 存储安全
Day-337-Azure 安全中心
Day-338-Azure 安全最佳实践
Day-339-容器安全基础
Day-340-Kubernetes 安全
Day-341-Serverless 安全
Day-342-云原生 DevSecOps
Day-343-云安全态势管理 CSPM
11-物联网工控
Day-344-物联网安全概述
Day-345-IoT 通信协议安全
Day-346-IoT 设备安全
Day-347-IoT 平台安全
Day-348-IoT 应用安全
Day-349-工业控制系统概述
Day-350-工控协议安全
Day-351-PLC 安全
Day-352-SCADA 系统安全
Day-353-工控安全防护
12-综合与总结
Day-354-安全职业发展路径
Day-355-安全技术趋势展望
Day-356-安全建设方法论
Day-357-经典攻防案例复盘
Day-358-安全学习资源指南
Day-359-信息安全行业求职指南
-
+
首页
Day-171-密钥管理与PKI
# Day 185: 密钥管理与 PKI > 密码学系列第 5 天 | 预计阅读时间:45 分钟 | 难度:★★★★☆ --- ## 清单 目录 1. [密钥管理概述](#密钥管理概述) 2. [密钥生命周期](#密钥生命周期) 3. [密钥存储方案](#密钥存储方案) 4. [密钥派生与协商](#密钥派生与协商) 5. [PKI 公钥基础设施](#pki 公钥基础设施) 6. [X.509 证书](#x509 证书) 7. [证书链与验证](#证书链与验证) 8. [证书吊销](#证书吊销) 9. [实战应用](#实战应用) 10. [安全实践](#安全实践) 11. [总结与思考](#总结与思考) 12. [参考资料](#参考资料) --- ## 密钥管理概述 ### 为什么需要密钥管理 **密钥管理的重要性**: ``` ┌─────────────────────────────────────────────────────────────┐ │ 密钥管理重要性 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ Kerckhoffs 原则(1883 年): │ │ "密码系统的安全性应仅依赖于密钥的保密,而非算法的保密" │ │ │ │ 含义: │ │ ├── 算法可以公开 │ │ ├── 密钥必须保密 │ │ └── 密钥管理是安全的核心 │ │ │ │ 现实问题: │ │ ├── 密钥泄露 = 系统完全被攻破 │ │ ├── 密钥丢失 = 数据永久丢失 │ │ ├── 密钥管理不当 = 合规违规 │ │ └── 据统计 60% 的安全事件与密钥管理不当有关 │ │ │ │ Schneier 定律: │ │ "任何人设计的密码系统,如果密钥管理很糟糕,那么它就是 │ │ 不安全的" │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### 密钥管理挑战 ``` ┌─────────────────────────────────────────────────────────────┐ │ 密钥管理挑战 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 技术挑战: │ │ ├── 安全存储:防止未授权访问 │ │ ├── 安全传输:防止中间人攻击 │ │ ├── 密钥轮换:定期更新密钥 │ │ └── 密钥销毁:安全删除密钥 │ │ │ │ 运营挑战: │ │ ├── 密钥数量:大规模系统有数万密钥 │ │ ├── 密钥类型:加密密钥、签名密钥、认证密钥等 │ │ ├── 密钥策略:不同密钥有不同生命周期 │ │ └── 密钥审计:追踪密钥使用 │ │ │ │ 合规挑战: │ │ ├── 法规要求:PCI-DSS、GDPR、等保 2.0 │ │ ├── 审计要求:密钥使用记录 │ │ └── 行业标准:NIST、ISO 27001 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` --- ## 密钥生命周期 ### 完整生命周期 ``` ┌─────────────────────────────────────────────────────────────┐ │ 密钥完整生命周期 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 1. 密钥生成 (Generation) │ │ ├── 使用 CSPRNG(密码学安全随机数生成器) │ │ ├── 足够密钥长度 │ │ ├── 符合算法要求 │ │ └── 记录生成时间、用途 │ │ │ │ 2. 密钥存储 (Storage) │ │ ├── HSM(硬件安全模块) │ │ ├── KMS(密钥管理系统) │ │ ├── 加密存储 │ │ └── 访问控制 │ │ │ │ 3. 密钥分发 (Distribution) │ │ ├── 安全通道传输 │ │ ├── 密钥协商协议(DH/ECDH) │ │ ├── 密钥封装(RSA-KEM) │ │ └── PKI 证书分发 │ │ │ │ 4. 密钥使用 (Usage) │ │ ├── 访问控制 │ │ ├── 使用审计 │ │ ├── 最小权限 │ │ └── 使用期限 │ │ │ │ 5. 密钥更新 (Update) │ │ ├── 定期轮换(基于时间或使用次数) │ │ ├── 泄露后更新 │ │ ├── 员工离职更新 │ │ └── 算法升级更新 │ │ │ │ 6. 密钥撤销 (Revocation) │ │ ├── 证书撤销列表(CRL) │ │ ├── 在线证书状态协议(OCSP) │ │ └── 立即生效 │ │ │ │ 7. 密钥备份 (Backup) │ │ ├── 安全备份 │ │ ├── 异地存储 │ │ ├── 访问控制 │ │ └── 定期测试恢复 │ │ │ │ 8. 密钥恢复 (Recovery) │ │ ├── 密钥恢复代理 │ │ ├── 秘密共享(Shamir's Secret Sharing) │ │ └── 紧急访问程序 │ │ │ │ 9. 密钥销毁 (Destruction) │ │ ├── 安全删除(多次覆盖) │ │ ├── 物理销毁(HSM) │ │ ├── 销毁记录 │ │ └── 第三方见证 │ │ │ │ 10. 密钥归档 (Archiving) │ │ ├── 历史数据解密需要 │ │ ├── 法律合规要求 │ │ ├── 安全存储 │ │ └── 有限访问 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### 密钥轮换策略 **密钥轮换最佳实践**: ``` ┌─────────────────────────────────────────────────────────────┐ │ 密钥轮换策略 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 轮换触发条件: │ │ ├── 时间到期:达到预设有效期 │ │ ├── 使用次数:达到最大使用次数 │ │ ├── 安全事件:疑似或确认泄露 │ │ ├── 人员变更:密钥持有者离职 │ │ └── 算法升级:使用更强算法 │ │ │ │ 轮换周期建议(2024 年): │ │ ┌────────────────┬───────────────────────────────────────┐ │ │ │ 密钥类型 │ 轮换周期 │ │ │ ├────────────────┼───────────────────────────────────────┤ │ │ │ TLS 服务器密钥 │ 1-2 年(配合证书) │ │ │ │ API 密钥 │ 90 天 │ │ │ │ 数据库密码 │ 90 天 │ │ │ │ 加密密钥 │ 1-2 年 │ │ │ │ 签名密钥 │ 2-3 年 │ │ │ │ 根 CA 密钥 │ 10-20 年(离线存储) │ │ │ │ 会话密钥 │ 每次会话 │ │ │ └────────────────┴───────────────────────────────────────┘ │ │ │ │ 轮换最佳实践: │ │ ✓ 自动化轮换(减少人为错误) │ │ ✓ 无缝轮换(不影响业务) │ │ ✓ 密钥版本管理(支持回滚) │ │ ✓ 审计日志(记录轮换历史) │ │ ✓ 测试验证(轮换后验证功能) │ │ │ └─────────────────────────────────────────────────────────────┘ ``` --- ## 密钥存储方案 ### 企业级存储 **HSM(硬件安全模块)**: ``` ┌─────────────────────────────────────────────────────────────┐ │ HSM 硬件安全模块 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 定义: │ │ 专用硬件设备,用于安全生成、存储和管理密钥 │ │ │ │ 安全特性: │ │ ├── 物理安全:防篡改外壳、防探测 │ │ ├── 逻辑安全:访问控制、认证 │ │ ├── 密钥隔离:密钥永不离开 HSM │ │ ├── 审计日志:所有操作记录 │ │ └── 合规认证:FIPS 140-2/3 Level 3+ │ │ │ │ 主要厂商: │ │ ├── Thales(原 Gemalto) │ │ ├── Entrust(原 nCipher) │ │ ├── Utimaco │ │ ├── YubiHSM(小型 HSM) │ │ └── AWS CloudHSM(云 HSM) │ │ │ │ 应用场景: │ │ ├── 根 CA 密钥存储 │ │ ├── 金融交易密钥 │ │ ├── 代码签名密钥 │ │ └── 数据库 TDE 密钥 │ │ │ │ 优势: │ │ ✓ 最高安全级别 │ │ ✓ 合规支持好 │ │ ✓ 高性能密码运算 │ │ ✗ 成本高(数十万到数百万) │ │ ✗ 部署复杂 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` **云 KMS**: ``` ┌─────────────────────────────────────────────────────────────┐ │ 云密钥管理服务 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ AWS KMS: │ │ ├── 密钥类型:客户管理密钥 (CMK)、AWS 管理密钥 │ │ ├── 存储:多租户 HSM 集群 │ │ ├── 集成:与 AWS 服务深度集成 │ │ ├── 功能:密钥轮换、审计、策略 │ │ └── 合规:FIPS 140-2 Level 2 │ │ │ │ Azure Key Vault: │ │ ├── 软件密钥:标准层 │ │ ├── HSM 密钥:高级层(FIPS 140-2 Level 2) │ │ ├── 功能:密钥、证书、秘密管理 │ │ └── 集成:Azure 服务集成 │ │ │ │ GCP Cloud KMS: │ │ ├── 密钥类型:软件、HSM、Autokey │ │ ├── 功能:密钥管理、加密操作 │ │ └── 合规:FIPS 140-2 Level 2/3 │ │ │ │ 阿里云 KMS: │ │ ├── 密钥类型:普通密钥、HSM 密钥 │ │ ├── 合规:国密支持(SM2/SM3/SM4) │ │ └── 集成:阿里云服务 │ │ │ │ 优势: │ │ ✓ 无需自建基础设施 │ │ ✓ 按需付费 │ │ ✓ 自动扩展 │ │ ✓ 与云服务集成 │ │ ✗ 依赖云厂商 │ │ ✗ 数据出境问题(跨国企业) │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### 应用级存储 **密钥分层存储**: ``` ┌─────────────────────────────────────────────────────────────┐ │ 密钥分层存储模型 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 层次结构: │ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ 根密钥 (Root Key) │ │ │ │ - 长期存储(年) │ │ │ │ - HSM 保护 │ │ │ │ - 用于加密密钥加密密钥 (KEK) │ │ │ └─────────────────────────────────────────────────────┘ │ │ ↓ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ 密钥加密密钥 (KEK - Key Encryption Key) │ │ │ │ - 中期存储(月/年) │ │ │ │ - KMS 保护 │ │ │ │ - 用于加密数据密钥 (DEK) │ │ │ └─────────────────────────────────────────────────────┘ │ │ ↓ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ 数据密钥 (DEK - Data Encryption Key) │ │ │ │ - 短期存储(小时/天) │ │ │ │ - 内存存储 │ │ │ │ - 用于加密实际数据 │ │ │ │ - 定期轮换 │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ 信封加密 (Envelope Encryption): │ │ 1. 生成 DEK(数据密钥) │ │ 2. 使用 DEK 加密数据 │ │ 3. 使用 KEK 加密 DEK │ │ 4. 存储:加密数据 + 加密 DEK │ │ 5. 解密:KEK 解密 DEK → DEK 解密数据 │ │ │ │ 优势: │ │ ✓ 根密钥/KEK 不需要频繁访问 │ │ ✓ DEK 可以快速轮换 │ │ ✓ 支持大规模数据加密 │ │ ✓ 符合合规要求 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` **代码示例**: ```python # ============= 信封加密示例 ============= from cryptography.hazmat.primitives.ciphers.aead import AESGCM from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC from cryptography.hazmat.primitives import hashes import os class EnvelopeEncryption: """信封加密实现""" def __init__(self, master_key: bytes): """初始化,master_key 来自 KMS/HSM""" self.master_key = master_key # KEK def encrypt(self, plaintext: bytes) -> tuple: """信封加密""" # 1. 生成数据密钥 (DEK) dek = os.urandom(32) # 256 位 AES 密钥 nonce = os.urandom(12) # GCM nonce # 2. 使用 DEK 加密数据 aesgcm = AESGCM(dek) ciphertext = aesgcm.encrypt(nonce, plaintext, None) # 3. 使用 KEK 加密 DEK(简化示例,实际使用 KMS) encrypted_dek = self._wrap_key(dek) # 4. 返回:加密数据 + 加密 DEK + nonce return ciphertext, encrypted_dek, nonce def decrypt(self, ciphertext: bytes, encrypted_dek: bytes, nonce: bytes) -> bytes: """信封解密""" # 1. 使用 KEK 解密 DEK dek = self._unwrap_key(encrypted_dek) # 2. 使用 DEK 解密数据 aesgcm = AESGCM(dek) plaintext = aesgcm.decrypt(nonce, ciphertext, None) return plaintext def _wrap_key(self, dek: bytes) -> bytes: """密钥封装(简化)""" # 实际应使用 KMS API from cryptography.hazmat.primitives.ciphers.aead import AESGCM nonce = os.urandom(12) aesgcm = AESGCM(self.master_key) encrypted = aesgcm.encrypt(nonce, dek, None) return nonce + encrypted def _unwrap_key(self, encrypted_dek: bytes) -> bytes: """密钥解封(简化)""" nonce = encrypted_dek[:12] ciphertext = encrypted_dek[12:] from cryptography.hazmat.primitives.ciphers.aead import AESGCM aesgcm = AESGCM(self.master_key) return aesgcm.decrypt(nonce, ciphertext, None) # 使用示例 if __name__ == "__main__": # 主密钥(实际来自 KMS/HSM) master_key = os.urandom(32) # 创建加密器 encryptor = EnvelopeEncryption(master_key) # 加密 data = b"Sensitive data to encrypt" ciphertext, encrypted_dek, nonce = encryptor.encrypt(data) print(f"原文:{data}") print(f"密文:{ciphertext.hex()[:32]}...") print(f"加密 DEK: {encrypted_dek.hex()[:32]}...") # 解密 decrypted = encryptor.decrypt(ciphertext, encrypted_dek, nonce) print(f"解密:{decrypted}") print(f"✓ 加解密成功:{data == decrypted}") ``` --- ## 密钥派生与协商 ### 密钥派生函数 **KDF(Key Derivation Function)**: ``` ┌─────────────────────────────────────────────────────────────┐ │ 密钥派生函数 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 用途: │ │ ├── 从密码派生密钥(密码哈希) │ │ ├── 从主密钥派生子密钥 │ │ ├── 密钥扩展(扩展密钥材料) │ │ └── 密钥协商后派生会话密钥 │ │ │ │ PBKDF2(Password-Based Key Derivation Function 2): │ │ ├── 标准:RFC 8018 │ │ ├── 原理:多次迭代 HMAC │ │ ├── 参数:密码、盐、迭代次数、输出长度 │ │ ├── 推荐:迭代 600000+(NIST 2023) │ │ └── 缺点:易受 GPU/ASIC 攻击 │ │ │ │ bcrypt: │ │ ├── 设计:Provos & Mazières (1999) │ │ ├── 原理:基于 Blowfish 的自适应哈希 │ │ ├── 参数:成本因子(2^rounds) │ │ ├── 推荐:rounds=12+ │ │ └── 优势:抗 GPU 攻击 │ │ │ │ scrypt: │ │ ├── 设计:Percival (2009) │ │ ├── 原理:内存困难函数 │ │ ├── 参数:N(CPU/内存)、r(块大小)、p(并行) │ │ ├── 推荐:N=2^14, r=8, p=1 │ │ └── 优势:抗 ASIC 攻击 │ │ │ │ Argon2: │ │ ├── 设计:密码哈希竞赛获胜者 (2015) │ │ ├── 类型:Argon2d(数据依赖)、Argon2i(指令依赖)、 │ │ │ Argon2id(混合,推荐) │ │ ├── 参数:内存、时间、并行度 │ │ ├── 推荐:64MB 内存,3 次迭代,4 并行 │ │ └── 优势:抗 GPU/ASIC 攻击,最安全 │ │ │ │ HKDF(HMAC-based Key Derivation): │ │ ├── 标准:RFC 5869 │ │ ├── 用途:从密钥材料派生密钥 │ │ ├── 阶段:Extract(提取)+ Expand(扩展) │ │ └── 应用:TLS 1.3、IKEv2 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### 密钥协商 **密钥协商协议**: ``` ┌─────────────────────────────────────────────────────────────┐ │ 密钥协商协议 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ Diffie-Hellman (DH): │ │ ├── 原理:基于离散对数问题 │ │ ├── 参数:大素数 p、生成元 g │ │ ├── 安全:2048 位+ │ │ └── 应用:TLS、IPsec、SSH │ │ │ │ Elliptic Curve DH (ECDH): │ │ ├── 原理:基于椭圆曲线离散对数 │ │ ├── 曲线:P-256、X25519(推荐) │ │ ├── 安全:256 位(相当于 RSA 3072) │ │ └── 优势:密钥短、性能好 │ │ │ │ 协议流程(ECDH): │ │ Alice Bob │ │ │ 私钥 a │ 私钥 b │ │ │ 公钥 A = aG │ 公钥 B = bG │ │ │ │ │ │ │─────── 交换公钥 ─────────────▶│ │ │ │ │ │ │ │ 共享密钥 S = aB │ 共享密钥 S = bA │ │ │ = abG │ = baG │ │ │ │ │ │ │ ✓ S 相同 ✓ │ │ │ │ │ │ │ │ │ 后量子密钥协商: │ │ ├── CRYSTALS-Kyber(NIST 标准化) │ │ ├── 基于格密码学 │ │ ├── 密钥大小:公钥 800 字节,密文 768 字节 │ │ └── 应用:混合部署(ECDH + Kyber) │ │ │ └─────────────────────────────────────────────────────────────┘ ``` --- ## PKI 公钥基础设施 ### PKI 概述 **PKI 组成要素**: ``` ┌─────────────────────────────────────────────────────────────┐ │ PKI 公钥基础设施组成 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 核心组件: │ │ │ │ 1. 证书颁发机构 (CA - Certificate Authority) │ │ ├── 根 CA(Root CA) │ │ │ - 自签名证书 │ │ │ - 离线存储 │ │ │ - 长期有效(10-20 年) │ │ │ - 签发中间 CA 证书 │ │ │ │ │ ├── 中间 CA(Intermediate CA) │ │ │ - 由根 CA 签发 │ │ │ - 在线运营 │ │ │ - 中期有效(5-10 年) │ │ │ - 签发终端实体证书 │ │ │ │ │ └── 签发 CA(Issuing CA) │ │ - 由中间 CA 签发 │ │ - 日常签发证书 │ │ - 短期有效(1-2 年) │ │ │ │ 2. 注册机构 (RA - Registration Authority) │ │ ├── 验证证书申请者身份 │ │ ├── 收集申请信息 │ │ └── 向 CA 提交签发请求 │ │ │ │ 3. 证书存储库 (Certificate Repository) │ │ ├── 存储已签发证书 │ │ ├── 存储 CRL(证书吊销列表) │ │ └── 提供查询服务 │ │ │ │ 4. 终端实体 (End Entity) │ │ ├── 服务器证书 │ │ ├── 客户端证书 │ │ ├── 代码签名证书 │ │ └── 邮件证书 │ │ │ │ 5. 证书吊销系统 │ │ ├── CRL(证书吊销列表) │ │ └── OCSP(在线证书状态协议) │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### 信任模型 **PKI 信任模型**: ``` ┌─────────────────────────────────────────────────────────────┐ │ PKI 信任模型 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 层次模型(Hierarchical): │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ 根 CA (信任锚) │ │ │ │ │ │ │ │ │ ┌──────────┼──────────┐ │ │ │ │ │ │ │ │ │ │ │ 中间 CA 中间 CA 中间 CA │ │ │ │ │ │ │ │ │ │ │ ┌────┴────┐ ┌────┴────┐ ┌────┴────┐ │ │ │ │ │ 终端实体 │ │ 终端实体 │ │ 终端实体 │ │ │ │ │ └─────────┘ └─────────┘ └─────────┘ │ │ │ └─────────────────────────────────────────────────────┘ │ │ 特点:单信任根、结构清晰、广泛使用 │ │ │ │ 网状模型(Mesh): │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ CA1 ◄────► CA2 │ │ │ │ ╲ ╱ │ │ │ │ ╲ ╱ │ │ │ │ CA3 │ │ │ └─────────────────────────────────────────────────────┘ │ │ 特点:多信任根、交叉认证、复杂 │ │ │ │ Web of Trust(信任网): │ │ ├── PGP/GPG 使用 │ │ ├── 用户互相签名认证 │ │ └── 去中心化信任 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` --- ## X.509 证书 ### 证书结构 **X.509 v3 证书格式**: ``` ┌─────────────────────────────────────────────────────────────┐ │ X.509 v3 证书结构 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ TBSCertificate (To Be Signed Certificate): │ │ ├── version:版本号(v3 = 2) │ │ ├── serialNumber:序列号(唯一标识) │ │ ├── signature:签名算法标识 │ │ ├── issuer:颁发者名称(DN 格式) │ │ ├── validity:有效期 │ │ │ ├── notBefore:生效时间 │ │ │ └── notAfter:过期时间 │ │ ├── subject:主体名称(DN 格式) │ │ ├── subjectPublicKeyInfo:主体公钥信息 │ │ │ ├── algorithm:公钥算法 │ │ │ └── subjectPublicKey:公钥 │ │ └── extensions:扩展(v3 特有) │ │ ├── keyUsage:密钥用途 │ │ ├── extendedKeyUsage:扩展密钥用途 │ │ ├── subjectAltName:主体备用名称 │ │ ├── basicConstraints:基本约束(CA/终端) │ │ ├── authorityKeyIdentifier:颁发者密钥标识 │ │ ├── subjectKeyIdentifier:主体密钥标识 │ │ ├── cRLDistributionPoints:CRL 分发点 │ │ ├── authorityInfoAccess:颁发者信息访问 │ │ └── certificatePolicies:证书策略 │ │ │ │ signatureAlgorithm:签名算法 │ │ signatureValue:签名值(CA 私钥签名) │ │ │ │ DN(Distinguished Name)格式示例: │ │ C=CN, ST=Beijing, L=Beijing, O=Company, CN=example.com │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### 证书类型 **常见证书类型**: ``` ┌─────────────────────────────────────────────────────────────┐ │ X.509 证书类型 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 服务器证书(TLS/SSL): │ │ ├── 用途:HTTPS 服务器身份认证 │ │ ├── 主体:域名(CN 或 SAN) │ │ ├── 有效期:1-2 年(CA/B 论坛限制) │ │ └── 类型:DV(域名验证)、OV(组织验证)、EV(扩展验证) │ │ │ │ 客户端证书: │ │ ├── 用途:客户端身份认证 │ │ ├── 主体:用户/设备标识 │ │ └── 应用:双向 TLS、VPN 访问 │ │ │ │ 代码签名证书: │ │ ├── 用途:软件发布者认证 │ │ ├── 主体:公司名称 │ │ └── 应用:Windows Authenticode、macOS Notarization │ │ │ │ 邮件证书(S/MIME): │ │ ├── 用途:邮件加密和签名 │ │ ├── 主体:邮箱地址 │ │ └── 应用:Outlook、Thunderbird │ │ │ │ 根 CA 证书: │ │ ├── 用途:信任锚 │ │ ├── 自签名 │ │ └── 预装在操作系统/浏览器中 │ │ │ │ 中间 CA 证书: │ │ ├── 用途:签发终端实体证书 │ │ ├── 由根 CA 签发 │ │ └── 包含在证书链中 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### 代码操作 **Python 证书操作**: ```python from cryptography import x509 from cryptography.x509.oid import NameOID, ExtensionOID from cryptography.hazmat.primitives import hashes, serialization from cryptography.hazmat.primitives.asymmetric import rsa from cryptography.hazmat.backends import default_backend from datetime import datetime, timedelta # ============= 生成自签名证书 ============= def generate_self_signed_cert(): """生成自签名证书(用于测试)""" # 生成密钥对 private_key = rsa.generate_private_key( public_exponent=65537, key_size=2048, backend=default_backend() ) # 证书主体信息 subject = issuer = x509.Name([ x509.NameAttribute(NameOID.COUNTRY_NAME, "CN"), x509.NameAttribute(NameOID.STATE_OR_PROVINCE_NAME, "Beijing"), x509.NameAttribute(NameOID.LOCALITY_NAME, "Beijing"), x509.NameAttribute(NameOID.ORGANIZATION_NAME, "Test Org"), x509.NameAttribute(NameOID.COMMON_NAME, "localhost"), ]) # 构建证书 cert = x509.CertificateBuilder().subject_name( subject ).issuer_name( issuer ).public_key( private_key.public_key() ).serial_number( x509.random_serial_number() ).not_valid_before( datetime.utcnow() ).not_valid_after( datetime.utcnow() + timedelta(days=365) ).add_extension( x509.SubjectAlternativeName([x509.DNSName("localhost")]), critical=False, ).add_extension( x509.BasicConstraints(ca=False, path_length=None), critical=True, ).sign(private_key, hashes.SHA256(), default_backend()) # 导出证书 cert_pem = cert.public_bytes(serialization.Encoding.PEM) key_pem = private_key.private_bytes( encoding=serialization.Encoding.PEM, format=serialization.PrivateFormat.PKCS8, encryption_algorithm=serialization.NoEncryption() ) print("=== 自签名证书 ===") print(f"主题:{cert.subject}") print(f"颁发者:{cert.issuer}") print(f"有效期:{cert.not_valid_before} - {cert.not_valid_after}") print(f"序列号:{cert.serial_number}") return cert_pem, key_pem # ============= 解析证书 ============= def parse_certificate(cert_pem: bytes): """解析证书信息""" cert = x509.load_pem_x509_certificate(cert_pem, default_backend()) print("\n=== 证书信息 ===") print(f"版本:{cert.version}") print(f"主题:{cert.subject}") print(f"颁发者:{cert.issuer}") print(f"有效期:{cert.not_valid_before} - {cert.not_valid_after}") print(f"序列号:{cert.serial_number}") print(f"签名算法:{cert.signature_algorithm_oid}") # 扩展 try: san = cert.extensions.get_extension_for_oid( ExtensionOID.SUBJECT_ALTERNATIVE_NAME ) print(f"备用名称:{san.value}") except x509.ExtensionNotFound: pass try: bc = cert.extensions.get_extension_for_oid( ExtensionOID.BASIC_CONSTRAINTS ) print(f"CA: {bc.value.ca}, 路径长度:{bc.value.path_length}") except x509.ExtensionNotFound: pass if __name__ == "__main__": cert_pem, key_pem = generate_self_signed_cert() parse_certificate(cert_pem) ``` --- ## 证书链与验证 ### 证书链 **证书链验证流程**: ``` ┌─────────────────────────────────────────────────────────────┐ │ 证书链验证 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 证书链示例: │ │ │ │ 根 CA (Self-Signed) │ │ │ │ │ ▼ │ │ 中间 CA 1 (Signed by Root CA) │ │ │ │ │ ▼ │ │ 中间 CA 2 (Signed by Intermediate CA 1) │ │ │ │ │ ▼ │ │ 终端实体证书 (Signed by Intermediate CA 2) │ │ (example.com) │ │ │ │ 验证流程: │ │ 1. 验证终端实体证书签名(使用中间 CA 2 公钥) │ │ 2. 验证中间 CA 2 证书签名(使用中间 CA 1 公钥) │ │ 3. 验证中间 CA 1 证书签名(使用根 CA 公钥) │ │ 4. 验证根 CA 证书(信任锚,自签名) │ │ 5. 检查有效期(所有证书) │ │ 6. 检查吊销状态(CRL/OCSP) │ │ 7. 检查名称约束、策略约束等扩展 │ │ │ │ 验证成功条件: │ │ ✓ 所有签名有效 │ │ ✓ 所有证书在有效期内 │ │ ✓ 所有证书未被吊销 │ │ ✓ 证书链完整 │ │ ✓ 主体名称匹配 │ │ ✓ 扩展约束满足 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### 证书验证代码 ```python from cryptography import x509 from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives import hashes from datetime import datetime def verify_certificate_chain(cert_chain: list): """ 验证证书链 cert_chain: [终端实体证书,中间 CA 证书,..., 根 CA 证书] """ print("=== 证书链验证 ===") # 1. 验证证书链签名 for i in range(len(cert_chain) - 1): cert = cert_chain[i] issuer_cert = cert_chain[i + 1] # 验证签名 try: issuer_public_key = issuer_cert.public_key() issuer_public_key.verify( cert.signature, cert.tbs_certificate_bytes, cert.signature_algorithm_parameters ) print(f"✓ 证书 {i+1} 签名验证通过") except Exception as e: print(f"✗ 证书 {i+1} 签名验证失败:{e}") return False # 2. 验证有效期 now = datetime.utcnow() for i, cert in enumerate(cert_chain): if now < cert.not_valid_before: print(f"✗ 证书 {i+1} 尚未生效") return False if now > cert.not_valid_after: print(f"✗ 证书 {i+1} 已过期") return False print(f"✓ 证书 {i+1} 有效期验证通过") # 3. 验证根证书是自签名的 root_cert = cert_chain[-1] if root_cert.subject != root_cert.issuer: print(f"✗ 根证书不是自签名的") return False print(f"✓ 根证书是自签名的") # 4. 验证根证书签名(自签名验证) try: root_public_key = root_cert.public_key() root_public_key.verify( root_cert.signature, root_cert.tbs_certificate_bytes, root_cert.signature_algorithm_parameters ) print(f"✓ 根证书自签名验证通过") except Exception as e: print(f"✗ 根证书自签名验证失败:{e}") return False print("\n✓ 证书链验证成功") return True ``` --- ## 证书吊销 ### 吊销机制 **证书吊销方法**: ``` ┌─────────────────────────────────────────────────────────────┐ │ 证书吊销机制 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ CRL(Certificate Revocation List): │ │ ├── 定义:证书吊销列表 │ │ ├── 发布:CA 定期发布(通常每天/每周) │ │ ├── 格式:签名列表,包含已吊销证书序列号 │ │ ├── 验证:客户端下载并检查证书是否在列表中 │ │ ├── 优点:简单、可缓存 │ │ └── 缺点: │ │ ✗ 吊销延迟(下次发布才生效) │ │ ✗ 列表可能很大 │ │ ✗ 带宽消耗 │ │ │ │ OCSP(Online Certificate Status Protocol): │ │ ├── 定义:在线证书状态协议 │ │ ├── 原理:实时查询 CA 获取证书状态 │ │ ├── 响应:Good(有效)、Revoked(吊销)、Unknown(未知) │ │ ├── 优点:实时、带宽小 │ │ └── 缺点: │ │ ✗ 隐私问题(CA 知道用户访问的网站) │ │ ✗ 性能问题(需要实时查询) │ │ ✗ 单点故障 │ │ │ │ OCSP Stapling: │ │ ├── 定义:OCSP 装订 │ │ ├── 原理:服务器定期获取 OCSP 响应并"装订"到 TLS 握手中 │ │ ├── 优点: │ │ ✓ 保护隐私(CA 不知道具体用户) │ │ ✓ 性能好(无需客户端查询) │ │ ✓ 可靠(不依赖 OCSP 服务器可用性) │ │ └── 应用:现代 TLS 服务器默认启用 │ │ │ │ CRLite: │ │ ├── 定义:基于布隆过滤器的吊销系统 │ │ ├── 原理:使用布隆过滤器压缩 CRL │ │ ├── 优点:高效、低带宽 │ │ └── 应用:Firefox 使用 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` --- ## 实战应用 ### TLS 证书部署 **Nginx TLS 配置**: ```nginx # HTTPS 配置示例 server { listen 443 ssl http2; server_name example.com; # 证书配置 ssl_certificate /etc/nginx/ssl/example.com.crt; ssl_certificate_key /etc/nginx/ssl/example.com.key; # 证书链(可选,现代浏览器可自动获取) ssl_trusted_certificate /etc/nginx/ssl/chain.crt; # TLS 协议 ssl_protocols TLSv1.2 TLSv1.3; # 密码套件 ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256; ssl_prefer_server_ciphers off; # OCSP Stapling ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 5s; # HSTS add_header Strict-Transport-Security "max-age=63072000" always; location / { proxy_pass http://backend; } } ``` ### 证书管理自动化 **Let's Encrypt 自动续期**: ```bash #!/bin/bash # Let's Encrypt 证书自动续期脚本 CERT_DOMAIN="example.com" EMAIL="admin@example.com" WEBROOT="/var/www/html" # 安装 certbot # apt-get install certbot python3-certbot-nginx # 首次获取证书 certbot certonly \ --webroot \ -w $WEBROOT \ -d $CERT_DOMAIN \ -d www.$CERT_DOMAIN \ --email $EMAIL \ --agree-tos \ --non-interactive # 配置自动续期(cron) # 添加到 crontab: # 0 3 * * * certbot renew --quiet --post-hook "systemctl reload nginx" # 测试续期 certbot renew --dry-run # 查看证书信息 certbot certificates ``` --- ## 安全实践 ### 最佳实践 ``` ┌─────────────────────────────────────────────────────────────┐ │ 密钥与证书安全实践 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 密钥管理: │ │ ✓ 使用 HSM/KMS 存储根密钥和 KEK │ │ ✓ 实施密钥分层(根密钥→KEK→DEK) │ │ ✓ 定期轮换密钥(根据密钥类型) │ │ ✓ 使用信封加密保护数据密钥 │ │ ✓ 审计密钥使用 │ │ ✗ 不要硬编码密钥 │ │ ✗ 不要将密钥提交到版本控制 │ │ ✗ 不要使用弱随机数生成密钥 │ │ │ │ 证书管理: │ │ ✓ 使用受信任的 CA 签发证书 │ │ ✓ 启用 OCSP Stapling │ │ ✓ 监控证书过期(提前 30 天告警) │ │ ✓ 实施证书吊销检查 │ │ ✓ 使用证书透明度(CT)日志 │ │ ✗ 不要使用自签名证书(生产环境) │ │ ✗ 不要使用过期证书 │ │ ✗ 不要忽略证书验证错误 │ │ │ │ 密钥长度建议(2024 年): │ │ ├── RSA:最低 2048 位,推荐 3072 位 │ │ ├── ECC:P-256 或 X25519/Ed25519 │ │ ├── AES:256 位 │ │ └── SHA:SHA-256 或 SHA-3 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` --- ## 总结与思考 ### 核心要点回顾 **密钥管理与 PKI 知识框架**: ``` ┌─────────────────────────────────────────────────────────────┐ │ 密钥管理与 PKI 知识框架 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 密钥管理: │ │ ├── 生命周期:生成→存储→分发→使用→更新→销毁 │ │ ├── 存储方案:HSM、KMS、分层存储 │ │ ├── 密钥派生:PBKDF2、bcrypt、scrypt、Argon2、HKDF │ │ └── 密钥协商:DH、ECDH、后量子 │ │ │ │ PKI 体系: │ │ ├── 组成:CA、RA、证书存储库、终端实体 │ │ ├── 证书:X.509 v3 结构、类型、扩展 │ │ ├── 信任模型:层次、网状、信任网 │ │ └── 吊销:CRL、OCSP、OCSP Stapling │ │ │ │ 实战应用: │ │ ├── TLS 证书部署 │ │ ├── 代码签名 │ │ ├── 文档签名 │ │ └── 自动化管理 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` --- ## 参考资料 ### 标准与规范 ``` - NIST SP 800-57: 密钥管理指南 - RFC 5280: X.509 证书和 CRL - RFC 6960: OCSP 协议 - CA/Browser Forum Baseline Requirements ``` ### 工具与平台 ``` - OpenSSL: https://www.openssl.org/ - Let's Encrypt: https://letsencrypt.org/ - HashiCorp Vault: https://www.vaultproject.io/ - AWS KMS: https://aws.amazon.com/kms/ ``` --- *365 天信息安全技术系列 | Day 185 | 密码学系列第 5 篇* > 密钥管理是密码系统的核心。再强的算法,如果密钥管理不当,也是不安全的。 > 本文内容仅供学习和研究使用,请勿用于非法目的。 --- *本文是 365 天信息安全技术系列的第 185 篇,密码学系列第 5 篇* *密码学系列继续!*
myh0st
2026年4月13日 23:19
分享文档
收藏文档
上一篇
下一篇
微信扫一扫
复制链接
手机扫一扫进行分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码