
Steganografisches Speicher- & Dateiverschlüsselungstool

tird & tirdFStird /tɪrd/ (ein Akronym für „this is random data“) ist ein Dateiverschlüsselungstool, das Metadaten minimiert und verschlüsselte Daten verbirgt.
Mit tird können Sie:
tirdFS) in Containerdateien und Blockgeräten erstellen. Im Gegensatz zu VeraCrypt und Shufflecake enthalten tirdFS-Container keine Header; der Benutzer gibt die Datenpositionen im Container an und ist dafür verantwortlich, diese Positionen getrennt zu halten. Jede zufällig aussehende Region einer Datei oder eines Blockgeräts kann als Container verwendet werden.tird bietet eingebaute plausible Abstreitbarkeit, selbst wenn verschlüsselte Dateien außerhalb von Containern gespeichert werden. Es hilft auch, erzwungene Schlüsselpreisgabe-Angriffe abzuwehren (Gummischlauch-Kryptoanalyse, xkcd 538).
[!WARNING] Bevor Sie
tirdverwenden, lesen Sie bitte den Abschnitt „Warnungen“. Die Sicherheit hängt nicht nur vom Werkzeug ab, sondern auch von Ihren Handlungen: sichere Schlüsselspeicherung, Arbeiten in einer sicheren Umgebung und Vermeidung des Debug-Modus mit echten Daten.
Formatstabilisierung und eine formale Spezifikation sind für v1.0.0 geplant.
Sie müssen keine Befehlszeilenoptionen auswendig lernen, um tird zu verwenden. Dieses Tool verfügt über eine eingabeaufforderungsbasierte CLI: Starten Sie es einfach, wählen Sie eine Menüoption und beantworten Sie die folgenden Fragen.```
$ tird
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]:
## Eingabeoptionen
Es gibt 4 Gruppen von Eingabeoptionen: A (Action), D (Data), K (Keys), P (Proceed). Sie sind der einfacheren Beschreibung halber nummeriert.```
+——————————————————————+————————————————————————+
| 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 |
+——————————————————————+————————————————————————+
Eine detaillierte Beschreibung dieser Optionen mit Beispielen finden Sie hier.
Die Nutzlast, die während der Erstellung des Cryptoblobs verschlüsselt wird, besteht aus:
Die Angabe der Nutzlast in der Benutzeroberfläche sieht wie folgt aus:``` 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 (секретные материалы)']
## Eingabe-Schlüsselmaterial
`tird` bietet die Möglichkeit, die Inhalte von Schlüsseldateien und eine Passphrase zur Ableitung von Einmal-Schlüsseln zu verwenden.
- **Schlüsseldateien (optional):** Null, eine oder mehrere Schlüsseldateipfade; die Reihenfolge der Eingaben spielt keine Rolle. Ein Schlüsseldateipfad kann sein:
- Eine <ins>reguläre Datei</ins>. Der Inhalt der Schlüsseldatei wird gehasht, und der Digest wird für weiteres Key-Stretching und Schlüsselableitung verwendet.
- Ein <ins>Blockgerät</ins>. Wird wie eine reguläre Schlüsseldatei behandelt: Der Inhalt wird gehasht.
- Ein <ins>Verzeichnis</ins>. Alle Dateien im Verzeichnis werden gehasht und als Schlüsseldateien verwendet.
- **Passphrase (optional):** Bis zu 2048 Bytes nach Unicode-[Normalisierung](https://www.unicode.org/reports/tr15/) (Form C); kann weggelassen werden.
Die Angabe von IKM in der Benutzeroberfläche sieht wie folgt aus:```
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
Weitere Einzelheiten finden Sie in der Spezifikation.
Während der Inhalt einer verschlüsselten Nachricht geschützt ist, sind deren Größe, Herkunft, Zielort … nicht geschützt. Daten werden verborgen, Metadaten werden sichtbar. Manchmal reicht das aus, damit Ihr Feind Ihre Geheimnisse aufdecken kann.
Wir töten Menschen aufgrund von Metadaten.
![]() Vs. ![]() |
|---|
tirdFS — Benutzergesteuertes Steganografisches Dateisystemtird verwendet eine Technik, die wie folgt beschrieben wird:
Das Verbergen von Daten innerhalb von verschlüsselten Daten oder innerhalb von Zufallsdaten. Die zu verbergende Nachricht wird verschlüsselt und dann verwendet, um einen Teil eines viel größeren Blocks von verschlüsselten Daten oder eines Blocks von Zufallsdaten zu überschreiben (eine unknackbare Verschlüsselung wie das one-time pad erzeugt Chiffretexte, die ohne den privaten Schlüssel vollkommen zufällig aussehen).
Sie können Dateien verschlüsseln und Cryptoblobs in Container an beliebigen Positionen einbetten. Nach dem Schreiben des Cryptoblobs müssen Sie sich dessen Position im Container (Start- und Endposition) merken, die später zum Extrahieren der Cryptoblobs verwendet wird. Auf diese Weise können Sie tirdFS — ein verstecktes, headerloses, benutzergesteuertes Dateisystem — innerhalb eines Containers erstellen:
tirdFS ist kein gemountetes Dateisystem mit internen Metadatenstrukturen. Es ist ein benutzerverwaltetes verstecktes Speichermodell, das aus unabhängig platzierten Cryptoblobs besteht.
Jede Datei, Disk oder Partition, die größer ist als die minimale Cryptoblob-Größe (1160 B), kann ein gültiger Container sein. Cryptoblobs können in jeden Bereich eingebettet werden.
Beispiele für gültige Container sind:
Beispiel einer Containerstruktur:``` +—————————+—————————————+ <— 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 | +—————————+—————————————+
**Benutzerverwalteter Header**
Ein separater benutzerverwalteter `tirdFS`-Textheader könnte wie folgt aussehen:```
[100000000:100345765] secret_video.mp4
[100345765:234765345] various_secrets.zip
[12654876456:14765345098] Epstein_files_part1.zip
Das heißt, es sollte normalerweise den Ort jedes Kryptoblobs im Container sowie einen kurzen Kommentar enthalten. Der Benutzer kann jedoch selbst bestimmen, wie Positionen gespeichert werden und was in einen solchen Header aufgenommen wird.
Das folgende Bild veranschaulicht, wie schwierig es ist, einen zufälligen Daten-Eintrag von einem anderen zu unterscheiden, und den Prozess der Einbettung von Kryptoblobs in einen Container.
Leerer Container mit Zufallsdaten:

