web-dev-qa-db-ja.com

人間用のワンタイムパスワードアルゴリズム

平均的な人間が処理できるほど単純であるが、数個では秘密を見つけることができないほど安全なワンタイムパスワード生成アルゴリズム(事前定義されたシークレットと変化する値/時間/カウンターなどに基づく)はありますか?パスワード(たとえば5-10)?

さまざまな特定のパスワードスキームとそれらがどの程度安全かについての質問を見てきました。しかし、いくつかのよく知られたアルゴリズムが存在するかどうか、もっと一般的に知りたいのですが。

直感は、何かが人間によって処理されるのに十分簡単であるなら、それもまた壊れやすいと私に言います。しかし、それでも、非対称暗号化、つまり安全なキー交換(DH)が可能であることに非常に驚いた。だから、びっくり!


編集:いくつかの明確化。

屋外で使用するための2要素認証について考えていたときに、疑問が浮上しました。安全な環境(自宅、オフィスなど)の一般的な2要素認証では、デバイスまたは電話でパスワードとOTPジェネレーターを使用します。デバイス/電話を紛失しましたが、パスワードは残っています。キーロガーがあなたのパスワードを盗みます、まだデバイス/電話があります。

しかし、両方が盗まれる可能性がある状況についてはどうでしょうか?たとえば、アプリを使用して、路上で電動自転車を拾ったり、駅のロッカーを開いたりします。スマートフォンでパスワードを入力している間に誰かが監視し、後でスマートフォン自体を盗む可能性があります。

この問題は、短い時間枠(たとえば10分)内に役に立たなくなるパスワードを使用することで解決できます。さらに、電話には個別のシークレット(SSLクライアント証明書など)があり、パスワード認証に対するブルートフォース攻撃を困難にします。

mr.spuraticのBlumのHCMUアルゴリズムに関する提案は、私が探していたものにかなり近いです。それはまだ平均的な人間には少し重すぎるように見えますが、練習すれば実現可能です。

17
ErosC

いくつかの商用スキームがあります。 GridGuardfrom SyferLock これを行うと主張していますが、私はそれらを使用したことがありません(所属はありません)。これは、ユーザーが通常の時間やカウンターベースのOTP(暗算なし)を使用するのではなく、認証時に複数のオプションから正しく選択することに依存しています。

ソリティアSchneier )は、人間が計算できる暗号システムでよく引用されますが、認証の目的で多少の調整が必要になります。共有キーを使用したチャレンジ/レスポンス認証は実用的ですが、OTPの説明を満たしていません。

何がすべきか通常の警告 で)は [〜#〜] totp [の実装になります) 〜#〜]RFC6238 )または [〜#〜] hotp [〜#〜]RFC4226 )、代替を使用 [〜#〜] hmac [〜#〜] ブルームのHCMUなどのハッシュ(Human Computable Machine Unbreakable、description- ここ )精神的に計算可能なハッシュ(より一般化された OCRA(RFC6287)) も参照してください。

TOTP/HOTPは基本的に、SHA-1を使用したHMACの(切り捨てられた)出力であり、入力は共有秘密とタイムスタンプまたはカウンターです。ただし、Blumのアルゴリズムはアルファベット入力にのみ適用されるため、入力の厳密なアルファベット表現を使用する必要があります。

ブルームはまた、論文の共同執筆 Towards Human Computable passwords(onArXiv) の大部分は非常に数学的なものですが、それ しない §7.2でOTPについて簡単に説明します。

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

11
mr.spuratic

ワンタイムパッドのように使用されるルックアップテーブルを持つことができます。

ルックアップブックの各ページは1日分のOTPであり、現在の日時でブックを検索して、その瞬間に適切なOTPを取得します。これはTOTPをシミュレートします。セキュリティ(TOTPが変更される頻度)とルックアップブックの厚さの間でトレードオフできます。

6
Lie Ryan

Steve Gibsonは、「パーフェクトペーパーパスワード」と呼ばれるものを、それがどのように行われるかを示すデモのようなものとしてまとめました。 https://www.grc.com/ppp に詳細があります。このサイトには、より洗練された実装を構築するために使用できるダウンロード可能なコードがあります。

これは時間ベースではありませんが、順番にしか使用できない一連のワンタイムパスワードです。現在のパスワードが盗聴されても、次のパスワードに関する情報は提供されません。パスワードごとの文字数と「アルファベット」は調整可能です。

enter image description here

ここでは、コード1A〜Dが既に使用されており、次に使用されるコードはE1(Tygq)であることがわかります。

4
Monty Harder

正直なところ、公式のTOTPアルゴリズムでさえ大規模に複雑ではありませんが、頭の中でHMACを計算することにかなり熱心である必要があります。ただし、これは、同じ構成要素のほとんどを使用して、計算された時間ベースのパスワードシステムを合理的に持つことができることを示唆しています。

主な問題は、人々が多くの点でコンピュータほど良くないということでしょう:

  • 人々は組み込みのタイムソースを持っていないので、ソースから「アウト」する合理的な長さの誰かを処理するのに十分な柔軟性が必要です。計算エラーを最小限に抑えるという観点からは、正しい時間内に約5分以上、さらにはそれ以上の人がいることを期待できません。
  • 人々は計算が遅い。コンピューターを使用して、数百万の計算を1秒で実行できます。必要な値を取得したら、おそらく1つの計算を管理できます。これはまた、誰かが有効な値を入力するのにもっと長い時間をかける必要があることを意味します。
  • 人々は繰り返し操作をするときに間違いを犯します。つまり、プロセスで1つの間違いを犯した場合、複数の値を入力する必要がある可能性が高くなります。各試行にはある程度の時間がかかります。

したがって、TOTPアルゴリズムを直接適用するには、次のことが必要です。

  1. HMACのステップを、平均的な人が精神的にできることで置き換える
  2. 人間が精神的との違いを解決できるエポックを定義します-おそらく今日の真夜中、日付ベースの変更が行われています
  3. 人間がいくつかの計算を実行できる十分な長さの間隔を定義します。これは、選択されたエポックからの指定された間隔の数であると識別できます。5分で実行できるため、0912でコードを計算すると、 (9 * 12 + 2 * 5 = 118を値として)
  4. 値と記憶されたキーでHMAC置換を使用します。
  5. 値のビットを破棄することにより、値を適切な範囲に変換します。

攻撃者は多くの潜在的な値をすばやく計算できるため、これはコンピュータベースのセキュリティよりも安全性が低いため、特定の間隔内で許可される試行回数を制限する必要もあります。

そして、いいえ、私は適切なHMACの置き換えが何であるかわかりません...

1
Matthew