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

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

38 голосов
/ 01 декабря 2011

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

Ответы [ 5 ]

18 голосов
/ 01 декабря 2011

Цитирование Wiki

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

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

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

ОБНОВЛЕНИЕ: благодаря eyaler, в классическом SecurID нет открытых / закрытых ключей; они основаны на «общем секрете», а не на асимметричном алгоритме. Википедия говорит, что вариант AES-128 используется для генерации кодов токенов из секретного ключа («семя»). Секретный ключ кодируется в ключ на заводе.

11 голосов
/ 01 декабря 2011

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

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

hash = <some initial value>
every x seconds do:
   hash = hashfunction(hash + secret_key)
   print hash
7 голосов
/ 30 октября 2012

Я могу дать вам представление о том, как работают мобильные аутентификаторы 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);
}

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

0 голосов
/ 15 января 2018

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

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

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

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

Это не сильно отличается от алгоритма открытого стандарта TOTP (часть Инициативы по открытой аутентификации ), используемого в Google Authenticator, YubiKey, Symantec VIP access и т. д.… просто МОРЕ СПЕШУЛ И СОБСТВЕННОСТЬ для ЭКСТРА СЕКУРИТЕХ!

0 голосов
/ 08 февраля 2016

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

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

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

...