RSAトークンはどのように機能しますか?



How Do Rsa Tokens Work



解決:

Wikiでの引用

RSA SecurID認証メカニズムは、ハードウェア(USBドングルなど)またはソフトウェア(ソフトトークン)のいずれかの「トークン」で構成され、コンピューターユーザーに割り当てられ、を使用して一定の間隔(通常は60秒)で認証コードを生成します。内蔵クロックとカードの工場出荷時にエンコードされたランダムキー(「シード」と呼ばれます。シードはトークンごとに異なり、対応するRSA SecurIDサーバー(RSA認証マネージャー、以前はACE /サーバー)にロードされます。トークンを購入します1。



したがって、RSA公開鍵アルゴリズムに関連するものがある可能性があります。 SecurIDの実際の内部(隠すことによるセキュリティ)についてはほとんど知られていませんが、いくつかの分析があります。ウィキペディアのSecurIDページの下部にある初期のセキュリティ分析など。

また、ハードウェアトークンは改ざんされにくいため、盗まれたトークンを複製することはほとんど不可能です。



更新:eyalerのおかげで、従来のSecurIDには公開鍵/秘密鍵はありません。それらは、非対称アルゴリズムではなく、「共有秘密」に基づいています。ウィキペディアによると、AES-128の亜種は、秘密鍵(「シード」)からトークンコードを生成するために使用されます。秘密鍵は工場で鍵にエンコードされています。


あなたはそれが実際にどのように行われるかをhttp://seclists.org/bugtraq/2000/Dec/459で見ることができます

(過度に単純化された)メカニズムは



hash = x秒ごとに実行:hash = hashfunction(hash + secret_key)print hash 

Blizzard Mobile Authenticatorsのコードはオープンソースであるため、どのように機能するかを理解できます。 (記録)

基本的な要点は次のとおりです。

  • さまざまな秘密を使用してハッシュを生成する
  • ただし、開始時刻からの30秒間隔の数も含めます(例:1970年1月1日)

簡単に言うと、疑似コードは次のとおりです。

String GetCurrentFOBValue(){//すべてのコードがパブリックドメインにリリースされます。帰属は必要ありません。 // 1970年1月1日以降の間隔数を計算します(UTC)// Blizzardオーセンティケーターは30秒ごとにロールオーバーするため、// codeIntervalは1970年1月1日以降の30秒間隔の数です。//RSAトークンは1分ごとにロールオーバーします;したがって、カウンタは// 1970年1月1日から1分間隔の数にすることができます// Int64 codeInterval = GetNumberOfIntervals(); Int64 codeInterval =(DateTime.Now-new DateTime(1970,1,1))。TotalSeconds / 30; //合意された20バイトの秘密鍵資料を使用して、コード間隔のHMAC_SHA1ダイジェストを計算します。 //パスワードからPBKDF2を使用して、// 20バイトの秘密鍵マテリアルを生成します。 // Blizzardのモバイルオーセンティケーターには、Webサイトから取得して登録するときに//秘密鍵の素材が与えられます。 Byte [] secret = PBKDF2( 'FOBが知っている超秘密のパスワード'、20); // 20バイト//共有秘密鍵を使用してcodeIntervalのメッセージダイジェストを計算しますByte [] hmac = HMAC(secret、codeInterval); // hmac配列から4バイトを選択し、それらをInt32に変換します。 //ダイジェストの最後の4ビットをインデックスとして使用します// Int32を構築するために使用する4バイトintstartIndex = hmac [19]&0x0f; Int32値= Copy(hmac、startIndex、4).ToUInt32&0x7fffffff; //ブリザードオーセンティケーターは8桁を表示しますreturnString.Format( '%。8d'、value%100000000); //しかし、RSA FOBがString.Format( '%。6d'、value%1000000);を返すように、6を簡単に返すこともできます。 }