artigos

Sorteio do STF, números aleatórios e uma pitadinha de cebola

#algoritmo #blogpost #criptografia

Por Lucas Teixeira

Com o sorteio de Edson Fachin para ocupar a relatoria da Operação Lava-Jato no Supremo Tribunal Federal, os olhos da mídia e da população se voltaram para o software de escolha aleatória que decide quem dentre o grupo de ministros(as) vai pegar esta função dentro do processo, muitas vezes crucial para o resultado final dos julgamentos uma vez que cada um(a) deles(as) têm históricos de decisões e relacionamentos políticos que permitem entender melhor como procedimentos internos serão conduzidos e influenciados.

Teori Zavascki, o relator anterior, morreu em um trágico acidente de avião, até agora inexplicado; as condições políticas instáveis (para dizer o mínimo) do Brasil somadas à recusa da equipe de TI em fornecer o código-fonte do sistema colocam a integridade desse software em questão. Como indagou o título da matéria do JOTA, a distribuição dos processos no STF é realmente aleatória?

Neste artigo vamos ver o que há por trás e em torno de algoritmos de escolha e entender de que maneira o STF poderia aumentar a confiança em seu sistema (SPOILER: vou sugerir o uso do Tor!). Mas antes precisamos de um breve passeio pela história, mitologia, computação, física quântica e matemática. Mas não se assuste! #VaiTerFiguras #NãoVaiTerEquação

(se preferir, pule direto para as recomendações)

MIREM-SE NO EXEMPLO DAQUELES SORTEIOS DE ATENAS

Foto da coleção da American School of Classical Studies.

Nasceu na Grécia Antiga o que se considera a primeira ~máquina~ de sortear: o kleroterion. Reflexo de uma população muito preocupada com a corrupção institucional, esta máquina decidia de forma isenta quem iria ocupar vagas em júris populares e cargos públicos.

Dispositivos que poderiam muito bem fazer parte de um episódio dos Flinstones, os kleroteria eram grandes rochas com dezenas de ranhuras horizontais dispostas em grid onde cidadã(o)s atenienses que estivessem concorrendo às vagas do dia encaixavam tokens de identificação de acordo com algumas regras de disposição.

Um mecanismo com um tubo e uma manivela (que lembra globos de bingo em seu funcionamento, pelo que eu entendi) sorteava consecutivas bolinhas dentre um conjunto de várias pretas e algumas brancas (em função da quantidade de cargos a ser sorteada), e de acordo com a cor da bolinha sorteada uma determinada coluna era descartada ou escolhida para a função.

O pião tem força! Vai girando, vai girando, maoeeee

Desde então, foram inventados muitos outros dispositivos de sorteio. Roletas, dados, bolas oito e até jogar varetas para ler o I-Ching usam, também, um conjunto de possibilidades e uma fonte aleatória (random) de informação para fazer a escolha.

O SAGRADO ALEATÓRIO — O ACASO NA MITOLOGIA

Exu, Tyche e Shiva

Alguns povos antropomorfizaram o imprevisível em figuras míticas e divinas. No hinduísmo Shiva é “o transformador”; “criador, reprodutor e dissolvedor”. Na mitologia iorubá, o orixá Exu (Eshu, Esú) é geralmente visto como um Trickster um arquétipo de alguém que possui algum tipo de conhecimento ou poder secreto e através dele prega peças , quebra regras e age de maneira não-convencional (aqui no Brasil tanto o Saci e o Curupira se encaixam bem neste papel). Já Orunmilá é o orixá da adivinhação e do conhecimento; o sistema de oráculo africano Ifá (ou búzios) é visto como um porta-voz do orixá na Terra, e embora Exu tente constantemente subverter as previsões de Orunmilá, as traquinagens de Exu geralmente são males que vem para o bem e os dois são grandes amigos.

PRÊIX-TEI-CHIÓN! PRÊIX-TEI-CHIÓN!

