GPG鍵を作る
WIP太郎
GPGってなに
OpenPGPの実装.
署名とか暗号化とか証明書とか扱えるソフトウェア.
メールの暗号署名,gitのコミットの署名,sshの鍵にするなどができる.
Master key と Sub key
Master key
その名の通り,大元になる鍵.アイデンティティ(名前やメアドなど)はこれに紐付けられる.これが漏洩すると,容易になりすましができてしまうので,基本的にはMaster keyで署名したSub keyを普段使いにし,Master keyは失効などの用途のためにPCから取り除いて,CDに保存したりして大切に保管する.
Sub key
Master keyによって署名された,Master keyと同等の認証情報を持つ鍵.これが漏洩してもMaster keyの情報が漏洩するわけではないのでダメージが小さいうえ,Master keyによって失効させることができるため,漏洩リスクが比較的小さい.機能ごとにSub keyを分けてリスク分散することが多い.
Master keyの生成
まず鍵の種類を選択する.当然楕円曲線暗号(ECC)を使う.
code: console
$ gpg --expert --full-gen-key
gpg (GnuPG) 2.1.15; Copyright (C) 2016 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 (署名のみ)
(7) DSA (機能をあなた自身で設定)
(8) RSA (機能をあなた自身で設定)
(9) ECC と ECC
(10) ECC (署名のみ)
(11) ECC (機能をあなた自身で設定)
あなたの選択は? 11
--expert, --full-gen-key でないと楕円曲線暗号(ECC) の選択肢がでないので注意.
次に鍵の機能を選択する.
code: console
鍵ECDSA/EdDSAに認められた操作: Sign Certify Authenticate
現在の認められた操作: Sign Certify
(S) 署名機能を反転する
(A) 認証機能を反転する
(Q) 完了
あなたの選択は? s
鍵ECDSA/EdDSAに認められた操作: Sign Certify Authenticate
現在の認められた操作: Certify
(S) 署名機能を反転する
(A) 認証機能を反転する
(Q) 完了
あなたの選択は? q
Master keyは必要最低限,つまりは認証機能(Certify)だけあればよいので,署名機能を反転しておく.(機能の反転ってどういうことやねん)
次に,楕円曲線の種類を選ぶ.NISTは避ける.
code: console
ご希望の楕円曲線を選択してください:
(1) Curve 25519
(3) NIST P-256
(4) NIST P-384
(5) NIST P-521
(6) Brainpool P-256
(7) Brainpool P-384
(8) Brainpool P-512
(9) secp256k1
あなたの選択は? 1
Curve25519で良いだろう.
次に鍵の有効期限を設定する.
code: console
鍵の有効期限を指定してください。
0 = 鍵は無期限
<n> = 鍵は n 日間で期限切れ
<n>w = 鍵は n 週間で期限切れ
<n>m = 鍵は n か月間で期限切れ
<n>y = 鍵は n 年間で期限切れ
鍵の有効期間は? (0) 1y
(null)は無期限です
これで正しいですか? (y/N) y
半年から2年くらいが一般的か要出典.ローテーションが自動でできるような場合であれば,有効期限は短いほうが推奨される. 最後に情報を入力する.
code: console
GnuPGはあなたの鍵を識別するためにユーザIDを構成する必要があります。
本名: hoge
電子メール・アドレス: hoge@gmail.com
コメント:
次のユーザIDを選択しました:
"hoge (コメント) hoge@gmail.com"
名前(N)、コメント(C)、電子メール(E)の変更、またはOK(O)か終了(Q)? q
gitやGitHubの検証機能を使う場合は,ここで設定したメールアドレスがgitやGitHubに登録されていることが要求されるので注意.
code: console
たくさんのランダム・バイトの生成が必要です。キーボードを打つ、マウスを動か
す、ディスクにアクセスするなどの他の操作を素数生成の間に行うことで、乱数生
成器に十分なエントロピーを供給する機会を与えることができます。
gpg: 鍵YYYYYYYYYYYYYYYYを究極的に信用するよう記録しました
gpg: 失効証明書を '/home/lugendre/.gnupg/openpgp-revocs.d/XXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYY.rev' に保管しました。
公開鍵と秘密鍵を作成し、署名しました。
XXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYY
uid hoge hoge@gmail.com
これでMaster keyはできあがり.
XXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYがMaster keyのIDになる.
Sub keyの生成