XTS 是什么
AES-XTS 是为块存储设计的可调模式,来源是 IEEE 1619 与 NIST SP 800-38E。它的关键设计是把数据位置(扇区号)作为 tweak 参与运算:同一份明文写在不同扇区会得到不同密文,而同一扇区反复读写的结果保持稳定,正好契合磁盘按固定块随机读写的特性。LUKS、BitLocker 等全盘加密方案普遍采用它作为默认算法。
基本信息
| 标准 | NIST SP 800-38E 与 IEEE 1619 |
|---|---|
| tweak | 扇区号,与 I/O 位置相关 |
| 密钥 | 两把 AES 密钥拼接,512 位表示 AES-256-XTS |
| 密钥使用 | 每个数据单元共用同一对密钥,靠 tweak 区分位置 |
| 完整性 | 不提供,需由上层校验机制负责 |
| 适用边界 | 块设备与全盘加密;不适合需要去重的对象存储 |
LUKS 使用 AES-XTS
LUKS 使用 AES-XTS
# 512 位密钥长度表示 AES-256-XTS(两把 256 位密钥)
cryptsetup luksFormat --cipher aes-xts-plain64 --key-size 512 --hash sha256 /dev/sdb
cryptsetup open /dev/sdb cryptdata # 映射为 /dev/mapper/cryptdata
cryptsetup status cryptdata # 确认 cipher 与 key size 实际生效
# 查看卷头信息与所用算法
cryptsetup luksDump /dev/sdb常见疑问
| 疑问 | 结论 | 说明 |
|---|---|---|
| 密文为何与明文等长 | XTS 是分组模式,不追加认证标签 | 因此不提供完整性保护 |
| 同扇区重复写会怎样 | 产生相同密文 | 这是设计目标,便于原地更新 |
| 能用于文件级加密吗 | 不建议 | 缺少位置语义,tweak 的设计优势无从发挥 |
| 能防篡改吗 | 不能 | 需上层校验或 dm-verity 之类机制 |
| 适合去重存储吗 | 不适合 | 相同明文跨位置密文不同,去重无从下手 |
XTS 的设计目标是让同一扇区读写结果稳定、跨扇区密文随机;它不防篡改,数据完整性要靠上层文件系统或校验机制。
密钥长度的对应关系容易记错:--key-size 512 对应 AES-256-XTS,实现上拆成两把 256 位密钥分别参与数据与 tweak 运算;256 位参数对应的是 AES-128-XTS。
更换口令不等于重新加密数据:LUKS 头可以单独换口令或调整密钥槽;只有确认主密钥泄露时,才需要执行全量重新加密流程。