Crítica à faculdade da criptografia

ou: porque apenas criptografia não é lá essas coisas todas.

Todos os meus amigos mais próximos estão cansados de saber isso sobre mim: eu odeio Kant, comecei a não gostar dele através de Nietszche mas quando fui ler a Crítica à Razão Pura eu não aguentei nem terminar, há uma visão bem utópica e sem sustentação para coisas muito sérias como desigualdade e “paz”, segundo ele, bastaria ter apenas vontade das pessoas como se não houvesse essa complexidade toda na intricada rede de relações humanas, na desigualdade que existe desde sempre, dos jogos de interesse e necessidades de sobrevivência. Sempre imaginei que o único motivo pelo qual ele se tornou tão famoso e consequentemente influente foi por ser rico numa época que a nobreza européia considerava todos os diferentes de si como bárbaros ou até mesmo como nem mesmo humanos (não é mesmo Hegel? que dizia que na África não havia história pois nem mesmo havia civilização! ele é outro que eu tenho sérios problemas mas deixarei isso para outro dia) .



A esta altura deve estar pensando em porque comecei este texto falando de Kant se o tema é criptografia… É que vejo um padrão muito repetido em muitas declarações e isso de colocar criptografia no centro de tudo e tudo ser cripto-alguma-coisa. Tudo sempre tem uma estética que oscila entre a utópica e a distópica, aliás a esta altura nem acho tão importante entender as diferenças entre essas abordagens mas como os discursos quase nunca tratam de abordagens práticas ou realistas e escondem o “por que” das escolhas práticas, exemplo: por qual motivo o whatsapp usa criptografia de ponta-a-ponta dessa forma? que metadados são usados e por quê? Sem perguntas do tipo tudo me parece extremamente vazio como um comercial de margarina.



Metadados



Depois que o whatsapp tentou mudar a política de privacidade, questionar a necessidade de coleta de tantos metadados foi mais que uma reação natural, foi um desses raros momentos que houve algum consenso nos chatíssimos sites de tecnologia sobre olhar para o serviço mais que apenas bajulando a empresa como se o aplicativo em si não fizesse parte de algo maior, finalmente naquele momento foram levantadas questões importantes que passam quase sempre despercebidas, falar de metadados é só uma dessas questões.



Metadado é um termo realmente muito vago para se entender a importância da coisa, mas justamente metadado poder ser qualquer coisa que não seja a mensagem (texto, vídeo, imagem, documento, etc) criptografado realmente assusta pela abrangência. Sendo assim estamos falando de qualquer informação que pode ser colhida de quem utiliza o aplicativo ou site, pode ser desde informações sobre a digitação, sobre a posição do mouse na tela, em quê foi clicado, o tipo de mídia que foi criptografada junto com seus metadados como tamanho, formato, dados sobre sua criação, etc. informações sobre o aparelho usado na comunicação, contatos, até mesmo sobre a bateria do celular e o que mais consiga imaginar, afinal não é de hoje que todos falam que os smartphones são máquinas perfeitas de monitoramento.



Boa parte do que discutimos sobre privacidade não é sobre mensagens em si, repare no exemplo das redes sociais, só definir uma mensagem como pública ou não nada tem a ver com o problema real de privacidade. Quase sempre que falamos da privacidade no twitter, facebook, google, Microsoft, entre muitos outros, falamos de metadados, informações nossas colhidas sem que a gente perceba e que falam muito sobre quem nós somos, onde vivemos, nossos hábitos, círculo social, habilidades, renda… Obviamente, muita coisa é compreendida diretamente, outras de forma indireta e outras ainda subentendidas, essa infromação sobre renda é uma dessas coisas e tenho história perfeita para ilustrar isso: anos atrás eu estava estudando sobre como trabalhar com grafos para entender a geografia da transmissão de informações em redes como o twitter. Na época fiz algo simples para os primeiros testes, busquei a hashtag “python” e olhando só os metadados deu para identificar alguma pessoa desenvolvedora de softwares que morava na Índia e estava de férias na Malásia, eu realmente não busquei traduzir o tweet mas achei interessante que alguns tinha a localização (na época, a maioria desses era de usuários do iphone) e até com alguma precisão, indicava um ponto ou um retângulo com a região aproximada de onde o tweet foi feito e foi justamente isso que me fez entender que eram férias, as pessoas do círculo social que supostamente trabalhavam no mesmo lugar (imagino isso pela hashtag e geolocalização) mantiveram o mesmo padrão de publicações e com a mesma geolocalização enquanto a pessoa de férias tinha mudado o padrão e ao buscar a geolocalização, havia alí um hotel.