Na própria mitologia greco romana, Tyche (Grécia) e Fortuna (Roma) eram deusas que governavam a sorte, o destino de cada cidade. As duas figuras, muito similares como quase todas do panteão greco romano, foram muito pintadas por artistas medievais, geralmente acompanhadas da Roda da Fortuna, um símbolo muito forte dos altos e baixos que o destino nos faz atravessar.

MARACATU (SUB)ATÔMICO — ALEATORIEDADE QUÂNTICA

Com o avanço da microeletrônica e dos computadores pessoais e a descoberta do papel vital que os números aleatórios têm na criptografia, refinaram-se as tecnologias para construir geradores de números aleatórios (random number generators, RNG) em hardwareusando diversas fontes externas como o som atmosférico de trovoadas, uma válvula Tiratron exposta a um campo magnético ou até mesmo a flutuação de lava lamps.

Patente US20080268935 — Dispositivo de jogo e método usando ao menos dois resultados de RNG

Todos esses fenômenos podem ser convertidos, com o tratamento adequado dos sinais captados, em ruídos aleatórios que são mapeados para os valores dentre os quais se quer escolher — seja números inteiros gigantes para uso na criptografia, um(a) dos(as) ministro(as) do STF ou uma carta de poker no videogame.

Um grupo de pesquisa na Universidade de Genebra chegou a inventar um software que usa a câmera de um celular Nokia N9 para gerar números aleatórios. Ela é poderosa o suficiente para detectar os fótons que vêm de um feixe de luz, e por se tratar de um processo quântico a variação da quantidade fótons emitidos de um momento a outro pode ser acumulada para gerar entropia.

Outro projeto se aproveita do fato de que o Raspberry Pi Zero, um computadorzinho do tamanho de um chaveiro, vem com um gerador de números aleatórios embutido e usa o pequeno aparelho como uma fonte de entropia plugável via USB.

CAOS ARTIFICIAL — PODE ISSO, ARNALDO?

Tradução da tirinha #1210 do xkcd — I’m So Random

Uma alternativa aos geradores de números aleatórios por hardware (que extraem sua entropia de fenômenos externos) são os chamados geradores de números pseudo-aleatórios (PRNG), algoritmos que usam um padrão caótico para gerar resultados que parecem imprevisíveis.

Algoritmo “bubble sort” para ordenar uma lista de elementos em ordem crescente — não tem entropia envolvida aqui (fonte)

Algoritmos são instruções ordenadas para serem executadas com um computador, a matéria-prima que a matemática fornece para cientistas de computação e programadores (as) manipularem dados.

Computadores, pela sua própria natureza, não são muito bons em fazer as coisas de forma desordenada, inovadora ou autônoma.

O que um algoritmo de geração de números aleatórios tenta fazer é, a partir de um pacote de informação inicial (a semente), amplificar a entropia presente nele através de instruções que manipulem esses dados através de ciclos e embaralhamentos sucessivos.

Como explicam Daniel Chada e Ivan A. Hartmann na matéria do JOTA linkada acima (grifo meu):

O programa começa com um valor inicial, chamado de “semente”, e segue um padrão a partir daí. Esse ponto de partida pode ser suficientemente complexo para tornar o padrão difícil de ser identificado. Ainda assim, como não é nada mais que um conjunto de regras se repetindo, o algoritmo irá gerar uma distribuição de processos que não é verdadeiramente aleatória. O resultado pode ser imprevisível olhando de fora, mas será sempre previsível do ponto de vista das instruções do programa. Conhecendo a semente, qualquer um poderia prever para qual ministro seria distribuído o próximo processo.

Algoritmo de um gerador de números pseudoaleatórios, usado por uma biblioteca de criptografia

Estes geradores são muito mais rápidos que os “verdadeiros”, mas como computadores são seres radicalmente metódicos por si sós, saber o valor da semente (a nossa condição inicial) permite a alguém que saiba o conjunto de regras de transformação derivar todos os valores gerados — no nosso caso, prever quem vai pegar uma relatoria.

