只读分享解决方案文档原理方案设计📅 2026-10-14🔖 Rev 1.0⏳ 还有3日到期
🔧解决方案&应用市场分析 -> 原理方案设计 -> 电子设计&技术探讨 -> 存储加密与密钥管理_技术探讨

存储加密与密钥管理_技术探讨

同系列 · 原理方案设计
扫码打开本页
微信扫码

存储加密与密钥管理

加密机制、自加密盘、密钥生命周期与安全启动链 —— 一份以「密钥管得住,加密才有效」为主线的电路设计参考 | 编制日期 2026-10-14 | 版本号 Rev 1.0

3 类加密位置
系统设计的收敛点
主机软件加密 / 主控内联加密 / 自加密盘 SED,第 9 章三选一
1 条主线
密钥管得住,加密才有效
生成 · 驻留 · 派生 · 使用 · 销毁的全生命周期(第 5、6 章)
2 个安全目标
加密只交付其中一个
机密性靠加密,完整性靠认证;防回滚靠单调计数器
1 条信任链
从信任根到存储驱动
启动链验签加 RPMB 防回滚,根扎在熔丝里(第 7、8 章)
报告总结

硬件团队做存储方案时,加密这件事经常被切成两半丢给两个世界:算法侧说「AES-XTS 是标准,用就行」,系统侧说「密钥让固件自己管」。结果是方案评审会上没人说得清密钥存在哪、掉电怎么办、旧镜像能不能回退——而这三件事恰恰决定了加密是真防护还是心理安慰。

这份文档只讲一条主线:密钥管得住,加密才有效。从威胁模型出发,讲透 XTS 扇区加密的工作机制、SED 与 TCG Opal 的密钥层级、密钥的生成与驻留、信任根与安全启动链、RPMB 防回滚,最后收敛到「加密位置三选一」的系统设计决策。文中所有机制口径均为工程通用量级,具体参数一律以正式规范与器件 datasheet 为准。

结论: 加密算法是公开的成熟件,存储安全的胜负手在密钥——生成靠真随机、驻留靠熔丝与安全区、使用靠只写内联引擎、销毁靠 crypto erase;再配一条从信任根出发的启动链与一个单调递增的计数器防回滚。密钥与数据不共介质、加密与认证不混为一谈、版本只进不退,这三条做到了,加密才从「合规说法」变成「真防护」。所有机制口径以正式规范与器件 datasheet 为准。

前言

这份文档的定位是电路与系统设计参考,不是密码学教材:它不证明算法为什么安全,也不复述任何标准的条文——那些事情标准组织已经做完了。它回答的是工程师在方案评审、原理图设计、固件架构与测试规划里真正会问出口的问题:密钥放哪、引擎怎么接、盘要不要选自加密、启动链验到哪一级、回滚怎么防。

因此全文的写法是「机制优先」:先建立威胁模型与攻击者分级,再逐层讲算法、引擎、SED、密钥生命周期、启动链与防回滚,最后用三个失效案例把前面的机制串起来,并给出标准与合规的映射。文中不写寄存器地址、位域位置、选项字节默认值与具体 opcode,也不写任何商业数据;所有数值均为量级口径,落地时以器件 datasheet、TCG 规范与 NIST / IEEE / JEDEC 等正式规范为准。

读者路径

  • 先想清楚防谁:第 1 章(暴露面与攻击者分级)+ 第 2 章(加密与认证的边界)。
  • 正在选加密方案:第 3 章(引擎与数据通路)+ 第 4 章(SED 与 TCG Opal)+ 第 9 章(加密位置三选一)。
  • 负责密钥与固件安全:第 5 章(生成与派生)+ 第 6 章(驻留与保护)+ 第 7 章(启动链)+ 第 8 章(RPMB 防回滚)。
  • 做安全评估与合规:第 10 章(失效案例)+ 第 11 章(标准与合规映射)+ 附录 B(密钥管理检查单)。
  • 只想要结论与速查:第 12 章(要点汇总与清单)+ 附录 A(加密参数速查)+ 附录 C(术语表)。

1. 问题本质:数据在存储侧暴露了什么

这一章不涉及任何算法细节,只把问题还原成机制:数据在存储侧到底暴露在哪些面上、攻击者被分成几级能力、加密能解决什么不能解决什么。后面所有章节的技术选择,都是这一章四个判断的投影;先把威胁模型立住,后面的算法与密钥决策才有锚点。

1.1 存储侧的数据暴露面

存储器件在系统里的位置很特殊:它坐在数据通路的末端,却握着全量数据;它不参与运算,却要在掉电之后长期保管信息。这个位置决定了它的暴露面不是「一个」,而是至少六个——从整机丢失到供应链截获,攻击者能碰到存储的环节远比想象中多。

  • 设备丢失:整机被带走,数据静态随设备流失,攻击者拿到的是「完整系统加全量数据」。
  • 拆机取盘:把存储器件从板上拆下,用编程器或测试座直接读裸片,绕过一切软件防护。
  • 维修流转:返厂、换主控、换板的过程中,旧板旧盘带着数据流出可控环境。
  • 报废处置:二手盘被恢复软件读取残余数据,是数据泄露最古老的形态之一。
  • 总线截获:运行时用探针接在数据总线上,偷的是「明文流动的瞬间」。
  • 供应链截获:流通环节被替换、被预置、被改写固件,攻击发生在数据写入之前。

六个暴露面有一个共同点:攻击者最终拿到的是物理介质,或它的精确副本。这决定了防护思路也统一——让介质上的数据在没有密钥时不可读,并且让密钥不跟数据待在同一个暴露面上。第 5、6 章讲密钥怎么放,本质上就是在回答这个问题。

暴露场景攻击者拿到什么接触程度第一道防护
设备丢失整机与全量静态数据整机级静态加密
拆机取盘裸片内容的直接读取芯片级加密 + 密钥不在数据侧
维修流转可控环境之外的数据副本板级加密 + 快速净化
报废处置残余数据的恢复读取盘级加密 + 安全擦除
总线截获运行中流动的明文运行级总线加密 + 内联引擎
供应链截获被替换或预置的固件与数据流通级安全启动 + 签名验签

前四类针对静态数据(丢失、拆机、维修、报废):介质在手,内容可读;后两类针对运行与流通(总线截获、供应链截获):数据正在流动或尚未写入。这个切分很重要——静态加密对前四类有效,后两类要靠总线加密、安全启动与供应链接管兜底(第 3、7 章)。把六类暴露面混成一句「数据加密了就没事」,是存储安全里最常见的过度承诺。

六类暴露面:前四类针对静态数据,后两类针对运行与流通暴露面一 · 设备丢失整机被带走,静态数据随之流失拿到的是完整系统加全量数据防护:静态加密接触程度:整机级暴露面二 · 拆机取盘拆下器件,用编程器直读裸片绕过一切软件层防护防护:加密 + 密钥隔离接触程度:芯片级暴露面三 · 维修流转返厂换主控,旧板带数据流出泄露发生在可控环境之外防护:加密 + 快速净化接触程度:板级暴露面四 · 报废处置二手盘被恢复软件读取残余最古老的数据泄露形态防护:加密 + 安全擦除接触程度:盘级暴露面五 · 总线截获探针接在数据总线上偷明文偷的是明文流动的瞬间防护:总线加密 + 内联引擎接触程度:运行级暴露面六 · 供应链截获流通环节被替换或预置固件攻击发生在数据写入之前防护:安全启动 + 签名验签接触程度:流通级共同前提:攻击者最终拿到的是物理介质或其精确副本;静态加密把可读数据变成不可读密文,但密钥不能待在同一个暴露面上前四类靠静态加密应对,后两类要靠总线加密、安全启动与供应链接管(第 3、7 章)
图 1 · 存储侧数据暴露面全景

