オープンソース

サーバー構築のデージーネットTOP > OSS情報 > OSS紹介 > ワンタイムパスワードのOSS Google Authenticator

ワンタイムパスワードのOSS Google Authenticator

近年、リモートワークなどで、インターネットから企業内のネットワークにアクセスする機会が増加しています。このようなアクセスでは、安全にユーザを認証する技術が不可欠です。そのような中、ワンタイムパスワードの技術が注目されています。ワンタイムパスワードを使うことで、ユーザを安全に認証することができるからです。ここでは、ワンタイムパスワードの概要と、OSSでの実現方法について次のような内容を解説します。

ワンタイムパスワードとは?

ワンタイムパスワードの実現には、いくつかの方法があります。ワンタイムパスワードとして利用される技術について解説します。

OSSのワンタイムパスワードは安全か?

ワンタイムパスワードのソフトウェアはOSSで入手することができます。その理由について解説します。


ワンタイムパスワードの連携

様々な機器やワンタイムパスワードの連携について解説します。

ワンタイムパスワードと二要素認証

ワンタイムパスワードを単独で利用するより、さらにセキュリティを強化するために使われる二要素認証について解説します。

ワンタイムパスワードのOSS〜Google Authenticator〜

OSSのワンタイムパスワードであるGoogle Authenticatorについて解説します。

ワンタイムパスワードに関する事例

Google Authenticatorを使ってワンタイムパスワード認証を行うシステムの構築をした事例について解説します。


ワンタイムパスワードとは?

ワンタイムパスワードとは、一度限り有効なパスワードのことです。ワンタイムパスワード(One Time Password)の頭文字をとって「OTP」とも呼ばれます。一時的にしか利用できないワンタイムパスワードを利用することで、通信が盗聴される可能性がある環境でも安全に認証を行うことができます。

ワンタイムパスワードを実現する方法には、次のようにいくつかの方法があります。

時刻同期型のワンタイムパスワード

サーバクライアントが、同じアルゴリズムで生成したパスワードを使って認証する方法です。パスワードは、ユーザの固有の情報と現在の時刻を使って生成されます。そのため、生成したパスワードは、時間が経過すると利用不能になり、ワンタイムパスワードであることが保証されます。

この方法では、ユーザは認証に必要なワンタイムパスワードを何らかの方法で計算する必要があります。そのため、トークンと呼ばれるワンタイムパスワード生成器を利用します。ワンタイムパスワードのトークンには、ソフトウェアトークンとハードウェアトークンがあります。ハードウェアトークンとしては、カードタイプやスティックタイプのものが知られていて、インターネットバンキングなどで利用されています。最近は、スマートフォン上で動作するワンタイムパスワードのソフトウェアトークンが使われることも増えています。

認証に、必ずワンタイムパスワードのトークンが必要だというデメリットがありますが、認証の手続きがユーザ・パスワード認証と同じため、様々な用途で利用することができます。そのため、広く普及しているワンタイムパスワード実現の方法です。

チャレンジ・レスポンス型のワンタイムパスワード

認証を行うときに、あらかじめ登録されているユーザ固有の情報と、サーバが発行したランダムな数値(チャレンジコード)を使う方法です。サーバとクライアントが、それぞれに持っているユーザ固有情報を使って、同じアルゴリズムでレスポンスコードを生成します。それが一致すれば、認証が成功します。サーバが、必ず異なるチャレンジコードを発行することで、ワンタイムであることを保証することができます。

メッセージ型のワンタイムパスワード

サーバがランダムに発行したワンタイムパスワードをユーザに送付し、それを使って認証を行う方式です。パスワードだけでなく、ワンタイムなURLの生成などでもよく利用されます。会員登録など、一時的な用途で使われているワンタイムパスワードの認証方法です。

携帯電話のSMSサービスを使いワンタイムパスワードを送付する方法が普及しています。SMSを送付するためには、ユーザの携帯電話番号が必要です。携帯電話番号は何かあった場合に、相手の身分確認に利用することもできるため、認証と同時に存在確認をすることができます。また、SMSの代わりにメールを利用する場合もあります。この場合には、ワンタイムパスワードの認証と同時に、メールが送付できることを確認することができます。SNSやメーリングリストの登録などで利用されています。

ワンタイムパスワードと二要素認証

最近は、セキュリティを維持するためには、単純なユーザ名とパスワードの認証では不足であると考えられるようになりました。認証には、次のような3つの方法があると考えられています。

  • 本人だけが知っていることでの確認
  • 本人だけが所有しているものでの確認
  • 本人自身の特性の確認

後の方法ほど、セキュリティはより強くなっています。また、これらの認証を組み合わせることで、より強固なセキュリティを実現することができます。

高いセキュリティを実現したい場合には、「本人自身の特性」を使うのがもっとも安全です。指紋認証、静脈認証、顔認証などです。しかし、導入には非常にコストがかかります。そのため、他の2つの要素を組み合わせることで、高いセキュリティを実現しようとするのが、ワンタイムパスワードなどを利用した二要素認証です。

ユーザ名とパスワードでの認証は、「本人だけが知っていること」にあたります。ワンタイムパスワードでは、「本人だけが所有しているもの」を使って認証を行います。近年は、この2つを組み合わせる方法が、注目されています。