Então vamos imaginar: pela diária do hotel e tempo de hospedagem dá para ter uma idéia do padrão de vida da pessoa, algumas coisas fora este momento excepcional também ajudariam, como o local de trabalho, os horários, local onde mora, modelos, marcas e versões dos computadores e smartphones que usa. Me senti péssimo entendendo tudo isso em alguns minutos, esses dados são acessíveis apenas pela API e se para mim, uma pessoa que apenas registrou um app para fazer uns exercícios simples, imagina o quanto se sabe sobre as pessoas no próprio twitter! E isso inclui também saber sobre mim e todas as pessoas próximas a mim que usam a mesma plataforma. Literalmente me senti streaptisicamente pelado.



O motivo de eu ter começado pelos metadados era para mim bem claro na época:


  1. Eu não sabia nada sobre processamento de linguagem natural (NLP)

  2. Até onde dava para ir só com metadados? é bem mais simples e mais leve usar algoritmos que lidam com dados tabulares do que com linguagem natural.



O resultado do experimento é que eu esfriei com o twitter, usava ainda porque me sentia obrigado mas era muito desconfortável estar lá, depois veio o surto das eleições e o exército de bots, já fazia um tempo que eu estava meio que numa crise existencial sobre o que era eu alí naquele meio, menti demais para mim falando que era uma necessidade prática estar lá mas foi me fazendo tão mal que acabei deixando. Ainda me pego refletindo, como agora mesmo, sobre como essa política e essa economia da empresa basear tudo na vigilância para estimular interações cada vez mais surtadas e alucinadas através das escolhas de algoritmos torna o ambiente tão distópico, além de obviamente descaracterizar uma pessoa como ser humano. Talvez eu deva me aprofundar neste assunto outro dia, por hoje eu só gostaria de falar de como criptografia não é uma solução mágica, e que o buraco é bem mais embaixo do que os discursos fazem parecer.



A arquitetura da coisa



Isso é algo que tenho pensado nos últimos meses, e arquitetura aqui tem 2 sentidos, me refiro tanto à forma como os dados são criptografados (se divididos ou não, se mantém alguma estrutura ou não e por aí vai) quanto à arquitetura dos softwares ou estrutura de comunicação entre usuários ou usuário-servidor, para esta 2ª forma de arquitetura, me preocupa por onde a informação passa e como ela trafega.



Mas vamos por partes, primeiro vamos à forma e depois ao caminho.



Uns meses atrás eu fiquei procurando opções para criptografar documentos digitalizados que eu queria deixar sincronizado com alguns servidores em nuvem. Como são documentos pessoais (nada que o governo ou alguma empresa que não liga para a segurança dos meus dados já não tenha vazado e possivelmente ainda é comercializada pela deep web), resolvi estudar com cuidado as opções que eu tinha. Escolhi o CryFS porque tocou na ferida e fez sangrar: eu ainda não tinha pensado na necessidade de ofuscar informações como a estrutura dos diretórios e tamanho dos arquivos, eu só estava procurando uma opção que não se resumisse a um grande arquivo compactado devido as minhas limitações com internet.



