Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
tird — 隐写存储与文件加密工具 | Kitploit
工具/GitHubGitHub/hakavlad/tird
加密/解密工具取证分析隐写术数据恢复密码学隐私保护
GitHubhakavlad/tird

tird

隐写存储与文件加密工具

查看仓库
22263个月前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

🏠 首页    📑 规范    📜 手册页    📄 输入选项    📖 教程    ❓ 常见问题    📥 安装


Logo: random data visualization

tird & tirdFS

Releases PyPI

tird /tɪrd/ (“this is random data” 的缩写) 是一种文件加密工具,它最小化元数据并隐藏加密数据。

使用 tird,你可以:

  1. 创建填充随机数据的文件,用作容器或密钥文件。
  2. 用随机数据覆写块设备和常规文件的内容,以准备容器或销毁残留数据。
  3. 使用密钥文件和口令加密文件内容及注释。加密数据格式(cryptoblob)是一个填充均匀随机数据块(PURB):它看起来像随机数据,且大小具有随机性。这减少了来自文件格式和长度的元数据泄露,并允许将 cryptoblob 隐藏在随机数据中。
  4. 在容器文件和块设备内创建隐写(隐藏、不可检测)的用户驱动文件系统(tirdFS)。与 VeraCrypt 和 Shufflecake 不同,tirdFS 容器不包含头部;用户指定容器内数据的位置,并负责保持这些位置相互分离。文件或块设备中任何看起来随机的区域都可以用作容器。
  5. 使用时间锁加密防止快速访问解密后的数据。

tird 提供内置的可否认性,即使在容器外部存储加密文件时也是如此。它还帮助抵御胁迫下的密钥泄露攻击(橡胶软管密码分析、xkcd 538)。

[!WARNING] 在使用 tird 之前,请阅读“警告”一节。安全性不仅取决于工具,还取决于你的行为:安全的密钥存储、在安全环境中操作,以及避免使用真实数据进入调试模式。

格式稳定化和正式规范计划在 v1.0.0 中实现。

目标

  1. 文件保护: 确保对单个文件的保护,包括:
    • 使用经过认证的对称加密确保机密性和完整性。
    • 最小化元数据泄露,包括隐藏加密数据的存在。
    • 防止或抵御胁迫攻击。
  2. 稳定格式: 为长期存储维护稳定的加密数据格式,不追求密码敏捷性。
  3. 简洁性: 优先考虑简洁性,避免功能膨胀;拒绝实现与主要安全目标无直接关系的功能。

功能

  • PURB 格式加密数据块: 大小随机且内容均匀随机;元数据受限(仅泄露总大小——无头部、类型或明文线索)。
  • 填充并加密的注释: 不包含任何关于内容的明文线索。
  • 隐藏数据嵌入(可选): 将 cryptoblob 隐藏在随机/加密容器中,以实现可否认性。
  • 时间锁加密(可选): 基于 PoW 的慢速离线密钥派生,以延迟解密(反胁迫)。
  • 健壮的身份验证加密: 完全承诺、量子安全的 ChaCha20-BLAKE2b AEAD。
  • 强密钥拉伸: Argon2id(libsodium “sensitive” 配置文件)—— 1 GiB 内存、1 车道、4 次遍历(默认且最低)。
  • 任意密钥材料: 从口令、文件、块设备或目录派生密钥——顺序无关紧要。
  • 基于提示符的 CLI: 直观且交互式,无需记忆参数。
  • [TODO] 稳定、有文档的格式: 计划用于长期归档和互操作性。

用法

你无需记住命令行选项即可使用 tird。该工具采用基于提示符的 CLI:只需启动它,选择一个菜单选项,然后回答随后出现的问题即可。``` $ tird

root@kitploit:~
                   MENU
———————————————————————————————————————————
0. Exit              1. Info & Warnings
2. Encrypt           3. Decrypt
4. Embed             5. Extract
6. Encrypt & Embed   7. Extract & Decrypt
8. Create w/ Random  9. Overwrite w/ Random
———————————————————————————————————————————

A0. SELECT AN OPTION [0-9]:

root@kitploit:~
## 输入选项

共有 4 组输入选项:A (动作), D (数据), K (密钥), P (继续)。为便于描述,对它们进行了编号。```
+——————————————————————+————————————————————————+
| A0. SELECT AN OPTION | A. Select an action    |
+——————————————————————+————————————————————————+
| D1. INPUT FILE PATH  |                        |
| D2. COMMENTS         | D. Enter data,         |
| D3. OUTPUT FILE PATH |    data location,      |
| D4. OUTPUT FILE SIZE |    data size           |
| D5. START POSITION   |                        |
| D6. END POSITION     |                        |
+——————————————————————+————————————————————————+
| K1. KEYFILE PATH     | K. Enter values        |
| K2. PASSPHRASE       |    related to          |
| K3. TIME COST        |    key derivation      |
+——————————————————————+————————————————————————+
| P0. PROCEED?         | P. Confirm to continue |
+——————————————————————+————————————————————————+

