Vessum › Blog › Senhas chamariz, e por que a maioria não funciona
Senhas chamariz, e por que a maioria não funciona
Uma segunda senha que abre outra galeria existe há uma década. A maioria das implementações falha no único teste que importa. Aqui está o teste, e como aplicá-lo.
"Digite uma segunda senha e veja outro conteúdo" não é uma ideia nova. Aplicativos de cofre de fotos entregam isso há mais de dez anos, e dezenas deles oferecem o recurso hoje na App Store.
A maioria falha no único momento em que isso importaria. Vale entender por quê, porque a falha não tem a ver com a força da criptografia. Tem a ver com algo bem mais banal.
O teste
Imagine que a pessoa para quem você entrega o código já usou esse aplicativo. Ela o tem no próprio telefone, ou leu sobre ele, ou viu um no aparelho de outra pessoa.
Ela digita o código que você deu. O aplicativo abre.
Há alguma coisa visível que diga a ela que aquilo é o chamariz?
Esse é o teste inteiro. Tudo abaixo trata das diferentes maneiras pelas quais um aplicativo falha nele.
Falha um: o chamariz é outra tela
A implementação comum é um desvio na interface. O aplicativo guarda duas senhas, compara o que você digitou com as duas, e mostra a galeria A ou a galeria B.
Isso tem dois problemas.
As duas senhas existem no aparelho. Estão num banco de dados, num arquivo de preferências ou no chaveiro. Recupere o armazenamento e você recupera as duas, e com elas o conhecimento de que eram duas. Criptografar as fotos não ajuda, porque o aplicativo precisa conseguir verificar uma senha que recebeu, e isso significa que ele guardou algo para comparar.
O banco de dados diz que são duas. Uma coluna chamada is_decoy, um vault_id igual a 2, uma contagem de linhas. Quem examina o armazenamento do aplicativo não precisa quebrar nada. Só lê, e agora sabe que deve continuar perguntando.
Falha dois: dá para ver que o chamariz é chamariz
Esta é mais sutil e, na prática, pior.
Muitos aplicativos fazem do chamariz uma versão reduzida do cofre de verdade. O cofre real tem ajustes para criar e gerenciar a segunda senha. O chamariz não tem, porque por que um cofre falso precisaria criar cofres falsos?
O resultado é que falta ao chamariz um recurso que o verdadeiro tem. Qualquer pessoa que já viu o aplicativo abre, dá uma olhada nos ajustes, vê uma seção que deveria estar lá e não está, e sabe em um segundo exatamente o que está olhando.
A partir daí, quem entregou o código está pior do que se nunca tivesse instalado o aplicativo. Não protegeu nada, e visivelmente tentou proteger, o que é um fato muito mais interessante do que qualquer coisa dentro do cofre.
Falha três: o aplicativo se anuncia
Um ícone com cadeado. Um nome com "Vault" ou "Secret". Uma ficha que promete esconder coisas de pessoas.
Nada disso é fraqueza criptográfica. É só uma placa na porta. O aplicativo não precisa ser encontrado e quebrado se dá para apontar para ele e exigir.
O que é preciso para passar no teste
Três propriedades, nenhuma delas exótica.
Nada guardado para comparar
O código não pode estar guardado em lugar nenhum, de forma nenhuma, nem como hash. Ele deve ser digitado, usado para derivar uma chave, e esquecido.
A consequência é severa e inegociável: um código esquecido não pode ser recuperado por ninguém, inclusive pelo desenvolvedor. Qualquer aplicativo que ofereça uma opção de recuperação está dizendo que guardou alguma coisa, e o que ele guardou pode ser tomado.
Nada no disco que conte os espaços
Se o armazenamento tem três blocos criptografados, quem examina sabe que há três coisas. A correção é o armazenamento parecer idêntico quer contenha um espaço, cinco, ou nenhum.
A abordagem usual é alocar todos os compartimentos na primeira execução, preencher todos com dados aleatórios, e completar cada um dos reais até exatamente o mesmo tamanho. Dados criptografados e dados aleatórios de um bom gerador vêm da mesma distribuição. Nada os separa sem a chave.
É por isso que esses aplicativos não podem exibir um número de "espaço em uso" que varie. Todo número que se mexe é um número que vaza.
Todos os espaços idênticos
Esta é a que a maioria das implementações erra, e é do que o teste lá em cima realmente trata.
O chamariz não pode ser uma versão menor do verdadeiro. Mesmos ajustes, mesmas seções na mesma ordem, mesmas palavras, mesma capacidade de criar espaços próprios, mesmas mensagens de erro. Não pode haver selo marcando um como o original, nem recurso que só o original tenha.
O corolário é que não existe "topo". Um espaço deve listar os espaços que criou e nunca o espaço de onde veio, para que quem abre um não consiga dizer se está no primeiro ou três níveis abaixo.
Como verificar um aplicativo você mesmo
Você não precisa ler o código-fonte de ninguém. Quatro perguntas levam você quase até o fim.
| Pergunte | Uma resposta ruim soa assim |
|---|---|
| O que acontece se eu esquecer o código? | "Fale com o suporte" ou "use o seu e-mail de recuperação" |
| O chamariz tem os mesmos ajustes do cofre real? | "O chamariz é uma visão simplificada" |
| Onde meu conteúdo fica guardado? | "Com backup seguro na nuvem" |
| O que apagar faz de verdade? | "Apaga o arquivo permanentemente" |
Essa última merece um comentário. Armazenamento flash não sobrescreve honestamente no lugar, então esfregar bytes é teatro. A resposta mais forte é que apagar descarta a chave, o que torna os bytes restantes permanentemente ilegíveis e evita que a contagem de arquivos caia de um jeito que mostre que algo foi removido.
Onde o Vessum se situa
O Vessum foi construído em torno desse teste, e é a razão de várias escolhas de design que de outra forma pareceriam estranhas.
Todo espaço tem os mesmos ajustes e pode criar espaços próprios, aninhados tão fundo quanto você quiser. Não há espaço principal nem marcador indicando um como original. O armazenamento são vinte e quatro compartimentos de tamanho fixo, todos escritos com dados aleatórios na primeira execução e todos cheios a partir daquele instante, de modo que um compartimento com um espaço e um compartimento sem nada são o mesmo número de bytes de dados de alta entropia.
E não há recuperação de código, porque não há nada guardado a partir do qual recuperá-lo.
Há um limite que declaramos com todas as letras: o fato de o Vessum estar instalado não fica escondido e não pode ficar. Qualquer um que olhe o telefone vê o aplicativo e vê que ele guarda dados criptografados. O que fica escondido é quantos espaços existem e o que há neles.
Se você quiser tentar distinguir um compartimento ocupado de um vazio por conta própria, a página inicial roda a criptografia de verdade no seu navegador e convida você a apontar quais compartimentos têm algo dentro. Ninguém se sai melhor que o acaso, e esse é exatamente o ponto.
Vessum
Fotos, documentos e notas atrás de mais de um código. Cada um abre um espaço diferente, e nenhum deles pode provar que os outros existem.
Baixar na App Store