第 1 章图 1 的读法:六张卡片是六个独立入口,不是六个同时成立的场景——一次攻击通常只走一条路径,但六条路径里任何一条没堵住,前面的加密努力就归零。这也解释了为什么本文的章节顺序是「威胁 → 算法 → 引擎 → 盘 → 密钥 → 启动 → 系统」:每一步都在堵一类路径,合起来才是完整防线。

一个常见的误判

「数据加密了,盘被拿走也没事」——这句话只在静态暴露面成立。设备还在运行、数据还在过总线、固件还在被加载的那一刻,加密甚至不是第一道防线。先问攻击者从哪来,再问用什么算法;顺序反了,就会出现「用了最强的模式、没防住最现实的路」这种设计。

1.2 攻击者能力分级

防护强度不能拍脑袋,先给攻击者分级。工程上按「能碰到什么、能花多少成本」分成四级:等级越高,能力越强,防护成本也越高。设计时先回答「防到哪一级」,再选机制——防 L0 用传输加密就够,防 L3 要上掩码与防拆,两者差着一个数量级的成本。分级的价值在于把「安不安全」这个主观问题,变成「防谁」这个可回答问题。

等级能力描述典型攻破对象对应防护层次
L0 远程网络级只能通过网络访问系统传输中数据、暴露的服务传输加密、认证、攻击面收敛
L1 设备操作级能操作界面、接口与登录态弱口令、未锁接口、配置篡改认证、权限最小化、锁定策略
L2 物理接触级拆机、换主控、探针、读写裸片无认证加密、明文密钥、同盘密钥密钥隔离、内联引擎、总线加密
L3 实验室级显微镜、侧信道、故障注入熔丝读出、功耗分析攻破密钥掩码隐藏、防拆、恒定时间实现

四个等级的判据是「攻击成本」而不是「攻击者身份」:同样一个攻击者,面对不同产品愿意投入的成本完全不同。按数据价值定级,而不是按产品档次定级——一把车钥匙里的凭证和一块广告屏里的缓存,不该用同一套防护预算。

攻击者能力四级:先界定防到哪一级,再选防护强度能力增强能力减弱L3实验室级:显微镜、侧信道分析、故障注入等专业台架能攻破:熔丝读出、功耗分析攻破密钥对应防护:掩码与隐藏、防拆、传感器、恒定时间实现L2物理接触级:拆机、换主控、探针接总线、读写裸片能攻破:无认证加密、明文密钥、同盘密钥对应防护:密钥隔离、内联引擎、总线加密L1设备操作级:能操作界面、接口与登录态能攻破:弱口令、未锁接口、配置篡改对应防护:认证、权限最小化、锁定策略L0远程网络级:只能通过网络访问系统能攻破:传输中的数据、暴露的服务对应防护:传输加密、认证、攻击面收敛设计时先回答防到哪一级:密钥与凭证按最高级防,普通用户数据按中等级防,公开数据不防两个常见错误:按 L0 设计(数据明文过总线、密钥同盘存放),或一切都按 L3 设计(成本与工期失控)
图 2 · 攻击者能力分级与防护映射

第 1 章图 2 把四级画成了阶梯:左侧纵轴是能力方向,右侧每条横带给出「能攻破什么、对应什么防护」。注意 L2 到 L3 之间没有渐变——它是成本的分水岭:L2 及以下靠设计纪律(密钥隔离、内联引擎)就能防住,L3 要动用到材料与工艺(掩码、防拆、传感器),研发周期和成本都跳一档。多数消费与工业产品把设计目标定在「完整覆盖 L0~L1、尽力覆盖 L2、显式评估 L3」,而不是笼统追求「最高安全」。

经验法则:定级写进需求,不要停留在口头

把「防到哪一级」写进产品安全需求文档,并且逐项标注哪些机制对应哪一级。评审时最有价值的对话不是「我们用了什么算法」,而是「这个机制把哪一级的哪条路径堵死了」。没写定级的需求,最后一定会演变成两种结局之一:为不存在的威胁买单,或者为真实的威胁裸奔。

1.3 加密能解决与不能解决的问题

加密交付的是机密性:没有密钥,介质上的数据与随机噪声不可区分。这一条价值极大——设备丢了、盘被拆了、报废流拍了,数据都不泄露;再往前一步,销毁密钥就等于销毁全部数据(crypto erase),这是加密送的一个额外红利,第 4、6 章会用到。

但加密只交付这一件事,另外三件事它不碰:完整性(数据被改没改)、真实性(数据是不是本系统写的)、可用性(系统还能不能正常启动)。把「不能」讲具体:XTS 这类模式不提供内建完整性,攻击者改一个密文块,解密后对应明文块会发生可预测的变化——不需要密钥,改得动密文,就间接改得动明文;重放攻击同理,把旧扇区的内容整体换回来,加密完全无感。所以「加密了」不等于「安全了」,差的是认证与版本绑定这两件事。

安全目标加密能否交付还缺什么补齐机制
机密性能:无密钥不可读密钥自身的安全密钥全生命周期管理(第 5、6 章)
完整性不能:密文可被篡改检测恶意修改的能力HMAC / CMAC / AEAD(第 2 章)
真实性不能:来源不可验证签发者身份与版本签名验签与信任根(第 7 章)
可用性不能:系统照样起不来启动链完整与版本只进不退安全启动 + 防回滚(第 7、8 章)
加密交付机密性,认证交付完整性:两件事不能互相替代加密解决:机密性· 设备丢失、拆机、报废后的离线读取· 没有密钥,介质数据与随机噪声无异· 支撑合规叙事与快速净化(crypto erase)· 交付物:密文 + 可验证的密钥管理攻击者拿走介质,得不到内容前提:密钥不在同一个暴露面上加密不解决:完整性与真实性· 比特翻转:改一个密文块,明文可预测变化· 重放:旧扇区内容整体换回,加密无感· 伪造:没有认证,来源与版本都不可信· 密钥本身的安全:与用不用加密无关XTS 单用只交付机密性敏感元数据要另配 MAC 或换用 AEAD判据:攻击者模型里有没有「恶意」二字——有,就必须带密钥做认证(HMAC / CMAC / AEAD)「校验和」防故障,「认证标签」防攻击,两者在存储设计里不能混称(第 2、10 章)
图 3 · 加密与认证的边界

第 1 章图 3 把边界画成了左右两栏:左栏是加密买到的,右栏是加密买不到的。两栏之间没有灰色地带——「加密强度够高」不能兑换成「不怕篡改」,就像保险箱做得再厚,也不能阻止有人往箱子里塞一张假纸条。工程上的对应动作很直接:机密性用加密买,完整性用 MAC 或 AEAD 买,两笔账分开付。

把加密当全能盾,是方向性错误

「我们上了全盘加密」这句话在评审里出现过太多次,但它只等价于「攻击者离线读不走数据」。篡改、回滚、伪造、拒绝服务,一个都没被防住。正确的表述方式是分别回答:离线读取怎么防(加密)、恶意修改怎么防(认证)、旧版本复活怎么防(防回滚)——三个问题三个答案,合成一套方案。

1.4 密钥管理才是安全的瓶颈

