Google Authenticator〜OSSのワンタイムパスワード〜
Google Authenticatorとは、Googleが開発したワンタイムパスワードを実現するオープンソースソフトウェアです。近年、リモートワーク等の普及により安全にユーザ認証を行うための技術が不可欠となっています。通常のパスワード認証にワンタイムパスワードの入力を加える二段階認証を利用することで、不正アクセスを防止し、ユーザーを安全に認証できます。この記事では、Google Authenticatorのスマホアプリからのアカウントの登録方法や、Google Authenticatorと連携可能な認証システムについて紹介します。
- +
目次
ワンタイムパスワードとは?
Google Authenticatorについて紹介する前に、ワンタイムパスワードについて説明します。ワンタイムパスワードとは、一度限り有効なパスワードのことです。ワンタイムパスワード(One Time Password)の頭文字をとって「OTP」とも呼ばれます。一時的にしか利用できないためワンタイムパスワードの再利用は出来ず、不正アクセスの可能性がある環境でも安全に認証を行うことができます。
ワンタイムパスワードを実現する方法には、以下のような方法があります。
- +
時刻同期型のワンタイムパスワード
- ★
サーバとクライアントが、同じアルゴリズムで生成したパスワードを使って認証する方法です。パスワードは、ユーザの固有の情報と現在の時刻を使って生成されます。そのため、生成したパスワードは、時間が経過すると利用不能になり、ワンタイムパスワードであることが保証されます。認証には必ずトークンが必要という注意点はありますが、認証の手続きがID・パスワード認証と同じであるため、様々な用途で利用できて非常に便利です。利用方法もそれほど難しくはないため、ワンタイムパスワードの実現の方法として広く普及しています。ここで紹介するGoogle Authenticatorも、時刻同期型のワンタイムパスワードとなっています。
- +
チャレンジ・レスポンス型のワンタイムパスワード
- ★
認証を行うときに、あらかじめ登録されているユーザ固有の情報と、サーバが発行したランダムな数値(チャレンジコード)を使って認証を行う方法です。サーバが、必ず異なるチャレンジコードを発行することで、ワンタイムパスワードであることを保証することができます。
- +
メッセージ型のワンタイムパスワード
- ★
サーバがランダムに発行したワンタイムパスワードをユーザに送付し、それを使って認証を行う方式です。パスワードだけでなく、ワンタイムURLの作成などでもよく利用されます。特に現在は、携帯電話のSMSサービスやメールを使い、ワンタイムパスワードを送信する方法が普及しています。会員登録など、一時的な用途で使われている認証方法です。
OSSのワンタイムパスワードは安全か?
時刻ベースのワンタイムパスワードでは、RSA社が所有していた特許の技術が使われています。この技術の特許期限が終了したため、時刻ベースのワンタイムパスワードの技術はRFC6238で標準化され公開されました。そのため、以前は製品をインストールすることでしか入手できなかったワンタイムパスワードの技術を、オープンソースソフトウェアで入手することができるようになりました。こうして広い範囲に普及したことで、より安全性が向上しています。
Google Authenticatorとは
Google Authenticatorは、Googleが開発し、オープンソースソフトウェアとして公開しているワンタイムパスワードの仕組みです。ワンタイムパスワードのソフトウェアトークンと、サーバ側での検証の仕組みを提供しています。
スマートフォン向けアプリ
Google Authenticatorのソフトウェアトークンは、iPhoneやAndroidなどのスマートフォン用アプリとして提供されています。iPhoneはApp Store、AndroidはGoogle Playで配布されており、端末に簡単にダウンロードすることができます。アプリでは、ワンタイムパスワードの認証に必要な6桁の数字からなるコードを生成して表示します。この発行されたコードを利用して、認証を行います。アプリで発行されるコードは、RFC 4226で規程されている回数ベースのワンタイムパスワード(HOTP)アルゴリズムと、RFC 6238で規程されている時間ベースのワンタイムパスワード(TOTP)アルゴリズムをサポートしています。
以下では、スマートフォン向けアプリを使った二段階認証の流れを解説します。
- ログインしたい対象(Googleアカウントなど)側の設定でGoogle Authenticatorによる二段階認証が有効になっていることを確認します
- ログインフォームにログインIDとパスワードを通常入力し、ログインを試みます
- ワンタイムパスワードを求められるので、Google Authenticator を起動し、認証コードを確認します
- 認証コードを入力してログインします
認証の仕組み
アプリのインストール後、Google Authenticatorの管理するアカウントに紐付ける設定を行います。サーバ側でワンタイムパスワードを利用するユーザを追加すると、アプリとアカウントを紐づけるQRコードが発行されます。スマートフォンでアプリを起動し、このQRコードの画像をカメラで読み取ることで、アプリとアカウントを紐付ける秘密鍵を登録することができます。アプリは、その秘密鍵や現在時刻などの情報を使って、30秒ごとに6桁のコードを生成し、表示します。
なお、このアプリにはアカウント情報をエクスポート/インポートするメニューがあります。このメニューから、アカウント情報のバックアップを作成することができます。また、仮にスマートフォンの機種変更などで、新しい端末に再びアプリをダウンロードした場合でも、変更前のアカウントから簡単に設定を移行することができます。
Google Authenticatorの無料資料をダウンロードする
アカウントの登録方法
ソフトウェアトークンを利用するためには、サーバ側にユーザ固有の設定を行って、そのユーザ情報をソフトウェアトークンと共有する必要があります。例として、RoundcubeのGoogle Authenticatorプラグインでワンタイムパスワードを利用する際の、2種類のアカウント登録方法を紹介します。
QRコードを読み取って登録する場合
スマートフォンなどからカメラを起動し、QRコードを読み取ることでアカウント登録を行うことができます。次の画面例は、RoundcubeでのQRコードの表示です。
- Roundcubeで「Show QR code」をクリックするとQRコードが表示されるので、Google Authenticatorの「アカウントの追加」より「バーコードをスキャン」を選択して読み取ります。
- 読み取りが成功すると、Google AuthenticatorにRoundcubeのアカウントが登録され、二段階認証を利用することができます。
キーを直接入力して登録する場合
QRコードが読み取れない場合は、キーを直接入力して登録することもできます。
- Google Authenticatorの「アカウントの追加」より「提供されたキーを入力」を選択し、Roundcubeのアカウント名とsecretを入力して「追加」をタップします。secretは、「Show secret」を押すことで確認することができます。
- 入力に成功すると、Google Authenticatorにアカウントが登録され、二段階認証を利用することができます。
ワンタイムパスワードの連携
ワンタイムパスワードは、様々な認証システムやソフトウェアと連携することができます。
- +
Linuxサーバとの連携
- ★
Google Authenticatorは、LinuxのPAM(Pluggable Authentication Modules)として実装されています。Linuxのアカウント認証と連携することで、通常のLinuxログイン時にワンタイムパスワード認証を利用することができます。PAMの構成によって、単純なワンタイムパスワード認証とすることもできますし、二要素認証として利用することもできます。
PAMで実装されているため、ssh、ftpなど様々なアプリケーションでワンタイムパスワード認証や二要素認証を行うことができます。
- +
RADIUSサーバとの連携
- ★
FreeRADIUSは、RADIUSサーバのオープンソースソフトウェアです。Red Hat Enterprise LinuxやCentOSで標準的に採用されており、PAMと連携した認証に対応しています。そのため、ワンタイムパスワードに対応したRADIUSサーバを構築することが可能です。
- +
VPNやWi-Fiとの連携
- ★
RADIUSに対応したVPN装置やWi-Fiアクセスポイントを利用すれば、社外などからネットワークへアクセスする際の認証でもワンタイムパスワードを利用することができ、セキュリティをより強化することができます。デージーネットでは、VPN装置でワンタイムパスワードを使いたいというお客様向けに、FreeRADIUSと組み合わせてシステムを構築した事例があります。
- +
Apacheとの連携
- ★
Apacheの認証を連携させることで、Webアプリケーションの認証をワンタイムパスワードや二要素認証にすることができます。そのため、個人情報などの重要なデータを扱うサイトなどのセキュリティを強化することができます。Apacheと連携させる方法として、以下の2つから選択することができます。
1つは、VPNやWi-Fi装置と同様の方法で、RADIUSサーバ経由でワンタイムパスワードを使う方法です。mod_auth_radiusを使って認証を行います。
もう一つの方法は、mod_authn_otpモジュールを使う方法です。mod_authn_otpはApacheでワンタイムパスワードを使うためのモジュールで、Google Authenticatorのソフトウェアトークンと連携することができます。
- +
Webメール(Roundcube)との連携
- ★
Roundcubeは、OSSのWebメールソフトウェアです。Roundcubeには、Google Authenticatorモジュールが用意されており、ワンタイムパスワードの機能を追加することができます。これにより、外出先などからメールサーバへリモートアクセスする場合などでも、安心してメールシステムを利用することができます。
- +
OpenAMとの連携
- ★
OpenAMとは、シングルサインオン(SSO)の認証を提供するソフトウェアです。OpenAMと連携させることで、ネットワーク上の様々なWebアプリケーションで、ワンタイムパスワードを利用した二要素認証を実現することができます。なお、OpenAMは当初はオープンソースとして公開されていましたが、最新版はオープンソースではなくなっています。
Google Authenticatorの無料資料をダウンロードする
デージーネットの取り組み
デージーネットでは、Google Authenticatorのインストール方法や使い方、設定方法など、詳細についてまとめた調査報告書を公開しており、無料でダウンロードすることができます。また、ワンタイムパスワードを使った認証システムの構築サービスも行っており、お客様の課題や用途に合わせて最適な仕組みをご提案しています。
導入後のサポートについて
デージーネットでワンタイムパスワードの認証サーバを構築したお客様には、導入後支援サービスとして、Open Smart Assistanceを提供しています。これは、ソフトウェア単体のサポートではなく、Linuxなどを含むシステム全体に対するサポートです。
Open Smart Assistanceでは、認証ができないなどの障害があった場合の調査等のサービスを受けることができます。また、ソフトウェアにバグが発生した場合には、回避方法の調査、コミュニティへの連絡による改善促進といったサポートを受けることができます。また、Open Smart Assistanceのクーポンサービスにより、ユーザの追加などの運用も依頼していただくことが可能です。Open Smart Assistanceについてのより詳しい情報は、以下のページをご確認ください。
「導入後の支援について〜Open Smart Assistance〜」へ
情報の一覧
Google Authenticator調査報告書
Google Authenticatorは、二段階認証を行うためのモバイル端末向けアプリケーションです。iPhoneやAndroid端末などにインストールして使用できます。本書では、インストール手順や使用方法を調査した内容をまとめています。
Google AuthenticatorとFreeRADIUSを使ったOTP認証事例
VPN装置でワンタイムパスワードを使いたいというご要望があり、OSSのFreeRADIUSとGoogle Authenticatorを利用したシステムを導入しました。さらに、ActiveDirectoryと連携することで、ユーザ情報を管理しやすくしました。
二要素認証の手法を取り入れたNextcloudの導入事例
自動車関連会社にOSSのファイルサーバ「Nextcloud」を導入した事例です。お客様は、外部のお客様とのファイル共有のため、オンラインストレージの導入を検討していました。クラウドサービスのファイルサーバはコストがかかり安全面にも心配があるため、オンプレミスで利用できる「Nextcloud」を導入し、さらに二要素認証も取り入れました。