Google以外のサイトで2要素認証を設定するためにQRコードの写真を撮るときに表示される「秘密」の目的は何ですか?
なぜそれが必要なのですか?
保存すると、シークレットを持っている人は誰でもログインコードを取得できるため、2ファクター認証の目的全体を無効にしないのですか?
Google認証システムは [〜#〜] totp [〜#〜] および [〜#〜] hotp [〜#〜] アルゴリズムをサポートしています。
どちらのアルゴリズムでも、ワンタイムパスワードを正常に生成するには、サーバーとクライアント間でシークレットを共有する必要があります。アルゴリズムの各RFC(または私の答え here )を読んで、理解を深めることをお勧めします。
はい、攻撃者が共有秘密を取得できた場合、アルゴリズムは無効になります。ただし、これはあまり実用的ではありません。シークレットは、アルゴリズムのセットアップ時にQRコードの形式で一度だけ表示されます。おそらく、これが発生すると画面の前に座って、不審な人物が近づいて携帯電話でQRコードのスキャンを開始した場合に気付くでしょう。これが事実である場合、あなたが採用できる多くの物理的対策があります。
シークレットが共有されると、サーバーとクライアント(この場合は電話)に保存されます。少なくともAndroidの場合、シークレットは暗号化されずにSQLiデータベースファイルに保存されます。ただし、このファイルにアクセスできるのは、デバイスがルート化されていないため、Authethenticatorアプリからのみであり、簡単に入手することはできません。 iOSデバイスでは、難しくはないにしても同じくらい難しいはずです。攻撃者がサーバーに危害を加えた場合、はるかに大きな懸念があります。
つまり、秘密が漏洩した場合、アルゴリズムは無効になります。しかし、秘密の漏洩は簡単には起こりません。いずれにせよ、[〜#〜] 2 [〜#〜]要素認証です。あなたはまだあなたを保護する他の要因を持っています。
シークレット(またはシード)は、ワンタイムパスワードOTPで使用される値です。あなた(またはパスワードジェネレーター、そしてあなたの場合はGoogle認証システム)がその秘密の値を知ることは不可欠です。あなたとサーバーの両方がその価値を知っていることが不可欠です。
スキャンしているQRコードは秘密の値です入力した値を簡単にするためにカメラがそれを理解できるようにエンコードされていますあなたの電話。スマートフォンにカメラがない場合、またはQRコードをスキャンできない場合は、シークレット値を手動で入力する必要があります。それが彼らがあなたに価値を示す理由です。彼らはあなたにそれを見せますonly、そしてあなたがそれをあなたに見せたときに誰も周りにいないことを確認するべきです。
奇妙なことに、ここでは実際に2要素認証を設定するのではなく、「所有している」タイプの1つの認証要素を設定します。これは、「知っている」認証要素であるパスワードと組み合わせて、2要素認証を提供することを目的としています。
「持っているもの」は、モバイルデバイスであることを目的としています。ユーザーがそのモバイルデバイスを持っていると認証される方法は、ユーザーがそのデバイスに表示されたコードを入力することを要求することです。このコードがデバイスを認証するには、デバイス、認証サーバー(共有シークレット)にのみ存在し、他のどこにも存在しないシークレット値に依存する必要があります。
シークレット値はサーバーで生成され、モバイルデバイスに送信する必要があります。 QRコードにはその秘密の値が含まれています。
シークレット値は、このデバイスベースの認証を設定した場合にのみ表示されます。これは、安全な環境で行う必要があります。誰もショルダーサーフィンをして秘密をつかむことができない家で。シークレットを持っている人は誰でもログインコードを取得できますが、シークレットを持っているのは正当なユーザーだけです。
TOTP認証(Google認証システムで使用されるものなど)は、電話機と認証サーバーにのみ存在する事前共有秘密を使用して、タイムスタンプを6桁の数値に変換することで機能します。これを簡単に表すために、f(timestamp, secret) = 6-digit code
。秘密がサードパーティに知られている場合、はい、2要素認証の目的は無効ですが、携帯電話からこの秘密を取得することは簡単ではありません。