A detailed description of these options with examples can be found here.

载荷

在创建 cryptoblob 期间将被加密的载荷由以下部分组成:

  • 单个文件的内容(可选): 普通文件或块设备(整个磁盘/分区)。如果省略,则加密一个空文件载荷。
  • 注释(可选): 任意 UTF‑8 字符串,最大 1 KiB。默认情况下,使用输入文件名。解密后会显示解密后的注释。

在 UI 中指定载荷的方式如下:``` D1. FILE TO ENCRYPT (OPT): files.zip I: path: 'files.zip'; size: 2,824,230,648 B (2.6 GiB) D2. COMMENTS (DEFAULT='files.zip'): The X-Files, zip (секретные материалы) I: comments will be shown as ['The X-Files, zip (секретные материалы)']

root@kitploit:~
## 输入密钥材料

`tird` 提供使用密钥文件内容和口令来派生一次性密钥的选项。

- **密钥文件(可选):** 零个、一个或多个密钥文件路径;输入顺序无关紧要。密钥文件路径可以是:
  - 一个<ins>常规文件</ins>。密钥文件的内容将被哈希,其摘要将用于进一步的密钥拉伸和密钥派生。
  - 一个<ins>块设备</ins>。与常规密钥文件处理方式相同:内容将被哈希。
  - 一个<ins>目录</ins>。目录中的所有文件将被哈希并用作密钥文件。
- **口令(可选):** 经过 Unicode [规范化](https://www.unicode.org/reports/tr15/)(格式 C)后最多 2048 字节;可以省略。

在用户界面中指定 IKM 的方式如下:```
K1. KEYFILE PATH (OPT): key 
    I: path: 'key'; size: 32 B
    I: reading and hashing contents of 'key'
    I: keyfile accepted
K1. KEYFILE PATH (OPT): 
K2. PASSPHRASE (OPT): 
K2. CONFIRM PASSPHRASE: 
    I: passphrase accepted

加密数据格式

  • PURB 格式:
    • 数据看起来是随机的,且不包含任何可识别的头部;在缺少相应密钥的情况下,无法将其与随机数据区分开来。这一特性使得加密数据块可以隐藏在其他随机数据之中。
    • 随机化大小:填充长度在未填充加密数据块大小的 0% 到 25% 之间均匀随机选取(相当于最终加密数据块大小的最高 20%)。
  • 注释在加密前会被填充(或截断)到固定的 1 KiB 大小,从而完全隐藏其原始长度。
  • 双侧应用盐:覆盖加密数据块的起始或结尾部分(或存储不完整的加密数据块)将使成功解密变得不可能。
 显示加密数据块方案``` +————————————————————————————————————————————————————————+ | CSPRNG output: | | Salt for key stretching used with Argon2 (16 B) | +————————————————————————————————————————————————————————+ | ChaCha20 output: | | Encrypted pad_ikm (8 B) | +————————————————————————————————————————————————————————+ | CSPRNG/BLAKE2 output: | | Randomized padding (0-25% of the unpadded size) | | + MAC tag (32 B) | +————————————————————————————————————————————————————————+ | ChaCha20/BLAKE2 output: | | Encrypted payload file contents + MAC tags (0+ B) | +————————————————————————————————————————————————————————+ | ChaCha20/BLAKE2 output: | | Encrypted padded comments (1 KiB) + MAC tag (32 B) | +————————————————————————————————————————————————————————+ | CSPRNG output: | | Salt for pre‑hashing IKM used with BLAKE2 (16 B) | +————————————————————————————————————————————————————————+ ```

有关更多详细信息,请参阅规范。

低可观测性与元数据最小化

虽然加密消息的内容受到保护,但其大小、来源、目的地……却没有。数据被隐藏,元数据却被展示。有时,你的敌人仅凭这些就能揭开你的秘密。

— Loup Vaillant

我们基于元数据杀人。

— Michael Hayden


对比
  • PURB 格式:
    • 加密文件看起来像随机数据。
    • 加密文件的大小是随机化的:不暴露有效载荷大小。
  • 注释是恒定填充的,不暴露其大小或存在。
  • 无法证明输入的密钥是错误的。
  • 基于提示的 CLI:不会通过 shell 历史泄露已使用的选项。
  • 输出文件路径由用户定义,默认与输入文件路径无关。
  • 可选:将加密数据隐藏在容器中。

tirdFS — 用户驱动的隐写文件系统

tird 采用了一种技术,其描述如下:

