OpenVPN&セキュリティ情報
2011-05-30
OATHによるワンタイムパスワードの仕様 - 2
ワンタイムパスワード生成方法のキホン
OATHでは後述する2つの方法が規定されていますが、基本的な仕組みは同じです。ワンタイムパスワードを生成するために必要なデータは2つ、(1) ユーザーが決めたパスコード(一般的なパスワードと同じもので、「シークレット」とも呼ばれます)と、(2) 回数や時刻などのカウンタです。これらをサーバーとクライアントの両方で共有しておき、この2つのデータから決められた方法で計算した結果をワンタイムパスワードとして生成します。
OATHで規定している2つの生成方法は、(1) は共通で、(2) の部分だけが異なります。では、それぞれの方法について説明しましょう。
[1] HOTP : 利用ごとに生成する(生成回数ベース)
利用者がトークンのボタンを押すなどしてパスワードを生成するたびに、新しいワンタイムパスワードを生成します。この方法は最も基本的な方法で、OATHの規格では HOTP (HMAC-Based OTP Algorithm) として規定されており、RFC 4226としても規定されています。カウンタとして使用されるのは「今回のパスワード生成が何回目のパスワード生成か」を示す値です。この値は生成するたびに1つずつカウントアップされますが、サーバー側 (HOTP validator) とクライアント側 (HOTP generator) でこの値を共有していなければなりません。クライアント側はパスワードを生成した回数(何回目の生成か)、サーバー側は認証処理を行った回数(何回目の認証か)を持つことになります。
しかし、このカウンタはサーバー側とクライアント側で同一値になる保証がありません。例えば、パスワードは生成したがそのパスワードを使って認証処理を行わなかった、という場合には値がずれることになります(生成回数 > 認証回数となるため)。そのため、サーバー側にカウンタを再同期 (resync) させる機能を備えておく必要があります。
[2] TOTP : 現在の時刻に応じて生成する(時刻ベース)
一定時間ごとにワンタイムパスワードを生成します。OATHでは TOTP (Time-based One-time Password Algorithm) として規定されており、規格はドラフトとして公開(2011年4月現在)されています。仕組み上は、前述したHOTPの応用といった位置付けになります。カウンタとして使用されるのは「現在の時刻(UnixTime)」です。ワンタイムパスワードの基準が時刻であるため、サーバー側とクライアント側のそれぞれのデバイス(PC、スマートフォン、トークンなど)の時刻が正確でなければなりません。認証の仕組みを作る際にはある程度の時刻のずれは考慮しますが、当然ながら時刻が大幅にずれていると正しく認証できませんから、NTPやGPSなどを使って定期的に時刻が補正されているデバイスが望ましいでしょう。
では、次回は実際のワンタイムパスワードの算出方法を解説しましょう。
2011-05-27
OATHによるワンタイムパスワードの仕様 - 1
そもそもワンタイムパスワードとは?
「ワンタイムパスワード」はその名の通り、その時だけ有効な1回限りのパスワードを使って認証を行う仕組みです。使用するたびにパスワードが変わることになるので、万が一パスワードが漏えいしても、そのパスワードを他人に悪用される危険性を大幅に削減できます。では、利用者は毎回変わるパスワードをどうやって知るのでしょうか? 利用者は自分の使うパスワードを知るために、ワンタイムパスワードを生成する「道具」を別に持っている必要があります。
この「道具」としてよく用いられているのが「トークン」と呼ばれるものです。このトークンには、ボタンを押すたびに新しいパスワードが生成、表示されたり、決まった時間ごと(30秒ごと、1分ごとなど)に新しいパスワードが生成、表示されたりします。最近では、トークンの代わりにスマートフォンのアプリを使う(「ソフトウェア・トークン」とも呼ばれます)ケースも出てきています。
RSA SecurID トークン
WebアプリケーションやVPN機器など、ログイン先の認証システム(サーバー側)が生成するパスワードと、トークン(クライアント側)が生成するパスワードを共通の方法で算出し、両者のパスワードを常に一致させるようにすることによって、ワンタイムパスワードとして利用することができることになります。
次回は、OATHが規定しているワンタイムパスワードの2つの生成方法について取り上げましょう。
2011-05-26
[ブックレビュー] SEOを強化する技術
以前に比べると、本屋さんの棚に並んでいるSEO関連の本がちょっと減ってきたような気がしますが、まだまだたくさんありますね。私もWebサイトに関わることが少なくない(どちらかというとシステム寄りですが)のでいろいろと読んでみたのですが、SEO関連の書籍は個人的に「どうもしっくり来る本がないな」と思っていました(これは多分に私の感性の問題ですが...)。でも、この本はしっくり来ました!
主にGoogleとYahoo!の検索エンジン(まだYahoo!JapanがGoogleの検索エンジンを採用することを発表する前に執筆されています)を前提に、単なる「外部からのリンクを増やせ!」というスタンスではなく、サイト内のコンテンツ自体の質の向上や、ちょっとした工夫によってどのようにSEO対策を行えるのかが解説されています。さらに、コンテンツの移行時にURLを維持するための方法(mod_rewriteを使ったリダイレクトなど)やモバイルサイトにおけるSEO、eコマースやCMSなどでどのようにSEOを考慮した作りができるかといった点も具体的に取り上げており、どのサイトでもどこか適用できそうな、実践的な内容になっています。 コンテンツライターというよりはエンジニアにとって面白い本かもしれません。
とかく検索エンジンのアルゴリズムとのイタチごっこになりやすいSEOのお話ですが、本書ではいわゆる単純な「検索エンジン対策」というよりは、コンテンツそのものの質を高めることに注意が向けられている点が興味深く、かつ普遍的だと思います。著者の実際のSEO対策業務の中で実践されているちょっとしたヒントや手順のアドバイスなどもあり、Webサイトに関わる人なら誰でも参考にできる内容です。
SEOに関する書籍をお探しなら、ぜひ一度書店でご覧になることをお勧めします。
2011-05-24
Androidの脆弱性対応
こちらで取り上げたAndroidのClientLogin認証の脆弱性ですが、18日の時点で対応が進められていたようですね。
ユーザーによる端末のアップデートは不要で、仕組みとしてはサーバーサイドで同期の際のトークン使用時に必ずHTTPSを使うようにした模様です。なにはともあれ、迅速に対応が進められたのはユーザーにとっては朗報です。
ただ、Sophosのnakedsecurity内の該当する記事にも書かれていますが、Android端末が抱えている「OSアップデート(特にセキュリティフィックス)の対応が端末のメーカーに依存している」という点は、特に企業で使用する場合にはセキュリティ面でのリスクとして考慮する必要はありそうですね。
2011-05-20
[OpenVPN TIPS] TCPを使用する場合のスループット
そのため、OpenVPNをUDPで使用するほうが高いスループットを期待できます。しかし、ネットワーク構成上(ファイアウォールで許可されていない場合など)、UDPが使用できない場合もありますよね。
OpenVPNをTCPで使用する際には、tcp-nodelayディレクティブを使用すると速度が向上する可能性があります。OpenVPNのmanページにあるこのディレクティブの説明には以下のように書かれています。
このマクロを使用すると、サーバー側でTCP_NODELAYソケットフラグがセットされ、接続してきたクライアントにプッシュされます。TCP_NODELAYフラグはTCPソケット上でのNagleアルゴリズムを無効にし、細かいパケットを大きなパケットにまとめずに即時に送るようにします。TCP上でのVPNアプリケーションでTCP_NODELAYを使用すると、たいていの場合はレイテンシーの向上が見込めます。ディレクティブの書き方は簡単で、サーバー側の設定ファイルに
tcp-nodelayと一行書き加えるだけです。
公開されている実際の測定結果によると、UDPのスループットには達しないものの、UDPと通常のTCPのちょうど真ん中ぐらい(またはそれより少し速いぐらい)のスループットが出るようです。
OpenVPNをTCPで使用しておられる方は一度お試しを。
2011-05-18
AndroidのClientLogin認証における脆弱性
既にいろいろなところでニュースとして取り上げられていますが、ちょっと情報の整理も兼ねて。ドイツのウルム大学の研究者たちの報告が最初の情報源です。
GoogleではClientLoginという認証方式を設けており、この方式に関してはGoogleのサイト上でも開発者向けの情報「Authentication and Authorization in the Google Data Protocol」で説明されています。簡単に言うと、ユーザーが一度Googleアカウントの認証をパスすると、その後最大2週間使用できるトークンがGoogleから発行され、その期間内はGoogleのサービスにそのトークン付きでリクエストを投げれば認証を通過できる(Googleアカウントの再度の認証は不要)、という仕組みです。この仕組みはGoogleのサービスを利用するサードパーティのアプリケーションでも利用できます。
Googleアカウントの認証手続きそのものは暗号化された通信経路上(HTTPS)で行われるため、ここは問題ありません。問題はその後で、認証後に発行されたトークンを使ったGoogleサービスへのリクエストが、暗号化されていないHTTP上を通過してしまうケースがある、ということです。HTTP上を通るのか、HTTPS上を通るのかは、そのアプリケーションの作りに依存します。少なくとも、Android 2.3.3以前のバージョンに搭載されたカレンダーや連絡先などのアプリケーションでは、リクエストがHTTP上を通過する(つまり、トークンが暗号化されない)と報告されています。
前述の「Authentication and Authorization in the Google Data Protocol」で使われている図を使って説明すると、このようになります。
認証に代わるトークンのやり取りが暗号化されていないということは、HTTPのリクエストをキャプチャしてしまえばそのトークンがそのまま入手でき、悪用できてしまうことになります。そのトークンの有効期限内であれば、他人のトークンを使ってGoogleサービスにアクセスできることになってしまうわけです。
Android 2.3.4以降、またはタブレット向けAndroid 3.0では問題が解決されているとのことですが、日本国内に存在するAndroid端末はほぼすべてがそれ以前のバージョンです。Android OSのバージョンアップも基本的にベンダーによる対応に依存しており、ユーザーがこの問題に対処するために自力でバージョンアップすることは難しいでしょう。
ユーザーができる対応としては、
- 公開されている無線LANアクセスポイントなど、第三者による通信の傍受が可能な環境で使用しているときは、Googleアカウントを使用するサービスすべてを利用しない(自動同期なども無効にしておく)。
- Android OSのバージョンアップ情報をこまめに確認し、アップデートが公開されたら速やかに適用する。
といったぐらいでしょうか。私もAndroidのユーザーとして、各ベンダーにも迅速な対応をお願いしたいものです。
2011-05-16
OpenVPNのスループット
詳細は上記サイトを参照していただくとして、要は「いい性能のPCを使ってGigabit上でOpenVPNをつないでみて、どこまでスループットを上げられるか実験してみよう!」ということです。OSはサーバー、クライアントともLinuxです。以下、結果を簡単にまとめるとこんな感じ(すべて計測値はiperfによるもので、プロトコルはUDPを使用しています)。
- 標準設定(MTUやFragmentなどをいじらない&CipherはBlowfish)のOpenVPNスループットで156Mbps。Cipherをaes-256-cbcに変更すると 126Mbps。今回のPCのスペックでは標準のままで100Mbpsは超えます。この速度で十分というケースもありそうですね。
- OpenVPNでMTUの設定値を大きくし、フラグメントを無効にするとスループットが上昇する。たとえばMTUを9000にすると 370Mbps、24000では 466Mbps、48000では 510Mbps。この値が最大で、これ以上MTUを増やすと速度は低下していく。 Cipherをaes-256にすると、MTUとスループットの相関性は低くなる(MTUを上げてもちょっとしかスループットが上がらない)。こんな大きいMTU設定したことない…。
- AES-NIを使用すると速度がかなり向上する(当然、CipherをAESにしないと効果はありません)。たとえば、AES256でAES-NIを使用すると、MTUが9000なら 249Mbps→410Mbps に、24000なら 259Mbps→540Mbps に、48000では 247Mbps→585Mbps に上がります。これは相当なパワーアップですね。
- OpenVPNの暗号化と署名を無効にした場合、 930Mbps というスループットに。Gigabitの範囲であればユーザー空間とカーネル空間の分離はパフォーマンスにそれほど影響せず(この結果によれば7%程度)、やはりOpenSSLによる暗号化と署名の処理がスループットに大きく影響することがわかる。
Profile
- 山崎 太郎 (Taro Yamazaki)
- プラムシステムズ株式会社所属。 主にVPN(OpenVPN)やセキュリティ関連技術、Webアプリケーションを手がけています。
Page Views
Popular Posts
-
「VPNっていろいろあるけど、OpenVPNのメリットって何?」 という疑問は多くの方が持たれますよね。この点は公式サイトなどにもいろいろ書かれているのですが、実際に使ってきたユーザー側としてメリットと思う部分をまとめてみました。
-
現在ダウンロードできるOpenVPNでは、今まで認証局の構築で使用していたeasy-rsaが含まれなくなっています。 OpenVPN.netのダウンロードページ にも Note that easy-rsa is no longer bundled with OpenVPN...
-
Jan Just Keijser氏の記事「 Optimizing performance on gigabit networks 」については こちら でも概要を取り上げましたが、記事全体にいろいろなヒントが含まれていますので、全文の日本語訳を掲載しています。意訳している部分も...
-
OpenVPNでは、接続してきたクライアントのVPNアドレスは動的に割り振られます(その際に割り振られる際のアドレス範囲はOpenVPNサーバー側設定ファイルに基づきます)。特定のVPNクライアントに特定のVPNアドレスを割り振りたい場合、OpenVPNでは以下の2つの方法で設定...
-
では、いよいよiPhone構成ユーティリティでVoDの設定をしてみましょう。あ、 前の記事 での準備はきちんとやっておいてくださいね!
-
前回 は2つのワンタイムパスワードの生成方法について取り上げました。今回はいよいよ実際の生成アルゴリズムを取り上げましょう。TOTPをベースに説明します(ただ、前回も解説したように、基本的なロジックはTOTPとHOTPで同じです)。 参考としてpythonのコードも併記してみま...
-
OpenVPNはLinuxをはじめとした幅広いプラットフォームで動作実績があるのが特徴の一つです。 今回は、最近の電子工作ブームでも話題のシングルボードPC 3機種をOpenVPNサーバーとしてセットアップし、OpenVPNのVPNパフォーマンスを測定してみましょう。
-
現時点においてはマニュアルやHowToにも記載されていない(ChangeLogにちょっとだけ出てきます)あまり知られていない機能なのですが、「設定ファイルで鍵ファイルや証明書ファイルのパスを記載する」という通常の方法とは別に、「鍵ファイルや証明書ファイル内のデータをそのまま設定フ...
-
前回 はワンタイムパスワードの基本的な仕組みについて説明しました。サーバー側とクライアント側で、それぞれ共通のルールに基づいてパスワードを生成させる必要があることを取り上げましたが、今回は OATH が規定しているその生成ルールについて具体的に説明します。 ワンタ...
-
OpenVPN Connect for iOSがリリース されましたので、それを記念(?)して、OpenVPNサーバーにiPhoneから接続する手順をまとめてみましょう。
© yamata::memo 2013 . Powered by Bootstrap , WebLyb