web-dev-qa-db-ja.com

「N番目の文字を入力してください」HSMなし

この質問は 数回尋ねられた でしたが、常に次の形式になります

"どうやって examplewebsite.com「パスワードのxth ythおよびzth文字を入力してください」機能を実装しますか? "

そして、答えは通常、それらが保存されたパスワードに対して合格/不合格でそのようなクエリに答えることができる [〜#〜] hsm [〜#〜] を使用することであると想定されます。

安全なハードウェアを使用せずにこれを実現するための賢明な方法がないはずです。このようなキーロガー緩和を実装するためにセキュリティに十分に関心がある人はおそらくHSMを使用するための予算と専門知識を持っているので、これはありそうもないシナリオかもしれません。しかし、学術的な観点から、良い実装はありますか?

素朴なアプローチは、すべてを保存することかもしれません3 choose nの組み合わせ。ここで、nはパスワードの長さ、choose数学的な組み合わせ関数 です。

しかし、これらのトリプレットを保存することには問題があります。

  • サーチスペースがブルートフォースになりやすいので、ソルティングによってデータベースを防御することはできません。
  • 長いパスワードには非常に多くの可能な組み合わせがあり、ルックアップとストレージの問題につながります。数を固定の上限に制限することもできますが、それはパスワードの強度を損なうようになります(格納することを選択したトリプルに依存する非常に複雑な方法で)。
  • 各トリプルの生成に使用されるインデックスも保存する必要があり、上記の両方のポイントが適用されます。

このアプローチは貧弱ですが、HSMの使用を必要としないより良いアプローチはありますか?

12
lynks

クライアントに送信される質問が約3文字になる可能性があると仮定します。サーバーは(たとえば)パスワードの4、7、8番目の文字を要求します。

Freeze time!その時点で、サーバーは上記の質問をしており、クライアントからの回答を確認できます。つまり、完全な状態では、3つの文字値の特定のシーケンスが正解かどうかを判断するのに十分な情報があります。そして、限られた量のCPUを投資した後、サーバー上で最大で1秒の計算に相当することがわかります。

それがソフトウェアのみの場合は、状態を回復できます。マシンをハイジャックして、ハードディスクの完全なコピーを入手できる攻撃者を想定しています。その時点で、攻撃者はすべてを持っているため、自分のマシンでサーバーのエミュレーションを実行できます。特に、彼はサーバーを既知の以前の状態に巻き戻すことができます。

したがって、攻撃者は、エミュレートされたサーバーを試行して巻き戻すことにより、3つの文字値に対して徹底的な検索を実行できます。

これは避けられないことです。専用のクローン不可能なハードウェア(HSM)がなければ、この種の攻撃が機能する必要があります。これは基本的に、パスワードの強度が3文字のパスワードの強度であること、つまり自慢する価値がないことを意味します。

11
Tom Leek