Question Chiffrer les fichiers avant de les envoyer à Cloud


Récemment, je suis passé à GIT et j'ai choisi bitbucket pour héberger mon code.

Maintenant, avec tout le scandale enneigé, j'ai décidé de revoir mes choix.

je vraiment Je ne veux pas héberger mes données sur mon propre serveur, je préfère continuer à utiliser bitbucket pour cela.

Je n'ai rien d'autre que de bons mots sur bitbucket eux-mêmes, mais je veux juste m'assurer que mes données privées (code source) restent ainsi.

Je sais que beaucoup de gens ont utilisé TruCrypt avec DropBox, je me demande si cela est possible avec bitbucket (c.-à-d. forcer git à chiffrer de manière transparente et automatique le code source et les fichiers avant qu'ils ne soient envoyés à bitbucket), si tant est que quelqu'un puisse partager comment faire ça? J'ai beaucoup cherché sur Google mais je n'arrivais pas à comprendre comment le faire.


4
2017-11-15 19:06


origine


Je vais dire que ce n'est pas possible. Git s'appuie sur le contenu des fichiers de votre référentiel pour pouvoir faire ce qu'il fait (tout est basé sur les hashes des fichiers). Si vous cryptez le fichier, vous le modifiez et cassez le système. Si vous ne faites pas confiance à BitBucket, n'hébergez pas votre code ici. - heavyd
@heavyd: Évidemment, si TheDude chiffre tous ses fichiers, il devra les actualiser tous dans BitBucket - une fois. Tant qu'il utilise le même outil de cryptage (algorithme) avec la même clé, pourquoi serait-ce un problème après l'obstacle initial? Un fichier inchangé, chiffré avec la même clé, est toujours inchangé. - Scott
@Scott, si BitBucket était juste un simple stockage en nuage comme Dropbox, il n'y aurait pas de problème, mais BitBucket est un référentiel de code source basé sur des systèmes SCM tels que Git et Mercurial. Être basé sur Git est ce qui rend cela difficile. Git ne fonctionnera pas bien avec les données chiffrées. - heavyd


Réponses:


Une solution pourrait être d'utiliser git's smudge et clean  les filtres. Cette solution présente toutefois de sérieux inconvénients, dont nous parlerons plus tard.

Vous devez écrire deux scripts qui agissent comme des filtres, c'est-à-dire lus à partir d'une entrée standard et écrivant sur une sortie standard. De la documentation:

Un pilote de filtre consiste en une commande propre et une commande de nettoyage, chacune pouvant être spécifiée. À la fin de la commande, lorsque la commande smudge est spécifiée, la commande reçoit l'objet blob de son entrée standard et sa sortie standard est utilisée pour mettre à jour le fichier worktree. De même, la commande clean est utilisée pour convertir le contenu du fichier worktree lors de l’enregistrement.

Par exemple en utilisant openssl on peut écrire les fichiers fooenc.sh:

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

et foodec.sh:

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

Notez que ces scripts doivent être conservés à l'extérieur du dépôt et qu'ils doivent être conservés secret puisqu'ils contiennent la clé! Sinon, ils sont pratiques car ils ne demandent pas de phrase secrète chaque fois qu'ils sont appelés.

Une alternative un peu plus sûre pourrait être l'utilisation de GPG.

dans le .git/config fichier dans votre référentiel, vous devez spécifier ces filtres;

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

C'est ne pas une faute de frappe! Voir l'extrait de la documentation ci-dessus. Cette configuration crypte les données lors de l'archivage et décrypte à la caisse.

Puis dans le repository .git/info/attributes fichier, vous spécifiez d'utiliser ce filtre pour tous les fichiers;

* filter=crypt

Tant que les scripts de filtrage sont disponibles, le répertoire de travail contiendra des fichiers lisibles. Mais les objets git seront cryptés.

Notez que cela exclut réellement en utilisant les fichiers sur toute machine ne disposant pas des scripts nécessaires. Bitbucket ne fonctionnerait donc que comme stockage.

Maintenant, à la baisse; Cette solution permet également de créer des outils comme git diff et tout ce qui dépend de ça inutile, puisque les objets de git sont maintenant des blobs chiffrés.

Modifier:  Il y a des utilitaires comme git-crypt ou git-encrypt pour vous aider à chiffrer le contenu de votre repo.

Et il y a une solution au problème de diff; utiliser un filtre spécial pour diffs; en utilisant textconv avec un script supplémentaire pour décrypter les blobs avant qu'ils ne soient diff-ed.


9
2017-11-16 18:19