algorithm - que - ¿Cómo funcionan los tokens RSA?
security by rsa (5)
Citando en SecurID
El mecanismo de autenticación RSA SecurID consiste en un "token", ya sea hardware (por ejemplo, un dongle USB) o software (un token suave), que se asigna a un usuario de computadora y genera un código de autenticación a intervalos fijos (generalmente 60 segundos) usando un reloj incorporado y la clave aleatoria codificada de fábrica de la tarjeta (conocida como "semilla". La semilla es diferente para cada token y se carga en el servidor RSA SecurID correspondiente (RSA Authentication Manager, anteriormente ACE / Server) como el los tokens se compran SecurID .
Por lo tanto, puede tener algo relacionado con el algoritmo de clave pública RSA. Poco conocido sobre los aspectos internos reales de SecurID (seguridad por oscuridad), pero hay algunos análisis, por ejemplo, análisis de seguridad inicial y más en la parte inferior de la página SecurID en wikipedia.
Además, los tokens de hardware son resistentes a la manipulación, por lo que es casi imposible duplicar el token robado.
ACTUALIZACIÓN: Gracias a eyaler, no hay claves públicas / privadas en el SecurID clásico; se basan en el "secreto compartido", no en el algoritmo asimétrico. Wikipedia dice, esa variante de AES-128 se utiliza para generar códigos de token de clave secreta ("semilla"). La clave secreta está codificada en clave en fábrica.
Me gustaría entender cómo funcionan los tokens RSA (SecurID), ¿cuál es el algoritmo utilizado allí, es el mismo algoritmo que el cifrado / descifrado RSA regular?
Puede consultar el RFC TOTP: Algoritmo de contraseña única basada en el tiempo
Como se describe claramente en eso, el algoritmo exacto utilizado en tokens RSA (SecurID) es TOTP (Algoritmo de Contraseña de Un Solo Tiempo), un algoritmo hash.
La semilla (puede ser generada por una variante de AES-128) ya fue guardada en el token antes de que la usemos.
Puede ver cómo se hace realmente en http://seclists.org/bugtraq/2000/Dec/459
El mecanismo (simplificado) es
hash = <some initial value>
every x seconds do:
hash = hashfunction(hash + secret_key)
print hash
Puedo darte una idea de cómo funcionan los Autenticadores de Blizzard Mobile, ya que su código ha sido de código abierto. (archive)
En breve pseudo-código 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);
}
Nota : Cualquier código se libera en el dominio público. No se requiere atribución.
La respuesta de @VolkerK se vincula al código C que describe el algoritmo para tokens RSA de "64 bits", que utilizan un algoritmo esencialmente personalizado (ingeniería inversa ~ 2000).
Sin embargo, si está interesado en el algoritmo utilizado por los tokens de "128 bits" más modernos (incluidos los tokens de hardware SID700 omnipresentes y los tokens suaves equivalentes), eche un vistazo al código fuente de stoken , un código abierto proyecto que documenta a fondo su funcionamiento; securid_compute_tokencode
es el principal punto de entrada.
Básicamente, el algoritmo funciona así:
- Generar claves a partir de la hora actual y el número de serie
- Encriptar repetidamente el secreto / semilla con AES de 128 bits
- Extraiga los dígitos de la representación decimal de la salida y agregue el PIN para una buena medida
No es tan diferente del algoritmo TOTP estándar abierto (parte de la Iniciativa para la Autenticación Abierta ) utilizado en Google Authenticator, YubiKey, acceso VIP de Symantec , etc. ... simplemente MOAR SPESHUL AND PROPRIETARY para EKSTRA SECURITEH!