Executando verificação de segurança...
3

Como funciona TOTP, o método mais usado em 2FA

NOTA: Este artigo conta com tags de HTML semântico para facilitar seu entendimento e leitura.
Ao ver uma abreviação em itálico como TOTP, é possivel passar o cursor em cima da abreviação para ver seu nome completo.

Este artigo explicará o funcionamento do algoritimo de TOTP usado em 2FA.

O algortimo TOTP foi definido no RFC6238 e é uma extensão do algoritmo HOTP definido no RFC4226. Ambos geram uma senha de 4 ou 6 números.
O TOTP visa expandir o HOTP modificando-o para que as senhas sejam geradas com base no Tempo Unix e não baseado numa contagem de senhas usadas assim como é no HOTP

O TOTP é consideravelmente mais seguro que o HOTP, pois gera novos números a cada 30 segundos enquanto o >HOTP apenas gerava assim que a ultima senha fosse usada, o que dava mais oportunidade para hackers descobrirem a senha.

Funcionamento

Temos que a geração de senhas usando o HOTP se dá como: Senha = HOTP(Chave, Semente)

A função HOTP é uma função de hashing que junta a Chave e Semente em um único número de 4 ou 6 digitos usando HMAC (RFC2104). A vantagem de uma função de hashing é que é impossivel ter os parametros iniciais a partir do resultado.

A Chave é uma string secreta de conhecimento de ambos os lados:

  • Do Validador, como por exemplo, um servidor de login.
  • Do Usuário: o qual tem um aplicativo como o Authenticator que gera a senha

E a Semente é um número aleatório que será dado ao gerador e garante que caso a Semente seja a mesma, o valor gerado também será o mesmo.

Para expandir esse algoritmo teremos que substituir a Semente por uma equação bem simples:

Assumiremos X como sendo o número de segundos para a geração de uma nova senha (30 Segundos).
E assumiremos T como o Tempo Unix atual.

A nova Semente será = floor(T / X)
Com isso, caso o nosso Tempo Unix seja:

  • 0, então floor(0 / 30) = 0
  • 30, então floor(30 / 30) = 1
  • 40, então 40/30 = 1.33.. mas passando isso pelo floor() arredondando para baixo temos que floor(40 / 30) = 1
  • 60, então floor(60 / 30) = 2

Veja como a cada 30 segundos nossa Semente muda, e assim a cada 30 segundos nosso código também muda. Combinando isso com a Chave na função de hashing HOTP teremos uma senha verdadeiramente única e segura gerada a cada 30 segundos.

Este é basicamente meu primeiro artigo na internet, então me desculpem se a estrutura ficou confusa ou algo parecido. Espero que tenham entendido :)

Carregando publicação patrocinada...