(Deixe-me saber se este não é o site certo…)
Na hora de escolher um aplicativo autenticador para GitHub e outros sites, acabei optando pelo Sophos, porque, por que não. Aparentemente, eu poderia ter escolhido o Google app ou outro.
Isso sugeriria que todos eles estão fazendo basicamente o mesmo trabalho e que o site não se importa particularmente com qual aplicativo eu uso. Certamente não contei ao site qual aplicativo estou usando, o que sugere que é bastante neutro.
Como é que isso funciona? Existe um ponto central de autenticação, ou todos seguem o mesmo algoritmo, ou existe uma lista de autenticadores aceitáveis?
A maioria desses aplicativos segue o mesmo algoritmo, OATH TOTP (conforme definido no IETF RFC 6238).
Funciona totalmente offline – o código QR que você escaneia contém uma chave secreta da qual derivam os códigos de 6 dígitos, em combinação com o carimbo de data/hora atual (arredondado para o meio minuto mais próximo). O mesmo código pode, portanto, ser importado para vários aplicativos e eles gerarão o mesmo código de forma totalmente independente, desde que os relógios correspondam.
(Há exceções; por exemplo, RSA SecurID costumava ser comum no passado, OATH HOTP é uma possibilidade rara – baseada em contador em vez de baseada em tempo – e alguns aplicativos usam seus próprios algoritmos por razões históricas ou não, mas OATH TOTP é o único geralmente aceito na web.)
O núcleo do algoritmo é apenas
HMAC_SHA1(secret_key, timestamp)
. A maioria dos sites tem a opção de mostrar a chave secreta em formato de texto em vez de um código QR, e então você pode usar oathtool ou hotpie para experimentá-la. (Certifique-se de não deixar a chave secreta por perto.)O código QR contém
otpauth://totp/USER?secret=ABC&issuer=SITE
, ou seja, a mesma chave secreta mais o rótulo de entrada (que é apenas para fins de exibição).A versão resumida é: eles geram o código da mesma maneira. Acredito que TOTP é o 'padrão' aqui. Uma das coisas boas dos sistemas modernos e sempre on-line é que você tem uma sincronização de tempo confiável - usando isso e uma chave privada (que está incluída no código QR que você escaneia) e o mesmo algoritmo, você pode gerar um previsível. chave de tempo sem um ponto central de autenticação.
Isso também significa que, em teoria (e prática), você pode exportar suas chaves para outro dispositivo/cliente TOTP e, desde que seus relógios sejam razoavelmente precisos, ele deverá funcionar.
Se não me falha a memória, eles usam o OTP que você fornece na primeira vez para confirmar que é a hora e a chave 'corretas', mas não tenho certeza disso.
O conceito central por trás de todos os sistemas de autenticação de dois fatores devidamente protegidos envolve o usuário provar sua identidade usando algum mecanismo previamente acordado que não pode ser razoavelmente replicado.
O mecanismo específico usado pela maioria dos aplicativos 'autenticadores' é conhecido como TOTP (Time-based One Time Password). Esta é uma variante modificada de um mecanismo mais antigo conhecido como HOTP (HMAC One Time Password). A configuração de qualquer um dos mecanismos funciona da seguinte maneira.
otpauth://
esquema. Os detalhes disso também não são particularmente importantes para a discussão, apenas saiba que ele codifica o segredo (e as informações sobre o próprio site) de forma que o dispositivo autenticador possa lê-lo.Feito isso, o autenticador é configurado para fornecer códigos para essa conta. Na verdade, usar o autenticador funciona da seguinte maneira:
O servidor faz exatamente a mesma coisa para verificar o código.
É importante observar que, uma vez configurado o autenticador, não há comunicação entre o autenticador e o servidor, exceto quando o usuário digita um código quando solicitado, e não há nenhuma comunicação entre o servidor e o autenticador. Este aspecto é uma parte extremamente importante do motivo pelo qual HOTP e TOTP são geralmente considerados seguros, mas SMS ou 2FA baseado em e-mail geralmente não são.
Além disso, é importante observar que tanto o HOTP quanto o TOTP têm algumas limitações inerentes:
Alguns sistemas usam uma abordagem semelhante ao TOTP ou HOTP, mas com um algoritmo diferente, geralmente por motivos legados. Um exemplo particularmente proeminente é o 'Steam Guard Mobile Authenticator' da Valve, que usa TOTP funcionalmente, mas automatiza totalmente a configuração e usa um mecanismo diferente para derivar o código da saída do algoritmo hash.
Para referência, a outra grande implementação segura de 2FA que está em uso generalizado é o FIDO2, que funciona de maneira um pouco diferente, mas ainda depende do conceito de o usuário provar sua identidade fazendo algo que somente ele deveria ser capaz de fazer (em vez de gerar códigos , o FIDO2 envolve assinar digitalmente um desafio de autenticação usando uma chave que foi previamente configurada com o servidor, que é tecnicamente mais segura que o TOTP por alguns motivos).