O Cryfs divide os arquivos em pedaços pequenos (16 Kb por padrão), criptografa cada fragmento individualmente e o organiza numa estrutura de uma árvore com cada fragmento colocado numa pasta aleatória nomeada como um hexadecimal que vai de 000 a fff. Obviamente isto não está livre de falhas, e a falta de uma auditoria é um realmente um problema, mas a ideia é realmente interessante.



Ao ler o trabalho acadêmico que deu origem a este projeto comecei a pensar em toda a loucura por criptografar discos e até memória RAM e ficou implícita uma falha básica de design em muitas das soluções: a praticidade de não se cobrar senha na inicialização colocando um arquivo binário de autenticação em lugares como o TPM (bem que podia ser tensão pré-menstrual mas é Trusted Platform Module). O fato é que segurança não depende só da criptografia, mas de impedir que se acesse informações e colocar o meio de acesso (senha, certificado de segurança, enfim, qualquer tipo de chave de acesso) na mesma máquina que vai ter os arquivos criptografados me parece muita ingenuidade.



Além do mais que sentido há em criptografar algo que ficará aberto o tempo inteiro durante o uso? se é para restringir o acesso de possíveis invasores, faz bem mais sentido ajustar o permissionamento dos arquivos. Um cenário como muitas vezes eu já vi sendo recomendado com as chaves sendo lidas durante a inicialização automaticamente só faz sentido em impedir que o disco seja conectado em outro computador, o que, convenhamos, não é a coisa mais comum de acontecer quando ocorre um risco real de ataque. Consegue ver o problema de design?



O outro problema, o que é em relação ao tráfego dos dados, é mais complicado para nós, pessoas comuns. Em programas ou serviços proprietários exigiriam engenharia reversa para ter noção de algo enquanto em softwares livres tudo é tão técnico que prejudica a compreensão, ainda mais quando estes detalhes não fazem parte da documentação e revelam a real necessidade de uma auditoria.



Um bom exemplo sobre isso é o do Chrome, ano passado ficou até bem conhecida a declaração que aproximadamente 70% dos bugs se originam em problemas ligados à administração da RAM. Quando a gente fala de segurança normalmente não falamos de bugs no sentido de algo quebrar, mas de ser deixado lixo na memória que pode ser vasculhado por outro programa, ou então de ter um meio de escalar permissões para ter acesso ao que não se deveria ter acesso porque não há verificações em algumas etapas das chamadas de funções para saber se a execução veio de um código em javascript, no exemplo do navegador.



Mais uma vez este é um problema de design, que passa tanto pelo design das linguagens quanto pelo design das aplicações, numa situação envolvendo criptografia, uma falha dessas poderia permitir até mesmo interceptar a mensagem antes de ser criptografada.


Para piorar há a dificuldade de rastrear onde há falhas no caso de programas feitos em linguagens como javascript devido até mesmo à cultura dos programadores que dependem, muito frequentemente, de bibliotecas para executar funções nativas da própria linguagem (é sério, existem muitas libs de apenas 1 linha de código útil) e frameworks robustas como o node usam milhares de bibliotecas inclusive muitas assim. Não é de se espantar que falhas em apenas 1 delas quebre milhões de sites e serviços pela internet de tempos em tempos. Não pretendo falar sobre isso da disponibilidade e tolerância a falhas, o assunto aqui é outro, é justamente falhas que não são percebidas assim porque não são sintáticas, são semânticas, o que exige uma revisão técnica para serem detectadas.



Este não é um problema simples que a falta de transparência torna impossível mensurar, afinal temos apenas discursos publicitários que dizem que devemos confiar usando muitas vezes casos de sucesso ou declarações de clientes que não tem como a gente verificar a veracidade. Ainda assim confiamos porque nos acostumamos a confiar cegamente enquanto esses assuntos técnicos são deliberadamente filtrados na divulgação afinal não devemos falar das limitações ou riscos e além do mais, ninguém vai entender coisas técnicas mesmo… Ou ainda: “e quem quer saber desses detalhes, só querem saber se funciona ou não”.



O que cabe à criptografia?



