
Un assistant distant Git chiffré implémenté en Rust
THIS IS AN EXPERIMENTAL PROJECT, there hasnt been a formal security audit. DO NOT rely on this for any critical repositories.
git-remote-pqcrypt est un assistant distant Git chiffré similaire à gcrypt. Il stocke les fichiers pack Git et les métadonnées de dépôt chiffrés au repos. L'accès se fait avec le post-quantum XWing wrapping.
Version actuelle de la crate : 0.2.0.
git-remote-pqcrypt init crée une clé maîtresse du dépôt.git-remote-pqcrypt.Exemples de fichiers du stockage distant :
keys.json
manifest.enc
objects/
pack-.....pack.enc
keys.json contient les métadonnées et les encapsulations de la clé maîtresse chiffrées.
Installer la version par défaut depuis Git :
cargo install --git https://github.com/Torm0r/git-remote-pqcrypt --locked
Ceci installe git-remote-pqcrypt dans le répertoire binaire de Cargo, généralement ~/.cargo/bin.
Assurez-vous que le répertoire binaire de Cargo est dans votre PATH, puis vérifiez que cela fonctionne :
git-remote-pqcrypt --help
La version par défaut inclut le support du système de fichiers local et du stockage Git.
Pour installer avec le support SFTP sur les systèmes de type Unix :
cargo install --git https://github.com/Torm0r/git-remote-pqcrypt --locked --features sftp
La fonctionnalité sftp n'est actuellement pas prise en charge sur Windows.
Compiler avec le support du backend par défaut :
cargo build --release
Ceci inclut le support du système de fichiers local et du stockage Git.
Pour compiler avec le support SFTP sur les systèmes de type Unix :
cargo build --release --features sftp
Installer le binaire dans votre PATH :
sudo cp target/release/git-remote-pqcrypt /usr/local/bin/
Le nom du binaire doit rester git-remote-pqcrypt, car Git trouve les assistants distants en cherchant git-remote-[nom].
Vérifiez que cela fonctionne :
git-remote-pqcrypt --help
git doit être installé--features sftp et est actuellement réservé aux systèmes de type UnixAllez dans un dépôt Git existant ou créez-en un.
Initialisez le stockage pqcrypt.
Chemin local :
git-remote-pqcrypt init pqcrypt:///path/to/encrypted-store
SFTP nécessite une compilation avec la fonctionnalité sftp et n'est actuellement pris en charge que sur les systèmes de type Unix :
git-remote-pqcrypt init pqcrypt::sftp://[email protected]/path/to/store
Backend Git :
git-remote-pqcrypt init pqcrypt::[email protected]:org/store.git
Si aucune clé privée n'existe, une est générée dans ~/.config/pqcrypt/key et la clé publique est affichée.
Il vous sera demandé un commentaire de clé optionnel, par exemple personal ou work-laptop.
Après l'initialisation, un dépôt distant Git nommé pqcrypt est ajouté :
git remote -v
Exemple :
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
Ils doivent générer une paire de clés avec :
git-remote-pqcrypt keygen
Ils peuvent obtenir leur clé publique avec :
git-remote-pqcrypt pubgen ~/.config/pqcrypt/key
Ou ils peuvent copier la clé publique affichée par keygen.
Ensuite, un utilisateur autorisé existant les ajoute au dépôt :
git-remote-pqcrypt add-user <base64-public-key>
Exécutez ceci pour plus d'options :
git-remote-pqcrypt add-user -h
Par défaut, add-user cherche un dépôt distant Git local dont l'URL commence par pqcrypt et y ajoute la clé publique.
pqcrypt distingue les push normaux des force push par le refspec Git.
Les push normaux sont vérifiés en fast-forward et rejetés s'ils écraseraient l'historique distant.
Git invoque pqcrypt en tant qu'assistant distant via le binaire git-remote-pqcrypt.
Lorsqu'il est invoqué par Git, l'assistant s'attend à la forme des arguments d'assistant distant utilisée par Git, par exemple :
git-remote-pqcrypt origin pqcrypt::/path/to/store
Les sous-commandes CLI directes telles que init, add-user, keygen, pubgen et help sont traitées comme des commandes utilisateur normales, et non comme des invocations d'assistant distant.
Le point d'entrée du binaire délègue au runtime de la bibliothèque, de sorte que la logique applicative est testable à la fois via la bibliothèque de la crate et via le binaire installé.
Pour les URL de stockage Git, pqcrypt maintient un cache local dans le répertoire de cache système, par exemple :
~/.cache/pqcrypt/
pqcrypt récupère l'état chiffré depuis le dépôt Git sous-jacent avant les opérations et pousse l'état chiffré après les mises à jour.
Si une corruption ou une perte du cache est détectée, pqcrypt tente de recréer le cache automatiquement en récupérant à nouveau depuis le dépôt Git sous-jacent.
pqcrypt::, pqcrypt:// et pqcrypt: sont tous acceptés et normalisés en interne en pqcrypt::.
Ceux-ci sont équivalents :
git-remote-pqcrypt init pqcrypt:///path/to/store
git-remote-pqcrypt init pqcrypt::/path/to/store
git-remote-pqcrypt init pqcrypt:/path/to/store
Le backend est déterminé par le chemin de stockage :
Exemples :
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
Lors du déchiffrement, pqcrypt cherche une clé privée dans cet ordre :
PQCRYPT_KEY_PATHgit config pqcrypt.keypath.pqcrypt/key dans le répertoire courant~/.config/pqcrypt, où tous sont testésPour les configurations multi-clés, par exemple clés professionnelles et personnelles :
git config pqcrypt.keypath ~/.config/pqcrypt/work-key
La clé doit être celle qui a été utilisée lors de init ou ajoutée via add-user.
Exécuter la suite de tests complète :
cargo test
Exécuter avec SFTP activé sur les systèmes de type Unix :
cargo test --features sftp
Certains tests de bout en bout qui dépendent du comportement des chemins locaux de type Unix sont ignorés sur Windows.
GitHub Actions compile le projet sur Linux, macOS et Windows. Les artefacts du workflow peuvent contenir des binaires issus des exécutions CI, mais ceux-ci ne sont pas des versions officielles.
XChaCha20Poly1305.XWing.0600 sur les systèmes de type Unix.sftp et n'est actuellement pas pris en charge sur Windows.ssh et git doivent être installés.| Motif | Backend | Remarques |
|---|
/local/path | Système de fichiers local | Par défaut |
git@host:, *.git, https://git* | Backend Git | Par défaut |
sftp:// ou ssh:// | SFTP | Nécessite --features sftp ; systèmes de type Unix uniquement |