Modelo de segurança do KutunaCo

Última atualização:

Nesta página

O KutunaCo é um gerenciador de senhas offline e sem conta para iOS e Android. Esta página explica o que o KutunaCo 1.12.0 protege, onde seus dados ficam guardados e contra o que ele os defende, e diz com clareza o que ele não consegue fazer.

Em resumo

  • A caixa e as configurações são criptografadas no celular com AES-256; a chave fica no iOS Keychain ou no Android Keystore, somente naquele dispositivo.
  • Não há conta, servidor, sincronização, publicidade nem ferramentas de análise. A versão para Android nem sequer tem a permissão de internet; o app não consegue fazer nenhuma requisição de rede.
  • Os backups são criptografados com AES-256-GCM usando uma chave derivada da sua senha com Argon2id (64 MiB de memória nos backups novos).
  • O app é desbloqueado com a biometria, o código do dispositivo ou um PIN do app de 4 a 8 dígitos.

Por que offline?

Os gerenciadores de senhas na nuvem guardam milhões de cofres nos mesmos servidores, e esses servidores são um único grande alvo. Com o KutunaCo, não há nenhum banco de dados central que possa vazar, nenhum servidor para atacar e nenhuma conta para ser invadida. Sua caixa existe apenas no seu celular e nos backups que você faz.

A contrapartida é igualmente clara: não há sincronização automática entre dispositivos. Para trocar de celular, você faz um backup criptografado e o importa no novo.

Onde ficam seus dados

  • Itens da caixa e configurações: na pasta do próprio app, criptografados com AES-256 usando uma chave de 256 bits gerada aleatoriamente.
  • Chave da caixa: no iOS, no Keychain com a proteção "somente este dispositivo" (nunca é enviada ao iCloud nem restaurada em outro dispositivo); no Android, encapsulada pelo Keystore.
  • PIN do app: o PIN em si nunca é armazenado, apenas um hash PBKDF2-HMAC-SHA256 com salt (210.000 iterações). A partir da quinta tentativa errada, passa a valer uma espera crescente, de 30 segundos até uma hora.
  • Cópia para o preenchimento automático: somente os itens de senha que não estão na lixeira são repassados. As chaves 2FA, as notas e os dados de cartões e de chaves de API nunca são gravados no armazenamento do preenchimento automático.
  • Backups: são salvos apenas onde você escolher; os arquivos temporários são excluídos depois do compartilhamento.
  • Escaneamento de códigos QR de 2FA: as imagens da câmera nunca são armazenadas; a cópia temporária de uma captura de tela que você escolher é excluída depois de lida, e os códigos escaneados de uma transferência do Google Authenticator ficam na memória até você importá-los.

Bloqueio e autenticação

  • O app é desbloqueado com a biometria (Face ID, impressão digital), o código do dispositivo ou o PIN do app. No Android, o bloqueio aceita somente biometria forte (Classe 3) ou o código do dispositivo.
  • Quando o bloqueio usa só o PIN, ativar o Desbloqueio biométrico pede primeiro o PIN.
  • Opções do bloqueio automático: imediatamente, 30 segundos, 1 minuto, 5 minutos, 15 minutos ou nunca. O tempo é medido de forma que não é possível contorná-lo atrasando o relógio do dispositivo.
  • Ações sensíveis, como exportar, excluir todos os dados, desativar o bloqueio e alterar o PIN, pedem que você confirme sua identidade novamente.
  • Se você esquecer o PIN, confirme sua identidade com o bloqueio de tela ou a biometria do dispositivo e defina um novo. Isso funciona enquanto Permitir redefinir o PIN com o bloqueio do dispositivo estiver ativado (o padrão). Desative essa opção para que alguém que conheça o código do seu dispositivo não consiga definir um novo PIN; nesse caso, esquecer o PIN significa excluir todos os dados e restaurar um backup, como acontece em um dispositivo sem bloqueio de tela.

Preenchimento automático

  • Android: um item só é sugerido quando o nome do pacote e o certificado de assinatura do app que faz a solicitação correspondem aos do app vinculado, ou quando o domínio corresponde em um navegador conhecido cuja assinatura foi verificada. Cada preenchimento pede que você confirme sua identidade e, quando o bloqueio usa só o PIN, pede também o PIN do app. Somente a senha que está sendo preenchida é descriptografada. Sem um bloqueio de tela seguro, o preenchimento automático não funciona.
  • iOS: nada é listado sem a autenticação do proprietário do dispositivo (Face ID, Touch ID ou o código). O sistema recebe apenas o domínio e o nome de usuário, nunca a senha.
  • Links de 2FA: um link otpauth:// aberto por um site ou por outro app é mostrado com um aviso e só é salvo depois que você confirma; uma chave 2FA existente nunca é substituída.

