この質問は 数回尋ねられた でしたが、常に次の形式になります
"どうやって
examplewebsite.com
「パスワードのx
thy
thおよびz
th文字を入力してください」機能を実装しますか? "
そして、答えは通常、それらが保存されたパスワードに対して合格/不合格でそのようなクエリに答えることができる [〜#〜] hsm [〜#〜] を使用することであると想定されます。
安全なハードウェアを使用せずにこれを実現するための賢明な方法がないはずです。このようなキーロガー緩和を実装するためにセキュリティに十分に関心がある人はおそらくHSMを使用するための予算と専門知識を持っているので、これはありそうもないシナリオかもしれません。しかし、学術的な観点から、良い実装はありますか?
素朴なアプローチは、すべてを保存することかもしれません3 choose n
の組み合わせ。ここで、n
はパスワードの長さ、choose
は 数学的な組み合わせ関数 です。
しかし、これらのトリプレットを保存することには問題があります。
このアプローチは貧弱ですが、HSMの使用を必要としないより良いアプローチはありますか?
クライアントに送信される質問が約3文字になる可能性があると仮定します。サーバーは(たとえば)パスワードの4、7、8番目の文字を要求します。
Freeze time!その時点で、サーバーは上記の質問をしており、クライアントからの回答を確認できます。つまり、完全な状態では、3つの文字値の特定のシーケンスが正解かどうかを判断するのに十分な情報があります。そして、限られた量のCPUを投資した後、サーバー上で最大で1秒の計算に相当することがわかります。
それがソフトウェアのみの場合は、状態を回復できます。マシンをハイジャックして、ハードディスクの完全なコピーを入手できる攻撃者を想定しています。その時点で、攻撃者はすべてを持っているため、自分のマシンでサーバーのエミュレーションを実行できます。特に、彼はサーバーを既知の以前の状態に巻き戻すことができます。
したがって、攻撃者は、エミュレートされたサーバーを試行して巻き戻すことにより、3つの文字値に対して徹底的な検索を実行できます。
これは避けられないことです。専用のクローン不可能なハードウェア(HSM)がなければ、この種の攻撃が機能する必要があります。これは基本的に、パスワードの強度が3文字のパスワードの強度であること、つまり自慢する価値がないことを意味します。