はじめに
この実験では、安全な通信やソフトウェア配布の基本的なステップである、gpg コマンドを使用して署名キーペアを生成する方法を学びます。指定されたキーサイズと有効期間で新しい RSA キーペアを生成し、その過程で必要なユーザー ID 情報を提供します。
キー生成後、新しいキーのパスフレーズを入力して確認する方法を学びます。これは重要なセキュリティ対策です。次に、生成された公開キーファイルを検証してその正しさを確認します。最後に、特定のディレクトリにキーペアを生成する方法を探り、キー管理の柔軟性を実証します。
新しい署名キーペアを生成する
このステップでは、gpg コマンドを使用して新しい署名キーペアを生成する方法を学びます。署名キーペアは秘密鍵と公開鍵で構成されています。秘密鍵はデータに署名するために使用され、公開鍵は署名を検証するために使用されます。これは、安全な通信やソフトウェア配布における基本的な概念です。
まず、ターミナルを開きます。すでに ~/project ディレクトリにいます。
新しいキーペアを生成するには、次のコマンドを使用します。
gpg --full-generate-key
コマンドを実行すると、生成するキーの種類を選択するように促されます。この実験では、デフォルトのオプションである RSA and RSA を使用します。Enter キーを押してデフォルトを受け入れます。
gpg (GnuPG) 2.2.27; Copyright (C) 2021 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.
Please select what kind of key you want:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
Your selection? 1
次に、キーサイズについて尋ねられます。キーサイズが大きいほどセキュリティが高まりますが、生成や使用に時間がかかります。この実験では、デフォルトの 3072 ビットのキーサイズを使用します。Enter キーを押してデフォルトを受け入れます。
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (3072)
次に、キーの有効期間を尋ねられます。この実験では、キーの有効期間を 1 年に設定します。1y と入力して Enter キーを押します。
Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0) 1y
表示された日付でキーが期限切れになることを確認するには、y と入力して Enter キーを押します。
Key expires at ...
Is this correct? (y/N) y
ここで、ユーザー ID 情報を提供する必要があります。この情報は公開鍵に関連付けられ、他の人があなたを識別するのに役立ちます。
まず、あなたの本名を入力します。この実験では、LabEx User を使用できます。LabEx User と入力して Enter キーを押します。
Real name: LabEx User
次に、あなたのメールアドレスを入力します。この実験では、user@labex.io を使用できます。user@labex.io と入力して Enter キーを押します。
Email address: user@labex.io
必要に応じてコメントを追加できます。この実験では、コメント欄を空白のままにします。Enter キーを押してコメントをスキップします。
Comment:
入力した情報を確認します。正しければ、O(Okay)と入力して Enter キーを押します。変更が必要な場合は、C(Change)または Q(Quit)と入力します。
You selected this USER-ID:
"LabEx User <user@labex.io>"
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
最後に、秘密鍵を保護するためのパスフレーズを入力するように促されます。これは重要なセキュリティステップです。覚えやすい強力なパスフレーズを選んでください。次のステップでこのパスフレーズを再度入力する必要があります。
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator more entropy.
その後、システムがキーペアを生成します。これには少し時間がかかる場合があります。
新しいキーのパスフレーズを入力して確認する
前のステップで、新しい GPG キーペアの生成プロセスを開始しました。このプロセスの最後のステップは、秘密鍵のパスフレーズを入力して確認することです。このパスフレーズは、秘密鍵を不正使用から保護するために不可欠です。
ここで、パスフレーズを入力するように求めるダイアログボックスまたはターミナルのプロンプトが表示されるはずです。
┌─────────┤ Please enter the passphrase to protect your new key ├─────────┐
│ │
│ Passphrase: _________________________________________ │
│ │
│ <OK> <Cancel> │
│ │
└─────────────────────────────────────────────────────────────────────────┘
「Passphrase」フィールドに強力なパスフレーズを入力してください。このパスフレーズは、秘密鍵を使用するたびに(例えば、署名するとき)必要になるため、覚えておいてください。この実験では、mypassphrase123 のような簡単なパスフレーズを使用できます。mypassphrase123 と入力して、Enter キーを押すか、<OK> をクリックします。
次に、パスフレーズを再度入力して確認するように求められます。これにより、パスフレーズを正しく入力したことを確認できます。
┌─────────┤ Please re-enter the passphrase to protect your new key ├─────────┐
│ │
│ Repeat passphrase: _________________________________________ │
│ │
│ <OK> <Cancel> │
│ │
└──────────────────────────────────────────────────────────────────────────┘
「Repeat passphrase」フィールドに同じパスフレーズ (mypassphrase123) を再度入力して、Enter キーを押すか、<OK> をクリックします。
パスフレーズを確認した後、GPG はキーペアの生成を完了します。キー生成が完了したことを示す、次のような出力が表示されるはずです。
gpg: key ... marked as ultimately trusted
gpg: revocation certificate stored as '/home/labex/.gnupg/openpgp-revocs.d/....rev'
public and secret key created and signed.
pub rsa3072 2023-10-27 [SC]
...
uid [ultimate] LabEx User <user@labex.io>
sub rsa3072 2023-10-27 [E]
この出力には、新しく生成されたキーに関する情報が表示されます。キーの種類 (rsa3072)、作成日、キー ID (...)、および提供したユーザー ID (LabEx User <user@labex.io>) が含まれます。pub 行は公開鍵を指し、sub 行はサブキー(暗号化に使用されます)を指します。
これで、GPG キーペアを正常に生成し、パスフレーズで秘密鍵を保護しました。
生成された公開鍵ファイルを確認する
前のステップで、GPG キーペアを正常に生成しました。次に、公開鍵が正しく生成され、利用可能であることを検証しましょう。公開鍵は、他の人に署名を検証してもらったり、あなた宛のメッセージを暗号化してもらったりするために共有するものです。
キーリング内の公開鍵を一覧表示するには、gpg --list-keys コマンドを使用します。キー生成時に名前として「LabEx User」を指定したので、出力をフィルタリングして自分のキーのみを表示できます。
gpg --list-keys "LabEx User"
以下のような出力が表示され、公開鍵が存在することが確認できます。
pub rsa3072 2023-10-27 [SC]
...
uid [ultimate] LabEx User <user@labex.io>
sub rsa3072 2023-10-27 [E]
この出力には、公開鍵の詳細が表示されます。キーの種類 (pub)、アルゴリズム (rsa3072)、作成日 (2023-10-27)、機能 ([SC] は署名と認証)、キー ID (...)、ユーザー ID (LabEx User <user@labex.io>)、および暗号化サブキーに関する情報 (sub) が含まれます。
公開鍵をファイルにエクスポートするには、gpg --output <filename> --armor --export <user ID> コマンドを使用できます。--armor オプションを使用すると、キーが人間が読めるテキスト形式である ASCII アーマード形式で出力されます。現在のディレクトリ (~/project) に labex_user_public.key という名前のファイルに「LabEx User」の公開鍵をエクスポートしましょう。
gpg --output labex_user_public.key --armor --export "LabEx User"
このコマンドにより、~/project ディレクトリに公開鍵を含む labex_user_public.key という名前のファイルが作成されます。
cat コマンドを使用してこのファイルの内容を表示できます。
cat labex_user_public.key
出力には、-----BEGIN PGP PUBLIC KEY BLOCK----- で始まり、-----END PGP PUBLIC KEY BLOCK----- で終わる ASCII アーマード形式の公開鍵ブロックが表示されます。
-----BEGIN PGP PUBLIC KEY BLOCK-----
... (your public key content) ...
-----END PGP PUBLIC KEY BLOCK-----
これにより、公開鍵が正常にファイルにエクスポートされたことが確認できます。このファイルを、あなたの署名を検証したり、あなた宛のデータを暗号化したりする必要がある人と共有することができます。
指定ディレクトリにキーペアを生成する
前のステップで、GPG キーペアを生成し、それはデフォルトの GPG ホームディレクトリ (~/.gnupg) に保存されました。場合によっては、特定のプロジェクト用やメインのキーリングと分けて管理するために、キーを別の場所に生成して保存したいことがあります。
このステップでは、GPG キーペアを生成し、キーファイルを保存する別のディレクトリを指定する方法を学びます。
まず、新しいキーペアを保存する新しいディレクトリを作成しましょう。~/project ディレクトリ内に mykeys という名前のディレクトリを作成します。
mkdir ~/project/mykeys
次に、キーペアを生成して ~/project/mykeys ディレクトリに保存するには、gpg コマンドに --homedir オプションを使用する必要があります。このオプションは、GPG にデフォルトのホームディレクトリの代わりに指定したディレクトリを使用するよう指示します。
以下のコマンドを使用して、~/project/mykeys ディレクトリを指定してキー生成プロセスを開始します。
gpg --homedir ~/project/mykeys --full-generate-key
ステップ 1 とステップ 2 と同じキー生成プロセスが案内されます。
- Select the kind of key:
Enterキーを押して、デフォルトのRSA and RSAを選択します。 - What keysize do you want?
Enterキーを押して、デフォルトの3072を選択します。 - Key is valid for?
1yと入力して、Enterキーを押して 1 年間の有効期限を設定します。 - Is this correct?
yと入力して、Enterキーを押します。 - Real name:
Project Userと入力して、Enterキーを押します。 - Email address:
projectuser@labex.ioと入力して、Enterキーを押します。 - Comment:
Enterキーを押して空白のままにします。 - Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit?
Oと入力して、Enterキーを押します。 - Enter passphrase: パスフレーズ(例:
projectpassphrase456)を入力して、Enterキーを押します。 - Repeat passphrase: 同じパスフレーズ (
projectpassphrase456) を再度入力して、Enterキーを押します。
これらの手順を完了すると、GPG はキーペアを生成し、必要なファイルを ~/project/mykeys ディレクトリ内に保存します。
指定したディレクトリでキーが生成されたことを確認するには、そのホームディレクトリ内のキーを一覧表示します。
gpg --homedir ~/project/mykeys --list-keys "Project User"
以下のような出力が表示され、新しく生成したキーが表示されます。
gpg: directory '/home/labex/project/mykeys' created
gpg: keybox '/home/labex/project/mykeys/pubring.kbx' created
pub rsa3072 2023-10-27 [SC]
...
uid [ultimate] Project User <projectuser@labex.io>
sub rsa3072 2023-10-27 [E]
~/project/mykeys 内に GPG ディレクトリとキーボックスが作成されたことを示す行に注意してください。これにより、キーが指定した場所に生成されたことが確認できます。
まとめ
この実験では、gpg コマンドを使用して新しい署名用キーペアを生成する方法を学びました。このプロセスには、キーの種類(デフォルトでは RSA と RSA)の選択、キーサイズ(デフォルトでは 3072 ビット)の指定、およびキーの有効期限(この実験では 1 年に設定)の設定が含まれます。また、新しいキーのパスフレーズを入力して確認し、秘密鍵を保護する方法も学びました。最後に、生成された公開鍵ファイルを検証し、指定したディレクトリにキーペアを生成する方法を調べ、安全な通信とソフトウェア配布のための秘密鍵と公開鍵の基本概念を理解しました。



