
Ein verschlüsselter Git-Remote-Helper, implementiert in Rust
DIES IST EIN EXPERIMENTELLES PROJEKT, es gab noch kein formelles Sicherheitsaudit. Verlassen Sie sich NICHT darauf für irgendwelche kritischen Repositorys.
git-remote-pqcrypt ist ein verschlüsselter Git-Remote-Helper ähnlich wie gcrypt. Es speichert Git-Packfiles und Repository-Metadaten verschlüsselt ab. Der Zugriff erfolgt mit Post-Quantum-XWing-Wrapping.
Aktuelle Crate-Version: 0.2.0.
git-remote-pqcrypt init erstellt einen Repository-Masterschlüssel.git-remote-pqcrypt-Remote-Helper.Beispieldateien des entfernten Speichers:
keys.json
manifest.enc
objects/
pack-.....pack.enc
keys.json enthält Metadaten und verschlüsselte Masterschlüssel-Wrappings.
Installieren Sie den Standard-Build aus Git:
cargo install --git https://github.com/Torm0r/git-remote-pqcrypt --locked
Dies installiert git-remote-pqcrypt in das Cargo-Binärverzeichnis, normalerweise ~/.cargo/bin.
Stellen Sie sicher, dass das Cargo-Binärverzeichnis in Ihrem PATH ist, und überprüfen Sie dann, dass es funktioniert:
git-remote-pqcrypt --help
Der Standard-Build enthält Unterstützung für lokales Dateisystem und Git-gestützten Speicher.
Um mit SFTP-Unterstützung auf Unix-ähnlichen Systemen zu installieren:
cargo install --git https://github.com/Torm0r/git-remote-pqcrypt --locked --features sftp
Die sftp-Funktion wird derzeit unter Windows nicht unterstützt.
Bauen Sie mit standardmäßiger Backend-Unterstützung:
cargo build --release
Dies enthält Unterstützung für lokales Dateisystem und Git-gestützten Speicher.
Um mit SFTP-Unterstützung auf Unix-ähnlichen Systemen zu bauen:
cargo build --release --features sftp
Installieren Sie die Binärdatei in Ihren PATH:
sudo cp target/release/git-remote-pqcrypt /usr/local/bin/
Der Binärname muss git-remote-pqcrypt bleiben, da Git Remote-Helper findet, indem es nach git-remote-[name] sucht.
Überprüfen Sie, dass es funktioniert:
git-remote-pqcrypt --help
git muss installiert sein--features sftp und ist derzeit nur auf Unix-ähnlichen Systemen verfügbarGehen Sie zu einem vorhandenen Git-Repository oder erstellen Sie eines.
Initialisieren Sie den pqcrypt-Speicher.
Lokaler Pfad:
git-remote-pqcrypt init pqcrypt:///path/to/encrypted-store
SFTP erfordert das Bauen mit der sftp-Funktion und wird derzeit nur auf Unix-ähnlichen Systemen unterstützt:
git-remote-pqcrypt init pqcrypt::sftp://[email protected]/path/to/store
Git-gestützt:
git-remote-pqcrypt init pqcrypt::[email protected]:org/store.git
Falls kein privater Schlüssel existiert, wird einer unter ~/.config/pqcrypt/key erstellt und der öffentliche Schlüssel wird ausgegeben.
Sie werden nach einem optionalen Schlüsselkommentar gefragt, z. B. persönlich oder arbeits-laptop.
Nach der Initialisierung wird ein Git-Remote namens pqcrypt hinzugefügt:
git remote -v
Beispiel:
pqcrypt pqcrypt::/path/to/encrypted-store (fetch)
pqcrypt pqcrypt::/path/to/encrypted-store (push)
git push pqcrypt main
git clone pqcrypt::[email protected]:Torm0r/pqcrypt-test.git my-clone
Dieser muss ein Schlüsselpaar mit folgendem Befehl generieren:
git-remote-pqcrypt keygen
Er kann seinen öffentlichen Schlüssel mit folgendem Befehl erhalten:
git-remote-pqcrypt pubgen ~/.config/pqcrypt/key
Oder er kann den von keygen ausgegebenen öffentlichen Schlüssel kopieren.
Dann fügt ein vorhandener autorisierter Benutzer ihn zum Repository hinzu:
git-remote-pqcrypt add-user <base64-public-key>
Führen Sie dies für weitere Optionen aus:
git-remote-pqcrypt add-user -h
Standardmäßig sucht add-user nach einem lokalen Git-Remote, dessen URL mit pqcrypt beginnt, und fügt dort den öffentlichen Schlüssel hinzu.
pqcrypt unterscheidet normale Pushes von Force-Pushes anhand der Git-Refspec.
Normale Pushes werden auf Fast-Forward überprüft und abgelehnt, wenn sie die entfernte Historie überschreiben würden.
Git ruft pqcrypt als Remote-Helper über die Binärdatei git-remote-pqcrypt auf.
Wenn es von Git aufgerufen wird, erwartet der Helper die von Git verwendete Remote-Helper-Argumentform, zum Beispiel:
git-remote-pqcrypt origin pqcrypt::/path/to/store
Direkte CLI-Unterbefehle wie init, add-user, keygen, pubgen und help werden als normale Benutzerbefehle behandelt, nicht als Remote-Helper-Aufrufe.
Der Binäreinstiegspunkt delegiert an die Laufzeitbibliothek, sodass die Anwendungslogik sowohl über die Crate-Bibliothek als auch über die installierte Binärdatei testbar ist.
Für Git-gestützte Speicher-URLs verwaltet pqcrypt einen lokalen Cache im System-Cache-Verzeichnis, zum Beispiel:
~/.cache/pqcrypt/
pqcrypt ruft vor Operationen den verschlüsselten Zustand aus dem zugrunde liegenden Git-Repository ab und schiebt nach Aktualisierungen den verschlüsselten Zustand dorthin.
Wenn eine Cache-Beschädigung oder ein Cache-Verlust festgestellt wird, versucht pqcrypt, den Cache automatisch neu zu erstellen, indem es erneut aus dem zugrunde liegenden Git-Repository abruft.
pqcrypt::, pqcrypt:// und pqcrypt: werden alle akzeptiert und intern auf pqcrypt:: normalisiert.
Diese sind gleichwertig:
git-remote-pqcrypt init pqcrypt:///path/to/store
git-remote-pqcrypt init pqcrypt::/path/to/store
git-remote-pqcrypt init pqcrypt:/path/to/store
Das Backend wird durch den Speicherpfad bestimmt:
Beispiele:
pqcrypt::/tmp/store
pqcrypt:///tmp/store
pqcrypt:/tmp/store
pqcrypt::[email protected]:org/store.git
pqcrypt::https://github.com/org/store.git
pqcrypt::sftp://[email protected]/path/to/store
Während der Entschlüsselung sucht pqcrypt in dieser Reihenfolge nach einem privaten Schlüssel:
PQCRYPT_KEY_PATHgit config pqcrypt.keypath.pqcrypt/key im aktuellen Verzeichnis~/.config/pqcrypt, wo alle getestet werdenFür Multi-Key-Setups, z. B. Arbeits- und private Schlüssel:
git config pqcrypt.keypath ~/.config/pqcrypt/work-key
Der Schlüssel muss einer sein, der während init verwendet oder über add-user hinzugefügt wurde.
Führen Sie die vollständige Testsuite aus:
cargo test
Führen Sie mit aktiviertem SFTP auf Unix-ähnlichen Systemen aus:
cargo test --features sftp
Einige End-to-End-Tests, die von Unix-ähnlichem lokalen Pfadverhalten abhängen, werden unter Windows ignoriert.
GitHub Actions baut das Projekt auf Linux, macOS und Windows. Workflow-Artefakte können Binärdateien aus CI-Läufen enthalten, aber dies sind keine offiziellen Veröffentlichungen.
XChaCha20Poly1305 verschlüsselt.XWing verpackt.0600 erstellt.sftp-Feature und wird derzeit nicht unter Windows unterstützt.ssh und git müssen installiert sein.| Muster | Backend | Hinweise |
|---|
/lokaler/pfad | Lokales Dateisystem | Standard |
git@host:, *.git, https://git* | Git-gestützt | Standard |
sftp:// oder ssh:// | SFTP | Erfordert --features sftp; nur Unix-ähnliche Systeme |