fujian_water_biz_doc/output/06_Sensitive_Data_Encryption_processed.md

20 KiB
Raw Blame History

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. 安全可控 —— 密钥独立管理,审计可追溯

建议

建议事项 说明
1. 尽快启动 等保测评时间紧迫,建议尽快安排实施
2. 分阶段实施 先完成核心功能,再优化性能
3. 充分测试 上线前做好功能和性能测试
4. 保留回滚方案 确保出现问题可快速回滚

如有疑问,请随时沟通!