Ecossistema iDLOCK Autenticador 2FA
Topografia de Infraestrutura, Motores Criptográficos e Defesas Resilientes.
📱 Core.APK: Dispositivo Móvel
Métricas Estáticas
Stack Tecnológica
L10N Internacionalização
Compilado nativamente para 25 idiomas via OS Injection (100% Offline):
🔒 Criptografia & Integridade de Dados
AES-256-CBC
Encrypt-then-MAC com Chave HMAC Derivada
Segredos TOTP blindados com AES-256-CBC + IV aleatório por operação via random_bytes(). A chave HMAC não é a mesma da criptografia: é derivada com hash_hmac('sha256', salt, masterKey). O MAC é calculado sobre IV + Ciphertext. Verificação em tempo constante com hash_equals(), eliminando Timing Attack e Padding Oracle.
Versionamento Cripto
Compatibilidade Criptográfica v1 → v2 → v3
O motor de descriptografia detecta o prefixo da string cifrada. v1 (sem HMAC) é rejeitado e logado. v2 aceita HMAC mas com derivação de chave na ordem antiga (bug corrigido). v3 é a versão segura atual.
Zero-Knowledge
Backup Recovery Key
Chave de recuperação com 256-bits de entropia via random_bytes(32) do CSPRNG do OS, convertida para base64url. Exibida uma única vez ao dono. O servidor retém apenas o hash via password_hash(PASSWORD_DEFAULT).
TOTP RFC 6238
Cofre Gerador de Códigos
Motor gerador via HMAC-SHA1 com truncamento dinâmico e períodos de 30 segundos. O sistema é um cofre — gera códigos para uso em serviços externos, como Google Authenticator. Decodificação Base32 (RFC 4648) com tratamento de caracteres inválidos.
Backup Blindado
Checksum SHA-256 + Trava por Conta
O arquivo .idlock-backup contém um checksum SHA-256 calculado sobre os serviços + identificador do dono. Na importação, o checksum é revalidado e a conta é comparada. Backups só restauram na conta de origem. Os secrets são re-criptografados: chave do servidor → chave do usuário (export) → chave do servidor (import).
Auditoria de Backup
Log Forense Completo
Toda operação de backup (geração de chave, exportação, importação) é registrada com ID do usuário, IP real, ação executada e contagem de serviços afetados. Rastreabilidade completa para investigação de incidentes.
🛡️ Autenticação & Defesa Anti-Brute
Rate Limiting
APCu Atômico + Fingerprint Composto
O identificador APCu combina IP ou conta com o SHA-256 do cookie do dispositivo: identifier | fingerprint. A chave final é hasheada com xxh3 para performance. Incremento atômico via apcu_inc() sem race condition. Fallback para MySQL em ambientes sem APCu.
Device Fingerprint
Anti-Fixation 256-bits
Cookie idlock_device_id gerado com bin2hex(random_bytes(32)) = 256-bits de entropia. Flags: SameSite=Strict, HttpOnly, Secure, 1 ano. Hash SHA-256 comparado a cada request via hash_equals(). Troca de fingerprint = logout imediato.
Cloudflare IP
Resolução Real de IP
A detecção de IP parte de REMOTE_ADDR. Headers como HTTP_CF_CONNECTING_IP e X-Forwarded-For só são aceitos quando a conexão vem de proxy confiável, evitando spoof direto contra rate limiting e logs.
Google OAuth JWT
Validação em 7 Camadas
Cada JWT passa por: 1) Verificação de assinatura via endpoint oficial do Google. 2) ISS (emissor). 3) AUD (audience Web). 4) AZP (authorized party Android). 5) EXP (expiração). 6) Nonce CSRF anti-replay. 7) email_verified. Após sucesso: session_regenerate_id(true).
JTI Anti-Replay
Reutilização do Rate Limiter
Cada JWT recebe bloqueio de reutilização via hash SHA-256 do token como identificador. A implementação reutiliza o motor de Rate Limiting com limit=1 e window=65min — eficaz, porém sem overhead de blacklist dedicada.
Google One Tap / FedCM
Login Assistido pelo Navegador
O fluxo Google Identity Services exibe contas disponíveis sem exigir navegação prévia pelo botão de login. O id_token é validado no backend com audience, issuer, expiração, nonce anti-replay e e-mail verificado antes da criação de sessão.
App Android
Sessão + Device Token
O app autentica por Google OAuth e mantém acesso com device token verificado no servidor. Fluxos externos de PIN foram removidos para evitar dependência de canais fora do iDLOCK.
Limpeza Probabilística
Manutenção Sem Impacto Operacional
Rotinas de limpeza de artefatos expirados são distribuídas ao longo do tráfego real para evitar jobs pesados em momentos de pico. O objetivo é manter baixa latência sem acumular registros temporários.
Cadastro Passwordless
Entrada Sem Senha Própria
Contas podem ser criadas a partir de identidade Google verificada, sem senha local do iDLOCK. Isso reduz superfície de ataque, suporte de recuperação e risco de reutilização de credenciais.
🔐 Gestão de Sessão & Cookies
Cookie __Host-
Prefixo de Segurança Máxima
O nome da sessão usa prefixo __Host- que o browser só aceita com Secure=true, Path=/ e sem Domain. Impossível de ser sobrescrito por subdomínios ou forjado via HTTP. Flags: HttpOnly, use_strict_mode ativo.
Timeout Inteligente
Inatividade Real (não desde login)
O campo last_activity é atualizado a cada request. O timeout mede inatividade real — não tempo desde o login. Configurável por usuário: 1h, 6h, 7 dias ou 20 dias. Cookie PHP alinhado ao maior timeout para evitar logout prematuro.
CSRF Token
256-bits + Expiração de 30 Dias
Gerado via bin2hex(random_bytes(32)) = 256-bits. Expira em 30 dias (alinhado ao maior timeout de sessão). Validação via hash_equals(). Extensões Chrome são isentas — proteção garantida pelo host_permissions do Manifest V3.
Session Regeneration
Novo ID a Cada Login
A cada login bem-sucedido: session_regenerate_id(true) invalida o ID anterior e cria um novo. Previne Session Fixation. O timeout do banco é carregado na sessão para evitar usar o default entre o login e o primeiro carregamento.
Login Push
Canal Interno Obrigatório
Cada novo login gera notificação interna/push para dispositivos vinculados. Captura: IP real, User-Agent, método de autenticação e timestamp. Parser regex detecta dispositivo (iPhone, Android, Windows, Mac) e browser (Chrome, Edge, Safari, Firefox).
OAuth Cookie
State Dual-Storage
O state do OAuth é armazenado simultaneamente em cookie (SameSite=None, Secure, HttpOnly, 10min) e em $_SESSION. Na verificação, aceita qualquer um dos dois. Proteção contra browsers que rejeitam SameSite=None.
💻 Endpoints Web & Extensões
GZIP On-The-Fly
Compressão Automática de JSON
Toda resposta JSON detecta Accept-Encoding: gzip e comprime com gzencode($json, 6). Emite Content-Encoding: gzip + Content-Length preciso. Redução real de payload sem depender de configuração do servidor.
APCu Settings Cache
RAM Cache Global (300s TTL)
URLs das lojas (Chrome, Play, Firefox, Edge, Opera) e redes sociais são cacheadas via apcu_store() com TTL de 300 segundos. Elimina uma query MySQL em cada request. Fallback transparente para query direta caso APCu indisponível.
Services Version
Sync Leve Sem Hash MD5
Em vez de buscar todos os serviços e calcular um hash MD5 a cada sync, o sistema incrementa um contador services_version no banco a cada mutação (criar/renomear/excluir). O endpoint de status retorna apenas o número — se mudou, o cliente refaz a sync.
Extension Manifest V3 v6.1.1
CSP Própria + Permissões Mínimas
CSP da extensão: script-src 'self'; object-src 'none'; base-uri 'none'. Permissões: apenas storage, alarms e activeTab. Host permissions trancadas exclusivamente em idlock.ai. Disponível para Chrome, Edge, Firefox e Opera.
Session Keep-Alive
Auto-Refresh via chrome.alarms
A extensão pinga o servidor a cada 10 minutos via chrome.alarms para manter a sessão ativa. O badge do ícone atualiza countdown TOTP também via alarms — funciona mesmo após o Service Worker ser suspenso pelo browser.
Sync Mutex
Promise-Based Race Prevention
Se o popup abre durante um sync do onInstalled, em vez de disparar uma segunda sync ou retornar dados velhos do storage, o mutex baseado em Promise faz o popup esperar pela mesma resposta. CSRF token armazenado em storage.session (RAM only — morre ao fechar o browser).
📱 Android: Barreiras Nativas
FLAG_SECURE
Bloqueio Total de Captura
A flag WindowManager.LayoutParams.FLAG_SECURE é ativada na MainActivity. O sistema operacional bloqueia screenshots, gravação de tela e preview na lista de apps recentes. Zero captura visual dos códigos TOTP.
EncryptedSharedPrefs
AES-256-GCM + Android Keystore
Cache local de serviços usa EncryptedSharedPreferences com MasterKey do Android Keystore. Chaves de valor: AES256_GCM. Chaves de nome: AES256_SIV. Instância singleton lazy — Keystore lido uma única vez. Dados locais ficam inacessíveis sem o hardware do aparelho.
Network Security
Cleartext Blocked + System CAs Only
O network_security_config.xml bloqueia todo tráfego cleartext (HTTP) globalmente e aceita apenas CAs do sistema. CAs adicionadas pelo usuário (Proxy Charles/Fiddler) são rejeitadas. Certificate Pinning não usado (Cloudflare rotaciona certificados sem aviso — OWASP 2025 desencoraja).
allowBackup=false
Extração ADB Estancada
O AndroidManifest define allowBackup="false" impedindo que ferramentas ADB extraiam dados do app. Combinado com EncryptedSharedPreferences, mesmo acesso físico ao device não expõe os segredos TOTP.
Avatar Proxy
Server-Side Relay com Whitelist
Fotos de perfil do Google são buscadas pelo servidor (não pelo app). Whitelist rígida de domínios: apenas googleusercontent.com e googleapis.com. Evita vazamento de cookies e problemas de SameSite/UserAgent do Coil.
WebKit Cookie Bridge
TWA ↔ Retrofit Sharing
Interceptor OkHttp customizado sincroniza cookies entre o WebView (TWA) e as requisições Retrofit da API nativa. O header X-App-Client: android é injetado em toda request para que o servidor diferencie app vs. browser.
Biometric Auth
Credential Manager + Passkey FIDO2
Autenticação biométrica via androidx.credentials:credentials + credentials-play-services-auth. Suporte a Passkey/FIDO2 nativo via Android Credential Manager API. Impressão digital e face unlock protegem o acesso ao cofre sem expor senha ao SO.
Firebase Cloud Messaging
Push Notifications em Tempo Real
FCM integrado via firebase.messaging para notificações de segurança em tempo real (novo login detectado, sessão expirada, alerta de acesso suspeito). O token FCM é rotacionado pelo SDK automaticamente sem intervenção do servidor.
Google Drive Backup
Backup Cifrado na Nuvem Pessoal
Exportação do cofre TOTP cifrado directamente para o Google Drive do utilizador via google-api-services-drive v3 + GoogleAccountCredential. O arquivo .idlock-backup viaja já criptografado — o Google nunca vê os segredos em texto claro.
ML Kit QR Scanner
Scanner Nativo Google — Zero Permissão
Leitura de QR Codes TOTP via play-services-code-scanner + mlkit:barcode-scanning:17.3.0 combinado com CameraX 1.6.0. O scanner do Google processa localmente no dispositivo, sem upload de imagem. Suporta páginas de memória de 16 KB (exigência Play 2025+).
In-App Updates
Atualização Automática via Play Store
SDK play:app-update:2.1.0 verifica e aplica actualizações silenciosamente sem tirar o utilizador do fluxo. Modo flexible update para actualizações menores; modo immediate para patches críticos de segurança.
16KB Page Size
Conformidade Play Store 2025+
APK compilado com useLegacyPackaging = false e alinhamento de bibliotecas nativas a páginas de 16 KB, requisito obrigatório do Google Play a partir de 2025 para dispositivos com kernel Linux atualizado. Garante compatibilidade com Pixel 8+ e futuros flagships.
🛡️ Defesa de Borda: Security Headers
HSTS
Força HTTPS
Obriga o navegador a comunicar exclusivamente via HTTPS. Registrado na lista de preload dos browsers. Protege contra ataques de downgrade SSL em redes Wi-Fi públicas.
CSP + Nonce
128-bits por request
Nonce gerado via base64_encode(random_bytes(16)) a cada request. strict-dynamic propaga confiança. Violações reportadas automaticamente em endpoint dedicado para monitoramento contínuo.
X-Frame-Options
Anti-Clickjacking
Proíbe que o site seja embutido em iframes de qualquer domínio. Blinda contra Clickjacking, onde atacantes engaiolam o site de forma invisível para forçar cliques em aprovações OAuth.
Referrer-Policy
Controla vazamento
Apenas a origem (domínio) é compartilhada em navegação cross-origin. Impede que tokens ou credenciais na URL vazem para analytics de terceiros.
Permissions-Policy
Controla hardware
Câmera permitida apenas para o próprio domínio (QR Code scan). Microfone e GPS bloqueados. Scripts de terceiros não podem solicitar permissões intrusivas.
Stack Concealment
Ocultação de tecnologia
Remoção ativa dos headers que expõem a stack. Cloudflare oculta o servidor de origem. Cache-Control no-store para respostas dinâmicas impede persistência de dados autenticados em disco.
COOP
Isolamento de janelas
Isola a aba do site de janelas externas. Permite popups para Google OAuth. Bloqueia ataques Spectre de vazamento de memória e referência reversa por sites maliciosos.
X-Content-Type
Anti-MIME Sniffing
Força o navegador a respeitar o Content-Type declarado. Impede execução de código malicioso camuflado como imagem (.png/.jpg) explorando MIME Sniffing.
Upload Lockdown
Uploads fora do webroot
Arquivos enviados por usuários ficam fora da raiz pública do site. Mesmo com falha de regra no Nginx, não há URL direta para executar ou baixar o conteúdo.
🌐 Protocolos API & Redirect Safety
Redirect Whitelist
Open Redirect Prevention
Toda chamada de redirect valida o domínio contra whitelist rigorosa. Apenas o domínio próprio e endpoints Google OAuth. URLs protocol-relative (//) e caracteres de escape são bloqueados por regex antes de processar.
CORS Bridge
Extension Auth Segura
Extensões autenticam via cookies de sessão da web. CORS reflete a Origin exata da extensão (chrome-extension://... ou moz-extension://...) sem wildcard. Apps nativos (Android) não usam CORS — apenas header X-App-Client.
Input Sanitization
Camada Tripla
Emails: FILTER_SANITIZE_EMAIL + FILTER_VALIDATE_EMAIL. HTML: htmlspecialchars(ENT_QUOTES, UTF-8). Strings: trim(strip_tags()). Updates de usuário aceitam apenas campos de uma whitelist estrita.
Zero CDN
Supply-Chain Attack Eliminado
Nenhum JavaScript, CSS ou fonte é carregado de CDNs externos. Todos os assets são self-hosted. Isso elimina o vetor de Supply-Chain Attack (comprometimento de bibliotecas em CDNs públicas) e torna Subresource Integrity (SRI) desnecessário por design — não há recurso externo para validar.
Paradoxo 2FA
Por Que Não Exigimos 2FA no Login?
O iDLOCK é o gerenciador de 2FA. Exigir outro TOTP para acessar o cofre criaria dependência circular. A segurança do acesso é garantida por Google OAuth, Passkey/WebAuthn, sessão protegida e alertas de login.
⚙️ Engenharia de Software & Resiliência
Base32 Auto-Correcção
Tolerância a Erros Humanos
Ao adicionar um serviço TOTP manualmente, o sistema corrige substituições comuns de digitação: 0→O, 1→I, 8→B, 9→P. Base32 não usa dígitos, então a correcção é silenciosa e segura. Caracteres inválidos restantes são removidos sem rejeitar o código inteiro.
PDO Reconnect Ping
Singleton com Auto-Recuperação
A conexão com o banco é um singleton por request, sem PDO::ATTR_PERSISTENT, evitando conexões presas entre ciclos do PHP-FPM. Antes de reutilizar a instância local, executa SELECT 1; cada nova conexão força timezone +00:00 e charset utf8mb4_unicode_ci.
Mass Assignment Block
Field Whitelist Hardcoded
O método de atualização de perfil aceita um array genérico, mas filtra internamente por uma whitelist rígida de campos permitidos. Mesmo manipulando o POST diretamente, um atacante não consegue injetar campos sensíveis como flags de administrador ou hashes de chaves.
ON DELETE CASCADE
Exclusão Atómica Total
A exclusão de conta executa apenas um DELETE na tabela principal. As foreign keys com ON DELETE CASCADE limpam automaticamente: serviços TOTP, tokens de autenticação, logs de login, logs de backup e categorias. Zero dados órfãos no banco.
Zero Stack Trace
Error Handling em Produção
O roteador global captura toda exceção com catch (Throwable). Em produção: loga o erro, limpa o buffer de saída e retorna mensagem genérica — nunca expõe arquivo, linha ou trace. Em debug: mostra trace estilizado. Rotas de API inexistentes retornam JSON 404, não HTML.
Catálogo Crowdsourced
Ranking Orgânico de Serviços
Quando um utilizador adiciona um serviço via extensão, o sistema busca o favicon automaticamente e insere o domínio no catálogo compartilhado. Se o domínio já existe, incrementa o contador de uso. O ranking de popularidade cresce organicamente com o comportamento real dos utilizadores.
🧠 Fator Humano & UX de Segurança
Zero Erros Visíveis
UX de Segurança Sem Exposição
Conta não cadastrada nunca retorna erro público: o sistema trata a autenticação por Google OAuth ou Passkey sem expor enumeração de usuários. Isso reduz superfície de ataque sem comprometer a experiência.
i18n 11+ Idiomas
Internacionalização Nativa em Todo Ecossistema
APK: 25 idiomas nativos via OS locale injection. Web e extensão: PT-BR, EN-GB, ES-ES, HI, TL, FR, DE, IT, JA, ZH-CN e RU. A detecção de idioma usa o locale do sistema (APK) ou cookie/query-string (web). Textos jurídicos seguem a língua do utilizador.
Idle Logout com Aviso
Proteção Contra Sessão Abandonada
O JS da dashboard detecta inatividade real (mouse, teclado, scroll, touch). 60 segundos antes do timeout, exibe toast de aviso. Timeout configurável: 1h, 6h, 7 dias ou 20 dias. Fix especial para overflow de 32-bits do V8 em sessões > 24h.
Copy-to-Clipboard Seguro
TOTP Copiado e Auto-Apagado
O código TOTP é copiado via navigator.clipboard.writeText(). Um segundo toast confirma a cópia. O código não persiste no histórico da área de transferência — a exibição rotaciona a cada 30s, eliminando o risco de clipboard sniffing.
Tutorial Guiado
Onboarding em 5 Passos
Modal de tutorial interativo com navegação por dots, botões Anterior/Próximo e atalho de teclado. Introduz QR Scan, entrada manual, captura de tela e uso da extensão. Projetado para utilizadores não-técnicos sem simplificar o produto.
Captura de Tela QR
getDisplayMedia — Zero Upload
O utilizador partilha uma aba do navegador via getDisplayMedia(). Um único frame é capturado, processado localmente com jsQR e a stream é encerrada imediatamente. Nenhum pixel é enviado ao servidor. Funciona sem câmera física.