オンラインでホームバンキングアカウントを安全に保護したり、自宅から会社のコンピューターネットワークにアクセスしたりするために、かなり長い間(おそらく10年)RSA SecureID®キーを使用しています。これらのキーは、有効期限が設定されている6桁の数値トークンを生成します。しかし、私はこれらがどのように機能するかを常に疑問に思っていました。
右側には、1秒に1回点滅するドット(図には表示されていません)があり、左側には、垂直に積み重ねられた6本の水平バーのスタックがあり、それぞれが10秒ごとに消えます。 60秒が経過するたびに、トークンは自動的にリセットされ、前のトークンは無効になります。
私の知る限り、これらのデバイスはネットワークを利用していません、そしてそれらが生成する数はサーバーによってチェックされなければなりません(サーバーが銀行であろうと会社のサーバーであろうと)。したがって、このデバイスの内部には、小さなバッテリーから電力を供給される非常に正確なタイマーを含むメカニズムで乱数を生成するアルゴリズムを保存する必要があります。タイマーは非常に正確である必要があります。サーバーは、生成された数字の有効性を非常に同じ時間間隔でチェックする必要があるためです。すべてのユーザー/従業員に対して、サーバーは、私が理解している限り、同じ乱数生成アルゴリズムを格納しなければならず、そのようなアルゴリズムは顧客/従業員ごとに1つずつあります。もちろん、チップが盗まれた場合、たとえデバイスが壊れたとしても、攻撃者がそこに格納されている乱数生成アルゴリズムにアクセスできないようにチップを構築する必要があります。
これはどのように機能しますか?
ありがとう!
はい、あなたが言うようにそれは機能します。チップは「改ざん耐性」があり、攻撃しようとすると「シード」(秘密鍵)が消去されます。これは多くの場合、ユーザーが交換できないバッテリーと、デバイスが開かれたとき、またはチップ表面が取り除かれたときにデバイスへの電力を遮断する「トラップ」を備えることによって達成されます。その後、キーはSRAMに保存され、キーを保持するための電力が必要になります。
キーはシードで、現在の時刻と60秒のステップ(事実上、現在のUNIXタイムスタンプ/ 60)を組み合わせてコードを更新します。
いいえ、デバイスは正確である必要はありません。代わりに、サーバーは最後に受け入れられたコードの時刻を保存します。次に、サーバーは1分前、1分先、および現在の時刻にコードを受け入れます。したがって、サーバーの現在の時刻が23:20の場合、23:19、23:20、23のコードを受け入れます。 21。
この後、最後に受け入れられたコードの時間を保存します。たとえば、23:21コードが受け入れられた場合、23:21をデータベースに保存し、23:21以前に生成されたコードの受け入れを拒否します。
次に、興味深い部分について説明します。23:19コードまたは23:20時間の23:21コードを受け入れる必要があった場合、不正確なトークンがサーバーから非同期になるのを防ぐために、サーバーはデータベースに保存します。これにより、次回のログオン時に、サーバーがステップ数を使用してコードを修正するようになります。
時計23:20に23:19コードでログインするとします。サーバーはデータベースに「-1」を格納します(23:21コードの場合、データベースに「+1」を格納します)。次回ログインしたときの時計は23:40です。次に、サーバーは23:38、23:39または23:40コードを受け入れます。 23:38コードが受け入れられると、データベースに「-2」が格納され、23:39にデータベースに「-1」が保持され、23:40にデータベースに「0」が格納されます。
これにより、サーバーとトークンの同期が確実に維持されます。さらに、システムは、トークンがサーバーから「遠すぎる」場合(長期間使用されていないため)、再同期を許可します。これは、システム管理者が行うか、トークンのユーザーが23:20と23:21、または19:10と19:11のようなトークンから2つの後続のコードを提供するよう求められるセルフサービス再同期サービスが提示されます。サーバーは、「最後に使用されたトークンコード」が生成された時刻以前に生成されたトークンコードを決して受け入れないことに注意してください(これにより、OTPコードの再利用が可能になります)。再同期が完了すると、トークンは提供された2つのトークンコードと現在のサーバー時間との差を保存し、再同期では、検索ウィンドウはプラス/マイナス50ステップのようになります(これにより、約0.75時間の双方向で非同期化します)。
サーバーは、50個の以前のコードと50個の将来のコードを生成することにより、非同期化されたトークンを検出できます。指定されたコードがそれに一致する場合、サーバーは自動的に再同期プロセスを起動します。多くの場合、攻撃者が再同期プロセスを使用して有効なコードを見つけるのを防ぐために、アカウントが再同期モードになると、再同期せずにログインが受け入れられなくなります。見つかりました。
SecurIDトークンには「シード」値が割り当てられており、シードとそのシステムクロックに基づいて数値を生成する特定のアルゴリズムでプログラムされています。シード値は、トークンとともに出荷されるファイルにも格納されます。トークンを受け取ると、システム管理者はシードファイルを認証サーバーにインポートします。 SecurIDトークンデバイスとサーバーの両方にシード値があり、両方がアルゴリズムを使用しているため、サーバーはいつでも正しいトークンコードを特定できます。
場合によっては、トークンのクロックが認証サーバーと同期しなくなることがあります。これが発生した場合、システム管理者または他の承認されたサポート担当者は、サーバーで再同期プロセスを実行することにより、ユーザーを支援できます。これにより、そのトークンの時間オフセットを認識するようにサーバーが構成され、今後の認証試行が正確に処理されるようになります。
注:これらの数値は、シードファイルに保存されているデータ、現在の時刻、および標準アルゴリズムに基づいてサーバーで予測可能でなければならないため、特別なツールとトークンへのアクセス権を持つ攻撃者が予測することもできます。 (さらに悪いことに、シードファイル自体へのアクセス-そのまま 2011年に発生したと思われます 。)十分な連続トークンコードが与えられた場合、シード値を決定し、その後、自分の。
セバスチャンの答えは素晴らしかった。簡単に言えばそれを言い直します。 SecureIDトークンは、シード値が含まれたクロックです。時間を表示する代わりに、数値を表示します。私たちが写真で見ることができる点は秒(私は思う)であり、バーは数値を変更しようとするときなので、時間を計ることができます。それが一番下に達している場合は、変更しようとしています。入力している場合は、待機する必要があります。
「シード」は、デバイスを認証しているサーバーにもあります。セキュリティ担当者がRSAサーバーをインストールするとき、ピンコードを受信するサーバーに同じシードをロードする必要があります。
つまり...基本的には暗号時計です。昔のLCDのように、子供たちがドラやプリンセスと一緒に持っている時計です。違いは、数値の計算を提供するシードです。