# Polys

Polys é um sistema de votação online baseado na tecnologia blockchain e apoiado por algoritmos de criptografia transparentes. Consiste em uma aplicação web para criação e manutenção de votos em um aplicativo de eleições. O sistema Polys se propõe a oferecer maior facilidade aos usuários em processos de votação e ao mesmo tempo prover segurança, transparência e anonimato - recursos que são obtidos a partir da utilização da blockchain com o apoio de algoritmos criptográficos.

## O que é uma blockchain?

Uma blockchain pode ser definida como um banco de dados distribuído, compartilhado e continuamente alimentado. Os registros que estão contidos nessa estrutura de dados estão armazenados em todo computador que possuir uma cópia dessa blockchain. A descentralização oferecida por essa tecnologia faz com que os registros sejam públicos e facilmente verificáveis, o que contribui para a realização de auditoria e análise de dados da cadeia e para a segurança e consistência desses dados, já que como não se trata de uma aplicação centralizada, a violação de uma cópia da blockchain em uma máquina específica deveria se propagar para todas as cópias da blockchain que estão armazenadas em outras máquinas, o que é bastante complicado devido ao grande número de máquinas que armazenam as cópias da blockchain e aos algoritmos de criptografia associados.

## Características
### Segurança

A segurança da Polys é oferecida pela utilização da tecnologia blockchain em associação com alguns algoritmos criptográficos. Uma blockchain é uma base de dados controlada por todos os membros da rede e não somente por uma única entidade como acontece em um banco ou numa agência de governo, por exemplo. Por isso, para hackear uma blockchain seria necessário hackear todos os computadores da rede. Além disso, a informação contida numa blockchain é encriptada de forma que não pode ser modificada ou deletada sem deixar rastros. No cenário de eleições, a utilização desse tipo de tecnologia agrega uma grande variedade de benefícios relacionados à segurança e integridade dos votos, devido ao fato de que as informações registradas em uma blockchain criam um documento permanente e indelével que não pode ser adulterado, por exemplo, por funcionários corruptos ou pessoas mal intencionadas.

### Transparência e anonimato

São utilizados algoritmos matemáticos para encriptar resultados preliminares e para garantir o anonimato dos eleitores. Chaves de criptografia assimétrica são responsáveis por criptografar os votos de cada eleitor e decriptar somente na hora da contagem, preservando dessa forma o anonimato dos eleitores e o resultado final das eleições.

### Flexibilidade

Existem diversos tipos de eleições e diversas necessidades de acordo com cada tipo. Polys é uma aplicação flexível que pode ser facilmente personalizada para as necessidades particulares de cada situação. Elementos como features adicionais e autorização customizada podem ser adicionados dependendo de cada contexto de eleição. A interface intuitiva e simples da Polys favorece situações nas quais as eleições são personalizadas. De forma simples é possível que os usuários configurem características das eleições a serem criadas, o que agrega maior flexibilidade e comodidade tanto aos organizadores quanto aos eleitores das votações.

### Economia de recursos

Não é mais necessário imprimir cédulas de papel para as eleições. Além de ser um processo mais longo - envolve impressão distribuição e contagem das cédulas - produz uma grande quantidade de papel e demanda uma quantidade maior de recursos. Polys oferece a possibilidade de realizar todo o processo de votação em horas, poupando recursos como tempo e dinheiro. Além disso, votação online não requer a presença dos eleitores, o que torna o processo ainda mais fácil e cômodo.

### User-friendly

Não é necessário realizar treinamentos ou possuir alguma expertise em TI para criar uma eleição. Polys oferece um painel de organização intuitivo que guia o usuário para realizar cada passo da votação sem maiores problemas. Algumas características são cruciais para identificar um software que é user-friendly. Simplicidade e confiabilidade são algumas delas. A Polys apresenta uma interface simples e intuitiva, a qual não demanda que o usuário leia um manual de instruções ou algo semelhante para saber como fazer o que deseja. A interface também é bem organizada, o que facilita na localização de diferentes ferramentas e opções. Por fim, trata-se de uma plataforma altamente confiável, justamente por ser baseada na blockchain. Essa característica faz com que os usuários não tenham receio de ter dados particulares divulgados pela rede ou que suas senhas ou seus votos se tornem públicos.
O objetivo de um produto user-friendly é fornecer ao usuário uma boa experiência de uso. Isso a Polys consegue fazer com sucesso. É possível realizar grandes eleições com bastante comodidade, já que a interface simples da Polys oferece ao usuário a possibilidade de votar, em poucos cliques, e na comodidade da sua casa ou de onde quer que esteja, por meio da internet.

### Open-Source

Polys em breve se tornará open-source e terá seu código fonte publicado no GitHub para que outros desenvolvedores possam agregar mais valor à aplicação. Ao ter seu código fonte publicado no GitHub, se tornando desta forma, um software de código aberto, a Polys terá a contribuição de diversos desenvolvedores da comunidade do GitHub, fazendo com que novas ideias possam surgir para a aplicação, proporcionando uma aceleração nas melhorias oferecidas para a plataforma. Algumas das vantagens que códigos open-source, tais como o Linux, Apache HTTP Server e o Mozilla Firefox oferecem é o fato de incentivar a comunidade de desenvolvedores a contribuir com o desenvolvimento do código, sempre agregando com melhorias, resolução de bugs e sugestão de features para o software. Nesse sentido, os usuários da Polys serão tratados como codesenvolvedores da aplicação, já que eles terão acesso ao código fonte da aplicação e poderão sugerir adições ao software, bem como realizar correções de código, relatório de bugs, documentação, dentre tantas outras atividades. Dentre as vantagens de se tornar uma aplicação de código aberto, cinco se destacam, e são elas: maior confiabilidade do software, já que, como o código é aberto, pode-se verificar todas as features que os desenvolvedores afirmam que o software possua; maior interoperabilidade do software com outros sistemas, pois neste caso é possível realizar a verificação do código para descobrir como é possível realizar essa integração da melhor maneira; fontes de suporte muito mais extensas, já que, no caso de software de código aberto, o suporte não é oferecido por uma empresa proprietária, mas por toda uma comunidade de desenvolvedores que de alguma forma contribuíram para o desenvolvimento daquele programa, ou que querem ajudar resolvendo bugs e outros tipos de problema; a liberdade de personalização é possível graças à possibilidade de acessar o código fonte do programa, o que pode ser muito útil tendo em vista que várias situações podem requerer a personalização do software para maior adaptação ao contexto em que o mesmo será utilizado; redução do custo total de propriedade (TCO) pois os softwares de código aberto não precisam ter o custo com a licença, algo que é necessário para os códigos de aplicativos proprietários.

