Como é que a palavra-passe de uso único (OTP) funciona?
Neste artigo, vamos introduzir dois métodos diferentes de palavra-passe de uso único: email/telefone + código de verificação e código dinâmico.
À medida que a internet evoluiu, temos utilizado uma vasta gama de serviços online para satisfazer quase todas as nossas necessidades. O primeiro passo para utilizar estes serviços é muitas vezes o registo e o login. Quando se trata de registo e início de sessão, a autenticação com ID de utilizador e palavra-passe ainda é amplamente utilizada, mesmo que já tenham passado mais de três décadas desde os dias em que se utilizavam computadores de secretária independentes que não conseguiam conectar-se à internet.
No passado, talvez só precisássemos de nos lembrar da palavra-passe da nossa conta de email, mas agora utilizamos frequentemente dezenas ou até centenas de serviços online, e não podemos usar a mesma palavra-passe para todos eles (se a palavra-passe de uma conta for comprometida, todas as contas que usam a mesma palavra-passe estarão em risco). Como resultado, o início de sessão sem palavra-passe está a tornar-se cada vez mais popular e está gradualmente a tornar-se a abordagem dominante.
Existem muitos métodos diferentes para autenticação sem palavra-passe, incluindo mas não limitado a início de sessão social, email/telefone + código de verificação, e o uso de apps de autenticação com palavras-passe dinâmicas. Os dois últimos métodos podem ser classificados como palavras-passe de uso único (OTPs).
O que é a palavra-passe de uso único (OTP)?
Uma OTP é uma sequência de caracteres gerada automaticamente que é apenas válida para uma única sessão de login ou por um curto período de tempo. Porque uma OTP só pode ser usada uma vez, pode prevenir o risco de vazamento de credenciais, como uma palavra-passe perdida ou roubada.
Em teoria, uma OTP pode ser uma cadeia aleatória de caracteres de um determinado comprimento, incluindo letras maiúsculas e minúsculas, e até mesmo símbolos especiais. Mas para o bem da experiência do utilizador, a maioria dos serviços usa números puros quando utiliza OTPs.
Email / telefone + código de verificação
Muitos sites exigem que verifiques a tua identidade enviando um código de verificação (ou código de acesso) para o email ou número de telefone que registaste.
Imagina que o Jack e o Joe estão a jogar um jogo de adivinhação, onde o Jack pensa num número entre 0 e 999, e dá ao Joe três tentativas para adivinhar o número dentro de um minuto. Além de conhecer o intervalo do número, o Joe não tem mais nenhuma informação.
Todos sabemos que é quase impossível para o Joe adivinhar o número corretamente dentro de um minuto usando apenas três tentativas.
Email / telefone + código de verificação funciona sob o mesmo princípio: o código de verificação é geralmente válido por um período muito curto, geralmente não mais de 10 minutos (semelhante ao Jack dar ao 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 prevenir ataques de força bruta ao código de acesso (como o Jack só dar ao Joe "três tentativas").
Para potenciais atacantes, é quase impossível quebrar este método. No entanto, o sistema informa o utilizador do código de verificação através de um canal confiável (email ou telefone), permitindo ao utilizador verificá-lo diretamente.
Código dinâmico
Código dinâmico, também conhecido como OTP baseado no tempo (TOTP), é "dinâmico" no sentido de que muda ao longo do tempo. Geralmente, se uma aplicação web utiliza TOTP, irá seguir RFC6238 - TOTP: Algoritmo de Palavra-Passe de Uso Único Baseado no Tempo.
Palavra-passe de uso único baseada em hash
Antes de introduzir o TOTP, precisamos de explicar brevemente o RFC4226 - HOTP: Um Algoritmo de Palavra-Passe 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 partilhada 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 palavra-passe é gerada.
-
Cálculo de HMAC:
-
Usa HMAC-SHA-1 (ou outras funções de hash) para calcular o código de autenticação:
-
Aqui, H é um valor hash de 160 bits.
-
-
Truncação: Extraia uma parte do valor hash H para gerar a OTP. Assumindo que queremos uma OTP de 6 dígitos, o processo é o seguinte:
- Extraia o último byte de H como o deslocamento de truncação O.
- Extraia os 4 bytes começando de O, converta-os num inteiro T.
- Pegue os últimos d dígitos de T, ou seja, OTP = T mod 10^d.
Em resumo, a fórmula do HOTP é:
onde d é o comprimento desejado da OTP (geralmente 6-8 dígitos).
Palavra-passe de uso único baseada no tempo
O TOTP é uma extensão do HOTP, onde o contador é substituído por um passo de tempo. Ele utiliza o tempo atual para gerar um código de verificação dinâmico, portanto a OTP irá expirar automaticamente com o tempo. O princípio de funcionamento é o seguinte:
-
Passo de tempo: O TOTP utiliza o tempo atual T em vez do contador C do HOTP. O passo de tempo é um intervalo de tempo fixo definido (normalmente 30 segundos).
- Por exemplo, assumindo que o passo de tempo é 30 segundos, e o timestamp Unix atual é 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 com o tempo, então o servidor pode verificar a sua validade enquanto a OTP estiver dentro da janela de tempo válido.
Em resumo, a fórmula do TOTP é:
Baseados na nossa experiência usando apps de autenticação, podemos sincronizar o valor secreto entre o dispositivo e o servidor escaneando um código QR ou copiando e colando diretamente, e depois precisamos inserir o código dinâmico atual uma vez para garantir que o valor secreto é o mesmo.
Nos primeiros tempos de uso de dispositivos móveis, podí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 utilizam o serviço de tempo da rede (NTP) para sincronizar e atualizar regularmente o tempo do dispositivo. Mesmo que o relógio do dispositivo não seja inteiramente preciso, as atualizações frequentes podem garantir que o tempo seja razoavelmente consistente entre diferentes dispositivos. Baseado nesta suposição, o código dinâmico pode ainda ser usado mesmo se o dispositivo estiver offline, enquanto seria difícil receber um código de verificação em estado offline.
Notas finais
Neste artigo, apresentamos dois métodos diferentes de palavra-passe de uso único: email/telefone + código de verificação e código dinâmico.
Email/telefone + código de verificação depende da infraestrutura de comunicação e de serviços de email ou mensagem curta (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 popular, poderoso e altamente extensível serviço IAM (Gestão de Identidade e Acesso), suporta ambos os métodos de OTP, permitindo aos utilizadores escolher a solução que melhor se adapta às suas necessidades de uma perspetiva empresarial.