アイデンティティ管理(11)ワンタイムパスワードを利用した二要素認証

*本記事は「Red Hat Enterprise Linux Blog」に掲載された記事を翻訳したものです
原著:「Identity Management and Two-Factor Authentication Using One-Time Passwords
執筆:Dmitri Pal
翻訳:ソリューションアーキテクト 森若 和雄

 

二要素認証、もしくは2FAは特に新しいものではありません。さまざまな形で、これまでも存在していました。では「要素」とは何でしょうか?要素とはあなたが持っている何か、あなたが知っている何か、あなた自身の何かのことです。たとえば、あなたが知っているPINを、あなたの指紋と組み合わせると生体情報に基く2FAになります。実際、生体情報はあまり利用されません。盗むことが難しくない(そして、あなたの指を無効にしたり取り替えたりすることは難しい)からです。より実用的な二要素認証へのアプローチは、PINやパスワードのような、あなたが知っている何かと、あなたが持っている何かを組み合わせたものです。

“あなたが持っている何か”は、大抵はデバイスの形をとります。あなたが既に持っているデバイス、たとえば携帯電話やタブレット、あるいはあなたに与えられるデバイス、たとえばスマートカードやトークンといったものです。デバイスに基く2FAは大きく2つの種類があり、証明書ベースのものとワンタイムパスワード(OTP)ベースのものがあります。証明書ベースの認証は、スマートカードをデバイスとして利用します。スマートカードは実際にはパスワードで保護されたメモリカードで、1つまたは複数の秘密を保存しています。カードをカードリーダーに入れてPINを入力することで、ロックを解除します。PINはカードの中身を復号するために使われ、コンピュータ上のクライアントソフトウェアが特定のAPIで秘密を処理できるようにします。

スマートカードとは別のアプローチとして、OTPがあります。これは、短い期間(通常は30秒か60秒)だけ有効な、ランダムなパスワードです。ハードウェアトークンを利用する場合に使用するのは、パスワード(コード)を生成する特殊な専用デバイスで、パスワードを表示するディスプレイがあります。通常6文字か8文字の数字です(異なるデバイスもあります)。もしあなたが既存のデバイス(例えば携帯電話)を利用したい場合には、認証に使うためのワンタイムコードを生成するアプリケーションを利用することができます。そのようなアプリケーションは「ソフトウェアトークン」と呼ばれ、複数のベンダーがモバイルデバイス向けのソフトウェアトークンのアプリケーションを出荷しています。なかでも良く知られているのはGoogle Authenticator(GA)でしょう。GAはオープンソースとオープンソースの認証標準に基いており、高い相互運用性があり使いやすいです。しかし残念なことにGoogle社は、Google Authenticatorをクローズソースにする決定を下しました。Red Hatはオープンソースの会社ですので、互換性のあるオープンソース実装のFreeOTPを始めました。AppleのApp storeと、Google Playでアプリケーションを入手できます。FreeOTPはオープンソースであり、開発者と直接コンタクトすることもできます。もし何か問題があれば、レビューを書くだけでなく、もう一歩踏み込んでプロジェクトのメーリングリスト freeipa-devel@lists.fedorahosted.org で開発者とやりとりし、フィードバックを提供したり改善の提案をすることができるのです。

これらのトークンから生成されるパスワード(コード)はランダムです。しかし、認証ができます — つまり、サーバーでも同じコードを生成でき、突き合わせることができます。これをサーバーとトークンで実現するには、以下の要素を共有する必要があります:

  • 同じアルゴリズム(コードの生成手順)をサポートする必要があります
  • 乱数生成アルゴリズムの種として使われる秘密を共有する必要があります
  • その他、場合によって変わりますがいくつかの要素を共有します。典型的にはUTCの時刻か、トークンが今までに何回コードを表示したかです
  • 時刻を使うトークンはそのまま時刻ベーストークンと呼ばれ、回数を使うトークンは呼び出しイベントが発生した場合にだけコードを表示するためイベントベーストークンと呼ばれます

認証をする際には、ユーザーはPIN(またはパスワード)をトークンのコードと組み合わせてサーバーに送ります。サーバーはPIN、種、時刻(または回数)を知っているのでコードを予想することができ、予想した値とユーザーが入力したデータを照合します。残念ながら世界は完璧ではないので、回数や時刻の非同期が発生する場合があります。このようなずれを補正するために、サーバーは1つ以上のコードを生成します。通常、何個のコードを試すか設定でき、これはトークンウィンドウと呼ばれます。ウィンドウを大きくすると、サーバーはより多くのコードを生成して試します。これはソリューションが提供するセキュリティの強度を下げてしまうので、一般にセキュリティ上、大きなウィンドウを設定することは推奨されません。時には、トークンの非同期が発生し、どのコードも一致しないことがあります。この場合にはユーザーはPINとコード、その次のコードを与えることで、トークンを再同期する必要があります。このケースではサーバーは、ずれを判定して記録し、次にトークンが利用されるときの要素として利用します。