## Funcionamento

Em aplicações como Bitcoin, nas quais a blockchain é utilizada para troca de criptomoedas entre usuários, cada transação é referente ao envio/recebimento de moedas virtuais. No caso da Polys, onde assunto é relativo a votações online, cada transação envolve o envio/recebimento de um voto. Aqueles que possuem acesso ao processo de votação podem adicionar seus votos à blockchain. O registro de cada voto ficará gravado de forma segura e transparente na blockchain preservando sempre o anonimato de cada eleitor. A garantia do anonimato é oferecida pelos algoritmos de criptografia que são utilizados em conjunto com a tecnologia da blockchain.
Quando um usuário verificado se conecta ao sistema, o aplicativo cliente de votação (iOS, Android) gera um par de chaves - pública e privada - que garantirá a integridade e autenticidade de cada voto. Por meio do aplicativo cliente, cada usuário realiza o seu voto.
O aplicativo criptografa a cédula usando a chave pública gerada no estágio de inicialização do voto, assina a cédula com a chave do usuário e a envia para ser registrada na blockchain. Por meio da assinatura da cédula com a chave do usuário é possível verificar se a cédula foi entregue à blockchain sem nenhum tipo de adulteração e se a mesma foi salva com sucesso.
Ao receber uma cédula, o sistema de votação utiliza a chave privada para decriptar os votos recebidos. Após realizar o processo de decriptação, o sistema verifica se o candidato ao qual se refere aquele voto consta no rol de candidatos possíveis, bloqueando, desta forma, as tentativas de enviar cédulas que não contenham votos válidos. Tal avaliação é realizada no momento de contagem dos votos e caso uma cédula contenha o voto em um candidato inválido, tal voto é descartado.
A criptografia empregada no envio dos votos elimina a possibilidade de realização de algum tipo de influência de autoridades nos resultados dos votos com o intuito de fraudar as eleições. A criptografia dos votos só é removida ao final das eleições no momento da contagem, procedimento que é realizado de forma automática pelo sistema Polys.
A Polys também se responsabiliza por notificar os eleitores após os votos e realizar a contagem dos votos das eleições.

## Possíveis Aplicações
### Universidades

Universidades podem realizar dezenas de eleições e pesquisas diferentes anualmente. Processos como esses ocasionam a eleição de diversos representantes para conselhos estudantis, associações sindicatos, comunidades extracurriculares e órgãos de governo de universidades. Cada uma dessas eleições pode requerer grande quantidade de recursos, tanto humanos quanto materiais, para organizar todo o procedimento e manter a segurança necessária para sua realização. Nesses cenários o uso da Polys tornaria a realização de cada eleição universitária mais simples, rápida e com menor necessidade de recursos, já que as votações podem ser feitas pela internet e não necessitam que os eleitores estejam presentes e nem que precisem preencher cédulas de voto.

### Partidos Políticos

Partidos políticos necessitam realizar eleições por várias necessidades em diferentes níveis: eleições internas, eleições para órgãos legislativos ou até para órgãos autônomos locais. Independentemente da situação, tais eleições necessitam de um alto nível de transparência e de segurança. Com a Polys é possível satisfazer essas necessidades além de proporcionar maior conforto e facilidade em todo o procedimento de votação. Os integrantes dos partidos não precisam se reunir em um mesmo local para realizar as eleições, já que a plataforma possibilita a votação online. Além disso, não é necessário realizar a contagem dos votos ao final da votação e nem se preocupar com alguma possível fraude, já que o uso da blockchain impossibilita a modificação ou exclusão de algum registro sem que haja algum tipo de rastro.

### Cidades Inteligentes

As eleições urbanas são a principal forma de participação cidadã na vida social e política de uma cidade, bem como parte importante do sistema político e sua legitimidade. Duas são as principais formas de realização de eleições para cidades, estados e países ao redor do mundo: cédulas de papel e urnas eletrônicas. Com o surgimento de cidades inteligentes, onde procedimentos comuns e não automatizados são substituídos por soluções tecnológicas automatizadas, a nova maneira de se realizar eleições para governantes trazida pela Polys pode ser uma ótima sugestão de aprimoramento do procedimento de votação. A solução proposta pela Polys agrega um alto nível de transparência, segurança e participação cidadã às eleições de qualquer localidade. Tais requisitos são imprescindíveis para a realização justa de qualquer eleição. A tecnologia de blockchain em conjunto com os algoritmos de criptografia utilizados garantem a inviolabilidade dos votos bem como o anonimato de cada eleitor. Além disso, a Polys ainda agrega uma maior comodidade para os cidadãos eleitores, já que não é mais necessário ter que mover-se até uma seção de votação para poder votar. Isso pode ser feito em qualquer lugar, basta ter acesso a algum dispositivo conectado à internet.