Come fare il lavoro RSA gettoni?
-
26-10-2019 - |
Domanda
Vorrei capire come RSA I token di lavoro (SecurID), qual è l'algoritmo utilizzato lì, è lo stesso algoritmo come regolare la crittografia RSA / decifratura?
Soluzione
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 ??strong>: 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.
@ 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!