AES 是公开标准,硬件引擎是成熟 IP,软件库随处可见——算法侧没有秘密可言,也没有门槛可言。真正的分水岭在密钥:怎么生成(要真随机,不能可预测)、存在哪(要抗读取,不能跟数据同盘)、谁能读(要最小暴露,不能明文过总线)、掉电后怎么办(要能恢复,也要能销毁)。这四个问题任何一个答错,前面用的算法再强,也是给数据上了一把「我知道钥匙在哪」的锁。

把经典失效模式列出来,会发现一个扎眼的事实:它们没有一个是算法被攻破的。学术界攻破 AES 的故事很精彩,工程界攻破存储加密的故事都很朴素——密钥文件就存在被加密的盘上。

失效模式机理后果
密钥与数据同介质密钥文件就存在被加密的盘上拆盘即得密钥,加密形同虚设
全量产同一密钥一个根密钥派生全部设备密钥一颗被攻破,同批次全线沦陷
硬编码密钥进固件密钥常量写在固件镜像里固件一泄,全线泄
密钥明文过总线片外加载密钥时不加保护探针即可捕获,L2 级即破防
无防回滚旧镜像与旧密文可整体回退旧漏洞、旧密钥被复活
可预测种子时间戳、计数器充当熵源密钥可被推算,等于没加密

六种失效的共同点:都不是算法被攻破,而是密钥管理失守。它们的代价也不对称——算法选错的代价是性能与合规麻烦,密钥管错的代价是整套防护归零。本文第 5~8 章逐条给出对策:生成与派生(第 5 章)、驻留与保护(第 6 章)、启动链与信任根(第 7 章)、RPMB 防回滚(第 8 章);第 10 章再把其中三个做成完整案例,还原失效是怎么一层层发生的。

评审会上最该问的三个问题

不需要懂密码学,也能问倒一个不安全的方案:一、密钥存在哪,和加密数据是不是同一个介质?二、根密钥有几把,量产设备是不是共用一把?三、旧镜像能不能被装回去,系统怎么发现?三个问题都答得清楚,方案的地基就稳;有一个含糊,回去补对应章节——本文的章节顺序,就是这三个问题的展开顺序。

1.5 本文主线与读法

本文主线一句话:从威胁模型出发,讲透 XTS 扇区加密、SED / TCG Opal、密钥派生与驻留、信任根与安全启动链、RPMB 防回滚,最后收敛到「加密位置三选一」的系统设计决策。每一章只回答一个问题,章节顺序就是设计顺序——先想清楚防谁,再选算法,再定引擎,再管密钥,最后做系统决策。

章回答的问题关键产物
第 1 章数据暴露在哪、防到哪一级威胁模型与攻击者分级
第 2 章用什么算法与模式XTS / AEAD 选型口径
第 3 章引擎怎么接、影响多大数据通路与性能账
第 4 章要不要选自加密盘SED 架构与取舍矩阵
第 5、6 章密钥怎么来、放在哪生成派生与驻留保护
第 7、8 章怎么信启动、怎么防回退启动链与 RPMB 计数器
第 9、10 章系统怎么设计、坑在哪三选一决策与失效案例
第 11、12 章合规要什么、要点是什么标准映射与设计清单

读法上给两类读者一个捷径。做硬件的:第 1、2 章建立判据,第 3 章落到引擎与通路,第 6 章落到熔丝与安全区,这三章是原理图与 BOM 的直接输入。做系统与固件的:第 4 章决定用不用 SED,第 5、7、8 章决定密钥与启动链架构,第 9 章做最终收敛。两边都要读的是第 10、11 章——案例与合规章节是跨团队对话的共同语言。

2. 加密算法与工作模式基础

算法侧没有秘密:AES、SHA-2、XTS 全是公开标准,实现遍地都是。这一章要建立的是「选型口径」——什么场景用什么模式、认证为什么必须单独考虑、随机数与派生为什么是密钥质量的上游。所有参数以正式规范与器件 datasheet 为准,文中只讲机制与量级。

2.1 对称加密在存储中的角色

存储加密是典型的大量数据加解密场景:吞吐要求高、数据驻留久、加解密必须严格可逆。这三点决定了主角是对称分组加密——AES 是事实标准(FIPS 197),密钥长度 128 / 192 / 256 位三档,硬件引擎与软件指令集(AES-NI 一类)都很成熟。非对称算法(RSA、ECC)在存储里的角色不是加密数据,而是两件事:包装密钥(用公钥包一个对称密钥,方便分发)与签名验签(第 7 章启动链的主角)。

一个容易混淆的点:「用 AES」只解决了用哪个算法,没解决「怎么用」。同样的 AES,选错工作模式(比如 ECB)会泄露明文结构——相同的明文块永远加密成相同的密文块,等于给攻击者画了一张「哪些扇区内容相同」的地图。模式的选择就是下一节的主题,也是存储加密与通用通信加密分道扬镳的地方。

算法族在存储中的角色典型用途依据
对称分组加密(AES)数据机密性主力扇区加密、卷加密、AEAD 核心FIPS 197
工作模式(XTS / GCM 等)决定算法怎么作用于长数据扇区级加密、认证加密IEEE 1619、NIST SP 800 系
哈希(SHA-2 / SHA-3)把任意长数据压成定长摘要完整性校验、签名输入FIPS 180-4、FIPS 202
消息认证码(HMAC / CMAC)带密钥的完整性标签防篡改、防伪造FIPS 198、SP 800-38B
非对称(RSA / ECC)密钥包装与数字签名密钥分发、镜像验签FIPS 186 系
随机数(TRNG / DRNG)密钥与初始化矢量的熵源密钥生成、盐值NIST SP 800-90 系

这张表的用法是「按角色找算法」:每个角色只对应一到两个成熟答案,选型空间比想象中小得多。真正的决策难点不在表里——在于这些角色在系统里怎么组合:谁给谁当上游、哪一级派生哪一把、哪一处只做校验不做认证。第 5 章讲派生链时会看到这张表怎么落成具体架构。

经验法则:角色不混用

同一把密钥不兼任两个角色:加密数据的密钥不拿去做 MAC,包装密钥的 KEK 不直接加密数据。角色混用是派生链设计里最省事、也最危险的捷径——省下的是几行配置,赌上的是「一处泄露处处泄露」的系统性风险。角色分离靠派生实现,代价几乎为零(见 2.4)。

2.2 XTS 模式与扇区加密

存储加密的标准解法是 XTS-AES(IEEE Std 1619,NIST SP 800-38E 有对应说明)。它专门为「按扇区寻址的块设备」设计:每个扇区用一个 tweak(调整值)参与加密,tweak 的典型取法就是扇区号(LBA)。两个直接效果:同样的明文块,放在不同扇区,密文不同——否则攻击者一眼就能看出哪些扇区内容相同;改写一个扇区,只重加密该扇区——存储设备最频繁的操作就是改一个扇区,这个性质决定了 XTS 而不是别的模式统治了存储场景。

结构上 XTS 用两把密钥:一把加密数据,一把加密 tweak;XTS-AES-256 的口径是两把 256 位密钥(合计 512 位,以正式规范为准)。扇区内多个块之间,tweak 按块序号递推——所以同一个扇区里改一个块,不影响其他块;尾块不满整块时用密文挪用(ciphertext stealing)处理,扇区长度不变,不需要填充。「长度不变」这件事在存储里至关重要:填充会改变扇区映射,牵动 FTL 与文件系统的全部上层假设。

