Comment fonctionnent les jetons RSA?

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

35
demandé sur anacron 2011-12-01 15:19:28

5 réponses

Citant sur Wiki

Le mécanisme D'authentification RSA SecurID se compose d'un" jeton "- soit matériel (par exemple un dongle USB) ou logiciel (un jeton logiciel) - qui est attribué à un utilisateur d'ordinateur et qui génère un code d'authentification à intervalles fixes (généralement 60 secondes) en utilisant une horloge intégrée et la clé aléatoire codée en usine de la carte (appelée"seed"). La graine est différente pour chaque jeton et est chargée dans le serveur RSA SecurID (RSA Gestionnaire d'authentification, anciennement AS/Serveur) que les jetons sont achetés1.

donc, il peut avoir quelque chose lié à L'algorithme de clé publique RSA. peu connu sur les internes réels de SecurID (sécurité par obscurité), mais il y a quelques analyses, par exemple analyse initiale de securid et plus en bas de la page SecurID dans wikipedia.

En outre, les jetons matériels sont inviolables Il est donc presque impossible de dupliquer volé jeton.

Mise à jour: grâce à eyaler, il n'y a pas de clés publiques/privées dans Classic SecurID; elles sont basées sur "secret partagé", pas sur un algorithme asymétrique. Wikipedia dit, cette variante D'AES-128 est utilisée pour générer des codes de jetons à partir de la clé secrète ("seed"). La clé secrète est codée en clé en usine.

17
répondu osgx 2014-08-11 06:47:01

Vous pouvez voir comment c'est vraiment fait à http://seclists.org/bugtraq/2000/Dec/459

Le mécanisme (trop simplifié) est

hash = <some initial value>
every x seconds do:
   hash = hashfunction(hash + secret_key)
   print hash
11
répondu VolkerK 2011-12-01 12:03:26

Je peux vous donner une idée du fonctionnement des authentificateurs mobiles Blizzard, puisque leur code a été ouvert. (archive)

En bref pseudo-code c'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);
}

Note : tout code est publié dans le domaine public. Aucune attribution requise.

7
répondu Ian Boyd 2017-02-28 22:49:26

Vous pouvez vous référer à la RFC TOTP: algorithme de mot de passe unique basé sur le temps

Comme clairement décrit en cela, L'algorithme exact utilisé dans les jetons RSA (SecurID) est TOTP(Time-Based One-Time Password Algorithm), un algorithme de hachage.

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

0
répondu kagb 2016-02-08 08:22:17

@la réponse de VolkerK renvoie au code C qui décrit l'algorithme des jetons RSA "64 bits", qui utilisent un algorithme essentiellement personnalisé (inversé-machiné ~2000).

Cependant, si vous êtes intéressé par l'algorithme utilisé par les jetons "128 bits" plus modernes (y compris les jetons matériels SID700 omniprésents et les jetons logiciels équivalents), jetez un oeil au code source de stoken , un projet open-source qui documente en profondeur leur fonctionnement; securid_compute_tokencode est le principal point d'entrée.

Essentiellement, l'algorithme fonctionne comme ceci:

  • générer des clés à partir de l'heure actuelle et le numéro de série
  • crypter à plusieurs reprises le secret / seed avec AES 128 bits
  • extraire les chiffres de la représentation décimale de la sortie et ajouter dans la broche pour faire bonne mesure

Ce n'est pas si différent de l'algorithme open standard TOTP (faisant partie de L'Initiative pour L'authentification ouverte) utilisé dans Google Authentificateur, YubiKey, Symantec accès VIP, etc. ... juste MOAR SPESHUL et propriétaire pour EKSTRA SECURITEH!

0
répondu Dan Lenski 2018-01-15 04:04:54