数据安全
加密算法
对称加密
| 算法 | 密钥长度 | 模式 | 适用场景 |
|---|---|---|---|
| AES-256-GCM | 256 bit | 认证加密 | 通用数据加密 |
| AES-128-CBC | 128 bit | 分组 | 兼容老系统 |
| SM4 | 128 bit | 国密标准 | 国内合规 |
| ChaCha20-Poly1305 | 256 bit | 流加密 | 移动端性能优先 |
非对称加密
| 算法 | 密钥长度 | 用途 |
|---|---|---|
| RSA | 2048 / 4096 | 数字签名、密钥交换 |
| ECDSA | P-256 / P-384 | 签名(性能优于 RSA) |
| SM2 | 256 bit | 国密签名+加密 |
| Ed25519 | 256 bit | 高性能签名 |
哈希算法
| 算法 | 输出长度 | 用途 |
|---|---|---|
| SHA-256 | 256 bit | 通用哈希 |
| SHA-3 | 可变 | 下一代标准 |
| SM3 | 256 bit | 国密哈希 |
| bcrypt | — | 密码存储(内置 salt) |
| Argon2 | — | 密码存储(内存硬) |
密码存储最佳实践
java
// bcrypt(推荐)
PasswordEncoder encoder = new BCryptPasswordEncoder(12); // 强度 12
String hash = encoder.encode("userPassword");
boolean match = encoder.matches("userPassword", hash);
// Argon2(更高安全性)
Argon2PasswordEncoder encoder = new Argon2PasswordEncoder(16, 32, 1, 60000, 2);数据脱敏
脱敏策略
| 类型 | 原始值 | 脱敏后 |
|---|---|---|
| 手机号 | 13812345678 | 138****5678 |
| 身份证 | 110101199001011234 | 110101****1234 |
| 银行卡 | 6222021234567890 | 6222****7890 |
| 邮箱 | user@example.com | u***@example.com |
| 姓名 | 张三 | 张** |
实现示例
java
public class DesensitizeUtil {
public static String phone(String phone) {
if (phone == null || phone.length() != 11) return phone;
return phone.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
}
public static String email(String email) {
if (email == null || !email.contains("@")) return email;
return email.replaceAll("(\\w?)(\\w*)(\\w)(@\\w+)",
m -> m.group(1) + "***" + m.group(3) + m.group(4));
}
public static String idCard(String id) {
if (id == null || id.length() < 10) return id;
return id.replaceAll("(\\d{6})\\d+(\\d{4})", "$1****$2");
}
}日志脱敏
xml
<!-- logback PatternLayout 拦截敏感字段 -->
<pattern>%d{yyyy-MM-dd} [%thread] %-5level %logger - %msg%n</pattern>
<!-- 配合 JsonLayout + 自定义过滤器 -->密钥管理
分层密钥体系
主密钥(Master Key)
└─ 密钥加密密钥(KEK)
└─ 数据加密密钥(DEK)
└─ 密文数据KMS 方案
| 方案 | 适用场景 |
|---|---|
| AWS KMS | 云原生 |
| Azure Key Vault | 微软生态 |
| HashiCorp Vault | 自建统一密钥管理 |
| 国密 KMIP | 合规场景 |
密钥轮换
java
// 密钥版本号管理
public class KeyManager {
private static final int CURRENT_VERSION = 3;
public static byte[] encrypt(String plaintext) {
Key key = loadKey("kek_v" + CURRENT_VERSION);
// ... 加密逻辑
// 返回格式:版本号 + IV + 密文
}
public static String decrypt(byte[] ciphertext) {
int version = ciphertext[0]; // 提取版本号
Key key = loadKey("kek_v" + version);
// ... 解密逻辑
}
}等保合规(等保 2.0)
三级等保要求
| 控制点 | 技术要求 |
|---|---|
| 身份鉴别 | 双因素认证、密码复杂度、登录失败锁定 |
| 访问控制 | 最小权限、强制访问控制、会话超时 |
| 安全审计 | 日志完整记录、审计数据保护、时钟同步 |
| 剩余信息保护 | 内存/磁盘敏感信息清除 |
| 数据完整性 | 传输 + 存储完整性校验 |
| 数据保密性 | 敏感数据加密存储和传输 |
| 数据备份 | 本地 + 异地备份、定期恢复测试 |
等保实施要点
yaml
安全管理制度:
- 安全策略和规程
- 人员安全培训
- 应急预案
技术措施:
- 网络安全: 防火墙 + IDS/IPS + 网络隔离
- 主机安全: 漏洞扫描 + 主机加固
- 应用安全: WAF + 代码审计 + 渗透测试
- 数据安全: 加密 + 脱敏 + 备份
管理措施:
- 安全组织架构
- 资产管理制度
- 运维操作规范
- 定期安全评估