参数 / 属性口径设计含义
算法与模式AES + XTS(IEEE 1619)存储扇区加密的默认答案
tweak 来源扇区号(LBA)同一明文跨扇区密文不同
密钥结构数据密钥 + tweak 密钥两把XTS-AES-256 合计 512 位(以规范为准)
尾块处理密文挪用(ciphertext stealing)扇区长度不变,无需填充
扇区独立性改一个扇区只重加密该扇区适配块设备随机写
完整性不提供敏感元数据另配 MAC 或换用 AEAD

XTS 的软肋必须记住,第 10 章案例三会完整复盘它:它不提供完整性。密文被篡改,解密后明文发生可预测变化;旧扇区内容可被整体回放。这两个性质在「攻击者只能离线读」的模型下无所谓,但攻击者能写介质(换盘、改块、回退镜像)时就是致命伤——而「能写」恰恰是多数真实攻击的前提。

XTS 扇区加密:扇区号做调整值,数据密钥与 tweak 密钥分工明文扇区一个扇区的明文数据调整值由扇区号(LBA)生成XTS 引擎数据密钥加密数据块密文扇区长度与明文相同写入介质按扇区号落位调整值怎么来扇区号(LBA)是已知量,不当秘密用;扇区内按块序号递推,块间不重复两把密钥怎么分一把加密数据块本身,一把加密调整值;口径以正式规范(合计位数)为准尾块怎么处理不满整块用密文挪用,扇区长度不变、无需填充,不牵动上层映射同明文跨扇区密文不同改一个扇区只重加密该扇区无内建完整性篡改需认证兜底
图 4 · XTS 扇区加密数据流

第 2 章图 4 上半是一条单扇区的数据流:明文进、调整值由扇区号生成、引擎出密文、按号落盘;下半三张卡是三个最常被问到的机制细节,底部三条性质是选型判据。注意第二条性质「改一个扇区只重加密该扇区」——它是 XTS 适配块设备的根本原因,通信场景常用的 CTR / GCM 模式在这里反而别扭(nonce 管理与标签存放都要额外设计)。

易错点:把 tweak 当秘密,或把密钥当 tweak

两类混淆都真实发生过。其一,以为 tweak(扇区号)需要保密——它是公开已知量,保密的是两把密钥;其二,把同一把密钥既当数据密钥又当 tweak 密钥用——规范明确要求两把密钥独立,混用会削弱模式的安全边界。密钥结构与 tweak 取值以正式规范与器件 datasheet 为准,不要凭印象配置。

2.3 哈希与完整性校验

哈希把任意长数据压成定长摘要(SHA-256 一类,FIPS 180-4),用途是检测「变了没有」:位翻转、传输错误、存储磨损都能查出来。但无密钥哈希挡不住恶意替换——攻击者把数据和摘要一起换掉,校验照样过。要挡恶意,必须上带密钥的机制:HMAC(FIPS 198)或 CMAC(NIST SP 800-38B),没有密钥就生成不出有效标签。这就是「校验和」与「认证标签」的分界线,也是第 1 章图 3 右栏的技术落点。

存储系统里三个位置最需要认证。元数据:映射表、目录项、锁状态——被改会造成系统性错乱,而不是单点错误;密钥相关结构:包装后的密钥块、版本计数器——被改直接影响安全根基;配置与策略区:安全启动参数、锁定状态——被改等于改游戏规则。这三处只做「校验和」是不够的,要 MAC。

想同时拿到机密性与完整性,用认证加密(AEAD):AES-GCM(NIST SP 800-38D)一类,一次算出密文和认证标签,解密先验证认证标签(tag),通过后再输出明文。代价是 GCM 类模式面向「整条消息」设计,直接用于随机改写的块设备要做工程适配——nonce 不能重复、标签要有地方存、部分改写要整条重算。这也是存储场景至今仍普遍选择 XTS、把认证单独做在元数据上的原因。

三条完整性链路:无密钥哈希防偶然,带密钥 MAC 防恶意,AEAD 一次交付两样无密钥哈希 · SHA-2 / SHA-3数据 → 摘要,比对判断能查:位翻转、传输错误、磨损不能挡:恶意替换(数据与摘要可被一起换)防故障带密钥认证 · HMAC / CMAC数据 + 密钥 → 认证标签能挡:篡改、伪造、替换前提:密钥自身要管住(第 5、6 章的主题)防攻击认证加密 · AES-GCM 等 AEAD一次同时交付密文与标签解密先验证认证标签,通过后输出明文适配点:nonce 管理与标签存放要额外设计两者兼得判据:攻击者模型里有没有「恶意」二字——有,就必须带密钥(HMAC / CMAC / AEAD);没有,用无密钥哈希就够存储里的三处必配认证:元数据、密钥相关结构、配置与策略区(第 10 章案例三的教训)
图 5 · 哈希与完整性校验链路

第 2 章图 5 把三条链路并排:最左防「东西坏了」,中间防「有人使坏」,最右一次交付两样。三者的选择判据不是性能,是攻击者模型——模型里有没有「恶意」二字。有,就必须带密钥;没有,无密钥哈希足够,还能省下密钥管理的全部成本。

经验法则:存储系统的三处认证位

按优先级排,存储系统最该配 MAC 的三个位置:一、卷与映射元数据(被改会系统性错乱);二、包装密钥块与版本计数器(被改直接动摇安全根基);三、安全配置区(被改等于改规则)。用户数据本体可以只用 XTS,这三处不行——它们的共同点是「错了不只错一个扇区,而是错一片」。

2.4 随机数与密钥派生

密钥质量的上游是随机数。硬件随机数发生器(TRNG)以物理噪声为熵源(NIST SP 800-90 系给出口径),输出经健康测试与连续自检后才可用于生成密钥;确定性随机比特发生器(DRNG)在种子足够好的前提下扩展输出,适合批量需求。底线:禁止用时间戳、计数器、器件序列号一类可预测值直接当密钥或种子——这类「伪随机」在攻击者眼里等于明文。

派生(KDF)解决的是「一把根密钥不够用、又不能到处放」的矛盾:用密钥派生函数从根密钥算出多把子密钥,每把子密钥绑定一个用途标签(NIST SP 800-108 的计数器模式是典型口径,HKDF 一类亦常见)。派生的两个纪律:每次派生必须带上下文(用途、版本、域分隔标签),同一把根密钥永远不直接用于两个用途——否则一处泄露处处泄露,派生就白做了。

存储里典型的派生链:器件根密钥 → 卷级 KEK(包装密钥)→ 各卷 DEK(数据密钥)→ 必要时按域再派生。口令类场景(解锁 PIN 派生)用慢哈希(PBKDF2 一类,NIST SP 800-132),刻意放慢派生速度以对抗暴力尝试。派生链的每一级都要可重复、可验证——恢复密钥时靠的是同一套输入重建同一把子密钥,不是靠备份每一把,这正是派生相对「每把都存起来」的工程优势。

熵源是器件的「安全资产」,不是副产品

评估一颗主控能不能做安全存储,先看它的随机数能力:有没有硬件熵源、健康测试覆盖哪些项、连续自检失败后是停机还是降级继续、输出速率够不够密钥装载窗口用。这些口径以器件 datasheet 与 SP 800-90 系规范为准;软件里再好的伪随机算法,也救不了一个坏的熵源——垃圾进,垃圾出。

2.5 计算开销与选型准则

