GPGでファイルの暗号化と復号化を行う

GPGのインストール

■CentOS

$ sudo yum -y install gnupg

■Ubuntu

$ sudo apt -y install gnupg

予備知識

gpgコマンドで鍵ペアの作成や公開鍵の登録を行うと、~/.gnupgに鍵データベースが作られる。

秘密鍵と公開鍵の鍵ペアの作成

公開鍵と秘密鍵のペアを創る。

$ gpg --gen-key
〜省略〜
ご希望の鍵の種類を選択してください:
   (1) RSA と RSA (デフォルト)
   (2) DSA と Elgamal
   (3) DSA (署名のみ)
   (4) RSA (署名のみ)
あなたの選択は? 1
RSA 鍵は 1024 から 4096 ビットの長さで可能です。
鍵長は? (2048) 4096
要求された鍵長は4096ビット
鍵の有効期限を指定してください。
         0 = 鍵は無期限
        = 鍵は n 日間で期限切れ
      w = 鍵は n 週間で期限切れ
      m = 鍵は n か月間で期限切れ
      y = 鍵は n 年間で期限切れ
鍵の有効期間は? (0)0
(null)は無期限です
これで正しいですか? (y/N) y

GnuPGはあなたの鍵を識別するためにユーザIDを構成する必要があります。

本名: HogeHoge
電子メール・アドレス: hogehoge@ptgm.info
コメント: 
次のユーザIDを選択しました:
    "HogeHoge <hogehoge@ptgm.info>"

たくさんのランダム・バイトの生成が必要です。キーボードを打つ、マウスを動かす、
ディスクにアクセスするなどの他の操作を素数生成の間に行うことで、乱数生成器に
十分なエントロピーを供給する機会を与えることができます。

ここで、エントロピーを手っ取り早く増大させるために、rngdコマンドを使います。
別の端末を開き、インストールとrngdコマンドの実行を行います。

$ sudo yum -y install rng-tools
$ sudo rngd -f -r /dev/urandom

しばらくすると、gpgコマンドを実行した方の端末が以下のようになります。

gpg: /home/hogehoge/.gnupg/trustdb.gpg: 信用データベースができました
gpg: 鍵F2BCA9E1を絶対的に信用するよう記録しました
公開鍵と秘密鍵を作成し、署名しました。

gpg: 信用データベースの検査
gpg: 「ギリギリの信用」3、「全面的信用」1、PGP信用モデル
gpg: 深さ: 0  有効性:   1  署名:   0  信用: 0-, 0q, 0n, 0m, 0f, 1u
pub   4096R/F2BCA9E1 2019-04-22
   フィンガー・プリント = 462C E93C 70B6 E2BA 6597  4630 A830 B381 F2BC A9E1
uid                  HogeHoge <hogehoge@ptgm.info>
sub   4096R/CE4D3505 2019-04-22

公開鍵の取り出し

$ gpg --export メールアドレス > 鍵出力ファイル

公開鍵の登録

$ gpg --import 公開鍵ファイル

ファイルの暗号化

$ gpg --encrypt --recipient メールアドレス 暗号化するファイル

ファイルの復号化

$ gpg --decrypt 暗号化されたファイル > 復元ファイル

その他のコマンド

登録されているキーを表示する。

$ gpg --list-key