23
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

リモートリポジトリの特定のファイルを暗号化しておく

Last updated at Posted at 2017-07-19

git-cryptを使えば、ファイルを暗号化してコミットしてチェックアウト時に復号化するという処理を透過的に(自動で)行えます。暗号化するにはGPG鍵が必要です。クローン時の復号化には基本的にGPG鍵ではなく対称鍵symmetric keyというのを使います。

暗号化

セットアップ

git-crypt init

これを実行すると~~.git-crypt~~ .git/git-cryptディレクトリが作成され、そこに暗号化・復号化のためのメタデータが入ります。このディレクトリは.gitignoreしてはいけません。

暗号化するファイルを指定する

echo '.secret filter=git-crypt diff=git-crypt' >> .gitattributes

以下のようになっていると思います。

.gitattributes
.secret filter=git-crypt diff=git-crypt

1つめのフィールド.secretの部分は、暗号化されるファイルの名前です。.gitignoreに書くときと同じように書けます。誤って.gitattributes.gitignoreなどのファイルを指定して暗号化してしまわないようにしてください。また、暗号化したいファイルと同時かそれよりも前に、そのファイルのエントリを追加した.gitattributesgit addしてください。そうでないとそのファイルは暗号化されません。

git add .gitattributes

暗号化に使う鍵を指定する

git-crypt add-gpg-user USER_ID

USER_IDの部分に、GPG鍵を特定できる文字列を入れます。フィンガープリントやメールアドレスなど、GPGのmanpageの "HOW TO SPECIFY A USER ID" にあるやり方で指定できます。

暗号化するファイルを追加する

echo 'hello, secret world!' > .secret
git add .secret

あとは普通にコミットしてプッシュすればOKです。おめでとうございます! 当該ファイルは暗号化されたのち送信されますし、ローカルでは生のまま扱えます。

復号化

基本的に自動で復号化されるので、ほとんど気にする必要はありません。特別な手順が必要になるのは、新たにクローンした時だけです。

秘密鍵を使う

git-crypt unlock

クローンしたリポジトリでこれを実行します。そのあとは、プルした時にいちいちアンロックする必要はありません。

対称鍵を使う

秘密鍵を持っていないマシンでも開発する場合や、共同開発者がいる場合などには、以下の手順が必要になります。

対称鍵を生成する

git-crypt export-key /path/to/key

GPGユーザ追加もしくはアンロックを行ったリポジトリでこのコマンドを実行し、生成されたファイルを別のマシンや共同開発者に送ってあげましょう。

対称鍵でアンロックする

git-crypt unlock /path/to/key

その他

  • アンロックされたリポジトリでは、秘密鍵がなくても:
    • 必要なときに自分で対称鍵を生成できるので、貰った対称鍵は削除しても問題ありません
    • 新たなファイルを暗号化して追加できます
  • TravisCIなどでテストする場合はどうするんでしょうか……
23
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?