LoginSignup
4
2

More than 5 years have passed since last update.

[git-crypt] リモートリポジトリ内の特定ファイルの暗号化

Posted at

はじめに

私用でAPI-KEYを使うことになり, 暗号化する手段を探していたところ, 以下で紹介するgit-cryptがあったので導入することにした. しかし, その途中で少し詰まったため, 自分用の備忘録として記事にすることにした.

git-crypt

環境

terminal
$ cat /etc/redhat-release 
CentOS Linux release 7.5.1804 (Core) 
$ git --version
git version 1.8.3.1
$ make --version
GNU Make 3.82
Built for x86_64-redhat-linux-gnu
Copyright (C) 2010  Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

この記事で紹介しないこと

  • gitのインストール方法
  • gpg(gnupg)のインストール方法
  • OSごとのツールのインストール方法

Installation

公式のInstall.md

要件等がこちらに書いてあるので, 必ず一度目を通すことを強く推奨する.

1. clone

リポジトリをクローン.

terminal
$ git clone https://github.com/AGWA/git-crypt.git

2. makeしてmake install

特に説明は必要ないかと.

terminal
$ cd git-crypt
$ make
$ make install

3. gpgで作るための*.confファイルを作成

いちいち入力してるとミスがあったときに困るため, .confファイルで設定.

(今回はkey-gen.confとします).

ファイルの内容は以下の通り.

key-gen.conf
Key-Type: RSA
Key-Length: 4096

SubKey-Type: RSA
SubKey-Length: 4096

Expire-Date: 2y           // 期間(お好みでok)

Name-Real: {real-name}    // 名前をここに入力
Name-Email: {email}       // emailアドレスをここに入力

passphrase: {pass-phrase} // pass-phraseをここに入力

%commit                   
%echo Successfully done

4. rng-toolsのインストール

terminal
$ gpg --gen-key --batch key-gen.conf

をしても良いが, 時間がかかるのでrng-toolsパッケージを使う。

rngd は /dev/hwrng から乱数を得て, カーネルのエントロピープールに乱数を提供します. rngd はあくまでカーネルのエントロピープールに乱数を提供するのみで, ハードウェア乱数生成器のデータを直接 /dev/random 等から出力するのでありません. また rngd は入力されたデータが本当にランダムかどうか, FIPS 140-2 (2002-10-10) テストを行ってくれます.

ハードウェア乱数生成器を利用することで /dev/random からより高速に乱数を生成することができます. ハードウェア乱数生成器を利用しない場合と利用する場合の生成速度の違いは以下のようになります.
(引用:Raspberry Pi のハードウェア乱数生成器を利用する)

私はCentOS7を利用しているので, 以下のコマンドを叩いた.

(環境に応じてコマンドを要変更のこと)

terminal
$ sudo yum install rng-tools

5. gpgによる鍵の生成

以下のコマンドを実行して鍵を生成.

1st_terminal
$ gpg --gen-key --batch ./key-gen.conf

その後, 別のterminalを開き, 以下のコマンドを実行.

2nd_terminal
$ sudo rngd -r /dev/urandom

すると, 最初のterminalで以下のように出力されるはず.

1st_terminal
~~
gpg --gen-key --batch ./key-gen.conf
gpg: 鍵*を絶対的に信用するよう記録しました
gpg: Successfully done

6. git-cryptの設定

設定は.gitattributesに以下のように書き込む.

ここで, {file-name}の部分には暗号化したいファイル名を入れる.
e.g.)は入力例なので, 記入しないように.

.gitattributes
{file-name} filter=git-crypt diff=git-crypt

// e.g.)  
// API-KEY.xml filter=git-crypt diff=git-crypt

その後, 以下のコマンドでGPGで生成した鍵を特定できる文字列を入れる.

私はgpgで鍵を生成したときのemailを入れた.

terminal
$ git-crypt add-gpg-user {email}

// e.g.) 
// $ git-crypt add-gpg-user hoge@fuga.com

7. git add

最後に, .gitattributesで設定したファイルをステージング($ git add)する.

暗号化対象にされているファイルは 以下のコマンドで確認可能.

terminal
$ git-crypt status -e

もし, 暗号化されていないのにステージングされている場合は, 以下のコマンドで暗号化対象に更新可能.

terminal
$ git-crypt status -f

おわりに

今回は, API-KEYの暗号化のためにgit-cryptを使用したが, 他のAPI-KEYの安全な管理方法があればお教えいただきたい。
お疲れ様でした.

参考資料

4
2
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
4
2