web-dev-qa-db-ja.com

クラウドに送信する前にファイルを暗号化する

最近、GITに切り替えて、コードをホストするためにbitbucketを選びました。

スノーデンのスキャンダルがすべて起こったので、私は自分の選択を検討することにしました。

私は本当に自分のサーバーでデータをホストしたくないので、そのためにbitbucketを使い続けたいと思います。

私はbitbucket自体について良い言葉しかありませんが、個人データ(ソースコード)がそのままであることを確認したいだけです。

多くの人がDropBoxでTruCryptを使用していることを知っていますが、これはbitbucketで実現可能かどうか疑問に思います(つまり、bitbucketに送信される前にソースコードとファイルを透過的かつ自動的に暗号化するようにgitを強制する)どうやってするか?私はたくさんグーグルで検索しましたが、それを行う適切な方法を見つけることができませんでした。

5
TheDude

1つの解決策は、gitのsmudgeおよびcleanfilters を使用することです。ただし、このソリューションにはいくつかの重大な欠点がありますが、これについては後で説明します。

フィルタとして機能する2つのスクリプトを作成する必要があります。つまり、標準入力からの読み取りと標準出力への書き込みです。ドキュメントから:

フィルタドライバは、クリーンコマンドとスマッジコマンドで構成されており、どちらも指定しないでおくことができます。チェックアウト時に、smudgeコマンドが指定されている場合、コマンドには標準入力からblobオブジェクトが供給され、その標準出力を使用してワークツリーファイルが更新されます。同様に、cleanコマンドは、チェックイン時にワークツリーファイルの内容を変換するために使用されます。

たとえば、opensslを使用する場合、ファイルfooenc.shを書き込むことができます。

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

およびfoodec.sh

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

これらのスクリプトはリポジトリのoutsideに保持する必要があり、キーが含まれているためsecretに保持する必要があることに注意してください。それ以外の場合は、呼び出されるたびにパスフレーズを要求しないので便利です。

もう少し安全な代替手段は、GPGを使用することかもしれません。

リポジトリの.git/configファイルで、これらのフィルターを指定する必要があります。

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

これはnotタイプミスです!上記のドキュメントの抜粋を参照してください。この設定では、チェックイン時にデータが暗号化され、チェックアウト時に復号化されます。

次に、リポジトリの.git/info/attributesファイルで、すべてのファイルにこのフィルターを使用するように指定します。

* filter=crypt

フィルタリングスクリプトが利用可能である限り、作業ディレクトリには読み取り可能なファイルが含まれます。ただし、gitオブジェクトは暗号化されます。

これにより、実際にはsing必要なスクリプトがないマシン上のファイルが除外されることに注意してください。したがって、bitbucketはストレージとしてのみ機能します。

マイナス面があります。このソリューションでは、git diffやそれに依存するすべてのツールも作成されます役に立たない gitのオブジェクトは暗号化されたblobになっているため、.

編集:暗号化に役立つ git-cryptgit-encrypt などのユーティリティがありますあなたのレポの内容。

そして、diff問題の解決策があります。差分用の特別なフィルターを使用する。 textconv を追加のスクリプトとともに使用して、ブロブを差分する前に復号化します。

10
Roland Smith