はじめに
私用でAPI-KEYを使うことになり, 暗号化する手段を探していたところ, 以下で紹介するgit-cryptがあったので導入することにした. しかし, その途中で少し詰まったため, 自分用の備忘録として記事にすることにした.
環境
$ 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
リポジトリをクローン.
$ git clone https://github.com/AGWA/git-crypt.git
2. make
してmake install
特に説明は必要ないかと.
$ cd git-crypt
$ make
$ make install
3. gpg
で作るための*.conf
ファイルを作成
いちいち入力してるとミスがあったときに困るため, .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のインストール
$ 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を利用しているので, 以下のコマンドを叩いた.
(環境に応じてコマンドを要変更のこと)
$ sudo yum install rng-tools
5. gpgによる鍵の生成
以下のコマンドを実行して鍵を生成.
$ gpg --gen-key --batch ./key-gen.conf
その後, 別のterminalを開き, 以下のコマンドを実行.
$ sudo rngd -r /dev/urandom
すると, 最初のterminalで以下のように出力されるはず.
~~
gpg --gen-key --batch ./key-gen.conf
gpg: 鍵*を絶対的に信用するよう記録しました
gpg: Successfully done
6. git-cryptの設定
設定は.gitattributes
に以下のように書き込む.
ここで, {file-name}の部分には暗号化したいファイル名を入れる.
e.g.)は入力例なので, 記入しないように.
{file-name} filter=git-crypt diff=git-crypt
// e.g.)
// API-KEY.xml filter=git-crypt diff=git-crypt
その後, 以下のコマンドでGPGで生成した鍵を特定できる文字列を入れる.
私はgpgで鍵を生成したときのemail
を入れた.
$ git-crypt add-gpg-user {email}
// e.g.)
// $ git-crypt add-gpg-user hoge@fuga.com
7. git add
最後に, .gitattributes
で設定したファイルをステージング($ git add
)する.
暗号化対象にされているファイルは 以下のコマンドで確認可能.
$ git-crypt status -e
もし, 暗号化されていないのにステージングされている場合は, 以下のコマンドで暗号化対象に更新可能.
$ git-crypt status -f
おわりに
今回は, API-KEYの暗号化のためにgit-cryptを使用したが, 他のAPI-KEYの安全な管理方法があればお教えいただきたい。
お疲れ様でした.