加密不是免费的:它吃引擎周期、加延迟、占内存。开销的三个来源:算法本身(AES 共 10~14 轮、每轮数个固定步骤,硬件化后单块延迟在纳秒量级)、模式结构(XTS 每块两次加密调用,GCM 额外算标签)、IO 路径(小 IO 场景下固定开销被放大)。工程上的判据从来不是「哪个算法快」,而是「加密吞吐是否高于介质吞吐一个量级」——只要引擎不成为瓶颈,加密对端到端的影响就可控;反过来,引擎再快,小 IO 的排队延迟也省不掉。

选型收敛成三条准则。其一,按安全目标选模式:只要机密性,XTS;要机密性加完整性且消息边界清晰,AEAD;只验不改,HMAC / CMAC。其二,按数据形态选粒度:随机改写的块设备优先扇区级,归档与备份流可整条消息 AEAD。其三,按实现选算法参数:有硬件引擎就吃硬件(XTS-AES-256),只有软件且平台无 AES 指令集时,评估 ChaCha 一类的替代(以实测为准,不写绝对数字)。

维度XTS-AESAES-GCM 等 AEAD选型提示
交付能力机密性机密性 + 完整性要认证就换 AEAD 或外加 MAC
单块开销每块两次加密调用一次加密 + 标签计算AEAD 块开销更高
随机改写适配好,扇区独立需管理 nonce 与标签存放块设备优先 XTS
典型用途整盘与卷静态加密备份流、消息、协议层按数据形态分工
实现成熟度存储场景广泛协议场景广泛两者均有成熟实现

本章刻意不写任何绝对吞吐数字——那个数字取决于引擎规模、时钟频率、IO 深度与介质档位,写死就会误导。性能的账在第 3 章按数据通路逐段算:引擎吞吐多少、排队损失多少、端到端剩多少,一段一段对得上,结论才站得住。测试口径以实测为准,文中所有量级仅用于建立排序判断。

第 2 章的三个可带走判断

一、AES 是成熟件,模式才是决策点——存储场景的默认答案是 XTS,别在算法上纠结,在模式与认证上纠结。二、加密与认证是两笔账——XTS 只付机密性,完整性要么外加 MAC,要么换 AEAD,没有免费午餐。三、密钥质量的上游是随机数——熵源不合格,后面全盘皆输;派生带上下文,根密钥不兼职。

3. 硬件加密引擎与数据通路

算法选定之后,下一个问题是「引擎长什么样、插在哪里」。本章回答三个问题:主芯片的 AES 引擎有哪几种形态、它对密钥长度与模式的支持怎么核对、数据从主机内存到介质要走哪几段路——以及加密插进这条通路之后,带宽到底损失在哪。本章的口径是「先看通路再看性能」:通路决定了明文与密钥暴露在哪,性能只是通路算完之后的账。所有引擎能力以器件 datasheet 为准,文中只给核对方法与量级判断。

3.1 主芯片 AES 引擎的形态

主芯片里做 AES 的位置不止一种,工程上常见三种形态。其一是内联引擎(inline):加密单元串在数据通路里,总线与存储控制器之间数据流过时顺路加解密,软件只配置、不搬运数据;其二是协处理器引擎(coprocessor):加密单元是独立的运算部件,软件把数据送进去、取回来,灵活但要付搬运成本;其三是外置安全芯片:加密与密钥管理整体移出主芯片,做成独立器件,安全性可以做得更高,但要增加一路接口与一颗物料。

三种形态的分水岭在数据通路的位置,不在算法本身——三者用的都是同一套 AES 标准(FIPS 197)。内联引擎的明文不出主芯片,总线与介质上只有密文,这是第 1 章 L2 级威胁(探针、拆机)的直接对策;协处理器形态的数据要在主芯片内多走一段,通路设计要保证这段路上密钥不与数据并肩;外置芯片把边界推得更远,代价是主机与安全芯片之间的这条新总线成了新的暴露面,要看它自己有没有加密保护。

形态引擎位置数据是否搬动优势代价与注意点
内联引擎总线与存储控制器之间否,流经即加解密明文不出芯片,性能代价最小模式与密钥支持由硬件定死,选型前核对
协处理器引擎主芯片内独立运算单元是,软件送取模式灵活,可做 AEAD 与杂凑数据搬运吃带宽,密钥与数据同片通路要审
外置安全芯片主芯片之外的独立器件是,跨芯片传输密钥边界最清晰,可含安全存储新增接口与物料;该接口自身要防窃听
经验法则:先定形态,再谈参数

形态决定暴露面,参数决定性能,顺序不能反。评审时先问一句:加密点在数据通路的哪一段?答案是「内联、不出芯片」,密钥管理的难度直接降一档;答案是「协处理器或外置」,就要把「密钥怎么进来、数据怎么过去」两段路逐段过一遍(见 3.3 与 6.4)。形态没定就讨论「AES-256 还是 128」,是在没画地图之前讨论走多快。

3.2 密钥长度与模式的硬件支持

引擎支持什么,是 datasheet 说了算,不是软件库说了算——软件层再全,引擎不认的模式一样跑不起来,最后会退化成纯软件实现,性能账完全重算。核对清单有六项:密钥长度档位(128 / 192 / 256 三档是否齐)、XTS 的双密钥结构是否原生支持、GCM / CMAC 一类认证模式是否在硬件里、支持的块与数据单元粒度、密钥装载接口的形态、标称吞吐的测试条件。

其中最容易被想当然的是 XTS 的双密钥结构:XTS 要数据密钥与 tweak 密钥两把独立密钥(第 2 章),有的引擎原生按双密钥接口设计,有的只给单密钥接口靠软件拼装——拼装不是不行,但要确认拼出来的密钥调度不破坏规范要求的独立性。同样要核对的是认证模式:引擎若不含 GCM / CMAC,元数据的 MAC 要么走软件、要么另配引擎,预算里要留这一笔。

核对项要问的问题不满足时的出路依据
密钥长度档位128 / 192 / 256 三档是否都由硬件支持只用支持的档位,不要软件补位跑安全路径FIPS 197
XTS 双密钥结构引擎是否原生接受两把独立密钥确认软件拼装不破坏密钥独立性IEEE 1619
认证模式GCM / CMAC / HMAC 是否在硬件中元数据 MAC 走软件或另配引擎,预算单独列NIST SP 800-38B / 38D
处理粒度按块、按扇区还是按任意长度处理粒度不匹配要软件适配,开销进预算器件 datasheet
密钥装载接口密钥从哪进来(熔丝 / 安全区 / 主机)装载通路必须有保护,见 6.4器件安全手册
标称吞吐条件标称值在什么时钟、什么 IO 口径下测得换算到自己的 IO 口径再比,见 3.4器件 datasheet
易错点:把软件库的能力当成引擎的能力

平台软件栈带一个功能齐全的加密库,不等于硬件引擎支持这些模式。库里能跑,可能走的是纯软件路径——功能对、性能差一个量级,而且这段软件路径往往不在性能测试的口径里,量产之后才在小 IO 场景暴露。核对动作很朴素:把要用的模式逐个在目标板上用目标 IO 口径实测一遍,看 CPU 占用与吞吐,别看功能清单。

3.3 引擎与总线的数据通路

把「加密在主芯片里」展开成通路,实际是三段并行的路。密钥通路:根密钥从熔丝或片内安全区出发,经专用接口装载进引擎,之后不可读;数据通路:写方向明文进引擎、密文出引擎,读方向相反,明文只存在于主机内存与引擎内部;密文通路:密文经总线控制器上总线、落介质,这一段是探针与拆机能直接接触的范围。三段路的责任划分,就是安全边界的划分——任何一段把明文或密钥漏到片外,整套加密就归零。