在加密数据或随机数据中隐藏数据。要隐藏的消息先被加密,然后用于覆盖更大的加密数据块或随机数据块的一部分(像一次性密码本这样不可破解的密码体制,在没有私钥的情况下生成的密文看起来完全随机)。

你可以加密文件,并将 cryptoblob 嵌入到容器中的任意起始位置。写入 cryptoblob 后,你需要记住它在容器中的位置(起始和结束位置),后续将用于提取 cryptoblob。通过这种方式,你可以在容器内创建 tirdFS — 隐藏的、无头部的、用户驱动的文件系统:

  • 它是隐藏的,因为无法区分容器中的随机数据与 cryptoblob 数据,也无法在不知道位置和密钥的情况下确定已写入 cryptoblob 的位置。
  • 它是无头部的,因为容器不包含任何头部;所有关于 cryptoblob 位置的数据都必须由用户单独存储。
  • cryptoblob 在容器中的起始位置是用户定义的,并且用户必须将起始和结束位置与容器分开存储。这就是为什么它被称为用户驱动的文件系统。

tirdFS 不是一个具有内部元数据结构的挂载文件系统。它是一个由独立放置的 cryptoblob 构建的用户管理的隐藏存储模型。

任何大于最小 cryptoblob 大小(1160 B)的文件、磁盘或分区都可以作为有效容器。cryptoblob 可以被嵌入到任何区域。

有效容器的示例包括:

  1. 特殊生成的包含随机数据的文件。
  2. 包含随机数据的磁盘区域。例如,你可以用随机数据覆盖磁盘,将其格式化为 FAT32 或 exFAT,然后使用磁盘的大部分区域,从开头留出几十 MB。除非你添加一些文件,否则磁盘看起来是空的。
  3. LUKS 加密卷。
  4. VeraCrypt 容器,即使是那些已经包含隐藏卷的容器。

容器结构示例:``` +—————————+—————————————+ <— Position 0 of the container | | | | | Random data | | | | | +—————————————+ <— Cryptoblob1 start position | Header- | | | less | Cryptoblob1 | | | | | Layer +—————————————+ <— Cryptoblob1 end position | | Random data | | Cake +—————————————+ <— Cryptoblob2 start position | | | | | Cryptoblob2 | | | | | +—————————————+ <— Cryptoblob2 end position | | Random data | +—————————+—————————————+

root@kitploit:~
**用户管理的头部**

独立的用户管理的 `tirdFS` 文本头部可能如下所示:```
[100000000:100345765] secret_video.mp4
[100345765:234765345] various_secrets.zip
[12654876456:14765345098] Epstein_files_part1.zip

That is, it should typically contain the location of each cryptoblob in the container plus a brief comment. However, the user is free to determine how to store positions and what to include in such a header.

嵌入的可视化

下图直观地展示了区分一个随机数据条目与另一个随机数据条目有多么困难,以及将 cryptoblob 嵌入容器的过程。

 显示图片

具有随机数据的空容器: 容器

容器中嵌入一个 cryptoblob: 嵌入1

容器中嵌入两个 cryptoblob: 嵌入2

容器中嵌入三个 cryptoblob: 嵌入3

动画:嵌入可视化: GIF:嵌入可视化

存储和携带隐藏的加密数据

到处携带。这是你的权利。

— Kyle Rittenhouse

请看下面的截图。

截图

看起来这个 16 GB 卷中只包含一个 8.7 MiB 的文件。真的是这样吗?也许是的,也许不是。

文件系统告诉我们这里只有一个文件。但卷上真的只有一个文件吗?我们无法通过文件系统来确定这一点。事实上,数据可能位于文件系统之外,并且文件系统工具无法检测到。标记为空闲的 15.2 GiB 空间可能被一个隐藏的文件系统占用。这些“空闲”空间可能被隐藏的加密数据占用。

我们能否反驳这些数据的存在?可以,例如通过使用 binwalk 检查该空闲空间的熵水平。低熵表明可能不存在隐藏数据。高熵 本身 并 不 能证明存在加密的隐藏数据。高熵区域既可能只是残余数据,也可能是隐藏的加密数据。

如果你有兴趣在可见文件系统之外隐藏数据,那么 tird 随时为你服务,为你的文件提供隐形斗篷。

时间锁加密

TLE 图片

时间锁加密(TLE)可用于防止攻击者在 IKM 泄露(例如在用户遭到胁迫的情况下)时快速访问明文。在我们的实现中,它实际上是一种基于 PoW 的时间锁密钥派生。“Time cost”输入选项指定 Argon2 的迭代次数。如果你指定足够高的迭代次数,执行它们将花费大量时间。然而,攻击者在类似的硬件上也需要相同的时间。Argon2 的执行无法通过并行化加速,因此预计攻击者所花费的时间与防御者所花费的时间大致相同。