Desacompanhados de alguma fonte de entropia para a semente, essa aleatoriedade “fake” pode ser útil para várias coisas — como simulações de processos naturais, geração de cenários em jogos de computador e machine learning — mas não para atividades críticas como criptografia e sorteios como os do STF. Daniel e Ivan continuam (grifos meus):

Quando a semente usada é suficientemente complexa, mesmo algoritmos pseudo-aleatórios são praticamente impossíveis de quebrar. Se for desse tipo, o algoritmo de distribuição aleatória de processos do Supremo estaria vulnerável apenas a entidades com poder computacional semi-infinito, como o Google ou a NSA. Mesmo assim, seria necessário descobrir a semente. Ou seja, uma renovação periódica dela resolveria o problema. O algoritmo poderia ser divulgado sem risco.

“O INIMIGO CONHECE O SISTEMA”

Divulgar o algoritmo de seleção parece muito perigoso, mas contra intuitivamente traria mais confiança no processo. Como dizia Claude Shannon, criptógrafo pioneiro e fundador do campo da Teoria da Informação (a entropia costuma ser medida em shannons), “o inimigo conhece o sistema”. Esse princípio é encontrado na segurança da informação em frases como “a segurança por obscuridade não funciona”: seu sistema secreto uma hora ou outra será descoberto, seja por vazamentos seja por engenharia reversa, e aí adeus segurança.

Outra preocupação muito pertinente é com a presença de vulnerabilidades no algoritmo. Conferir se os números fornecidos por um determinado gerador são de fato aleatórios é um trabalho difícil de análise estatística, pois o que olhando de perto parece estar completamente randomizado pode na verdade exibir padrões que talvez não permitam dar certeza do resultado, mas diminuem consideravelmente sua entropia — o que na prática compromete a segurança do sistema.

Às vezes, uma simples análise visual dos valores retornados permite enxergar esse problema, como na ilustração abaixo, que compara o gerador de números aleatórios do Random.org com o usado pelo PHP em um sistema Windows. No entanto, vulnerabilidades mais sutis que afetam a entropia do gerador podem passar batido por análises descuidadas.

Tanto podem que uma grande preocupação entre especialistas em criptografia na “Era pós-NSA” são vulnerabilidades como essas sendo inseridas de propósito para enfraquecer sistemas de escolha aleatória — um backdoor. De fato, o programa secreto da Agência de Segurança Nacional, BULLRUN, consistia em infiltrar agentes em comunidades acadêmicas e comitês técnicos para aprovar padrões de criptografia com vulnerabilidades conhecicdas pela agência (mas não pelo resto do mundo). O algoritmo Dual_EC_DRBG, que foi publicado pelo National Institute for Standards and Technology dos EUA (NIST) e adotado como um padrão seguro pela tradicional empresa de segurança americana RSA em sua principal biblioteca de segurança até o backdoor ser revelado (junto com um escuso pagamento de $10 milhões à empresa feito pela própria NSA) em matérias baseadas nos arquivos vazados por Edward Snowden.

Não há solução para este tipo de ameaça a não ser analisar com cuidado os algoritmos utilizados e acompanhar de perto as comunidades técnicas e acadêmicas da área de criptografia e análise estatística.

Quando o código é aberto, estas comunidades e equipes independentes de auditoria podem estudá-lo para garantir que não há vulnerabilidades (propositais ou não) e que, se por acaso uma for encontrada, a falha possa ser corrigida o mais rápido possível e o sistema se torne mais seguro para todo mundo.

Assim, as boas práticas adotadas pela indústria e apoiadas pela academia são tornar o algoritmo público e proteger somente aquilo que de fato interessa para a segurança do sistema: no caso do nosso gerador de números pseudo-aleatórios, a semente.