Área de transferência e tela

  • As senhas copiadas são marcadas como sensíveis: no Android 13 e versões posteriores, elas não aparecem nas prévias nem no histórico da área de transferência do teclado e, no iOS, não passam para seus outros dispositivos pela Área de Transferência Universal.
  • A área de transferência é limpa após o tempo que você escolher (30, 60 ou 90 segundos, ou nunca) e quando o app é bloqueado. Os códigos 2FA copiados também são marcados como sensíveis.
  • No Android, as capturas de tela e a gravação de tela são bloqueadas. No iOS, o conteúdo fica oculto enquanto o app está em segundo plano e durante a gravação de tela.
  • O aprendizado do teclado e a correção automática ficam desativados nos campos sensíveis.

Backups

  • A chave é derivada da senha do backup com Argon2id (64 MiB de memória, 3 iterações, 4 vias paralelas: a configuração recomendada pela RFC 9106); cada arquivo indica os próprios parâmetros, então os backups criados antes da versão 1.8.0 com 19 MiB / 2 iterações continuam abrindo; o conteúdo é criptografado com AES-256-GCM e o cabeçalho também é autenticado, então um arquivo adulterado não abre.
  • A senha do backup deve ter pelo menos 10 caracteres. Senhas fáceis de adivinhar, como "Password123!", são recusadas, assim como o nome do produto, KutunaCo.
  • Se você esquecer a senha, ninguém consegue abrir o backup, nem mesmo nós.
  • Uma exportação sem criptografia só acontece se você a confirmar explicitamente, e qualquer pessoa que abrir esse arquivo pode ler seus itens.

Limitações conhecidas

  • O bloqueio do app é um bloqueio da interface. A chave da caixa não está vinculada à biometria; a caixa é criptografada com uma chave que fica disponível após o primeiro desbloqueio do dispositivo.
  • O Desbloqueio biométrico também aceita o código do dispositivo; quem souber o seu código pode abrir a caixa.
  • A caixa não vai junto para um celular novo com um backup do dispositivo no iCloud ou no Google. Faça um backup criptografado do KutunaCo antes de trocar ou redefinir seu celular.
  • Não há verificação de vazamentos (como o Have I Been Pwned); o app nunca acessa a internet, então não pode consultar uma lista externa. O relatório de saúde das senhas é calculado inteiramente no dispositivo.
  • Não há suporte a chaves de acesso (passkeys).
  • A extensão de Preenchimento Automático do iOS não pede o PIN do app; ela pede apenas a autenticação do proprietário do dispositivo. Por isso, quando o bloqueio usa só o PIN e a redefinição do PIN está desativada, nenhuma senha é repassada ao Preenchimento Automático do iOS, e o preenchimento automático fica indisponível no iOS.
  • Antes de você confirmar sua identidade, as sugestões de preenchimento automático mostram o título e o nome de usuário do item (QuickType no iOS; sugestões bloqueadas no Android). No Android, Configurações › Segurança › Ocultar nomes de usuário nas sugestões oculta o nome de usuário.
  • No Android, o leitor de código QR vem com os serviços do Google Play e também lê as capturas de tela que você escolher; sem os serviços do Google Play, digite ou cole a chave de configuração. Os serviços do Google Play podem enviar ao Google dados de diagnóstico anônimos sobre cada uso do leitor (o tipo de evento, quanto tempo levou, um código de erro e informações do dispositivo e do app, como o modelo do celular e a versão do app); a imagem, o conteúdo do código QR e os itens da sua caixa nunca fazem parte desses dados.
  • Para mostrar quando há uma versão nova, o app para Android pergunta ao app Play Store do seu celular se há uma atualização (Google Play In-App Updates) sempre que é aberto e, quando você volta a ele, no máximo uma vez por hora. Para responder, a Play Store pode enviar ao Google dados do aparelho e do app, como o modelo do celular e a versão do app; os itens da sua caixa nunca fazem parte desses dados, e o app em si continua sem fazer nenhuma requisição de rede. No iPhone o app não verifica nada: Configurações › Sobre abre a página do KutunaCo na App Store.
  • Nenhum app consegue proteger totalmente os dados em um dispositivo com root, com jailbreak ou infectado por malware.

Relatar uma vulnerabilidade

Se você encontrar um problema de segurança, escreva para support@kutuna.co. Informe a versão afetada, a plataforma e os passos para reproduzi-lo; nunca envie senhas reais nem outros dados da sua caixa. Os dados de contato também estão em security.txt.