24
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

git cryptを導入する

Last updated at Posted at 2019-02-12

git-cryptを使って公開したらやばい情報を暗号化して管理する

社内で開発プロジェクトにgit-cryptを導入しようとした時のまとめ
※ クライアントはmac前提でhomebrew導入済み
GPGを使って公開鍵秘密鍵を用い、gitリモート上は暗号化したファイルを管理し、ローカルでは秘密鍵で復号化したファイルを扱う。

パッケージインストール

【やる人:プロジェクトメンバー全員】
以下をローカルインストール

  • GPG関連
$ brew install gnupg gnupg2 pinentry-mac
$ mkdir ~/.gnupg
$ echo "pinentry-program /usr/local/bin/pinentry-mac" >>~/.gnupg/gpg-agent.conf
  • git-crypt
brew install git-crypt

鍵を作る

【やる人:最低導入者一人。個々に管理したい場合は全員】
ローカルで以下を実行

  • キーペア作成
$ gpg --generate-key
# 対話形式でuserid, email, password(任意)を入力
  • 公開鍵エクスポート
$ gpg --output [任意の公開鍵名].gpg --export [作成したキーのemail]

gitリポジトリへの導入

【やる人:導入者】

  • 自分以外のチームメンバーの鍵を登録する場合(公開鍵のインポート)
# 公開鍵をインポート(事前に公開鍵をもらっとく)
$ gpg --import [貰った公開鍵ファイル]
# 鍵を信頼する手続き
$ gpg --sign-key [上の鍵で登録したemail]
  • リポジトリ適用
# gitリポジトリルートで実行
$ git crypt init
# 対象メンバーを登録。自分もしくは自分以外の事前に上で公開鍵をインポートしたメンバーを指定(人数分実行)
$ git crypt add-gpg-user [鍵登録してるemail]

リポジトリルートに .git-crypt ディレクトリが作成され、 .git-crypt/keys/default/0/ に公開鍵が配置される

  • 秘密情報ファイルの指定
    暗号化してgit管理したいファイルをリポジトリルートの .gitattributes に記載
# ファイル数分記載する
$ vi .gitattributes
[暗号化したいファイル名] filter=git-crypt diff=git-crypt
...
  • gitに登録
    普通にaddしてcommit
    ローカル上は暗号化されてないように存在しているが、リモートにプッシュしてリモート上で見ると暗号化されたファイルとなっている
    .git-crypt .gitattributes をgitignoreしたらダメ

プロジェクト導入

【やる人:リポジトリ導入者以外全員】
何もしないと暗号化されたファイルがローカルに存在する事になるので復号化処理をする。
たまに暗号化してたら同様に行う。

# 対象リポジトリクローンとか導入後のmasterを反映したのち
$ git-crypt unlock

一つの鍵でチーム運用

以下のいずれかで行う

1. 対象鍵を共有する場合

  • 鍵作成者
# 対象鍵を生成 (例:taishoukagi.key)
git-crypt export-key taishoukagi.key
  • 鍵貰う人
    事前に上記で生成した taishoukagi.key を貰っておく
# ローカルに配置 (例:~/.gnupg/) 後、unlockする
git-crypt unlock ~/.gnupg/taishoukagi.key

2. 秘密鍵を共有する場合

  • 鍵作成者
# 公開鍵のエクスポート
$ gpg -a --export [キー登録されてるemail] > public.txt
# 秘密鍵のエクスポート
$ gpg -a --export-secret-keys [キー登録されてるemail] > secret.txt
# 公開鍵の信用情報エクスポート
$ gpg --export-ownertrust > trust.txt
  • 鍵貰う人
    事前に上記で作成した public.txt secret.txt trust.txt を貰っておく
# 公開鍵のインポート
$ gpg --import public.txt
# 秘密鍵のインポート
$ gpg --import --allow-secret-key-import secret.txt
# 公開鍵の信用情報インポート
$ gpg --import-ownertrust trust.txt
# 状態の確認 uidが[究極]になってたらOK
$ gpg --list-secret-keys

参考

https://dev.classmethod.jp/tool/git/git-crypt/
https://text.baldanders.info/openpgp/openpgp-key-management/
https://lpi.or.jp/ex/303/ex_755.shtml
https://cast-a-spell.at.webry.info/200701/article_16.html

24
16
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
24
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?