CUBE SUGAR CONTAINER

技術系のこと書きます。

GNU Privacy Guard でファイルを気軽に暗号化する

このファイルは平文のまま置いておきたくないなーっていうようなファイルがたまにある。 例えば、何らかのトークンや個人情報などが書き込まれているもの。 そんなときは GNU Privacy Guard を使うとサクッと暗号化しておくことができて便利そう。 これは OpenPGP という暗号化ソフトウェアの仕様を実装したものだ。

今回使った環境は次の通り。

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.1 LTS"
$ uname -r
4.4.0-21-generic

下準備

まずは apt で GnuPG をインストールする。

$ sudo apt-get -y install gnupg2

次に、暗号化・復号する対象となるファイルを用意しておく。 これは、ただのテキストファイルにした。

$ cat << 'EOF' > greeting.txt
Hello, World!
EOF

暗号化する

早速、ファイルを暗号化してみよう。

gpg2 コマンドに -c オプションをつけて、暗号化したいファイルを指定する。

$ gpg2 -c greeting.txt
gpg: directory '/home/vagrant/.gnupg' created
gpg: new configuration file '/home/vagrant/.gnupg/dirmngr.conf' created
gpg: new configuration file '/home/vagrant/.gnupg/gpg.conf' created
gpg: keybox '/home/vagrant/.gnupg/pubring.kbx' created

上記を実行すると、暗号化に使うパスワードを 2 回聞かれるので入力しよう。

上手くいけば拡張子に .gpg のついたファイルができあがる。

$ ls
greeting.txt  greeting.txt.gpg
$ file greeting.txt.gpg
greeting.txt.gpg: GPG symmetrically encrypted data (AES cipher)

復号する

次は、先ほど暗号化したファイルを復号してみよう。

まずは、まぎらわしいので元の平文は削除しておく。

$ rm greeting.txt
$ ls
greeting.txt.gpg

そして、今回は何もオプションをつけずに gpg2 コマンドを実行して、引数には暗号化されたファイルを指定する。

$ gpg2 greeting.txt.gpg
gpg: AES encrypted data
gpg: encrypted with 1 passphrase

すると復号されたファイルができあがる。

$ ls
greeting.txt  greeting.txt.gpg

中身を見ると、ちゃんと元のファイルに戻っている。

$ cat greeting.txt
Hello, World!

ちなみに、上記を実行するとパスワードを聞かれずに復号される。 これは、どうやら暗号化したときにキャッシュ的なものがシステムに残るからのようだ。 残る先は ~/.gnupg ディレクトリの中のようなので、これを削除してから復号を試みるとちゃんとパスワードを聞かれる。

$ rm -rf ~/.gnupg/

CentOS 7 の場合

ちなみに、上記では Ubuntu 16.04 LTS を使っていたけど CentOS 7 でも同じように使える。

$ cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
$ uname -r
3.10.0-327.el7.x86_64

インストールに使うのが apt ではなく yum になるだけでパッケージ名は同じだ。

$ sudo yum -y install gnupg2