キーの作成、ファイルの暗号化と署名、およびキーサーバーへのキーの送信方法について簡単に説明します。
GPG (GnuPGとも呼ばれる)は、非フリーPGPの無料の代替として作成されました。 GPGは情報の暗号化に使用され、この問題を解決するためのさまざまなアルゴリズム(RSA、DSA、AESなど)を提供します。
GPGは対称暗号化に使用できますが、主にプログラムは情報の非対称暗号化に使用されます。 つまり、対称暗号化では、メッセージを暗号化および復号化するために単一のキーが使用されます(たとえば、どの文字が特定の文字に対応するか)。 非対称暗号化では、パブリックキーとプライベートキーの2つのキーが使用されます。 パブリックは暗号化に使用され、私たちはあなたの友人にそれを与えることができ、プライベートは復号化に使用され、あなたはそれを安全に保つ必要があります。 このスキームのおかげで、秘密鍵の所有者のみがメッセージを復号化できます(メッセージを暗号化した人でも逆の操作を実行できません)。 Wikipediaで非対称暗号化について詳しく読むことができます。
GPGのインストール
窓
Gpg4winをダウンロードしてインストールします。
GNU / Linux
ほとんどのディストリビューションでは、GNU / Linux GPGはすでにインストールされています。 インストールしていない場合は、パッケージマネージャーを使用してgnupg
パッケージをインストールするか、 ソースからコンパイルします。
Android
Androidには、GnuPG for AndroidおよびOpenKeychainプログラムがあります。 GnuPG for Androidの作成者は、OpenKeychainの使用を推奨しています。
OpenKeychain公式ウェブサイト
F-DroidのOpenKeychain
Google PlayのOpenKeychain
GnuPG for Android公式ウェブサイト
GitHubのAndroidソース用GnuPG
使用する
ここではLinuxの使用状況のみが表示されます(執筆時点では、GPGの最新バージョンは2.2.6です)
まず、ほとんどのLinuxディストリビューションにgpg
とgpg2
2つのバイナリファイルがあることを明確にする価値がありgpg2
。 私が覚えている限りでは、これらは2つの異なるバージョン:1.4.xと2.0.xであり、便利な使用のために、gpgの起動時にgpg2が実行されるようにエイリアスを作成しました。 現在、DebianおよびArch Linuxでは、 /bin/gpg2
は/bin/gpg
へのシンボリックリンクであり、このような操作の必要性はなくなりました。 file /bin/gpg2
実行してこれを確認できfile /bin/gpg2
。
それでは始めましょう!
引数なしでgpgを入力すると、必要なファイルが作成され(まだ作成されていない場合)、暗号化された情報が入力されるのを待ちます。
user@PC:~$ gpg gpg: '/home/user/.gnupg' gpg: '/home/user/.gnupg/pubring.kbx' gpg: : . , ... gpg: ...
キーがある場合は、テキストを入力し、キーの組み合わせCtrl + Dを押して、コンソールでkrakozyabの一部を取得できます。 しかし、これまでのところキーはありません。
キー作成
キーを作成するには、引数 "--full-generate-key"でGPGを実行する必要があります( "--gen-key"でも可能ですが、この場合、いくつかの重要なパラメーターを選択できません)。
UPD:引数--expert
指定してGPGを実行する場合、キータイプの選択ははるかに広くなります。 同志ニキータシウスへの追加をありがとう!
user@PC:~$ gpg --full-generate-key gpg (GnuPG) 2.2.6; Copyright (C) 2018 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 ( ) ?
user@PC:~$ gpg --full-generate-key --expert gpg (GnuPG) 2.2.6; Copyright (C) 2018 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) (7) DSA (set your own capabilities) (8) RSA (set your own capabilities) (9) ECC and ECC (10) ECC (sign only) (11) ECC (set your own capabilities) (13) Existing key Your selection?
任意のオプションを選択できますが、3番目または4番目のオプションを選択すると、メッセージとファイルを暗号化できないことに注意してください!
... ? 1 RSA 1024 4096. ? (2048)
サイズが2048ビットのRSAキーの場合は十分ですが、最大4096ビットのサイズを選択できます(2048ビットより小さいサイズのキーを使用すると安全ではありません)
... ? (2048) 2048 - 2048 . 0 = <n> = - n <n>w = - n <n>m = - n <n>y = - n ? (0)
限られたキーの有効期間を選択した場合、キーの有効期限が切れると、キーは無効になります。 有効期限が切れるまでキーを更新できます。
GPGは期限を正しく入力したかどうかを尋ねます。入力した場合は、名前、メールアドレス、メモを入力する必要があります(これはすべてオプションですが、少なくとも1つ指定する必要があります)。
... 01 1970 00:00:00 +00 ? (y/N) y GnuPG . : Habrahabr User : habr@habr.com : My own key : "Habrahabr User (My own key) <habr@habr.com>" (N), (C), (E); (O)/(Q)?
ここで編集するか、続行できます。
次に、gpgからパスワードの指定を求められます(メモリを更新し、強力なパスワードを選択するためのルールを読むことをお勧めします)。 Xサーバーを実行している場合は、パスワードを入力する必要があるダイアログボックスが表示されます。 そうでない場合、パスワードはコンソールに直接入力されます。
~/.gnupg/gpg-agent.conf
行を追加し~/.gnupg/gpg-agent.conf
。
pinentry-program /usr/bin/pinentry-tty
Pynentry-これらは同じダイアログボックスです。 ttyバージョン(コンソール)に加えて、いくつかのバージョン(グラフィカル)を試すことができます。
次に、gpg-agentを再起動します。 systemdを使用するシステムでは、これは次のように行われます。
systemd --user reload gpg-agent
... . , - ( , , ); . - -:
入力されたパスワードは、端末に表示されません。
キーの作成を高速化する役立つヒントもあります。 それに従うことをお勧めしますが、必ずしもそうする必要はありません(つまらないように非常に慎重に)。
... -: : . , - ( , , ); . gpg: /home/user/.gnupg/trustdb.gpg: gpg: 5699884482E426AC gpg: '/home/user/.gnupg/openpgp-revocs.d' gpg: '/home/user/.gnupg/openpgp-revocs.d/2BB6803FCF82316969619C155699884482E426AC.rev'. . pub rsa2048 1970-01-01 [SC] 2BB6803FCF82316969619C155699884482E426AC uid Habrahabr User (My own key) <habr@habr.com> sub rsa2048 1970-01-01 [E]
この時点で、キーが生成され、 キーチェーンに追加されます。 キーチェーンには多くのキーを含めることができます。 また、この段階で、失効証明書が作成されます-作成されたキーを失効(無効化)できるファイル。 次のように、安全な場所に保管することをお勧めします 攻撃者がアクセスすると、キーを無効にすることができます。
これらの奇妙な最後の行はすべてどういう意味ですか?
rsa -RSA暗号化アルゴリズム。
2048-キーの長さ。
1970-01-01-キーが作成された日付。
2BB680 ... E426AC-キーフィンガープリント。 他の人の公開鍵をインポートするときにチェックする必要があります-両者で同じである必要があります。
uid-識別子(ユーザーID)。
pubおよびsub-キータイプ:
pub-公開鍵。
sub-公開サブキー。
sec-秘密鍵。
ssb-シークレットサブキー。
[SC]および[E] -各キーの目的。 キーを作成すると、暗号化、復号化、署名、および署名検証用に最大4つの暗号キーを取得できます。
S-署名。
C-鍵署名(認証)。 これについては後ほど説明します。
E-暗号化。
A-認証。 たとえば、SSHで使用できます。
メッセージに署名する理由 メッセージがあなたによって書かれ、転送中に変更されなかったことを確認するため。 メッセージが変更された場合、署名の検証中にこれが示されます。
構成
構成ファイルはファイル~/.gnupg/gpg.conf
保存されます
たとえば、構成ファイルの例を次に示します。自分でインストールすることをお勧めします。
keyid-format 0xlong throw-keyids no-emit-version no-comments
keyid-format 0xlong
キー識別子の出力形式。 各キーとサブキーには独自の識別子があります。 デフォルトでは表示されず、以前はその短いバージョンが表示されていました。
利用可能な形式:
none
出力しません(デフォルト)。
short
短いエントリ。
0xshort
プレフィックスが「0x」の短いレコード。
long
長いレコード。
0xlong
プレフィックスが「0x」の長いエントリ。
throw-keyids
暗号化されたメッセージにキー情報を含めないでください。 このオプションは、メッセージの受信者を匿名化するのに役立ちます。
no-emit-version
-GPGバージョンを暗号化されたメッセージに埋め込みません。
no-comments
暗号化されたメッセージからすべてのコメントを削除します。
これらはすべて、manページにあるオプションです。 これらは、接頭辞「 --
」なしで構成ファイルに書き込まれます。
コマンドとオプション
最も基本的なもののみを説明します。
--armor
-a
-ASCII(文字)出力を生成します。 暗号化されると、GPGはデフォルトでバイナリ出力を生成します。 このオプションを使用すると、GPGは情報をRadix-64エンコード(Base64のバリエーション)でエンコードします。 このテキスト出力は、たとえば、メッセンジャーまたは電子メールで送信したり、画面に表示したりできます。
--encrypt
-e
メッセージを暗号化します。
--recipient
-r
暗号化に使用するキーを指定します。 情報ユーザー識別子(名前、メール)、キー識別子、キーフィンガープリントを使用できます。
--decrypt
-d-メッセージを復号化します。
--sign
-s
メッセージに署名します。 署名は、メッセージ自体とは別に配置されます。
--clear-sign
--clearsign
メッセージに--clearsign
します。 署名はメッセージとともに保存されます。
--local-user
-u
署名に使用するキーを指定します。 --recipient
オプションに似ていますが、 これは同じものではありません 。
--verify
署名を検証します。
--list-keys
-k
公開鍵をリストします。
--list-secret-keys
-K
秘密鍵をリストします。
--export
公開キーをファイルにエクスポートし、その後どこかに送信できます。
--import
公開鍵をインポートします。
--edit-key
編集します。
--expert
「エキスパートモード」。
例
gpg -a -r 0x12345678 -e decrypted.txt > encrypted.gpg
キー0x12345678
使用して、 0x12345678
ファイルをencrypted.gpg
ファイルにencrypted.gpg
ます。 この場合、完成したファイルはバイナリではなくテキストになります。
gpg -r 0x12345678 -d encrypted.gpg > decrypted.txt
キー0x12345678
encrypted.gpg
ファイルを復号encrypted.gpg
し、 0x12345678
ファイルに保存します。
gpg -u 0x12345678 -s message.txt > sign.asc
キー0x12345678
を使用してmessage
ファイルに署名し、 sign.asc
ファイルに署名を保存します。
gpg -r 0x12345678 --clearsign message.txt > message.gpg
0x12345678
のキーでmessage.gpg
ファイルに署名し、 message.gpg
ファイルに署名付きでメッセージを書き込みます。
gpg --verify message.asc message.txt
message.txt
ファイルに書き込まれているmessage.asc
ファイルの署名を確認します。
gpg --import pubkey.gpg
pubkey.gpg
ファイルから公開キーをインポートします。
キーの編集、外部キーへの署名、キーサーバーへのキーの送信
キーはgpg --edit-key <KeyID>
編集されます。
このコマンドを入力すると、次のように表示されます。
user@PC:~$ gpg --edit-key CCA230DA07929EB7 gpg (GnuPG) 2.2.6; Copyright (C) 2018 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. . sec rsa2048/CCA230DA07929EB7 : 2018-05-08 : : SC : : ssb rsa2048/7859E2A888E31276 : 2018-05-08 : : E [ ] (1). Habrahabr User (My own key) <habr@habr.com> gpg>
help
入力すると、使用可能なコマンドを確認できます。
ここで、さまざまなサブキーを追加し、ユーザー識別子を追加し、他の人の公開キーに署名することもできます。
キーに署名する必要があるのはなぜですか? そのため、署名されたキーの所有者が本人であることを確認できます。 このようにして、いわゆる「信頼のネットワーク」を作成します。 例:アリスはボブの公開鍵に署名し、ボブはチャーリーの公開鍵に署名しました。 アリスがチャーリーの公開鍵を受け取った場合、彼女は彼を信頼することができます。なぜなら、キーはアリスが信頼している人、つまり ボブ。 鍵の署名を取得するために、人々は公開鍵を交換して署名する特別な会議も手配します。
次に、キーサーバーについて説明します。 キーサーバーは、公開キーを格納する特別なサーバーです。 鍵サーバーは、公開鍵を配布するために使用されます。
注意! キーサーバーに送信されたキーは削除できません! キーはサーバーに残ったまま、失効証明書をサーバーにインポートすることによってのみ失効できます。
サーバーに公開鍵を送信します。
gpg --keyserver <URL> --send-keys <KeyID>
サーバーからキー識別子を持つ公開キーを取得します。
gpg --keyserver <URL> --recv-keys <KeyID>
サーバーから主要な更新を取得します。
gpg --keyserver <URL> --refresh-keys
サーバーでキーを見つけます。
gpg --keyserver <URL> --search-keys <UID KeyID>
便宜上、コマンドで登録しないようにgpg.conf
キーサーバーアドレスをgpg.conf
できgpg.conf
。
keyserver <URL>
GPGの使用が発生する可能性のある場所
Git
GPGを使用してコミットに署名できます。 そのため、コミットを行ったのはあなたであることを確認します。 GitHubでは、公開キーを台無しにすることができ、キーで署名されたコミットにはチェックマークが付きます。
UPD: Gitのドキュメントで GPGを使用するためのGit構成について読むことができます 。
他のnikitasiusからのGit構成ファイルの例を次に示します。
[commit] gpgsign = true [user] signingkey = <KeyID> [gpg] program = /bin/gpg
ディストリビューションおよびその他のファイルをダウンロードする
ディストリビューションのほとんどのインストールイメージは、署名された開発者によって配布されます。 変更した画像をアップロードすると、署名を確認するときに、画像がオリジナルではないことがすぐにわかります。 例は、人気のあるTailsディストリビューションです。
パッケージマネージャー
すべてのパッケージは、変更から保護するために開発者によって署名されています。 パッケージをインストールするときに、これらの署名が検証されます。 これはすべて、ユーザーの介入なしに自動的に行われます。
参照資料
GPGウェブサイト
GPGウィキペディアの記事
情報セキュリティとGPG専用のWebサイト
キーサーバー:
pgp.mit.edu
keyserver.pgp.com