序章

GPG(GNU Privacy Guard)は、公開鍵暗号化の実装です。 これにより、当事者間での情報の安全な送信が可能になり、メッセージの発信元が本物であることを確認するために使用できます。

このガイドでは、GPGの仕組みと実装方法について説明します。 このデモではUbuntu16.04サーバーを使用しますが、他のディストリビューションの手順も含まれます。

公開鍵暗号化のしくみ

多くのユーザーが直面する問題は、安全に通信し、話している相手の身元を検証する方法です。 この質問に答えようとする多くのスキームでは、少なくともある時点で、安全でない媒体を介したパスワードまたはその他の識別資格情報の転送が必要です。

意図した当事者だけが読むことができることを確認してください

この問題を回避するために、GPGは公開鍵暗号化と呼ばれるセキュリティの概念に依存しています。 アイデアは、送信の暗号化と復号化の段階を2つの別々の部分に分割できるということです。 そうすれば、復号化部分を保護する限り、暗号化部分を自由に配布できます。

これにより、誰でも作成および暗号化できる一方向のメッセージ転送が可能になりますが、指定されたユーザー(秘密の復号化キーを持つユーザー)のみが復号化できます。 両方の当事者が公開鍵と秘密鍵のペアを作成し、お互いに公開暗号化キーを与える場合、両者はお互いにメッセージを暗号化できます。

したがって、このシナリオでは、各当事者が独自の秘密鍵と他のユーザーの公開鍵を持っています。

送信者の身元を確認する

このシステムのもう1つの利点は、メッセージの送信者が秘密鍵を使用してメッセージに「署名」できることです。 受信者が持っている公開鍵を使用して、指定されたユーザーが署名を実際に送信していることを確認できます。

GPGキーを設定する

GPGは、ほとんどのディストリビューションにデフォルトでインストールされています。

何らかの理由でGPGがインストールされていない場合は、UbuntuおよびDebianで、ローカルリポジトリインデックスを更新し、次のように入力してインストールできます。

  1. sudo apt-get update
  2. sudo apt-get install gnupg

CentOS では、次のように入力してGPGをインストールできます。

  1. sudo yum install gnupg2

GPGを使用して通信を暗号化するには、キーペアを作成する必要があります。 これを行うには、次のコマンドを発行します。

  1. gpg --gen-key

これにより、キーを構成するいくつかの質問に答えることができます。

  • 必要なキーの種類を選択してください:(1)RSAおよびRSA(デフォルト)
  • どのキーサイズが必要ですか? 4096
  • キーは有効ですか? 1y (1年後に有効期限が切れます。 テストしているだけの場合は、代わりに「3」のような数字を使用して、最初に短命のキーを作成することをお勧めします。)
  • これは正しいです? y
  • 本名:本名はこちら
  • メールアドレス: [email protected]
  • コメント:署名に表示されるオプションのコメント
  • (N)ame、©omment、(E)mail、または(O)kay /(Q)uitを変更しますか? O
  • パスフレーズを入力してください: ここに安全なパスフレーズを入力します(大文字と小文字、数字、記号)

この時点で、 gpg エントロピーを使用してキーを生成します。 エントロピーは、システムに存在する予測不可能性と非決定性の量を表します。 GPGは、安全なキーのセットを生成するためにこのエントロピーを必要とします。

システムのアクティブ度と選択したキーサイズによっては、このプロセスに時間がかかる場合があります。 追加のエントロピーをより簡単に生成するために、havegedと呼ばれるツールを使用できます。 新しい端末を開き、サーバーにSSHで接続してセットアップします haveged サーバー上で。

失効証明書を作成する

セキュリティ違反が発生した場合、または秘密鍵を紛失した場合に備えて、鍵ペアを無効にする方法が必要です。 GPGソフトウェアでこれを行う簡単な方法があります。

これは、必要なときではなく、キーペアを作成したらすぐに実行する必要があります。 この失効キーは、事前に生成し、コンピューターが危険にさらされたり操作できなくなったりした場合に備えて、安全な別の場所に保管する必要があります。 失効キーを生成するには、次のように入力します。

  1. gpg --output ~/revocation.crt --gen-revoke [email protected]

失効キーの作成を確認するように求められ、その後、失効する理由の入力を求められます。 この情報は、将来失効が使用された場合に他のユーザーに表示されます。 利用可能なオプションのいずれかを選択できますが、これは事前に行われているため、詳細はわかりません。 多くの場合、最大限の柔軟性を実現するために、考えられるシナリオごとに失効証明書を作成することをお勧めします。

その後、コメントを入力し、最後に選択を確認するように求められます。 失効証明書を作成する前に、GPGキーのパスフレーズを入力してIDを確認する必要があります。 失効証明書は、 --output 国旗 (revocation.crt この例では):

Output
Revocation certificate created. Please move it to a medium which you can hide away; if Mallory gets access to this certificate he can use it to make your key unusable. It is smart to print this certificate and store it away, just in case your media become unreadable. But have some caution: The print system of your machine might store the data and make it available to others!

