0 UNIVERSIDADE SÃO FRANCISCO Engenharia de Computação ALLAN NICOLAU DE CAMPOS ROMANATO JESSICA BORGES ROSENDO LUIZ CAIO FERREIRA SISTEMA CRIPTOGRAFADO DE VOTAÇÃO INTERATIVA PARA ANDROID Itatiba 2014 1 UNIVERSIDADE SÃO FRANCISCO Engenharia de Computação ALLAN NICOLAU DE CAMPOS ROMANATO – R.A. 002201201564 JESSICA BORGES ROSENDO – R.A. 002201000449 LUIZ CAIO FERREIRA – R.A. 002200900033 SISTEMA CRIPTOGRAFADO DE VOTAÇÃO INTERATIVA PARA ANDROID Monografia apresentada ao Curso de Engenharia de Computação da Universidade São Francisco, como exigência para conclusão do curso de graduação. Orientador: Prof. Esp. Felipe Cavalaro Itatiba 2014 2 AGRADECIMENTOS Agradeço aos meus pais, Mônica e Sergio, pelo apoio que sempre me deram desde a infância, me incentivando a estudar e ser alguém na vida. Cintia, minha companheira em todos os momentos, que teve toda a paciência comigo durante todos esses anos e por acreditar que eu conseguiria. A todo o corpo docente que contribuiu para minha formação profissional, especialmente, ao meu orientador Prof. Esp. Felipe Cavalaro pela paciência com a qual orientou este trabalho. Agradeço aos meus mestres que sempre me orientaram para que triunfasse sobre as dificuldades. Allan Nicolau de Campos Romanato Agradeço a Deus, primeiramente, que permitiu o meu acesso ao ensino superior, me concedendo saúde, força e sabedoria para superar todas as dificuldades. A Universidade São Francisco e a ONG Educafro, que em parceria, me ofereceram a oportunidade de realizar o curso. A todo o corpo docente que contribuiu para minha formação profissional, especialmente, ao meu orientador Prof. Esp. Felipe Cavalaro, pelo confiança, apoio e paciência com a qual orientou este trabalho. Aos meus pais Claudio e Marlene, que sempre me incentivaram em meus estudos e, sem medir esforços, me deram todo o suporte necessário para que eu pudesse chegar até esta etapa da minha vida. Às minhas irmãs Caroline e Camila, por alegrarem os meus dias e por acreditarem na minha capacidade de realizar qualquer coisa. 3 Aos meus parceiros neste trabalho Allan e Luiz Caio, pela amizade, companheirismo e, principalmente pela paciência diante dos contratempos. Aos colegas de classe, que direta ou indiretamente fizeram parte da minha formação, o meu muito obrigado. Jessica Borges Agradeço primeiramente à minha mãe, Marivelse Gorte, meu espelho, minha inspiração, que me deu não somente o incentivo inicial para essa jornada, mas também a enorme força de superação e convicção que utilizo diariamente pra superar esse e outros desafios impostos pela vida. Bianca Eweny, hoje minha esposa, minha eterna companheira, com quem compartilhei cada momento nesse período e que teve grande paciência e compreensão com a minha ausência em certos momentos. Agradeço também aos poucos, porém fieis amigos que cultivei nesse curto espaço de tempo e que espero poder manter para o resto da minha vida. Eles com certeza tornaram essa jornada mais estimulante e menos árdua. Luiz Felipe, Thiago Duarte, Paulo Cesar, Bruna Luz, João Vitor, Phelipe Conrado, Renan Rosa, Guilherme Araújo, Juliano Darlin e Mateus Cruz. E finalmente, expresso a minha gratidão aos ótimos professores com quem tive o prazer e a honra de me graduar nesta faculdade. Renato Camargo, Silvio Petroli, Fábio Andrijauskas, Milena Moretto, Andre Bakalereskis, entre outros, e em especial ao nosso prezado orientador Felipe Cavalaro. Luiz Caio Ferreira 4 “A mente que se abre a uma nova ideia jamais voltará ao seu tamanho original.” Albert Einstein 5 RESUMO Com o avanço tecnológico das últimas décadas, seu barateamento e alcance na sociedade atual, fica evidente que cada vez mais tarefas do nosso cotidiano que anteriormente eram executadas de forma manual ou verbal, passaram a ser realizadas de forma mais ágil e eficiente. O objetivo do presente trabalho é criar de um sistema criptografado de votação interativa para Android. Demonstrando a possibilidade de empregar esse conceito como ferramenta aos professores em sala de aula, melhorando o nível de comunicação e interatividade entre eles e seus alunos. Para o desenvolvimento do sistema proposto foi utilizada a linguagem de programação Java e Java EE para as aplicações, servidor e cliente, HTML5 e Android Studio para as interfaces com usuários e a DBMS escolhida foi a MySQL. Em conjunto, também será analisada a viabilidade da utilização da criptografia AES, recurso que promove a segurança das informações trocadas durante a comunicação entre os clientes e o servidor na rede. Ao final, evidenciamos através de testes elevando ao limite a quantidade de conexões simultâneas, simulando ataques de interceptação de dados e comparando o desempenho em função do tempo, demonstrando que o sistema de votação desenvolvido pode ser implantado com sucesso em uma rede local, desempenhando sua função com eficiência e segurança. Palavras-chaves: android. criptografia. interatividade. votação interativa. 6 ABSTRACT With technological advances in recent decades, its cheapness and scope in today's society, it is clear that more and more, our daily tasks that were previously performed manually or verbal, started to be realized in a faster way through the aid of these technologies. The aim of this study is to create an encrypted system of interactive voting for Android. With this, we can demonstrate how this concept can be used to aid teachers in the classroom, improving the level of communication and interaction between them and their students. To develop the system, we used the Java programming language and Java EE for applications, HTML5 and Android Studio for user interfaces and the chosen DBMS was MySQL. Together, will also be analyzed the viability of using the AES encryption, resource that promotes information security. Finally, evidenced by testing the amount increasing to a limit of simultaneous connections, simulating the information security attacks and the speed performance, the system can be deployed successfully and safely in a local network. Keywords: android: encryption. interactivity. interactive voting. 7 LISTA DE ILUSTRAÇÕES FIGURA 01 – Arquitetura do Android................................................................................. 20 FIGURA 02 – Comparando modelo OSI com modelo TCP/IP........................................... 21 FIGURA 03 – Cabeçalho do TCP...................................................................................... 23 FIGURA 04 – Estabelecimento de conexão TCP.............................................................. 24 FIGURA 05 – Comunicação de processos através de sockets......................................... 26 FIGURA 06 – Máquina virtual Java.................................................................................... 28 FIGURA 07 – Conexão com banco de dados através do JDBC........................................ 29 FIGURA 08 – Arquitetura de servlet.................................................................................. 31 FIGURA 09 – Estrutura do sistema.................................................................................... 33 FIGURA 10 – IDE Eclipse utilizada no desenvolvimento da aplicação “servidor web”.... 35 FIGURA 11 – IDE Android Studio utilizada no desenvolvimento da aplicação “cliente”.... 35 FIGURA 12 – Tabela de dados do sistema no MySQL..................................................... 36 FIGURA 13 – Fluxograma sistema.................................................................................... 37 FIGURA 14 – Estrutura das tabelas no banco de dados................................................... 40 FIGURA 15 – Pipeline de comunicação............................................................................. 42 FIGURA 16 – Tela de login da interface do servidor......................................................... 44 FIGURA 17 – Tela de perguntas e respostas.................................................................... 45 FIGURA 18 – Tela de resultados das respostas................................................................ 46 FIGURA 19 – Tela principal da interface do cliente........................................................... 47 FIGURA 20 – Tela de acesso ao servidor......................................................................... 48 FIGURA 21 – Tela de cadastro de clientes........................................................................ 49 FIGURA 22 – Tela de votação........................................................................................... 50 FIGURA 23 – Tela de aviso de tentativa de reincidência de votação................................ 51 8 FIGURA 24 – Tela de despedida e encerramento da votação....................................... 52 FIGURA 25 – Teste de tempo de conexão cliente-servidor sem criptografia.................... 53 FIGURA 26 – Teste de tempo de conexão cliente-servidor com criptografia.................... 54 FIGURA 27 – Demonstração do teste de conexão ao servidor......................................... 55 FIGURA 28 – Demonstração do limite de conexão atingido.............................................. 56 FIGURA 29 – Demonstração do tráfego antes e depois da criptografia............................ 57 FIGURA 30 – Demonstração do tráfego antes e depois da criptografia............................ 57 9 LISTA DE TABELAS TABELA 1 – Propriedade servidor do sistema de votação....................................... 34 TABELA 2 – Propriedade servidor de banco de dados............................................ 34 10 LISTA DE ABREVIATURAS E SIGLAS API – Application Programming Interface CSS3 – Cascading Style Sheets DBMS – Database Management System DVM – Dalvik Virtual Machine GPL – General Public License GSM – Global System for Mobile Communications HTML – HyperText Markup Language HTTP – HyperText Transfer Protocol IBM – International Business Machines Corporation IDC – International Data Corporation IP – Internet Protocol ISO – International Organization for Standardization JDBC – Java Database Connectivity JSON – JavaScript Object Notation JVM – Java Virtual Machine Kbps – Kilobits por segundo LAN – Local Area Network LED – Light Emitting Diode 11 LTS – Long Term Support OHA – Open Handset Alliance OSI – Open Systems Interconnection RMI – Remote Method Invocation RPC – Remote Procedure Call SMS – Short Message Service SSL – Secure Socket Layer TCP – Transmission Control Protocol TSE – Tribunal Superior Eleitoral UDP – User Datagram Protocol URL – Uniform Ressource Locator W3C – World Wide Web Consortium XHTML– Extensible Hypertext Markup Language XML – Extension Markup Language 12 SUMÁRIO 1. INTRODUÇÃO ................................................................................................................ 14 2. DESENVOLVIMENTO ..................................................................................................... 16 2.1. Fundamentação teórica .............................................................................................. 16 2.1.1. História do voto........................................................................................................ 16 2.1.2. Interatividade ........................................................................................................... 17 2.1.3. Sistema Operacional ............................................................................................... 18 2.1.3.1. Android .................................................................................................................. 18 2.1.3.1.1. Arquitetura.......................................................................................................... 19 2.1.4. Protocolos de comunicação de rede...................................................................... 20 2.1.4.1. Protocolo TCP (Transmition Control Protocol) ................................................... 22 2.1.5. Comunicação entre processos ............................................................................... 24 2.1.5.1. Comunicação cliente-servidor através de sockets............................................. 25 2.1.6. Java .......................................................................................................................... 27 2.1.6.1. Acesso a bancos de dados com JDBC ............................................................... 28 2.1.6.2. Servlets .................................................................................................................. 30 2.1.6.2.1. Arquitetura de servlets ...................................................................................... 31 2.1.6.7. Servidor Web Apache ........................................................................................... 32 3. METODOLOGIA .............................................................................................................. 33 3.1. Ferramentas ............................................................................................................. 33 3.1.1. Desenvolvendo as interfaces do usuário ............................................................... 36 3.1.2. Fluxo de funcionamento do sistema ...................................................................... 31 3.1.2.1. Ambiente ............................................................................................................... 31 3.1.2.2. Comunicações multiplas ...................................................................................... 31 3.1.2.3. Comunicação Cliente x Servidor ......................................................................... 31 13 3.1.2.4. Armazenamento de Respostas ............................................................................ 31 3.1.2.5. Servidor Java ........................................................................................................ 40 3.1.2.6. Cliente Android ..................................................................................................... 41 3.1.2.7. Pipeline .................................................................................................................. 42 3.1.2.8. Criptografia............................................................................................................ 42 4. RESULTADOS ................................................................................................................ 44 4.1. Interface Web “Servidor” .......................................................................................... 44 4.2. Inteface Android “Cliente” ......................................................................................... 46 4.3. Criptografia ................................................................................................................. 53 5. CONCLUSÃO .................................................................................................................. 58 REFERÊNCIAS BIBLIOGRÁFICAS .................................................................................... 59 14 1. INTRODUÇÃO Com o início da civilização as pessoas foram se juntando em pequenos grupos sociais, dando origem às aldeias, vilas e cidades, surgindo a necessidade da tomada de decisões em grupo para a resolução de um problema em comum. Tal fato culminou no formato de tomada de opinião conhecido hoje, podendo ser chamado de votação, quiz, enquete, entre outros. Geralmente o formato empregado é o seguinte: um tema é proposto e colocado em questão, disponibilizando para os participantes algumas alternativas a serem escolhidas. Entretanto, esse tipo de sistema nem sempre foi confiável, pois geralmente sofria algum tipo de fraude devido à fácil alteração e manipulação das respostas, já que esse método era realizado de forma manual através de cédulas de papel e urnas de madeira ou lona. Hoje, com o avanço da tecnologia pode-se facilmente criar um sistema de perguntas e respostas semelhante, porém de forma virtual onde seja possível evitar computacionalmente que as respostas sejam alteradas, obtendo um sistema onde o sigilo e sua totalização seja confiável e comprovado. Para que o sistema possa existir de forma funcional, onde seja possível coletar os votos de diversos indivíduos, é necessário que ele seja aplicado sobre uma rede virtual. Para isso pode-se utilizar um dos aparelhos mais utilizados para comunicação entre as pessoas de todo o planeta: o celular. Criado pela tecnologia recente, o celular contribuiu para reduzir a distância entre as pessoas, melhorando a forma e a velocidade da comunicação entre elas ao redor do planeta, gerando uma “rede”. Em se tratando de um aparelho mundialmente disseminado, entende-se que a criação de um sistema de perguntas e respostas que rode nessa plataforma tornaria o ato de tomada opinião muito mais prático e rápido, possibilitando sua aplicação em diversos ambientes. 15 Sendo assim, o presente trabalho objetiva implementar um sistema criptografado de votação interativa desenvolvido para plataforma Android, que possa ser aplicado em ambiente educativo para dinamizar a interação entre o professor e aluno. 16 2. DESENVOLVIMENTO 2.1. Fundamentação teórica 2.1.1. História do voto Com o advento da democracia que data do início do século 5 a.C. na cidade-Estado de Atenas, na Grécia, as decisões sobre os mais diversos temas sociais passaram a ser tomadas obtendo a opinião de todos os envolvidos através de uma votação não secreta, na qual o voto era declarado publicamente e em voz alta, algo muito constrangedor e perigoso para época (SOUSA, 2014). Segundo Sousa (2014), por volta do século 2 a.C., com o intuito de preservar o sigilo do voto e evitar constrangimento pra o eleitor, os romanos tiveram a ideia de utilizar cédulas onde o voto era gravado de forma manual através da escrita e depositado em uma urna que posteriormente seria aberta para apuração dos votos, também de forma manual. Essa técnica ainda é utilizada em diversas partes do mundo. No Brasil, a primeira votação data de 1532 e ocorreu na vila de São Vicente, convocada por seu donatário, Martim Afonso de Souza, que tinha a finalidade de escolher o Conselho administrativo da vila (SENA, 2014). Segundo informações do Tribunal Superior Eleitoral (TSE), os votos nessa época eram depositados em bolas de cera chamadas pelouros, depois surgiram urnas de madeira, as de ferro e as de lona. Entretanto, desde o início, a democracia sofre com a existência de fraudes quase que inevitáveis em toda extensão do processo de votação, desde o cadastramento do eleitor, votação e apuração dos votos. 17 Visando evitar possíveis manipulações, o sistema de votação brasileiro vem sofrendo diversas alterações principalmente durante a República. O último e mais importante passo para o aperfeiçoamento das votações foi a implantação, em 2000, de um sistema de votação informatizado através de urnas eletrônicas que tem como objetivo principal garantir o total sigilo para o eleitor, confiabilidade e agilidade na totalização dos votos, utilizando uma interface o mais interativa possível, de fácil aprendizagem e máxima acessibilidade. 2.1.2. Interatividade Lemos (2000), descreve a interatividade como uma nova maneira de relação dos seres humanos com as máquinas, já para Alex Primo (2007), a interatividade não tem significado, mas sim a interação entre os seres humanos, que podem ser mediadas por computadores. Segundo Marcos Silva (2014), a interatividade é um conceito de comunicação. Pode ser empregado para significar a comunicação entre interlocutores humanos, entre humanos e máquinas e entre usuário e serviço. O desenvolvimento de uma nova abordagem propõe a interatividade como ponto central e de grande importância em um novo sistema de votação. Esse mesmo conceito pode ser facilmente empregado e adaptado para outras áreas menos formais da sociedade, podendo ser aplicado em situações mais cotidianas, como por exemplo, em palestras e seminários, nas áreas empresarial e comercial, bem como na área educacional. O modelo de ensino tradicional vem sendo questionado há muito tempo. A uniformidade e unidirecionalidade do ensino enraizado com a figura do professor como emissor-ditador da mensagem e do aluno receptor não acompanha a velocidade das novas gerações que nasceram na era da tecnologia. Conhecidos como geração x e y, esses alunos são imersos em recursos tecnológicos que possibilitam fazer, justamente, o que não podem em sala de aula, ou seja, interagir com a informação que contribuirá em sua formação escolar, tornando-se cocriadores (Carlos Silva) e tomando para si, em certos momentos, o lugar do emissor. 18 Se analisarmos as gradações de interatividade propostas por Francis Kretz (1985 apud Santaella, 2004), um sistema de votação para Android se encaixa no nível mais alto de interatividade e criação, no qual o usuário tem a possibilidade de compor uma mensagem, no caso o seu voto, contribuindo para o produto ou resultado final. 2.1.3. Sistema Operacional Segundo Tanenbaum (2003a), Sistema Operacional é um programa responsável pelo controle dos recursos da máquina, processadores, memória principal, discos, interface de rede e outros dispositivos de entrada e saída, e por fornecer a base sobre as quais outros programas e aplicativos possam ser criados. O primeiro sistema operacional móvel criado foi o WebOS, lançado em 1996 desenvolvido pela Palm, adquirida posteriormente pela Hewlett-Parckard. Desde então surgiram diversos sistemas concorrentes brigando pelo domínio desse novo mercado, podendo ser citado entre eles o Symbian, IOS, Windows Mobile, MeeGo Brew mp, Blackberry. Entretanto o sistema que ocupa o topo no mercado mundial atualmente é o Android (COSTA; DUARTE FILHO, 2013) 2.1.3.1. Android É um sistema operacional mobile open source baseado em Linux, desenvolvido pela Open Handset Alliance (OHA), uma fundação sem fins lucrativos que inclui fabricantes de aparelhos eletrônicos, empresas de telefonia e desenvolvimento de software. Uma das vantagens do sistema é ter a plataforma livre e não ser preso a um hardware específico, possibilitando a qualquer fabricante ou desenvolvedor alterar o sistema e criar 19 aplicativos para o aparelho tendo acesso irrestrito ao hardware. A linguagem utilizada para o desenvolvimento é o Java (MORIMOTO, 2009). O Android proporciona ao usuário uma navegação intuitiva disponibilizando atalhos para os aplicativos e várias telas que podem ser alternadas, auxiliando na organização destes. É possível visualizar notificações e checar o estado de recursos apenas acessando uma aba superior que é expandida com o passar de dedos. Grande parte da estratégia em torno do Android é centrada no desenvolvimento de aplicativos por parte de outras empresas e programadores independentes. A Google entendeu que, assim como nos desktops, as plataformas de smartphones estão se consolidando e os aplicativos passaram a ser funções básicas do sistema e não o hardware (MORIMOTO, 2009). 2.1.3.1.1. Arquitetura O sistema operacional Android funciona como uma pilha de softwares. Como pode ser observado na figura 01, cada camada da pilha contêm vários programas que suportam algumas funções específicas do sistema operacional. A soma dessas pilhas forma o sistema como um todo (STRICKLAND, 2014). Na base da pilha está o Kernel, baseado em Linux na versão 2.6. Nessa parte ocorre o gerenciamento de memória, configurações de segurança, gerenciamento de energia e drivers de hardware. No próximo nível encontram-se as bibliotecas C/C++ do Android, que são conjuntos de instruções que auxiliam o dispositivo no tratamento de diferentes tipos de dados. Em conjunto, existem as bibliotecas do núcleo Java e a Máquina Virtual Dalvik (DVM). A máquina virtual é uma aplicação de software que simula um dispositivo independente, rodando seus próprios processos e, consequentemente, fornecendo robustez ao Android. Assim, nenhuma aplicação fica dependente da outra, não afetando o sistema como um todo caso alguma delas parem. A DVM, também auxilia no gerenciamento de memória. 20 Fonte: http://www.devmedia.com.br FIGURA 01 – Arquitetura do Android. A próxima camada chama-se framework de aplicação, onde estão os programas de gerenciamento de funções básicas como alocação de recursos, mudança entre processos e programas Os desenvolvedores tem acesso total ao framework, podendo desenvolver aplicações mais complexas. No topo da pilha existe a aplicação, camada onde é feita a interação com o usuário, como efetuar ligação, acesso ao navegador, aplicativos, lista de contatos, entre outros. 2.1.4. Protocolos de comunicação de rede Segundo Kurose e Ross (2006), para que dispositivos na rede possam estabelecer uma comunicação entre si, é necessário utilizar regras e convenções, conhecidas como protocolos, que controlam o formato e a ordem das informações trocadas por essas entidades durante o diálogo. 21 Entre os principais protocolos da Internet estão o IP (Internet Protocol), o TCP (Transmission Control Protocol) e o UDP (User Datagram Protocol), sendo os dois últimos importantes protocolos da camada de transporte do modelo de referência TCP/IP. Esse modelo é baseado no modelo OSI, uma arquitetura de rede de sete camadas criada pela ISO (International Organization for Standardization) para padronizar os protocolos existentes nessas camadas, possibilitando a comunicação de sistemas abertos (TANENBAUM, 2003b). O modelo TCP/IP, de acordo com Tanenbaum (2003b), apresenta apenas quatro camadas em sua arquitetura de rede, se comparado ao modelo OSI, como pode ser observado na figura 02. Fonte: TANENBAUM (2003b) FIGURA 02 – Comparando modelo OSI com modelo TCP/IP. A camada de aplicação define como os processos de uma aplicação, em sistemas finais diferentes, trocam mensagens entre si. Nessa camada encontram-se todos os protocolos de nível mais alto, como o TELNET, o FTP, o SMTP, o DNS, o HTTP, entre muitos outros. A camada de transporte tem como finalidade permitir que as entidades de origem e de destino, em uma interconexão, mantenham uma conversação. Como foi relatado, anteriormente, dois protocolos fim a fim são importantes aqui: TCP e UDP. A camada inter-redes permite que os hosts injetem pacotes em qualquer rede e garante que eles trafegarão até o destino. Esses pacotes podem chegar de forma desordenada daquela em que foram enviados, obrigando as camadas superiores a reorganizá-los, se necessário. 22 A camada de host/rede não é padronizada no TCP/IP, por isso, somente sabe-se que o host tem de se conectar a rede utilizando algum protocolo para que seja possível enviar pacotes IP. Redes TCP/IP, como observam Kurose e Ross (2006), oferecem dois tipos de serviços às aplicações de sistemas finais: serviço não orientado para conexão (UDP) e serviços orientados para conexão (TCP). Como a maioria das aplicações da Internet necessita de um serviço orientado a conexão, com entrega de dados confiável e em sequência, o presente trabalho focará em comunicação de sistemas com a utilização do protocolo TCP. 2.1.4.1. Protocolo TCP (Transmition Control Protocol) De acordo com Tanenbaum (2003b), o TCP é um protocolo orientado a conexões que tem como principal objetivo transportar bytes fim a fim em segurança, mesmo em uma interrede (Internet), se adaptando dinamicamente e buscando evitar problemas que possam ocorrer durante a transmissão das informações. Para solucionar alguns desses problemas esse protocolo provê serviços essenciais à comunicação entre dois computadores de uma rede, como transferência confiável, controle de fluxo e controle de congestionamentos de pacotes de dados. As entidades transmissoras e receptoras do TCP, de acordo com Tanenbaum (2003b), trocam dados na forma de segmentos, como pode ser observado na figura 03. Cada segmento tem um cabeçalho de formato fixo de 20 bytes e pode conter até 65.535 bytes de dados, quando for o caso. 23 Fonte: TANENBAUM (2003b) FIGURA 03 – Cabeçalho do TCP. O estabelecimento da conexão TCP normal entre dois computadores (cliente e servidor), conhecido como 3-Way Handshake, figura 04, é realizado em três etapas, afirma Kurose e Ross (2006): Primeiro, o TCP cliente envia um segmento SYN para o TCP servidor, encapsulando-o em um datagrama IP. O servidor extrai o segmento SYN do datagrama, aloca buffers e variáveis TCP à conexão e envia um segmento de aceitação SYNACK para o TCP cliente. Após receber o segmento SYNACK, o cliente também aloca buffers e variáveis à conexão. Então, o cliente envia outro segmento, reconhecendo o segmento de confirmação de conexão do servidor. 24 Fonte: TANENBAUM (2003b) FIGURA 04 – Estabelecimento de conexão TCP 2.1.5. Comunicação entre processos Os computadores modernos são capazes de executar vários programas ao mesmo tempo. Em sistemas multiprogramados, os softwares utilizam a comunicação entre seus processos para realizar diversas tarefas (TANENBAUM, 2003a). Essa comunicação deve ocorrer, preferencialmente, de maneira bem estruturada e sem interrupções, seja quando os processos estiverem rodando no mesmo sistema final, no qual a comunicação acontece através de recursos como o compartilhamento de uma memória comum, ou quando os processos estiverem em execução em diferentes sistemas finais, comunicandose através da troca de mensagens pela rede, utilizando mecanismos como sockets, RMI (Remote Method Invocation) ou RPC (Remote Procedure Call) (SILBERSCHATZ; GALVIN; GAGNE, 2000). Pela natureza da proposta, o presente trabalho dará ênfase à comunicação em rede através de sockets, descrevendo seus principais conceitos e características de implementação. 25 2.1.5.1. Comunicação cliente-servidor através de sockets A maioria das aplicações de rede consiste, essencialmente, em pares de processos comunicantes que enviam mensagens um para o outro. Todas as mensagens trocadas entre uma aplicação cliente-servidor são organizadas segundo um protocolo, isto é, um conjunto de regras que definem o formato do conteúdo da mensagem para que ela seja inteligível a ambas as partes envolvidas na troca de mensagens (SILBERSCHATZ; GALVIN; GAGNE, 2000). Segundo Kurose e Ross (2006), na Internet, por exemplo, o processo cliente de um browser troca mensagens com o processo de um servidor Web. Qualquer mensagem enviada deve passar por uma rede subjacente, na qual cada um dos processos envia e recebe mensagens através de uma interface de software (API) conhecida como socket. O socket é definido como uma extremidade de um canal de comunicação entre a camada de aplicação e a camada de transporte dentro de uma máquina. Essa interface é formada por um endereço IP concatenado com um número de porta do host. Quando um cliente com endereço IP 146.86.5.20 inicia um pedido de conexão a um servidor Web (que ouve na porta 80) de endereço 161.25.19.8, ele recebe um número de porta arbitrário maior que 1024. Todas as conexões devem ser exclusivas, por isso, se outro processo no mesmo host X, desejasse estabelecer outra conexão com o mesmo servidor Web, a ele seria atribuído um número de porta maior que 1024 e diferente de 1625. Isso garante que todas as conexões consistem em um único par de sockets. Na figura 05 podemos observar uma ilustração da aplicação de socket numa estrutura de comunicação. 26 Fonte: Adaptado de Kurose e Ross (2006). FIGURA 05 – Comunicação de processos através de sockets. Utilizando essa interface, o desenvolvedor pode controlar tudo o que existe em relação aos elementos inerentes à camada de aplicação, entretanto, tem-se um controle mínimo no que diz respeito à camada de transporte: o desenvolvedor, somente, pode decidir o protocolo de transporte a ser utilizado e, talvez, determinar alguns de alguns dos parâmetros dessa camada (KUROSE; ROSS, 2006). Cada protocolo de transporte escolhido determina o tipo de socket a ser utilizado. Neste contexto, vamos abordar apenas sockets TCP/IP, compreendendo essencialmente dois tipos: sockets de fluxo, que usam o protocolo TCP, e sockets de datagrama, que usam o protocolo UDP (User Datagram Protocol). Como a aplicação cliente-servidor desenvolvida será multiplataforma, isto é, o cliente será executado em um sistema operacional (no caso, Android), enquanto o servidor será executado em outro (no caso, Mac OSX), uma linguagem de programação será abordada no âmbito de implementação de sockets: Java. 27 2.1.6. Java O Java é uma linguagem de programação amplamente utilizada para escrever software de rede de computadores e aplicativos distribuídos cliente/servidor. Essa linguagem foi anunciada formalmente pela Sun Microsystems em Maio de 1995 e chamou a atenção da comunidade de negócios por causa do enorme interesse na Internet (DEITEL, 2005). Segundo Deitel (2005), o Java é utilizado para desenvolver aplicativos corporativos de grande porte, aprimorar a funcionalidade de servidores Web, fornecer aplicativos para dispositivos voltados para o consumo popular (como celulares) e para muitos outros propósitos. Para Jandl (2002), dentre as características do Java, algumas podem ser destacadas, tais como: É uma linguagem puramente orientada a objetos: tudo em Java são classes ou instâncias de uma classe, que oferecem mecanismos de abstração, encapsulamento e hereditariedade; Independente de plataforma: em um ambiente de desenvolvimento Java, os programas são compilados para uma forma intermediária de código destinada à JVM, que interpreta esse código para a plataforma no qual ele é executado; Sem ponteiros: o Java não permite manipulação direta de endereços de memória. A JVM possui um mecanismo automático de gerenciamento de memória, que recupera a memória alocada para objetos não mais referenciados pelo programa; Boa performance: existem várias JVM que dispõem de compiladores Just in Time (JIT), capazes de compilar o código intermediário (bytecodes) em código nativo durante a carga do programa, melhorando o desempenho dos programas Java; Segurança: o Java especifica diferentes níveis de acesso ao sistema de arquivos da máquina alvo para evitar qualquer operação indevida nesse sistema; Permite multithread: oferece recursos para o desenvolvimento de aplicações capazes de executar múltiplas rotinas concorrentemente, possibilitando sua sincronização. 28 Na figura 06 pode-se observar a estrutura de uma aplicação Java. Fonte: Adaptado de Silberschatz, Galvin e Gagne (2000). FIGURA 06 – Máquina virtual Java. Programas Java, de acordo com Silberschatz, Galvin e Gagne (2000), consistem em partes chamadas de classes, as quais incluem partes chamadas de métodos que realizam tarefas e retornam informações ao concluir. Muitas dessas classes são reunidas em pacotes que constituem a interface de programação de aplicativos (API), um conjunto de bibliotecas de classe Java. Essas bibliotecas fornecem um grande conjunto de classes predefinidas com métodos para realizar cálculos matemáticos, manipulação de String, operações de entrada/saída, operações de banco de dados, operações de rede, verificação de erros e muitas outras tarefas úteis (DEITEL, 2005). 2.1.6.1. Acesso a bancos de dados com JDBC Muitos sistemas precisam manter as informações com as quais trabalham, seja para permitir consultas futuras, geração de relatórios ou possíveis alterações. Para que esses dados 29 durem por muito tempo, esses sistemas geralmente os armazenam em um banco de dados, mantendo-os de forma organizada e prontos para consultas (CAELUM, 2014b). Para Deitel (2005), há muitas estratégias diferentes na organização de dados para facilitar o seu acesso e manipulação. Um sistema de gerenciamento de banco de dados (DBMS) fornece o mecanismo necessário para armazenar, organizar, recuperar e modificar dados para muitos usuários. Na comunicação com bancos de dados, os programas Java utilizam o JDBC, uma API baseada na linguagem SQL. O JDBC permite aos aplicativos Java conectar-se a um banco de dados em um DBMS particular e permite aos programadores manipular qualquer origem de dados baseados em tabelas (DEITEL, 2005). Para evitar que uma API diferente seja implementada para cada banco, o Java oferece um conjunto único de interfaces muito bem definidas que ficam dentro do pacote java.sql. Entre essas interfaces, existe a interface Connection que gerencia a conexão entre o programa Java e o banco de dados, além de definir métodos para executar instruções SQL (como select, insert, update e delete), entre outros (CAELUM, 2014b). De acordo com Deitel (2005), o programa inicializa a conexão com o resultado de uma chamada para o método getConnection da classe DriverManager (pacote java.sql), que tenta conectar-se ao banco especificado por sua URL, a qual especifica o protocolo de comunicação (jdbc), o subprotocolo de comunicação (mysql) e a localização do banco de dados (//localhost/teste), como mostra a figura abaixo. Fonte: Caelum (2014b). FIGURA 07 – Conexão com banco de dados através do JDBC. 30 Esses e outros conjuntos de classes concretas serão responsáveis por fazer a ponte entre o código cliente que usa a API JDBC e o banco de dados. São essas classes que sabem se comunicar através do protocolo proprietário do banco de dados. Esse conjunto de classes recebe o nome de driver, figura 07. Todos os principais bancos de dados do mercado possuem drivers JDBC para serem utilizados com Java (CAELUM, 2014b). 2.1.6.2. Servlets Quando a Web surgiu, seu objetivo era a troca de conteúdos através, principalmente, de páginas estáticas HTML. Mas logo se percebeu que a Web tinha um enorme potencial de comunicação e interação além da exibição de simples conteúdos. Para atingir esse novo objetivo, porém, páginas estáticas não seriam suficientes, por isso, seria necessário servir páginas HTML geradas dinamicamente baseadas nas requisições dos usuários (TEMPLE et al., 2014). Na plataforma Java, a primeira e principal tecnologia capaz de gerar páginas dinâmicas são as servlets, definidas por classes e interfaces dos pacotes javax.servlet e javax.servlet.http. O nome “servlet” surgiu da ideia de um pequeno servidor (“servidorzinho”, em inglês) cujo objetivo é receber chamadas HTTP, processá-las e devolver uma resposta ao cliente (CAELUM, 2014b). Segundo Deitel (2005), os servlets são ferramentas eficientes para desenvolver soluções baseadas na Web que ajudam a fornecer acesso seguro a um site, interagir com bancos de dados em favor de um cliente, gerar dinamicamente documentos personalizados de XHTML a ser exibidos por navegadores e manter informações de sessão exclusivas de cada cliente. Essa ferramenta é comumente utilizada quando uma pequena parte do conteúdo enviado ao cliente é texto ou marcação, porém existem servlets que não produzem conteúdo, por isso, em uma solicitação de um cliente, invocam outros servlets para fornecer uma resposta (CAELUM, 2014b). 31 2.1.6.2.1. Arquitetura de servlets A World Wibe Web é baseada no protocolo HTTP, que utiliza URLs para localizar recursos na Internet. Um servlet estende a funcionalidade de um servidor, como um servidor Web que serve páginas da Internet para um navegador do usuário com o protocolo HTTP (TEMPLE et al., 2014). Na comunicação cliente-servidor, um cliente envia uma solicitação de HTTP ao servidor. O servidor que executa a servlet, conhecido como contêiner de servlets, recebe a solicitação e a direciona para ser processada pelo servlet apropriado. O servlet faz seu processamento, que pode incluir interagir com um banco de dados ou com outros servlets. O servlet retorna seus resultados ao cliente (HTML, XHTML, XML, imagens ou dados binários) como pode ser observado na figura 08, para exibir em um navegador (DEITEL, 2005). Fonte: Deitel (2005). FIGURA 08 – Arquitetura de servlet. 32 2.1.7. Servidor Web Apache O servidor mais popular é de longe o Apache, o qual estima-se que seja utilizado para hospedar 70% de todos os sites Web. O Apache é uma peça complexa de software e, com inúmeros aprimoramentos para os tipos de documentos que são oferecidos agora na Web, é importante que o servidor tenha alta capacidade de configuração e extensibilidade e que, ao mesmo tempo, em grande parte, seja independente de plataformas específicas. Em essência, tornar o servidor independente de plataforma significa ele oferecer seu próprio ambiente de execução básico que, na sequência, é implementado para diferentes sistemas operacionais. Esse ambiente de execução conhecido como Apache Portable Runtime (APR) é uma biblioteca que fornece interface independente de plataforma para manipulação de arquivos, trabalhos em rede, threads e assim por diante. Na ocasião de extensão do APACHE, a portabilidade é, em grande parte, garantida, contanto que sejam feitas apenas chamadas ao APR e evitados chamadas de bibliotecas especificas de plataforma (TANENBAUM, 2007). O Apache não somente é configurado para proporcionar flexibilidade, mas também é relativamente fácil estender sua funcionalidade. 33 3. METODOLOGIA Nesta seção, será apresentada a metodologia de desenvolvimento do trabalho, com a descrição da implementação do sistema desenvolvido, bem como as ferramentas e ambiente computacional utilizado. 3.1. Ferramentas O sistema de votação foi desenvolvido com base nos conceitos de sistemas distribuídos como pode ser notado na figura 09, logo abaixo. Foi utilizado um computador, no qual se encontra o sistema de gerenciamento de banco de dados (MySQL) e um outro computador contendo a IDE Eclipse, utilizada para desenvolver o servidor da aplicação, e a IDE Android Studio, utilizada para desenvolver a aplicação Android cliente da comunicação cliente-servidor. FIGURA 09 - Estrutura do sistema. Cada um dos computadores mencionados acima possuem características de hardware e software distintas, as quais são apresentados nas tabelas a seguir. 34 TABELA 1 – Servidor do sistema de votação. Item Descrição Processador Intel Core i5 Memória 16 GB RAM Hard Disk 500 GB Sata II Sistema Operacional Mac OSX Yosemite Placa de rede 10/100 Mbps TABELA 2 – Servidor de banco de dados. Item Descrição Processador Intel Core i7 Memória 08 GB RAM Hard Disk 1 TB Sata II Sistema Operacional Microsoft Windows 7 64 Placa de rede bits 10/100 Mbps O servidor de aplicação é responsável por disponibilizar na rede local (LAN) o acesso ao software de votação interativa para os clientes Android, fazer a comunicação com o banco de dados para armazenar os dados coletados após a votação, realizar apuração dos votos e disponibilizar os resultados e estatísticas. Os aplicativos servidor e cliente foram desenvolvidos utilizando a plataforma de programação Java através da IDE Eclipse, figura 10, porém, para o desenvolvimento da versão cliente será utilizado o Java EE com auxílio da IDE Android Studio, figura 11, pois serão utilizados como cliente um ou mais dispositivos móveis. 35 FIGURA 10 – IDE Eclipse utilizada no desenvolvimento da aplicação “servidor web”. FIGURA 11 – IDE Android Studio utilizada no desenvolvimento da aplicação “cliente”. 36 FIGURA 12 – Tabelas de dados do sistema no MySQL. 3.1.1. Desenvolvendo as interfaces do usuário Um item de suma importância para o devido funcionamento do projeto como um todo e que tem grande impacto diretamente na experiência do usuário durante sua utilização é a interface, parte visual na qual os usuários podem interagir tendo contato de fato com o sistema. Foram desenvolvidos dois tipos de interface com objetivos diferentes. O primeiro tipo foi a interface Web, utilizada no servidor para que o professor possa realizar o cadastro da pergunta e das alternativa que serão disponibilizadas na sessão de votação. O segundo tipo foi a interface Android, desenvoldida para ser utilizada no aplicativo Android, de onde os alunos terão acesso a sessão de votação criada pelo professor, visualizando a pergunta e suas alternativas. 37 Para ambos os casos o objetivo foi desenvolver uma interface de utilização simples, porém objetiva e intuitiva, aliada a uma lógica de programação que guie o usuário do início até o término da votação. 3.1.2. Fluxo de funcionamento do Sistema FIGURA 13 – Fluxograma do sistema. 38 3.1.2.1. Ambiente Por se tratar de um sistema amplo e distribuído, foram utilizados diversos ambientes para o seu desenvolvimento e aplicação. No ambiente de desenvolvimento foram escolhidos a IDE Eclipse para o desenvolvimento do aplicativo servidor. Para o aplicativo Android Cliente foi utilizado a IDE Android Studio e para o armazenamendo de dados foi implementado a DBMS MySQL com auxilio do JDBC de acesso Java. No ambiente de aplicação utilizamos para o Servidor o sistema operacional MAC OS, para o manter o banco de dados foi escolhido o Windows 7 e consequentemente para acesso dos clientes o Android OS. 3.1.2.2 . Conexões Múltiplas Devido a natureza da utilização do sistema desenvolvido, existe o problema de gerenciamento de conexões, pois os clientes tem acesso simultâneo ao servidor, enviando e recebendo dados. Como solução foi utilizada a estratégia de processamento por threads, possibilitando que cada cliente tenha uma conexão independente com o Servidor, que por sua vez pode processa-las paralelamente. Para o funcionamento ideal desse tipo de processamento foi também necessário aplicar semáforos para gerenciar produtores e consumidores, garantindo a exclusão mútua, já que enquanto um processo produz outro não poderá consumir. Para o trafégo dos pacotes foram utilizados sockets de rede, uma das melhores formas e mais comumente empregada para esse fim. Através de uma combinação de um endereço de IP e um número da porta, os sockets transportam e entregam pacotes de dados entre servidor/cliente para determinado processo ou thread de aplicação. 39 3.1.2.3. Comunicação Cliente x Servidor Quando se trata de comunicação de um sistema que exija confiabilidade de dados, uma das maiores preocupações geralmente é a garantia do envio e entrega das informações por uma rede. Justamente por esse motivo escolhemos o protocolo TCP, pois ele garante através de confirmação de recebimento que todos os pacotes enviados foram entregues, inclusive na mesma ordem de envio. Outra vantagem do protocolo é notada quando ocorre perda de pacote na rede, diagnosticada pelo alto tempo de espera por uma confirmação de recebimento do último pacote, nesse caso, após excedido o tempo limite de espera, imediatamente o pacote em questão é reenviado. Sobre o protocolo TCP utilizamos mensagens baseadas em chaves, utilizadas para criar um sincronismo entre as ações do Servidor e Cliente para disparar ações como efetuar cadastro do cliente, reconhecer cliente e enviar pergunta, entre outros. Com base nessas mensagens de sincronismo utilizada tornou-se praticamente indispensável a opção por programação orientada à comunicação (TCP) em vez de orientada à datagrama (UDP), apesar desta ser mais rápida. Ao contrário do protoloco TCP, no UDP não existem garantias de entrega de pacotes ou mesmo respeito à ordem de recebimento ou em relação à ordem de envio dos pacotes, fatos que acarretariam mau funcionamento ao sistema. 3.1.2.4. Armazenamento de Respostas Como mencionado anteriormente na sessão Acesso ao Banco de dados, para que fosse possível o acesso ao banco de dados MySQL pelo aplicativo Java no Servidor foi necessário a utilização do JDBC Driver for MySQL (Connector/J), um driver que recebe os comandos de acesso e faz a intermediação entre uma linguagem e outra. Após o servidor receber as informações de votação de um cliente e encerrar a sessão de votação para aquele cliente, os dados colhidos são armazenados conforme a estrutura demostrada na figura 14. 40 FIGURA 14 – Estrutura tabelas banco de dados. De posse dessas informações e após encerrar a sessão de votação, o servidor, por padrão, pode gerar o seguinte relatório: Alternativas x Respostas – Quantidade respectiva de votos que cada alternativa recebeu. 3.1.2.5. Servidor Java No servidor, através da interface com o usuário, no caso o professor, é possível cadastrar uma nova pergunta, escolher ou excluir uma pré-cadastrada. Depois de selecionada a pergunta e inicada a sessão o servidor de aplicação Java se responsabiliza pela abertura das conexões para os clientes. Assim que um cliente se conecta, uma nova conexão é criada para aguardar o possível próximo cliente. Após a conexão com o cliente ser fechada, o servidor gerencia a troca de requisições com esse cliente, tratando os dados recebidos e analisando quando deve efetuar um cadastro, montar a pergunta e enviar, receber dados de votação e armazenar ou finalizar a conexão. 41 3.1.2.6. Cliente Android O aplicativo Cliente Android é responsável pelas seguintes funções: Conectar ao servidor – A partir do apertar do botão “Iniciar” o cliente busca e encontra na rede uma sessão de votação aberta, caso encontre, a conexão é fechada com a porta aberta previamente pelo servidor. Identificação aparelho e aluno – Após ter a conexão estabelecida, o servidor requisita o MAC do aparelho que é enviado pelo cliente da seguinte forma: HELLO!;MAC, então, o servidor requisita os dados para o cadastro do cliente, é exibida para o cliente a tela de cadastro do aluno, onde o mesmo deverá inserir seu R.A e nome pressionando o botão “Cadastrar”, que são enviados pelo cliente no seguinte formato: MACcliente;nome;RA_aluno. Esse procedimento de cadastro e idendificação se dá para o caso de ser a primeira participação daquele aluno no sistema. Se o aluno tiver participado de alguma sessão anterior e possuir cadastro no sistema, no momento em que o servidor recebe o endereço MAC, ele é comparado com a base, identificado e caso ele ainda não tenha votado nessa sessão, é então ignoranda a tela de cadastro e redirecionando o cliente diretamente para pergunta ativa. Evitar Usuário Reincidente – Para evitar que exista mais de uma votação por aluno foi adicionada mensagens de checagem. No momento em que é identificado o cadastro pré existente do endereço MAC na base de dados, o servidor solicita ao cliente a identificação do usuário, GREAT;nome. De posse do nome o servidor faz uma comparação com os usuários que já votaram e caso não seja encontrado na lista o servidor retorna a seguinte mensagem para o cliente: Allan;Nvotou, enviando uma tela de boas vindas com a mensagem “Você ainda não votou, toque na tela para iniciar a sessão”. Após o toque o fluxo tem continuidade com o aplicativo cliente enviando uma mensagem solicitando a pergunta da sessão, ENVIA;PERG. 42 Caso o usuário seja encontrado na lista de já votantes, a seguinte mensagem é enviada: Allan;Votou, e uma tela de aviso é enviado para o cliente com a mensagem “ Você já participou, obrigado!” encerrando todos os processos, threads e fechando a conexão com o cliente. 3.1.2.7. Pipeline Trajeto de todo o fluxo de dados de um sistema, exemplificado pela figura 15. O tráfego de dados entre cliente e servidor se ocorre sobre uma rede Ethernet. Parte do caminho percorrido pelos dados nessa rede é efetuada através de um roteador Wireless, meio por onde os equipamentos clientes poderão se conectar à rede e por fim ao servidor. O protocolo utilizado para essa comunciação foi o TCP em conjunto com o protocolo IP, formando uma pilha de protocolos chamada de TCP/IP permitindo que diversos equipamentos possam se “enxergar” em uma rede e trocar dados de forma eficiente e organizada com recurso de confirmação de entrega de dados. FIGURA 15 – Pipeline de comunicação. 3.1.2.8 Criptografia Por se tratar de um sistema que envolve sigilo da informação trafegada, em nada adianta utilizarmos um formato de comunicação eficiente e organizada sem pensar na segurança durante essa troca de dados. 43 Existem diversas formas de ataque a uma rede, como a interceptação de pacotes trafegados com o intuito de conhecer a informações ou modificar e reinserir informações falsas nesse tráfego. Como prevenção a esses ou outros tipos de ataques, foi implementado um algoritmo de criptografia sobre os dados trocados. O algoritmo escolhido foi o AES, pois é amplamente utilizado atualmente devido a facilidade na sua utilização e robustez. Foi programado utilizando a cripitografia de base64, que utiliza para seus cálculos, letras, números e caracteres especiais tornando sua transferência pela rede mais fácil, trazendo boa relação custo x benefício para o conjunto total do sistema. Com sua aplicação torna-se praticamente inviável ataques para decifrar os pacotes transmitidos, porém eleva-se um pouco o tempo de comunicação devido aos completos cálculos matemáticos envolvidos. Comparação de tempo – Dados criptografados x Dados não criptografados Para efeito de teste resolvemos realizar a comparação entre as médias dos tempos utilizados pelo sistema sem criptografia em relação ao sistema com a criptografia ativa sobre a comunicação. O período do tempo considerado foi tomado a partir do início da conexão do cliente ao servidor até o seu encerramento com a votação finalizada. 44 4. RESULTADOS 4.1. Interface Web “Servidor” Para o desenvolvimento da interface Web foi escolhida a linguagem HTML5 por se tratar de uma linguagem recentemente homologada pela W3C e capaz de suportar as mídias atuais. Ela dispõe de mais poder de criação, pois traz uma nova abordagem incorporando as linguagems CSS3 responsável somente pelo estilo visual ou formatação da página e o JavaScript, reservado para implementação de funções envolvendo interatividade. O HTML5 agrupando essas tecnologias pode se dedicar apenas a semântica, onde os navegadores e mecanismos de busca conseguem enxergar um significado para cada tag declarada ou trecho do código. Tela de Login É a tela inicial vista pelo professor onde o mesmo irá inserir um nome e senha, que por hora não serão gerenciados pelo servidor, figura 16. FIGURA 16 – Tela de login da interface do servidor. 45 Tela de Inserção de Pergunta Após o logon o professor é direcionado para tela de inserção de pergunta, figura 17, onde poderá ser cadastrado apenas uma pergunta por sessão. Insere-se a pergunta no campo respectivo e as alternativas logo abaixo. Ao clicar no botão Cadastrar, a pergunta é inserida no banco de dados. FIGURA 17 – Tela de perguntas e respostas. 46 Tela de Exibição de Resultados Para a tela de resultados, logo abaixo, foi pensado um gráfico onde é mostrada a quantidade de votos direcionados a cada alternativa. FIGURA 18 – Tela de resultados das respostas. 4.2. Inteface Android “Cliente” Uma boa aplicação é aquela que possui uma interface amigável para o usuário. Para a interface gráfica do cliente foi utilizado o Android Studio 0.8.6 Beta e a linguagem XML. 47 Tela Principal A primeira tela do aplicativo Android apresenta o botão “Iniciar” onde o cliente, caso exista uma sessão de votação aberta, será direcionado para tela de votação. Está disponível logo abaixo o botão “Sobre”, onde estarão dispostas informações sobre o trabalho e grupo responsável. E por último o botão “Sair”, que somente finaliza o aplicativo. FIGURA 19 – Tela principal da interface do cliente. 48 Tela de acesso ao servidor Nessa tela abaixo deve ser inserido o endereço de IP atual do servidor, garantindo assim a sua localização. FIGURA 20 – Tela de acesso ao servidor. 49 Tela de Cadastro Caso seja detectado que o cliente não possui cadastro na base de dados, será exibida a tela da figura 21, onde estarão disponíveis os campos Nome e R.A, que serão registrado após pressionar o botão “Cadastrar”. FIGURA 21 – Tela de cadastro de clientes. 50 Tela Votação Na tela de votação estará disponível abaixo da mensagem de boas vindas a pergunta cadastrada anteriormente pelo professor e suas cinco alternativas, podendo ser escolhida apenas uma entre elas. O cliente pode registrar sua escolha atraves do botão “Confirmar”, figura 22. FIGURA 22 – Tela de votação. 51 Tela de aviso Caso o usuario tente votar novamente na mesma pergunta, essa tela o impede de participar, lançando-lhe uma mensagem de que sua participação já foi computada. FIGURA 23 – Tela de aviso de participação na votação. 52 Tela final Com a alternativa escolhida e registrada, é então exibida a tela de despedida e encerramento da sessão para esse cliente específico, figura 24. FIGURA 24 – Tela de despedida e encerramento da votação. 53 4.3. Criptografia Sobre a estrutura do servidor de aplicação e de banco de dados montada, com o auxilido de um software (autômato) programado para simular as requisições de clientes, foram realizadas duzentas vezes o ciclo completo de uma votação. O primeiro teste realizado foi a comparação entre as médias dos tempos utilizados pelo sistema sem criptografia e com a criptografia ativa durante a comunicação. O tempo da reação humana não foi considerado nesse teste. No teste sem a criptografia, foi obtido o valor do tempo médio de 251 ms. Figura 25. FIGURA 25 – Teste de tempo de conexão cliente-servidor sem criptografia. 54 No teste com a criptografia ativa, figura 26, pode-se notar que o tempo médio obtido teve um acréscimo de 206% em relação ao anterior, subindo para 769 ms. Esse aumento devese aos cálculos complexos exigidos pela criptografia. FIGURA 26 – Teste de tempo de conexão cliente-servidor com criptografia. Durante os testes foi possível notar uma barreira quanto à quantidade de conexões simultâneas ao banco de dados existente a partir da versão 5.1.15 desse DBMS. Esse limite é gerenciado pela variável max connections e tem o intuido de preservas um bom desempenho geral do sistema, mas pode ser alterada. Entretanto, o limite máximo que o MySQL poderá suportar dependerá da qualidade da biblioteca, sistema operacional, quantidade de RAM disponível, carga de trabalho para cada conexão e o tempo de resposta desejado. Nos testes realizados, a comunicação foi bem sucedida até a quantidade de cento e ciquenta conexões, figura 27. Acima desse número o servidor retorna uma mensagem de falha de timed out, pois não consegue criar novas conexões já que toda as disponíveis estao em uso por outros cliente, figura 28. 55 FIGURA 27 – Demonstração teste conexão servidor. 56 FIGURA 28 – Demonstração limite de conexões atingido. Outro teste realizado foi relacionado à segurança, onde foi simulado o ataque à rede do tipo man in the middle, quando um terceiro faz a interceptação dos dados trafegados. No primeiro momento sem criptografia, utilizamos com sucesso o software chamado Wireshark para capturar e exibir as informações contidas nos pacotes trafegados pela rede durante a sessão de votação. Após ativação da criptografia, como pode ser observado na figura 29 e 30, os dados ainda puderam ser interceptados, porém, tornaram-se ilegíveis, pois estavam cifrados. 57 FIGURA 29 – Demonstração antes e depois funcionamento criptografia. FIGURA 30 – Demonstração antes e depois funcionamento criptografia. 58 5. CONCLUSÃO A tecnologia é um item que passou a estar presente em nossas vidas, colaborando diretamente e indiretamente em nossas ações cotidianas. Trabalhando com o projeto em questão notamos que essa mudança é praticamente irreversível e tende a ser aplicada em inúmeras outras áreas e ocasiões, tanto profissinais quanto pessoais. Partindo da proposta inicial do trabalho, a criação de um sistema criptografado de votação interativa para Android, munido de um servidor local e aplicativo Android para votação que facilita a interação professor x aluno em sala de aula, concluimos que foi possível implementar com sucesso o sistema sob uma rede local. Com o sistema finalizado e sua estrutura montada, foi possível realizar simulações de votações abrangendo um ciclo de uma votação completa, desde sua primeira ação, que seria o cadastro da pergunta no servidor, até a exibição dos resultados e encerramento das conexões. É válido lembrar que os dados mantiveram-se criptografados durante todo o percurso. Paralelamente às simulações citadas acima, foi possível realizar testes onde foi atingido o limite aceitável de cento e cinquenta conexões simultâneas ao DBMS MySQL, e simular ataques de segurança da informação sobre os dados trafegados, do tipo man in the middle, através do software Wireshark, evidenciando a eficácia da criptografia empregada. Por último foi registrada a mediana dos tempos de execução de todas as sessões de votação, duzentas votações, obtendo o tempo de 769 ms. Resultado satisfatório, levando-se em conta que a criptografia mantinha-se ativa. Fica como aprendizado e melhoria para as próximas versões deste projeto a questão da escolha do protocolo de comunicação, pois notou-se que ao optar por HTTPS, haveria economia de tempo de programação em relação à criptografia, gerenciamento das threads e produtores e consumidores, já que tais fatores seriam mantidos nativamente pelo servidor através de objetos JSON e criptografia SSL. 59 REFERÊNCIAS BIBLIOGRÁFICAS CAELUM. FJ-11: Java e Orientação a Objetos. Disponível em: <https://www.caelum.com.br/apostila-java-orientacao-objetos/>. Acesso em: 13 out. 2014a. ________. FJ-21: Java para Desenvolvimento Web. Disponível em: <https://www.caelum.com.br/apostila-java-web/>. Acesso em: 13 out. 2014b. COSTA, N.P.O.; DUARTE FILHO, N.F. Análise e avaliação funcional de sistemas operacionais móveis: vantagens e desvantagens. Revista de Sistemas e Computação, Salvador, v. 3, n. 1, p. 66-77, jan/jun. 2013. DEITEL, Harvey M. Java: como programar, 6. ed. São Paulo: Pearson Prentice Hall, 1110 p., 2005. DEVMEDIA. Android, a nova plataforma móvel – Parte II. Disponível em: <http://www.devmedia.com.br/android-a-nova-plataforma-movel-parte-ii/8432>. Acessado em: 18 maio 2014. JANDL JUNIOR, Peter. Introdução ao Java. São Paulo: Berkeley Brasil, 518 p., 2002. LEMOS, André. Olhares sobre a cibercultura. Porto Alegre: Sulina, 231 p., 2003. MORIMOTO, Carlos E. Distribuições Linux – Definição de Distribuição Linux. Disponível em <http://www.guiadohardware.net/termos/distribuicao-linux>. Acessado em: 18 maio 2014. ______. Smartphone guia prático. Disponível em: <http://www.hardware.com.br/livros/smartphones/android.html>. Acessado em: 18 maio 2014. MYSQL Manual. Too many connections. Disponível em: < http://dev.mysql.com/doc/refman/5.1/en/too-many-connections.html>. Acessado em: 07 de dezembro de 2014. NORTON, Peter; GRIFFITH, Arthur. Guia Completo do Linux. São Paulo: Berkeley, 2000. 60 PASSARELLI, B.; JUNQUEIRA, A.H. Gerações Interativas Brasil: Crianças e adolescentes diante das telas. São Paulo: Escola do Futuro/USP, 2012. SENA, N.S. História do voto no Brasil. Disponível em: <http://www.webartigos.com/artigos/historia-do-voto-no-brasil/29371/>. Acessado em: 18 maio 2014. SALA DE AULA INTERATIVA. Interatividade requer a morte do sujeito narcisicamente investido do poder. Disponível em: <http://www.saladeaulainterativa.pro.br/entrevista_0 002.htm>. Acessado em: 16 maio 2014. SIERRA, Kathy; BATES, Bert. Use a cabeça Java. Rio de Janeiro: Alta Books, 496 p., 2005. SILBERSCHATZ, A.; GALVIN, P.; GAGNE, G. Sistemas Operacionais: conceitos e aplicações. Rio de Janeiro: Campus, 585 p., 2000. SILVA, M. Sala de aula interativa. Rio de Janeiro: Quartet, 2000. ________. Interatividade: uma mudança fundamental do esquema clássico da comunicação. Boletim Técnico do SENAC, Rio de Janeiro, v. 23, n. 3, p. 19-27, set/dez. 2000b. SOUSA, Raider. História das eleições. Disponível em: <http://www.historiadomundo.com.br/idade-moderna/historia-das-eleicoes.htm>. Acessado em: 4 jun. 2014. STRICKLAND, Jonathan. Arquitetura do Android. Disponível em: <http://tecnologia.hsw.uol.com.br/google-phone2.htm>. Acessado em: 18 maio 2014. TANENBAUM, Andrew S. Sistemas Operacionais Modernos, 2.ed. São Paulo: Prentice Hall, 695 p., 2003a. __________. Redes de computadores, 4.ed. Rio de Janeiro: Campus, 945 p., 2003. __________. Sistemas Distribuídos: princípios e paradigmas, 2.ed. São Paulo: Pearson Prentice Hall, 402 p., 2007. 61 TELECO. Estatísticas de celulares no Brasil. Disponível em: <http://www.teleco.com.br/ncel.asp>. Acessado em: 18 maio 2014. __________. MPLS I: Conceitos de Redes. Disponível em: <http://www.teleco.com.br/ncel.asp>. Acessado em: 18 maio 2014. TEMPLE, A.; MELLO, R. Fernandes de; CALEGARI, T.D.; SCHIEZARO, M. Programação Web com Jsp, Servlets e J2EE. Disponível em: <http://www.icmc.usp.br/pessoas/mello/livroj2ee.pdf>. Acessado em: 10 novembro 2014. WORLD WIDE WEB CONSORTIUM (W3C). W3C Recommendation 28 October 2014 Disponível em: <http://www.w3.org/TR/html5/>. Acessado em: 25 de novembro de 2014.