ユーザーからの直接入力を必要としないデバイスレベルの2要素認証のアイデアがあり、これまでに試したことがあるかどうかを知りたいと思っていました。
携帯電話(または任意のデバイス)からアクセスするアカウントがあるとします。パスワードを送信すると、デバイスは自動的に独自の「パスワード」を追加します。これは、バイナリ文字列と考えることができます。しかし、ここが鍵です。デバイスのパスワードは、固定レートでランダムに変化します。
たとえば、新しいアカウントを作成した日、デバイスは自動的にall 1ベクトルへのパスワードを開始します:1 1 1 1 1 1 1 1
。しかし、1週間後にログインすると、各エントリが変更された可能性があります(時間間隔に比例)。したがって、新しいデバイスパスワードは1 1 0 1 1 1 1 0
。 2つのビットが減衰しています。ランダム減衰の計算は、デバイスに対して完全にローカルです。
これはどのように2要素認証の形式ですか?次に、悪意のあるエージェントが別のデバイスにログインしようとしたとします。どのようなデバイスレベルのパスワードを使用していますか?元のすべて1のベクトルを使用することはできません。彼らはパスワードのランダムな減衰率を知っていますが、変更された正確なビットはそれらから隠されています。彼らが提出するとします1 0 1 1 0 1 1 1
、どのビットが減衰したかを推測しようとしています。サーバーはこのパスワードを確認し、以前のパスワードと比較します1 1 0 1 1 1 1 0
、そしてこの新しいパスワードが有効であることは不可能であることがわかります。
明らかにはるかに長いキーが必要であり、すべて1から開始してランダムに減衰するよりも複雑なランダム化スキームがあります。しかし、このアイデアには多くの利点があります。
同様にいくつかの欠点もあります:
基本的に、このスキームは、盗まれた資格情報の価値を非常に迅速に減衰させます。犯罪者が人間のパスワードとデバイスレベルのパスワードの両方のパスワードを盗んだとしましょう。犯罪者は、盗難から価値を得る前にこれらの資格情報を使用する必要があります。最初にログオンする場合は、変異したデバイスのパスワードと人間のパスワードを送信します。これにより、泥棒の盗んだ資格情報は役に立たなくなります。泥棒があなたの前に資格情報を使用していても、次にログインすると、問題があることをシステムに通知します。したがって、泥棒の利益は大幅に制限されます。
私の質問は、このようなものは存在しますか?これは実現可能だと思いますか?実用的ですか?
ご協力ありがとうございます。
いいえ、機能しません。 1つの重要な要素のため確率。
確率をシステムに投入した場合、反対側が本物であるかどうかは保証されません。あなたがサイコロを数回投げることで、サイコロが公平であるかどうかを確実に言うことができないように。スローが多かった後は、おそらくサイコロは公平だと言えます。すでに述べたように、あなたは確率を持っています。
サーバーを見てください。キーを受け取る0 0 0 0 0 0 0 0
。それはそれほど速く崩壊するべきではなかったでしょう?しかし、すべてのビットは固定レートではなく減衰する確率を持っているため、すべてのビットが同時に減衰する可能性は十分にあります。何故なの?では、サーバーがデバイスが侵害されたことをどのようにして知ることができるのでしょうか?
確実性ではなく確率で進んでいく場合は、ユーザーのすべてのリクエスト(期間、時間帯、購入の種類(クレジットカードの場合))を使用してモデルをトレーニングし、大幅な変更時にブロックすることができます。発生します。クレジットカードはすでにそれをしている、そしてそれは通常うまくいく。
固定デバイスキーは、ランダムに変化するものよりも優れています。 iPhoneのSecure EnclaveまたはAndroidの同等のデバイスにデバイスキーを保存すると、キーを盗むのが非常に難しくなります(州レベルの問題と考えてください)。アプリケーションが最初にインストールされ、ユーザーが自身を認証するときに、トークンserver-sideを生成し、デバイスに安全に保存します。これは、TOTPトークンを生成し、ユーザーの介入なしに次の認証に自動的に追加するために使用されます。
基本的にはあなたのアイデアと同じ利点があります。ユーザーの操作は必要ありません。電話の指紋をとったり、プライバシーを侵害したりすることはありません。それ以外は、確率的ではなく、真のアカウント所有者を識別します。セキュアプロセッサからキーを抽出することは非常に難しく、おそらくそれがもたらす金銭的利益よりもコストがかかるため、攻撃者はデバイスを盗む必要があります。