Appearance
数据安全保护
**本文引用的文件** - [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)目录
引言
本文件面向数据安全工程师,系统化梳理 DeviceMate 项目的“数据安全保护”实施方案,覆盖以下方面:
- 敏感数据加密策略:对称加密(DES)、非对称加密(RSA)、哈希/摘要(BCrypt)的应用现状与改进建议
- 数据脱敏机制:用户隐私信息、身份证号、手机号、邮箱地址的脱敏策略与实现
- 密钥管理:密钥生成、存储、轮换、销毁的生命周期管理建议
- 传输加密:HTTPS/SSL/TLS 的配置与证书管理现状与建议
- 存储加密:数据库字段加密、文件系统加密、缓存数据加密的现状与建议
- 数据完整性:数字签名、数据校验、篡改检测机制的现状与建议
- 安全配置最佳实践:加密参数、性能优化、漏洞防护
项目结构
围绕数据安全的关键代码分布在如下模块:
- 前端 JS 加密库:RSA 加密封装与使用
- 后端通用工具:对称加密(DES)、密码摘要(BCrypt)、安全字符串、SSL 会话复用
- 业务敏感字段处理:MyBatis 类型处理器 + 异或脱敏工具
- 传输层安全:忽略证书校验的 HTTP 客户端示例(需禁用)
- 认证与密码策略:密码加密模式切换(DES/BCrypt)
图表来源
- jsencrypt.js
- PasswordUtil.java
- SensitiveTypeHandler.java
- XorSensitiveUtil.java
- SSLSessionReuseFTPSClient.java
- HttpUtil.java
- ExceptionItemsService.java
- IDPMetaData.java
章节来源
- jsencrypt.js
- PasswordUtil.java
- SensitiveTypeHandler.java
- XorSensitiveUtil.java
- SSLSessionReuseFTPSClient.java
- HttpUtil.java
- ExceptionItemsService.java
- IDPMetaData.java
核心组件
- 对称加密(DES):用于密码摘要与业务字段加密,密钥由常量提供,建议迁移至 AES 并引入密钥管理
- 非对称加密(RSA):前端 jsencrypt 实现,用于敏感数据加密传输
- 哈希/摘要(BCrypt):密码摘要与校验,支持动态切换加密模式
- 敏感字段脱敏:基于异或的简单掩码,配合 MyBatis 类型处理器实现入库加密、出库解密
- 安全字符串:内存中以掩码存储,支持清理,避免明文长期驻留
- 传输加密:SSL/TLS 会话复用;同时存在忽略证书校验的客户端示例,需禁用
- 证书管理:IDP 公钥刷新与 HttpClient 忽略校验示例,建议采用严格校验与受信 CA 策略
章节来源
- DesUtil.java
- CommonConstants.java
- PasswordUtil.java
- XorSensitiveUtil.java
- SensitiveTypeHandler.java
- SecureString.java
- SSLSessionReuseFTPSClient.java
- IDPMetaData.java
架构总览
下图展示从前端到后端、再到数据库与外部系统的数据安全路径。
图表来源
详细组件分析
对称加密(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
图表来源
- jsencrypt.js
- PasswordUtil.java
- DesUtil.java
- SensitiveTypeHandler.java
- XorSensitiveUtil.java
- SSLSessionReuseFTPSClient.java
章节来源
- PasswordUtil.java
- DesUtil.java
- SensitiveTypeHandler.java
- XorSensitiveUtil.java
- SSLSessionReuseFTPSClient.java
性能考虑
- 加密开销:AES-GCM 性能优于 DES,建议在 CPU 密集场景启用硬件加速
- 内存占用:SecureString 通过掩码降低明文驻留时间,减少内存泄漏风险
- 网络延迟:TLS 握手与证书验证会带来额外延迟,建议启用会话复用与 OCSP Stapling
故障排查指南
- 解密失败
- 检查异常码映射,区分手机号、身份证号、银行账户解密异常
- 核对密钥版本与编码格式,确保前后端一致
- 证书校验失败
- 禁用忽略校验的客户端,使用受信 CA 证书链
- 核对时间戳与时钟同步,避免证书过期误判
- 密码匹配失败
- 确认当前加密模式(DES/BCrypt),必要时迁移至 BCrypt
- 校验密钥常量一致性与环境变量覆盖
章节来源
结论
DeviceMate 当前实现了基础的对称加密(DES)、非对称加密(RSA)与密码摘要(BCrypt),并在数据层通过 MyBatis 类型处理器与异或掩码实现敏感字段脱敏。为满足更高安全等级,建议:
- 迁移对称加密至 AES-GCM,引入密钥管理与轮换
- 强化传输加密,全面禁用忽略证书校验
- 升级敏感字段掩码为 AES-GCM 掩码,增强完整性与抗分析能力
- 建立完善的密钥生命周期管理与安全配置基线
附录
- 测试参考:PasswordValidTest 展示了 DES 解密流程,可用于验证密钥与编码一致性
章节来源