A CORRENTE COSTUMA QUEBRAR NO ELO MAIS FRACO

Ainda assim, o gerador de números aleatórios é só um dos elos da corrente que pode ser quebrado, e talvez não o mais fraco. Após gerar um resultado para a escolha de relatoria, o dispositivo deve necessariamente encaminhar essa resposta para fora da sala restrita onde ele se encontra.

Há pouquíssimas informações sobre como este sistema, gerido pela equipe de Tecnologia da Informação do STF, funciona mesmo a nível básico, mas de alguma forma (fios, ondas ou mesmo pessoas), esta informação sai lá de dentro e vai para o conhecimento do próprio STF e da população. Qualquer interferência nesse caminho — um(a) funcionário(a) mentindo, um banco de dados que possa ser sobrescrito, um canal de transmissão que possa ser grampeado — é uma vulnerabilidade em potencial.

Outro caminho para manipular a decisão do gerador sem ter que lidar com algoritmos e entropia é invadir o gerador (ou novamente, algum trecho do caminho entre o gerador e o banco de dados).

Mau isolamento do resto da rede, falta de atualização nos softwares dos servidores, infiltração de agentes e até mesmo um pouco de engenharia social podem terminar na instalação de um software espião que pode ser controlado à distância e manipular os resultados somente quando necessário, de forma silenciosa tanto para uma análise estatística dos resultados quanto para a forte segurança armada na porta do datacenter (estou sendo otimista aqui).

Se no mundo a situação com relação a vazamentos e invasões está cada vez pior, no Brasil isso é sentido de maneira ainda mais forte.

Há poucos dias, o banco de dados de resultados do Exame Nacional do Ensino Médio (ENEM) foi invadido e alterado por zoeiros. Para quem observa externamente, ser invadido parece algum ritual de batismo dos sites e sistemas do governo: uma busca rápida me trouxe, desde 2015, a invasão de sites dos governos de SCMGAM e RJ, das prefeituras de Rio e de Curitiba, do Ministério da Saúde e até mesmo o sistema central de administração, gestão e regulação da ANATEL.

Todos esses casos só foram noticiados porque quem invadiu decidiu fazer um “defacement”, trocar ou alterar as páginas do site para pregar uma peça ou fazer um protesto. É provável que o número de invasões que não são percebidas e concedem então acesso permanente a dados pessoais e estratégicos de governos e empresas seja drasticamente maior, vide a zona que é o comércio clandestino de dados pessoais no país.

Na Atenas da antiguidade, o kleroterion atendia três necessidades básicas para garantir que a escolha do dispositivo não poderia ser corrompida:

  1. o algoritmo de escolha (a grid de ranhuras e as regras de disposição dos tokens) era aberto e verificável;
  2. o gerador de entropia (o tubo misturador com as bolinhas e a manivela) era igualmente imprevisível para qualquer pessoa;
  3. seu resultado podia ser acompanhado direta e imediatamente por qualquer pessoa presente no sorteio.

De design relativamente simples (e resistente a choques e quedas!), o kleroterion foi tão efetivo que levou o escritor e jornalista de tecnologia Julian Dibbel a suspeitar que “a correspondência entre o funcionamento do kleroterion e o da democracia de Atenas em geral era mais que coincidência”, como diz em seu artigo de 1998 “Info Tech of Ancient Democracy”:

Baseado na intersecção elementar entre um grid ordenado (a matriz de ranhuras) e um fluxo randomizado (o tubo de bolinhas), o kleroterion pode quase ser lido como um diagrama abstrato dos próprios circuitos políticos de Atenas.

Como trazer estas mesmas garantias para o sorteio de funções do peso da relatoria da Operação Lava Jato, usando computadores em vezes de pedras e paus?

QUESTÕES IMPORTANTES PARA A EQUIPE DE TI DO STF

“confie em todas as pessoas, mas corte o baralho” — alex castro

