title, author, date, documentclass, geometry, fontsize, mainfont, CJKmainfont
| title |
author |
date |
documentclass |
geometry |
fontsize |
mainfont |
CJKmainfont |
| 06_Sensitive_Data_Encryption |
系统设计团队 |
2024年12月19日 |
article |
margin=1in |
11pt |
PingFang SC |
PingFang SC |
用户敏感数据加密存储技术方案
文档信息
| 项目信息 |
详情 |
| 项目名称 |
福建水务营收系统 |
| 文档类型 |
技术方案汇报 |
| 适用范围 |
用户个人信息加密存储与搜索 |
| 编写日期 |
2025年12月 |
| 文档版本 |
V1.0 |
一、方案背景
为什么要做加密?
根据等保测评要求,用户的敏感个人信息(身份证、手机号、银行卡等)必须加密存储,否则无法通过安全检查。
┌─────────────────────────────────────┐
│ 等保测评要求 │
└─────────────────────────────────────┘
│
┌──────────────────────────────┼──────────────────────────────┐
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│ 存储加密 │ │ 传输加密 │ │ 访问控制 │
│ ✓ 必须做 │ │ ✓ 已完成 │ │ ✓ 已完成 │
└───────────────┘ └───────────────┘ └───────────────┘
涉及哪些数据?
| 敏感数据类型 |
示例 |
加密要求 |
| 身份证号 |
350xxx19900101xxxx |
✅ 必须加密 |
| 手机号 |
138xxxx8888 |
✅ 必须加密 |
| 银行卡号 |
6222xxxxxxxx1234 |
✅ 必须加密 |
| 邮箱地址 |
xxx@xxx.com |
✅ 必须加密 |
| 真实姓名 |
张xx |
✅ 必须加密 |
二、技术方案概述
核心思路
"先加密存储,再建立索引" —— 既保证安全,又保证能搜索
┌─────────────────────────────────────────────────────────────────────┐
│ 技术方案整体架构 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 应用层 │ ──────► │ 加密插件 │ ──────► │ 数据库 │ │
│ │ (业务代码) │ │(MyBatis-Plus)│ │ (加密存储) │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ 搜索索引 │ │
│ │ (支持查询) │ │
│ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────┘
采用的技术
| 技术组件 |
说明 |
选择理由 |
| MyBatis-Plus 加密插件 |
自动对数据进行加密和解密 |
框架自带功能,改造成本低 |
| SM4 加密算法 |
国产加密算法,符合等保要求 |
安全等级高,符合等保要求 |
| 搜索索引技术 |
支持加密后的数据查询 |
保证业务搜索功能正常使用 |
三、加密存储方案
加密前后对比
加密前(明文存储,不安全):
| id |
real_name |
id_card |
phone |
| 1 |
张三 |
350102199001011234 |
13812345678 |
加密后(密文存储,安全):
| id |
real_name |
id_card |
phone |
| 1 |
aGF4ZmRz... |
YmVydGlu... |
c2VjdXJl... |
MyBatis-Plus 加密插件原理
【自动加密/解密流程】
┌──────────┐ ┌──────────┐
│ 保存数据 │ │ 查询数据 │
└────┬─────┘ └────┬─────┘
│ │
▼ ▼
┌──────────┐ ┌──────────┐
│ 明文数据 │ │ 密文数据 │
│ 张三 │ │ aGF4ZmRz │
└────┬─────┘ └────┬─────┘
│ │
│ 【加密插件自动处理】 │ 【加密插件自动处理】
│ │
▼ ▼
┌──────────┐ ┌──────────┐
│ 密文数据 │ │ 明文数据 │
│ aGF4ZmRz │ │ 张三 │
└────┬─────┘ └────┬─────┘
│ │
▼ ▼
┌──────────┐ ┌──────────┐
│ 数据库 │ ◄────────────────────────── │ 数据库 │
└──────────┘ └──────────┘
优势说明:
- ✅ 对业务代码透明 —— 开发人员无需修改业务逻辑
- ✅ 自动加密解密 —— 框架自动处理,不易出错
- ✅ 改造成本低 —— 只需添加配置和注解
四、搜索功能方案
为什么加密后还能搜索?
加密后的数据是乱码,无法直接用SQL的 LIKE 查询。我们的解决方案是:建立搜索索引。
┌───────────────────────────────────────────────────────────────────┐
│ 搜索索引设计思路 │
├───────────────────────────────────────────────────────────────────┤
│ │
│ 原始数据 索引数据 用途 │
│ ────── ────── ──── │
│ 身份证:350102199001011234 ➜ 哈希值:a1b2c3... 精确查询 │
│ 手机号:13812345678 ➜ 前7位:1381234 前缀查询 │
│ 姓名:张三 ➜ 拼音:zhangsan 模糊查询 │
│ │
└───────────────────────────────────────────────────────────────────┘
支持的查询类型
| 查询类型 |
适用场景 |
实现方式 |
| 精确查询 |
身份证查用户 |
哈希索引(完全匹配) |
| 前缀查询 |
手机号前几位 |
前缀索引(部分匹配) |
| 模糊查询 |
姓名搜索 |
拼音索引(支持模糊) |
查询流程示例
场景:根据身份证号查询用户
用户输入身份证号
│
▼
┌──────────────┐
│ 计算哈希索引 │ ──────► a1b2c3d4e5...
└──────────────┘
│
▼
┌──────────────┐
│ 查询索引字段 │ ──────► SELECT * FROM user WHERE id_card_hash = 'a1b2c3d4e5...'
└──────────────┘
│
▼
┌──────────────┐
│ 返回匹配记录 │ ──────► 找到用户张三
└──────────────┘
五、数据库表设计
表结构说明
┌─────────────────────────────────────────────────────────────────────┐
│ 用户信息表 (user_info) │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ 【加密存储的字段】 【搜索索引字段】 │
│ ──────────────── ──────────────── │
│ • real_name(真实姓名) • id_card_hash(身份证哈希) │
│ • id_card(身份证号) • phone_prefix(手机号前缀) │
│ • phone(手机号) • name_pinyin(姓名拼音) │
│ • email(邮箱) • bank_card_prefix(银行卡前缀)│
│ • bank_card(银行卡号) │
│ │
└─────────────────────────────────────────────────────────────────────┘
字段对照表
| 敏感字段 |
存储方式 |
对应索引字段 |
索引用途 |
| id_card |
SM4加密 |
id_card_hash |
精确匹配 |
| phone |
SM4加密 |
phone_prefix |
前缀查询 |
| real_name |
SM4加密 |
name_pinyin |
模糊搜索 |
| bank_card |
SM4加密 |
bank_card_prefix |
前缀查询 |
| email |
SM4加密 |
— |
不支持搜索 |
六、等保符合性说明
安全控制措施对照
| 等保要求 |
我们的方案 |
符合性 |
| 个人信息加密存储 |
SM4算法加密 |
✅ 完全符合 |
| 数据传输安全 |
HTTPS + 加密字段 |
✅ 完全符合 |
| 访问权限控制 |
数据库权限 + 应用权限 |
✅ 完全符合 |
| 安全审计 |
操作日志 + 加解密审计 |
✅ 完全符合 |
| 密钥安全管理 |
配置加密 + 独立存储 |
✅ 完全符合 |
安全架构
┌─────────────────────────────────────┐
│ 密钥管理中心 │
│ (独立安全存储) │
└─────────────────────────────────────┘
│
│ 获取密钥
▼
┌─────────────┐ HTTPS ┌─────────────────┐ 加密写入 ┌─────────────┐
│ 前端应用 │ ────────► │ 应用服务器 │ ────────────► │ 数据库 │
│ │ ◄──────── │ (加密/解密) │ ◄──────────── │ (密文存储) │
└─────────────┘ 脱敏显示 └─────────────────┘ 解密读取 └─────────────┘
│
▼
┌─────────────────────────────────────┐
│ 审计日志系统 │
│ (记录所有操作) │
└─────────────────────────────────────┘
七、实施计划
实施时间表
| 阶段 |
工作内容 |
时间 |
负责人 |
| 第一阶段 |
基础加密功能开发 |
1-2天 |
开发团队 |
| 第二阶段 |
搜索索引功能开发 |
2-3天 |
开发团队 |
| 第三阶段 |
历史数据迁移加密 |
1天 |
运维 + 开发 |
| 第四阶段 |
测试与验收 |
1天 |
测试团队 |
| 合计 |
— |
5-7个工作日 |
— |
实施步骤
第1-2天 第3-5天 第6天 第7天
│ │ │ │
▼ ▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
│ 加密功能 │ ────► │ 搜索功能 │ ────► │ 数据迁移 │ ────► │ 测试验收 │
│ 开发 │ │ 开发 │ │ 执行 │ │ 上线 │
└─────────┘ └─────────┘ └─────────┘ └─────────┘
│ │ │ │
▼ ▼ ▼ ▼
配置加密器 精确搜索 备份数据 功能测试
添加注解 前缀搜索 执行迁移 性能测试
测试验证 模糊搜索 验证完整 安全测试
八、风险控制
风险识别与应对
| 风险类型 |
风险描述 |
应对措施 |
| 密钥泄露风险 |
加密密钥被窃取 |
密钥独立存储,定期轮换 |
| 数据迁移风险 |
迁移过程数据丢失 |
先备份后迁移,分批执行 |
| 性能影响风险 |
加解密影响系统性能 |
添加索引,使用缓存优化 |
| 功能影响风险 |
现有功能受影响 |
充分测试,灰度发布 |
应急预案
┌───────────────────────────────────────────────────────────────────┐
│ 应急处理流程 │
├───────────────────────────────────────────────────────────────────┤
│ │
│ 发现问题 ────► 评估影响 ────► 启动回滚 ────► 恢复服务 │
│ │
│ · 监控告警 · 影响范围 · 数据回滚 · 验证功能 │
│ · 用户反馈 · 业务影响 · 代码回滚 · 恢复上线 │
│ │
└───────────────────────────────────────────────────────────────────┘
九、方案优势总结
核心优势
| 优势 |
说明 |
| ✅ 安全性高 |
采用SM4国产加密算法,符合等保要求 |
| ✅ 搜索能力强 |
加密后仍支持精确、前缀、模糊多种搜索 |
| ✅ 改造成本低 |
使用MyBatis-Plus插件,对业务代码侵入小 |
| ✅ 实施周期短 |
5-7个工作日可完成全部改造 |
| ✅ 运维友好 |
自动加解密,无需人工干预 |
投入产出分析
┌───────────────────────────────────────────────────────────────────┐
│ 投入产出分析 │
├───────────────────────────────────────────────────────────────────┤
│ │
│ 【投入】 【产出】 │
│ ──── ──── │
│ · 开发工时:5-7个工作日 · 通过等保测评检查 │
│ · 测试工时:1-2个工作日 · 符合数据安全法规要求 │
│ · 运维工时:1个工作日 · 降低数据泄露风险 │
│ · 提升用户数据安全保障 │
│ │
│ 【总计:约7-10个工作日】 【价值:等保合规 + 安全保障】│
│ │
└───────────────────────────────────────────────────────────────────┘
十、结论与建议
方案结论
本方案采用MyBatis-Plus加密插件 + 搜索索引的技术路线,能够:
- ✅ 满足等保要求 —— 敏感数据全部加密存储
- ✅ 保持业务功能 —— 加密后仍可正常搜索查询
- ✅ 低成本实施 —— 对现有系统改动小,周期短
- ✅ 安全可控 —— 密钥独立管理,审计可追溯
建议
| 建议事项 |
说明 |
| 1. 尽快启动 |
等保测评时间紧迫,建议尽快安排实施 |
| 2. 分阶段实施 |
先完成核心功能,再优化性能 |
| 3. 充分测试 |
上线前做好功能和性能测试 |
| 4. 保留回滚方案 |
确保出现问题可快速回滚 |
如有疑问,请随时沟通!