Domanda

Vorrei capire come RSA I token di lavoro (SecurID), qual è l'algoritmo utilizzato lì, è lo stesso algoritmo come regolare la crittografia RSA / decifratura?

È stato utile?

Soluzione

Wiki

Il meccanismo di autenticazione RSA SecurID è costituito da un "token" - sia hardware (ad esempio una chiave USB) o software (un token morbido) - che viene assegnato a un utente di computer e che genera un codice di autenticazione a intervalli fissi (di solito 60 secondi) con un (RSA Authentication manager, ex ACE / Server incorporato orologio e chiave casuale in fabbrica codifica della scheda (noto come il "seme". il seme è diverso per ogni token, e viene caricato nel server di RSA SecurID corrispondente ) come i gettoni vengono acquistati 1 .

Quindi, si può avere qualcosa legato al algoritmo a chiave pubblica RSA. Little sa circa interni reali di SecurID (security by obscurity), ma ci sono alcune analisi, per esempio iniziale analisi SecurID e più a fondo pagina SecurID in Wikipedia.

Inoltre, i token hardware sono Tamper Resistant così è quasi impossibile da duplicare rubato token.

UPDATE: Grazie a eyaler, non c'è tutto pubblico / chiavi private in SecurID classico; si basano su "segreto condiviso", non su algoritmo asimmetrico. Wikipedia dice che la variante di AES-128 viene utilizzato per generare codici token da chiave segreta ( "seed"). La chiave segreta è codificato in chiave alla fabbrica.

Altri suggerimenti

È possibile dare un'occhiata a come è realmente fatto a http://seclists.org/bugtraq/2000/Dec/ 459

(semplificato) meccanismo è

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

I può dare un senso di come il lavoro di Blizzard mobile autenticatori, dal momento che il loro codice è open-source. (filmati)

In breve pseudo-codice è:

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

Nota : Ogni codice è rilasciato nel pubblico dominio. No attribuzione richiesta.

Si può fare riferimento alla RFC TOTP: time-based One-Time Password Algoritmo

Come chiaramente descritto in quanto, l'algoritmo esatto utilizzato in RSA gettoni (SecurID) è TOTP (Time-Based One-Time Password Algorithm), un algoritmo di hash.

Il seme (può generato da una variante di AES-128) è già memorizzato nel token prima di utilizzarlo.

link

@ di VolkerK risposta al codice C che descrive l'algoritmo per "64-bit" token RSA, che utilizza un essenzialmente personalizzato algoritmo (invertito-ingegnerizzato ~ 2000).

Tuttavia, se siete interessati a l'algoritmo utilizzato dai più moderni gettoni "128-bit" (compresi i token hardware SID700 onnipresenti e equivalenti soft-gettoni), poi hanno uno sguardo al codice sorgente di Stoken , un progetto open-source che documenta accuratamente il loro funzionamento; securid_compute_tokencode è il principale punto di accesso.

In sostanza, l'algoritmo funziona in questo modo:

  • Generare chiavi presso l'ora e il numero di serie
  • ripetutamente crittografare il segreto / seme con AES a 128 bit
  • cifre estrarre dalla rappresentazione decimale dell'uscita e aggiungere il PIN per buona misura

Non è molto diverso dallo standard aperto TOTP algoritmo (parte della Initiative For Open Authentication ) utilizzato in Google Authenticator, YubiKey, Symantec VIP accesso , ecc ... solo MOAR SPESHUL e di proprietà per EKSTRA SECURITEH!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top