SecurityRonin/luks-forensic
GitHub: SecurityRonin/luks-forensic
纯 Rust 实现的 LUKS1/LUKS2 加密容器取证解析与解密库,无需 cryptsetup 依赖即可解锁并读取明文数据。
Stars: 0 | Forks: 0
# luks-forensic
[](https://crates.io/crates/luks-core)
[](https://crates.io/crates/luks-forensic)
[](https://docs.rs/luks-core)
[](https://www.rust-lang.org)
[](LICENSE)
[](https://github.com/sponsors/h4x0r)
[](https://github.com/SecurityRonin/luks-forensic/actions/workflows/ci.yml)
[](docs/validation.md)
[](https://github.com/rust-secure-code/safety-dance)
[](https://rustsec.org)
**通过密码解锁 LUKS 容器并读取明文 —— 一个从零开始构建的纯 Rust LUKS1/LUKS2 解密器,已在真实容器上与 `cryptsetup` 进行了逐扇区的验证。**
无需 `cryptsetup` 的 C 依赖,无需 `dm-crypt`,无需挂载,无需 root:这是一个解析磁盘头、通过 PBKDF2 或 Argon2 从密码派生主密钥,并使用 AES-XTS 解密扇区的单一库。
```
use std::fs::File;
use luks::LuksVolume;
// Auto-detects LUKS1 vs LUKS2 from the header.
let mut vol = LuksVolume::unlock_with_passphrase(File::open("container.luks")?, b"luks-TEST")?;
let mut first = [0u8; 512];
vol.read_at(0, &mut first)?; // decrypted payload sector 0
# Ok::<(), Box>(())
```
## 适用范围
此版本解析 **LUKS1** 分区头以及 **LUKS2** 的二进制文件头 + JSON 元数据,并支持通过密码使用 `aes-xts-plain64` 密码(AES-128/256-XTS)解锁两者 —— 这也是 `cryptsetup` 的默认设置。LUKS1 密钥槽使用 **PBKDF2** 派生;LUKS2 密钥槽使用 **PBKDF2 或 Argon2i/Argon2id** 派生。两种格式版本均已通过 `cryptsetup` 2.7.0 预言机验证:
| 版本 | 密码 (Cipher) | KDF | 预言机 (层级) |
|---|---|---|---|
| LUKS1 | `aes-xts-plain64` (AES-256-XTS) | PBKDF2-sha256 | 自行生成的 `luks1.img` 对比 `cryptsetup` (层级 2) |
| LUKS2 | `aes-xts-plain64`, 4096-B 扇区 | Argon2id | 自行生成的 `luks2.img` 对比 `cryptsetup` (层级 2) |
不支持的密码/模式/哈希将被**识别并附带命名错误拒绝**(直接显示导致问题的原始值)—— 在设计上绝不会对其进行解密。详见 [`docs/RESEARCH.md`](docs/RESEARCH.md)。
## 双 crate 结构划分
遵循读取器/分析器分离的标准模式:
| Crate | 角色 | 输出 |
|---|---|---|
| **`luks-core`** | 读取器 / 解密器 (`pbkdf2` · `argon2` · `aes` · `xts-mode` · `hmac` · `sha2`) | 明文 `Read + Seek` 视图 + 类型化头部元数据 |
| **`luks-forensic`** | 针对头部的异常分析器 | 严重性分级发现 |
### 分析器发现项
| 代码 | 严重性 | 含义 |
|---|---|---|
| `LUKS-WEAK-CIPHER-MODE` | 低 | 密码模式为 `cbc`/`ecb`(比 `xts-plain64` 弱) |
| `LUKS-WEAK-KDF-HASH` | 低 | KDF/AF 哈希为 `sha1` |
| `LUKS-LOW-KDF-ITERATIONS` | 中 | 活动密钥槽的 PBKDF2 迭代次数 < 1000(存在暴力破解风险) |
| `LUKS-KEYSLOT-INVENTORY` | 信息 | 活动密钥槽数量(共 8 个) |
发现项**仅作为观察结果,而非最终结论** —— 需由检查人员自行得出结论。
## 信任但验证
- **所有加密原语均为经过审计的 RustCrypto crate**(`pbkdf2`、`argon2`、`aes`、`xts-mode`、`hmac`、`sha1`、`sha2`)—— 绝无手工编写的内容。唯一定制化的例程是 LUKS 的**反取证合并**(TKS1 分离器),且**仅**通过在真实容器上与独立的 `cryptsetup` 预言机进行对比验证,绝不依赖自编写的往返测试。
- **无 panic 且经过边界检查**的不受信任容器解析;在生产代码中禁止使用 `unwrap`/`expect`(`#![forbid(unsafe_code)]`);LUKS1/LUKS2 头解析器、AF 合并以及完整的解锁管道均已经过模糊测试。
- **层级 2 验证**:在 LUKS1 和 LUKS2 中,解密后的扇区与 `cryptsetup` 的输出逐字节匹配 —— 详见 [`docs/validation.md`](docs/validation.md)。
[隐私政策](https://securityronin.github.io/luks-forensic/privacy/) · [服务条款](https://securityronin.github.io/luks-forensic/terms/) · © 2026 Security Ronin Ltd
标签:LUKS, Rust, 可视化界面, 密码学, 开发库, 手动系统调用, 数字取证, 磁盘加密, 网络流量审计, 自动化脚本, 通知系统