LoginSignup
28
27

More than 5 years have passed since last update.

YubiKey+Pageantでらくらく秘密鍵管理 on Windows

Last updated at Posted at 2016-01-08

SSH(やSCPなどSSH上で動かすサービス)を使うには秘密鍵が必要ですが、管理は意外と面倒だったりします。今回は、Windows上で、ハードウェアトークンであるYubiKeyを、Pageantと併用することで秘密鍵管理をすっきり解決できたので、それについてまとめてみます。

秘密鍵管理について

面倒な秘密鍵管理

秘密鍵はもちろん秘密にすべきものなのですが、ソフトウェアによって必要な鍵の形式が違うとか、あとはパスフレーズの入力が面倒になって、いくつもの鍵が乱雑に転がっていることも、決して珍しいことではありません。また逆に、いざ出先でアクセスしようとなった場合にも、秘密鍵はデータになっているのうえになくすと大変という性質上、簡単に持ち運べるものでもないという不便さがあります。

原則論を言えばマシンごとに秘密鍵を用意すべきなのですが、今度は加速度的に鍵が増えていってしまいます。

YubiKeyとは

YubiKey1は、USBポートにつないで使うタイプのトークンで、モデルにもよりますが以下のような機能を備えています。

  • ワンタイムパスワードの生成
  • FIDO U2F(Google 2段階認証に利用可能)
  • 公開鍵暗号用のスマートカード

YubiKeyのメリット

ここで、YubiKeyに秘密鍵を入れるメリットを挙げていきます。

  • コンパクトな物になっているので、持ち運びできる
  • 逆に、物理的に存在しないと使えないので、管理しやすい
  • 秘密鍵は本人でさえも取り出せないので、攻撃にも強い2

鍵エージェントって?

SSHの鍵は安全上パスフレーズをかけることが多いですが、(特にUnix系では)SCPなど細かい単位で必要になることもあるので、都度打つのでは明らかに手間が掛かり過ぎます。ということで、SSHの鍵を一括して管理してアプリからの問い合わせに答えるような、鍵エージェントと呼ばれるツールが存在しています。

Windowsでは、PuTTYのPageantが広く使われています。

鍵エージェントを使うメリット・デメリット

鍵エージェントを使うことで、鍵をまとめて管理できるということはもちろんメリットです。今回の例では、Pageantさえスマートカード対応のに差し替えてしまえば、あとのソフトウェアはそのままでYubiKeyの鍵を使えるようになります。

ただし、利便性のためとはいえ(ふつうの鍵ファイルの場合)メモリ上でパスフレーズ解除しているのと同じ状態になるので、セキュリティ的には隙が生じることになります。

設定してみる

今回使用したソフトウェアは以下のとおりです。

YubiKey側の設定

今回はYubiKey 4を使いましたが、これは最初からPIVモードが入っています。ということで、接続してからYubiKey PIV Managerを開いてみましょう。

まずは、右側の「Manage Device PINs」で、秘密鍵を使う時のパスワードなどを設定しておきましょう(設定しないと、第三者に使われてしまうこともありえます)。

設定が済んだら、左側の「Certificates」から、いちばん左の「Autentication」を選んで「Generate new key」から鍵を生成しましょう。特に理由がなければRSA 2048ビットでいいと思います。

鍵自体はあっさり生成できますが、この秘密鍵はエクスポートできず、YubiKeyの中から取り出せなくなっています。

サーバ側の設定

鍵はできあがりましたが、SSHで使えるようにするにはサーバ側にセットする必要があります。OpenSCを使うことで、SSH用の公開鍵を抽出できます。

"C:\Program Files (x86)\OpenSC Project\OpenSC\tools"\pkcs15-tool --read-ssh-key 1

このコマンドの後にパスフレーズを入力すると、ssh-rsa AAA………という公開鍵が出力されます。あとは公開鍵を目的のサーバの~/.ssh/authorized_keysに追記することで準備完了です。

Pageantの設定

Pageantは通常のものではなく、Windowsのスマートカードライブラリを参照するようになっているPuTTY-CACを使います。別途のライブラリは必要なく、pageant.exe単体で動きますので、それだけダウンロードして、起動することでエージェントとしてタスクトレイに常駐します(よく使うならスタートアップに入れるといいでしょう)。

で、起動直後には鍵リストは空っぽになっています。pageantのタスクトレイアイコンを右クリックするとメニューが出ますが、「Add Key」ではなく「View Keys」からリストウィンドウを表示してください(タスクトレイの左クリックでも出ます)。

ダイアログが開くと、下の方に「Add CAPI Cert」というボタンがありますので、こちらを押すとWindowsで使用可能な証明書を探して、リストとして表示してくれます。無関係な証明書が出ることもありますが、YubiKeyのはICカードの絵になっていますので、それを選んでください(この時点ではパスフレーズを聞かれませんが、それで正常な動作です)。

実際に接続してみる

たとえばTeraTermでは、接続先を選んだ次に、ユーザー名やパスワードを設定するダイアログが出ますが、そのいちばん下に、「pageantを使う」という選択肢があります。これを選ぶと、pageant経由でWindowsが暗証番号の入力ダイアログを出してきます。そこでYubiKeyのPINを入力すると、YubiKey内部の鍵を使ってSSHの認証が進んでいくことになります。

Cygwin/MSYSから使う

CygwinやMSYSの環境向けに、pageantをssh-agentとして使えるようにするcuviper/ssh-pageantというものがあります。そちらの使い方については別項にまとめてみました

関連記事


  1. Your ubiquitous Keyの略で、日本語の「指」とは関係ありません。 

  2. 公開鍵暗号の処理もYubiKey内部で行っているので、秘密鍵は一切外に出ません。 

28
27
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
27