web-dev-qa-db-ja.com

トークンジェネレーターを使用して多要素認証を実装する方法

いくつかのプロジェクトに多要素認証を実装したいと思います。

ここで、最初の要素はユーザー名とパスワードですが、2番目の要素はトークンジェネレーターを使用したいです。

これらのトークンは6文字長で、ユーザーが携帯するデバイス(電話または特別なデバイスなど)によって生成されます

しかし...トークンジェネレーターがどのように動作し、どのように実装するのか私にはわかりません。 (私は学ぶためにここにいます)

最終的には、トークンを生成するための電話アプリと、ユーザーがログインするWebサイト(php)を構築したいと思います。

誰かがこれらのアルゴリズムがどのように機能するかについて正しい方向にいくつかの指針を教えていただけますか?

16
HTDutchy

既存のものはたくさんあり、独自のAPIが付属しています。希望するアルゴリズムを実装できます。 this サイトを参照してください。

切断されたトークンには、いくつかのオプションがあります。彼らはすることができます:

  • カウンターベース-すべてのプレスと認証システムでの新しいパスワードは、最後に使用されたパスワードと同じくらい古いものは許可しません
  • 時間ベース-アルゴリズムは現在の時間を考慮に入れ、サーバーは現在、前の分、および次の分(またはおそらくわずかに広いウィンドウ)以外は許可しません。良い時間同期が必要

秘密の共有値と時間またはカウンターのいずれかを使用して、予測不可能なシーケンスベースのアルゴリズムをシードする必要があります。 hash(time . secret)など。 SHA-256を使用して一部のビットを切り落とすと効果的です。

強度の比較:

  • RSAトークン-8桁の数字、108 (1億分の1)
  • 6桁の数字、106 (100万人に一人)
  • 6つの英数字、2.1x109 (20億分の1)
  • 6つの英数字、キャップ付き:5.6x1010 (560億に1つ)

以下も参照してください。

7
Jeff Ferland

現在、選択したOTPトークンとして Google Authenticator を使用しています。

これが初めての場合は、 OATH Initiative を読むことをお勧めします。この地はよく舗装されています、頑張ってください!

6
MToecker

いくつかの重要な補助的な設計の考慮事項。

シングルユーザーまたはマルチユーザー?

これがあなただけのペットプロジェクトである場合、多くのサポートタスクは簡単です。ただし、これがマルチユーザーシステムの場合は、さらに多くの要因を考慮する必要があります。

統合トークンまたは個人トークン?

統合トークンは、すべてのユーザーに同等の認証を提供するトークンです。つまり、複数の物理デバイスがある場合でも、ユーザーは認証のために任意の物理デバイスを使用できます。これはサポートには便利ですが、認証には不十分です。一方、ユーザーごとのトークンは、指定されたユーザーのみが使用できます。各ユーザーは、異なる物理トークンデバイスに一意に割り当てられる必要があります。ユーザーがデバイスを紛失または損傷した場合、ユーザーは新しい物理デバイスに割り当てられる必要があります。ユーザーごとに強力な認証が提供されますが、運用サポートのコストは高くなります。

認証システムパラメータ。

失敗した認証と次の認証プロンプトの間の遅延など、いくつかの重要なパラメーターがあります。このフェイル遅延は、攻撃者がユーザー名とパスワードを取得したが、有効なトークンデバイスを持っていないオンライン攻撃からの保護に役立ちます。別のパラメーターは、アカウントが一時的に無効になるまでの失敗した試行の数です。以前の設定を追加すると、一時的に無効になります。これは、n回失敗した後、アカウントを一時的に無効にする必要がある期間です。

トークンデバイス保護

トークンデバイスは認証コンポーネントであるため、トークンデバイスは攻撃者にとって魅力的なターゲットになります。携帯電話またはスマートフォンの使用を検討している場合は、トークン生成ソフトウェアを監視または妨害する試みから保護する方法について考える必要があります。デバイスがカスタムデバイスの場合、どの通信チャネル(USB、イーサネット、RS-232)があり、攻撃者はどのようにしてデバイスを分析または変更できますか?

6
this.josh

キーとカウンター(またはタイムスタンプ)をハッシュしてワンタイムパスワードを作成したい。トークンジェネレーターは、キーとカウンターをハッシュし、結果を6文字に切り捨て、カウンターをインクリメントします。サーバーは同じように比較します。

[〜#〜] hotp [〜#〜] はカウンター付きの一般的なアルゴリズム、 [〜#〜] totp [〜#〜] はタイムスタンプを使用するアルゴリズムです。これらの利点の1つは、ハードウェアおよびソフトウェアのトークンジェネレーターが利用できることです。

トークンの生成は簡単な部分です。そのトークンを使用して安全かつ確実に認証することは、より厄介です。 Duo Security には、2要素サービスで使用するオープンソースクライアントがあり、参照に役立つ場合があります。免責事項、私はDuoの従業員です。

5
Karl Anderson

私は現在、2要素認証にBillionのソリューションを使用しています。しかし、少なくとも私たちのセットアップでは、Windowsコンピューターが必要です。だから私はYubiKeyに少し興味がある。ここにいくつかの詳細があります。

https://www.grennan.com/?p=17

https://code.google.com/p/yubico-pam/wiki/ReadMe

1
Arlukin

次にOATHを調べます。GoogleAuthenticatorが YubiKey と同様にそれを使用します。実際、YubiKeysは、いくつかの異なるアルゴリズムを実行するようにプログラムしたり、ヘルパーWindowsアプリケーションでTOTPを実行したりできます。

0
bVector