Skip to content

数据安全保护

**本文引用的文件** - [XorSensitiveUtil.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-common/lemes-service-dm-common-common/src/main/java/com/lenovo/lemes/service/dm/common/client/tools/utils/XorSensitiveUtil.java) - [SensitiveTypeHandler.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-common/lemes-service-dm-common-common/src/main/java/com/lenovo/lemes/service/dm/common/client/tools/handler/SensitiveTypeHandler.java) - [PasswordUtil.java](file://lemes-cloud/lemes-framework/lemes-framework-auth/src/main/java/com/lenovo/lemes/framework/auth/util/PasswordUtil.java) - [DesUtil.java](file://lemes-cloud/lemes-framework/lemes-framework-core/src/main/java/com/lenovo/lemes/framework/core/util/DesUtil.java) - [CommonConstants.java](file://lemes-cloud/lemes-framework/lemes-framework-core/src/main/java/com/lenovo/lemes/framework/core/constants/CommonConstants.java) - [SecureString.java](file://lemes-cloud/lemes-framework/lemes-framework-core/src/main/java/com/lenovo/lemes/framework/core/util/SecureString.java) - [SSLSessionReuseFTPSClient.java](file://lemes-cloud/lemes-framework/lemes-framework-core/src/main/java/com/lenovo/lemes/framework/core/util/SSLSessionReuseFTPSClient.java) - [HttpUtil.java](file://lemes-job-devicemate/lemes-job-devicemate-common/src/main/java/com/lenovo/lemes/job/devicemate/common/util/HttpUtil.java) - [ExceptionItemsService.java](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/java/com/lenovo/lemes/job/devicemate/executor/service/ExceptionItemsService.java) - [IDPMetaData.java](file://lemes-cloud/lemes-service-common/lemes-service-common-server/src/main/java/com/lenovo/lemes/service/common/server/utils/IDPMetaData.java) - [jsencrypt.js](file://app/devicemate-app/lib/jsencrypt.js) - [ExceptionCode.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-common/lemes-service-dm-common-common/src/main/java/com/lenovo/lemes/service/dm/common/client/tools/entity/constant/ExceptionCode.java) - [PasswordValidTest.java](file://lemes-cloud/lemes-service-common/lemes-service-common-server/src/test/java/PasswordValidTest.java)

目录

  1. 引言
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖分析
  7. 性能考虑
  8. 故障排查指南
  9. 结论
  10. 附录

引言

本文件面向数据安全工程师,系统化梳理 DeviceMate 项目的“数据安全保护”实施方案,覆盖以下方面:

  • 敏感数据加密策略:对称加密(DES)、非对称加密(RSA)、哈希/摘要(BCrypt)的应用现状与改进建议
  • 数据脱敏机制:用户隐私信息、身份证号、手机号、邮箱地址的脱敏策略与实现
  • 密钥管理:密钥生成、存储、轮换、销毁的生命周期管理建议
  • 传输加密:HTTPS/SSL/TLS 的配置与证书管理现状与建议
  • 存储加密:数据库字段加密、文件系统加密、缓存数据加密的现状与建议
  • 数据完整性:数字签名、数据校验、篡改检测机制的现状与建议
  • 安全配置最佳实践:加密参数、性能优化、漏洞防护

项目结构

围绕数据安全的关键代码分布在如下模块:

  • 前端 JS 加密库:RSA 加密封装与使用
  • 后端通用工具:对称加密(DES)、密码摘要(BCrypt)、安全字符串、SSL 会话复用
  • 业务敏感字段处理:MyBatis 类型处理器 + 异或脱敏工具
  • 传输层安全:忽略证书校验的 HTTP 客户端示例(需禁用)
  • 认证与密码策略:密码加密模式切换(DES/BCrypt)

图表来源

章节来源

核心组件

  • 对称加密(DES):用于密码摘要与业务字段加密,密钥由常量提供,建议迁移至 AES 并引入密钥管理
  • 非对称加密(RSA):前端 jsencrypt 实现,用于敏感数据加密传输
  • 哈希/摘要(BCrypt):密码摘要与校验,支持动态切换加密模式
  • 敏感字段脱敏:基于异或的简单掩码,配合 MyBatis 类型处理器实现入库加密、出库解密
  • 安全字符串:内存中以掩码存储,支持清理,避免明文长期驻留
  • 传输加密:SSL/TLS 会话复用;同时存在忽略证书校验的客户端示例,需禁用
  • 证书管理:IDP 公钥刷新与 HttpClient 忽略校验示例,建议采用严格校验与受信 CA 策略

章节来源

架构总览

下图展示从前端到后端、再到数据库与外部系统的数据安全路径。

图表来源

详细组件分析

对称加密(DES)与密钥管理

  • 现状
    • 使用 DES 进行密码摘要与业务字段加密,密钥来自常量,便于测试但不利于生产安全
    • 建议迁移至 AES-GCM 或 AES-CBC,并引入密钥管理系统(KMS),支持密钥生成、轮换、销毁
  • 密钥生命周期建议
    • 生成:使用安全随机源生成 256-bit 密钥
    • 存储:密钥置于硬件安全模块(HSM)或 KMS,应用仅持有密钥包装密钥
    • 轮换:定期轮换主密钥,旧密钥保留用于解密历史数据
    • 销毁:密钥销毁时确保擦除内存与磁盘残留,必要时使用擦写算法
  • 性能与兼容性
    • AES 性能优于 DES,推荐使用 GCM 模式以获得认证加密
    • 保持向后兼容:新增密钥版本,双写新旧密钥,逐步淘汰旧版本

章节来源

非对称加密(RSA)与前端集成

  • 现状
    • 前端使用 jsencrypt 实现 RSA 加密,支持公钥封装与私钥解封
    • 建议固定公钥长度(如 2048/4096),并采用 OAEP 填充提升抗攻击能力
  • 建议
    • 后端提供标准化的 RSA 公钥接口,前端按规范加密
    • 传输层强制 HTTPS,避免中间人攻击

章节来源

哈希/摘要(BCrypt)与密码策略

  • 现状
    • 支持 DES 与 BCrypt 两种密码摘要模式,可通过配置切换
    • BCrypt 提供自适应成本因子,适合长期演进
  • 建议
    • 默认启用 BCrypt,逐步淘汰 DES 模式
    • 引入密码强度策略与复杂度检查,结合随机强密码生成器

章节来源

敏感字段脱敏机制(MyBatis + 异或掩码)

  • 现状
    • 通过 SensitiveTypeHandler 在入库时对字符串字段进行异或掩码加密,在出库时解密
    • XorSensitiveUtil 提供统一的编码/解码与异常映射
  • 脱敏策略
    • 用户隐私信息:手机号、身份证号、银行账户等字段统一采用异或掩码
    • 异常处理:针对不同类型的解密失败抛出特定异常码,便于定位问题
  • 建议
    • 异或掩码属于弱加密,建议升级为 AES-GCM 掩码,增强抗分析能力
    • 对于高敏感字段,建议分片存储或额外加盐

图表来源

章节来源

传输加密(HTTPS/SSL/TLS)

  • 现状
    • SSLSessionReuseFTPSClient 展示了 SSL 会话复用的实现
    • 存在忽略证书校验的 HTTP 客户端示例(HttpUtil、ExceptionItemsService),存在严重安全风险
  • 建议
    • 禁用所有忽略证书校验的逻辑,强制使用受信 CA 验证
    • 采用 TLS1.2+,禁用弱密码套件,启用 OCSP Stapling
    • IDP 公钥刷新采用严格校验,避免降级攻击

图表来源

章节来源

存储加密(数据库/文件/缓存)

  • 数据库字段加密
    • 现状:MyBatis 类型处理器 + 异或掩码
    • 建议:升级为 AES-GCM 掩码,结合随机 IV 与认证标签,防止篡改与重放
  • 文件系统加密
    • 建议:对敏感文件采用文件级加密(如 AES-256),结合访问控制与审计
  • 缓存数据加密
    • 建议:对 Redis/Memcached 中的敏感键值进行透明加密,避免明文缓存泄露

章节来源

数据完整性与篡改检测

  • 现状
    • 采用异常码区分不同类型的解密失败,有助于定位问题
  • 建议
    • 对关键数据增加 HMAC-SHA256 或 AES-GCM 认证标签,实现完整性与防篡改
    • 对外部接口调用增加签名与时间戳校验,防止重放与伪造

章节来源

安全配置最佳实践

  • 加密参数
    • 对称加密:AES-256-GCM;非对称加密:RSA-2048/4096;摘要:BCrypt(成本因子≥12)
  • 性能优化
    • 合理设置线程池与连接池,避免阻塞;对大字段加密采用流式处理
  • 漏洞防护
    • 禁用忽略证书校验;启用 OWASP Top 10 防护;定期进行渗透测试与依赖扫描

依赖分析

  • 前端 jsencrypt 依赖于浏览器安全随机与加密库
  • 后端 PasswordUtil 依赖 DesUtil 与 BCrypt 工具
  • 数据层依赖 MyBatis 类型处理器与 XorSensitiveUtil
  • 传输层依赖 SSL/TLS 与受信 CA

图表来源

章节来源

性能考虑

  • 加密开销:AES-GCM 性能优于 DES,建议在 CPU 密集场景启用硬件加速
  • 内存占用:SecureString 通过掩码降低明文驻留时间,减少内存泄漏风险
  • 网络延迟:TLS 握手与证书验证会带来额外延迟,建议启用会话复用与 OCSP Stapling

故障排查指南

  • 解密失败
    • 检查异常码映射,区分手机号、身份证号、银行账户解密异常
    • 核对密钥版本与编码格式,确保前后端一致
  • 证书校验失败
    • 禁用忽略校验的客户端,使用受信 CA 证书链
    • 核对时间戳与时钟同步,避免证书过期误判
  • 密码匹配失败
    • 确认当前加密模式(DES/BCrypt),必要时迁移至 BCrypt
    • 校验密钥常量一致性与环境变量覆盖

章节来源

结论

DeviceMate 当前实现了基础的对称加密(DES)、非对称加密(RSA)与密码摘要(BCrypt),并在数据层通过 MyBatis 类型处理器与异或掩码实现敏感字段脱敏。为满足更高安全等级,建议:

  • 迁移对称加密至 AES-GCM,引入密钥管理与轮换
  • 强化传输加密,全面禁用忽略证书校验
  • 升级敏感字段掩码为 AES-GCM 掩码,增强完整性与抗分析能力
  • 建立完善的密钥生命周期管理与安全配置基线

附录

  • 测试参考:PasswordValidTest 展示了 DES 解密流程,可用于验证密钥与编码一致性

章节来源