加密At Rest
加密At Rest
1)为什么需要它,我们保护的是什么
定义。Rest加密是对写入介质(磁盘,snapshot,备份,对象,logi,内存转储)的数据的保护,因此未经授权访问物理介质或"原始"存储不会泄露内容。
我们涵盖的内容:- 块/文件卷、对象存储、数据库、队列/网关、缓存转储、逻辑/跟踪、备份、导出/导入、VM/容器快照、核心/进程转储、播客/交换。
- 多目标场景:客户端/项目/环境之间的隔离。
我们不能完全覆盖的内容包括:内存中的会话窃取,对实时过程的攻击,应用程序漏洞,损害凭据。这需要"飞行中"加密,严格的身份验证/授权,最小化权限和监控(请参阅相关文章:"身份验证和授权","请求签名和验证")。
2)威胁模式和控制目标
典型风险:- 媒体丢失/盗窃(磁盘、磁带、USB、开发人员设备)。
- 未经授权访问备份/快照/登录。
- 滥用Platform/Hypervisor/Storaj-nod级别的特权。
- 配置错误时租户交叉。
- "垃圾"临时文件和转储到工件和图像中。
1.介质上的数据隐私。
2.租户/环境的加密隔离。
3.密钥可管理性(创建,存储,轮换,撤回)。
4.可审核性(谁以及何时使用密钥)。
5.将事件中的操作风险降至最低。
3)架构基本原理
默认情况下,将全部加密。Opt-out被禁止,没有风险级别的例外。
密钥层次结构(envelope加密)。Root/KEK → DEK(数据加密密钥)→ 对象/文件/DB页面。
KMS/HSM作为信任来源。KEK在KMS/HSM中的生成和存储,密钥包装/部署操作在同一位置进行。
Per-tenant/per-dataset键。粒度符合隔离和旋转的要求。
职责划分。平台团队≠租户密钥所有者;最低特权(PoLP)。
Crypto-agility.能够安全地迁移算法/密钥长度。
轮换为过程而不是事件。密钥和数据必须支持"滚动"替换。
4)加密算法和模式
对象/文件/记录:AES-256-GCM或AES-256-SIV(具有身份验证的AEAD)。
对于块设备/卷:AES-XTS-256/512(块置换保护;非AEAD-在文件格式之上使用MAC,其中完整性很重要)。
- TDE (Transparent Data Encryption) движка: Oracle TDE, SQL Server TDE, MySQL/InnoDB TDE и пр.
- 字段/小写密码学(FPE/确定性加密)-用于加密字段上的搜索/操纵杆功能;谨慎行事。
- 密钥生成和存储:KEK-在KMS/HSM中;DEK-在应用程序内存中寿命短,存储时仅以包裹形式。
5)密钥层次结构和KMS/HSM
级别:1.Root key(HSM/KMS中的法定名称)。不会离开HSM/KMS外围。
2.KEK (Key Encryption Key).项目/环境/租户。管理DEK生命周期。
3.DEK (Data Encryption Key).对象/文件/表/段。寿命短,不间断旋转。
实践:- 所有包装/部署操作均通过KMS API进行审核。
- 政客:谁可以"使用"钥匙≠谁可以"管理"钥匙。
- 关键地理分配:区域间的pin-to-Region+双控制。
- 对于高风险操作,可以使用"双检查"模型(两个操作员)。
- 要隔离强层,每个租户都有单独的钥匙戒指。
6)轮换,召回和合规性
DEK轮换:透明且恒定(在对象/页面级别滚动re-encryption)。
KEK轮换:间歇性(例如,每6至12个月一次)+当怀疑有罪时立即召回。
访问召回:通过KMS政策;阻止unwrap操作=数据的瞬时"加密销毁"。
审计日志:谁、何时、哪些权利使用密钥;分别存储和加密。
法规和标准:针对行业需求(例如GDPR/PCI公差/本地监管机构),使用经过认证的加密码器(例如,符合认证水平)。
7)按存储类型划分的模式
7.1块/文件卷和VM/容器
全盘加密(XTS)+通过KMS控制密钥(装载时初始化卷)。
保护交换、崩溃转储、tmp 目录、容器覆盖层、映像/AMI。
快照/快照-始终以加密,带有单独的DEK。
7.2个对象存储
Envelope加密:每个对象的唯一DEK;标题/元数据-没有PII泄漏。
通过租户和环境控制KMS密钥的访问。
服务器端加密(带有本机KMS的SSE)或客户端端加密(CSE)-通过信任模型进行选择。
7.3个数据库
在可用的地方启用TDE;DB密钥通过插件/插件绑定到KMS。
对于特别敏感的字段-在进入DB之前的应用程序加密(AEAD)。
Redo日志/事务日志、存档日志、转储分别加密,密钥分开。
7.4 Logi/Traces/度量
Logs格式-没有敏感的默认数据(消毒)。
Log Archives-单个密钥和短存储TTL。
通过具有A&A和审核的代理服务访问日志阅读。
7.5备份和离线媒体
在写入磁带/云之前,始终在客户端进行加密。
单独存储(外带),分开控制。
对于紧急情况,分离秘密(例如m-of-n)以恢复主访问。
8)多范围(multi-tenant)
租户的关键:KEK-per-tenant+DEK-per-dataset。
策略隔离:KMS名称空间,IAM边界,单独的IDP角色。
应客户要求删除:"加密擦除"-召回租户的KEK并销毁DEK。
客户报告:合规工件、密钥访问日志、轮换确认。
9)性能和操作
硬件加速(AES-NI/x86 Crypto Extensions ARMv8)。
热路分析:使用I/O边界上的加密,避免双重加密,无需。
KMS会话池,在内存中缓存包裹的DEK(具有TTL和转储保护)。
SLO/度量标准:unwrap的潜在性,"超密"对象的比例,KMS错误,备用加密速度。
10)实施过程(参考简历)
步骤0-数据清单。编目所有存储和泄漏路径(tmp、转储、导出、分析箱)。
步骤1-关键层次结构设计。我们定义KEK/DEK级别,粒度,区域,角色。
步骤2-选择模式/库。认可的算法,密码库,版本策略。
步骤3-与KMS/HSM集成。生成/包装/审计,IAM策略,地理固定。
步骤4-写入加密。默认情况下启用,将现有数据迁移到背景重新映射。
步骤5-轮换和紧急情况。法规,"key compomise"测试,"KMS不可用"。
步骤6-监测和审计。Dashbords,Alertes,定期合规报告。
步骤7-学习和"安全代码"。Gaids for Engineers,禁止将秘密带入博客/转储。
11)测试和验证
加密单元测试:AEAD(标签验证)的正确性,更改字节时的故障验证。
失败测试:关闭KMS,过时的密钥版本,强制撤回KEK。
红色/蓝色测试:尝试读取"原始"光盘/snapshot/备用。
兼容性检查:迁移算法/密钥长度(crypto-agility)。
图书馆认证:仅使用经过验证的加密码器;记录版本。
12)频繁的错误以及如何避免错误
双重加密没有意义。多余的潜伏和复杂性。保持一层,提供所需的颗粒和绝缘。
将密钥存储在数据旁边。按键-总是分开的,在不同的访问模型下。
被遗忘的文物。未加密的临时文件、CSV导出、支持转储。在CI/CD和Data Loss Prevention中启用控制。
缺乏旋转。使旋转成为管道/cron的一部分,而非手动操作。
具有敏感数据的日志。引入博客格式和自动消毒剂的合同。
13)迷你食谱(伪代码)
对象的Envelope加密:
1) Request unwrap DEK from KMS by tenant KEK id dek = kms. unwrap(kek_id, wrapped_dek)
2) Generate fresh nonce/iv, encrypt payload (AEAD)
ciphertext, tag = aead_encrypt(dek, iv=random(), aad=metadata, plaintext=data)
3) Delete DEK from memory (zeroize), save {ciphertext, iv, tag, wrapped_dek}
无停机的KEK轮换:
For each object:
new_wrapped_dek = kms. rewrap(old_wrapped_dek, old_kek_id -> new_kek_id)
store(new_wrapped_dek)
We do not touch the data: we turn over only DEK
数据集的"加密删除":
kms. disable_key (tenant_kek_id) # Deny unwrap kms. schedule_destroy (tenant_kek_id, hold_period_days=7) # Optional hold
14)支票单
在运行到prod之前:- 在所有类型的存储上启用默认加密。
- 密钥层次结构已描述并实现;角色和IAM策略配置。
- KMS/HSM已集成,关键操作审计已启用。
- DEK/KEK轮换是自动的;已制定妥协方桉。
- Backaps,snapshots,logi和dumps-加密;密钥单独存储。
- 已将Alerta设置为KMS错误,AEAD标签偏差,未加密工件比例。
- 通过KMS不可用性和密钥召回测试。
- 关于密钥使用和访问尝试的月度报告。
- crypto-agility计划和无痛算法迁移窗口。
- 定期红队从"原始"媒体中提取数据。
15)问答(FAQ)
问: 全盘加密是否足够?
答:对于物理风险-是的,但是对于隔离租户和灵活的轮换,使用DEK对象/拨号更好envelope。
问: KEK损害时该怎么办?
答:立即将KEK召回KMS,重新发布新版本,对所有DEK进行重写,检查日志并进行RCA。
问: 如何加密您正在寻找的字段?
答:仅在严格的风险评估(模式参考)中使用确定性电路或FPE。最好设计查询,以使敏感字段不需要索引的开放视图。
问: 是否需要单独的密钥命令?
答:建议将"Crypto/KMS运算符"作为具有单独权限和程序的角色。
"体系结构和协议"部分的相关材料:- "密钥管理和旋转"
- "S2S认证"
- ";请求的签字和核实";
- "OAuth2/OpenID核心连接"
- "网络手册交付保证"