ワンタイムパスワード。 どこ? なんで? どうやって?

「ワンタイムパスワード」というフレーズを初めて聞いたとき、私は途方に暮れていました。 どのように使い捨てですか? 誰が一度だけ有効なパスワードを使用しますか? 最初に使用した後にパスワードを破棄するために覚えておく必要があるパスワードの数は? とにかく、誰がそれを必要としているのか、それは通常の長命のパスワードがあるからです。



私と同様に「ワンタイムパスワード」というフレーズに戸惑う場合は、それが何であるか、何に使用でき、どのように機能するかをお話しします。



あなたが外国の都市に出張していて、ラップトップが故障したか、まったく持っていなかったため、緊急に企業のメールにアクセスするか、企業ポータルにアクセスする必要があると想像してください。 あなたは何をしますか? そうです、私たちのほとんどはインターネットの一般的な使用の場所、インターネットカフェ/ゲームクラブ/郵便局に行きます。 あなたが来て、コンピューターの前に座って、ブラウザーを開き、アドレスを入力すると、認証ページが表示されて...ストップ! これは公共のコンピューターです。ユーザー名とパスワードを今すぐ入力した場合、それらがすぐに第三者の手に渡らないという保証はどこにありますか? どうする? ワンタイムパスワードは、このような問題の解決に役立ちます。 ログインを入力し、ワンタイムパスワードを入力して、必要なリソースにアクセスします。 通常のパスワードよりも安全なのはなぜですか? はい。次回、企業リソースにアクセスするには、まったく別のパスワードを入力する必要があります。



上記のすべては美しく聞こえますが、疑問は残ります。次のパスワードはどこから取得するのですか? ログアウトする前に変更する必要があるかもしれませんか? 管理者は、パスワードを一度使用したことを追跡し、変更してSMSを送信できますか? それとも、これらのワンタイムパスワードのリストがあるのでしょうか? いいえ、すべてがはるかに簡単です-キーチェーン、フラッシュドライブ、クレジットカード、または小さな計算機のように見えるワンタイムパスワードジェネレーターがあります。 ワンタイムパスワードを生成するには、1つ(または「電卓」の場合は複数)ボタンをクリックするだけで、新しいパスワードが画面に表示されます。 このパスワードを入力し、必要な情報にアクセスします。次回完全に異なるパスワードが生成されるため、パスワードが盗まれたり見られたりすることを恐れません。



さて、そして最も興味深いのですが、これはどのように機能しますか? すべてが非常に簡単です。 このソリューションには2つのコンポーネントがあります:クライアント(これはユーザーに発行されるキーチェーン/フラッシュドライブ/電卓の形式のワンタイムパスワードジェネレーター)とサーバー(ユーザーが正しいパスワードを入力したかどうかを確認するソフトウェア部分)です。 ワンタイムパスワードジェネレーターの初期化時に、2つの値が書き込まれます:乱数(数値が大きいほど良い)は初期化ベクトルと呼ばれ、カウンターです。 同じデータがサーバーに保存されます。 ワンタイムパスワードジェネレーターでボタンが押されると、ハッシュ関数を使用して、初期化ベクトルとカウンターがワンタイムパスワードになる値に変換されます(実際、多少複雑ですが、これは動作の原理を理解するには十分です)。 ハッシュ関数は元に戻せないため、取得した値から初期値を復元することはほとんど不可能です。 カウンタは世代ごとに増加するため、ワンタイムパスワードの値は毎回異なります。 サーバーで同じ状況が発生し、ユーザーログインを受信すると、サーバーは同じハッシュ関数を使用して計算に使用する初期化ベクトルとカウンター値を見つけ、ワンタイムパスワードを受信します。 パスワードが一致する場合、ユーザーは認証され、リソースにアクセスできます。

誤ってボタンを数回クリックし、非同期化が発生した場合、ジェネレーターとサーバーを同期する方法があります。



説明されている操作スキームは大幅に簡素化されています。たとえば、サーバーが値を送信し、暗号計算機に入力し、別の「応答値」を取得して、パスワードとして認証フォームに入力するなど、より複雑なスキームがあります。



説明されている作業スキームは、イベント、つまりボタンのクリックに関連付けられており、時間に関連付けられている作業スキームもあります。



ワンタイムパスワードの上記の操作スキームは多少簡略化されていますが、私の意見では、作業の基本原則を明らかにしています。 RFC 4226のワンタイムパスワードの実装の詳細をお読みください。



PSこれはHabréに関する私の最初の記事ですが、最後ではないことを願っています...



ワンタイムパスワードジェネレーターがユーザーに発行されると、そのシリアル番号がユーザーのログインに添付されます。したがって、ユーザーのログインを受信すると、サーバーは初期化ベクトルとカウンターのどの値を使用する必要があるかを正確に認識します。 これらはどうなりますか



All Articles