二要素認証ソリューションを使う準備の重要なステップとして、ユーザーへのトークン配布があります。配布するにあたって、トークンとサーバーの種は一致している必要があります。ソフトウェアトークンは乱数を生成してデバイスに渡すことで配布されます。通常ハードウェアトークンは出荷時にあらかじめ種が入っており、種がデータファイルとして送られてくるのでサーバーに読み込ませます。ハードウェアトークンの中には、共有された秘密の種を作るためにサーバーと接続ができるものもあります。

アイデンティティ管理とOTP

Red Hat Enterprise Linux 7.1から、Identity Managementサーバーは二要素認証ができるようになりました。これは、商用のドメインコントローラーとしてははじめてKerberosと2FAを統合して実装したものです。どういうことでしょうか?

かつては、二要素認証とドメインコントローラーを統合するには2つのステップが必要でした。まずはじめに、2FAでユーザーを認証し、その後でパスワードをKerberosチケットを取得するために利用します。これでユーザーはドメイン内のサービス間のSSOを利用することができました。このソリューションの弱点は、Kerberosチケットを取得するために1つの要素しか使われていない点です。IdMは、2FAをKerberosとLDAPサービスに統合することでこの問題を解決しました。ユーザーは1ステップで2つの要素で認証され、その結果としてKerberosチケットを入手します。KerberosおよびLDAPのどちらを使っても同じ認証ポリシーが適用されます。

IdMは2種類の方式で2FAを実装しています。最初のものはIdMサーバーが管理しているハードウェアおよびソフトウェアトークンを使うものです。IdM内のユーザーは、デフォルトで1つの要素(パスワード)で認証を行えます。管理者は、OTPによる認証を一部のユーザーで有効にできます。これは、ユーザーがパスワードに加えて、トークンから入手したコードを入力する必要があるということです。ユーザーにトークンが割り当てられていない場合、ユーザーはパスワードだけでの認証が可能です。いったんハードウェアトークンを登録するかソフトウェアトークンを配布すると、パスワードとトークンに表示されるコードの両方が必要になります。ソフトウェアトークンの配布はセルフサービスページで行われます。あるユーザーが保有できるトークンの個数に上限はありませんが、管理者がそのユーザーについてOTPによる認証は不要と設定するまで、少なくとも1つのトークンが必要となります。ユーザーへの大きな負荷をともなわずに、1要素のみを使用する認証環境から2FAにシンプルかつスムーズに移行できるアプローチです。多くの場合、管理者はセルフサービスポータルを設定してモバイルデバイスにソフトウェアトークンを配備できるようにします。ユーザーはボタンをクリックし、トークン情報が含まれたQRコードが表示されます。このQRコードはFreeOTPやGAアプリケーションでスキャンすることができ、スキャンするとデバイス上にトークンが追加されます。同じトークンを複数のデバイスで利用するためにQRコードを再度表示することは推奨されません。トークンを削除して再デプロイすることも、別のデバイスのために別のトークンを追加することも簡単です。

2FAについてもう少し考えると、IdMを既に他のベンダーの2FAが提供されている環境に導入する場合が考えられます。全ての2FAサーバーはRADIUSプロトコルでの認証を提供しています。IdMの管理者は、IdMを1つまたは複数のRADIUSのクライアントとして設定でき、ユーザー毎の認証ポリシーで特定のRADIUSサーバーの利用を指定できます。いったんユーザーについてRADIUSの利用設定がなされると、IdMはパスワードとトークンを無視して指定されたRADIUSサーバーに委任します。RADIUSサーバーか応答を得ると、成功していればクライアントにKerberosチケットを発行します。そうでなければアクセスは失敗します。この委任アプローチによって、サードパーティのソリューションからIdMベースのソリューションへのシンプルかつ段階的な移行が可能になります。このような移行は、IdMのKerberos統合機能やソリューションのコストにより検討されます。サードパーティのソリューションは一般的に非常に高価ですが、レッドハットの場合、FreeOTPは無料のアプリケーションで、IdMはRed Hat Enteprise Linuxサブスクリプションの一部として追加費用なしで利用できます。

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。