OSSのワンタイムパスワードは安全か?

時刻ベースのワンタイムパスワードでは、RSA社が所有していた特許の技術が使われています。このワンタイムパスワード技術の特許期限が終了したため、時刻ベースのワンタイムパスワードの技術はRFC6238で標準化され公開されました。そのため、以前は製品でしか入手することができなかったワンタイムパスワードの技術を、OSSで入手することができるようになりました。ワンタイムパスワードがOSSとなり広い範囲で利用されるようになったことで、より安全性が向上しています。

ワンタイムパスワードのOSS〜Google Authenticator〜

Google Authenticatorは、Googleが開発し、オープンソースソフトウェアとして公開しているワンタイムパスワードの仕組みです。ワンタイムパスワードのソフトウェアトークンと、サーバ側での検証の仕組みを提供しています。

スマートフォンのワンタイムパスワードクライアント

ワンタイムパスワードのGoogle Authenticatorのソフトウェアトークンは、iPhoneやAndroidのアプリとして配布されています。

<iPhone用のソフトウェアトークン>

iPhone用のワンタイムパスワードソフトウェアトークン

ワンタイムパスワードクライアントの登録

ワンタイムパスワードのソフトウェアトークンを利用するには、サーバ側にユーザ固有の設定を行い、その情報をソフトウェアトークンと共有する必要があります。これらのワンタイムパスワードを利用するための設定は、ソフトウェアトークンからカメラを起動し、QRコードを読み取ることでスマートフォンへ取り込むことができます。次の画面例は、RoundcubeのGoogle Authenticatorプラグインでワンタイムパスワードを利用する際のQRコードの表示です。

<RoundcubeのQRコード表示画面>

roundcubeのワンタイムパスワードQRコード表示画面

ワンタイムパスワードの連携

Linuxサーバのワンタイムパスワード連携

Google Authenticatorは、LinuxのPAM(Pluggable Authentication Modules)として実装されています。そのため、通常のLinuxログインの時にワンタイムパスワード認証を利用することができます。PAMの構成によって、単純なワンタイムパスワード認証とすることもできますし、二要素認証として利用することもできます。

PAMで実装されているため、sshftpなど様々なアプリケーションでワンタイムパスワード認証や二要素認証を行うことができます。

Radiusサーバのワンタイムパスワード連携

Red Hat Enterprise LinuxCentOSで標準的に採用されているRadiusサーバであるFreeRADIUSは、PAMと連携した認証に対応しています。そのため、ワンタイムパスワードに対応したRadiusサーバを構築することが可能です。

VPNやWi-Fiのワンタイムパスワード連携

Radiusに対応したVPN装置やWi-Fiアクセスポイントを利用すれば、ネットワークアクセス時の認証でもワンタイムパスワードを利用することができます。

Apacheのワンタイムパスワード連携

Apacheの認証をGoogle Authenticatorと連携させることで、Webアプリケーションの認証をワンタイムパスワードや二要素認証にすることができます。ApacheとGoogle Authenticatorを連携するには、2つの方法があります。

一つは、VPNやWi-Fi装置と同様の方法で、Radiusサーバ経由でワンタイムパスワードを使う方法です。mod_auth_radiusを使って認証を行います。
もう一つの方法は、mod_authn_otpモジュールを使う方法です。mod_authn_otpはApacheでワンタイムパスワードを使うためのモジュールで、Google Authenticatorのソフトウェアトークンと連携することができます。

Webメール(Roundcube)のワンタイムパスワード連携

OSSのWebメールソフトウェアのRoundcubeには、Google Authenticatorモジュールが用意されています。このモジュールを使うと、Roundcubeにワンタイムパスワードの機能を追加することができます。

<Roundcubeの二要素認証画面>

Roundcubeのワンタイムパスワード二要素認証画面

デージーネットの取り組み

デージーネットでは、Google Authenticatorを使ったワンタイムパスワードのシステムを構築しています。

ワンタイムパスワード認証の事例

Google AuthenticatorとFreeRADIUSを使ったOTP認証事例
VPN装置でワンタイムパスワードを使いたいというご要望があり、Google Authenticatorを使ったシステムを構築しました。スマートフォンのGoogle Authenticatorアプリで表示されたワンタイムパスワードを使ってVPN装置と連携することで、セキュリティが向上しました。OSSのFreeRADIUSとGoogle Authenticatorを利用してシステムを構築しました。

構築後のサポートについて

デージーネットでGoogle Authenticatorを使ったワンタイムパスワードの認証サーバを構築したお客様には、導入後支援サービスとして、Open Smart Assistanceを提供しています。これは、Google Authenticator単体のサポートではなく、Linuxなどを含むワンタイムパスワードの認証サーバ全体に対するサポートです。

Open Smart Assistanceでは、認証ができないなどの障害があった場合の調査などのサービスを受けることができます。また、Google Authenticatorにバグがあった場合には、回避方法の調査、コミュニティへの連絡による改善促進といったサポートを受けることができます。また、Open Smart Assistanceのクーポンサービスにより、ユーザの追加などの運用も依頼していただくことが可能です。

ワンタイムパスワードのOSS Google Authenticatorの先頭へ