本页目录
Crypto API 与存储加密
覆盖: Crypto API → dm-crypt/LUKS2 → fscrypt → WireGuard → kTLS → 硬件加速 → TPM 内核版本: 2.6 ~ 6.x
Crypto API: 统一加密框架
// crypto/ — 内核中所有加密操作的统一接口
// 支持同步和异步 (硬件加速器)
// 操作类:
;
;
;
;
dm-crypt / LUKS2
dm-crypt: 块设备级透明加密 (在 bio 和块设备之间插入加密层)
LUKS2: dm-crypt 的密钥管理和元数据格式
LUKS header (前 16MB):
- 加密算法: aes-xts-plain64, aes-cbc-essiv, ...
- key slots (最多 8): 每 slot 含加密的主密钥 (由 passphrase/PKCS#11/tpm2 解锁)
- PBKDF: argon2id (LUKS2, 抗 GPU/ASIC 攻击) 或 PBKDF2 (LUKS1)
数据路径:
bio → scatter-gather list → crypto_skcipher → encrypt/decrypt per sector
→ 提交到下层块设备
加密模式: XTS (推荐), CBC-ESSIV (兼容)
fscrypt: 文件系统原生加密
// fs/crypto/
// 与 dm-crypt 的区别: 不是块设备级, 而是 per-file/per-directory
// 每个文件用自己的密钥 (由用户 master key + per-file nonce 派生)
// → 不同文件不同密钥 → 即使文件系统被 offline 读取, 也无法跨文件关联
// 支持: ext4, f2fs, UBIFS (Android)
// 使用: Android adoptable storage, Chrome OS user data
// ioctl 接口:
FS_IOC_SET_ENCRYPTION_POLICY // 设目录的加密策略
FS_IOC_GET_ENCRYPTION_PWSALT // 获取 per-directory salt
WireGuard
// drivers/net/wireguard/ (5.6+ 合入主线)
// 协议: Noise + ChaCha20-Poly1305 + Curve25519
// ~4000 行代码 → 安全审计可行
// 关键设计:
// - 无连接: 收到有效包 → 自动建立会话
// - 密钥轮换: Noise IK 握手 → 每 2 分钟轮换对称密钥
// - 抗量子: 不重要 (Curve25519 是目前最优)
// 接口: 标准 network device + rtnetlink
wg-quick up wg0 → /etc/wireguard/wg0.conf
kTLS (Kernel TLS, 4.13+)
// net/tls/
// 将 TLS 记录层移到内核 → 用户态 sendfile 等零拷贝操作可用 TLS
// 场景: HTTPS 代理 (nginx/haproxy), 文件服务器
;
// → 内核接管对称加密 → sendfile() 直接加密发送
// 支持: TLS 1.2 (AES-GCM), TLS 1.3 (AES-GCM, ChaCha20-Poly1305)
// 硬件卸载: 网卡支持 kTLS offload (Mellanox, Intel)
硬件加速
x86 AES-NI: AES 指令集 → ~10x 加密速度
x86 CLMUL: 无进位乘法 (GCM 的 GHASH)
x86 SHA-NI: SHA-1/SHA-256 硬件加速
ARMv8 CE: Crypto Extensions (AES, SHA, GHASH)
内核自动选择: 有硬件加速器 → 使用加速 tfm → 软件 fallback
TPM: 可信平台模块
// drivers/char/tpm/
// TPM 2.0 (TPM 1.2 已废弃) → 安全密钥存储, 引导链测量, 远程认证
// 与 LUKS 集成:
// TPM 存储 LUKS key → 仅在已知良性 PCR 值时释放 (systemd-cryptenroll)
// 被篡改的内核 → PCR 值变化 → TPM 拒绝释放密钥 → 磁盘不可读
参考
- 源码:
crypto/,drivers/md/dm-crypt.c,fs/crypto/,drivers/net/wireguard/,net/tls/,drivers/char/tpm/ - 内核文档:
Documentation/crypto/,Documentation/filesystems/fscrypt.rst
关键词: Crypto API, dm-crypt, LUKS2, fscrypt, WireGuard, kTLS, AES-NI, TPM