This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these messages)
|
OTPWは、 Markus KuhnによってUnix系オペレーティングシステムの認証用に開発されたワンタイムパスワードシステムです。[1]ユーザーの実際のパスワードはネットワークを介して直接送信されるのではなく、短い文字列(定数シークレット)と一連のワンタイムトークンから、一連のワンタイムパスワードが生成されます。各ワンタイムパスワードは一度しか使用できないため、パスワードスニファーやキーロガーによって傍受されたパスワードは攻撃者にとって有用ではありません。
OTPW は、 UnixおよびLinux (プラグ可能な認証モジュール経由)、OpenBSD、NetBSD、FreeBSDでサポートされており、汎用のオープンソース実装を使用して他のシステムでも使用できます。
OTPWは、他のワンタイムパスワードシステムと同様に、単独で使用すると中間者攻撃の影響を受けます。これは、例えばSSL 、SPKM、または同様のセキュリティプロトコルを「基盤」として導入することで解決できます。これらのプロトコルは、サーバーを認証し、クライアントとサーバー間のポイントツーポイントセキュリティを実現します。
設計と他の実装との違い
S/KEYとは異なり、OTPWは、すべてのワンタイムパスワードが後続のパスワードの一方向ハッシュ値となるLamport方式に基づいていません。Lamport方式に基づくパスワードリストには、攻撃者がリストの最後のパスワードの1つを見ることができれば、そこから以前のすべてのパスワードを計算できるという問題があります。また、ホストに秘密のファイルが存在しない状態を保つため、 Aviel D. RubinがIndependent One-Time Passwordsで提案したように、暗号化されたパスワードを保存しません。
OTPWでは、すべてのパスワードの一方向ハッシュ値が、ユーザーのホームディレクトリにある、誰でも読み取り可能なファイルに保存されます。例えば、300個のパスワード(典型的なA4ページ)のハッシュ値を格納するのに必要なのはわずか4キロバイトの.otpwファイルで、通常はごくわずかなストレージ容量しか消費しません。
パスワードは慎重に生成された乱数です。乱数ジェネレータはRIPEMD-160セキュアハッシュ関数に基づいており、さまざまなシェルコマンドの出力をハッシュすることでシードを生成します。これらは、システム乱数シード、重要なシステムファイルへのアクセス時間、ホストの使用履歴などの形で予測不可能性を提供します。ランダム状態は、ハッシュ関数の160ビット出力です。ランダム状態は、古い状態と現在の高解像度タイマー出力を連結し、その結果を再度ハッシュすることで、使用ごとに反復されます。ハッシュ出力の最初の72ビットは、読み取り可能なパスワードを生成するために修正されたbase64スキームでエンコードされ、残りの88ビットは乱数ジェネレータの非公開の内部状態を表します。
多くのフォントでは、文字0とOや1とlとIを区別することが難しいため、修正された base64 エンコーディングは01l の3 つの文字を対応する:、=、%に置き換えます。たとえば、ユーザーが 0 を大文字の O と混同した場合、パスワード検証ルーチンが自動的にこれを修正します。S/KEY は、短い英語の単語のシーケンスをパスワードとして使用します。 OTPW では、代わりにデフォルトで base64 エンコーディングを使用します。これにより、同じパスワードエントロピーで、1 ページに多くのパスワードを印刷できるためです。 さらに、平均的な人間のスパイは、12 文字のランダムな文字列を短期記憶に書き込むのに 30 秒以上かかるため、攻撃者がパスワード リストを短時間見るのに対しては優れた保護を提供します。 一方、短い単語のリストは記憶がはるかに速くなります。 OTPW は、パスワードの長さが固定されている限り、任意のパスワード生成アルゴリズムを処理できます。現在のバージョンでは、otpw-genプログラムは、ユーザーが指定したエントロピー (オプション -e) を使用して、base-64 エンコード (オプション -p) と 4 文字単語エンコード (オプション -p1) の両方のパスワードを生成できます。
プレフィックスパスワードにより、パスワードリストの盗難や回線の盗聴だけでは不正アクセスは不可能となります。確かに、OTPWによって得られるセキュリティは、ユーザーがPINで保護された専用の計算機を使用してレスポンスを生成するチャレンジレスポンス方式のセキュリティには及びません。一方、紙は専用の計算機よりもはるかに持ち運びやすく、堅牢で、はるかに安価です。OTPWは、追加のバッテリー駆動デバイスが不便であったり費用対効果が低かったりする大規模なユーザーベース向けに設計されており、そのため、どこでも通常のUnixパスワードを使用しています。
RFC 1938 の提案とは対照的に、OTPW は一度に複数のワンタイムパスワードをロックしません。もし複数のパスワードをロックすると、攻撃者はロック解除されたパスワードのリストを簡単に使い尽くし、ログインを一切許可しないか、通常の Unix ログインパスワードを使用するように強制することができます。そのため、OTPW は 1 つのパスワードのみをロックし、それ以降のログインに対しては 3 回のチャレンジを発行します。100 を超える未使用のパスワードが残っている場合、100 万通り以上のチャレンジが存在することになり、承認されたユーザーがパスワード入力を完了するまでの間に攻撃者がレース攻撃を成功させる可能性は極めて低くなります。
使用法
OTPW パッケージによるワンタイムパスワード認証は、ユーザーのホームディレクトリにある.otpwファイルを介して行われます。システム全体にわたるファイルには状態が保存されないため、OTPW によって新たなsetuid root プログラムが導入されることはありません。ユーザーのホームディレクトリに.otpwが存在しない限り、ワンタイムパスワード機能は有効化されていません。
ワンタイムパスワード機能を設定したいユーザーは、otpw-genプログラムを実行するだけです。このプログラムはプレフィックスパスワードの入力を求め、パスワードリストを標準出力に書き込みます。選択したプレフィックスパスワードは記憶しておく必要があり、パスワードリストはフォーマットして印刷することができます。
ワンタイムパスワード認証を使用する場合、パスワードプロンプトの後に3桁のパスワード番号が表示されます。まずotpw-genに指定したプレフィックスパスワードを入力し、その後に(途中でリターンキーを押さずに)印刷されたパスワードリストから要求された番号のパスワードを入力してください。
ログイン: kuhn パスワード019: geHeimOdAkH62c
この例では、geHeim がプレフィックス パスワードでした。
巧妙な攻撃者は、パスワード入力の様子を観察し、ユーザーがパスワードを入力し終えるよりもはるかに速くコンピュータがデータを送信できるという事実を悪用しようとするかもしれません。ユーザーが最後の文字を入力した後、リターンキーを押すまで数百ミリ秒かかるため、攻撃者は同じマシンに並列接続することで、ユーザーよりも速くリターンキーのコードを送信できる可能性があります。
このような最後のキーをめぐる競争攻撃を防ぐために、別の試行と同時に行われるログイン試行では、3 つのワンタイム パスワードを入力する必要があります。これらのパスワードはいずれも、同時認証試行によってロックされるパスワードとはなりません。
ログイン: kuhn パスワード 022/000/004: geHeimQ=XK4I7wIZdBbqyHA5z9japt
参照
参考文献
- ^ Kuhn, Markus (2014年8月7日). 「OTPW – ワンタイムパスワードログインパッケージ」.ケンブリッジ大学 コンピュータサイエンス・テクノロジー学部. 2023年9月6日閲覧。