主芯片 AES 引擎数据通路:明文只在引擎两侧,出了芯片必须是密文主机内存文件系统缓冲的明文页引擎入口请求排队与密钥装载AES 引擎XTS 运算,密钥只进不出总线控制器密文上总线出芯片存储介质密文静态落盘密钥通路 · 只进不出根密钥固化在熔丝或片内安全区经专用接口装载进引擎装载之后不可经任何接口读出回读请求一律返回零或拒绝数据通路 · 明进密出写:明文页进引擎,密文出引擎读:密文进引擎,明文回内存明文只存在于主机内存与引擎不落在任何片外总线上总线与介质 · 只见密文探针接在存储总线上抓到的全部是密文拆盘读裸片得到的也是密文静态数据无密钥不可读判据:明文允许出现在主机内存与引擎内部,出了芯片必须是密文——逐段检查每一根密钥走线与每一段总线引擎吞吐、模式支持与初始化顺序以器件 datasheet 为准;初始化的配置顺序见 3.5 节
图 6 · 主芯片 AES 引擎数据通路

第 3 章图 6 的读法:上半是数据从主机内存到介质的单向链,下半三张卡是三条并行通路各自的纪律。最容易漏的是密钥通路——设计者对数据通路的明密文边界很敏感,对「密钥装载窗口」却常常没有概念:密钥从熔丝进入引擎的那一小段时间,它以明文形态存在于片内,装载完成后的回读必须被硬件拒绝。这段窗口有多长、有没有独立时钟与复位域、装载失败后的状态是什么,都以器件安全手册为准。

通路段跑什么允许的最敏感内容暴露面设计要求
密钥通路根密钥从熔丝 / 安全区到引擎装载窗口内的明文密钥片内走线,L3 级可探专用接口、装载后不可读、失败即停
数据通路读写数据在主机内存与引擎之间明文页片内总线与内存明文不出芯片,缓冲区用后清零
密文通路密文在引擎、总线与介质之间密文探针、拆机可直接接触只许密文,见第 1 章 L2 对策
原理图阶段的三个检查点

通路问题要在原理图阶段拦住,三个检查点:一、密钥装载走线是否专用——不要与普通数据总线复用;二、存储芯片的引脚上是否只有密文——用示波器在样机上抓一次总线,确认抓不到明文;三、外置安全芯片(若有)的接口是否自保护——主机与它之间这条线跑的是命令、凭据还是密钥,逐条列出来。三个点都过,通路的地基就稳了。

3.4 加密对读写带宽的影响

「加密掉多少性能」这个问题没法一句话回答,因为它混了两个量:引擎吞吐(加密单元每秒能处理多少数据)与端到端带宽(系统最终表现出来的读写速度)。正确的关系是:加密只是数据通路里新增的一段,端到端带宽由最慢的一段决定——加密段远快于介质段时,几乎无感;加密段接近介质段时,排队延迟开始放大,端到端明显劣化。

开销的来源按影响排序:其一,模式结构——XTS 每块要两次加密运算(数据一次、tweak 一次),开销天然是单次运算的一倍量级;其二,小 IO 的固定开销——每次请求都要付请求解析、密钥就绪、结果校验的固定成本,IO 越小占比越大;其三,排队与仲裁——引擎挂在共享总线上时,与其它主设备的仲裁损耗随负载上升;其四,软件回退——引擎不支持的模式落到软件路径,CPU 占用挤占业务。

加密对读写带宽的影响:引擎吞吐与端到端带宽是两个量,别混着说无加密主机侧调度总线传输介质访问(通常最慢)有加密主机侧调度引擎加密总线传输介质访问无加密:三段串行,端到端带宽取决于最慢的一段(通常是介质)有加密:引擎段插入通路;引擎充裕时端到端仍由介质决定,吃紧时引擎成为新瓶颈引擎吞吐充裕时加密段耗时远小于介质段排队几乎不发生端到端带宽仍由介质决定常见于引擎规格领先设计引擎吞吐吃紧时引擎段接近介质段耗时请求在引擎入口排队等待端到端带宽明显低于介质延迟抖动随负载变大小 IO 的放大效应每次小 IO 都要付固定开销IO 越小,开销占比越大评估必须用小 IO 实测顺序大块读的结论不可搬用工程判据:加密吞吐高于介质吞吐一个量级,加密就不构成瓶颈;量级差距以实测为准测试覆盖顺序与随机、大小 IO 多种口径;吞吐数字一律以实测与器件 datasheet 为准,不写绝对值
图 7 · 加密对读写带宽的影响

第 3 章图 7 用两根横条把这件事画直白:上面一根是三段串行的原通路,下面一根是插进引擎段的四段通路。读图的关键不是比条子的长短,而是认出「最慢段」的位置——设计目标就是让最慢段始终是介质,让加密段缩到不构成瓶颈。图下三张卡是三种典型状态:充裕、吃紧、小 IO 放大。评估加密性能必须用小 IO 口径:顺序大块读人人好看,而真实业务里最多的是几 KB 的随机读写,固定开销恰恰在这个口径被放大。

影响因素机理恶化条件缓解方向
模式结构开销XTS 每块两次加密调用块越小相对开销越大按扇区整块处理,避免碎片化调用
小 IO 固定开销每请求付解析、就绪、校验成本IO 深度小且尺寸小合并小 IO;按真实业务口径实测
总线仲裁引擎与其它主设备共享总线并发负载高引擎走独立通路或提高其优先级
软件回退引擎不支持的模式走 CPU用到引擎没有的模式安全路径只用硬件支持的模式
密钥就绪每请求确认密钥与上下文就绪频繁切换密钥上下文按卷 / 范围缓存上下文,减少切换
经验法则:性能预算先给介质留底

做加密性能预算的顺序:先测裸介质的带宽与延迟底数,再测引擎吞吐,最后测端到端。三个数都有,加密段占了多少一目了然;只有端到端一个数,出了问题根本分不清是引擎慢、总线挤还是介质到寿命。预算的合格线只有一条:加密段不是全通路的最慢段,且小 IO 口径下端到端劣化在产品可接受范围内——这个「可接受」由产品定义,不由加密模块定义。

3.5 引擎初始化与安全配置

引擎不是上电就能用的:它的初始化有一套顺序,而且顺序本身是安全要求——熵源自检没过就装载密钥,等于把密钥交给了不可信环境;密钥装载后才发现配置错,等于把密钥暴露在错误配置的通路里。工程上的标准顺序是六步:时钟与电源域就绪、随机数发生器自检、密钥装载(熔丝或安全区到引擎)、模式与密钥长度配置、已知答案自检、最后才使能加密通路。

每一步都有「做错的表现」:熵源自检被跳过或失败后强行继续,密钥的可预测性失去保障;密钥装载在配置之前完成,装载窗口被拉长,且错误配置可能把密钥引向不该去的通路;已知答案自检(用固定明密文对验证引擎运算正确)省掉之后,引擎硬件故障只能靠数据损坏来发现——那时已经是用户数据买单。六步顺序与各步的合格判据,以器件安全手册为准;本文给的是顺序逻辑,不是配置手册。

顺序动作做错或跳过的表现合格判据
1时钟与电源域就绪引擎运算不稳定,偶发出错时钟稳定、电源在额定范围内
2随机数发生器自检密钥可预测性失去保障自检通过才允许生成与装载密钥
3密钥装载装载窗口拉长,暴露面扩大装载后回读被硬件拒绝
4模式与密钥长度配置密钥暴露在错误配置的通路中配置完成并锁定后才进入下一步
5已知答案自检硬件故障只能靠数据损坏发现固定明密文对验证通过
6使能加密通路顺序颠倒导致整段重来业务数据开始流入
密钥装载窗口是初始化里最敏感的一段

