web-dev-qa-db-ja.com

HSBCの「セキュアキー」は実際どのように機能しますか?

私の銀行から最近、Digipass/Secure Keyが送られてきました 小さな計算機のように見えます 。緑色のボタンを押してオンにし、a PINと入力してロックを解除します。次にもう一度緑色のボタンを押して、ログイン時に入力する6桁のコードを生成します。

ただし、このデバイスでセキュリティがどのように向上するかは、実際にはわかりません。私はすべてのデバイスが個人のアカウントにリンクされていると想定しています。しかし、デバイスからの通信はありません。ボタンを10回押して、10個の異なるコードを生成できますが、いずれも機能しているようです。

銀行はコードが本物であることをどのようにして知るのですか?

42
DisgruntledGoat

このようなデバイスを構築するには、2つの標準的な方法があります。

  • 時間ベース。デバイスには秘密キーがあります[〜#〜] k [〜#〜](デバイスと銀行だけが知っています) )。ボタンを押すと、デバイスはF(K、T)(where[〜#〜] t [〜#〜]は現在の時刻です)、6桁のコードとして出力します。

    [〜#〜] k [〜#〜]も知っている銀行は、同じ関数を計算できます。クロックが完全に同期していない可能性があるという事実に対処するために、銀行は値の範囲を計算し、指定した6桁のコードがその範囲内にあるかどうかをテストします。つまり、銀行はF(K、T-2)F(K、T-1)F(K、T)F(K、T + 1)F(K 、T + 2)、そして提供するコードがこれらの5つの値のいずれかに一致する場合、銀行はログインを受け入れます。

    これはyourデバイスがどのように機能するかではないと思います。ボタンを押すたびに、デバイスは常に異なる値を与えるからです。

  • シーケンスベース。デバイスには秘密鍵があります[〜#〜] k [〜#〜](デバイスと銀行だけが知っています) )。また、カウンター[〜#〜] c [〜#〜]も含まれています。これは、これまでにボタンを押した回数をカウントします。 [〜#〜] c [〜#〜]はデバイスの不揮発性メモリに保存されます。ボタンを押すと、デバイスは[〜#〜] c [〜#〜]をインクリメントし、F(K、C)、6桁のコードとして出力します。これにより、毎回異なるコードを取得できます。

    銀行はまた、デバイスのカウンターの現在の値を追跡し、これを使用して、指定した6桁のコードが有効かどうかを認識します。多くの場合、銀行は値のウィンドウをテストします。たとえば、最後に表示されたカウンター値が[〜#〜] c [〜#〜]だった場合、銀行はF(K 、C + 1)F(K、C + 2)F(K、C + 3)F(K、C + 4)そして、これらの4つの可能性のいずれかに一致する場合、6桁のコードを受け入れます。これにより、ボタンを1回押してから銀行に送信しなくても、ログオンできます(永久にロックアウトされることはありません)。一部のスキームでは、コードにギャップがある場合(たとえば、ボタンを数回押した後、コードを銀行に送信しなかったため)、銀行がログに記録する前に、2つの連続した有効なコードを入力する必要があります。オン。

あなたが私たちに言ったことに基づいて、私はあなたのデバイスがおそらくシーケンスベースのアプローチを使用していると仮定します。

46
D.W.

ワンタイムパスワードの導出方法についての「オープン」な説明が必要な場合は、Oath標準とアルゴリズムの仕様について、こちらをご覧ください https://openauthentication.org/specifications-technical-resources / 。 Vasco/Digipass製品はこの仕様をサポートしており、この場合はトークンで使用できますが、他のOTP生成アルゴリズムはサポートしています。

通常、トークンのシリアル番号は認証サーバーデータベースのレコードとして保持され、シリアル番号はユーザー名に割り当てられます。シリアル番号は「シード」値とも照合されます。この値は、アルゴリズムを介して時間/シーケンス値と組み合わせると、OTPを導出します。

また、認証サーバーは数分のクロックドリフトを許容するため、PINを何度も繰り返して認証を受けることができました。所有しているトークンに時計が組み込まれています時間ベースのコンポーネントを生成します。サーバーは、時間の範囲の値を生成します。サーバーは、送信したコードを確認し、ドリフト値をレコードに書き込むことができます。一部のシステムには、「次のトークンコード」モードがあり、クロックのずれが大きすぎます。システムは、2つの値を送信して、それらが正しいかどうか、正しい「正しい範囲」の時間範囲かどうかを確認するように求めます。値が正しい場合、認証サーバーはクロックのずれを書き込むことができますレコードへの値。

9
Fearmonger

この質問は、多要素認証( [〜#〜] mfa [〜#〜] )がどのように機能するかについての非常に高いレベルの概要に役立つと思います。もちろん、技術的な詳細のロットとロットをざっと見なければなりません。

要するに、これは何が起こるかです:

  1. 銀行は、一意の暗号化 key を使用してトークンをプログラムします。 (この場合、DigipassトークンはVascoによって作成されますが、同様のトークンを作成する manyothercompanys があります。 " あなたが持っているもの 多要素認証に関して).

  2. トークンは、暗号化キー、現在時刻、および(オプションで)その他のさまざまな要因から派生した一連の文字を生成します。

  3. 銀行は(一意の)暗号化キー、およびトークンが使用する他のすべての要素を知っているため、入力をリバースエンジニアリングして、そのトークンを「所有している」人物を見つけることができます。トークンの所有者がログインしている銀行口座の所有者と一致する場合、ログインは本物です。

この中心的なテーマには多くのバリエーションがありますが、一般的には常に「持っているもの」(物理トークンまたはスマートフォンアプリ)、トークン内に格納されている秘密鍵、および出力を生成するための数学アルゴリズムが関係します。

多くの場合、時間は出力を生成する上で重要な要素です。アルゴリズムに応じて、出力は毎回異なる場合があります(あなたの場合)、またはたまにしか変化しない場合もあります(例:1時間ごと)。

4
scuzzy-delta