设置所需的 TIME COST 值:``` K3. TIME COST (DEFAULT=4): 1000000 I: time cost: 1,000,000 W: decryption will require the same "TIME COST" value!

root@kitploit:~
**可信的 TLE:** 攻击者不知道时间成本的实际值,因此你可以合理地少报迭代轮数。在攻击者尝试使用指定的时间成本值解密密文数据块之前,他们无法反驳你的说法。

## 命令行选项

`tird` 在正常使用中不需要任何命令行选项。```
$ tird --help
tird v0.30.0
        A tool for encrypting files and hiding encrypted data.
        Homepage: https://github.com/hakavlad/tird

Usage:
    tird [--unsafe-debug] [--unsafe-decrypt]

    Start without options for normal usage.

Options:
    --help            print this help message and exit
    --unsafe-debug    enable unsafe debug mode
    --unsafe-decrypt  release plaintext even if MAC verification
                      failed (dangerous)

Examples:
    $ tird
    $ tird --unsafe-debug

不安全的调试模式

[!WARNING] 调试模式不适用于生产环境!

使用 --unsafe-debug 选项启动 tird,可以在程序运行时查看其内部运作情况。

启用调试模式还会显示:

  • 文件操作:
    • 文件描述符的打开与关闭。
    • 已打开文件的真实路径。
    • 文件指针的移动。
  • 与加密操作相关的字节串:盐值、口令、摘要、密钥、随机数和标签。
  • 其他一些信息,包括各种大小。

不安全的解密模式

[!WARNING] 在此模式下,返回的明文可能已被攻击者修改或替换!

在不安全的解密模式下,即使身份验证失败,tird 也会释放明文。仅当您优先考虑可用性而非完整性,且无法在正常模式下成功解密加密数据块时,才使用此模式。

权衡与限制

  • tird 不支持:
    • 公钥加密。
    • 文件压缩。
    • ASCII 装甲输出。
    • 里德–所罗门纠错。
    • 将输出拆分为多个块。
    • 使用标准流处理文件(不适用于自动化脚本)。
    • 在 MS Windows 上对块设备进行底层读写。因此,这些设备不能用作密钥文件,不能被覆盖,也不能被加密或嵌入。
  • tird 不提供:
    • 图形用户界面。
    • 密码生成器。
  • tird 无法在一次操作中处理(加密/嵌入)多个文件。不支持对目录和多个文件进行加密。
  • tird 不会清理文件系统元数据(atime、mtime、ctime)。
  • tird 的加密速度不是很高(在现代化硬件上的测试中最高可达 730 MiB/s)。

警告

加密可以提供帮助,但它无法让您免受误用、漏洞、社会工程攻击或物理威胁的侵害。

— Loup Vaillant

DANGER MINES
  • ⚠️ 作者没有密码学背景。
  • ⚠️ 代码没有自动化测试覆盖。
  • ⚠️ tird 尚未经过人类独立的安全审计。
  • ⚠️ tird 在受破坏的环境中无效;在这种情况下执行可能会导致灾难性的数据泄露。
  • ⚠️ 当使用简短且可预测的密钥时,tird 可能无法有效发挥作用。
  • ⚠️ tird 在使用后不会从内存中清除其敏感数据;程序退出后,密钥可能会残留在内存中。
  • ⚠️ 敏感数据可能会泄露到交换空间。
  • ⚠️ 文件系统时间戳未被清理——可能会泄露操作元数据。
  • ⚠️ tird 不会以常数时间对密钥文件和口令的摘要进行排序。
  • ⚠️ 覆盖文件内容并不能保证介质上的数据被安全销毁。
  • ⚠️ 您无法向攻击者证明您的随机数据不包含加密信息。
  • ⚠️ tird 保护的是数据而非用户;如果您受到怀疑,它无法防止酷刑。
  • ⚠️ 密钥派生消耗 1 GiB 内存,在低内存系统上可能会导致性能问题或崩溃。
  • ⚠️ 完整性/真实性优先于可用性——即使更改加密数据块的一个字节也会导致无法解密。
  • ⚠️ 开发尚未完成,可能存在向后兼容性问题。

要求

  • Python >= 3.9.2
  • cryptography >= 2.1(提供 HKDF 和快速的 ChaCha20 实现)
  • PyNaCl >= 1.2.0(提供 Argon2 和 BLAKE2 的快速实现)
  • colorama >= 0.4.6(仅限 Windows)

文档

  • 📜 tird(1) 手册页
  • 📑 规范
  • 📄 输入选项
  • 📖 教程/演示
  • ❓ FAQ/设计原理
  • 📥 安装

待办事项

改进文档。

反馈

欢迎在讨论板块提问、留下反馈或提出批评意见。

下载工具