
Um auxiliar remoto Git criptografado implementado em rust
ISTO É UM PROJETO EXPERIMENTAL, não passou por uma auditoria de segurança formal. NÃO confie nele para repositórios críticos.
git-remote-pqcrypt é um helper remoto Git criptografado similar ao gcrypt. Ele armazena packfiles Git e metadados do repositório criptografados em repouso. O acesso é feito com o wrapping pós-quântico XWing.
Versão atual da crate: 0.2.0.
git-remote-pqcrypt init cria uma chave mestra do repositório.git-remote-pqcrypt.Exemplo de arquivos do armazenamento remoto:
keys.json
manifest.enc
objects/
pack-.....pack.enc
keys.json contém metadados e encapsulamentos criptografados da chave mestra.
Instale a build padrão a partir do Git:
cargo install --git https://github.com/Torm0r/git-remote-pqcrypt --locked
Isso instala git-remote-pqcrypt no diretório binário do Cargo, geralmente ~/.cargo/bin.
Certifique-se de que o diretório binário do Cargo está no seu PATH, então verifique se funciona:
git-remote-pqcrypt --help
A build padrão inclui suporte a armazenamento local via sistema de arquivos e via Git-backed.
Para instalar com suporte SFTP em sistemas Unix-like:
cargo install --git https://github.com/Torm0r/git-remote-pqcrypt --locked --features sftp
A funcionalidade sftp atualmente não é suportada no Windows.
Compile com suporte de backend padrão:
cargo build --release
Isso inclui suporte a armazenamento local via sistema de arquivos e via Git-backed.
Para compilar com suporte SFTP em sistemas Unix-like:
cargo build --release --features sftp
Instale o binário no seu PATH:
sudo cp target/release/git-remote-pqcrypt /usr/local/bin/
O nome do binário deve permanecer git-remote-pqcrypt, pois o Git encontra os helpers remotos procurando por git-remote-[nome].
Verifique se funciona:
git-remote-pqcrypt --help
git deve estar instalado--features sftp e atualmente é apenas para sistemas Unix-likeVá para um repositório Git existente ou crie um.
Inicialize o armazenamento pqcrypt.
Caminho local:
git-remote-pqcrypt init pqcrypt:///caminho/para/armazenamento-criptografado
SFTP requer compilação com a funcionalidade sftp e atualmente é suportada apenas em sistemas Unix-like:
git-remote-pqcrypt init pqcrypt::sftp://[email protected]/caminho/para/armazenamento
Via Git-backed:
git-remote-pqcrypt init pqcrypt::[email protected]:org/armazenamento.git
Se nenhuma chave privada existir, uma é gerada em ~/.config/pqcrypt/key e a chave pública é exibida.
Você será solicitado a fornecer um comentário opcional para a chave, por exemplo pessoal ou laptop-trabalho.
Após o init, um remote Git chamado pqcrypt é adicionado:
git remote -v
Exemplo:
pqcrypt pqcrypt::/caminho/para/armazenamento-criptografado (fetch)
pqcrypt pqcrypt::/caminho/para/armazenamento-criptografado (push)
git push pqcrypt main
git clone pqcrypt::[email protected]:Torm0r/pqcrypt-test.git meu-clone
Ele deve gerar um par de chaves com:
git-remote-pqcrypt keygen
Ele pode obter sua chave pública com:
git-remote-pqcrypt pubgen ~/.config/pqcrypt/key
Ou pode copiar a chave pública exibida por keygen.
Em seguida, um usuário autorizado existente o adiciona ao repositório:
git-remote-pqcrypt add-user <chave-publica-base64>
Execute para mais opções:
git-remote-pqcrypt add-user -h
Por padrão, add-user procura por um remote Git local cuja URL comece com pqcrypt e adiciona a chave pública lá.
pqcrypt distingue pushes normais de force pushes pela refspec do Git.
Pushes normais são verificados como fast-forward e rejeitados se sobrescreveriam o histórico remoto.
Git invoca pqcrypt como um helper remoto através do binário git-remote-pqcrypt.
Quando invocado pelo Git, o helper espera o formato de argumento remote-helper usado pelo Git, por exemplo:
git-remote-pqcrypt origin pqcrypt::/caminho/para/armazenamento
Subcomandos diretos da CLI como init, add-user, keygen, pubgen e help são tratados como comandos de usuário normais, não como invocações de remote-helper.
O ponto de entrada do binário delega para o runtime da biblioteca, então a lógica da aplicação é testável tanto através da crate da biblioteca quanto através do binário instalado.
Para URLs de armazenamento via Git-backed, pqcrypt mantém um cache local no diretório de cache do sistema, por exemplo:
~/.cache/pqcrypt/
pqcrypt busca o estado criptografado do repositório Git de apoio antes das operações e envia o estado criptografado após as atualizações.
Se for detectada corrupção ou perda do cache, pqcrypt tenta recriar o cache automaticamente, buscando novamente do repositório Git de apoio.
pqcrypt::, pqcrypt:// e pqcrypt: são todos aceitos e normalizados internamente para pqcrypt::.
Estes são equivalentes:
git-remote-pqcrypt init pqcrypt:///caminho/para/armazenamento
git-remote-pqcrypt init pqcrypt::/caminho/para/armazenamento
git-remote-pqcrypt init pqcrypt:/caminho/para/armazenamento
O backend é determinado pelo caminho de armazenamento:
Exemplos:
pqcrypt::/tmp/armazenamento
pqcrypt:///tmp/armazenamento
pqcrypt:/tmp/armazenamento
pqcrypt::[email protected]:org/armazenamento.git
pqcrypt::https://github.com/org/armazenamento.git
pqcrypt::sftp://[email protected]/caminho/para/armazenamento
Durante a decriptação, pqcrypt procura uma chave privada nesta ordem:
PQCRYPT_KEY_PATHgit config pqcrypt.keypath.pqcrypt/key no diretório atual~/.config/pqcrypt, onde todos são testadosPara configurações com múltiplas chaves, por exemplo chave de trabalho e pessoal:
git config pqcrypt.keypath ~/.config/pqcrypt/chave-trabalho
A chave deve ser uma que foi usada durante init ou adicionada via add-user.
Execute a suíte de testes completa:
cargo test
Execute com SFTP habilitado em sistemas Unix-like:
cargo test --features sftp
Alguns testes de ponta a ponta que dependem do comportamento de caminho local Unix-like são ignorados no Windows.
GitHub Actions compila o projeto no Linux, macOS e Windows. Os artefatos do workflow podem conter binários de execuções CI, mas estes não são lançamentos oficiais.
XChaCha20Poly1305.XWing.0600 em sistemas Unix-like.sftp e atualmente não é suportado no Windows.ssh e git devem estar instalados.| Padrão | Backend | Notas |
|---|
/caminho/local | Sistema de arquivos local | Padrão |
git@host:, *.git, https://git* | Git-backed | Padrão |
sftp:// ou ssh:// | SFTP | Requer --features sftp; apenas sistemas Unix-like |