Análise do Aplicativo Prévias PSDB 2021

Overview

Análise do Aplicativo Prévias PSDB 2021

Com a recente polêmica sobre o aplicativo usado nas Prévias do PSDB de 2021, fiquei curioso para saber como era o fluxo de registro e votação, a fim de inferir se o aplicativo seguia algumas das boas práticas para votações pela internet.

Para isso, baixei o aplicativo na Play Store e extraí o base.apk do meu celular. Não vou distribuir esse arquivo para não correr o risco de violar os direitos autorais de ninguém. Para verificar se você tem a mesma versão que eu, confira os hashes:

$ md5sum base.apk
c558a1b54505ae97dd4c6a6ebd428a56  base.apk
$ sha1sum base.apk
9ea63858973d58b9001ca5af4adb5f6315ecb93d  base.apk
$ sha256sum base.apk
25f2b4b3ed1bd356246b8eed21b43208a15cc205f04f30be6b038f12f5e7a456  base.apk

Para testar o fluxo de votação no seu próprio computador, copie o arquivo base.apk para o diretório client. Em seguida, execute make dentro do diretório client em um terminal, e make dentro do diretório server em outro. Por fim, acesse http://localhost:8080. Coloque seu navegador em modo de desenvolvimento mobile se quiser ver as telas da forma como ficariam formatadas em um celular.

Telas do aplicativo

Importante: Não sou detentor dos direitos autorais do layout das telas ou dos logotipos abaixo exibidos. Estes são de propriedade exclusiva do PSDB, reproduzidos aqui apenas para fins de estudo, crítica ou polêmica. Fotos do cachorro são de propriedade da Netflix, retiradas da obra Cowboy Bebop. Fotos do Darth Miau usadas com autorização.

Fluxo de registro do eleitor

  1. O eleitor insere o número do título de eleitor

  1. O aplicativo informa que se trata do primeiro acesso

  1. O eleitor preenche zona, UF e telefone celular

  1. O aplicativo pede para o eleitor enviar foto da frente e do verso do documento, além de uma foto segurando o documento

  1. Uma vez carregadas as fotos, é possível avançar e concluir o registro

Fluxo de votação

  1. O eleitor insere o número do título de eleitor

  1. O eleitor tira uma selfie

  1. O eleitor preenche um código recebido por SMS

  1. Aparece o menu principal

  1. O eleitor seleciona uma eleição

  1. O eleitor escolhe um candidato

  1. O eleitor confirma o candidato escolhido

  1. O eleitor tira novamente uma selfie

  1. O eleitor preenche novamente um código recebido por SMS

  1. Aparece um comprovante de voto

Análise e discussão

Importante: A análise abaixo é pautada exclusivamente no comportamento do cliente que foi observado interagindo com um servidor local mockado de minha própria autoria. Em momento algum tive acesso ao código fonte do servidor ou a respostas de requisições ao servidor real. É importante ressaltar que as críticas abaixo realizadas não implicam necessariamente na possibilidade de violar a votação ou de se passar por eleitores em larga escala.

Autenticação do eleitor

As seguintes informações são enviadas para o servidor e podem estar sendo usadas para autenticar o eleitor (é impossível afirmar com certeza quais estão sendo de fato usadas sem observar o comportamento do servidor):

  • UUID da instalação do aplicativo gerado usando Math.random().
  • Informações do dispositivo, contendo fabricante, sistema operacional, versão do SO.
  • Título de eleitor.
  • Selfie do eleitor.
  • Código recebido por SMS no celular do eleitor.

Podemos mencionar algumas limitações a respeito do uso dessas informações para autenticação:

  • A função Math.random() não é criptograficamente segura.
  • Informações do dispositivo podem ser inferidas se você souber qual o modelo de celular do eleitor ou convencê-lo a acessar determinado site.
  • O TSE costumava publicar (link quebrado) uma lista com o título de eleitor de todos os filiados de cada partido.
  • O servidor dispõe de poucas informações para treinar um algoritmo de reconhecimento facial, provavelmente só a selfie tirada com o documento ao realizar o registro na votação. Isso significa que o algoritmo ou é extremamente tolerante (deixa passar qualquer rosto minimamente parecido com o eleitor), ou extremamente rígido (não aceita nem uma selfie legítima do eleitor).

No entanto, o uso de múltiplo fator de autenticação é um ponto positivo da solução implementada.

Registro do voto

O servidor tem acesso ao voto às claras, em outras palavras, o servidor tem acesso a informações suficientes para inferir (dependendo do software ou hardware que estiver instalado nele) qual voto foi depositado pelo eleitor:

A chave de verificação que consta no comprovante de voto não tem correlação com o candidato escolhido pelo eleitor, logo não é possível ter certeza que o voto contabilizado realmente corresponde à escolha do eleitor.

Em resumo, trata-se de um sistema similar a um sistema de enquetes.

Conclusões

Diante das críticas apresentadas acima, recomenda-se ao PSDB substituir o aplicativo atualmente utilizado por uma plataforma consagrada, de código aberto e verificável fim-a-fim, como o Helios Voting, para realizar suas Prévias. No Brasil, há larga experiência no uso dessa plataforma em universidades como o IFSC, a UFSCar, a USP, a Unicamp, dentre diversas outras.

