Question

Je voudrais comprendre comment le travail RSA jetons (SecurID), quel est l'algorithme utilisé là-bas, est-ce le même algorithme que le cryptage régulier de RSA / décryptage?

Était-ce utile?

La solution

Wiki

Le mécanisme d'authentification RSA SecurID se compose d'un « jeton » - soit le matériel (par exemple une clé USB) ou logiciel (un jeton soft) - qui est affecté à un utilisateur d'ordinateur et qui génère un code d'authentification à intervalles fixes (en général 60 secondes) à l'aide d'un intégré horloge et la clé aléatoire de la carte codée en usine (connue sous le nom de « semence ». la graine est différente pour chaque jeton, et est chargé dans le serveur RSA SecurID correspondant (RSA Authentication Manager, anciennement ACE / server ) que les jetons sont achetés 1 .

Ainsi, il peut avoir quelque chose lié à l'algorithme de clé publique RSA. Méconnu sur les véritables internes de SecurID (sécurité par l'obscurité), mais il y a une analyse, par exemple analyse initiale securid et plus en bas de page SecurID dans wikipedia.

En outre, les jetons matériels sont Inviolable il est presque impossible de dupliquer volé jeton.

MISE À JOUR: Merci à eyaler, il n'y a pas toutes les clés publiques / privées dans SecurID classique; ils sont basés sur « secret partagé », et non pas sur l'algorithme asymétrique. Wikipedia dit, cette variante de AES-128 est utilisé pour générer des codes symboliques de clé secrète ( « semence »). La clé secrète est codée dans la clé à l'usine.

Autres conseils

Vous pouvez jeter un oeil à la façon dont il est vraiment fait à http://seclists.org/bugtraq/2000/Dec/ 459

Le mécanisme (simpliste) est

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

Je peux vous donner une idée de la façon dont le travail Blizzard Authenticator mobile, depuis leur code est open source. (archive)

En bref pseudo-code est:

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);
}

Remarque : Tout code est libéré dans le domaine public. Aucune attribution requise.

Vous pouvez vous référer à la RFC TOTP: Time-Based One-Time Password algorithme

Comme il est clairement décrit en ce que l'algorithme exact utilisé dans RSA jetons (SecurID) est TOTP (Time-Based One Time Password algorithme), un algorithme de hachage.

La graine (peut générée par une variante de AES-128) a déjà été enregistré dans le jeton avant de l'utiliser.

@ liens de la réponse de VolkerK au code C qui décrit l'algorithme de jetons RSA « 64 bits », qui utilisent un algorithme essentiellement sur mesure (décompilé ~ 2000).

Toutefois, si vous êtes intéressé par l'algorithme utilisé par les plus modernes jetons « 128 bits » (y compris les omniprésents jetons matériels de SID700 et équivalents jetons-doux), ont alors un coup d'oeil au code source pour Stoken , un projet open source qui documente soigneusement leur fonctionnement; securid_compute_tokencode est le point d'entrée principal.

Pour l'essentiel, l'algorithme fonctionne comme ceci:

  • Générer les clés à l'heure actuelle et le numéro de série
  • à plusieurs reprises le secret encrypter / graine avec AES 128 bits
  • chiffres Extrait de la représentation décimale de la sortie et ajouter le code PIN pour faire bonne mesure

Il est pas si différent de la norme ouverte TOTP algorithme (partie du Initiative pour l'authentification Open ) utilisé dans Google Authenticator, YubiKey, accès VIP Symantec , etc ... juste MOAR SPESHUL ET EXCLUSIVES pour EKSTRA SECURITEH!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top