Como funciona a senha de uso único (OTP)?
Neste artigo, introduzimos dois métodos diferentes de senha de uso único: e-mail/telefone + código de verificação e código dinâmico.
À medida que a internet evoluiu, temos usado uma ampla gama de serviços online para atender quase todas as nossas necessidades. O primeiro passo para usar esses serviços é frequentemente o registro e login. Quando se trata de registro e login, a autenticação com ID de usuário e senha ainda é amplamente utilizada, embora mais de três décadas tenham se passado desde os dias de uso de computadores desktop independentes que não podiam se conectar à internet.
No passado, talvez precisássemos apenas lembrar a senha da nossa conta de e-mail, mas agora frequentemente usamos dezenas ou até centenas de serviços online, e não podemos usar a mesma senha para todos eles (se a senha de uma conta for comprometida, todas as contas que usam a mesma senha estarão em risco). Como resultado, o login sem senha está se tornando cada vez mais popular e está gradualmente se tornando a abordagem principal.
Existem muitos métodos diferentes para autenticação sem senha, incluindo, mas não se limitando a login social, e-mail/telefone + código de verificação e o uso de aplicativos autenticadores com senhas dinâmicas. Os dois últimos métodos podem ser classificados como senhas de uso único (OTPs).
O que é senha de uso único (OTP)?
Uma OTP é uma sequência de caracteres gerada automaticamente que é válida apenas para uma única sessão de login ou por um curto período de tempo. Como uma OTP pode ser usada apenas uma vez, ela pode prevenir o risco de vazamento de credenciais, como uma senha perdida ou roubada.
Em teoria, uma OTP pode ser uma sequência aleatória de caracteres de um certo comprimento, incluindo letras maiúsculas e minúsculas, e até mesmo símbolos especiais. Mas, para o bem da experiência do usuário, a maioria dos serviços usa números puros ao usar OTPs.
E-mail / telefone + código de verificação
Muitos sites exigem que você verifique sua identidade enviando um código de verificação (ou senha) para o e-mail ou número de telefone que você registrou.
Imagine que Jack e Joe estão jogando um jogo de adivinhação, onde Jack pensa em um número entre 0 e 999 e dá a Joe três chances de adivinhar o número em um minuto. Além de saber o intervalo do número, Joe não tem nenhuma outra informação.
Todos sabemos que é quase impossível para Joe adivinhar o número corretamente em um minuto usando apenas três tentativas.
O método de e-mail / telefone + código de verificação funciona no mesmo princípio: o código de verificação é geralmente válido por um período muito curto, geralmente não mais que 10 minutos (semelhante a Jack dar a Joe "um minuto" para adivinhar o número). Além disso, a API ou método para verificar o código de verificação geralmente tem um limite de taxa para evitar ataques de força bruta na senha (como Jack dando a Joe apenas "três chances").
Para potenciais atacantes, é quase impossível quebrar esse método. No entanto, o sistema informa o usuário sobre o código de verificação através de um canal confiável (e-mail ou telefone), permitindo que o usuário o verifique diretamente.
Código dinâmico
Código dinâmico, também conhecido como OTP baseado em tempo (TOTP), é "dinâmico" no sentido de que muda com o tempo. Geralmente, se um aplicativo web usa TOTP, ele seguirá o RFC6238 - TOTP: Algoritmo de Senha de Uso Único Baseado em Tempo.
Senha de uso único baseada em hash
Antes de introduzir o TOTP, precisamos explicar brevemente o RFC4226 - HOTP: Um Algoritmo de Senha de Uso Único Baseado em HMAC (HMAC é um algoritmo de hash). O algoritmo HOTP funciona da seguinte forma:
-
Segredo: O HOTP requer uma chave secreta compartilhada K, que é a mesma entre o servidor e o cliente.
-
Contador: O núcleo do HOTP é um contador C, que é incrementado cada vez que uma nova senha é gerada.
-
Cálculo do HMAC:
-
Use HMAC-SHA-1 (ou outras funções de hash) para calcular o código de autenticação:
-
Aqui, H é um valor de hash de 160 bits.
-
-
Truncamento: Extraia uma parte do valor de hash H para gerar a OTP. Supondo que queremos uma OTP de 6 dígitos, o processo é o seguinte:
- Extraia o último byte de H como o deslocamento de truncamento O.
- Extraia os 4 bytes começando de O, convertendo-os em um inteiro T.
- Pegue os últimos d dígitos de T, ou seja, OTP = T mod 10^d.
Em resumo, a fórmula HOTP é:
onde d é o comprimento desejado da OTP (geralmente 6-8 dígitos).
Senha de uso único baseada em tempo
O TOTP é uma extensão do HOTP, onde o contador é substituído por um passo de tempo. Ele usa o tempo atual para gerar um código de verificação dinâmico, então a OTP expira automaticamente ao longo do tempo. O princípio de funcionamento é o seguinte:
-
Passo de tempo: O TOTP usa o tempo atual T em vez do contador HOTP C. O passo de tempo é um intervalo de tempo fixo definido (geralmente 30 segundos).
- Por exemplo, supondo que o passo de tempo seja 30 segundos e o carimbo de data e hora Unix atual seja T. O contador TOTP é calculado como: T' = T / passo_de_tempo
- Onde T′ é o contador de passo de tempo, em unidades de 30 segundos.
-
Gerando OTP: Substitua T′ no algoritmo HOTP para gerar a OTP:
-
Atualização dinâmica: Como o TOTP é baseado no passo de tempo, a OTP muda ao longo do tempo, para que o servidor possa verificar sua validade enquanto a OTP estiver dentro da janela de tempo válida.
Em resumo, a fórmula TOTP é:
Com base em nossa experiência usando aplicativos autenticadores, podemos sincronizar o valor secreto entre o dispositivo e o servidor escaneando um código QR ou copiando e colando diretamente, e então precisamos inserir o código dinâmico atual uma vez para garantir que o valor secreto seja o mesmo.
Nos primeiros dias de uso de dispositivos móveis, poderíamos descobrir que o tempo em diferentes dispositivos não era o mesmo, e teríamos que ajustar manualmente o tempo nos dispositivos periodicamente. Nos últimos anos, quase todos os dispositivos usam o serviço de tempo de rede (NTP) para sincronizar e atualizar regularmente o tempo do dispositivo. Mesmo que o relógio do dispositivo não seja totalmente preciso, as frequentes atualizações podem garantir que o tempo seja razoavelmente consistente entre diferentes dispositivos. Com base nessa suposição, o código dinâmico ainda pode ser usado mesmo que o dispositivo esteja offline, enquanto seria difícil receber um código de verificação em estado offline.
Notas finais
Neste artigo, introduzimos dois métodos diferentes de senha de uso único: e-mail/telefone + código de verificação e código dinâmico.
O método de e-mail/telefone + código de verificação depende da infraestrutura de comunicação e de um serviço de e-mail ou mensagens de texto (SMS) de terceiros para ser implementado; o código dinâmico não depende de serviços externos e instalações de comunicação, e pode ser usado offline.
Logto, como um serviço IAM (Gerenciamento de Identidade e Acesso) popular, poderoso e altamente extensível, suporta ambos os métodos OTP, permitindo que os usuários escolham a solução que melhor atende às suas necessidades do ponto de vista empresarial.