Criptografia não é a chave de tudo, é no máximo um componente em algo maior. O design voltado para segurança certamente passa pela criptografia em muitos casos mas parar aí não tem como ser o suficiente para se ter o mínimo de segurança ou privacidade.



Eu até diria que mais importante que criptografar dados é haver transparência sobre processos e políticas, saber em que contexto usar cada ferramenta me parece mais importante do que apenas criptgrafar tudo sem saber como a criptografia é feita e o que é ou não criptografado.



Mas o maior problema que vejo nos discursos pró-criptografia de forma mais generalista não é nem deixar de lado esses aspectos que considero fundamentais, é a estética cyberpunk e o discurso utópico enquanto se fala de um ambiente distópico. Ao mesmo tempo que se fala do direito à criptografia, normalmente se subentende um contexto inteiramente preto e branco, onde criptografia é bom e qualquer forma de controle é ruim. Isso se alinha perfeitamente a um discurso neoliberal que tem como sua bandeira o bitcoin, uma moeda não-dinheiro frequentemente usada em esquemas de evasão de divisas, pagamentos a grupos criminosos, esquemas de pirâmide e várias outras fraudes justamente por não ter nenhum controle ou regulação.



No final das contas o discurso raso sobre criptografia quer chegar exatamente nisso: todo controle e regulação é ruim e a liberdade só pode ser alcançada pela criptografia que aqui deixa de ter um sentido técnico como o que eu argumentei anteriormente e ganha um sentido amplo equivalente a anonimato. Se torna um discurso político só que travestido de discurso técnico, de “especialista”.



Eu gostaria de deixar claro que não sou contra o uso de criptografia em tudo, criptografia tem seu espaço de existência, tem sua necessidade, tem seu lugar de uso. Criptografia é algo realmente importante quando se tem um governo que mesmo num Estado legalmente democrático monitora opositores. A criptografia tem seu espaço mas não é a totalidade do espaço e ainda num contexto em que a privacidade e criptografia sejam fundamentais, o design da aplicação é fundamental (veja o caso do protonmail ou tutanota que armazenam os IPs apenas quando solicitados pela justiça porque toda empresa tem de obedecer as leis do país em que estão).



Anos atrás vi uma entrevista do Observatório da Imprensa com Bauman onde o Alberto Dines fala de algo muito sagaz: que toda utopia esconde uma distopia, e é exatamente isso que vejo nos discursos anti-regulação que tem essa bandeira da criptografia por trás, só que de forma mais sofisticada: atacando o problema real da vigilância para ganhar apoio em coisas que precisam de controle e vigilância, é aí onde entra o bitcoin e as outras criptomoedas, misturar os assuntos dessa forma, confundir conceitos é uma tática antiga do jogo político.



Não importa de qual lado você esteja, sempre vai ter conjuntos de versões que expressam visões de mundo, por isso comparo esse posicionamento ao de Kant que falei lá no início, ele fazia parte da nobreza e vivia num determinado contexto e com determinada visão de mundo, ele expressava isso em seus livros e para quem nunca viveu no estrito círculo que ele vivia, havia a possibilidade de nada do que ele disse fazer sentido, ser algo inteiramente desconectado da realidade e até do bom senso. Da mesma forma vejo os discursos muitas vezes com estética cyberpunk/hacker falar de criptomoedas e criptografia em tudo, politicamente são muito próximos do estreito círculo dos ancaps, não falo que todos são, mas que é bem próximo, isso é um fato.


Em vez de mais uma vez cair no lugar-comum de confiar tudo à tecnologia como se uma só técnica fosse a milagrosa resposta para todos os nossos problemas, se os problemas são os governos, deveríamos focar em agir politicamente, se é preciso se proteger enquanto não chegamos no ideal, aí sim pensamos em design voltado para segurança e forte criptografia, mas criptografia por si não é objetivo, é apenas ferramenta que pode ou não ajudar a chegar a algum lugar que nos beneficie.