Вопрос

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

Это было полезно?

Решение

Цитируя Вики

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

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

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

Обновление: благодаря Eyaler, в Classic Securid нет никаких публичных/частных ключей; Они основаны на «общем секрете», а не на асимметричном алгоритме. Википедия говорит, что вариант AES-128 используется для создания кодов токенов из секретного ключа («Семя»). Секретный ключ кодируется в ключе на заводе.

Другие советы

Вы можете взглянуть на то, как это действительно сделано в 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, которые используют по существу пользовательский алгоритм (обратный инженер ~ 2000).

Однако, если вы заинтересованы в алгоритме, используемом более современными «128-битными» токенами (включая повсеместные аппаратные жетоны SID700 и эквивалентные мягкие токены), затем посмотрите на исходный код для Старкен, проект с открытым исходным кодом, который полностью документирует их работу; securid_compute_tokencode является основной точкой входа.

По сути, алгоритм работает так:

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

Это не так и отличается от открытого стандарта TOTP алгоритм (часть Инициатива для открытой аутентификации) используется в Google Authenticator, Yubikey, Symantec VIP Access, и т. д. ... просто моар Спешул и запатентованный для Ekstra Securiteh!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top