
Un helper remoto Git crittografato implementato in Rust
QUESTO È UN PROGETTO SPERIMENTALE, non è stato sottoposto a un audit formale di sicurezza. NON fare affidamento su di esso per repository critici.
git-remote-pqcrypt è un helper remoto Git crittografato simile a gcrypt. Memorizza i packfile Git e i metadati del repository crittografati a riposo. L'accesso avviene tramite l'avvolgimento post-quantistico XWing.
Versione attuale del crate: 0.2.0.
git-remote-pqcrypt init crea una chiave master del repository.git-remote-pqcrypt.Esempi di file nell'archivio remoto:
keys.json
manifest.enc
objects/
pack-.....pack.enc
keys.json contiene metadati e gli avvolgimenti crittografati della chiave master.
Installa la build predefinita da Git:
cargo install --git https://github.com/Torm0r/git-remote-pqcrypt --locked
Questo installa git-remote-pqcrypt nella directory dei binari di Cargo, di solito ~/.cargo/bin.
Assicurati che la directory dei binari di Cargo sia nel tuo PATH, quindi verifica che funzioni:
git-remote-pqcrypt --help
La build predefinita include il supporto per filesystem locale e archivio basato su Git.
Per installare con supporto SFTP su sistemi Unix-like:
cargo install --git https://github.com/Torm0r/git-remote-pqcrypt --locked --features sftp
La feature sftp attualmente non è supportata su Windows.
Compila con il supporto backend predefinito:
cargo build --release
Questo include il supporto per filesystem locale e archivio basato su Git.
Per compilare con supporto SFTP su sistemi Unix-like:
cargo build --release --features sftp
Installa il binario nel tuo PATH:
sudo cp target/release/git-remote-pqcrypt /usr/local/bin/
Il nome del binario deve rimanere git-remote-pqcrypt, perché Git trova gli helper remoti cercando git-remote-[nome].
Verifica che funzioni:
git-remote-pqcrypt --help
git deve essere installato--features sftp ed è attualmente solo per sistemi Unix-likeVai in un repository Git esistente o creane uno.
Inizializza l'archivio pqcrypt.
Percorso locale:
git-remote-pqcrypt init pqcrypt:///path/to/encrypted-store
SFTP richiede la compilazione con la feature sftp ed è attualmente supportata solo su sistemi Unix-like:
git-remote-pqcrypt init pqcrypt::sftp://[email protected]/path/to/store
Basato su Git:
git-remote-pqcrypt init pqcrypt::[email protected]:org/store.git
Se non esiste una chiave privata, ne viene generata una in ~/.config/pqcrypt/key e viene stampata la chiave pubblica.
Ti verrà chiesto un commento opzionale per la chiave, ad esempio personale o laptop-lavoro.
Dopo l'inizializzazione, viene aggiunto un remote Git chiamato pqcrypt:
git remote -v
Esempio:
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
Deve generare una coppia di chiavi con:
git-remote-pqcrypt keygen
Può ottenere la sua chiave pubblica con:
git-remote-pqcrypt pubgen ~/.config/pqcrypt/key
Oppure può copiare la chiave pubblica stampata da keygen.
Poi un utente autorizzato esistente lo aggiunge al repository:
git-remote-pqcrypt add-user <chiave-pubblica-base64>
Esegui questo per ulteriori opzioni:
git-remote-pqcrypt add-user -h
Per impostazione predefinita, add-user cerca un remote Git locale il cui URL inizi con pqcrypt e vi aggiunge la chiave pubblica.
pqcrypt distingue i push normali dai force push in base al refspec di Git.
I push normali vengono controllati per fast-forward e vengono rifiutati se sovrascriverebbero la cronologia remota.
Git invoca pqcrypt come helper remoto attraverso il binario git-remote-pqcrypt.
Quando viene invocato da Git, l'helper si aspetta la forma degli argomenti dell'helper remoto utilizzata da Git, ad esempio:
git-remote-pqcrypt origin pqcrypt::/path/to/store
I sottocomandi diretti della CLI come init, add-user, keygen, pubgen e help vengono trattati come comandi utente normali, non come invocazioni dell'helper remoto.
Il punto di ingresso del binario delega al runtime della libreria, quindi la logica dell'applicazione è testabile sia attraverso la libreria del crate che attraverso il binario installato.
Per gli URL di archivio basati su Git, pqcrypt mantiene una cache locale nella directory di cache di sistema, ad esempio:
~/.cache/pqcrypt/
pqcrypt recupera lo stato crittografato dal repository Git di appoggio prima delle operazioni e invia lo stato crittografato dopo gli aggiornamenti.
Se viene rilevata una corruzione o una perdita della cache, pqcrypt tenta di ricrearla automaticamente recuperando nuovamente dal repository Git di appoggio.
pqcrypt::, pqcrypt:// e pqcrypt: vengono tutti accettati e normalizzati internamente a pqcrypt::.
Questi sono equivalenti:
git-remote-pqcrypt init pqcrypt:///path/to/store
git-remote-pqcrypt init pqcrypt::/path/to/store
git-remote-pqcrypt init pqcrypt:/path/to/store
Il backend viene determinato dal percorso di archiviazione:
Esempi:
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
Durante la decifratura, pqcrypt cerca una chiave privata in quest'ordine:
PQCRYPT_KEY_PATHgit config pqcrypt.keypath.pqcrypt/key nella directory corrente~/.config/pqcrypt, dove vengono testati tuttiPer configurazioni con più chiavi, ad esempio chiave di lavoro e personale:
git config pqcrypt.keypath ~/.config/pqcrypt/work-key
La chiave deve essere quella utilizzata durante init o aggiunta tramite add-user.
Esegui l'intera suite di test:
cargo test
Esegui con SFTP abilitato su sistemi Unix-like:
cargo test --features sftp
Alcuni test end-to-end che dipendono dal comportamento del percorso locale Unix-like vengono ignorati su Windows.
GitHub Actions compila il progetto su Linux, macOS e Windows. Gli artefatti del workflow possono contenere binari da esecuzioni CI, ma non sono rilasci ufficiali.
XChaCha20Poly1305.XWing.0600 sui sistemi Unix-like.sftp e attualmente non è supportato su Windows.ssh e git devono essere installati.| Pattern | Backend | Note |
|---|
/local/path | Filesystem locale | Predefinito |
git@host:, *.git, https://git* | Basato su Git | Predefinito |
sftp:// o ssh:// | SFTP | Richiede --features sftp; solo sistemi Unix-like |