2012年11月1日木曜日

YubikeyでWindowsログインする

時のたつのは早いもので、前の投稿から4ヶ月が過ぎ去ってしまいました。

しばらくほったらかしだったYubiKeyですが、Challenge-Responseのプログラムを組む前にYubiKeyでWindowsのログインを試してみたいと思います。Windowsは7です。要件としてWindows7と書いてあるので、他のバージョンについては使えるのかどうかわかりません。Vistaにはインストールできずやはりうまくいきませんでした。

2012/11/03追記
    Window8にインストールしてみたところうまくいきました。同じユーザーが二人でてきたりログイン画面が少しおかしいような気がします。

まず、Windowsログイン用のプログラムをダウンロードし、インストールします。なお、このプログラムはBeta版ですので、使用については自己責任で行ってください。設定したユーザーに関してはYubiKeyが無いとログインできなくなってしまうので、最低限別の管理者ユーザーを作っておいてください。自己責任はいい言葉ですね。言っている方は無責任でいいので。

Windowsログインを行うためには、YubiKeyのslot2をHMAC-SHA1に設定する必要があります。設定していない場合はYubiKey Personalization Toolを起動して、Challenge Response、HMAC-SHA1を押して、Secret Keyの右のGenerateを押し、Write Configurationを押します。この時Require user inputはOFFのままにして下さい。非推奨ですし、私もうまくいかなかったので。



つぎに、スタートメニューからYubiKey Logon Administrationを起動します。このときあらかじめYubikeyを挿しておきます。

有効化するかというダイアログが表示されるので、はいを押します。


設定画面が開くので、ユーザーを選択し、enabledをチェックし、Configureボタンをおします。



Successfully configured YubiKey Logonと表示されれば設定完了です。



念のためテストボタンを押してテストしておきましょう。Correct response!と表示されたら正しく動作しています。




試していませんが、enabled in safemodeというチェックボックスがあるので、セーフモード時にもYubiKeyで認証するか選べるようです。セキュリティを完全にしておきたい場合はチェックしておきましょう。

ここで一度再起動を行います。

それではログインを行なってみます。YubiKeyを有効にしたユーザーでログイン使用とするとパスワードの下に、YubiKey Logon enabled for userというメッセージが表示されます。


パスワードを入力した際にYubiKeyが挿してあればログインは成功します。挿してなければエラーが表示されログインできません。



ユーザーのパスワードを削除しておけばパスワードなしでログインできますが、パスワード入力欄は表示されるので空のまま右のログインボタンを押します。


さてログインに関しては案外あっさりと出来るようになりましたが、仕組みがよくわかりません。HMAC-SHA1ではメッセージを送る側、検証する側双方にシークレットキーが必要なはずです。しかし、ログインの設定でシークレットキーを入力した記憶はありません。まさか設定ツールはYubikeyから直接シークレットキーを読み出せるのでしょうか。それともいつも同じメッセージを送ってそれを検証しているのでしょうか。答えはどちらも外れでした。

まず、このログインソフトはオープンソースとして公開しているので、ソースコードを見てみます。ログインモジュールはC++で書かれていて読むのは時間がかかりそうなので、手っ取り早くC#で作られた設定ツールを調べてみました。調べてみたところ、レジストリのHKLM\SOFTWARE\Yubico\auth\users\<ユーザー名>というキーの下にnextChallenge、nextResponse、saltというエントリがあり、ここにYubiKeyの情報を記録しているようです。

手順を追ってみると、まず設定ツールでの設定時にsaltとnextChallengeにランダムの値を設定し、nextResponseにはnextChallengeをYubiKeyに送って受けっとたレスポンス値を設定します。次にログインした時にレジストリのnextChallengeをYubiKeyに送り、受け取ったレスポンス値がレジストリのnextResponseと同じであれば認証が通ります。認証が通ったらレスポンス値とsaltから次のチャレンジ値を作り、それをYubiKeyに送ってレスポンス値を取得し、そのチャレンジ値とレスポンス値をレジストリに記録するらしいです。

らしいというのはログインモジュールの方は見ていないからですが、レジストリを読まれても同じレスポンス値を返すキーを見つけない限り乗っ取ることはできませんし、ログイン毎にチャレンジ値も変わってしまうので、なかなか安全になっていると思います。


2012/11/02 追記
YubiKeyのHMAC-SHA1の設定でRequire user inputはOFFにするようにと書きましたが、ONにしても認証することができました。ただし、Windowsのログオンボタンを押すと同時、またはログオンボタンを押す前にYubiKeyのボタンに触れていないとエラーとなるようです。しかし、YubiKeyのボタンに触れると設定によってはslot1のパスワードが入力されてしまうので、不便ではあります。

0 件のコメント:

コメントを投稿