六步里的第 3 步值得单独强调:装载窗口内,密钥以明文形态存在于片内,这是整个设计里密钥少数「可见」的时刻。三条纪律:装载走专用通路(3.3);装载完成的标志要明确(引擎寄存器状态或安全手册定义的信号,具体以器件手册为准);装载失败后的动作是停机而不是降级继续——「密钥没装好但系统照常跑」的状态,比「系统起不来」危险得多,因为前者会在无人察觉的情况下把密文写成明文,或把明文当密文存。

4. 自加密盘与 TCG Opal

主机侧做加密是一条路,把加密整个塞进盘里是另一条路——这就是自加密盘(SED,Self-Encrypting Drive)。本章讲清四件事:SED 的架构为什么让密钥管理天然省心、TCG Opal 怎么组织密钥层级、锁定与解锁的流程长什么样、掉电瞬间密钥的行为为什么是 SED 的立身之本。读完这一章,你应该能在「选不选 SED」这个问题上给出有依据的答案,并知道选型时核对什么。机制细节以 TCG 规范与盘 datasheet 为准。

4.1 SED 的架构与定位

SED 的定义很干脆:加密引擎与密钥管理都收进盘内,介质上永远只有密文。主机看到的仍然是一块普通块设备——读写命令照发、文件系统照装,加密对上完全透明;差异全在盘内:内联加密引擎坐在主机接口与闪存介质之间,所有数据过引擎,密文的边界就是引擎自身。主机唯一要「多做」的事是认证:提交凭据解锁,之后一切照旧。

这个架构的价值在密钥侧:数据加密密钥(MEK)从生成、使用到销毁全程不出盘——盘内自生成、盘内引擎里以明文存在、盘内销毁。第 1 章那张失效模式表里的「密钥与数据同介质」「密钥明文过总线」「硬编码密钥进固件」三条,在 SED 架构下被结构性消灭,而不是靠纪律防范。代价同样清楚:密钥策略受盘固件约束,产品能做什么不能做什么,要看盘给了哪些配置能力;这也是 TCG Opal 标准存在的意义——把「能做什么」标准化。

自加密盘 SED 架构与密钥层级:引擎在盘内,明文密钥不出盘主机只发读写命令与凭据SED 主机接口命令与凭据的入口内联加密引擎MEK 明文只存在此层存储介质密文与包装后的 MEK密钥层级 · 两级结构MEK:数据加密密钥只以明文存在于引擎内部凭据 / KEK:解开包装后的 MEK,由认证换得层级与术语以 TCG Opal规范口径为准明密文边界 · 一条线边界在引擎内部:一侧是主机内存的明文页,另一侧是介质上的密文;总线上只有密文与命令;拆盘读裸片得到的只是密文与包装密钥crypto erase · 红利销毁数据不必擦介质:换一把新 MEK 并作废旧钥,全盘数据瞬间不可读;退役与转售场景的快速净化靠它(第 1 章暴露面对策)SED 的价值:加密与密钥管理都收进盘内,主机零改造;代价:密钥策略受盘固件约束,选型要核对功能清单密钥层级、包装方式与保留区划分以 TCG Opal 规范与盘 datasheet 为准
图 8 · SED 架构与密钥层级

第 4 章图 8 把 SED 的架构与密钥层级画在了一幅图里:上半是四节点的数据链——主机只发命令与凭据,接口进引擎,介质只见密文;下半三张卡分别是两级密钥结构、明密文边界的位置、以及 crypto erase 的连带红利。注意「包装后的 MEK 也存在介质上」这件事不矛盾:介质上存的是被 KEK 包装(加密)后的 MEK,没有凭据解不开;明文 MEK 只在引擎内部存在,且掉电即消失——这正是 4.4 的主题。

维度SED(盘内加密)主机软件加密含义
加密位置盘内引擎,介质只见密文主机文件系统或块层位置决定暴露面(第 9 章收敛)
密钥驻留不出盘,盘内生成与销毁主机内存,需主机侧保护SED 免去主机密钥管理一整套工作
主机改造零改造,认证即用需部署加密层与密钥服务SED 对存量系统友好
策略灵活性受盘固件能力约束软件自由度高定制需求强的场景要评估盘的能力
跨平台随盘走,拆到哪都锁定绑定主机环境SED 对流转、报废场景天然占优
性能盘内流水线,主机无感吃主机 CPU 与内存带宽两者都要求加密不成为瓶颈(3.4)
TCG 与 Opal 是什么关系

TCG(Trusted Computing Group)是制定可信计算标准的组织,其存储标准族里定义了自加密盘的安全子系统;Opal 是其中面向客户端与一般存储产品的事实标准子集,定义了密钥层级、锁定行为、管理命令的接口。选型时核对盘支持的 Opal 版本与功能集即可获得可预期的行为——具体版本号与功能清单以盘的正式文档为准。不支持 Opal 的「自加密」盘也存在,但行为不可预期,除非有充分的替代证据,不要选。

4.2 Opal 的密钥层级

Opal 的密钥组织是两级结构,理解了这两级,SED 的一切行为都说得通。第一级是数据加密密钥(MEK):真正加密数据的对称密钥,随机生成、只以明文形态存在于引擎内部、掉电即消失;介质上驻留的是它的包装形态。第二级是凭据与包装密钥(KEK):主机认证用的口令或凭据派生出的密钥,作用是「解开包装后的 MEK」——认证通过,KEK 解包 MEK 送进引擎;认证不过,MEK 永远出不来。

两级结构换来的是「改凭据不动数据」:换口令只是换 KEK,MEK 不变、介质不用重写;反过来,「换 MEK 不动介质」就是 crypto erase——作废旧 MEK 换新的,全盘数据瞬间不可读,介质甚至不用擦。这个分离是 SED 架构里最漂亮的一笔,4.4 会把它与掉电行为放在一起看。另一个要点是锁定范围:Opal 允许全局范围与多个次级范围各自持有独立的密钥与锁定策略,范围怎么划、密钥怎么对应,是方案设计要拍板的事,不是盘自动替你决定的事。

层级内容明文形态驻留在哪由谁保护丢失或更换的后果
MEK数据加密密钥,真正加密数据仅引擎内部,掉电即消失KEK 包装 + 引擎隔离更换即 crypto erase,数据不可恢复
包装后的 MEKMEK 的密文形态介质保留区KEK与 KEK 一同丢失则数据不可读
KEK / 凭据认证凭据派生的包装密钥派生过程在盘内完成凭据校验机制更换只影响解锁,不动数据
锁定范围密钥全局与次级范围各自的密钥同 MEK 机制各自范围的凭据范围级 crypto erase
易错点:把凭据当密钥、把范围当分区

两个高频混淆。其一,口令不是密钥——口令(凭据)的作用是解包 MEK,真正加密数据的从来是 MEK;口令强度弱,攻击者可以暴力尝试认证,但介质上仍只有密文。其二,锁定范围不是文件系统分区——范围是盘内的密钥与锁定策略边界,划分在块设备层,与文件系统分层没有对应关系;把「想给不同目录不同密钥」的期望直接压给锁定范围,通常落空——那是文件系统层或上层卷管理的事,见 9.3。

4.3 锁定与解锁流程

