2024年12月19日
| 项目信息 | 详情 |
|---|---|
| 项目名称 | 福建水务营收系统 |
| 文档类型 | 技术方案汇报 |
| 适用范围 | 用户个人信息加密存储与搜索 |
| 编写日期 | 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… |
【自动加密/解密流程】
┌──────────┐ ┌──────────┐
│ 保存数据 │ │ 查询数据 │
└────┬─────┘ └────┬─────┘
│ │
▼ ▼
┌──────────┐ ┌──────────┐
│ 明文数据 │ │ 密文数据 │
│ 张三 │ │ 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 | 前缀查询 |
| 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. 保留回滚方案 | 确保出现问题可快速回滚 |
如有疑问,请随时沟通!