Git
GitHub
gpg

GitHubにgpg署名付きのコミットをする

私の作業録の側面もあります。

参考サイト

gpgインストール

brewを使用する。

$ brew install gpg2 gpg-agent pinentry-mac

インストールされる。

gpgバージョン確認

バージョン確認する。

$ gpg --version

バージョンが出力される。

gpg (GnuPG) 2.2.8
libgcrypt 1.8.3
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: /Users/****/.gnupg
サポートしているアルゴリズム:
公開鍵: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
暗号方式: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256,
      TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256
ハッシュ: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
圧縮: 無圧縮, ZIP, ZLIB, BZIP2

鍵作成

$ gpg --full-gen-key

以下のような文言が出る。

gpg (GnuPG) 2.2.8; 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.

暗号鍵の暗号化方式を選択する。RSAとRSAが堅牢なのでオススメ。
その場合、1を入力してEnterを入力する。

ご希望の鍵の種類を選択してください:
   (1) RSA と RSA (デフォルト)
   (2) DSA と Elgamal
   (3) DSA (署名のみ)
   (4) RSA (署名のみ)
あなたの選択は? 1

RSA鍵を作成する際の、鍵長を選択する。鍵長は長い方が堅牢なので、最大の4096がオススメ。
その場合、4096を入力してEnterを入力する。

RSA 鍵は 1024 から 4096 ビットの長さで可能です。
鍵長は? (2048) 4096
要求された鍵長は4096ビット

鍵の有効期限を選択する。
無期限の場合、0を入力してEnterを入力する。

鍵の有効期限を指定してください。
         0 = 鍵は無期限
      <n>  = 鍵は n 日間で期限切れ
      <n>w = 鍵は n 週間で期限切れ
      <n>m = 鍵は n か月間で期限切れ
      <n>y = 鍵は n 年間で期限切れ
鍵の有効期間は? (0)0
鍵は無期限です

例として2日であれば、2を入力してEnterを入力する。

鍵の有効期限を指定してください。
         0 = 鍵は無期限
      <n>  = 鍵は n 日間で期限切れ
      <n>w = 鍵は n 週間で期限切れ
      <n>m = 鍵は n か月間で期限切れ
      <n>y = 鍵は n 年間で期限切れ
鍵の有効期間は? (0)2
鍵は月  6/18 20:22:01 2018 JSTで期限切れとなります

入力した内容が良いかどうかの確認が入る。
yを入力してEnterを入力する。

これで正しいですか? (y/N) y

作成するユーザの情報を求められる。

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

名前の入力。5文字に満たないと入力を拒否される。

本名: ****

メールアドレスの入力。

電子メール・アドレス: ****@****

コメントの入力。空のままEnterしても良い。

コメント:                                        

作成したユーザ情報が改めて文言として表示される。間違いがないか確認。

次のユーザIDを選択しました:
    "**** <****@****>"

最終確認が求められるので、間違いがないか確認。
問題なく、鍵の作成に入るなら、Oを入力してEnterを入力する。

名前(N)、コメント(C)、電子メール(E)の変更、またはOK(O)か終了(Q)? O

パスフレーズを求められる。筆者の環境はmacOS High Sierraだが、ここのみ文言が文字化けした。パスフレーズは初回入力と、確認入力の2回が求められる。文字化けをそのまま貼っても良かったけど、何かあったら嫌なので伏せ字にしておく。
パスフレーズを入力して、Enterを入力する。

1回目。

┌──────────────────────────────────────────────────────────────┐
│ mojibake                                                     │
│ mojibakemojibakemojibakemojibake
│                                                              │
│ mojibakemojibakemojibake****************************_________
│                                                              │
│         <OK>                            <mojibake>
└──────────────────────────────────────────────────────────────┘

2回目。

┌──────────────────────────────────────────────────────────────────┐
│ mojibakemojibakemojibakemojibake
│                                                                  │
│ mojibakemojibakemojibake****************************_________
│                                                                  │
│         <OK>                                <mojibake>
└──────────────────────────────────────────────────────────────────┘

鍵作成はある程度時間がかかる可能性がある。しばらく待つ。

たくさんのランダム・バイトの生成が必要です。キーボードを打つ、マウスを動か               
す、ディスクにアクセスするなどの他の操作を素数生成の間に行うことで、乱数生
成器に十分なエントロピーを供給する機会を与えることができます。
たくさんのランダム・バイトの生成が必要です。キーボードを打つ、マウスを動か
す、ディスクにアクセスするなどの他の操作を素数生成の間に行うことで、乱数生
成器に十分なエントロピーを供給する機会を与えることができます。

鍵作成が完了する。

gpg: /Users/****/.gnupg/trustdb.gpg: 信用データベースができました
gpg: 鍵****を究極的に信用するよう記録しました
gpg: ディレクトリ'/Users/****/.gnupg/openpgp-revocs.d'が作成されました
gpg: 失効証明書を '/Users/****/.gnupg/openpgp-revocs.d/****.rev' に保管しました。
公開鍵と秘密鍵を作成し、署名しました。

pub   rsa4096 2018-06-16 [SC]
      ****
uid                      **** <****@****>
sub   rsa4096 2018-06-16 [E]

鍵作成 確認

秘密鍵の確認。

$ gpg --list-secret-keys

秘密鍵の一覧が出力される。

/Users/****/.gnupg/pubring.kbx
------------------------------
sec   rsa4096 2018-06-16 [SC]
      ****
uid           [  究極  ] **** <****@****>
ssb   rsa4096 2018-06-16 [E]

GitHubへの鍵登録

GitHubへ登録する公開鍵を確認

公開鍵を表示するための、鍵IDを確認。

$ gpg --list-secret-keys --keyid-format LONG

秘密鍵が表示される。鍵IDの部分を確認。

/Users/****/.gnupg/pubring.kbx
------------------------------
sec   rsa4096/<鍵ID> 2018-06-16 [SC]
      ****
uid                 [  究極  ] **** <****@****>
ssb   rsa4096/**** 2018-06-16 [E]

鍵IDを使って、公開鍵を確認する。

$ gpg --armor --export <鍵ID>

公開鍵が表示される。

-----BEGIN PGP PUBLIC KEY BLOCK-----

<公開鍵の長い文字列>
-----END PGP PUBLIC KEY BLOCK-----

-----BEGIN PGP PUBLIC KEY BLOCK----------END PGP PUBLIC KEY BLOCK-----までを含めて、クリップボードにコピーする。

GitHubへ公開鍵を登録

  1. https://github.com/settings/keys にアクセスし、鍵登録ページを開く
  2. GPG keys部分のNew GPG Keyのボタンをクリック
  3. コピーした公開鍵をテキストエリアに貼り付ける
  4. Add GPG keyのボタンをクリック
  5. 登録完了

PC上のGitへ鍵情報を反映

Gitに鍵を登録。

$ cd <Gitリポジトリをクローンしたディレクトリ>
$ git config --global gpg.program gpg
$ git config --global user.signingkey <鍵ID>

署名付きコミットを作成してプッシュする。

$ git commit -m "コミットメッセージ" -S

コマンド入力後、GPGの鍵作成で設定した、パスフレーズを求められる。この時も入力画面は文字化けしていた。

以降、全てのコミットで署名を有効にする。

$ git config --global commit.gpgsign true

以降全てのコミットはIntelliJ IDEA上からだった押しても、署名が付く。

もしその後、全てのコミットで署名を使わないなら、描きを実行。

$ git config --global commit.gpgsign false