公开文集
0x01 信安之路安全产品
0x01 SRC 资产管理系统
001 企业资产有那些?
002 订阅最新 POC
003 IP 域名关联查询
004 公益权重数据
0x02 安全学习成长平台
001 成长平台视频参考
100 百分成就-学习心得-TOP 21 小伙伴
101 百分成就-学习心得-不想起床
102 百分成就-学习心得-不驚
103 百分成就-学习心得-aiDa0
104 百分成就-学习心得-起十二
105 百分成就-学习心得-Eyes
201 你为什么选择信安之路!
0x03 安全知识库
001 蜜罐运营专辑
0x04 自研蜜罐系统
0x02 Web 漏洞案例库
0x01 配置安全
001 header 安全配置
002 首页信息泄露
003 HTTP 访问控制 (CORS)
0x02 安全控制缺失
001 速率限制绕过
0x03 应用逻辑
0x03 小程序漏洞案例库
第一章:小程序渗透基础
1.1 微信小程序反编译与动态调试
1.2 微信小程序强制开启开发者模式
0x04 星球讨论知识问答
信息安全入门
学习方向选择
学习经验分享
安全产品研发
代码审计
物联网安全
APT
安全防御建设
安全建设经验
数据泄露监控
网络安全
终端安全
主机安全
产品安全
安全意识
数据安全
内部资产管理
安全管理
应急响应
网络安全架构
安全运营
业务安全
运维安全
渗透测试技术
信息收集
EXP/POC
web 测试
APP测试
内网渗透
0x05 代码审计小挑战
01 前端安全问题
101 script 标签下的 XSS
102 消息事件引发的 DOM XSS
104 常规评论 xss 漏洞
105 页面开放重定向漏洞
106 部分过滤的 xss 漏洞绕过
107 基于 DOM 的 XSS
108 CORS 配置错误
109 退出登录出 XSS
110 URL 重定向漏洞
111 CSRF 漏洞利用
112 JavaScript 代码注入
113 xss 绕过括号和反引号检测
02 文件操作类问题
201 Django 任意文件读取漏洞
202 php 后缀黑名单验证绕过上传
203 jsp 任意文件上传
204 jsp 代码中的 SSRF 漏洞
205 jsp 目录穿越漏洞
206 PHP文件包含漏洞
207 Django 本地文件包含
208 文件包含功能绕过
209 SSRF 跨服务端请求伪造
210 本地文件包含漏洞 windows
211 目录穿越漏洞
212 文件上传绕过
213 php 文件包含漏洞
03 注入类问题
301 由 SQL 注入引发的命令执行
302 php8 XML 实体注入
303 正则问题导致验证绕过
304 XPath 注入
305 典型认证 SQL 注入
306 数字型 SQL 注入
307 主机头(host header)注入
308 LDAP 注入
309 典型的万能密码漏洞
310 Ldap 注入漏洞代码
04 命令执行类问题
401 调用第三方工具时被劫持
402 原型污染导致命令执行
403 php array_map 代码执行
404 命令执行绕过检测
405 SSTI 模板注入
406 文件名注入 RCE
407 无防护命令执行
408 python eval 注入
409 绕过多个黑名单命令
05 业务逻辑类问题
501 django 认证 jwt 未验证 token
502 绕过权限检测执行命令
503 密码找回邮箱地址大小写绕过
504 DNS 重绑定问题
505 权限比对逻辑问题
506 越权访问其他用户的记录
507 用户注册问题
508 用户权限验证逻辑问题
509 PHP 判断两个变量相等逻辑问题
06 反序列化类问题
601 php 反序列化漏洞
602 python 反序列化漏洞
09 C语言问题
901 c 条件竞争
902 缓冲区溢出
903 通配符注入提权
0x99 AI 教你学安全
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-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-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-密码学总结与展望
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-177-后量子密码学详解
# Day 192: 后量子密码学详解 > 密码学系列第 12 天 | 预计阅读时间:50 分钟 | 难度:★★★★★ --- ## 清单 目录 1. [量子计算威胁](#量子计算威胁) 2. [量子算法对密码学的影响](#量子算法对密码学的影响) 3. [后量子密码学概述](#后量子密码学概述) 4. [NIST PQC 标准化进程](#nist-pqc 标准化进程) 5. [基于格的密码学](#基于格的密码学) 6. [CRYSTALS-Kyber 密钥封装](#crystals-kyber 密钥封装) 7. [CRYSTALS-Dilithium 数字签名](#crystals-dilithium 数字签名) 8. [其他 PQC 方案](#其他 pqc 方案) 9. [PQC 迁移策略](#pqc 迁移策略) 10. [实战应用](#实战应用) 11. [安全实践](#安全实践) 12. [总结与思考](#总结与思考) 13. [参考资料](#参考资料) --- ## 量子计算威胁 ### 量子计算机发展现状 **量子计算发展时间线**: ``` ┌─────────────────────────────────────────────────────────────┐ │ 量子计算发展时间线 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 1980 年代:理论奠基 │ │ ├── 1980 年:Paul Benioff 提出量子计算模型 │ │ ├── 1981 年:Richard Feynman 提出量子模拟概念 │ │ └── 1985 年:David Deutsch 提出量子图灵机 │ │ │ │ 1990 年代:算法突破 │ │ ├── 1994 年:Peter Shor 提出 Shor 算法 │ │ │ └── 可在多项式时间内分解大整数 │ │ │ └── 威胁:RSA、ECC 等公钥密码 │ │ │ │ │ ├── 1996 年:Lov Grover 提出 Grover 算法 │ │ │ └── 平方根加速搜索 │ │ │ └── 威胁:对称密钥强度减半 │ │ │ │ │ └── 1998 年:首个量子计算机原型 │ │ │ │ 2000 年代:工程进展 │ │ ├── 2001 年:IBM 7 量子比特计算机 │ │ ├── 2007 年:D-Wave 首个商用量子计算机 │ │ └── 2011 年:D-Wave One(128 量子比特) │ │ │ │ 2010 年代:量子霸权 │ │ ├── 2016 年:IBM 量子体验云平台 │ │ ├── 2019 年:Google Sycamore(53 量子比特) │ │ │ └── 首次实现"量子霸权" │ │ │ └── 200 秒完成超级计算机 1 万年的任务 │ │ │ │ │ └── 2020 年:中国"九章"(76 光子) │ │ └── 高斯玻色采样量子霸权 │ │ │ │ 2020 年代:实用化竞赛 │ │ ├── 2023 年:IBM Osprey(433 量子比特) │ │ ├── 2023 年:IBM Condor(1121 量子比特) │ │ ├── 2024 年:IBM Heron(133 量子比特,高质量) │ │ └── 持续进展:Google、IonQ、Rigetti 等 │ │ │ │ 密码学威胁时间表: │ │ ├── 当前(2024-2026):威胁评估阶段 │ │ ├── 2028-2030:早期威胁(有限量子计算机) │ │ ├── 2030-2035:中等威胁(数千量子比特) │ │ └── 2035+:高威胁(百万量子比特,可破解 RSA-2048) │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### 量子比特与量子优势 **量子计算机核心概念**: ``` ┌─────────────────────────────────────────────────────────────┐ │ 量子计算机核心概念 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 量子比特(Qubit): │ │ ├── 经典比特:0 或 1 │ │ ├── 量子比特:|ψ⟩ = α|0⟩ + β|1⟩(叠加态) │ │ ├── 特性: │ │ │ - 叠加:同时处于多个状态 │ │ │ - 纠缠:量子比特之间强关联 │ │ │ - 干涉:概率幅相长或相消 │ │ │ │ │ └── 测量:坍缩到确定状态(0 或 1) │ │ │ │ 量子优势指标: │ │ ├── 量子比特数量:决定计算规模 │ │ ├── 量子体积(Quantum Volume):综合性能指标 │ │ ├── 保真度:操作准确性 │ │ └── 相干时间:量子态保持时间 │ │ │ │ 破解密码所需量子比特: │ │ ┌────────────────┬─────────────────┬──────────────────┐ │ │ │ 算法 │ 经典安全位 │ 所需量子比特 │ │ │ ├────────────────┼─────────────────┼──────────────────┤ │ │ │ RSA-1024 │ 80 位 │ ~2000 │ │ │ │ RSA-2048 │ 112 位 │ ~4000 │ │ │ │ RSA-3072 │ 128 位 │ ~6000 │ │ │ │ ECC P-256 │ 128 位 │ ~2500 │ │ │ │ ECC P-384 │ 192 位 │ ~4000 │ │ │ └────────────────┴─────────────────┴──────────────────┘ │ │ │ │ 现状: │ │ ├── 2024 年:最大规模 ~1000 量子比特 │ │ ├── 质量限制:噪声大、错误率高 │ │ └── 实用破解:估计需要 2035 年后 │ │ │ │ 但要注意: │ │ ! "现在收获,以后解密"攻击已经存在 │ │ ! 敏感数据需要立即保护 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` --- ## 量子算法对密码学的影响 ### Shor 算法 **Shor 算法威胁**: ``` ┌─────────────────────────────────────────────────────────────┐ │ Shor 算法 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 提出者:Peter Shor(1994 年) │ │ │ │ 解决的问题: │ │ ├── 大整数分解问题 │ │ └── 离散对数问题 │ │ │ │ 算法复杂度: │ │ ├── 经典算法:亚指数时间 O(exp((log N)^(1/3))) │ │ └── Shor 算法:多项式时间 O((log N)³) │ │ │ │ 受影响的密码系统: │ │ ├── RSA:基于大整数分解 │ │ │ └── 公钥密码、数字签名、密钥交换 │ │ │ │ │ ├── Diffie-Hellman:基于离散对数 │ │ │ └── 密钥交换协议 │ │ │ │ │ ├── DSA:基于离散对数 │ │ │ └── 数字签名算法 │ │ │ │ │ └── ECC:基于椭圆曲线离散对数 │ │ └── ECDSA、ECDH、EdDSA │ │ │ │ 影响程度: │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ ! 完全破解:所有基于因数分解和离散对数的公钥密码 │ │ │ │ ! 影响范围:TLS/SSL、SSH、PGP、区块链、数字证书 │ │ │ │ ! 后果:现有公钥基础设施(PKI)完全失效 │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ 防御方案: │ │ └── 迁移到后量子密码学(PQC) │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### Grover 算法 **Grover 算法威胁**: ``` ┌─────────────────────────────────────────────────────────────┐ │ Grover 算法 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 提出者:Lov Grover(1996 年) │ │ │ │ 解决的问题: │ │ └── 无序数据库搜索 │ │ │ │ 算法复杂度: │ │ ├── 经典算法:O(N) 线性搜索 │ │ └── Grover 算法:O(√N) 平方根加速 │ │ │ │ 对对称密码的影响: │ │ ├── AES-128: │ │ │ ├── 经典安全强度:128 位 │ │ │ └── 量子安全强度:64 位(不足) │ │ │ │ │ ├── AES-192: │ │ │ ├── 经典安全强度:192 位 │ │ │ └── 量子安全强度:96 位(边缘) │ │ │ │ │ └── AES-256: │ │ ├── 经典安全强度:256 位 │ │ └── 量子安全强度:128 位(安全) │ │ │ │ 对哈希函数的影响: │ │ ├── SHA-256: │ │ │ ├── 经典碰撞阻力:128 位 │ │ │ └── 量子碰撞阻力:85 位(使用 Brassard 算法) │ │ │ │ │ └── SHA-512: │ │ ├── 经典碰撞阻力:256 位 │ │ └── 量子碰撞阻力:170 位(安全) │ │ │ │ 防御方案: │ │ ├── 对称密钥:加倍密钥长度(AES-128 → AES-256) │ │ ├── 哈希函数:使用更长输出(SHA-256 → SHA-512) │ │ └── 影响相对较小:对称密码受量子影响有限 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### "现在收获,以后解密"攻击 **Harvest Now, Decrypt Later 攻击**: ``` ┌─────────────────────────────────────────────────────────────┐ │ "现在收获,以后解密"攻击 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 攻击模式: │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ │ │ │ │ 现在(2024-2030) 未来(2035+) │ │ │ │ ───────────────── ──────────── │ │ │ │ │ │ │ │ 1. 攻击者截获加密通信 3. 量子计算机成熟 │ │ │ │ - TLS 握手 - 运行 Shor 算法 │ │ │ │ - 加密邮件 - 破解公钥 │ │ │ │ - 加密存储 - 解密历史数据 │ │ │ │ │ │ │ │ │ 2. 存储密文数据 ──────────────┘ │ │ │ │ - 长期保存 │ │ │ │ - 等待技术成熟 │ │ │ │ │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ 高危数据: │ │ ├── 国家机密:情报、军事通信 │ │ ├── 商业机密:专利、配方、战略计划 │ │ ├── 个人敏感:医疗记录、财务信息 │ │ ├── 基础设施:电网、金融系统密钥 │ │ └── 长期保密:需要保密 10-30 年的数据 │ │ │ │ 攻击者: │ │ ├── 国家情报机构(NSA、MSS 等) │ │ ├── 大型犯罪组织 │ │ └── 有远见的企业竞争对手 │ │ │ │ 防御建议: │ │ ├── 立即评估:识别需要长期保护的数据 │ │ ├── 优先迁移:高价值数据优先使用 PQC │ │ ├── 混合方案:传统 + PQC 双重保护 │ │ └── 密钥轮换:缩短密钥有效期 │ │ │ │ 紧迫性: │ │ ! 对于需要保密 25 年以上的数据,现在就需要 PQC 保护 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` --- ## 后量子密码学概述 ### PQC 定义与目标 **后量子密码学(PQC)**: ``` ┌─────────────────────────────────────────────────────────────┐ │ 后量子密码学(PQC) │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 定义: │ │ 能够抵抗量子计算机攻击的密码算法 │ │ (也称为"抗量子密码学"、"量子安全密码学") │ │ │ │ 核心目标: │ │ ├── 安全性:抵抗经典和量子攻击 │ │ ├── 效率:在实际系统中可部署 │ │ ├── 兼容性:与现有协议和基础设施兼容 │ │ └── 标准化:形成统一标准便于互操作 │ │ │ │ 与量子密钥分发(QKD)的区别: │ │ ├── PQC:基于数学难题的软件方案 │ │ │ ├── 优点:易于部署、成本低、可大规模应用 │ │ │ └── 缺点:依赖数学假设 │ │ │ │ │ └── QKD:基于量子物理的硬件方案 │ │ ├── 优点:理论上无条件安全 │ │ └── 缺点:需要专用硬件、距离限制、成本高 │ │ │ │ PQC 设计原则: │ │ ├── 基于新的数学难题(非因数分解、非离散对数) │ │ ├── 经过充分密码分析 │ │ ├── 性能可接受 │ │ └── 密钥和签名大小合理 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### PQC 技术路线 **PQC 主要技术路线**: ``` ┌─────────────────────────────────────────────────────────────┐ │ PQC 技术路线 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 1. 基于格的密码学(Lattice-based): │ │ ├── 数学基础:格上困难问题(SVP、CVP、LWE) │ │ ├── 优势: │ │ │ - 效率高、密钥较小 │ │ │ - 功能丰富(加密、签名、密钥交换) │ │ │ - 研究最深入 │ │ │ │ │ ├── 劣势: │ │ │ - 密钥和签名比经典密码大 │ │ │ - 实现复杂度高 │ │ │ │ │ ├── 代表算法: │ │ │ - CRYSTALS-Kyber(KEM,NIST 选中) │ │ │ - CRYSTALS-Dilithium(签名,NIST 选中) │ │ │ - Falcon(签名,NIST 选中) │ │ │ - SPHINCS+(签名,NIST 选中) │ │ │ │ │ └── 状态:最成熟的 PQC 路线 │ │ │ │ 2. 基于编码的密码学(Code-based): │ │ ├── 数学基础:纠错码解码困难问题 │ │ ├── 优势: │ │ │ - 研究历史长(1978 年 McEliece) │ │ │ - 安全性高 │ │ │ - 加解密速度快 │ │ │ │ │ ├── 劣势: │ │ │ - 公钥非常大(MB 级别) │ │ │ - 密文扩展率高 │ │ │ │ │ └── 代表算法:McEliece、BIKE、HQC │ │ │ │ 3. 基于多变量的密码学(Multivariate): │ │ ├── 数学基础:多元多项式方程组求解困难 │ │ ├── 优势: │ │ │ - 签名短、验证快 │ │ │ - 适合资源受限环境 │ │ │ │ │ ├── 劣势: │ │ │ - 公钥大 │ │ │ - 安全性分析复杂 │ │ │ │ │ └── 代表算法:Rainbow(NIST 第四轮)、GeMSS │ │ │ │ 4. 基于哈希的签名(Hash-based): │ │ ├── 数学基础:哈希函数安全性 │ │ ├── 优势: │ │ │ - 安全性仅依赖哈希函数 │ │ │ - 安全性证明强 │ │ │ - 参数选择保守 │ │ │ │ │ ├── 劣势: │ │ │ - 只能用于签名 │ │ │ - 状态管理复杂(部分方案) │ │ │ - 签名较大 │ │ │ │ │ └── 代表算法:SPHINCS+(无状态,NIST 选中) │ │ │ │ 5. 基于同源性的密码学(Isogeny-based): │ │ ├── 数学基础:椭圆曲线同源性计算困难 │ │ ├── 优势: │ │ │ - 密钥最小(类似 ECC) │ │ │ - 基于椭圆曲线,易于理解 │ │ │ │ │ ├── 劣势: │ │ │ - 计算慢 │ │ │ - 研究较新、安全性分析不足 │ │ │ - 2022 年 SIDH 被破解,影响信心 │ │ │ │ │ └── 代表算法:CSIDH、SIKE(已被破解) │ │ │ └─────────────────────────────────────────────────────────────┘ ``` --- ## NIST PQC 标准化进程 ### NIST PQC 征集与评估 **NIST PQC 标准化时间线**: ``` ┌─────────────────────────────────────────────────────────────┐ │ NIST PQC 标准化时间线 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 2016 年 12 月:征集开始 │ │ └── NIST 公开征集后量子密码算法 │ │ 截止日期:2017 年 11 月 │ │ │ │ 2017 年 12 月:第一轮(69 个候选算法) │ │ └── 收到 82 个提交,69 个符合要求的候选算法 │ │ 类别:公钥加密/密钥封装(KEM)、数字签名 │ │ │ │ 2019 年 1 月:第二轮(26 个候选算法) │ │ └── 选出 26 个候选进入第二轮 │ │ KEM:17 个 | 签名:9 个 │ │ │ │ 2020 年 7 月:第三轮(15 个候选算法) │ │ └── 选出 7 个决赛选手 + 8 个备选 │ │ 决赛 KEM:Classic McEliece、Kyber、NTRU、SABER │ │ 决赛签名:Dilithium、Falcon、Rainbow、SPHINCS+ │ │ │ │ 2022 年 7 月:第四轮结果公布 │ │ └── 首批标准化算法: │ │ - FIPS 203:CRYSTALS-Kyber(KEM) │ │ - FIPS 204:CRYSTALS-Dilithium(签名) │ │ - FIPS 205:SPHINCS+(签名) │ │ - FIPS 206:Falcon(签名) │ │ │ │ 2023-2024 年:标准完善 │ │ └── 发布最终 FIPS 标准 │ │ 实现指南、测试向量、迁移建议 │ │ │ │ 2024 年 8 月:第四轮额外算法 │ │ └── 额外标准化: │ │ - BIKE、HQC(基于编码的 KEM) │ │ - 更多签名算法评估中 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### NIST 选中的算法 **NIST 首批标准化 PQC 算法**: ``` ┌─────────────────────────────────────────────────────────────┐ │ NIST 首批标准化 PQC 算法 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ FIPS 203:CRYSTALS-Kyber(密钥封装机制 KEM) │ │ ├── 类型:基于格的 KEM │ │ ├── 用途:密钥交换/密钥封装 │ │ ├── 安全级别: │ │ │ - Kyber-512:AES-128 等效 │ │ │ - Kyber-768:AES-192 等效(推荐) │ │ │ - Kyber-1024:AES-256 等效 │ │ │ │ │ ├── 性能: │ │ │ - 公钥:800-1568 字节 │ │ │ - 私钥:1632-3168 字节 │ │ │ - 密文:768-1568 字节 │ │ │ - 密钥生成:<1ms │ │ │ - 封装/解封装:<1ms │ │ │ │ │ └── 应用:TLS 1.3、IKE、HPKE │ │ │ │ FIPS 204:CRYSTALS-Dilithium(数字签名) │ │ ├── 类型:基于格的签名 │ │ ├── 用途:数字签名、证书 │ │ ├── 安全级别: │ │ │ - Dilithium2:AES-128 等效(推荐) │ │ │ - Dilithium3:AES-192 等效 │ │ │ - Dilithium5:AES-256 等效 │ │ │ │ │ ├── 性能: │ │ │ - 公钥:1312-2592 字节 │ │ │ - 私钥:2528-4864 字节 │ │ │ - 签名:2420-4860 字节 │ │ │ - 签名生成:<1ms │ │ │ - 签名验证:<1ms │ │ │ │ │ └── 应用:代码签名、证书、文档签名 │ │ │ │ FIPS 205:SPHINCS+(数字签名) │ │ ├── 类型:基于哈希的无状态签名 │ │ ├── 用途:数字签名(保守选择) │ │ ├── 安全级别: │ │ │ - SPHINCS+-128:AES-128 等效 │ │ │ - SPHINCS+-192:AES-192 等效 │ │ │ - SPHINCS+-256:AES-256 等效 │ │ │ │ │ ├── 性能: │ │ │ - 公钥:32-64 字节(小!) │ │ │ - 私钥:64-128 字节 │ │ │ - 签名:8KB-49KB(大) │ │ │ - 签名生成:~50ms │ │ │ - 签名验证:~50ms │ │ │ │ │ └── 特点:安全性仅依赖哈希函数,最保守的选择 │ │ │ │ FIPS 206:Falcon(数字签名) │ │ ├── 类型:基于格的签名(NTRU 格) │ │ ├── 用途:资源受限环境的签名 │ │ ├── 安全级别: │ │ │ - Falcon-512:AES-128 等效 │ │ │ - Falcon-1024:AES-256 等效 │ │ │ │ │ ├── 性能: │ │ │ - 公钥:897-1793 字节 │ │ │ - 私钥:1280-2304 字节 │ │ │ - 签名:666-1280 字节(小!) │ │ │ - 签名生成:~1ms │ │ │ - 签名验证:~1ms │ │ │ │ │ └── 特点:签名最小,适合带宽受限场景 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` --- ## 基于格的密码学 ### 格理论基础 **格(Lattice)基本概念**: ``` ┌─────────────────────────────────────────────────────────────┐ │ 格理论基础 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 格的定义: │ │ ├── 格 L 是 R^n 中的离散加法子群 │ │ ├── 由基向量 B = {b₁, b₂, ..., bₙ} 生成 │ │ └── L = {Σ zᵢbᵢ | zᵢ ∈ Z}(整数线性组合) │ │ │ │ 可视化(2 维格): │ │ │ │ │ │ · · · · · │ │ │ │ │ │ · · · · · ← 格点 │ │ │ │ │ │ · · · · · │ │ │ ↑ ↑ ↑ ↑ ↑ │ │ │ b₁ 2b₁ 3b₁ 4b₁ 5b₁ │ │ │ │ │ │ │ 困难问题: │ │ ├── SVP(最短向量问题): │ │ │ └── 找到格中最短的非零向量 │ │ │ │ │ ├── CVP(最近向量问题): │ │ │ └── 找到离给定点最近的格点 │ │ │ │ │ ├── LWE(学习带误差问题): │ │ │ └── 从带噪声的线性方程中恢复秘密 │ │ │ └── 大多数 PQC 方案的基础 │ │ │ │ │ └── Ring-LWE: │ │ └── LWE 的环变体,效率更高 │ │ │ │ 量子抗性: │ │ ├── 已知的量子算法(包括 Shor)对格问题无效 │ │ ├── 最佳量子算法仅能提供多项式加速 │ │ └── 适当参数下可抵抗量子攻击 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### LWE 问题 **学习带误差问题(LWE)**: ``` ┌─────────────────────────────────────────────────────────────┐ │ LWE 问题 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 问题描述: │ │ ├── 秘密向量:s ∈ Z_q^n │ │ ├── 公开样本:(A, b) 其中 b = As + e (mod q) │ │ ├── A:随机矩阵,e:小误差向量 │ │ └── 目标:从 (A, b) 恢复 s │ │ │ │ 为什么困难: │ │ ├── 误差 e 使得方程组不一致 │ │ ├── 经典算法:需要 2^O(n) 时间 │ │ └── 量子算法:仅能提供多项式加速 │ │ │ │ 在密码学中的应用: │ │ ├── 公钥加密:公钥 = (A, b),私钥 = s │ │ ├── 密钥封装:基于 LWE 的 KEM 构造 │ │ └── 数字签名:基于 LWE 的签名方案 │ │ │ │ Ring-LWE 优化: │ │ ├── 使用多项式环代替向量空间 │ │ ├── 密钥大小从 O(n²) 降到 O(n) │ │ └── 运算使用 FFT 加速 │ │ │ │ 参数选择(Kyber-768): │ │ ├── n = 256(多项式次数) │ │ ├── q = 3329(模数) │ │ └── 安全强度:128 位 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` --- ## CRYSTALS-Kyber 密钥封装 ### Kyber 原理 **CRYSTALS-Kyber 密钥封装机制**: ``` ┌─────────────────────────────────────────────────────────────┐ │ CRYSTALS-Kyber KEM │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 算法家族: │ │ ├── Kyber-512:安全级别 1(AES-128 等效) │ │ ├── Kyber-768:安全级别 3(AES-192 等效)← 推荐 │ │ └── Kyber-1024:安全级别 5(AES-256 等效) │ │ │ │ 密钥封装流程: │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ │ │ │ │ 密钥生成(接收方 Bob): │ │ │ │ ├── 生成随机种子 ρ │ │ │ │ ├── 生成矩阵 A 从 ρ │ │ │ │ ├── 生成秘密向量 s, e │ │ │ │ ├── 计算 t = As + e │ │ │ │ └── 公钥 pk = (ρ, t),私钥 sk = s │ │ │ │ │ │ │ │ 封装(发送方 Alice): │ │ │ │ ├── 获取 Bob 的公钥 pk = (ρ, t) │ │ │ │ ├── 生成随机消息 m(共享密钥种子) │ │ │ │ ├── 生成随机向量 r, e₁, e₂ │ │ │ │ ├── 计算 u = Aᵀr + e₁ │ │ │ │ ├── 计算 v = tᵀr + e₂ + ⌊q/2⌋·m │ │ │ │ └── 密文 c = (u, v),共享密钥 K = H(m) │ │ │ │ │ │ │ │ 解封装(接收方 Bob): │ │ │ │ ├── 收到密文 c = (u, v) │ │ │ │ ├── 计算 m' = ⌊(2/q)·(v - sᵀu)⌉ │ │ │ │ ├── 重新加密验证(CCA 安全) │ │ │ │ └── 输出共享密钥 K = H(m') │ │ │ │ │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ 安全特性: │ │ ├── IND-CCA2 安全(选择密文攻击下不可区分) │ │ ├── 基于 Module-LWE 困难问题 │ │ └── 量子安全(已知量子算法无法有效攻击) │ │ │ │ 性能特点: │ │ ├── 密钥生成:快速(~0.5ms) │ │ ├── 封装:快速(~0.5ms) │ │ ├── 解封装:快速(~1ms) │ │ └── 大小适中(比经典密码大约 10 倍) │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### Kyber 代码实现 **Python Kyber 实现(使用 pyo3-pqcrypto)**: ```python # 注意:实际使用推荐使用成熟库 # pip install pqcrypto from pqcrypto.kyber.kyber768 import ( generate_keypair, encapsulate, decapsulate ) # ============= 密钥生成 ============= def kyber_keygen(): """生成 Kyber 密钥对""" public_key, secret_key = generate_keypair() return public_key, secret_key # ============= 密钥封装 ============= def kyber_encapsulate(public_key): """使用 Kyber 封装密钥""" # 返回密文和共享密钥 ciphertext, shared_secret = encapsulate(public_key) return ciphertext, shared_secret # ============= 密钥解封装 ============= def kyber_decapsulate(secret_key, ciphertext): """使用 Kyber 解封装密钥""" # 恢复共享密钥 shared_secret = decapsulate(secret_key, ciphertext) return shared_secret # ============= 完整示例 ============= def kyber_demo(): """Kyber KEM 完整演示""" print("=== CRYSTALS-Kyber KEM 演示 ===\n") # 1. 密钥生成(Bob) print("1. Bob 生成密钥对...") public_key, secret_key = kyber_keygen() print(f" 公钥大小:{len(public_key)} 字节") print(f" 私钥大小:{len(secret_key)} 字节") # 2. 封装(Alice) print("\n2. Alice 使用 Bob 的公钥封装密钥...") ciphertext, alice_shared = kyber_encapsulate(public_key) print(f" 密文大小:{len(ciphertext)} 字节") print(f" 共享密钥(Alice):{alice_shared.hex()[:32]}...") # 3. 解封装(Bob) print("\n3. Bob 解封装获取共享密钥...") bob_shared = kyber_decapsulate(secret_key, ciphertext) print(f" 共享密钥(Bob):{bob_shared.hex()[:32]}...") # 4. 验证 print(f"\n✓ 密钥匹配:{alice_shared == bob_shared}") return alice_shared if __name__ == "__main__": try: shared_key = kyber_demo() print(f"\n最终共享密钥:{shared_key.hex()}") except ImportError: print("需要安装 pqcrypto 库:pip install pqcrypto") print("或使用其他 PQC 库如 liboqs-python") ``` ### Kyber 混合方案 **Kyber 与传统 ECDH 混合**: ```python from cryptography.hazmat.primitives.asymmetric import ec from cryptography.hazmat.primitives import hashes from cryptography.hazmat.backends import default_backend import hashlib # ============= 混合密钥交换 ============= def hybrid_key_exchange(): """Kyber + ECDH 混合密钥交换""" print("=== 混合密钥交换(Kyber + ECDH)===\n") # ----- 传统 ECDH 部分 ----- print("1. ECDH 密钥交换...") alice_ec_private = ec.generate_private_key( ec.SECP256R1(), default_backend() ) bob_ec_private = ec.generate_private_key( ec.SECP256R1(), default_backend() ) alice_ec_public = alice_ec_private.public_key() bob_ec_public = bob_ec_private.public_key() # ECDH 共享密钥 alice_ec_shared = alice_ec_private.exchange(ec.ECDH(), bob_ec_public) bob_ec_shared = bob_ec_private.exchange(ec.ECDH(), alice_ec_public) print(f" ECDH 共享密钥:{alice_ec_shared.hex()[:32]}...") # ----- PQC Kyber 部分 ----- print("\n2. Kyber 密钥封装...") from pqcrypto.kyber.kyber768 import generate_keypair, encapsulate, decapsulate bob_kyber_public, bob_kyber_secret = generate_keypair() kyber_ciphertext, alice_kyber_shared = encapsulate(bob_kyber_public) bob_kyber_shared = decapsulate(bob_kyber_secret, kyber_ciphertext) print(f" Kyber 共享密钥:{alice_kyber_shared.hex()[:32]}...") # ----- 组合共享密钥 ----- print("\n3. 组合共享密钥...") # 方法 1:哈希组合 alice_hybrid = hashlib.sha256( alice_ec_shared + alice_kyber_shared ).digest() bob_hybrid = hashlib.sha256( bob_ec_shared + bob_kyber_shared ).digest() print(f" 混合密钥(Alice):{alice_hybrid.hex()}") print(f" 混合密钥(Bob):{bob_hybrid.hex()}") print(f" ✓ 密钥匹配:{alice_hybrid == bob_hybrid}") # 方法 2:XOR 组合(也常用) # 需要确保两个密钥长度相同 min_len = min(len(alice_ec_shared), len(alice_kyber_shared)) alice_xor = bytes(a ^ b for a, b in zip( alice_ec_shared[:min_len], alice_kyber_shared[:min_len] )) return alice_hybrid if __name__ == "__main__": hybrid_key = hybrid_key_exchange() print(f"\n最终混合密钥:{hybrid_key.hex()}") ``` --- ## CRYSTALS-Dilithium 数字签名 ### Dilithium 原理 **CRYSTALS-Dilithium 数字签名**: ``` ┌─────────────────────────────────────────────────────────────┐ │ CRYSTALS-Dilithium 数字签名 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 算法家族: │ │ ├── Dilithium2:安全级别 2(AES-128 等效)← 推荐 │ │ ├── Dilithium3:安全级别 3(AES-192 等效) │ │ └── Dilithium5:安全级别 5(AES-256 等效) │ │ │ │ 签名流程: │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ │ │ │ │ 密钥生成: │ │ │ │ ├── 生成随机种子 ρ │ │ │ │ ├── 生成矩阵 A 从 ρ │ │ │ │ ├── 生成秘密向量 s₁, s₂ │ │ │ │ ├── 计算 t = As₁ + s₂ │ │ │ │ └── 公钥 pk = (ρ, t),私钥 sk = (ρ, s₁, s₂) │ │ │ │ │ │ │ │ 签名生成: │ │ │ │ ├── 计算消息哈希:μ = H(m) │ │ │ │ ├── 生成随机向量 y │ │ │ │ ├── 计算 w = Ay │ │ │ │ ├── 计算挑战:c = H(μ, w) │ │ │ │ ├── 计算响应:z = y + cs₁ │ │ │ │ ├── 拒绝采样(确保 z 的分布正确) │ │ │ │ └── 签名 σ = (c, z) │ │ │ │ │ │ │ │ 签名验证: │ │ │ │ ├── 解析签名 σ = (c, z) │ │ │ │ ├── 验证 z 的范围 │ │ │ │ ├── 计算 w' = Az - tc │ │ │ │ ├── 计算 c' = H(μ, w') │ │ │ │ └── 验证 c = c' │ │ │ │ │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ 安全特性: │ │ ├── EUF-CMA 安全(选择消息攻击下存在性不可伪造) │ │ ├── 基于 Module-LWE 和 Module-SIS 困难问题 │ │ └── 量子安全 │ │ │ │ 性能特点: │ │ ├── 密钥生成:快速(~0.5ms) │ │ ├── 签名生成:快速(~0.5ms) │ │ ├── 签名验证:快速(~1ms) │ │ └── 签名大小:~2.4KB(比 ECDSA 大约 10 倍) │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### Dilithium 代码实现 **Python Dilithium 实现**: ```python # 使用 pqcrypto 库 # pip install pqcrypto from pqcrypto.dilithium.dilithium2 import ( generate_keypair, sign, verify ) # ============= 密钥生成 ============= def dilithium_keygen(): """生成 Dilithium 密钥对""" public_key, secret_key = generate_keypair() return public_key, secret_key # ============= 签名 ============= def dilithium_sign(secret_key, message): """使用 Dilithium 签名消息""" if isinstance(message, str): message = message.encode('utf-8') signature = sign(secret_key, message) return signature # ============= 验证 ============= def dilithium_verify(public_key, message, signature): """验证 Dilithium 签名""" if isinstance(message, str): message = message.encode('utf-8') is_valid = verify(public_key, message, signature) return is_valid # ============= 完整示例 ============= def dilithium_demo(): """Dilithium 签名完整演示""" print("=== CRYSTALS-Dilithium 签名演示 ===\n") # 1. 密钥生成 print("1. 生成密钥对...") public_key, secret_key = dilithium_keygen() print(f" 公钥大小:{len(public_key)} 字节") print(f" 私钥大小:{len(secret_key)} 字节") # 2. 签名 message = "Hello, Post-Quantum World!" print(f"\n2. 签名消息:'{message}'") signature = dilithium_sign(secret_key, message) print(f" 签名大小:{len(signature)} 字节") print(f" 签名(前 32 字节):{signature[:32].hex()}...") # 3. 验证(正确消息) print("\n3. 验证签名(正确消息)...") is_valid = dilithium_verify(public_key, message, signature) print(f" ✓ 验证结果:{'有效' if is_valid else '无效'}") # 4. 验证(篡改消息) tampered_message = "Hello, Post-Quantum World!" # 故意修改 print("\n4. 验证签名(篡改消息)...") is_valid = dilithium_verify(public_key, tampered_message, signature) print(f" ✓ 验证结果:{'有效' if is_valid else '无效'}") return signature if __name__ == "__main__": try: signature = dilithium_demo() print(f"\n最终签名:{signature.hex()[:64]}...") except ImportError: print("需要安装 pqcrypto 库:pip install pqcrypto") ``` --- ## 其他 PQC 方案 ### Falcon 签名 **Falcon(基于 NTRU 格的签名)**: ``` ┌─────────────────────────────────────────────────────────────┐ │ Falcon 签名 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 特点: │ │ ├── 签名最小:~670 字节(比 Dilithium 小 3 倍) │ │ ├── 适合:带宽受限、存储受限场景 │ │ └── 复杂度:实现难度较高(需要浮点运算) │ │ │ │ 参数: │ │ ├── Falcon-512:安全级别 1,公钥 897 字节 │ │ └── Falcon-1024:安全级别 5,公钥 1793 字节 │ │ │ │ 应用: │ │ ├── IoT 设备签名 │ │ ├── 证书签名(减少带宽) │ │ └── 区块链签名 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### SPHINCS+ 签名 **SPHINCS+(基于哈希的无状态签名)**: ``` ┌─────────────────────────────────────────────────────────────┐ │ SPHINCS+ 签名 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 特点: │ │ ├── 安全性仅依赖哈希函数(最保守) │ │ ├── 无状态:不需要维护状态计数器 │ │ └── 签名大:~8-49KB(但可接受) │ │ │ │ 参数: │ │ ├── SPHINCS+-128:安全级别 1 │ │ ├── SPHINCS+-192:安全级别 3 │ │ └── SPHINCS+-256:安全级别 5 │ │ │ │ 应用: │ │ ├── 根证书签名(不频繁) │ │ ├── 代码签名 │ │ └── 长期归档签名 │ │ │ │ 优势: │ │ └── 即使格密码被破解,SPHINCS+ 仍然安全 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### 基于编码的 KEM **Classic McEliece / BIKE / HQC**: ``` ┌─────────────────────────────────────────────────────────────┐ │ 基于编码的 KEM │ ├─────────────────────────────────────────────────────────────┤ │ │ │ Classic McEliece: │ │ ├── 历史:1978 年提出,研究最久 │ │ ├── 优势:安全性高、速度快 │ │ └── 劣势:公钥极大(MB 级别) │ │ │ │ BIKE(Bit Flipping Key Encapsulation): │ │ ├── 优势:公钥较小(~1.5KB) │ │ └── 状态:NIST 第四轮候选 │ │ │ │ HQC(Hamming Quasi-Cyclic): │ │ ├── 优势:公钥小(~2.2KB)、无解密失败 │ │ └── 状态:NIST 第四轮候选 │ │ │ │ 应用: │ │ └── 作为 Kyber 的备选,增加多样性 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` --- ## PQC 迁移策略 ### 迁移路线图 **PQC 迁移阶段**: ``` ┌─────────────────────────────────────────────────────────────┐ │ PQC 迁移路线图 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 阶段 1:评估与规划(2024-2025) │ │ ├── 密码资产清单: │ │ │ - 识别所有使用公钥密码的系统 │ │ │ - 识别需要长期保护的数据 │ │ │ │ │ ├── 风险评估: │ │ │ - 评估"现在收获,以后解密"风险 │ │ │ - 确定优先级 │ │ │ │ │ ├── 技术选型: │ │ │ - 选择 PQC 算法(Kyber、Dilithium 等) │ │ │ - 评估供应商支持 │ │ │ │ │ └── 制定迁移计划: │ │ - 时间表、预算、资源 │ │ │ │ 阶段 2:试点与测试(2025-2026) │ │ ├── 概念验证: │ │ │ - 在小规模环境测试 PQC │ │ │ - 验证互操作性 │ │ │ │ │ ├── 混合部署: │ │ │ - 传统 + PQC 混合方案 │ │ │ - 降低风险 │ │ │ │ │ └── 性能测试: │ │ - 基准测试 │ │ - 优化调整 │ │ │ │ 阶段 3:逐步迁移(2026-2028) │ │ ├── 高优先级系统: │ │ │ - 处理敏感数据的系统 │ │ │ - 长期保密需求的系统 │ │ │ │ │ ├── 中等优先级系统: │ │ │ - 一般业务系统 │ │ │ - 分批次迁移 │ │ │ │ │ └── 低优先级系统: │ │ - 遗留系统 │ │ - 计划替换的系统 │ │ │ │ 阶段 4:全面部署(2028-2030) │ │ ├── 完成迁移: │ │ │ - 所有系统支持 PQC │ │ │ - 淘汰传统公钥密码 │ │ │ │ │ └── 持续监控: │ │ - 监控 PQC 安全性 │ │ - 应对新威胁 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### 混合方案 **传统 + PQC 混合部署**: ``` ┌─────────────────────────────────────────────────────────────┐ │ 混合部署策略 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 为什么使用混合方案: │ │ ├── 降低风险:即使 PQC 有未知漏洞,传统密码仍提供保护 │ │ ├── 平滑过渡:逐步迁移,不影响现有系统 │ │ ├── 互操作性:兼容不支持 PQC 的客户端 │ │ └── 监管要求:某些行业要求使用标准算法 │ │ │ │ 混合密钥交换: │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ │ │ │ │ 传统 ECDH PQC Kyber │ │ │ │ ───────── ──────── │ │ │ │ │ │ │ │ 共享密钥 K1 ────┐ │ │ │ │ ├──→ KDF → 最终密钥 K │ │ │ │ 共享密钥 K2 ────┘ │ │ │ │ │ │ │ │ K = KDF(K1 || K2) 或 K = K1 XOR K2 │ │ │ │ │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ 混合签名: │ │ ├── 双重签名:同时使用 ECDSA 和 Dilithium 签名 │ │ ├── 验证:需要两个签名都有效 │ │ └── 开销:签名大小增加,但安全性增强 │ │ │ │ TLS 1.3 混合方案: │ │ ├── 密钥交换:ECDHE + Kyber │ │ ├── 签名:ECDSA + Dilithium │ │ └── 实现:TLS 扩展或自定义密码套件 │ │ │ │ 降级攻击防护: │ │ ├── 签名协商:客户端和服务器声明支持的算法 │ │ ├── 绑定:将算法选择绑定到密钥交换 │ │ └── 检测:检测并拒绝降级尝试 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` --- ## 实战应用 ### OpenSSL PQC **OpenSSL 3.0+ PQC 支持**: ```python # OpenSSL 3.0+ 开始支持 PQC # 需要安装支持 PQC 的 OpenSSL 版本 from cryptography.hazmat.primitives.asymmetric import x25519 from cryptography.hazmat.backends import default_backend # 注意:目前 Python cryptography 库对 PQC 支持有限 # 以下展示概念性代码 # ============= 混合 TLS 配置 ============= def hybrid_tls_config(): """配置混合 TLS(概念示例)""" # OpenSSL 命令行示例: # 生成混合证书 # openssl genpkey -algorithm X25519 -out ec_private.pem # openssl genpkey -algorithm kyber768 -out pqc_private.pem # # 配置服务器: # SSLCertificateFile=hybrid_cert.pem # SSLCertificateKeyFile=hybrid_key.pem print("=== OpenSSL PQC 配置示例 ===") print(""" # OpenSSL 3.x PQC 命令示例: # 生成 Kyber 密钥对 openssl genpkey -algorithm kyber768 -out kyber_private.pem openssl pkey -in kyber_private.pem -pubout -out kyber_public.pem # 生成 Dilithium 密钥对 openssl genpkey -algorithm dilithium2 -out dilithium_private.pem openssl pkey -in dilithium_private.pem -pubout -out dilithium_public.pem # 创建混合证书(需要 CA 支持) openssl req -new -key hybrid_private.pem -out hybrid.csr openssl x509 -req -in hybrid.csr -signkey ca_key.pem -out hybrid_cert.pem # TLS 服务器配置(Apache): # SSLCertificateFile hybrid_cert.pem # SSLCertificateKeyFile hybrid_key.pem # SSLCipherSuite TLS_AES_256_GCM_SHA384 """) if __name__ == "__main__": hybrid_tls_config() ``` ### liboqs 使用 **Open Quantum Safe (liboqs) 库**: ```python # 使用 liboqs-python # pip install oqs import oqs # ============= Kyber KEM ============= def oqs_kyber_demo(): """使用 liboqs 进行 Kyber 密钥封装""" print("=== liboqs Kyber 演示 ===\n") # 创建 KEM 对象 kem = oqs.KeyEncapsulation("Kyber768") # 密钥生成 public_key = kem.generate_keypair() print(f"公钥大小:{len(public_key)} 字节") # 封装(发送方) sender = oqs.KeyEncapsulation("Kyber768") ciphertext, shared_secret_sender = sender.encap_secret(public_key) print(f"密文大小:{len(ciphertext)} 字节") print(f"共享密钥(发送方):{shared_secret_sender.hex()[:32]}...") # 解封装(接收方) shared_secret_receiver = kem.decap_secret(ciphertext) print(f"共享密钥(接收方):{shared_secret_receiver.hex()[:32]}...") # 验证 print(f"\n✓ 密钥匹配:{shared_secret_sender == shared_secret_receiver}") return shared_secret_sender # ============= Dilithium 签名 ============= def oqs_dilithium_demo(): """使用 liboqs 进行 Dilithium 签名""" print("\n=== liboqs Dilithium 演示 ===\n") # 创建签名对象 signer = oqs.Signature("Dilithium2") # 密钥生成 public_key = signer.generate_keypair() print(f"公钥大小:{len(public_key)} 字节") # 签名 message = b"Hello, Post-Quantum World!" signature = signer.sign(message) print(f"签名大小:{len(signature)} 字节") # 验证 verifier = oqs.Signature("Dilithium2") is_valid = verifier.verify(message, signature, public_key) print(f"✓ 验证结果:{'有效' if is_valid else '无效'}") return signature if __name__ == "__main__": try: oqs_kyber_demo() oqs_dilithium_demo() except ImportError: print("需要安装 oqs 库:pip install oqs") print("或访问:https://github.com/open-quantum-safe/liboqs") ``` --- ## 安全实践 ### 最佳实践 ``` ┌─────────────────────────────────────────────────────────────┐ │ PQC 安全实践 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 应该做的: │ │ ✓ 立即评估密码资产和迁移需求 │ │ ✓ 优先保护需要长期保密的数据 │ │ ✓ 使用混合方案(传统 + PQC)降低风险 │ │ ✓ 选择 NIST 标准化算法(Kyber、Dilithium) │ │ ✓ 使用成熟库(liboqs、OpenSSL 3.0+) │ │ ✓ 关注 PQC 研究进展和标准更新 │ │ ✓ 制定详细的迁移计划和时间表 │ │ ✓ 测试互操作性和性能 │ │ │ │ 不应该做的: │ │ ✗ 等待"完美"方案(迁移需要时间) │ │ ✗ 使用未标准化的 PQC 算法(可能不安全) │ │ ✗ 完全依赖单一 PQC 方案(使用混合) │ │ ✗ 忽视"现在收获,以后解密"攻击 │ │ ✗ 自行实现 PQC 算法(使用成熟库) │ │ ✗ 假设量子计算机还很远(迁移需要多年) │ │ │ │ 库选择: │ │ ├── liboqs(Open Quantum Safe):C 库,多语言绑定 │ │ ├── OpenSSL 3.0+:主流 SSL 库,支持 PQC │ │ ├── Bouncy Castle:Java/.NET,PQC 支持中 │ │ ├── Python:pqcrypto、oqs-py │ │ └── Go:正在开发中 │ │ │ │ 实施注意事项: │ │ ├── 密钥大小增加:考虑网络和存储影响 │ │ ├── 性能影响:基准测试和优化 │ │ ├── 兼容性:确保客户端和服务器都支持 │ │ └── 监控:持续关注 PQC 安全研究 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### 迁移检查清单 **PQC 迁移检查清单**: ``` ┌─────────────────────────────────────────────────────────────┐ │ PQC 迁移检查清单 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 评估阶段: │ │ □ 识别所有使用公钥密码的系统 │ │ □ 识别需要长期保护的数据(>10 年) │ │ □ 评估当前密码算法(RSA、ECC 等) │ │ □ 评估供应商 PQC 支持情况 │ │ □ 制定风险评估报告 │ │ │ │ 规划阶段: │ │ □ 选择 PQC 算法(Kyber、Dilithium 等) │ │ □ 设计混合方案 │ │ □ 制定迁移时间表 │ │ □ 预算和资源规划 │ │ □ 制定回滚计划 │ │ │ │ 测试阶段: │ │ □ 搭建测试环境 │ │ □ 概念验证(PoC) │ │ □ 性能基准测试 │ │ □ 互操作性测试 │ │ □ 安全测试 │ │ │ │ 部署阶段: │ │ □ 高优先级系统迁移 │ │ □ 中等优先级系统迁移 │ │ □ 低优先级系统迁移 │ │ □ 监控和日志 │ │ □ 用户培训和文档 │ │ │ │ 运维阶段: │ │ □ 持续监控 PQC 安全性 │ │ □ 关注标准更新 │ │ □ 定期密钥轮换 │ │ □ 应急响应计划 │ │ □ 定期审计和评估 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` --- ## 总结与思考 ### 核心要点回顾 **PQC 知识框架**: ``` ┌─────────────────────────────────────────────────────────────┐ │ PQC 知识框架 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 量子威胁: │ │ ├── Shor 算法:破解 RSA、ECC 等公钥密码 │ │ ├── Grover 算法:对称密钥强度减半 │ │ └── "现在收获,以后解密":当前威胁 │ │ │ │ PQC 技术路线: │ │ ├── 基于格:Kyber(KEM)、Dilithium(签名) │ │ ├── 基于编码:McEliece、BIKE、HQC │ │ ├── 基于多变量:Rainbow、GeMSS │ │ ├── 基于哈希:SPHINCS+ │ │ └── 基于同源性:CSIDH(研究阶段) │ │ │ │ NIST 标准化: │ │ ├── FIPS 203:CRYSTALS-Kyber(KEM) │ │ ├── FIPS 204:CRYSTALS-Dilithium(签名) │ │ ├── FIPS 205:SPHINCS+(签名) │ │ └── FIPS 206:Falcon(签名) │ │ │ │ 迁移策略: │ │ ├── 评估 → 试点 → 迁移 → 部署 │ │ ├── 混合方案(传统 + PQC) │ │ └── 优先保护长期敏感数据 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### 深入思考 **1. PQC 何时需要部署?** - 对于需要保密 25 年以上的数据:**现在** - 对于关键基础设施:**2025-2026 年** - 对于一般业务系统:**2026-2028 年** - 对于临时数据:可以等待 **2. 应该选择哪种 PQC 算法?** - 密钥交换:CRYSTALS-Kyber(NIST 标准) - 数字签名:CRYSTALS-Dilithium(通用)、Falcon(小签名)、SPHINCS+(保守) - 策略:使用混合方案,不依赖单一算法 **3. PQC 会被量子计算机破解吗?** - 目前未知:PQC 基于新的数学难题 - 研究持续:密码学界持续分析 PQC 安全性 - 多样性:使用多种 PQC 方案降低风险 - 保守选择:SPHINCS+ 仅依赖哈希函数 **4. 迁移的最大挑战是什么?** - 兼容性:确保与现有系统和客户端兼容 - 性能:PQC 密钥和签名更大,影响带宽和存储 - 复杂性:混合方案增加系统复杂度 - 意识:许多组织尚未意识到紧迫性 --- ## 参考资料 ### 标准与规范 ``` - NIST FIPS 203:CRYSTALS-Kyber 标准 - NIST FIPS 204:CRYSTALS-Dilithium 标准 - NIST FIPS 205:SPHINCS+ 标准 - NIST FIPS 206:Falcon 标准 - NIST PQC 项目:https://csrc.nist.gov/projects/post-quantum-cryptography ``` ### 工具与库 ``` liboqs(Open Quantum Safe): - GitHub: https://github.com/open-quantum-safe/liboqs - Python: pip install oqs - 支持:Kyber、Dilithium、Falcon、SPHINCS+ 等 OpenSSL 3.0+: - 支持 PQC 算法 - https://www.openssl.org/ Cloudflare PQC: - 已部署 PQC TLS - https://blog.cloudflare.com/post-quantum-for-all/ ``` ### 学习资源 ``` - 《Post-Quantum Cryptography》- Daniel J. Bernstein 等 - NIST PQC 研讨会视频 - IACR 密码学会议论文 - PQCrypto 系列会议 ``` ### 行业报告 ``` - ENISA:Post-quantum cryptography - Current state and quantum mitigation - NSA:Quantum Computing and Post-Quantum Cryptography - 各国政府 PQC 迁移指南 ``` --- *365 天信息安全技术系列 | Day 192 | 密码学系列第 12 篇* > 量子计算的威胁正在逼近,PQC 迁移不是"是否"的问题,而是"何时"的问题。 > 对于需要长期保密的数据,行动的最佳时机是现在。 > 本文内容仅供学习和研究使用,请勿用于非法目的。 --- *本文是 365 天信息安全技术系列的第 192 篇,密码学系列第 12 篇* *密码学系列 12/30 完成!*
myh0st
2026年4月13日 23:19
分享文档
收藏文档
上一篇
下一篇
微信扫一扫
复制链接
手机扫一扫进行分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码