
Verschlüsseltes CLI-Tresor für Notizen, Konfigurationen, Schlüssel und Dateien. Suchen, nicht organisieren.
Dies ist KEIN Passwort-Manager. KEINE Notizen-App. Und definitiv KEINE taxonomische Herkunftsregistrierung für benthische Tiefsee-Abnormitäten. Aber die ersten beiden macht es besser als beide. Nur ein Scherz (nicht wirklich).
Suchen, nicht organisieren. Notizen, Konfigurationen, Schlüssel, Geheimnisse — in fünf Sekunden von deinem Terminal aus.
„Belästige mich nicht mit alltäglichem Krimskrams.“ — Der Fischhändler
go install github.com/DeprecatedLuar/dredge-cargo/cmd/dredge@latest
git clone und du hast deine Daten.dredge undo, wenn du versehentlich löschst.Ich urteile nicht. Nervige API-Schlüssel, die nur einmal angezeigt werden, SSH-Konfiguration, KI-Prompts, Passwörter, buchstäbliche Shell-Skripte, die du ausführen kannst, E-Mail-Vorlagen?, Dotfiles (seltsam, aber funktioniert einwandfrei), Zip-Archive, Filmliste, Listen von URLs für schnellen Zugriff...
Sogar eine legale Kopie von Chainsaw Man Kapitel 2 auf Japanisch. (Die habe ich möglicherweise auch genau so)
go install github.com/DeprecatedLuar/dredge-cargo/cmd/dredge@latest
Stelle sicher, dass $GOPATH/bin (normalerweise ~/go/bin) in deinem PATH ist.
curl -sSL https://raw.githubusercontent.com/DeprecatedLuar/the-satellite/main/satellite.sh | bash -s -- install DeprecatedLuar/dredge-cargo:dredge
Manuelle Installation
chmod +x dredge-*mv dredge-* ~/.local/bin/dredgeAus dem Quellcode
git clone https://github.com/DeprecatedLuar/dredge-cargo
cd dredge-cargo
go build -o dredge ./cmd/dredge
mv dredge ~/.local/bin/
# Initialize with an existing git remote
dredge init yourusername/vault # GitHub shorthand
# or: dredge init [email protected]:you/vault.git
# Add your first item
dredge add "OpenAI Key" -c "sk-..." -t keys api #opens the editor without -c flag
# Search for it
dredge search openai
# Push to git
dredge push
# Add anything
dredge add My SSH Config -t ssh dotfiles --import ~/.ssh/config
dredge add "Master Architect Prompt" --import prompt.md -t ai prompts
dredge add "Watchlist" -c "Dune 2, Oppenheimer..." -t lists
dredge add "project-backup" --import project.tar.gz # binary files too :D
# Search — just type whatever you remember
dredge search prompt
dredge search aws key
dredge search ssh
# View, edit, remove
dredge view <id>
dredge edit <id>
dredge rm <id>
dredge undo # brought it back
# Search results are numbered — just type the number to view
dredge search ssh # shows: 1. [xKP] SSH Config 2. [mNq] SSH Key
dredge 1 # views it directly
# Git sync
dredge push
dredge pull
dredge sync # pull + push
"Ich kann mir nicht vorstellen, was da unten in der Tiefe ist." — Der Leuchtturmwärter
Okay, um es zusammenzufassen:
Ich habe mich für zwei Hauptkryptotechnologien entschieden: Argon2id und natürlich AES-256, genauer gesagt die GCM-Variante.
Argon2id, weil es die EMPFEHLUNG aus RFC 9106 und der Gewinner des PHC-Wettbewerbs 2015 ist. Das wars. Die GCM-Variante von AES, weil sie alle verschlüsselten Daten aufgrund von Fingerabdrücken manipulationssicher macht. Das wars auch.
Im Moment speichere ich alles als verschlüsselte Dateien in ~/.local/share/dredge/. Dieses Verzeichnis ist auch ein Git-Repository (zumindest vorerst). Also führt dredge push Änderungen aus und pusht alles zur Sicherung. Jeder Eintrag ist ein eigenständiger verschlüsselter Blob mit einer zufälligen 3-Zeichen-ID. Ich habe entschieden, dass keine Dateinamen preisgegeben werden sollen, sodass selbst wenn jemand deine Dateien sehen kann, er keine Ahnung hat, worum es sich handelt.
Ihr Passwort
+ 16-Byte-Zufallssalz ← das Salz wird in .dredge-key gespeichert
→ Argon2id (64 MB Speicher · 4 Threads · 1 Iteration)
→ 32-Byte-Hauptschlüssel (Salz + Passwort = der eigentliche Schlüssel)
Hauptschlüssel + Inhalt des Eintrags (TOML: Titel, Tags, Inhalt)
→ AES-256-GCM mit einem frischen zufälligen 12-Byte-Nonce pro Vorgang
→ [12B Nonce][Chiffretext + 16B Authentifizierungstag]
→ auf die Festplatte geschrieben als items/xKP (zufällige ID, keine Erweiterung)
Dein gesamter Tresor verwendet also denselben abgeleiteten Schlüssel (das bedeutet, wenn du deinen Schlüssel verlierst, verlierst du deine Daten – bitte verliere deinen Schlüssel nicht). Jeder Eintrag verwendet denselben Schlüssel, jeder mit seinem eigenen zufälligen Nonce. Wenn du denselben Inhalt zweimal verschlüsselst, entsteht vollständig unterschiedlicher Chiffretext.
~/.local/share/dredge/ ← der Tresor (Git-Repo)
├── .git/
├── .gitignore ← schließt .spawned/ und links.json aus
├── .dredge-key ← Salz + verschlüsselter Bestätigungsstring
├── items/
│ ├── xKP ← verschlüsselter Eintrag
│ ├── mNq ← verschlüsselter Eintrag
│ └── ...
├── .spawned/ ← Klartext-Kopien verlinkter Einträge
└── links.json ← Symlink-Manifest
Alle deine verschlüsselten Dateien und .dredge-key werden im Git-Repo gespeichert, alle Klartextdateien (diejenigen, die du für das System lesbar gemacht hast) werden niemals versioniert. Mach also damit, was du willst.
Nach deinem ersten Befehl in einem Terminal wird der abgeleitete 32-Byte-Schlüssel unter $XDG_RUNTIME_DIR/dredge/$PPID/.key (nur Root-Zugriff) zwischengespeichert.
Alle folgenden dredge-Befehle im GLEICHEN Terminal verwenden den zwischengespeicherten Schlüssel. Das bedeutet, dass du nicht mehr nach dem Passwort gefragt wirst. Jedes Terminal erhält sein eigenes isoliertes Verzeichnis basierend auf der übergeordneten PID. Der Schlüssel wird von der Festplatte entfernt, sobald das Terminal stirbt.
Schlüsselableitung – Argon2id: Von RFC 9106 empfohlene Parameter (64 MB Speicher, 4 Threads, 1 Iteration). Das Salz in .dredge-key soll kein Geheimnis sein; es stellt nur sicher, dass das Knacken deines Passworts selbst mit der Datei sehr teuer ist. Dein Passwort ist das, was dich schützt, also weißt du, was zu tun ist.
Chiffre – AES-256-GCM: Jede Verschlüsselung wird im Grunde mit einem Fingerabdruck versehen. Du erhältst sowohl Vertraulichkeit als auch Integrität. Das Manipulieren des Chiffretexts führt nicht zu Müll, die Entschlüsselung schlägt fehl und schreit um Hilfe.
Passwortüberprüfung: .dredge-key enthält den String dredge-vault-v1, der mit deinem Hauptschlüssel verschlüsselt ist. Bei jeder neuen Sitzung entschlüsselt dredge dies, um zu überprüfen, ob das Passwort korrekt ist. Wenn du also dredge-vault-v1 nicht daraus erhältst, ist das Passwort falsch; der Vorgang schlägt innerhalb von ~100ms fehl, anstatt dass ein falsches Passwort mitten im Betrieb entdeckt wird.
Was zwischengespeichert wird: Die Sitzungsdatei speichert den abgeleiteten 32-Byte-Schlüssel (Passwort + Salz), nicht das Passwort selbst (so dumm bin ich nicht). Selbst wenn jemand .key während einer aktiven Sitzung liest, kann er dein Passwort daraus nicht wiederherstellen.
Sicherheit„Besser mit einem kleinen Fang zurückzukommen, als gar nicht zurückzukommen.“ — Der Fischhändler
Jemand klont dein privates Git-Repo:
Sie erhalten verschlüsselte Blobs und .dredge-key. Das Salz ist nicht geheim – sein Zweck ist es, Vorausberechnungsangriffe unpraktikabel zu machen. Ohne dein Passwort sind die Einträge undurchsichtige Binärdaten. Argon2id macht Offline-Brute-Force teuer. Verwende ein starkes Passwort.
Jemand hat Zugriff auf deine laufende Sitzung:
Der abgeleitete Schlüssel befindet sich während der Dauer dieser Terminalsitzung in $XDG_RUNTIME_DIR/dredge/$PPID/.key. Jedes Terminal erhält sein eigenes isoliertes Verzeichnis – schließe das Terminal, der Schlüssel ist weg. Dieser Pfad ist benutzerbezogen (Modus 700) und RAM-gestützt. Ein Angreifer mit Lesezugriff auf dein Sitzungsverzeichnis kann deinen Tresor entschlüsseln. Behandle ihn wie jede andere sensible Anmeldeinformation in deinem Home-Verzeichnis. Wenn jemand Root auf deinem Rechner hat, ist dein dredge-Schlüssel dein geringstes Problem.
Jemand hat physischen Zugriff auf dein ausgeschaltetes Gerät:
Die Einträge auf der Festplatte sind verschlüsselt. Der Sitzungsschlüssel befindet sich im RAM-gestützten Speicher und überlebt einen Neustart nicht. Verlinkte Einträge (.spawned/) liegen im Klartext auf der Festplatte – siehe unten.
Die gespawnte Datei ist der einzige dauerhafte Klartext auf der Festplatte, und sie existiert nur, weil du einen Eintrag explizit mit einem Systempfad verknüpft hast. Alles andere befindet sich nur im Speicher.
--password / DREDGE_PASSWORD: Die Angabe deines Passworts inline macht es im Shell-Verlauf und in der ps-Ausgabe sichtbar. Umgebungsvariablen können an Kindprozesse durchsickern. Vermeide beides in gemeinsam genutzten Umgebungen.--vault / DREDGE_VAULT: Überschreibe den aktiven Tresor für einen einzelnen Befehl, ohne die Änderung dauerhaft zu machen. Nützlich für Skripte über mehrere Tresore hinweg.~/.ssh/config). Er wird nicht von Git verfolgt, liegt aber im Klartext auf der Festplatte.
Verknüpfe einen gespeicherten Eintrag mit einem Pfad in deinem Dateisystem:
dredge link <id> ~/.ssh/config
Dieser Befehl erstellt einen Symlink unter ~/.ssh/config, der auf eine Klartext-Kopie zeigt, die von dredge verwaltet wird (die Datei wird auf der Festplatte verfügbar gemacht, damit du sie nutzen kannst). Du kannst die Datei direkt oder über dredge edit oder wie auch immer bearbeiten; alle Änderungen werden automatisch mit dem verschlüsselten Speicher synchronisiert.
Automatische Reparatur: Wenn du einen Symlink umbenennst (z. B. mv ~/.ssh/config ~/.ssh/config-backup), erkennt dredge dies und verfolgt den neuen Pfad automatisch. Gelöschte Symlinks werden beim Sitzungsstart bereinigt.
Auf einem neuen Rechner:
git clone [email protected]:you/vault.git ~/.local/share/dredge
dredge link <id> ~/.ssh/config
# same SSH config, same keys, every machine git tracked for any update
Das ist eigentlich der Grund, warum ich dredge gebaut habe. Meine SSH-Konfiguration ist auf jedem Rechner identisch, aber ich konnte sie nicht einfach in meine Dotfiles packen.
Die Git-Sync verwendet einfaches git und funktioniert mit jedem Remote (GitHub/GitLab/Gitea/etc.).
dredge init akzeptiert optional einen Git-Remote. Wenn du ihn weglässt, initialisiert dredge ein lokales Git-Repo (ohne Remote).
Auto-Commit-Verhalten: push, pull und sync bewahren synchronisierte, nicht übernommene Änderungen in einem Commit auf, bevor sie mit dem Remote abgeglichen werden. Wenn du lokale Änderungen verwerfen musst, um die Remote-Version zu priorisieren, verwende dredge drop.
Automatische Aufbewahrung des Verlaufs: push und sync wenden die in dredge.toml festgelegte Richtlinie an. Elementmetadaten und Binärspeicher haben unabhängige versionsbezogene und verschlüsselte Byte-Grenzen, während history.deleted.retain_for steuert, wie lange gelöschte IDs wiederherstellbar bleiben. Wenn die Richtlinie nichts entfernt, pusht Dredge normal. Wenn eine Kompaktierung erforderlich ist, überprüft Dredge den Ersatzverlauf und verwendet eine exakte Force-with-Lease; ein gleichzeitiges Remote-Update stoppt sicher, anstatt überschrieben zu werden. pull kompaktiert nie und führt kein Force-Push durch.
Überprüfe den aufbewahrten Verlauf mit dredge history, dredge history deleted oder dredge history <id>. Stelle einen gelöschten verschlüsselten Eintrag mit dredge history restore <id> wieder her. Passwortänderungen verschlüsseln historische Blobs nicht neu, daher können wiederhergestellte Versionen, die unter einem älteren Passwort erstellt wurden, möglicherweise nicht mit dem aktuellen Passwort entschlüsselt werden.
Akzeptierte Remote-Formate:
# GitHub shorthand (expanded to https://github.com/<owner>/<repo>.git)
dredge init owner/repo
# HTTPS
dredge init https://github.com/owner/repo.git
dredge init https://gitlab.com/group/repo.git
# SSH (scp-like)
dredge init [email protected]:owner/repo.git
dredge init [email protected]:group/repo.git
# SSH URL
dredge init ssh://[email protected]/owner/repo.git
# Local path remote (advanced)
dredge init /srv/git/dredge-vault.git
origin nicht konfiguriert ist, geben dredge push/pull/sync einen Fehler mit Anleitung aus.dredge init diesen nicht.
„Ich bin ein Sammler – von vielen Dingen; Kunst und Artefakte, Schätze und Wahrheiten … und Kuriositäten, die am Rande des Begehrens stehen.“ — Der Sammler
Der mentale Aufwand, etwas zu speichern und nicht zu wissen, wo man es findet, wenn man es braucht.
Ich war genervt davon, dass wichtige (und unwichtige – einfach Dinge im Allgemeinen) überall verstreut waren. Ich musste auf ein E-Mail-Konto zugreifen, das ich vor 6 Jahren erstellt hatte, weil es mit einem zufälligen Dienst verknüpft war, auf den ich dringend zugreifen musste, aus keinem besonderen Grund … Jedenfalls wurde mir klar, dass viele Tools trotz ihrer Eigenheiten alle einen sehr wichtigen Aspekt gemeinsam haben: das Speichern von Informationen. Also habe ich ein Tool entwickelt, das sich auf diese spezifische Gemeinsamkeit spezialisiert und die Tools das machen lässt, was sie am besten können.
Ich bin faul, also wollte ich etwas, das einfach funktioniert und meine Gedanken liest, das keinerlei Aufwand erfordert, um einen Eintrag hinzuzufügen oder aus der Wissensdatenbank abzurufen.
Ich habe einmal jrnl heruntergeladen und mochte die Idee sehr, hasste aber die Umsetzung aufgrund einiger seltsamer Parameter. Es hatte buchstäblich keine Trennung von Einträgen und eine Suche, die alles matchte. Dredge ist das, was ich eigentlich wollte. (Also ja, im Grunde ein persönliches Tool)
Großen Dank an euch, die ihr zu dredge beigetragen habt:
von Luar
| Ort | Wann | Lebensdauer |
|---|
| Nur RAM | Bei jeder Ansicht, Suche oder Bearbeitung | Freigegeben beim Beenden des Befehls |
$XDG_RUNTIME_DIR/dredge/$PPID/edit-*.txt | Nur während dredge edit | Gelöscht nachdem der Editor geschlossen wird |
~/.local/share/dredge/.spawned/<id> | Nach dredge link | Bis du dredge unlink ausführst |
| Befehl | Beschreibung | Beispiel |
|---|
add / a / new / + | Einen Eintrag hinzufügen (öffnet Editor, wenn kein -c Flag) | dredge add "OpenAI Key" -c "sk-..." -t keys |
search / s | Einträge durchsuchen | dredge search aws key |
list / ls | Alle Einträge auflisten | dredge ls |
view / v | Einen Eintrag anzeigen | dredge view xKP oder dredge 1 |
cat / c | Rohinhalt ausgeben (für Pipes) | dredge cat xKP | bash |
edit / e | Einen Eintrag bearbeiten | dredge edit xKP |
rm | Entfernen (kommt in den Papierkorb) | dredge rm 1 2 3 |
undo | Zuletzt entfernten Eintrag wiederherstellen | dredge undo |
link / ln | Eintrag mit einem Systempfad verknüpfen | dredge link xKP ~/.ssh/config |
unlink | Eine Verknüpfung entfernen | dredge unlink xKP |
mv / rename | Eintrags-ID umbenennen | dredge mv xKP abc |
export | Dateieintrag auf die Festplatte exportieren | dredge export xKP ./output/ |
copy / cp | Eintragsinhalt in die Zwischenablage kopieren | dredge copy xKP |
lock | Tresor sperren (Sitzungsschlüssel löschen) | dredge lock |
init / use | Tresor initialisieren oder aktivieren | dredge init ~/vaults/work |
push / pull / sync | Git-Synchronisation (Änderungen automatisch committen) | dredge sync |
drop | Nicht übernommene Änderungen verwerfen | dredge drop xKP oder dredge drop --all |
status | Ausstehende Änderungen anzeigen | dredge status |
passwd | Tresor-Passwort ändern | dredge passwd |
update | Auf die neueste Version aktualisieren | dredge update |