公开文集
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-167-密码学基础
# Day 181: 密码学基础 > 密码学系列第 1 天 | 预计阅读时间:50 分钟 | 难度:★★★★☆ --- ## 清单 目录 1. [密码学概述](#密码学概述) 2. [密码学发展历史](#密码学发展历史) 3. [密码学基本概念](#密码学基本概念) 4. [对称加密算法](#对称加密算法) 5. [非对称加密算法](#非对称加密算法) 6. [哈希函数](#哈希函数) 7. [数字签名](#数字签名) 8. [密钥管理](#密钥管理) 9. [密码学应用场景](#密码学应用场景) 10. [国密算法](#国密算法) 11. [密码学安全实践](#密码学安全实践) 12. [总结与思考](#总结与思考) 13. [参考资料](#参考资料) --- ## 密码学概述 ### 什么是密码学 密码学(Cryptography)是研究如何保护信息安全的科学,它通过数学方法实现信息的机密性、完整性、认证性和不可否认性。 **密码学四大目标**: ``` ┌─────────────────────────────────────────────────────────────┐ │ 密码学四大安全目标 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 1. 机密性 (Confidentiality) │ │ 定义:确保信息仅被授权方访问 │ │ 实现:加密技术 │ │ 场景: │ │ ✓ 数据传输加密 │ │ ✓ 数据存储加密 │ │ ✓ 通信内容保密 │ │ │ │ 2. 完整性 (Integrity) │ │ 定义:确保信息未被未授权篡改 │ │ 实现:哈希函数、消息认证码 │ │ 场景: │ │ ✓ 文件完整性校验 │ │ ✓ 数据传输校验 │ │ ✓ 软件包验证 │ │ │ │ 3. 认证性 (Authentication) │ │ 定义:确认通信双方身份的真实性 │ │ 实现:数字签名、证书、口令 │ │ 场景: │ │ ✓ 用户身份认证 │ │ ✓ 服务器身份认证 │ │ ✓ 设备身份认证 │ │ │ │ 4. 不可否认性 (Non-repudiation) │ │ 定义:确保发送方不能否认已发送的信息 │ │ 实现:数字签名、时间戳 │ │ 场景: │ │ ✓ 电子合同签署 │ │ ✓ 电子交易确认 │ │ ✓ 法律证据保全 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### 密码学分类 **现代密码学分类**: ``` ┌─────────────────────────────────────────────────────────────┐ │ 密码学分类 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 对称密码学 (Symmetric Cryptography) │ │ ├── 特点:加密解密使用相同密钥 │ │ ├── 优势:加解密速度快 │ │ ├── 劣势:密钥分发困难 │ │ ├── 算法:AES、DES、3DES、ChaCha20 │ │ └── 应用:数据加密、文件加密 │ │ │ │ 非对称密码学 (Asymmetric Cryptography) │ │ ├── 特点:加密解密使用不同密钥(公钥/私钥) │ │ ├── 优势:解决密钥分发问题 │ │ ├── 劣势:加解密速度慢 │ │ ├── 算法:RSA、ECC、ElGamal │ │ └── 应用:密钥交换、数字签名 │ │ │ │ 哈希函数 (Hash Function) │ │ ├── 特点:单向不可逆、固定长度输出 │ │ ├── 优势:完整性校验、快速计算 │ │ ├── 劣势:不可恢复原始数据 │ │ ├── 算法:SHA-256、SHA-3、MD5、SM3 │ │ └── 应用:密码存储、数据完整性 │ │ │ │ 密钥交换 (Key Exchange) │ │ ├── 特点:安全地协商共享密钥 │ │ ├── 协议:Diffie-Hellman、ECDH │ │ └── 应用:TLS 握手、安全通信 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` --- ## 密码学发展历史 ### 古典密码学 **密码学发展时间线**: ``` ┌─────────────────────────────────────────────────────────────┐ │ 密码学发展历史 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 公元前 1900 年 - 古典密码 │ │ ├── 埃及象形文字加密 │ │ ├── 凯撒密码(公元前 50 年) │ │ ├── 替换密码、置换密码 │ │ └── 特点:基于字符操作,安全性低 │ │ │ │ 1466 年 - 机械密码 │ │ ├── Alberti 密码盘 │ │ ├── Vigenère 密码(1553 年) │ │ ├── Enigma 机(1918 年) │ │ └── 特点:机械化加密,复杂度提升 │ │ │ │ 1949 年 - 现代密码学 │ │ ├── Shannon 发表《保密系统的通信理论》 │ │ ├── 密码学成为科学 │ │ ├── DES 算法(1977 年) │ │ └── 特点:基于数学理论,可证明安全 │ │ │ │ 1976 年 - 公钥密码学 │ │ ├── Diffie-Hellman 密钥交换 │ │ ├── RSA 算法(1977 年) │ │ ├── ECC 椭圆曲线(1985 年) │ │ └── 特点:解决密钥分发问题 │ │ │ │ 21 世纪 - 后量子密码学 │ │ ├── 量子计算威胁 │ │ ├── 格密码、编码密码 │ │ ├── NIST 后量子密码标准化 │ │ └── 特点:抗量子计算攻击 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### 经典密码算法 **凯撒密码**: ``` 原理:字母表平移 加密:C = (P + k) mod 26 解密:P = (C - k) mod 26 示例(k=3): 明文:HELLO 密文:KHOOR 安全性:极低,易被暴力破解 ``` **Vigenère 密码**: ``` 原理:多表替换密码 加密:使用密钥词循环移位 密钥:KEY 明文:HELLOWORLD 密文:RIJVSUYVJN 安全性:中等,可被频率分析破解 ``` --- ## 密码学基本概念 ### 核心术语 ``` ┌─────────────────────────────────────────────────────────────┐ │ 密码学核心术语 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 明文 (Plaintext) │ │ 定义:未加密的原始信息 │ │ 示例:"Hello, World!" │ │ │ │ 密文 (Ciphertext) │ │ 定义:加密后的信息 │ │ 示例:"U2FsdGVkX1+..." │ │ │ │ 密钥 (Key) │ │ 定义:用于加密和解密的参数 │ │ 分类: │ │ ├── 对称密钥:加密解密相同 │ │ └── 非对称密钥:公钥 + 私钥 │ │ │ │ 加密 (Encryption) │ │ 定义:将明文转换为密文的过程 │ │ 公式:C = E(K, P) │ │ │ │ 解密 (Decryption) │ │ 定义:将密文恢复为明文的过程 │ │ 公式:P = D(K, C) │ │ │ │ 算法 (Algorithm) │ │ 定义:加密和解密的数学方法 │ │ 示例:AES、RSA、SHA-256 │ │ │ │ 盐 (Salt) │ │ 定义:随机添加到密码中的数据 │ │ 用途:防止彩虹表攻击 │ │ │ │ nonce (Number used once) │ │ 定义:只使用一次的随机数 │ │ 用途:防止重放攻击 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### 密码系统模型 ``` ┌─────────────────────────────────────────────────────────────┐ │ 密码系统基本模型 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 发送方 信道 接收方 │ │ │ │ │ │ │ ▼ ▼ ▼ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ 明文 P │ ──加密──▶ │ 密文 C │ ──传输──▶ │ 解密 │ │ │ └─────────┘ E(K,P) └─────────┘ └─────────┘ │ │ │ │ │ │ │ ▼ │ ▼ │ │ ┌─────────┐ │ ┌─────────┐ │ │ │ 密钥 K │─────────────────┼─────────────────▶│ 密钥 K │ │ │ └─────────┘ │ └─────────┘ │ │ │ │ │ ┌─────────┐ │ │ │ 攻击者 │ │ │ └─────────┘ │ │ │ │ 加密过程:C = E(K, P) │ │ 解密过程:P = D(K, C) │ │ 安全性要求:D(K, E(K, P)) = P │ │ │ └─────────────────────────────────────────────────────────────┘ ``` --- ## 对称加密算法 ### 算法原理 **对称加密特点**: ``` ┌─────────────────────────────────────────────────────────────┐ │ 对称加密特点 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 优点 │ │ ├── 加解密速度快(比非对称快 1000 倍+) │ │ ├── 算法效率高 │ │ ├── 适合大数据量加密 │ │ └── 硬件实现简单 │ │ │ │ 缺点 │ │ ├── 密钥分发困难 │ │ ├── 密钥管理复杂(n 个用户需要 n(n-1)/2 个密钥) │ │ ├── 无法实现数字签名 │ │ └── 无法实现不可否认性 │ │ │ │ 适用场景 │ │ ├── 大量数据加密 │ │ ├── 文件加密 │ │ ├── 数据库加密 │ │ └── 通信内容加密(配合非对称加密) │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### 主流算法 **AES (Advanced Encryption Standard)**: ``` 基本信息: - 标准:NIST FIPS 197 (2001 年) - 类型:分组密码 - 分组长度:128 位 - 密钥长度:128/192/256 位 - 轮数:10/12/14 轮(对应密钥长度) 安全性: ✓ 目前最安全的对称加密算法 ✓ 被全球广泛采用 ✓ 无已知有效攻击方法 ✓ 量子安全(Grover 算法下强度减半) 应用场景: - TLS/SSL 通信加密 - 文件加密( VeraCrypt) - 磁盘加密(BitLocker) - WiFi 加密(WPA2/WPA3) 代码示例(Python): from Crypto.Cipher import AES from Crypto.Random import get_random_bytes # 生成密钥 key = get_random_bytes(32) # 256 位 # 创建 cipher 对象 cipher = AES.new(key, AES.MODE_GCM) # 加密 plaintext = b"Secret message" ciphertext, tag = cipher.encrypt_and_digest(plaintext) # 解密 cipher_dec = AES.new(key, AES.MODE_GCM, nonce=cipher.nonce) plaintext_dec = cipher_dec.decrypt_and_verify(ciphertext, tag) ``` **ChaCha20**: ``` 基本信息: - 设计者:Daniel J. Bernstein (2008 年) - 类型:流密码 - 密钥长度:256 位 - 轮数:20 轮(标准)、12 轮(ChaCha20-12) 特点: ✓ 软件实现速度快(比 AES 快 3 倍) ✓ 抗侧信道攻击 ✓ 无硬件加速依赖 ✓ 移动设备友好 应用场景: - TLS 1.3 - SSH - Android 设备加密 - WhatsApp 消息加密 ``` **DES/3DES**: ``` DES (Data Encryption Standard): - 标准:1977 年 NIST - 密钥长度:56 位(实际) - 分组长度:64 位 - 状态:已淘汰(密钥太短) 3DES (Triple DES): - 原理:DES 加密三次 - 密钥长度:112/168 位 - 状态:逐步淘汰(NIST 2023 年后禁用) 建议: ✗ 不要在新系统中使用 DES/3DES ✓ 使用 AES 替代 ``` ### 工作模式 **常见分组密码模式**: ``` ┌─────────────────────────────────────────────────────────────┐ │ 分组密码工作模式 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ ECB (Electronic Codebook) - 电子密码本 │ │ 原理:每个分组独立加密 │ │ 优点:简单、可并行 │ │ 缺点:相同明文产生相同密文(不安全) │ │ 建议:✗ 不要使用 │ │ │ │ CBC (Cipher Block Chaining) - 密码分组链接 │ │ 原理:每个分组与前一个密文分组异或后加密 │ │ 优点:相同明文产生不同密文 │ │ 缺点:串行处理、需要 IV、易受填充攻击 │ │ 建议:△ 可用但非首选 │ │ │ │ CTR (Counter) - 计数器模式 │ │ 原理:加密计数器生成密钥流,与明文异或 │ │ 优点:可并行、无需填充、随机访问 │ │ 缺点:需要唯一 nonce │ │ 建议:✓ 推荐使用 │ │ │ │ GCM (Galois/Counter Mode) - 伽罗瓦计数器模式 │ │ 原理:CTR 模式 + GMAC 认证 │ │ 优点:认证加密、高性能、可并行 │ │ 缺点:实现复杂 │ │ 建议:✓✓ 首选推荐(TLS 1.3 默认) │ │ │ │ CCM (Counter with CBC-MAC) │ │ 原理:CTR 加密 + CBC-MAC 认证 │ │ 优点:认证加密 │ │ 缺点:串行、需要预计算 │ │ 建议:✓ 可用(WiFi WPA2 使用) │ │ │ └─────────────────────────────────────────────────────────────┘ ``` --- ## 非对称加密算法 ### 算法原理 **非对称加密特点**: ``` ┌─────────────────────────────────────────────────────────────┐ │ 非对称加密特点 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 基本原理 │ │ ├── 使用密钥对:公钥 (Public Key) + 私钥 (Private Key) │ │ ├── 公钥加密,私钥解密 │ │ ├── 私钥签名,公钥验证 │ │ └── 从公钥无法推导私钥 │ │ │ │ 优点 │ │ ├── 解决密钥分发问题 │ │ ├── 可实现数字签名 │ │ ├── 可实现不可否认性 │ │ └── 密钥管理简单(n 个用户只需 2n 个密钥) │ │ │ │ 缺点 │ │ ├── 加解密速度慢(比对称慢 1000 倍) │ │ ├── 不适合大数据加密 │ │ └── 密钥长度较长 │ │ │ │ 适用场景 │ │ ├── 密钥交换 │ │ ├── 数字签名 │ │ ├── 身份认证 │ │ └── 小数据加密(如加密对称密钥) │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### 主流算法 **RSA**: ``` 基本信息: - 发明者:Rivest, Shamir, Adleman (1977 年) - 基础:大整数分解难题 - 密钥长度:2048/3072/4096 位(推荐) - 安全性:密钥长度需持续增加 安全性: ✓ 2048 位:目前安全(推荐最低) ✓ 3072 位:长期安全(推荐) ✓ 4096 位:最高安全 ✗ 1024 位:已不安全(已淘汰) 应用场景: - TLS/SSL 证书 - SSH 密钥 - PGP 加密 - 数字签名 代码示例(Python): from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_OAEP # 生成密钥对 key = RSA.generate(2048) private_key = key public_key = key.publickey() # 加密(使用公钥) cipher = PKCS1_OAEP.new(public_key) plaintext = b"Secret message" ciphertext = cipher.encrypt(plaintext) # 解密(使用私钥) cipher_dec = PKCS1_OAEP.new(private_key) plaintext_dec = cipher_dec.decrypt(ciphertext) 注意事项: ! RSA 加密数据长度受限(密钥长度 - 填充) ! 通常用于加密对称密钥,而非直接加密数据 ! 必须使用填充方案(OAEP/PKCS#1 v1.5) ``` **ECC (Elliptic Curve Cryptography)**: ``` 基本信息: - 基础:椭圆曲线离散对数问题 - 提出:1985 年(Koblitz, Miller) - 密钥长度:256/384/521 位 - 曲线:P-256、P-384、Curve25519 优势(相比 RSA): ✓ 相同安全性,密钥更短(256 位 ECC ≈ 3072 位 RSA) ✓ 计算速度更快 ✓ 带宽占用更小 ✓ 功耗更低(适合移动设备) 常用曲线: - P-256 (secp256r1):NIST 标准,广泛使用 - P-384 (secp384r1):更高安全性 - Curve25519:现代设计,性能更好 - Ed25519:数字签名 应用场景: - TLS 1.3(首选 ECC) - 比特币/加密货币 - SSH 密钥(Ed25519) - 移动设备加密 代码示例(Python - ECC 密钥交换): from cryptography.hazmat.primitives.asymmetric import ec from cryptography.hazmat.primitives import hashes # 生成密钥对 private_key = ec.generate_private_key(ec.SECP256R1()) public_key = private_key.public_key() # 密钥交换(ECDH) peer_private_key = ec.generate_private_key(ec.SECP256R1()) peer_public_key = peer_private_key.public_key() # 计算共享密钥 shared_key = private_key.exchange(ec.ECDH(), peer_public_key) ``` **对比总结**: ``` ┌─────────────────────────────────────────────────────────────┐ │ RSA vs ECC 对比 │ ├─────────────────────────────────────────────────────────────┤ │ 安全性 │ RSA-3072 │ ECC-256 │ 相当安全性 │ │ 密钥长度 │ 3072 位 │ 256 位 │ ECC 更短 │ │ 签名速度 │ 慢 │ 快 │ ECC 更快 │ │ 验证速度 │ 快 │ 慢 │ RSA 更快 │ │ 加密速度 │ 慢 │ 快 │ ECC 更快 │ │ 带宽占用 │ 大 │ 小 │ ECC 更小 │ │ 兼容性 │ 好 │ 中 │ RSA 更好 │ │ 量子威胁 │ 高 │ 高 │ 都需后量子替代 │ │ │ │ 选择建议: │ │ ✓ 新系统:优先选择 ECC(P-256 或 Curve25519) │ │ ✓ 兼容旧系统:使用 RSA-3072 │ │ ✓ 移动设备:ECC 是首选 │ │ ✓ 长期安全:考虑后量子密码 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` --- ## 哈希函数 ### 算法原理 **哈希函数特点**: ``` ┌─────────────────────────────────────────────────────────────┐ │ 哈希函数特点 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 基本特性 │ │ ├── 单向性:无法从哈希值恢复原始数据 │ │ ├── 确定性:相同输入产生相同输出 │ │ ├── 固定长度:任意长度输入产生固定长度输出 │ │ ├── 雪崩效应:输入微小变化导致输出巨大变化 │ │ └── 抗碰撞:难以找到两个不同输入产生相同输出 │ │ │ │ 安全要求 │ │ ├── 原像攻击抵抗:给定 h,难以找到 m 使得 H(m)=h │ │ ├── 第二原像抵抗:给定 m1,难以找到 m2 使得 H(m1)=H(m2) │ │ └── 碰撞抵抗:难以找到 m1, m2 使得 H(m1)=H(m2) │ │ │ │ 应用场景 │ │ ├── 密码存储(加盐哈希) │ │ ├── 数据完整性校验 │ │ ├── 数字签名 │ │ ├── 消息认证码 (HMAC) │ │ ├── 区块链/加密货币 │ │ └── 文件去重 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### 主流算法 **SHA-2 家族**: ``` 基本信息: - 标准:NIST FIPS 180-4 - 发布:2001 年(SHA-256 等) - 成员:SHA-224、SHA-256、SHA-384、SHA-512 SHA-256(最常用): - 输出长度:256 位(32 字节) - 安全性:128 位(抗碰撞) - 性能:中等 - 应用: ✓ 比特币挖矿 ✓ TLS 证书 ✓ 密码存储 ✓ 文件校验 SHA-512: - 输出长度:512 位(64 字节) - 安全性:256 位(抗碰撞) - 性能:64 位系统上更快 - 应用:高安全性需求 代码示例(Python): import hashlib # SHA-256 data = b"Hello, World!" hash_256 = hashlib.sha256(data).hexdigest() print(f"SHA-256: {hash_256}") # 输出:dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f # SHA-512 hash_512 = hashlib.sha512(data).hexdigest() print(f"SHA-512: {hash_512}") ``` **SHA-3**: ``` 基本信息: - 标准:NIST FIPS 202 - 发布:2015 年 - 设计:Keccak 算法(Guyonnet 等) - 类型:海绵结构(不同于 SHA-2 的 Merkle-Damgård) 特点: ✓ 抗长度扩展攻击 ✓ 与 SHA-2 不同的设计(可互为备份) ✓ 支持可变长度输出 ✓ 硬件实现高效 变体: - SHA3-256:替代 SHA-256 - SHA3-512:替代 SHA-512 - SHAKE128/256:可变长度输出 应用: - 新系统首选 - 与 SHA-2 混合使用 - IoT 设备 ``` **MD5(已淘汰)**: ``` 基本信息: - 设计者:Ron Rivest (1991 年) - 输出长度:128 位 - 状态:已破解,不应再使用 安全问题: ✗ 碰撞攻击:可在数秒内找到碰撞 ✗ 原像攻击:理论可行 ✗ 实际应用:已被攻破 建议: ✗ 不要用于任何安全目的 ✗ 仅可用于非安全校验(如文件去重) ✓ 使用 SHA-256 或 SHA-3 替代 ``` ### 密码存储 **安全密码存储实践**: ``` ┌─────────────────────────────────────────────────────────────┐ │ 安全密码存储 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 错误做法 │ │ ✗ 明文存储密码 │ │ ✗ 仅使用 MD5/SHA1 哈希 │ │ ✗ 不加盐哈希 │ │ ✗ 使用快速哈希函数(如 SHA-256 直接哈希) │ │ │ │ 正确做法 │ │ ✓ 使用专用密码哈希函数 │ │ ✓ 每个密码使用唯一盐 │ │ ✓ 使用足够的迭代次数/工作量 │ │ ✓ 存储盐 + 哈希值 │ │ │ │ 推荐算法 │ │ ├── Argon2(首选):2015 年密码哈希竞赛获胜者 │ │ ├── bcrypt:成熟可靠,广泛支持 │ │ ├── scrypt:内存困难,抗 ASIC │ │ └── PBKDF2:标准支持好,但较弱 │ │ │ │ 参数建议 │ │ Argon2id: │ │ - 内存:64MB │ │ - 迭代:3 次 │ │ - 并行度:4 │ │ │ │ bcrypt: │ │ - 成本因子:12+(随硬件提升) │ │ │ │ 代码示例(Python - bcrypt): │ │ import bcrypt │ │ │ │ # 哈希密码 │ │ password = b"my_secret_password" │ │ salt = bcrypt.gensalt(rounds=12) │ │ hashed = bcrypt.hashpw(password, salt) │ │ │ │ # 验证密码 │ │ if bcrypt.checkpw(password, hashed): │ │ print("密码正确") │ │ │ └─────────────────────────────────────────────────────────────┘ ``` --- ## 数字签名 ### 签名原理 **数字签名机制**: ``` ┌─────────────────────────────────────────────────────────────┐ │ 数字签名机制 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 签名过程(发送方) │ │ 1. 计算消息哈希:h = H(m) │ │ 2. 使用私钥签名:s = Sign(SK, h) │ │ 3. 发送消息 + 签名:(m, s) │ │ │ │ 验证过程(接收方) │ │ 1. 计算消息哈希:h' = H(m) │ │ 2. 使用公钥验证:Verify(PK, s, h') │ │ 3. 验证成功则签名有效 │ │ │ │ 安全属性 │ │ ├── 认证性:确认发送方身份 │ │ ├── 完整性:确认消息未被篡改 │ │ └── 不可否认性:发送方不能否认签名 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### 签名算法 **RSA 签名**: ``` 原理: - 签名:s = m^d mod n(私钥操作) - 验证:m = s^e mod n(公钥操作) 填充方案: - PKCS#1 v1.5:传统方案,广泛支持 - PSS:更安全,推荐用于新系统 密钥长度: - 2048 位:最低要求 - 3072 位:推荐 - 4096 位:高安全性 ``` **ECDSA (Elliptic Curve Digital Signature Algorithm)**: ``` 基本信息: - 基础:椭圆曲线 - 标准:NIST FIPS 186-4 - 曲线:P-256、P-384 等 特点: ✓ 签名短(64 字节 for P-256) ✓ 速度快 ✓ 适合资源受限环境 应用: - 比特币交易签名 - TLS 证书(ECDSA 证书) - SSH 密钥(ecdsa-sha2-nistp256) - 代码签名 ``` **EdDSA (Edwards-curve Digital Signature Algorithm)**: ``` 基本信息: - 设计:Daniel J. Bernstein 等 - 曲线:Ed25519(最常用)、Ed448 - 特点:确定性签名(无需随机数) 优势: ✓ 高性能 ✓ 抗侧信道攻击 ✓ 无需随机数生成器 ✓ 签名更短(64 字节) 应用: - SSH(Ed25519 密钥) - GPG/PGP - 加密货币(Monero 等) - TLS 1.3 代码示例(Python - Ed25519): from cryptography.hazmat.primitives.asymmetric import ed25519 # 生成密钥对 private_key = ed25519.Ed25519PrivateKey.generate() public_key = private_key.public_key() # 签名 message = b"Important message" signature = private_key.sign(message) # 验证 try: public_key.verify(signature, message) print("签名验证成功") except Exception: print("签名验证失败") ``` --- ## 密钥管理 ### 密钥生命周期 ``` ┌─────────────────────────────────────────────────────────────┐ │ 密钥生命周期 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 1. 密钥生成 │ │ ├── 使用安全随机数生成器 │ │ ├── 足够密钥长度 │ │ └── 符合算法要求 │ │ │ │ 2. 密钥存储 │ │ ├── 硬件安全模块(HSM) │ │ ├── 密钥管理系统(KMS) │ │ ├── 加密存储 │ │ └── 访问控制 │ │ │ │ 3. 密钥分发 │ │ ├── 安全通道传输 │ │ ├── 密钥协商协议(DH/ECDH) │ │ ├── 公钥基础设施(PKI) │ │ └── 密钥封装 │ │ │ │ 4. 密钥使用 │ │ ├── 访问控制 │ │ ├── 使用审计 │ │ ├── 最小权限 │ │ └── 使用期限 │ │ │ │ 5. 密钥更新 │ │ ├── 定期轮换 │ │ ├── 泄露后更新 │ │ ├── 员工离职更新 │ │ └── 算法升级更新 │ │ │ │ 6. 密钥撤销 │ │ ├── 证书撤销列表(CRL) │ │ ├── 在线证书状态协议(OCSP) │ │ └── 立即生效 │ │ │ │ 7. 密钥销毁 │ │ ├── 安全删除 │ │ ├── 物理销毁(HSM) │ │ └── 销毁记录 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### 密钥存储方案 **密钥存储最佳实践**: ``` ┌─────────────────────────────────────────────────────────────┐ │ 密钥存储方案 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 企业级方案 │ │ ├── 硬件安全模块(HSM) │ │ │ - 物理安全保护 │ │ │ - 防篡改设计 │ │ │ - 高性能密码运算 │ │ │ - 适用:根密钥、CA 密钥 │ │ │ │ │ ├── 云 KMS(AWS KMS、Azure Key Vault 等) │ │ │ - 托管服务 │ │ │ - 自动轮换 │ │ │ - 审计日志 │ │ │ - 适用:云环境密钥管理 │ │ │ │ │ └── 软件 KMS │ │ - HashiCorp Vault │ │ - 自建密钥管理 │ │ - 适用:混合云、私有云 │ │ │ │ 应用级方案 │ │ ├── 环境变量(开发环境) │ │ ├── 配置文件(加密存储) │ │ ├── 操作系统密钥存储 │ │ │ - Windows: DPAPI、CNG │ │ │ - macOS: Keychain │ │ │ - Linux: Kernel Keyring │ │ │ │ │ └── 应用内加密存储 │ │ - 主密钥 + 数据密钥 │ │ - 密钥分层管理 │ │ │ │ 密钥分层 │ │ ├── 主密钥(Master Key) │ │ │ - 长期存储 │ │ │ - HSM 保护 │ │ │ - 用于加密数据密钥 │ │ │ │ │ └── 数据密钥(Data Key) │ │ - 短期使用 │ │ - 内存存储 │ │ - 定期轮换 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` --- ## 密码学应用场景 ### TLS/SSL **TLS 握手流程**: ``` ┌─────────────────────────────────────────────────────────────┐ │ TLS 1.3 握手流程 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 客户端 服务器 │ │ │ │ │ │ │──── ClientHello ────────────▶│ 密码套件、密钥共享 │ │ │ │ │ │ │◀────── ServerHello ──────────│ 选择密码套件 │ │ │ │ │ │ │◀────── Certificate ──────────│ 服务器证书 │ │ │ │ │ │ │◀────── Finished ─────────────│ 握手完成 │ │ │ │ │ │ │──── Finished ───────────────▶│ 握手完成 │ │ │ │ │ │ │◀══════ 加密通信 ════════════▶│ 应用数据 │ │ │ │ │ │ │ │ 密码学组件: │ │ ├── 密钥交换:ECDHE(椭圆曲线 Diffie-Hellman) │ │ ├── 认证:RSA 或 ECDSA 签名 │ │ ├── 加密:AES-GCM 或 ChaCha20-Poly1305 │ │ └── 哈希:SHA-256 或 SHA-384 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### 区块链 **比特币密码学应用**: ``` ┌─────────────────────────────────────────────────────────────┐ │ 比特币中的密码学 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 地址生成 │ │ 私钥 → ECDSA 公钥 → SHA-256 → RIPEMD-160 → Base58Check │ │ (256 位) (256 位) (256 位) (160 位) (地址) │ │ │ │ 交易签名 │ │ ├── 输入:引用之前交易输出 │ │ ├── 签名:ECDSA 签名(私钥签署) │ │ ├── 脚本:验证签名(公钥验证) │ │ └── 输出:新所有者地址 │ │ │ │ 工作量证明 │ │ ├── 哈希:SHA-256(SHA-256(block_header)) │ │ ├── 目标:哈希值 < 难度目标 │ │ └── 挖矿:暴力搜索 nonce │ │ │ │ 默克尔树 │ │ ├── 叶子:交易哈希 │ │ ├── 节点:子节点哈希的哈希 │ │ └── 根:默克尔根(区块头包含) │ │ │ └─────────────────────────────────────────────────────────────┘ ``` --- ## 国密算法 ### 国密算法体系 **中国商用密码算法**: ``` ┌─────────────────────────────────────────────────────────────┐ │ 国密算法体系 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ SM1:对称加密算法 │ │ ├── 类型:分组密码 │ │ ├── 分组长度:128 位 │ │ ├── 密钥长度:128 位 │ │ ├── 特点:硬件实现,不公开 │ │ └── 应用:金融 IC 卡、政务系统 │ │ │ │ SM2:非对称加密算法 │ │ ├── 类型:椭圆曲线密码 │ │ ├── 曲线:256 位椭圆曲线 │ │ ├── 功能:加密、解密、签名、验签、密钥交换 │ │ ├── 对比:性能优于 RSA,安全性相当 │ │ └── 应用:数字证书、电子政务、金融 │ │ │ │ SM3:哈希算法 │ │ ├── 类型:密码哈希函数 │ │ ├── 输出长度:256 位 │ │ ├── 对比:与 SHA-256 安全性相当 │ │ └── 应用:数字签名、消息认证、密码存储 │ │ │ │ SM4:对称加密算法 │ │ ├── 类型:分组密码 │ │ ├── 分组长度:128 位 │ │ ├── 密钥长度:128 位 │ │ ├── 特点:软件/硬件实现,公开 │ │ └── 应用:无线局域网、物联网、金融 │ │ │ │ SM9:标识密码算法 │ │ ├── 类型:基于身份的密码 │ │ ├── 特点:无需证书,使用身份标识 │ │ └── 应用:邮件加密、移动设备 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### 国密应用 **国密算法使用场景**: ``` 政策要求: ✓ 政务系统必须使用国密算法 ✓ 关键信息基础设施优先使用国密 ✓ 金融系统逐步迁移至国密 应用实践: - 国密 SSL:SM2 密钥交换 + SM4 加密 - 国密证书:SM2 签名证书 - 国密 VPN:SM4 加密隧道 - 国密邮件:SM2+SM3+SM4 代码示例(Python - 使用 gmssl): from gmssl import sm3, sm4, sm2 # SM3 哈希 hash_value = sm3.sm3_hash(b"message") # SM4 加密(ECB 模式) key = b"0123456789abcdef" cipher = sm4.CryptSM4() cipher.set_key(key, sm4.SM4_ENCRYPT) ciphertext = cipher.crypt_ecb(b"plaintext") # SM2 签名(需导入密钥) # sm2 签名验签需要密钥对 ``` --- ## 密码学安全实践 ### 最佳实践 **密码学使用指南**: ``` ┌─────────────────────────────────────────────────────────────┐ │ 密码学安全实践 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ ✓ 应该做的 │ │ ├── 使用经过验证的库(不要自己实现) │ │ ├── 使用足够长的密钥 │ │ ├── 使用安全的随机数生成器 │ │ ├── 定期轮换密钥 │ │ ├── 使用认证加密模式(如 GCM) │ │ ├── 妥善管理密钥 │ │ ├── 使用最新版本的算法和协议 │ │ └── 进行安全审计 │ │ │ │ ✗ 不应该做的 │ │ ├── 不要自己设计密码算法 │ │ ├── 不要使用已破解的算法(MD5、SHA1、DES) │ │ ├── 不要硬编码密钥 │ │ ├── 不要使用弱随机数 │ │ ├── 不要重复使用 nonce/IV │ │ ├── 不要忽略证书验证 │ │ └── 不要使用 ECB 模式 │ │ │ │ 密钥长度建议 │ │ ├── 对称加密:AES-256 │ │ ├── 非对称加密:RSA-3072 或 ECC-256 │ │ ├── 哈希函数:SHA-256 或 SHA-3 │ │ └── 数字签名:ECDSA P-256 或 Ed25519 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### 常见错误 **密码学使用常见错误**: ``` 错误 1:使用弱随机数 ✗ 错误:random.random() 生成密钥 ✓ 正确:secrets.token_bytes() 或 /dev/urandom 错误 2:硬编码密钥 ✗ 错误:key = "hardcoded_secret_key" ✓ 正确:从环境变量或 KMS 获取 错误 3:重复使用 nonce ✗ 错误:固定 IV 或重复 nonce ✓ 正确:每次加密使用唯一 nonce 错误 4:忽略认证 ✗ 错误:仅加密不认证 ✓ 正确:使用认证加密(AEAD)如 AES-GCM 错误 5:使用 ECB 模式 ✗ 错误:AES.new(key, AES.MODE_ECB) ✓ 正确:AES.new(key, AES.MODE_GCM) 错误 6:密码哈希不当 ✗ 错误:hashlib.sha256(password) ✓ 正确:bcrypt.hashpw(password, salt) 错误 7:不验证证书 ✗ 错误:verify=False 或忽略证书错误 ✓ 正确:严格验证证书链 错误 8:密钥管理不当 ✗ 错误:密钥明文存储 ✓ 正确:使用 HSM 或 KMS 加密存储 ``` --- ## 总结与思考 ### 核心要点回顾 **密码学知识框架**: ``` ┌─────────────────────────────────────────────────────────────┐ │ 密码学知识框架 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 基础理论 │ │ ├── 密码学四大目标:机密性、完整性、认证性、不可否认性 │ │ ├── 对称加密:AES、ChaCha20 │ │ ├── 非对称加密:RSA、ECC │ │ └── 哈希函数:SHA-256、SHA-3、SM3 │ │ │ │ 核心技术 │ │ ├── 数字签名:ECDSA、EdDSA │ │ ├── 密钥交换:DH、ECDH │ │ ├── 密钥管理:HSM、KMS │ │ └── 国密算法:SM2、SM3、SM4 │ │ │ │ 应用场景 │ │ ├── TLS/SSL:安全通信 │ │ ├── 区块链:加密货币 │ │ ├── 密码存储:bcrypt、Argon2 │ │ └── 数字证书:PKI 体系 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### 深入思考 **1. 密码学不是银弹** 密码学是安全的重要组成部分,但不是全部。即使使用最强的加密,如果: - 密钥管理不当 - 实现有漏洞 - 系统有其他弱点 那么整体安全仍然是脆弱的。 **2. 不要自己发明密码算法** 密码学是高度专业化的领域。即使是专家,设计的算法也可能存在未知漏洞。应该: - 使用经过广泛审查的标准算法 - 使用成熟的密码学库 - 遵循最佳实践 **3. 密码学在演进** - 量子计算威胁现有公钥密码 - 需要向后量子密码迁移 - 算法需要定期更新 **4. 性能与安全的平衡** - ECC 比 RSA 更高效 - AES-NI 硬件加速 - 选择合适的算法组合 --- ## 参考资料 ### 标准与规范 ``` 国际标准: - NIST FIPS 197: AES - NIST FIPS 180-4: SHA-2 - NIST FIPS 202: SHA-3 - RFC 8446: TLS 1.3 中国标准: - GM/T 0003-2012: SM2 - GM/T 0004-2012: SM3 - GM/T 0002-2012: SM4 ``` ### 学习资源 ``` 书籍: - 《应用密码学》- Bruce Schneier - 《密码学导论》- Nigel Smart - 《Serious Cryptography》- Jean-Philippe Aumasson 在线课程: - Coursera: Cryptography I (Stanford) - edX: Introduction to Cyber Security 工具库: - Python: cryptography, pycryptodome - Java: Bouncy Castle, JCA - Go: crypto 标准库 ``` --- *365 天信息安全技术系列 | Day 181 | 密码学系列开篇* *密码学系列 (Day 181-210) 开始!共 30 篇* > 密码学是信息安全的基石。理解密码学,是理解安全的基础。 > 本文内容仅供学习和研究使用,请勿用于非法目的。 --- *本文是 365 天信息安全技术系列的第 181 篇,密码学系列第 1 篇* *密码学系列开始!*
myh0st
2026年4月13日 23:19
分享文档
收藏文档
上一篇
下一篇
微信扫一扫
复制链接
手机扫一扫进行分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码