
Una ayuda remota de Git encriptada implementada en Rust.
ESTO ES UN PROYECTO EXPERIMENTAL, no ha pasado por una auditoría de seguridad formal. NO confíes en esto para repositorios críticos.
git-remote-pqcrypt es un ayudante remoto de Git cifrado similar a gcrypt. Almacena los paquetes (packfiles) de Git y los metadatos del repositorio cifrados en repositorio. El acceso se realiza con el envoltorio post-cuántico XWing.
Versión actual del crate: 0.2.0.
git-remote-pqcrypt init crea una clave maestra del repositorio.git-remote-pqcrypt.Ejemplo de archivos del almacenamiento remoto:
keys.json
manifest.enc
objects/
pack-.....pack.enc
keys.json contiene metadatos y envolturas cifradas de la clave maestra.
Instala la compilación predeterminada desde Git:
cargo install --git https://github.com/Torm0r/git-remote-pqcrypt --locked
Esto instala git-remote-pqcrypt en el directorio binario de Cargo, normalmente ~/.cargo/bin.
Asegúrate de que el directorio binario de Cargo esté en tu PATH, luego verifica que funciona:
git-remote-pqcrypt --help
La compilación predeterminada incluye soporte para sistema de archivos local y almacenamiento basado en Git.
Para instalar con soporte SFTP en sistemas tipo Unix:
cargo install --git https://github.com/Torm0r/git-remote-pqcrypt --locked --features sftp
La característica sftp actualmente no es compatible con Windows.
Compila con soporte de backend predeterminado:
cargo build --release
Esto incluye soporte para sistema de archivos local y almacenamiento basado en Git.
Para compilar con soporte SFTP en sistemas tipo Unix:
cargo build --release --features sftp
Instala el binario en tu PATH:
sudo cp target/release/git-remote-pqcrypt /usr/local/bin/
El nombre del binario debe permanecer git-remote-pqcrypt, porque Git encuentra los ayudantes remotos buscando git-remote-[nombre].
Verifica que funciona:
git-remote-pqcrypt --help
git debe estar instalado--features sftp y actualmente solo es para sistemas tipo UnixVe a un repositorio Git existente o crea uno.
Inicializa el almacenamiento pqcrypt.
Ruta local:
git-remote-pqcrypt init pqcrypt:///ruta/al/almacen-cifrado
SFTP requiere compilar con la característica sftp y actualmente solo es compatible en sistemas tipo Unix:
git-remote-pqcrypt init pqcrypt::sftp://[email protected]/ruta/al/almacen
Basado en Git:
git-remote-pqcrypt init pqcrypt::[email protected]:org/almacen.git
Si no existe una clave privada, se genera una en ~/.config/pqcrypt/key y se imprime la clave pública.
Se te solicitará un comentario opcional para la clave, por ejemplo personal o laptop-trabajo.
Después de init, se agrega un remoto Git llamado pqcrypt:
git remote -v
Ejemplo:
pqcrypt pqcrypt::/ruta/al/almacen-cifrado (fetch)
pqcrypt pqcrypt::/ruta/al/almacen-cifrado (push)
git push pqcrypt main
git clone pqcrypt::[email protected]:Torm0r/pqcrypt-test.git mi-clon
Ellos deben generar un par de claves con:
git-remote-pqcrypt keygen
Pueden obtener su clave pública con:
git-remote-pqcrypt pubgen ~/.config/pqcrypt/key
O pueden copiar la clave pública impresa por keygen.
Luego, un usuario autorizado existente los agrega al repositorio:
git-remote-pqcrypt add-user <clave-publica-base64>
Ejecuta esto para más opciones:
git-remote-pqcrypt add-user -h
Por defecto, add-user busca un remoto Git local cuya URL comience con pqcrypt y agrega la clave pública allí.
pqcrypt distingue los pushes normales de los pushes forzados mediante la refspec de Git.
Los pushes normales se verifican con avance rápido (fast-forward) y se rechazan si sobrescribirían el historial remoto.
Git invoca a pqcrypt como un ayudante remoto a través del binario git-remote-pqcrypt.
Cuando Git lo invoca, el ayudante espera la forma de argumento de ayudante remoto utilizada por Git, por ejemplo:
git-remote-pqcrypt origin pqcrypt::/ruta/al/almacen
Los subcomandos directos de CLI como init, add-user, keygen, pubgen y help se tratan como comandos normales de usuario, no como invocaciones de ayudante remoto.
El punto de entrada del binario delega en la biblioteca en tiempo de ejecución, por lo que la lógica de la aplicación se puede probar tanto a través de la biblioteca del crate como a través del binario instalado.
Para URLs de almacenamiento basado en Git, pqcrypt mantiene una caché local en el directorio de caché del sistema, por ejemplo:
~/.cache/pqcrypt/
pqcrypt obtiene el estado cifrado del repositorio Git de respaldo antes de las operaciones y empuja el estado cifrado después de las actualizaciones.
Si se detecta corrupción o pérdida de la caché, pqcrypt intenta recrear la caché automáticamente volviendo a obtener datos del repositorio Git de respaldo.
pqcrypt::, pqcrypt:// y pqcrypt: son aceptados y normalizados internamente a pqcrypt::.
Estos son equivalentes:
git-remote-pqcrypt init pqcrypt:///ruta/al/almacen
git-remote-pqcrypt init pqcrypt::/ruta/al/almacen
git-remote-pqcrypt init pqcrypt:/ruta/al/almacen
El backend se determina por la ruta de almacenamiento:
Ejemplos:
pqcrypt::/tmp/almacen
pqcrypt:///tmp/almacen
pqcrypt:/tmp/almacen
pqcrypt::[email protected]:org/almacen.git
pqcrypt::https://github.com/org/almacen.git
pqcrypt::sftp://[email protected]/ruta/al/almacen
Durante el descifrado, pqcrypt busca una clave privada en este orden:
PQCRYPT_KEY_PATHgit config pqcrypt.keypath.pqcrypt/key en el directorio actual~/.config/pqcrypt, donde se prueban todosPara configuraciones de múltiples claves, por ejemplo clave de trabajo y personal:
git config pqcrypt.keypath ~/.config/pqcrypt/clave-trabajo
La clave debe ser una que se usó durante init o se agregó mediante add-user.
Ejecuta la suite de pruebas completa:
cargo test
Ejecuta con SFTP habilitado en sistemas tipo Unix:
cargo test --features sftp
Algunas pruebas de extremo a extremo que dependen del comportamiento de rutas locales tipo Unix se ignoran en Windows.
GitHub Actions compila el proyecto en Linux, macOS y Windows. Los artefactos del flujo de trabajo pueden contener binarios de ejecuciones CI, pero estos no son lanzamientos oficiales.
XChaCha20Poly1305.XWing.0600 en sistemas tipo Unix.sftp y actualmente no es compatible con Windows.ssh y git deben estar instalados.| Patrón | Backend | Notas |
|---|
/ruta/local | Sistema de archivos local | Predeterminado |
git@host:, *.git, https://git* | Basado en Git | Predeterminado |
sftp:// o ssh:// | SFTP | Requiere --features sftp; solo sistemas tipo Unix |