O algoritmo de escolha de relatoria deveria ser publicado, pois isso permite que o código seja acessível para as comunidades técnicas e acadêmicas analisarem.

Mas o algoritmo em si provavelmente é muito simples — sortear um elemento dentro de um conjunto é o tipo de dever de casa que você teria nas primeiras aulas de programação:

Escolhendo um(a) ministro(a) dentre uma lista com três linhas de python

Vários outros detalhes são de suma importância para a segurança do sorteio e deveriam ser alvo de maior escrutínio:

  • fonte de entropia do algoritmo é vital. O sistema usa um gerador de números via hardware? Se ele usa um gerador de números pseudoaleatórios, qual é o algoritmo de escolhido e de onde é tirada a semente? Qual o modelo desse equipamento, e de que país é o fabricante? É possível fazer uma auditoria no hardware e análise estatística dos resultados de 1 milhão de testes simulados para procurar padrões?
  • Qual o fluxograma do caminho, entre computadores, cabos e conexões wi-fi, entre o equipamento que gera os números e os olhos de humanos que vão contar para todo o resto do mundo o resultado? Como é feita a segurança de cada um desses trechos por onde passa a nossa preciosa informação?
  • Mesmo dentro do aplicativo do STF; quais são os componentes do software que têm acesso (via memória RAM ou pelo disco, por exemplo) à interface do gerador de números aleatórios?
  • São realizadas auditorias internas nos registros (logs) dos servidores que, nesse fluxograma, transmitem ou têm acesso ao resultado e portanto podem adulterá-lo? É possível realizar auditorias independentes? Como é a rotina de atualizações de segurança do sistema operacional desses servidores?

Ao responder essas perguntas e se importar sobre essas potenciais vulnerabilidades, o STF estaria dando passos largos em direção à confiança de especialistas e da população na idoneidade do sorteio. No entanto, como dá para perceber, é um sistema grande e com muitos pontos de fragilidade a serem protegidos.

Será possível pensar em um esquema de sorteio que não derive sua segurança de uma única instituição, que possa ser independentemente verificado por qualquer pessoa, que seja à prova de corrupção e sabotagem?

EU ME ORGANIZANDO POSSO DESORGANIZAR

Vai parecer contraditório no começo, mas vou falar e continue aqui comigo que você vai entender: talvez uma das melhores maneiras de tornar o sorteio de ministros(as) do STF à prova de adivinhação e corrupção é usando a rede Tor!

The Onion Router — “O Roteador Cebola”

O “Roteador Cebola” é mais conhecido por seu navegador que permite usar a web de forma anônima, e quase sempre aparece na mídia pelo seu uso para venda de drogas, documentos falsificados e outros tipos de mercadorias clandestinas — por isso é muito estranho sugerir que o Supremo Tribunal Federal use essa rede para garantir a idoneidade de seus sorteios.

Mas assim como a “criptomoeda” bitcoin e as tecnologias blockchain são usada tanto por esses mesmos mercados clandestinos quanto por bancos e câmbios de pequeno grande porte e diversos outros setores do mercado, o conjunto de projetos de criptografia e anonimato online reunidos sob o guarda-chuva Tor Project serve a um propósito mais nobre do que o cometimento de crimes: a proteção da privacidade para assegurar a liberdade de expressão.

Mapa com a localização aproximada de todos os nós da rede Tor — tormap.void.grntro

Há alguns meses, a rede de roteamento que trafega dados na Internet de forma anônima com o trabalho conjunto de mais de 7.000 nós (computadores espalhados ao redor do mundo nos mais diversos ambientes e jurisdições) passou a gerar, uma vez por dia, 256 bits aleatórios para alimentar a entropia usada por esses nós.

O Tor foi desenhado para ser um sistema distribuído de voluntários(as) que não se conhecem e que consegue garantir certos aspectos de segurança (como o anonimato) mesmo que algumas (ou muitas) dessas pessoas tentem corrompê-las. Como parte desse processo são usados muitos (muitos mesmo!!!) números aleatórios, gerados de acordo com a configuração de cada nó.