不正アクセスを防ぐために、生成された証明書ファイルのアクセス許可をすぐに制限する必要があります。

  1. chmod 600 ~/revocation.crt

他のユーザーがあなたのキーを取り消すことができないように、失効証明書は安全に保つ必要があります。 メッセージに記載されているように、適切に保護できる限り、証明書を他のマシンにバックアップして印刷することを検討する必要があります。

他のユーザーの公開鍵をインポートする方法

通信したい人から他の公開鍵を受け入れることができなければ、GPGはかなり役に立たないでしょう。

誰かの公開鍵をさまざまな方法でインポートできます。 テキストファイルで誰かから公開鍵を取得した場合、GPGは次のコマンドで公開鍵をインポートできます。

  1. gpg --import name_of_pub_key_file

また、通信したい相手が自分の鍵を公開鍵サーバーにアップロードしている可能性もあります。 これらのキーサーバーは、世界中の人々の公開キーを収容するために使用されます。

情報を他のさまざまなサーバーと同期する一般的なキーサーバーは、MIT公開キーサーバーです。 Webブラウザでここにアクセスすると、名前または電子メールアドレスで人を検索できます。

https://pgp.mit.edu/

次のように入力して、GPG内からキーサーバーを検索することもできます。

  1. gpg --keyserver pgp.mit.edu --search-keys search_parameters

名前またはメールアドレスで検索するこの方法を使用できます。 プロンプトに従って、見つけたキーをインポートできます。

キーを確認して署名する方法

生成された公開鍵ファイルを自由に配布でき、人々はこれを使用して安全な方法であなたに連絡できますが、最初の公開鍵の送信時に鍵が自分の考えている人物のものであると信頼できることが重要です。

他の人の身元を確認する

あなたに公開鍵を与える人が彼らが彼らが言っている人であることをどうやって知っていますか? 場合によっては、これは単純なこともあります。 ラップトップを開いてキーを交換している人のすぐ隣に座っている可能性があります。 これは、正しい正当なキーを受け取っていることを識別するための非常に安全な方法です。

しかし、そのような個人的な接触が不可能な他の多くの状況があります。 あなたは相手を個人的に知らないかもしれません、あるいはあなたは物理的な距離によって隔てられているかもしれません。 安全でないチャネルを介して通信したくない場合は、公開鍵の検証が問題になる可能性があります。

幸いなことに、両方の当事者の公開キー全体を検証する代わりに、これらのキーから派生した「指紋」を単純に比較できます。 これにより、両方が同じ公開鍵情報を使用していることが合理的に保証されます。

次のように入力すると、公開鍵のフィンガープリントを取得できます。

  1. gpg --fingerprint [email protected]
Output
pub 4096R/311B1F84 2013-10-04 Key fingerprint = CB9E C70F 2421 AF06 7D72 F980 8287 6A15 311B 1F84 uid Test User <[email protected]> sub 4096R/8822A56A 2013-10-04

これにより、比較するためのはるかに管理しやすい数値の文字列が生成されます。 この文字列を、その人自身、またはその人にアクセスできる他の人と比較できます。

彼らの鍵に署名する

キーに署名すると、提供されたキーを信頼し、問題の人物に関連付けられていることを確認したことがソフトウェアに通知されます。

インポートしたキーに署名するには、次のように入力します。

  1. gpg --sign-key [email protected]

あなたが鍵に署名するとき、それはあなたがその人が彼らが主張する人であるとあなたが信頼していることを確認することを意味します。 これは、他の人もその人を信頼するかどうかを決定するのに役立ちます。 誰かがあなたを信頼していて、あなたがこの人の鍵に署名したことを彼らが見た場合、彼らも彼らの身元を信頼する可能性が高くなります。

署名したキーを持っている人に、署名したキーを返送して、信頼できる関係を利用できるようにする必要があります。 これを行うには、次のように入力します。

  1. gpg --output ~/signed.key --export --armor [email protected]

パスフレーズをもう一度入力する必要があります。 その後、あなたが署名した公開鍵が表示されます。 彼らにこれを送ってください。そうすれば、彼らは他の人と交流するときにあなたの「承認のスタンプ」を得ることができます。

この新しい署名付きキーを受け取ると、それをインポートして、生成した署名情報をGPGデータベースに追加できます。 次のように入力してこれを行うことができます。

  1. gpg --import ~/signed.key

これで、あなたが自分の身元が正しいことを信頼していることを他の人に示すことができます。

公開鍵を高可用性にする方法

公開鍵暗号化の設計方法により、未知の人があなたの公開鍵を持っている場合に発生する可能性のある悪意のあるものは何もありません。

これを念頭に置いて、公開鍵を公開することが有益な場合があります。 その後、人々はあなたの情報を見つけて、あなたの最初のやりとりから安全にメッセージを送信することができます。

