2019年8月4日日曜日

GitHubでVerifiedマーク

GitHubでこういうマークあるじゃないですか。
ちょっとかっこいいので作ってみることにしました。

この正体は何?

まずそももそもこれは何なのかというと、デジタル署名です。
Gitにはコミットやタグにデジタル署名をつける機能があり、GitHubに公開鍵を登録しておくと署名付きのコミットに上の画像のようなマークがつきます。

デジタル署名はGnuPGで作成できます。
以下ではLinuxでの具体的な手順を書きます。macOSでも、GnuPGのインストール以外は多分共通だと思います(未検証)

ここではデジタル署名そのものについて詳しく説明しませんので、詳しく知りたい人はWikipediaあたりをご参照あれ。

GnuPGのインストール

まずはGnuPGをインストール。Ubuntuならこれで。
sudo apt install gnupg gnupg2
わざわざUbuntu以外を使う人はきっと自分で調べられるはず。

鍵の作成

次に、以下のコマンドで署名用の鍵を作成してください。
gpg --gen-key
名前とメアドとパスフレーズを入力してください。
それ以外の有効期限とかコメントとかはデフォルトのままでOKなので、エンターキーをタンタンと叩いていきます。

公開鍵の登録

鍵を作り終わったら、続いて公開鍵をGitHubに登録します。
まずはこのコマンドで公開鍵を表示してください。
gpg -a --export
-----BEGIN PGP PUBLIC KEY BLOCK-----で始まる文字列が出力されるので、-----END PGP PUBLIC KEY BLOCK-----までをクリップボードにコピーします。これが公開鍵です。

次にGitHubのSSH and GPG Keysを開き、New GPG keyをクリックしてください。
公開鍵を入力するテキストボックスにさきほどコピーした公開鍵を貼り付けてAdd GPG Keyをクリックしてください。

これで公開鍵の登録が完了しました。

Gitに鍵IDを登録

最後にGit側にも鍵を登録します。
ただし、登録するのは鍵そのものではなく鍵IDと呼ばれる数桁の16進文字列です。

以下のコマンドを実行してください。
gpg -k
8桁か16桁か40桁くらいの16進文字列がどこかに表示されているはずです。多分本体は40桁で、8桁とか16桁のやつはその一部でどれでも鍵IDとして認識してくれると思います。

鍵IDを確認したら、以下のコマンドを実行してください。
git config --global gpg.program gpg2
git config --global user.signingKey 鍵ID
git config --global commit.gpgSign true
これで登録完了。

最後の行は、コミット時に毎回署名をつける場合に使います。
普段は署名せず、特定のコミットのみ手動で署名する場合は3行目は不要です。
その場合、署名したいコミットでgit commit -Sのように-Sオプションをつけましょう。

ちなみにタグに署名する場合はgit tag -sのように-sオプションをつけます。こちらは小文字なので注意。

こんなエラーが出たときは…

環境によってはこんなエラーが出ることがあります。
error: gpg failed to sign the data
fatal: failed to write commit object
これが出たときは、~/.bashrcに以下の内容を追加しましょう。
export GPG_TTY=$(tty)
これで署名付きコミットができるようになるはずです。

やってみた。


できた🎉

秘密鍵の保管方法

いきなりストレージがお亡くなりになったときとかマシンを紛失したときのことを考えると、どこかに秘密鍵をバックアップしておいたほうがいいです。

ただし秘密鍵は誰にも漏らさないように保管しなければいけないので、DropboxとかGoogleドライブにそのまま入れておくのはおすすめしません。

おすすめの方法は、KeePassXCのようなパスワードマネージャーにパスフレーズと秘密鍵を登録して、パスワードデータベースをDropboxやGoogleドライブに保管しておくことです。
KeePassXCはパスワードだけでなくファイルも登録できます。

おわりに

以上、とりあえず署名したい人向けのデジタル署名講座でした。

本格的な運用を考えると、本当はマスターキーで署名するのではなくて署名用のサブキーを使ったほうがいいとか、鍵に有効期限をつけたほうがいいとか、失効証明書も作っておいたほうがいいとか、鍵にアイコン(写真)も追加できるよとか、いろいろ注意する点はありますが、個人用途でGitHub用に署名したいだけなら上記の方法だけでいいでしょう。

慣れてきて本格的な運用に興味が湧いたら上記のことを調べてみてください。

ちなみに本家Gitにも署名についてのドキュメントがあります。これはすでに鍵を作っていることを前提とした記事ですが、より詳しい内容です。

0 件のコメント:

コメントを投稿