it-swarm.com.de

Wie funktionieren RSA-Token?

Ich würde gerne verstehen, wie RSA-Token (SecurID) funktionieren. Welches ist der dort verwendete Algorithmus? Ist er derselbe Algorithmus wie die normale RSA-Verschlüsselung/Entschlüsselung?

38
Jau L

Zitieren in Wiki

Der RSA SecurID-Authentifizierungsmechanismus besteht aus einem "Token" - entweder Hardware (z. B. ein USB-Dongle) oder Software (ein Soft-Token) -, das einem Computerbenutzer zugewiesen ist und einen Authentifizierungscode in festen Intervallen (normalerweise 60 Sekunden) generiert Eine eingebaute Uhr und der werkseitig codierte Zufallsschlüssel der Karte (auch als "Seed" bezeichnet). Der Seed ist für jedes Token unterschiedlich und wird als der entsprechende RSA SecurID-Server (RSA Authentication Manager, ehemals ACE/Server) geladen Token werden gekauft 1 .

Es kann also etwas mit dem RSA-Algorithmus für den öffentlichen Schlüssel zu tun haben. Über echte Interna von SecurID (Sicherheit durch Unbekanntheit) ist wenig bekannt, aber es gibt einige Analysen, z. Erste Sicherheitsanalyse und mehr am Ende der SecurID-Seite in Wikipedia.

Außerdem sind Hardware-Token Tamper-resistent , so dass es fast unmöglich ist, gestohlenes Token zu duplizieren.

UPDATE: Dank eyaler gibt es in SecurID keine öffentlichen/privaten Schlüssel. Sie basieren auf "Shared Secret" und nicht auf asymmetrischen Algorithmen. Wikipedia sagt, diese Variante von AES-128 wird verwendet, um Token-Codes aus einem geheimen Schlüssel ("Seed") zu generieren. Der geheime Schlüssel ist werkseitig im Schlüssel codiert.

18
osgx

Unter http://seclists.org/bugtraq/2000/Dec/459 können Sie einen Blick darauf werfen, wie es wirklich gemacht wird. 

Der (zu vereinfachte) Mechanismus ist

hash = <some initial value>
every x seconds do:
   hash = hashfunction(hash + secret_key)
   print hash
11
VolkerK

Ich kann Ihnen einen Einblick in die Funktionsweise der Blizzard Mobile-Authentifikatoren geben, da deren Code aus Open-Source-Quellen stammt.(Archiv)

In kurzen Pseudocodes ist es:

String GetCurrentFOBValue()
{
   // Calculate the number of intervals since January 1 1970 (in UTC)
   // The Blizzard authenticator rolls over every 30 seconds,
   // so codeInterval is the number of 30 second intervals since January 1 1970.
   // RSA tokens roll over every minute; so your counter can be the number 
   // of 1 minute intervals since January 1, 1970
   // Int64 codeInterval = GetNumberOfIntervals();
   Int64 codeInterval = (DateTime.Now - new DateTime(1970,1,1)).TotalSeconds / 30;

   // Compute the HMAC_SHA1 digest of the code interval, 
   // using some agreed-upon 20-bytes of secret key material.
   // We will generate our 20-bytes of secret key material by
   // using PBKDF2 from a password. 
   // Blizzard's mobile authenticator is given secret key material
   // when it enrolls by fetching it from the web-site.
   Byte[] secret = PBKDF2("Super-secret password that our FOB knows", 20); //20 bytes

   // Compute a message digest of codeInterval using our shared secret key
   Byte[] hmac = HMAC(secret, codeInterval);

   // Pick four bytes out of the hmac array, and convert them into a Int32.
   // Use the last four bits of the digest as an index 
   // to which four bytes we will use to construct our Int32
   int startIndex = hmac[19] & 0x0f;

   Int32 value = Copy(hmac, startIndex, 4).ToUInt32 & 0x7fffffff; 

   // The Blizzard authenticator shows 8 digits
   return String.Format("%.8d", value % 100000000);

   // But we could have just as easily returned 6, like RSA FOBs do
   return String.Format("%.6d", value % 1000000);
}

Hinweis : Jeder Code wird als gemeinfrei veröffentlicht. Keine Zuordnung erforderlich.

7
Ian Boyd

@ VolkerKs Antwort verweist auf C-Code, der den Algorithmus für "64-Bit" -RSA-Token beschreibt, die einen im Wesentlichen benutzerdefinierten Algorithmus verwenden (Reverse-Engineered ~ 2000).

Wenn Sie jedoch an dem Algorithmus interessiert sind, der von den moderneren "128-Bit" -Token verwendet wird (einschließlich der allgegenwärtigen SID700-Hardware-Token und entsprechenden Softtoken), dann schauen Sie sich den Quellcode für stoken an. ein Open-Source-Projekt, das ihre Arbeitsweise gründlich dokumentiert; securid_compute_tokencode ist der Haupteinstiegspunkt.

Im Wesentlichen funktioniert der Algorithmus folgendermaßen:

  • Generieren Sie Schlüssel aus der aktuellen Uhrzeit und Seriennummer
  • Verschlüsseln Sie das Geheimnis/den Startwert wiederholt mit 128-Bit-AES
  • Extrahieren Sie die Ziffern aus der Dezimaldarstellung der Ausgabe und fügen Sie für eine gute Messung PIN hinzu

Es ist nicht viel anders als der offene Standard-Algorithmus TOTP (Teil der Initiative for Open Authentication ), der in Google Authenticator, YubiKey, Symantec VIP access usw. verwendet wird … Nur MOAR SPESHUL UND EIGENTLICH für EKSTRA SECURITEH! 

0
Dan Lenski

Sie können sich auf den RFC TOTP beziehen: Zeitbasierter Einmalkennwortalgorithmus

Wie hier klar beschrieben, ist der in RSA-Token (SecurID) verwendete genaue Algorithmus TOTP (Time-Based One-Time Password Algorithm), ein Hash-Algorithmus.

Der Seed (möglicherweise von einer Variante von AES-128 generiert) wurde bereits im Token gespeichert, bevor wir ihn verwenden.

0
kagb