SED 的锁定状态机可以压缩成五步:上电时内存无密钥、介质全密文;引擎随即进入初始锁定,以一个易失的随机 MEK 加密所有读写(此时盘「能写但读不回」);主机提交凭据,盘内校验;校验通过,解包真正的 MEK 送进引擎;之后读写透明执行,介质永远只见密文。认证失败的路径同样重要:维持锁定、不解包——失败多少次触发什么策略(延迟、锁死),取决于盘的实现与配置。

Opal 锁定与解锁流程:默认锁定,认证通过才解包 MEK,失败维持锁定上电内存无钥 介质全密文初始锁定引擎以随机 MEK 加密主机认证提交凭据 盘内校验解锁解包 MEK 进引擎透明读写介质永远只见密文凭据无效认证失败维持锁定 不解包锁定态 · 主机看到什么读写被拒或返回密文取决于锁定范围配置未解锁的盘不可读不要对其做强制写入认证 · 凭据从哪来管理员与用户凭据分开管理员管全局与策略用户只管自己的范围校验在盘内 口令不落介质解锁 · 范围可分层全局范围与次级范围可各自独立配置解锁只解包对应密钥粒度以 Opal 为准设计要点:解锁状态绑定会话而非长期粘死——掉电即回到锁定态,这是 SED 在掉电瞬间自动回到受保护状态的根源锁定范围、会话行为与凭据策略以 TCG Opal 规范与盘固件实现为准
图 9 · Opal 锁定与解锁流程

第 4 章图 9 的主线是五步链,红色分支是认证失败路径。初始锁定那一步最值得琢磨:盘上电后立刻用一个内存里的随机数加密一切,这个设计的含义是——即使攻击者在盘解锁前拆机直读,得到的也是被「一次性密钥」加密的数据;而掉电后这个随机 MEK 消失,介质上那部分「锁定期间写入」的数据若没有对应的包装密钥记录,同样不可恢复。解锁行为绑定会话而非长期粘死,掉电即回到锁定态——这是 SED「掉电瞬间自动回到受保护状态」的机制根源,也是它比主机软件加密更适合流转场景的原因。

要素说明设计要拍板的点
初始锁定上电即以易失随机 MEK 加密读写确认锁定期间写入的数据在掉电后的可恢复策略
管理员凭据管理全局范围、用户与策略管理员凭据的托管与恢复流程(5.4)
用户凭据解锁自己范围内的数据是否启用多用户、范围怎么划
解锁会话解锁状态绑定会话,掉电即锁定重启频率与业务连续性的平衡
引导前认证主机启动早期完成认证的机制(PBA)需要无键盘自动解锁时评估替代方案与风险
失败策略认证失败的延迟、尝试上限与锁死按攻击者模型配置,宁严勿松
自动解锁 = 把钥匙插在锁上

很多产品为了「无人值守开机」配置自动解锁:凭据存进主机侧某处,开机自动提交。这等于把 SED 的密钥边界从盘内退回到主机侧——攻击者拿到整机,凭据就跟着走了,SED 的架构优势全部让渡。不是说不能用自动解锁,而是要清楚代价并补齐对策:凭据存哪(6.3 的安全存储区)、绑定什么(绑定特定主机状态的派生,而不是明文存储)、攻击者拆盘不拆机时还防不防(防——拆盘单独读仍要凭据)。把这条边界写进方案,评审时才有得谈。

4.4 加密密钥的掉电行为

SED 的安全叙事有一半建立在掉电上,值得单独讲透。运行时:明文 MEK 在引擎与盘内易失内存中;包装后的 MEK 在介质保留区;数据在介质上是密文。掉电瞬间:易失内存清零,明文 MEK 消失——介质上只有密文与包装密钥,没有任何一条路径能直接得到明文。再次上电:回到初始锁定态,等凭据、等解锁。整个循环里,安全状态是「默认态」,解锁是「临时态」——这个方向性是 SED 与很多主机侧方案的本质区别,后者的常见默认态恰恰是「已解锁」。

掉电行为的另一面是数据完整性:掉电可能打断一次写入,介质上留下不完整的密文;SED 解决的是机密性,掉电一致性要靠介质自身的掉电保护与上层日志机制(与加密无关的常规设计)。把两件事混在一起——期待加密顺带解决掉电损坏——是常见误会,评审时要把「掉电后数据是否一致」与「掉电后数据是否保密」分开问。

场景明文 MEK 状态介质上的数据结果
正常运行在引擎内,受隔离保护密文透明读写,介质不可读出明文
掉电瞬间易失内存清零,消失密文(可能含未完成写入)自动回到锁定态
掉电后拆盘直读不存在密文 + 包装后的 MEK无凭据不可读(第 1 章 L2)
再次上电尚未解包密文等认证,默认锁定
重新初始化 MEK新密钥生成旧密文成为不可解的噪声crypto erase,数据即时销毁
「锁定期间写入」的数据要单独交代

初始锁定阶段引擎用随机 MEK 加密写入的数据,掉电后该随机密钥消失——这部分数据在下次解锁后也不可读。这不是缺陷,是特性:锁定期间本就不该有合法业务写入。但工程上要防两种意外:其一,业务固件没等解锁就开写,写进去的数据静默丢失;其二,把锁定期间的写入误当成缓存数据指望掉电恢复。对策是流程性的:解锁完成前,上层存储栈不得发起业务写入——把这一条写进启动顺序,并与第 7 章的启动链配合(解锁由已验证的固件发起)。

4.5 SED 与主机加密的取舍

SED 不是处处优于主机加密的默认答案,取舍集中在三件事。其一,密钥主权的归属:SED 的密钥在盘内,主机侧拿不到明文 MEK——安全上更好,但也意味着密钥策略(轮换、托管、审计)都要通过盘的接口做,定制空间受限于固件;主机加密的密钥在自己手里,自由度高,但密钥管理的全部成本(第 5、6 章)都要自己担。其二,威胁模型的侧重:防拆盘、流转、报废,SED 天然占优;防主机侧运行时攻击(恶意软件在解锁后读明文),两者同样无解——解锁状态下的明文在主机内存里,这是所有静态加密共同的边界(第 1 章 1.3)。其三,供应链与合规:SED 把加密能力下沉到器件,合规叙事里「介质加密」一栏可以直接引用盘的认证;主机加密则要自己组织证据。

核对项问什么判据
Opal 版本与功能集支持哪个版本、哪些可选功能与方案需求逐项对,缺的功能走主机侧补
范围划分能力全局与次级范围数量与策略自由度覆盖产品的数据分级需求
认证接口凭据提交方式、引导前认证的支持形态与产品启动流程兼容;自动解锁的代价可接受
crypto erase 支持是否提供标准的密钥重置接口退役与净化流程可用(6.5)
吞吐与延迟加密开启后的小 IO 口径表现按 3.4 的口径实测,加密段不是最慢段
器件认证状态盘本身有无安全认证(第 11 章)有正式认证加分,没有则要补自证材料
第 4 章的三个可带走判断

一、SED 的核心优势是密钥不出盘——三条经典失效模式被结构性消灭,密钥管理的成本从主机侧消失。二、两级密钥结构是理解一切行为的钥匙——改凭据不动数据(换 KEK)、换 MEK 即销毁(crypto erase),两级分离换来两种独立的能力。三、掉电默认锁定是安全上的「免费午餐」,也是流程上的硬约束——解锁前不许业务写入、自动解锁要付出边界回退的代价。选不选 SED 的最终收敛在第 9 章三选一,那里会把本章与第 3 章的结论放在一起决策。