A verificabilidade fim-a-fim é considerada um requisito essencial para um sistema de votação online. Sistemas verificáveis fim-a-fim, como o Helios, fornecem um código de rastreamento que provê uma garantia criptográfica ao eleitor de que seu voto foi realmente contabilizado no resultado final.

Owner
Paulo Matias
Assistant Professor of Computer Science and Engineering at @ufscar. Obtained my PhD at @neurobiofisica. Ham radio operator PU2UID. CTF player for @epicleet.
Paulo Matias
Powerful virtual assistant in python

Virtual assistant in python Powerful virtual assistant in python Set up Step 1: download repo and unzip Step 2: pip install requirements.txt (if py au

Arkal 3 Jan 23, 2022
Explore related sequences in the OEIS

OEIS explorer This is a tool for exploring two different kinds of relationships between sequences in the OEIS: mentions (links) of other sequences on

Alex Hall 6 Mar 15, 2022
The purpose is to have a fairly simple python assignment that introduces the basic features and tools of python

This repository contains the code for the python introduction lab. The purpose is to have a fairly simple python assignment that introduces the basic

1 Jan 24, 2022
💉 🔍 VaxFinder - Backend The backend for the Vaccine Hunters Finder tool.

💉 🔍 VaxFinder - Backend The backend for the Vaccine Hunters Finder tool. Development Prerequisites Python 3.8 Poetry: A tool for dependency manageme

Vaccine Hunters Canada 32 Jan 19, 2022
A collection of examples of using cocotb for functional verification of VHDL designs with GHDL.

At the moment, this repo is in an early state and serves as a learning tool for me. So it contains a a lot of quirks and code which can be done much better by cocotb-professionals.

T. Meissner 7 Mar 10, 2022
tidevice can be used to communicate with iPhone device

h 该工具能够用于与iOS设备进行通信, 提供以下功能 截图 获取手机信息 ipa包的安装和卸载 根据bundleID 启动和停止应用 列出安装应用信息 模拟Xcode运行XCTest,常用的如启动WebDriverAgent测试

Alibaba 1.8k Dec 30, 2022
北大选课网2021年春季验证码识别

北大选课网验证码识别 2021 年春季学期 Powered by Elector Quartet (@Rabbit, @xmcp, @SpiritedAwayCN, @gzz) 数据集描述 最初的数据集为 5130 张人工标记的验证码,之后利用早期训练好的模型在选课网上进行自动验证 (自举),又收集

Rabbit 27 Sep 17, 2022
Clock in automatically in SCU.

auto_clock_in Clock in automatically in SCU. Features send logs to Telegram bot How to use? pip install -r requirements.txt () edit user_list, token_A

2 Dec 13, 2021
Traffic flow test platform, especially for reinforcement learning

Traffic Flow Test Platform Traffic flow test platform, especially for reinforcement learning, named TFTP. A traffic signal control framework that can

4 Nov 07, 2022
The repository is about 100+ python programming exercise problem discussed, explained, and solved in different ways

Break The Ice With Python A journey of 100+ simple yet interesting problems which are explained, solved, discussed in different pythonic ways Introduc

Abdullah Al Masud Tushar 2.2k Jan 04, 2023
A place where one-off ideas/partial projects can live comfortably

A place to post ideas, partial projects, or anything else that doesn't necessarily warrant its own repo, from my mind to the web.

Carson Scott 2 Feb 25, 2022
Cool Bioinformatics Scripts

Cool Bioinformatics Scripts qqplot You can use this script in two ways read tons of millions of P values from stdin # python zcat pval.txt.gz | qqplo

8 Oct 30, 2022
Safe temperature monitor for baby's room. Made for Raspberry Pi Pico.

Baby Safe Temperature Monitor This project is meant to build a temperature safety monitor for a baby or small child's room. Studies have shown the ris

Jeff Geerling 72 Oct 09, 2022
Hands-on machine learning workshop

emb-ntua-workshop This workshop discusses introductory concepts of machine learning and data mining following a hands-on approach using popular tools

ISSEL Soft Eng Team 12 Oct 30, 2022
Ahmed Hossam 12 Oct 17, 2022
APRS Track Direct is a collection of tools that can be used to run an APRS website

APRS Track Direct APRS Track Direct is a collection of tools that can be used to run an APRS website. You can use data from APRS-IS, CWOP-IS, OGN, HUB

Per Qvarforth 42 Dec 29, 2022
Integer sets where all subsets have unique sums

Evil Sums Generation of sets of numbers where all constituents are recoverable from a partial sum.

Charlotte 5 Sep 24, 2022
Astroquery is an astropy affiliated package that contains a collection of tools to access online Astronomical data.

Astroquery is an astropy affiliated package that contains a collection of tools to access online Astronomical data.

The Astropy Project 631 Jan 05, 2023
Project in which we modelise an Among Us problem using graph theories.

Python-AmongUsProblem Project in which we modelise an Among Us problem using graph theories. The rules are as following: Total of 100 players 10 playe

Gabriel Shenouda 1 Feb 09, 2022
Курс "Искусственный интеллект и машинное обучение"

Искусственный интеллект и машинное обучение О курсе Данный репозиторий содержит в себе сопроводительный учебный материал для курса "Искусственный инте

Dmitry Aladin 19 Dec 04, 2022