Как работают токены RSA?

Я хотел бы понять, как работают токены RSA (SecurID), какой алгоритм используется там, это тот же алгоритм, что и обычное шифрование/дешифрование RSA ?

5 ответов


со ссылкой на Wiki

механизм аутентификации RSA SecurID состоит из" токена "- либо аппаратного (например, USB - ключ), либо программного обеспечения (мягкий токен), который назначается пользователю компьютера и который генерирует код аутентификации с фиксированными интервалами (обычно 60 секунд), используя встроенные часы и заводской случайный ключ карты (известный как"семя". Семя отличается для каждого токена и загружается в соответствующий RSA SecurID сервер (RSA Authentication Manager, ранее ACE / Server) в качестве токенов приобретаются1.

таким образом, это может иметь что-то связанное с алгоритмом открытого ключа RSA. мало известно о реальных внутренностях SecurID (безопасность по неизвестности), но есть некоторый анализ, например первоначальный анализ securid и более в нижней части страницы SecurID в Википедии.

кроме того, аппаратные токены виброзащищенной так это практически невозможно дублировать украденный жетон.

UPDATE: благодаря eyaler в классическом SecurID нет никаких открытых/закрытых ключей; они основаны на" общем секрете", а не на асимметричном алгоритме. Википедия говорит, что вариант AES-128 используется для генерации кодов токенов из секретного ключа ("seed"). Секретный ключ закодирован в ключ на фабрике.


вы можете посмотреть, как это действительно делается в http://seclists.org/bugtraq/2000/Dec/459

(упрощенный) механизм -

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

Я могу дать вам представление о том, как работают мобильные аутентификаторы Blizzard, так как их код был открытым кодом. (архив)

вкратце псевдо-код это:

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

Примечание: любой код выпущен в общественное достояние. Атрибуция не требуется.


вы можете обратиться к RFC TOTP: алгоритм одноразового пароля на основе времени

Как ясно описано в этом, точный алгоритм, используемый в токенах RSA(SecurID),-TOTP (алгоритм одноразового пароля на основе времени), алгоритм хэша.

семя (может быть сгенерировано вариантом AES-128) уже было сохранено в токене до его использования.


@VolkerK это ссылки на код C, который описывает алгоритм для" 64-битных " токенов RSA, которые используют по существу пользовательский алгоритм (reversed-engineered ~2000).

однако, если вас интересует алгоритм, используемый более современными" 128-битными " токенами (включая вездесущие аппаратные токены SID700 и эквивалентные софт-токены), то посмотрите исходный код для stoken, проект с открытым исходным кодом, который тщательно документирует их работу; securid_compute_tokencode - главная точка входа.

по сути, алгоритм работы такой:

  • генерировать ключи с серийным номером
  • многократно зашифруйте секрет / семя с помощью 128-битного AES
  • извлеките цифры из десятичного представления вывода и добавьте PIN-код для хорошей меры

Это не все, что отличается от открытого стандарта истории английского футбола. (часть the Инициатива По Открытой Аутентификации) используется в Google Authenticator, YubiKey,доступ Symantec VIP, etc. ... просто Моар СПЕШУЛ и собственник для экстра SECURITEH!