Como funcionam os tokens RSA?

Eu gostaria de entender como funcionam os tokens RSA (SecurID), Qual é o algoritmo usado lá, é o mesmo algoritmo que a encriptação/descodificação regular RSA ?

Author: anacron, 2011-12-01

5 answers

Citando o Wiki

O mecanismo de autenticação RSA consiste num "token" - hardware (por exemplo, um dongle USB) ou software (um token suave)-que é atribuído a um utilizador do computador e que gera um código de autenticação a intervalos fixos (normalmente 60 segundos) utilizando um relógio incorporado e a chave aleatória codificada pela fábrica do cartão (conhecida como"seed"). A semente é diferente para cada token, e é carregada no correspondente servidor RSA SecurID (RSA). Gestor de autenticação, anteriormente ACE / servidor) à medida que os tokens são comprados1.

então, pode ter algo relacionado com o algoritmo de chave pública RSA.{[13] } pouco se sabe sobre os internos reais da SecurID( segurança por obscuridade), mas há algumas análises, por exemplo análise inicial da titularidade e mais na parte inferior da página da SecurID na Wikipédia.

Também, os tokens de hardware são resistentes aos tampões por isso é quase impossível duplicar os roubados. simbolo.

Actualização: graças ao eyaler, não existem chaves públicas/privadas no Seculd clássico; baseiam-se no "segredo partilhado", não no algoritmo assimétrico. Wikipedia says, that variant of AES-128 is used to generate token codes from secret key ("seed"). A chave secreta está codificada na chave da fábrica.

 17
Author: osgx, 2014-08-11 06:47:01
Podes ver como se faz na realidade. http://seclists.org/bugtraq/2000/Dec/459

O mecanismo (demasiado simplificado) é

hash = <some initial value>
every x seconds do:
   hash = hashfunction(hash + secret_key)
   print hash
 11
Author: VolkerK, 2011-12-01 12:03:26

Posso dar-vos uma ideia de como funcionam os autenticadores móveis Blizzard, uma vez que o seu código foi de fonte aberta. (arquivo)

Em breve pseudo-código é:

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 : qualquer código é lançado no domínio público. Não é necessária atribuição.

 7
Author: Ian Boyd, 2017-02-28 22:49:26

Pode referir-se ao algoritmo de senha RFC baseado no tempo

Como claramente descrito nisso, o algoritmo exato usado em tokens RSA(SecurID) é TOTP (algoritmo de senha única baseado no tempo), um algoritmo de hash.

A semente (pode ser gerada por uma variante de AES-128) já estava guardada no token antes de a usarmos.

 0
Author: kagb, 2016-02-08 08:22:17

@a resposta de VolkerK liga-se ao código C que descreve o algoritmo para tokens RSA de "64-bit", que usam um algoritmo essencialmente personalizado (engenharia reversa ~2000).

No Entanto, se você estiver interessado em o algoritmo utilizado pelo mais moderno "128 bits" tokens (incluindo o onipresente SID700 tokens de hardware e equivalente soft tokens), então dê uma olhada no código fonte para stoken, um projeto open-source que completamente documentos de seu funcionamento; securid_compute_tokencode é o principal ponto de entrada.

Essencialmente, o algoritmo funciona assim:

  • gerar chaves a partir da hora actual e do número de série
  • cifra repetidamente o secret/seed com AES de 128 bits
  • extrair os algarismos a partir da representação decimal da saída e Adicionar no PIN para uma boa medida

Não é assim tão diferente do algoritmo open standard TOTP (parte da iniciativa para autenticação aberta) usado no Google Autenticador, YubiKey, acesso VIP Symantec , etc. ... apenas MOAR SPESHUL e proprietário para EKSTRA SECURITEH!

 0
Author: Dan Lenski, 2018-01-15 04:04:54