Criptografar arquivos antes de enviá-los para a nuvem

4

Recentemente, mudei para o GIT e escolhi o bitbucket para hospedar meu código.

Agora, com todo o escândalo do snowden, decidi rever minhas escolhas.

Eu realmente não quero hospedar meus dados em meu próprio servidor, prefiro continuar usando o bitbucket para isso.

Eu não tenho nada além de boas palavras sobre o bitbucket, mas eu só quero ter certeza de que meus dados privados (código-fonte) permaneçam assim.

Eu sei que muitas pessoas usaram o TruCrypt com o DropBox, gostaria de saber se isso é viável com o bitbucket (ou seja, force git para criptografar de forma transparente e automática o código fonte e os arquivos antes de enviá-los para bitbucket ), então alguém poderia compartilhar como fazer isso? Eu pesquisei muito, mas não consegui descobrir a maneira correta de fazer isso.

    
por TheDude 15.11.2013 / 20:06

1 resposta

9

Uma solução poderia ser usar os filtros smudge e clean do git. Esta solução tem algumas desvantagens, porém, a que chegaremos mais tarde.

Você precisará escrever dois scripts que atuam como filtros, ou seja, ler da entrada padrão e gravar na saída padrão. Da documentação:

A filter driver consists of a clean command and a smudge command, either of which can be left unspecified. Upon checkout, when the smudge command is specified, the command is fed the blob object from its standard input, and its standard output is used to update the worktree file. Similarly, the clean command is used to convert the contents of worktree file upon checkin.

Por exemplo, ao usar o openssl, podemos gravar os arquivos fooenc.sh :

#!/bin/sh
openssl enc -bf -nopad -pass pass:1KjeHD8d6YUI80bIIEAQ9iYr@njqLw3T

e foodec.sh :

#!/bin/sh
openssl enc -bf -nopad -d -pass pass:1KjeHD8d6YUI80bIIEAQ9iYr@njqLw3T

Note que estes scripts devem ser mantidos fora do repositório e que eles devem ser mantidos secret desde que contenham a chave! Caso contrário, são convenientes porque não pedem uma senha todas as vezes que são chamadas.

Uma alternativa um pouco mais segura pode ser usar o GPG.

No arquivo .git/config em seu repositório, você deve especificar esses filtros;

[filter "crypt"]
    clean = fooenc.sh
    smudge = foodec.sh

Isso não é um erro de digitação! Veja o excerto da documentação acima. Esta configuração criptografa os dados no check-in e descriptografa no check-out.

Em seguida, no arquivo .git/info/attributes do repositório, você especifica o uso desse filtro para todos os arquivos;

* filter=crypt

Contanto que os scripts de filtragem estejam disponíveis, o diretório de trabalho conterá arquivos legíveis. Mas os objetos do git serão criptografados.

Note que isso impede que eles sejam utilizados os arquivos em qualquer máquina que não possua os scripts necessários. Então bitbucket só funciona como um armazenamento.

Agora, o lado negativo; Esta solução também faz ferramentas como git diff e tudo o que depende disso inútil , já que os objetos do git agora são blobs criptografados.

Editar: Existem utuilidades como git-crypt ou git-encrypt para ajudá-lo a criptografar o conteúdo do seu repo.

E há uma solução para o problema do diff; usando um filtro especial para diffs; usando textconv com um script adicional para descriptografar os blobs antes que eles sejam dife- rados.

    
por 16.11.2013 / 19:19