Ein im Container eingebetteter Kryptoblob:

Zwei im Container eingebettete Kryptoblobs:

Drei im Container eingebettete Kryptoblobs:

Animation: Visualisierung der Einbettung:

Überall hinfahren. Es ist dein Recht.
Bitte schauen Sie sich den folgenden Screenshot an.
Es sieht so aus, als ob dieser 16-GB-Volume nur eine einzige 8,7 MiB große Datei enthält. Ist das wirklich wahr? Vielleicht ja, vielleicht nein.
Das Dateisystem sagt uns, dass sich hier nur eine Datei befindet. Aber gibt es wirklich nur eine Datei auf dem Volume? Das können wir mit dem Dateisystem nicht feststellen. Tatsächlich können sich Daten außerhalb des Dateisystems befinden und für Dateisystem-Tools nicht erkennbar sein. Die 15,2 GiB freien Speicherplatzes könnten von einem versteckten Dateisystem belegt sein. Dieser „freie" Speicherplatz könnte mit versteckten verschlüsselten Daten gefüllt sein.
Können wir die Existenz dieser Daten widerlegen? Ja, zum Beispiel durch die Untersuchung des Entropie-Levels dieses freien Speicherplatzes mit binwalk. Eine niedrige Entropie deutet auf eine wahrscheinliche Abwesenheit versteckter Daten hin. Eine hohe Entropie beweist nicht von sich aus das Vorhandensein versteckter verschlüsselter Daten. Bereiche mit hoher Entropie können entweder nur Restdaten oder versteckte verschlüsselte Daten sein.
Wenn Sie daran interessiert sind, Daten außerhalb des sichtbaren Dateisystems zu verstecken, dann steht Ihnen tird zur Verfügung, um Ihren Dateien einen Tarnumhang zu verleihen.
Zeitverschlüsselung (Time-lock encryption, TLE) kann verwendet werden, um zu verhindern, dass ein Angreifer bei einer Kompromittierung des IKM (z. B. bei Nötigung des Benutzers) schnell auf Klartexte zugreifen kann. In unserer Implementierung handelt es sich eigentlich um eine PoW-basierte Zeitverriegelungs-Schlüsselableitung. Die Eingabeoption „Zeitkosten" gibt die Anzahl der Argon2-Durchläufe an. Wenn Sie eine ausreichend hohe Anzahl von Durchläufen angeben, wird deren Ausführung eine beträchtliche Zeit in Anspruch nehmen. Ein Angreifer wird jedoch auf ähnlicher Hardware die gleiche Zeit benötigen. Die Ausführung von Argon2 kann nicht durch Parallelisierung beschleunigt werden, daher ist zu erwarten, dass der Zeitaufwand eines Angreifers ungefähr dem des Verteidigers entspricht.
Diese TLE-Implementierung arbeitet offline, anders als tlock.
Legen Sie den gewünschten Wert für TIME COST fest:```
K3. TIME COST (DEFAULT=4): 1000000
I: time cost: 1,000,000
W: decryption will require the same "TIME COST" value!
**Plausible TLE:** Der Gegner kennt den tatsächlichen Wert des Zeitaufwands nicht, sodass Sie die Anzahl der Durchläufe plausibel falsch darstellen können. Der Gegner kann Ihre Behauptung nicht widerlegen, bis er versucht, den Cryptoblob mit dem angegebenen Zeitaufwandswert zu entschlüsseln.
## Befehlszeilenoptionen
`tird` erfordert für den normalen Gebrauch keine Befehlszeilenoptionen.```
$ 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] Der Debug-Modus ist nicht für den Einsatz in der Produktion vorgesehen!
Starten Sie tird mit der Option --unsafe-debug, um während der Programmausführung einen Blick unter die Haube zu werfen.
Das Aktivieren des Debug-Modus zeigt zusätzlich:
[!WARNING] In diesem Modus kann der zurückgegebene Klartext von einem Angreifer modifiziert oder ersetzt worden sein!
Im unsicheren Entschlüsselungsmodus gibt tird Klartext auch dann frei, wenn die Authentifizierung fehlschlägt. Nur verwenden, wenn Sie Verfügbarkeit über Integrität priorisieren, wenn Sie einen Cryptoblob im normalen Modus nicht erfolgreich entschlüsseln können.
tird unterstützt nicht:
tird bietet nicht:
tird kann (verschlüsseln/einbetten) nicht mehr als eine Datei in einem Durchlauf verarbeiten. Die Verschlüsselung von Verzeichnissen und mehreren Dateien wird nicht unterstützt.tird bereinigt keine Dateisystem-Metadaten (atime, mtime, ctime).tirds Verschlüsselungsgeschwindigkeit ist nicht sehr hoch (bis zu 730 MiB/s in meinen Tests auf moderner Hardware).Kryptografie kann helfen, aber sie wird Sie nicht vor Missbrauch, Schwachstellen, Social Engineering oder physischen Bedrohungen schützen.
tird wurde keiner unabhängigen Sicherheitsprüfung durch Menschen unterzogen.tird ist in einer kompromittierten Umgebung wirkungslos; die Ausführung in solchen Fällen kann katastrophale Datenlecks verursachen.tird ist wahrscheinlich unwirksam bei Verwendung kurzer und vorhersagbarer Schlüssel.tird löscht seine sensiblen Daten nach der Verwendung nicht aus dem Speicher; Schlüssel können nach Programmende im Speicher verbleiben.tird sortiert Digests von Keyfiles und Passphrasen nicht in konstanter Zeit.tird schützt Daten, nicht den Benutzer; es kann Folter nicht verhindern, wenn Sie unter Verdacht stehen.HKDF und eine schnelle ChaCha20-Implementierung)Argon2 und BLAKE2)Verbesserung der Dokumentation.
Bitte stellen Sie Fragen, hinterlassen Sie Feedback oder geben Sie Kritik im Bereich Discussions.