GPGコマンドで暗号化・復号


LPIC102を学習中にGPGコマンドを初めて知ったので、実際に使用して理解を深めることにした。

環境

[ec2-user@ip-172-31-33-30 ~]$ cat /etc/os-release
NAME="Amazon Linux"
VERSION="2"
ID="amzn"
ID_LIKE="centos rhel fedora"
VERSION_ID="2"
PRETTY_NAME="Amazon Linux 2"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2"
HOME_URL="https://amazonlinux.com/"

鍵ペアの作成

gpg --gen-keyコマンドで以下のように対話形式でキーペアを作成する。
鍵の種類:デフォルトのままにする
鍵長:鍵長は長いほどセキュリティが強いので、最大にしておく。
鍵の有効期間:流出した時に、有効期限を過ぎると無効になるので設定しておく。

[ec2-user@ip-172-31-33-30 ~]$ gpg --gen-key
gpg (GnuPG) 2.0.22; Copyright (C) 2013 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

ご希望の鍵の種類を選択してください:
   (1) RSA と RSA (デフォルト)
   (2) DSA と Elgamal
   (3) DSA (署名のみ)
   (4) RSA (署名のみ)
あなたの選択は? 1
RSA 鍵は 1024 から 4096 ビットの長さで可能です。
鍵長は? (2048) 4096
要求された鍵長は4096ビット
鍵の有効期限を指定してください。
         0 = 鍵は無期限
      <n>  = 鍵は n 日間で期限切れ
      <n>w = 鍵は n 週間で期限切れ
      <n>m = 鍵は n か月間で期限切れ
      <n>y = 鍵は n 年間で期限切れ
鍵の有効期間は? (0)2y
鍵は2022年05月29日 03時48分32秒 UTCで期限切れとなります
これで正しいですか? (y/N) y

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

本名: r_saiki
電子メール・アドレス: [email protected]
コメント: 
次のユーザIDを選択しました:
    "r_saiki <[email protected]>"

名前(N)、コメント(C)、電子メール(E)の変更、またはOK(O)か終了(Q)? o
秘密鍵を保護するためにパスフレーズがいります。

パスフレーズを要求される。

作成した鍵の確認。
公開鍵の確認オプション:--list-public-keysもしくは-k
秘密鍵の確認オプション:--list-secret-keysもしくは-K

[ec2-user@ip-172-31-33-30 ~]$ gpg --list-public-keys
/home/ec2-user/.gnupg/pubring.gpg
---------------------------------
pub   4096R/0C8FB274 2020-05-29 [有効期限: 2022-05-29]
uid                  r_saiki <[email protected]>
sub   4096R/038BE8AA 2020-05-29 [有効期限: 2022-05-29]

[ec2-user@ip-172-31-33-30 ~]$ gpg --list-secret-keys
/home/ec2-user/.gnupg/secring.gpg
---------------------------------
sec   4096R/0C8FB274 2020-05-29 [有効期限: 2022-05-29]
uid                  r_saiki <[email protected]>
ssb   4096R/038BE8AA 2020-05-29

ファイルの暗号化

ファイルを暗号化する。
暗号化:--encryptもしくは-e
受取人の公開鍵情報を指定:--recipientもしくは-r <今回はメールアドレス>

[ec2-user@ip-172-31-33-30 ~]$ cat file
TEST

[ec2-user@ip-172-31-33-30 ~]$ gpg --encrypt --recipient [email protected] file
[ec2-user@ip-172-31-33-30 ~]$ ls
file  file.gpg

ファイルの複合

pgpに暗号化ファイル名で複合する。

[ec2-user@ip-172-31-33-30 ~]$ gpg file.gpg

次のユーザの秘密鍵のロックを解除するには
パスフレーズがいります:"r_saiki <[email protected]>"
4096ビットRSA鍵, ID 038BE8AA作成日付は2020-05-29 (主鍵ID 0C8FB274)

gpg: 4096-ビットRSA鍵, ID 038BE8AA, 日付2020-05-29に暗号化されました
      "r_saiki <[email protected]>"
ファイル「file」は既に存在します。上書きしますか? (y/N) y
[ec2-user@ip-172-31-33-30 ~]$ cat file
TEST

途中パスフレーズを求められる。

終わりに

今回はファイルの暗号化・復号のみやってみた。深堀するとlpic受験前に息切れしそうなので、詳しく知りたい場合は以下を参考。
GPG でファイルを暗号化, 復号化, 署名, 検証する方法