公開鍵暗号の鍵を GnuPG で統一的に管理する

Gnuk Token の研究開発を進めて、現在、僕は、Gnuk Tokenに入れたOpenPGPの認証鍵を、以下の3つの用途に使っています。

  • OpenSSHの鍵 (常用)

    あまり知られてなく、Gnuk Token や smartcard を使わない場合は、まだ若干面倒なのですが(将来、2.1.xではもう少し簡単になります)、gpg-agentがSSH agentの機能を持つので、GnuPG管理下の鍵でOpenSSH(もしくはPutty) の認証ができます。

  • (実験)TLS/SSLのClient Certificate Authenticationの鍵

    Scute という現在は開発が止まったプロジェクトですが、PKCS#11のAPIを提供するNSSのモジュールがあります。NSSを使うMozilla FirefoxやChromeで(実験的ですが)使えます。GnuPG管理下の鍵を使って、TLS/SSLのClient Certificate Authentication を行えます。

  • (実験)ログインを公開鍵暗号で認証するための鍵

    Poldi という開発が止まったので少し面倒を見ているプロジェクトがあります。PAMのモジュールがGnuPGのSCDaemonと通信して、公開鍵暗号でユーザを認証して、パスワードのハッシュなどではなく、ログインする、ということが目的です。良さそうに思えますが、Gnuk Token や Smartcard のパスフレーズ/暗証番号は入力する必要があるので、利用者には利点はあんまりないかもしれません。

また、とても実験的で、まだ実際に使ってはいませんが、Bitcoinの鍵も同様に扱うことを検討しています。

ポイントは、異なるシステム/プロトコルに対してGnuPGを使って公開鍵暗号の鍵を管理している、ということです。

こうすると一つ大変うれしいことがあります。OpenPGPの鍵サーバを使って公開鍵が配送できるのと、OpenPGPの仕組みで鍵の正当性を検証できます。

Using GPG's authentication key for SSH access に書きましたが、友達に SSH のアクセスを開こう、という時に、公開鍵を OpenPGP の仕組みで検証することができれば、あらためて、SSH の鍵をなんとかして(信頼できる形で注意深く)送ってもらうことなしに、アクセスを開けます。

なお、上記の例における、RSAの同一の鍵(公開鍵、秘密鍵のペア)を複数の異なる用途に使いまわすのは、ほめられた運用ではありません。念のため。理由は、それぞれの用途で状況が異なるだろうと考えられるからです。OpenSSHの鍵の寿命はPoldiでのログインの鍵の寿命とは違うかもしれません。OpenSSHのために鍵を更新して手元のマシンにログインできなくなったら困ります、ね。