GPGシステムから公開鍵を要求することにより、誰にでも公開鍵を送信できます。

  1. gpg --output ~/mygpg.key --armor --export [email protected]
Output
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.4.11 (GNU/Linux) mQINBFJPCuABEACiog/sInjg0O2SqgmG1T8n9FroSTdN74uGsRMHHAOuAmGLsTse 9oxeLQpN+r75Ko39RVE88dRcW710fPY0+fjSXBKhpN+raRMUKJp4AX9BJd00YA/4 EpD+8cDK4DuLlLdn1x0q41VUsznXrnMpQedRmAL9f9bL6pbLTJhaKeorTokTvdn6 5VT3pb2o+jr6NETaUxd99ZG/osPar9tNThVLIIzG1nDabcTFbMB+w7wOJuhXyTLQ JBU9xmavTM71PfV6Pkh4j1pfWImXc1D8dS+jcvKeXInBfm2XZsfOCesk12YnK3Nc u1Xe1lxzSt7Cegum4S/YuxmYoh462oGZ7FA4Cr2lvAPVpO9zmgQ8JITXiqYg2wB3 . . .

その後、このファイルを適切な媒体を介して相手に送信できます。

キーをキーサーバーに公開する場合は、ほとんどのサーバーサイトで利用可能なフォームを使用して手動で公開できます。

もう1つのオプションは、GPGインターフェイスを介してこれを行うことです。 次のように入力して、キーIDを検索します。

  1. gpg --list-keys [email protected]

以下の出力で強調表示されている部分はキーIDです( pub どちらを使用するかわからない場合は、左側の列に沿って)。 これは、キーを内部ソフトウェアに参照するための簡単な方法です。

Output
pub 4096R/311B1F84 2013-10-04 uid Test User <[email protected]> sub 4096R/8822A56A 2013-10-04

キーを特定のキーサーバーにアップロードするには、次の構文を使用できます。

  1. gpg --send-keys --keyserver pgp.mit.edu key_id

キーは指定されたサーバーにアップロードされます。 その後、世界中の他の主要なサーバーに配布される可能性があります。

GPGを使用したメッセージの暗号化と復号化

キーを相手と共有した後は、メッセージを簡単に暗号化および復号化できます。

メッセージを暗号化する

GPGの「–encrypt」フラグを使用してメッセージを暗号化できます。 基本的な構文は次のとおりです。

  1. gpg --encrypt --sign --armor -r [email protected] name_of_file

これにより、受信者の公開鍵を使用してメッセージが暗号化され、自分からの送信であることを保証するために独自の秘密鍵で署名され、生のバイトではなくテキスト形式でメッセージが出力されます。 ファイル名は入力ファイル名と同じになりますが、 .asc 拡大。

暗号化されたメッセージを読み取れるようにする場合は、自分の電子メールアドレスを持つ2番目の「-r」受信者を含める必要があります。 これは、メッセージが各人の公開鍵で暗号化され、関連付けられた秘密鍵でのみ復号化できるためです。

したがって、相手の公開鍵のみで暗号化されている場合は、何らかの方法で相手の秘密鍵を取得しない限り、メッセージを再度表示することはできません。 2番目の受信者として自分を追加すると、受信者ごとに1つずつ、2回に分けてメッセージが暗号化されます。

メッセージの復号化

メッセージを受信したら、メッセージファイルでGPGを呼び出すだけです。

  1. gpg file_name.asc

ソフトウェアは必要に応じてプロンプトを表示します。

ファイルの代わりに生のテキストストリームとしてメッセージがある場合は、入力後にコピーして貼り付けることができます gpg 引数なし。 「CTRL-D」を押してメッセージの終わりを示すことができ、GPGがメッセージを復号化します。

キーメンテナンス

キーデータベースを管理するために定期的に使用する必要のある手順がいくつかあります。

他の人から持っている利用可能なGPGキーを一覧表示するには、次のコマンドを発行できます。

  1. gpg --list-keys

公開鍵サーバーから取得した情報に依存している場合、鍵情報が古くなる可能性があります。 取り消されたキーに依存することは望ましくありません。これは、侵害された可能性のあるキーを信頼していることを意味するためです。

次のコマンドを発行して、キー情報を更新できます。

  1. gpg --refresh-keys

これにより、キーサーバーから新しい情報が取得されます。

以下を使用して、特定のキーサーバーから情報を取得できます。

  1. gpg --keyserver key_server --refresh-keys

キーサーバーでキーが見つからない場合は、エラーメッセージが表示されることがあります。

結論

GPGを正しく使用すると、さまざまな人との通信を保護するのに役立ちます。 これは、特に機密情報を扱う場合だけでなく、定期的な日常のメッセージングを扱う場合にも非常に役立ちます。

監視プログラムによって特定の暗号化された通信にフラグを立てることができる方法のため、「秘密の」データだけでなく、すべてに暗号化を使用することをお勧めします。 これにより、重要なデータを送信しているのか、友好的な挨拶を送信しているのかを人々が知るのが難しくなります。