O site torflow.uncharted.software mostra uma visualização do tráfego trocado entre os nós

Para funcionar de forma distribuída e confiável ao mesmo tempo, os nós da rede Tor se orientam através de um grande documento / banco de dados, o consensus, construído diariamente através de um intrincado processo de negociação entre as “autoridades de diretório” (um subgrupo de nós de maior confiança, responsável por articular partes mais sensíveis do rito).

Infográfico do consensus, somando todas as informações que servem de base para a coordenação entre todos os nós da rede Tor (a imagem é anterior à introdução do RNG). Por Jordan Wright.

O que a equipe do Projeto Tor fez foi embutir, dentro desse procedimento diário, um mecanismo distribuído para gerar números aleatórios. O objetivo do gerador é ser uma melhor fonte de entropia para os próprios nós da rede usarem em conjunto com as que já usam atualmente (somar duas fontes de entropia nunca vai fazer um resultado menos aleatório).

A segurança do esquema foi levado à exaustão em experimentações, como conta o blog do projeto ao relatar as atividades de um encontro intensivo de desenvolvimento do Tor:

Isso nos permitiu testar cenários que poderiam fazer o protocolo traver e falhar de maneiras imprevisíveis. Por exemplo, instruímos nossos nós do Tor de teste para abortar em momentos cruciais do protocolo, e voltar nas piores horas possíveis, somente para gerar estresse no sistema. Fizemos nossos nós usarem versões velhíssimas do Tor, se comportarem de forma caótica, desaparecerem para nunca mais voltar, etc. Isso nos ajudou a detectar vários bugs e casos extremos. Também confirmamos que nosso sistema pode sobreviver a falhas na rede que podem acontecer na Internet de verdade.

Os dois primeiros valores gerados coletivamente por nós da rede Tor (em um ambiente simulado de testes) durante o encontro de Montreal, em maio de 2016. O número 5 indica a quantidade de nós usados para o teste.

Voltamos aqui para a minha proposta ali do topo desta seção. É costume no Brasil fazer sorteios usando o resultado da Mega Sena ou do Jogo do Bicho — imprevisíveis pelo menos para a turma que organizou a rifa na firma. E se usássemos esse grande dado que a rede Tor lança diariamente como a fonte de entropia do nosso kleroterion moderno?

Talvez o cenário ideal para garantir sorteios isentos de forma verificável seria usar o valor sorteado pela rede Tor (cujos 256 bits de entropia serviriam para dezenas de escolhas de ministros(as) por dia) como fonte da semente ou diretamente usado pelo algoritmo de escolha, de conhecimento público e devidamente auditado.

Assim, tiraríamos o ônus do STF de ter que guardar um sistema tão vital em tempos em que invasões por motivo político estão tão em voga — e o passaríamos para um projeto que busca, com o trabalho de mentes brilhantes da academia e da área técnica, criar bases confiáveis para a democracia da era digital.

Parte dos membros pagos e voluntários do Projeto Tor, em um vídeo de agradecimento ao agregador social de notícias Reddit, que dividiu 10% de seu lucro em doações para projetos e organizações votados pelos(as) usuários(as). O Projeto Tor foi um deles, e recebeu US$ 82 mil. O vídeo foi gravado no centro cultural e colaborativo Las Naves, em Valencia, Espanha.

Lucas Teixeira desenvolve, administra sistemas, facilita oficinas (workshops) e conduz pesquisas nas áreas de monitoramento e privacidade online, proteção de dados pessoais e segurança digital. Atua na direção de tecnologia da Coding Rights e no conselho editorial do Boletim AntivigilânciaThey like turtles.

As faces e a logo do Tor Project estilizadas foram feitas com a ajuda da ferramenta ThreadTone.