Uma visão técnica para quem avalia segurança. Tudo aqui pode ser conferido no código-fonte — inclusive as partes menos favoráveis, que declaramos em vez de omitir.
Não há backend. A extensão é uma extensão do Chrome em Manifest V3 que gera códigos TOTP/HOTP localmente com OTPAuth. Não operamos servidores, não mantemos contas e não existe canal pelo qual os dados do usuário possam chegar até nós.
Como não há servidor, também não há material de chave do lado do servidor, nem custódia de chaves, nem qualquer caminho de recuperação sob nosso controle. Se alguém esquece a senha e perde o código de recuperação, não temos como ajudar — é proposital.
A proteção por senha é opcional e vem desativada. Com ela ativada:
Os dados nunca são cifrados diretamente com uma chave derivada da senha. Uma chave mestra aleatória cifra os registros; a saída do PBKDF2 apenas encapsula essa chave mestra. Duas consequências decorrem daí, e as duas importam:
Com a proteção por senha ativada, todo o registro da conta é cifrado, exceto seu identificador e sua impressão digital — inclusive o nome do serviço, de modo que um perfil roubado não revela em quais serviços o usuário tem conta. Ao ativar, a extensão cifra os registros, verifica-os decifrando e comparando e só então remove todas as cópias em texto claro: armazenamento local do navegador, sincronização e os sete instantâneos rotativos de backup.
Dito sem rodeios, porque pesa na sua avaliação:
Em resumo: isto protege dados em repouso. Não defende, nem tem como defender, um dispositivo que já esteja sob controle de um atacante durante o uso.
O manifesto declara exatamente duas permissões e nenhuma permissão de host:
Não há content scripts, nenhuma permissão tabs, cookies ou webRequest e nenhum recurso acessível pela web. A extensão não consegue ler nem alterar o conteúdo de página alguma.
A leitura de QR pela câmera roda em uma página da extensão aberta numa aba, não no popup — um popup é destruído ao perder o foco, que é exatamente o que um pedido de permissão faz. Para isso não é preciso nenhuma permissão no manifesto: usa-se o pedido de câmera padrão do navegador, concedido por origem da extensão e revogável nas configurações do site, e ele nunca aparece antes de o usuário abrir o leitor. O vídeo é decodificado localmente e nunca é transmitido nem armazenado.
Em uso normal a extensão não faz nenhuma requisição automática, e o Manifest V3 proíbe código remoto. Todas as conexões que ela pode fazer:
| Host | Quando | Leva dados do usuário? |
|---|---|---|
| worldtimeapi.org timeapi.io | Verificação de desvio do relógio, em cache, falha silenciosamente. Com o relógio desajustado o TOTP quebra. | Não |
| authenticator.sh | Página de boas-vindas na instalação; página de feedback na desinstalação ou na avaliação. | Não (logs comuns de servidor web) |
Nenhuma fonte, script, folha de estilo ou imagem é carregada de hosts de terceiros. Tudo o que a interface precisa para ser renderizada vem dentro do pacote.
Nada do que está acima precisa ser aceito como fé. A extensão é de código aberto e cada versão é reproduzível:
.crx publicado na Chrome Web Store e descompacte-onpm ci && npm run build no Node 20 LTSdist/ resultante com o pacote descompactadoA cada release no GitHub publicamos um SHA-256 de cada arquivo do dist/ produzido, como SHA256SUMS-v<version>.txt e no formato sha256sum, de modo que o passo 4 vira uma única execução de sha256sum -c. As diferenças devem se limitar à ordem dos arquivos dentro dos arquivos compactados e a espaços na saída minificada entre versões de patch do Node.
As dependências de execução são propositalmente poucas — OTPAuth, React, jsQR, Zustand, Framer Motion e Lucide — fixadas por um lockfile versionado. Um SBOM CycloneDX está disponível mediante solicitação.
Ver o código-fonteSomos um fornecedor pequeno e independente. Se algum dos itens abaixo for requisito obrigatório no seu processo, é melhor saber agora do que três semanas depois de iniciada a avaliação:
O que oferecemos em troca é transparência total do código, uma build verificável, uma superfície mínima de permissões e nenhuma infraestrutura de servidor que pudesse guardar seus dados.
Relatos de vulnerabilidade e dúvidas de segurança: security@authenticator.sh. Nossa política de divulgação, escopo, prazos de resposta e termos de safe harbour estão na página de política de segurança; o que é armazenado e o que sai do dispositivo está descrito na política de privacidade.
Temos prazer em responder a um questionário escrito de avaliação de fornecedores ou percorrer o código junto com uma equipe de segurança.
Para qualquer assunto que não seja de segurança — instalação, recuperação de conta, dúvidas de cobrança em uma implantação — veja o suporte. Por favor, não envie relatos de vulnerabilidade para lá: aquela caixa não é tratada como confidencial.