Um código de verificação precisa durar o suficiente para chegar e ser digitado, limitando ao mesmo tempo a chance de adivinhação ou reutilização. Meça o fluxo completo de verificação antes de escolher a duração.
Por quanto tempo o código de verificação deve permanecer válido?
Permita no máximo dez minutos para um código de autenticação enviado, incluindo entrega e digitação.
A orientação de autenticação do NIST define esse máximo para autenticação por um canal separado. Ela também exige que o servidor aceite o código apenas uma vez, impedindo reutilização após autenticação bem-sucedida.
Marque o código como usado quando ele for aceito. Rejeite outra submissão desse código mesmo que ela chegue antes da expiração.
Dez minutos é um máximo, não um período de espera recomendado. Escolha uma janela menor quando suas medições de entrega e digitação permitirem.
Um código que leva quarenta segundos para chegar deixa nove minutos e vinte segundos em uma janela de dez minutos. Inclua o tempo de leitura e digitação ao usar suas medições de chegada.
Códigos gerados por autenticador seguem um modelo de tempo diferente. Use as regras de TOTP ou HOTP correspondentes quando o aplicativo gerar o código localmente.
Quantos dígitos ele deve ter?
Use pelo menos seis dígitos gerados aleatoriamente. Defina um limite de tentativas com erro.
O NIST exige pelo menos seis dígitos decimais de um gerador aleatório aprovado para segredos de autenticação enviados. Um contador ou carimbo de tempo previsível não atende a esse requisito.
Seis dígitos aleatórios produzem um milhão de códigos possíveis. Cinco tentativas distintas representam cinco chances em um milhão, ou uma em duzentas mil.
Conte tentativas com erro contra a conta. O NIST exige que um novo código preserve essa contagem, de modo que reenviar não possa criar tentativas ilimitadas.
Um limite de tentativas também precisa de um caminho de recuperação para usuários legítimos que o esgotem. Defina como eles recuperam o acesso sem zerar o limite para um atacante.
Devo usar oito dígitos?
Use oito quando a probabilidade menor de adivinhação justificar dois dígitos a mais para a pessoa digitar.
Oito dígitos aleatórios produzem cem milhões de códigos possíveis. Com cinco tentativas, a chance passa a ser cinco em cem milhões.
Isso é cem vezes menor do que cinco tentativas contra seis dígitos. Mantenha o mesmo limite de tentativas ao aumentar o tamanho do código.
Códigos mais longos não corrigem adivinhação ilimitada. Implemente o limite de tentativas antes de tratar dígitos extras como proteção suficiente.
O que posso configurar no Bird?
Defina a política de código de verificação do espaço de trabalho. Inspecione as configurações resolvidas retornadas para cada verificação.
| Campo | O que escolher |
|---|---|
code_length | Bird aceita de 4 a 8 caracteres. Escolha pelo menos seis para esta política |
code_type | Inspecione o conjunto de caracteres retornado, numeric ou alphanumeric |
ttl_seconds | Bird aceita de 1 a 59940 segundos. Mantenha a janela de autenticação em 600 segundos ou menos |
max_attempts | Escolha de 1 a 10 submissões incorretas antes que a verificação falhe |
resend_cooldown_seconds | Escolha de 0 a 3600 segundos entre envios ao destinatário |
A duração permitida pelo API vai além desta recomendação de autenticação. Defina o valor deliberadamente em vez de tratar o valor máximo aceito como uma expiração adequada.
Uma solicitação de verificação pode sobrescrever code_length para aquela verificação. Verifique a política resolvida ao investigar um comportamento diferente da configuração do espaço de trabalho.
O que devo escolher?
- Comece com seis dígitos aleatórios e um limite de tentativas pequeno e aplicado.
- Dimensione a janela de validade a partir do tempo medido de entrega e digitação, dentro de dez minutos.
- Use oito dígitos quando a ação justificar uma probabilidade menor de adivinhação.
- Imponha uso único e preserve o contador de tentativas com erro ao emitir outro código.
Em resumo
Permita no máximo dez minutos.
A entrega e a digitação consomem a janela de validade. Escolha uma duração menor quando o fluxo que você mediu permitir.
Use pelo menos seis dígitos aleatórios.
Conte tentativas com erro além de escolher o tamanho do código. Códigos mais longos não substituem um limite de tentativas.
Aceite cada código apenas uma vez.
Rejeite um código já aceito mesmo que a janela de validade ainda não tenha terminado.
Mantenha o contador de tentativas entre reenvios.
Emitir outro código não pode dar à conta uma nova cota de tentativas.