tsi desenvolvimento de aplicativo para criptografia e...

21
Simp.TCC/Sem.IC.2017(12); 2746-2766 2746 TSI DESENVOLVIMENTO DE APLICATIVO PARA CRIPTOGRAFIA E GERAÇÃO DE HASH DALMO JOSÉ DA SILVA BIASOTTO CID BENDAHAN COELHO CINTRA RESUMO O presente trabalho tem por objetivo documentar o desenvolvimento de aplicativo denominado Dcript, utilizado para funções de criptografia, geração e conferência de hash e descriptografia, cujo foco é a segurança de arquivos armazenados em meio digital. Esse aplicativo foi desenvolvido utilizando os conhecimentos adquiridos no curso de tecnólogo em Segurança da Informação, com base nas pesquisas bibliográficas sobre o tema. As funcionalidades disponibilizadas pelo Dcript estão de acordo com os atributos essenciais de segurança da informação: confidencialidade, integridade e disponibilidade. Paravras-chave: Aplicativo; criptografia; hash; arquivo; segurança da informação. ABSTRACT The purpose of this paper is to describe the development of an application called Dcript, which is used for encryption, hashing and hash- conferencing and decryption, which functions are focused on the security of files stored in a digital media. This application was developed using the knowledge acquired in the course of information security technologist, based on bibliographic research on the subject. The features provided by the Dcript are in conformity with the essential attributes of information security: confidentiality, integrity and availability. Key-words: application; encryption; hash; file; information security. INTRODUÇÃO Nos últimos anos, usuários comuns têm armazenado um grande volume de arquivos em seus computadores no formato digital, tais como fotografias, músicas, vídeos, documentos de texto, entre outros. Muitos desses arquivos possuem informações cujo conteúdo é considerado restrito pelo usuário, visto que contém informações confidenciais. A confidencialidade é um dos atributos essenciais de segurança da informação. Refere-se à garantia de que determinada informação somente estará disponível para pessoas autorizadas a acessá-la. Esse atributo deve ser incluído na lista de medidas adotadas pelo usuário para mitigar vulnerabilidades de suas informações contidas em arquivos. Complementam a lista de atributos essenciais: integridade – garantia de que o arquivo permanece íntegro; e disponibilidade – garantia de acesso por pessoas autorizadas, sempre que necessário. No entanto, questiona-se qual estratégia o usuário poderia implementar para proteger seus arquivos, utilizando a premissa dos mencionados atributos de segurança? Para responder a essa pergunta, este trabalho propõe implementar os atributos essenciais de segurança da informação e, com isso, ampliar a segurança de arquivos armazenados em meio digital. A proposta se baseia no desenvolvimento de aplicativo que calcula o hash e criptografa as informações contidas no arquivo, mediante senha. Dessa forma, o arquivo fica protegido – somente os indivíduos que possuírem a senha para descriptografar os dados terão acesso ao conteúdo. No momento da decifração, será solicitado o número do hash anterior, que será conferido com um novo hash, a fim de verificar possível quebra de integridade no período em que o arquivo esteve criptografado. Justificativa Aumentar a segurança da informação em meio digital, priorizando a confidencialidade, a integridade e a disponibilidade. Este trabalho apresenta o desenvolvimento de um aplicativo de criptografia e geração de hash como solução para mitigar vulnerabilidades relacionadas a arquivos pessoais armazenados no computador. Objetivos Objetivo geral Desenvolver um aplicativo que implemente a criptografia e geração de hash aos arquivos pessoais armazenados em meio digital. Objetivos Específicos Elaborar documento visão de negócio; Identificar os requisitos e casos de uso; Modelar o aplicativo em diagramas; Desenvolver algoritmo para criptografar, gerar hash, descriptografar e conferir hash de arquivos. Metodologia Este trabalho foi elaborado através do processo de pesquisa descritiva com abordagem quali-quantitativa e com utilização de métodos de pesquisa de campo. O embasamento teórico foi feito por intermédio de pesquisa bibliográfica de livros e artigos disponibilizados na web. A construção do aplicativo se deu pela visão de alto nível obtida no documento de visão e conforme os requisitos levantados. Este aplicativo foi escrito em linguagem Java, utilizando a API Netbeans, a partir dos diagramas da Linguagem de Modelagem Unificada – UML.

Upload: ledien

Post on 07-Nov-2018

229 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: TSI DESENVOLVIMENTO DE APLICATIVO PARA CRIPTOGRAFIA E ...nippromove.hospedagemdesites.ws/anais_simposio/arquivos_up/... · CRIPTOGRAFIA E GERAÇÃO DE HASH ... criptografia remete

Simp.TCC/Sem.IC.2017(12); 2746-2766 2746

TSI DESENVOLVIMENTO DE APLICATIVO PARA CRIPTOGRAFIA E GERAÇÃO DE HASH

DALMO JOSÉ DA SILVA BIASOTTO CID BENDAHAN COELHO CINTRA

RESUMO O presente trabalho tem por objetivo documentar o desenvolvimento de aplicativo denominado Dcript, utilizado para funções de criptografia, geração e conferência de hash e descriptografia, cujo foco é a segurança de arquivos armazenados em meio digital. Esse aplicativo foi desenvolvido utilizando os conhecimentos adquiridos no curso de tecnólogo em Segurança da Informação, com base nas pesquisas bibliográficas sobre o tema. As funcionalidades disponibilizadas pelo Dcript estão de acordo com os atributos essenciais de segurança da informação: confidencialidade, integridade e disponibilidade. Paravras-chave: Aplicativo; criptografia; hash; arquivo; segurança da informação. ABSTRACT The purpose of this paper is to describe the development of an application called Dcript, which is used for encryption, hashing and hash-conferencing and decryption, which functions are focused on the security of files stored in a digital media. This application was developed using the knowledge acquired in the course of information security technologist, based on bibliographic research on the subject. The features provided by the Dcript are in conformity with the essential attributes of information security: confidentiality, integrity and availability. Key-words: application; encryption; hash; file; information security. INTRODUÇÃO Nos últimos anos, usuários comuns têm armazenado um grande volume de arquivos em seus computadores no formato digital, tais como fotografias, músicas, vídeos, documentos de texto, entre outros. Muitos desses arquivos possuem informações cujo conteúdo é considerado restrito pelo usuário, visto que contém informações confidenciais. A confidencialidade é um dos atributos essenciais de segurança da informação. Refere-se à garantia de que determinada informação somente estará disponível para pessoas autorizadas a acessá-la. Esse atributo deve ser incluído na lista de medidas adotadas pelo usuário para mitigar vulnerabilidades de suas informações contidas em arquivos. Complementam a lista de atributos essenciais: integridade – garantia de que o arquivo permanece íntegro; e disponibilidade – garantia de acesso por pessoas autorizadas, sempre que necessário. No entanto, questiona-se qual estratégia o usuário poderia implementar para proteger seus arquivos, utilizando a premissa dos mencionados atributos de segurança? Para responder a essa pergunta, este trabalho propõe implementar os atributos essenciais de segurança da informação e, com isso, ampliar a segurança de arquivos armazenados em meio digital. A proposta se baseia no desenvolvimento de aplicativo que calcula o hash e criptografa as informações contidas no arquivo, mediante senha. Dessa forma, o arquivo fica protegido – somente os indivíduos que possuírem a senha para descriptografar os dados terão acesso ao conteúdo. No momento da decifração, será solicitado o número do hash anterior, que será conferido com um novo hash, a fim de verificar

possível quebra de integridade no período em que o arquivo esteve criptografado. Justificativa Aumentar a segurança da informação em meio digital, priorizando a confidencialidade, a integridade e a disponibilidade. Este trabalho apresenta o desenvolvimento de um aplicativo de criptografia e geração de hash como solução para mitigar vulnerabilidades relacionadas a arquivos pessoais armazenados no computador. Objetivos Objetivo geral Desenvolver um aplicativo que implemente a criptografia e geração de hash aos arquivos pessoais armazenados em meio digital. Objetivos Específicos • Elaborar documento visão de negócio; • Identificar os requisitos e casos de uso; • Modelar o aplicativo em diagramas; • Desenvolver algoritmo para criptografar, gerar hash, descriptografar e conferir hash de arquivos. Metodologia Este trabalho foi elaborado através do processo de pesquisa descritiva com abordagem quali-quantitativa e com utilização de métodos de pesquisa de campo. O embasamento teórico foi feito por intermédio de pesquisa bibliográfica de livros e artigos disponibilizados na web. A construção do aplicativo se deu pela visão de alto nível obtida no documento de visão e conforme os requisitos levantados. Este aplicativo foi escrito em linguagem Java, utilizando a API Netbeans, a partir dos diagramas da Linguagem de Modelagem Unificada – UML.

Page 2: TSI DESENVOLVIMENTO DE APLICATIVO PARA CRIPTOGRAFIA E ...nippromove.hospedagemdesites.ws/anais_simposio/arquivos_up/... · CRIPTOGRAFIA E GERAÇÃO DE HASH ... criptografia remete

Simp.TCC/Sem.IC.2017(12); 2746-2766 2747

REFERENCIAL TEÓRICO Informação A informação é um conjunto de dados que representa um ponto de vista; um dado processado é o que gera uma informação. Um dado não tem valor antes de ser processado. Desde o seu processamento, o dado passa a ser considerado informação – que pode gerar conhecimento. Portanto, pode-se entender que informação é o conhecimento produzido como resultado do processamento de dados (OLIVEIRA, 2013). Segundo a norma ABNT NBR ISO/IEC 27002 (2005, p.16): [...] a informação é um ativo que, como qualquer outro ativo é importante, é essencial para os negócios de uma organização, e deve ser adequadamente protegida. Isto é especialmente importante no ambiente de negócios, cada vez mais interconectado. Como um resultado deste incrível aumento desta interconectividade, a informação está agora exposta a um crescente número de ameaças e vulnerabilidades. [...] A informação é encarada, atualmente, como um dos recursos mais importantes de uma organização, contribuindo decisivamente para a uma maior ou menor competitividade. [...]. Segurança da informação Segurança da informação é a proteção da informação perante diversa gama de ameaças, visando garantir a continuidade do negócio, minimizar o risco e maximizar o retorno sobre os investimentos e as suas oportunidades. Ela é obtida pela aplicação de um conjunto de controles adequados, que incluem políticas, processos, procedimentos, estruturas organizacionais e funções de software e hardware. Esses controles precisam ser estabelecidos, implementados, monitorados, analisados e melhorados continuamente para garantir que os objetivos do negócio da organização sejam atendidos (ABNT NBR ISO/IEC 27002, 2005). A informação, por sua vez, é um ativo que demanda proteção e cuidado mediante regras e procedimentos das políticas de segurança, do mesmo modo que se protegem recursos financeiros e patrimoniais. De acordo com Campos (2007, p. 17): “um sistema de segurança da informação baseia-se em três princípios básicos: confidencialidade, integridade e disponibilidade”. Atributos de segurança Ao se falar em segurança da informação, devem-se considerar três princípios básicos: confidencialidade, integridade e disponibilidade. Toda ação capaz de comprometer qualquer um desses princípios, estará atentando contra a sua segurança. (OLIVEIRA, 2013). A confidencialidade é a garantia de que a informação é acessível exclusivamente por pessoas autorizadas. Conforme a norma ABNT NBR ISO/IEC 27002 (2005), caso a informação

seja acessada por pessoa não autorizada, intencionalmente ou não, ocorre a quebra da confidencialidade. A ruptura do sigilo pode acarretar danos inestimáveis a empresa ou pessoa física. Um exemplo simples seria o furto do número e da senha do cartão de crédito ou dos dados da conta corrente de cliente bancário. Nessa toada, a integridade é a garantia da exatidão e completeza da informação e dos métodos de processamento (ABNT NBR ISO/IEC 27002, 2005). “Garantir a integridade é permitir que a informação não seja modificada, alterada ou destruída sem autorização, que ela seja legítima e permaneça consistente”. (DANTAS, 2011, p11 apud OLIVEIRA, 2013). Quando a informação é alterada, falsificada ou furtada, ocorre a quebra da integridade. A integridade é garantida quando se mantém a informação no seu formato original (OLIVEIRA, 2013). Por fim, a disponibilidade é a garantia de que os usuários autorizados obtenham acesso à informação e aos ativos correspondentes sempre que necessário (ABNT NBR ISO/IEC 27002, 2005). Segundo Oliveira (2013), quando a informação está indisponível para o acesso, ou seja, quando os servidores estão inoperantes por conta de ataques e invasões, considera-se um incidente de segurança da informação por quebra de disponibilidade. Mesmo as interrupções involuntárias de sistemas, isto é, não intencionais, configuram quebra de disponibilidade. Criptografia A palavra criptografia é definida pelo dicionário Aurélio como “escrita secreta, em cifra, isto é, por meio de abreviaturas ou sinais convencionais”, significado este que remete ao grego cryptos que significa secreto, oculto. Em Weber (1995, apud Oliveira (2002, p. 19)), encontra-se o modelo de criptossistema assim descrito:

[...] dada uma mensagem e uma chave de codificação como entrada, o método de codificação produz como resultado uma mensagem codificada, a qual pode ser armazenada num meio qualquer ou enviada a um destinatário; para decodificar esta mensagem utiliza-se o método de decodificação passando como entradas a mensagem codificada e a chave de decodificação obtendo-se a mensagem original. Neste processo, denomina-se a mensagem original de texto claro e a mensagem codificada, resultante do processo de codificação, de texto codificado. Uma complementação ao conceito de criptografia remete a sua finalidade, como visto em Coltinho (2000, apud Oliveira (2002, p. 19)): "[...] a criptografia estuda os métodos para codificar uma mensagem de modo que só seu destinatário legítimo consiga interpretá-la, é a arte dos códigos secretos" e (Goldreich, 2001 apud Oliveira, 2002, p. 19):

Page 3: TSI DESENVOLVIMENTO DE APLICATIVO PARA CRIPTOGRAFIA E ...nippromove.hospedagemdesites.ws/anais_simposio/arquivos_up/... · CRIPTOGRAFIA E GERAÇÃO DE HASH ... criptografia remete

Simp.TCC/Sem.IC.2017(12); 2746-2766 2748

[...] a criptografia concerne a construção de esquemas que devem ser capazes de resistir a qualquer tipo de abuso, tais esquemas são construídos de modo a manter uma funcionalidade desejada, mesmo sob tentativas maliciosas com a intenção de fazê-los desviar de sua funcionalidade recomendada. Como visto acima, ao usar a criptografia para proteger informações, precisa-se ter em mente que indivíduos inabilitados ao acesso a tais informações registram as informações criptografadas e tentam decifrá-las a força. Para perceber a importância de tal afirmação, considera-se a opinião de Withfield Diffie, inventor da criptografia de chave pública: "[...] se seus

dados não estão sujeitos a este tipo de ataque, não é preciso criptografá-los[...]" (OLIVEIRA, 2002, p.19). Criptografia Simétrica É uma forma de criptossistema em que a criptografia e a decriptografia são realizadas usando a mesma chave. Também conhecida como criptografia convencional. Basicamente, este modelo de criptografia transforma um texto claro em texto cifrado (conforme figura 1), utilizando uma chave secreta e um algoritmo de criptografia. Empregando a mesma chave e um algoritmo de decriptografia, é possível reverter o texto cifrado para o texto claro (MACEDO, 2011).

Figura 1: Funcionamento criptografia simétrica.

Fonte: MACORATTI.NET

Algoritmo AES O Advanced Encryption Standard (AES), também chamado de Rijndael, é um algoritmo de cifragem de blocos adotada pelo Governo dos Estados Unidos desde 2001 e foi selecionado para se tornar um padrão em criptografia. Por se tratar de um algoritmo de criptografia simétrica, a mesma chave usada para criptografar, também é usada para decriptografar uma informação (DEVMEDIA). O Advanced Encryption Standard ou AES suporta criptografia de 128, 192 e 256 bits, que pode ser determinada pelo tamanho da chave. O tamanho da chave de criptografia de 128 bits é de 16 bytes, a chave de criptografia de 192 bits é de 24 bytes e o tamanho da chave de criptografia de 256 bits é de 32 bytes. A criptografia AES oferece um bom desempenho e um bom nível de segurança. Trata-se de uma cifra simétrica que usa a mesma chave para criptografia e descriptografia (CÓDIGO SIMPLES) Hash de Arquivos Conforme Cabral e Caprino (2015), a principal característica que difere a função de hash de uma criptografia é a operacionalização em via única, isto é, uma operação que através do resultado não consiga chegar ao conteúdo de origem. Quando se aplica a função hash em um arquivo de qualquer tamanho, o resultado será

dado em tamanho fixo, chamado DIGEST. A aplicação prática das funções hash é prover integridade nas comunicações e na criptografia, já que duas informações distintas não podem resultar no mesmo digest na saída da função hash. Algoritmo MD5 O Message-Digest algorithm 5 (MD5) é um algoritmo de hash de 128 bits unidirecional desenvolvido pela RSA Data Security Inc., descrito na RFC 1321, utilizado por softwares com protocolo ponto-a-ponto (P2P), verificação de integridade e logins. Foi desenvolvido para suceder ao MD4 que tinha alguns problemas de segurança. Por ser um algoritmo unidirecional, é praticamente impossível descobrir o texto em claro que lhe deu origem através do hash. O método de verificação é feito calculando o hash de um arquivo em dois momentos. Caso o segundo hash seja igual ao primeiro, significa que não houve adulteração do arquivo naquele espaço de tempo. O MD5 é de domínio público para uso em geral. A partir de uma mensagem de um tamanho qualquer, ele gera um valor hash de 128 bits; com este algoritmo, é computacionalmente impraticável descobrir duas mensagens que gerem o mesmo valor (colisão de hash), bem como reproduzir uma mensagem a partir do seu digest. O algoritmo MD5 é utilizado também como mecanismo de

Page 4: TSI DESENVOLVIMENTO DE APLICATIVO PARA CRIPTOGRAFIA E ...nippromove.hospedagemdesites.ws/anais_simposio/arquivos_up/... · CRIPTOGRAFIA E GERAÇÃO DE HASH ... criptografia remete

Simp.TCC/Sem.IC.2017(12); 2746-2766 2749

integridade em vários protocolos de padrão Internet (RFC1352, RFC1446, etc.), bem como pelo CERT e CIAC (DEVMEDIA). Linguagem Java Java é a linguagem de programação mais utilizada no mercado atual. Auxiliada pela presença do Java Runtime Environment (JRE), ou variações dele, em quase todos os dispositivos eletrônicos atuais. O sucesso da linguagem avultou-se com o Google Android, que escolheu o Java como linguagem preferencial de desenvolvimento de aplicações. O Java implementa os quatro pilares de forma bastante intuitiva, o que facilita o entendimento por parte do desenvolvedor: abstração; encapsulamento; herança e polimorfismo (DEVMEDIA, 2014). [...] Java é totalmente orientada a objetos, possui suporte para threads, ou seja, garante que seu programa rode vários processos ao mesmo tempo (multitarefa), possui tratamento de erros (exceptions), coletor de lixo (garbage collector). Possui também um conjunto de bibliotecas de classes (APIs) já prontas, que diminuem o trabalho do programador, é multiplataforma, enfim são estas, e várias outras características que a torna uma das linguagens mais utilizadas em todo mundo (SANTOS, 2010, p. 14). Orientação a objetos

De acordo com Gasparotto (2014), a programação orientada a objetos traz uma ideia muito interessante: a representação de cada elemento em termos de um objeto, ou classe. Esse tipo de representação procura aproximar o sistema que está sendo criado ao que é observado no mundo real: um objeto contém características e ações, assim como se vê na realidade (Figura 2). Esse tipo de representação traz algumas vantagens, tais como: • A reutilização de código – permitindo uma redução significativa no tempo de desenvolvimento, bem como o número de linhas de código. Isso é possível devido ao fato de que as linguagens de programação orientada a objetos trazem representações muito claras de cada um dos elementos. Isso permite que esse código seja reutilizado em outros sistemas no futuro. • Linguagem em alto nível – uma vez que a representação do sistema se aproxima muito do que se observa na vida real, o entendimento do sistema como um todo e de cada parte individualmente fica muito mais simples. Isso permite que a equipe de desenvolvimento não fique dependente de uma pessoa apenas, como acontecia com frequência em linguagens estruturadas como o C, por exemplo.

Figura 2: Comparativo entre POO e programação estruturada.

Fonte: DEVMEDIA

Classes Segundo Santos (2010), classes são definições, modelos para a construção de objetos (Figura 3). Uma classe é a estrutura (atributos) e o comportamento (métodos) que é comum a todos os seus objetos. Todo objeto é instancia de uma classe. Uma classe define as características de um grupo de objetos, isto é, define como serão as instâncias pertencentes a ela. Assim, uma classe especifica quais serão os atributos de todo o objeto que a ela pertencer, bem como quais serviços esse objeto

poderá executar. Um serviço também pode ser denominado de Operação. Quando pensamos em uma classe, estamos pensando em como serão os seus objetos. É importante que não se confunda classe com objeto. O objeto pode ser visualizado como o caso “concreto” (ocorrência), enquanto a classe pode ser visualizada como a “ideia” que se tem do objeto (BORATTI, 2007, p.35). Figura 3: Classe utilizada como modelo para construção de objetos

Page 5: TSI DESENVOLVIMENTO DE APLICATIVO PARA CRIPTOGRAFIA E ...nippromove.hospedagemdesites.ws/anais_simposio/arquivos_up/... · CRIPTOGRAFIA E GERAÇÃO DE HASH ... criptografia remete

Simp.TCC/Sem.IC.2017(12); 2746-2766 2750

Fonte: DEVMEDIA Objetos Objetos são coisas do mundo real representadas dentro do programa (Figura 4), que possuem estados (atributos) e comportamentos (métodos). Eles são criados a partir de classes e

colaboram com o funcionamento dos sistemas que podem ser compostos por outros objetos (SANTOS, 2010). [...] Pode ser considerado objeto qualquer coisa que tenha algum significado dentro do contexto do problema, seja ela concreta ou abstrata. Assim, por exemplo, pode ser considerado objeto: • Uma viagem; • Uma determinada data; • O clima de determinada região; • O endereço de alguém; • [...] • Um pedido de compra de material; • O salário de um funcionário; Veja que um objeto pode ser qualquer coisa que apresente alguma utilidade ou sirva a algum propósito. Cada objeto consiste em uma entidade com identidade própria [...] (BORATTI, 2007, p. 29). Santos (2010, p. 58) complementa a ideia: [...] vamos utilizar o exemplo da classe Pessoa. Ela possui atributos (nome, idade) e métodos (setNome(), getNome()), o objeto, neste caso, será a instância da classe Pessoa, ou seja, possuirá os métodos e atributos dela, porém seus “valores” serão diferentes durante a execução do programa[...]

Figura 4: Exemplos de objetos criados a partir de uma classe

Fonte: DEVMEDIA

Atributos e métodos De acordo com Santos (2010), os atributos são características de uma classe. São variáveis que armazenam o estado dos objetos criados a partir da classe. Já os métodos são funções que realizam tarefas com esses atributos e podem alterá-los.

Boratti (2007, p.30) define atributos como “as características de composição de um objeto que estão associadas a sua constituição e que definem sua estrutura [...]”. na mesma página, o autor conceitua métodos como: “[...] ações ou serviços que o objeto pode executar”.

Page 6: TSI DESENVOLVIMENTO DE APLICATIVO PARA CRIPTOGRAFIA E ...nippromove.hospedagemdesites.ws/anais_simposio/arquivos_up/... · CRIPTOGRAFIA E GERAÇÃO DE HASH ... criptografia remete

Simp.TCC/Sem.IC.2017(12); 2746-2766 2751

Encapsulamento Segundo Santos (2010), o encapsulamento é uma forma de esconder o funcionamento de um objeto, os detalhes de sua implementação através de modificadores de acesso (setAtributo(), getAtributo()). Trata-se de uma das principais técnicas que define a programação orientada a objetos, na qual os elementos são protegidos por uma camada de segurança para esconder suas propriedades, criando uma espécie de caixa preta. A maior parte das linguagens orientadas a objetos implementam o encapsulamento baseado em propriedades privadas, ligadas a métodos especiais chamados getters e setters, que irão retornar e setar o valor da propriedade, respectivamente, conforme demonstrado abaixo (GASPAROTTO, 2014): Exemplo de classe com encapsulamento public class Empresa { private String nome; private String cnpj; private String endereco; private Date dataFundacao; private float faturamento; public void imprimir() { System.out.println("Nome: " + nome); System.out.println("CNPJ: " + cnpj); System.out.println("Endereço: " + endereco); System.out.println("Data de Fundação: " + dataFundacao); } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String getCnpj() { return cnpj; } public void setCnpj(String cnpj) { this.cnpj = cnpj; } public String getEndereco() { return endereco; } public void setEndereco(String endereco) { this.endereco = endereco; } public Date getDataFundacao() { return dataFundacao; } public void setDataFundacao(Date dataFundacao) { this.dataFundacao = dataFundacao; } public float getFaturamento() { return faturamento; } public void setFaturamento(float faturamento) { this.faturamento = faturamento;

}

} Herança

Herança em programação orientada a objetos é um conceito de que uma classe herda as características de outra, seus métodos e atributos. A classe derivada de outra é chamada de subclasse e a classe da qual a subclasse é derivada é chamada de superclasse, conforme figura 5, (SANTOS, 2010).

Figura 5: Herança entre objetos.

Fonte DEVMEDIA

Para entender essa característica, Gasparotto (2014) compara a uma família: em que uma criança, por exemplo, está herdando características de seus pais. Os pais, por sua vez, herdam algo dos avós, o que acarreta que a criança também o faça e ,assim, sucessivamente. Na orientação a objetos, da mesma forma, o objeto abaixo na hierarquia irá herdar características de todos os objetos acima dele, seus “ancestrais”. A herança a partir das características do objeto imediatamente acima é considerada herança direta, enquanto as demais são consideradas heranças indiretas. Por exemplo, na família, a criança herda diretamente do pai e indiretamente do avô e do bisavô. Linguagem UML Consoante Guedes (2009), Unified Modeling Language (UML), ou Linguagem de Modelagem Unificada, é uma linguagem visual utilizada para modelar softwares baseados no paradigma de orientação a objetos. Também é utilizada como propósito geral aplicado a todos os domínios. Ela tornou-se a linguagem padrão de modelagem adotada internacionalmente pela indústria de engenharia de software. Através de conceitos, objetos, símbolos e diagramas, a UML disponibiliza uma forma simples, mas objetiva e funcional, de documentação e entendimento de um sistema. Pode-se utilizar os diagramas e arquivos que compõem um modelo UML para o

Page 7: TSI DESENVOLVIMENTO DE APLICATIVO PARA CRIPTOGRAFIA E ...nippromove.hospedagemdesites.ws/anais_simposio/arquivos_up/... · CRIPTOGRAFIA E GERAÇÃO DE HASH ... criptografia remete

Simp.TCC/Sem.IC.2017(12); 2746-2766 2752

desenvolvimento, apresentação, treinamento e manutenção durante todo o ciclo de vida da sua aplicação. Ela é mais completa, comparada a outras metodologias empregadas para a modelagem de dados, pois tem em seu conjunto todos os recursos necessários para suprir as necessidades de todas as etapas que compõem um projeto – definição, implementação, criação do modelo de banco de dados, distribuição –, proporcionando, sem qualquer outra ferramenta ou metodologia adicional, um total controle do projeto (DEVMEDIA, 2014). A UML não é uma linguagem visual de programação, mas seus modelos podem ser diretamente conectados a várias linguagens. Isso significa que é possível mapear os modelos da UML em linguagens de programação tais como Java, C++, Visual Basic ou até tabelas de banco de dados relacionais ou o armazenamento de dados persistentes de um banco de dados orientado a objetos. A UML é capaz de representar tudo que possa ser melhor expresso em termos gráficos, enquanto as linguagens de programação representam o que é melhor expresso em termos textuais [...] (BOOCH, RUMBAUGH, JACONSON, 2006, p. 16). Levantamento de requisitos Uma das primeiras fases de um processo de desenvolvimento de software, o levantamento de requisitos busca compreender as necessidades do usuário e o que ele deseja que o sistema a ser desenvolvido realize (GUEDES, 2009). Mello (2010) conceitua levantamento de requisitos como sendo a primeira atividade técnica no desenvolvimento do software e pode ser entendida como a responsável por definir os serviços que um sistema deve realizar: sua interface com os demais elementos e sob quais restrições o sistema deve operar. Os requisitos dos sistemas devem estabelecer o que o sistema deve fazer, sem descrever como será feito. Casos de Uso Segundo Guedes (2009), os casos de uso são utilizados para capturar os requisitos do sistema, ou seja, referem-se aos serviços, tarefas ou funcionalidades identificadas como necessários ao software e que podem ser utilizados de alguma maneira pelos atores que interagem com o sistema. Eles são utilizados para expressar e documentar os comportamentos pretendidos para as funções dessas interações. Nenhum sistema existe isoladamente. Todo sistema interessante interage com atores humanos ou autônomos que utilizam esse sistema para algum propósito e esses atores esperam que o sistema se comporte de acordo com as maneiras previstas. Um caso de uso especifica o comportamento de um sistema ou de parte de um sistema e é uma descrição de um conjunto de

sequências de ações, incluindo variantes realizadas pelo sistema para produzir um resultado observável do valor de um ator (BOOCH, RUMBAUGH, JACONSON, 2006, p. 227). Diagramas de casos de uso Conforme Pereira e Silva (2007), trata-se de um diagrama composto por casos de uso, atores e relacionamentos envolvendo esses elementos. É voltado à modelagem do conjunto de funcionalidades de um software em um alto nível de abstração. O objetivo do diagrama é relacionar quais são as funcionalidades do sistema sem detalhamento a respeito delas, como a forma em que são implementadas ou em que sequência ocorrem durante a execução de um programa. A visão do sistema sob essa modelagem é conhecida como visão caixa preta, na qual é possível verificar o que o sistema faz, mas não a estrutura interna. Os diagramas de casos de uso são importantes para visualizar, especificar e documentar o comportamento de um elemento. Esses diagramas tornam sistemas, subsistemas e classes acessíveis e compreensíveis, por apresentarem uma visão externa sobre como esses elementos podem ser utilizados no contexto (Figura 6). Os diagramas de casos de uso também são importantes para testar sistemas executáveis por meio de engenharia de produção e para compreendê-los por meio de engenharia reversa (BOOCH et al, 2006).

Figura 6: Exemplo de diagrama de casos de uso

(caixa eletrônico).

Fonte: O Autor

O diagrama de casos de uso procura, por

meio de uma linguagem simples, possibilitar a compreensão do comportamento externo do sistema (em termos de funcionalidades oferecidas por ele) por qualquer pessoa, tentando representar o sistema por intermédio de uma perspectiva do usuário. É, entre todos os diagramas da UML,

Page 8: TSI DESENVOLVIMENTO DE APLICATIVO PARA CRIPTOGRAFIA E ...nippromove.hospedagemdesites.ws/anais_simposio/arquivos_up/... · CRIPTOGRAFIA E GERAÇÃO DE HASH ... criptografia remete

Simp.TCC/Sem.IC.2017(12); 2746-2766 2753

mais abstrato e, portanto, o mais flexível e informal. Esse diagrama costuma ser utilizado, sobretudo no início da modelagem do sistema, principalmente nas etapas de levantamento e análise de requisitos, embora venha a ser consultado e possivelmente modificado durante todo o processo de engenharia e sirva de base para a modelagem de outros diagramas(GUEDES, 2009, p. 55).

Diagramas de classes O diagrama de classes é o modelo fundamental de uma especificação orientada a objetos. Produz a descrição mais próxima da estrutura do código de um programa, isto é, mostra o conjunto de classes com seus atributos e métodos e os relacionamentos entre as classes (Figura 7). Os elementos sintáticos básicos deste modelo de diagrama são as classes e os relacionamentos (PEREIRA e SILVA, 2007).

Figura 7: Exemplo diagramas de classe.

Fonte: DEVMEDIA

De acordo com Booch et al (2006), os diagramas de classes são utilizados para fazer a modelagem estática de um sistema. Essa visão

oferece, principalmente, suporte para os requisitos funcionais de um sistema – os serviços que o sistema deverá fornecer aos usuários finais. Guedes (2009, p.98) descreve diagrama de classes como sendo: [...] Um dos mais importantes e mais utilizados da UML. Seu principal enfoque está em permitir a visualização das classes que comporão o sistema com seus respectivos atributos e métodos, bem como em demonstrar como as classes do diagrama se relacionam, complementam e transmitem informações entre si. Esse diagrama apresenta uma visão estática de como as classes estão organizadas, preocupando-se em como definir a estrutura lógica das mesmas. O diagrama de classes serve ainda como base para a construção da maioria de outros diagramas da linguagem UML. Diagramas de sequência Conforme Guedes (2009, p.35): [...] trata-se de um diagrama comportamental que procura determinar a sequência de eventos que ocorrem em um determinado processo, identificando quais mensagens devem ser disparadas entre os elementos envolvidos e em que ordem. O objetivo principal desse diagrama é determinar a ordem em que os eventos ocorrem, as mensagens que são enviadas, os métodos que são chamados e como os objetos interagem dentro de um determinado processo. Neste modelo de diagrama (Figura 8), os objetos são descritos em suas interações. Seus principais elementos sintáticos são o objeto e a mensagem (enviada de um objeto para outro). É voltado à modelagem dinâmica do sistema e sua principal finalidade em uma modelagem orientada a objetos é o refinamento de casos de uso. O tempo decorre de cima para baixo – a primeira mensagem, enviada para invocar um método do objeto destinatário, é a que aparece mais acima no diagrama (PEREIRA e SILVA, 2007).

Figura 8: Exemplo de diagrama de sequência.

Fonte:DEINF/UFMA

Page 9: TSI DESENVOLVIMENTO DE APLICATIVO PARA CRIPTOGRAFIA E ...nippromove.hospedagemdesites.ws/anais_simposio/arquivos_up/... · CRIPTOGRAFIA E GERAÇÃO DE HASH ... criptografia remete

Simp.TCC/Sem.IC.2017(12); 2746-2766 2754

ANÁLISE DO SISTEMA Documento de Visão Finalidade A finalidade deste documento é apresentar as características e necessidades de alto nível para o desenvolvimento do aplicativo DCRIPT. Posicionamento Descrição do aplicativo O aplicativo DCRIPT, desenvolvido em linguagem Java, possui as seguintes funções relacionadas a segurança da informação: gerar hash de arquivos, criptografar, descriptografar, calcular novamente o hash e conferir com o hash anterior. O algoritmo utilizado para criptografia é o

AES; Enquanto para geração de hash foi utilizado o algoritmo MD5. Oportunidade de negócios A segurança dos dados armazenados em um computador pessoal não se limita à instalação de um antivírus. Várias medidas contribuem para aumentar as proteções contra ataques maliciosos e acessos indevidos. Entre elas, a criptografia dos arquivos armazenados no PC, impossibilitando que o atacante compreenda o conteúdo e garantindo a confidencialidade da informação. Em complemento a essa medida, a geração de hash antes de o arquivo ser criptografado e a conferência com o hash gerado após a descriptografia desse arquivo verifica se os dados foram adulterados, visando a garantia de integridade da informação.

Descrição do problema

O Problema Arquivos em claro com informações restritas no computador Afeta A confidencialidade e integridade dos dados O seu impacto é Visualização e alterações indevidas Uma solução ideal seria Utilização de aplicativo que criptografe e gere hash desses

arquivos.

Sentença final do produto

Para Usuários domésticos Quem Quiser melhorar a segurança de arquivos armazenados Dcript É um software com excelente custo/benefício Que Criptografa e detecta a existência de adulterações indevidas em

arquivos, sem custo de aquisição. Diferente de Outros aplicativos gratuitos, que se encontraram na literatura e que

não conjugam as duas tarefas. Nosso Produto Realiza as duas tarefas que tratam essas vulnerabilidades.

Escopo do produto O aplicativo foi desenvolvido para prover segurança a arquivos relacionada a aspectos de confidencialidade e integridade. Sendo que a confidencialidade é garantida no processo de cifração, enquanto a garantia de integridade é obtida na geração e conferência de hash. Descrição dos envolvidos e dos clientes

Demografia do mercado O mercado alvo para este aplicativo compreende usuários domésticos que desejam adicionar segurança a seus arquivos armazenados. Esses usuários teriam interesse no aplicativo, desde que o custo seja mínimo e os benefícios sejam interessantes.

Resumo dos envolvidos

Nome Descrição Responsabilidades Desenvolvedor Responsável pelo desenvolvimento

do aplicativo. -Levantar requisitos; -Elaborar documentação; -Desenvolver algoritmos; -Testar funcionamento.

Usuário Pessoa que adquire o aplicativo. -Adquirir e utilizar o aplicativo.

Resumo dos clientes

Demandantes do produto serão usuários domésticos cujos arquivos necessitam proteção adicional para garantir a integridade e confidencialidade de seus conteúdos. Ambiente dos Clientes

Page 10: TSI DESENVOLVIMENTO DE APLICATIVO PARA CRIPTOGRAFIA E ...nippromove.hospedagemdesites.ws/anais_simposio/arquivos_up/... · CRIPTOGRAFIA E GERAÇÃO DE HASH ... criptografia remete

Simp.TCC/Sem.IC.2017(12); 2746-2766 2755

O ambiente de clientes é composto por máquinas PC com Sistema Operacional básico, normalmente na versão Home. Perfis dos Envolvidos Usuário

Descrição Pessoa que adquire o aplicativo Tipo Usuário Final Responsabilidade Utilizar o aplicativo Critério de sucesso Adquirir aplicativo para conferir segurança aos arquivos

armazenados no PC Envolvimento Avaliar usabilidade e dar feedbacks Produtos liberados Nenhum Comentários/Problemas Nenhum

Desenvolvedor

Descrição Pessoa que desenvolve o aplicativo Tipo Usuário experiente Responsabilidade Levantar requisitos, programar e gerar documentação Critério de sucesso Utilizar um bom algoritmo combinado com boas chaves Envolvimento Realizar testes e analisar resultados Produtos liberados Projeto transformado em aplicativo Comentários/Problemas Nenhum

Principais necessidades dos envolvidos ou dos clien tes

Necessidade Prioridade

Preocupações Solução atual Solução proposta

Garantir integridade aos arquivos armazenados

Alta Pode haver manuseios ou adulterações não autorizadas

Nenhuma Utilizar o aplicativo para gerar e armazenar o hash.

Garantir a confidencialidade

Alta Pode haver visualização ou compartilhamento não autorizado

Nenhuma Utilizar o aplicativo para criptografar os arquivos

Alternativas e concorrências Segue abaixo a lista dos principais concorrentes free para criptografia e para geração de hash:

Criptografia (free) Hash(free) TrueCrypt MD5 and SHA Check Utility AxCrypt HashCalc EncryptOnClick Advanced Hash Calculator

Restrições

Esta primeira versão não está disponível para dispositivos móveis.

ESPECIFICAÇÃO DE REQUISITOS ER aF DCT.001

Quadro 1 – Quadro de Especificação do Requisito ER aF DCT.001 ER aF DCT.001 Informar Senha Descrição O aplicativo deve solicitar uma senha ao usuário no momento em que

ele acessar o aplicativo. Descrição do risco Risco Prioridade Usuário pode perder a senha utilizada no processo de cifragem.

Altíssimo Altíssima

Usuário Envolvido Usuário final

ER aF DCT.002 Quadro 2 – Quadro de Especificação do Requisito ER aF DCT.002

Page 11: TSI DESENVOLVIMENTO DE APLICATIVO PARA CRIPTOGRAFIA E ...nippromove.hospedagemdesites.ws/anais_simposio/arquivos_up/... · CRIPTOGRAFIA E GERAÇÃO DE HASH ... criptografia remete

Simp.TCC/Sem.IC.2017(12); 2746-2766 2756

ER aF DCT.002 Informar arquivo Descrição O aplicativo deve solicitar que o usuário informe o nome do arquivo

que será cifrado. Descrição do risco Risco Prioridade Nome do arquivo informado de forma equivocada. Médio Baixa

Usuário Envolvido Usuário final

ER aF DCT.003 Quadro 3 – Quadro de Especificação do Requisito ER aF DCT.003

ER aF DCT.003 Criptografar arquivo Descrição O aplicativo deve cifrar o arquivo informado, quando o usuário

selecionar a devida opção.

Descrição do risco Risco Prioridade Arquivos em claro permitem que outros usuários vejam o conteúdo

Altíssimo Alto

Usuário Envolvido Usuário final ER aF DCT.004

Quadro 4 – Quadro de Especificação do Requisito ER aF DCT.004 ER aF DCT.004 Gerar hash do arquivo Descrição O aplicativo deve efetuar o cálculo do hash quando o usuário

selecionar a opção de criptografia ou descriptografia.

Descrição do risco Risco Prioridade Nenhum

Nenhum Nenhum

Usuário Envolvido Usuário final ER aF DCT.005

Quadro 5 – Quadro de Especificação do Requisito ER aF DCT.005 ER aF DCT.005 Descriptografar arquivo Descrição Após selecionar esta opção, o aplicativo deve descriptografar o

arquivo indicado pelo usuário.

Descrição do risco Risco Prioridade O usuário pode escolher um arquivo equivocadamente.

Baixo Baixo

Usuário Envolvido Usuário final ER aF DCT.006

Quadro 6 – Quadro de Especificação do Requisito ER aF DCT.006

ER aF DCT.006 Conferir hash Descrição No momento da descriptografia, o aplicativo deve ser capaz de

conferir o novo hash gerado com o hash gerado anteriormente, e informar ao usuário, caso haja divergência entre eles.

Descrição do risco Risco Prioridade Nenhum Nenhum Nenhum Usuário Envolvido Usuário final

DESCRIÇÃO DOS CASOS DE USO E ATORES

Use Cases Criptografar arquivo

Este use case é responsável por gerar hash e executar a criptografia do arquivo informado pelo usuário, disponibilizando-o em diretório específico para arquivos cifrados. As informações referentes ao local em que o arquivo foi armazenado, a data da cifração e o número do hash ficam armazenados no banco de dados.

Page 12: TSI DESENVOLVIMENTO DE APLICATIVO PARA CRIPTOGRAFIA E ...nippromove.hospedagemdesites.ws/anais_simposio/arquivos_up/... · CRIPTOGRAFIA E GERAÇÃO DE HASH ... criptografia remete

Simp.TCC/Sem.IC.2017(12); 2746-2766 2757

Descriptografar arquivo Este use case é responsável por executar a descriptografia do arquivo selecionado e disponibilizá-lo no mesmo local do arquivo encriptado, em seguida gera o hash e realiza a conferência com o hash anterior armazenado no banco de dados.

Descrição dos Atores Usuário Final Esse ator é a pessoa que adquire o aplicativo DCT para uso doméstico, com intuito de garantir aspectos de segurança relacionados a confidencialidade e integridade a seus arquivos.

Diagrama Geral de Casos de Uso

Figura 9 – Diagrama Geral de Casos de Uso

Fonte: O Autor

Detalhamento dos Casos de Uso

UC01 Criptografar Arquivo

Figura 10: Diagrama de caso de uso Criptografar Arquivo

Fonte: O autor

Page 13: TSI DESENVOLVIMENTO DE APLICATIVO PARA CRIPTOGRAFIA E ...nippromove.hospedagemdesites.ws/anais_simposio/arquivos_up/... · CRIPTOGRAFIA E GERAÇÃO DE HASH ... criptografia remete

Simp.TCC/Sem.IC.2017(12); 2746-2766 2758

Quadro 07 - Fluxo de Eventos do Use Case Criptografar Arquivo

Nome da Use Case Criptografar Arquivo Descrição Este use case é responsável por gerar hash e executar a criptografia

do arquivo informado pelo usuário, disponibilizando-o em diretório específico para arquivos cifrados. As informações referentes ao local em que o arquivo foi armazenado, a data da cifração e número do hash ficam armazenados no banco de dados.

Requisitos Associados ER aF DCT.001, ER aF DCT.002, ER aD DCT.003 e ER aF DCT.004

Pré Condições Informar senha e selecionar arquivo Pós Condições Calcular hash e criptografar arquivo Atores Usuário Final

Fluxo Principal Usuário Sistema

2. Informar senha; 3. Selecionar opção Criptografar Arquivo; 5. Informar nome do arquivo a ser cifrado;

1. Solicitar senha ao usuário; 4. Solicitar nome do arquivo; 6. Calcular hash; 7. Criptografar arquivo; 8. Armazenar data cifração, local em que o

arquivo foi salvo e o nr hash para futura conferência;

9. Apresentar o formulário contendo as informações do arquivo e opções de nova cifração ou decifração de algum arquivo que conste na lista dos cifrados.

Fluxo de Exceção (Senha incorreta) 2. Informar senha incorreta 1. Solicitar senha ao usuário;

3. Exibir mensagem de senha incorreta, solicitando ao usuário que informe novamente.

UC02 Descriptografar Arquivo

Figura 10: Diagrama de caso de uso Criptografar Arquivo

Fonte: O autor

Page 14: TSI DESENVOLVIMENTO DE APLICATIVO PARA CRIPTOGRAFIA E ...nippromove.hospedagemdesites.ws/anais_simposio/arquivos_up/... · CRIPTOGRAFIA E GERAÇÃO DE HASH ... criptografia remete

Simp.TCC/Sem.IC.2017(12); 2746-2766 2759

Quadro 08 - Fluxo de Eventos do Use Case Descriptograr Arquivo Nome da Use Case Descriptografar Arquivo Descrição Este use case é responsável por executar a descriptografia do arquivo

selecionado e disponibilizá-lo no mesmo local do arquivo encriptado, em seguida gera o hash e realiza a conferência com o hash anterior armazenado no banco de dados.

Requisitos Associados ER aF DCT.001, ER aF DCT.002, ER aF DCT.004, ER aF DCT.005, ER aF DCT.006

Pré Condições Informar senha e selecionar arquivo Pós Condições Descriptografar o arquivo, gerar e conferir número do hash. Atores Usuário Final

Fluxo Principal Usuário Sistema

2. Informar a senha e selecionar a opção de descriptografia;

4. Seleciona um arquivo;

1. Solicita senha ao usuário; 3. Informa lista de arquivos cifrados; 5. Descriptografa arquivo e disponibiliza no

mesmo diretório em que foi cifrado; 6. Gerar Hash; 7. Captura o hash anterior armazenado, compara

o novo hash e informa caso tenha havido adulterações;

8. Informa o término da operação e retorna para lista de arquivos cifrados.

Fluxo de Exceção (Senha incorreta) 2. Informar senha incorreta 1. Solicitar senha ao usuário;

3. Exibir mensagem de senha incorreta, solicitando ao usuário que informe novamente.

DIAGRAMA DE CLASSES

Figura 11: Diagrama de classes

Fonte: O Autor

Diagrama de sequência Criptografar Arquivo

Figura 12: Diagrama de sequência criptografar arquivos

Page 15: TSI DESENVOLVIMENTO DE APLICATIVO PARA CRIPTOGRAFIA E ...nippromove.hospedagemdesites.ws/anais_simposio/arquivos_up/... · CRIPTOGRAFIA E GERAÇÃO DE HASH ... criptografia remete

Simp.TCC/Sem.IC.2017(12); 2746-2766 2760

Fonte: O Autor

Page 16: TSI DESENVOLVIMENTO DE APLICATIVO PARA CRIPTOGRAFIA E ...nippromove.hospedagemdesites.ws/anais_simposio/arquivos_up/... · CRIPTOGRAFIA E GERAÇÃO DE HASH ... criptografia remete

Simp.TCC/Sem.IC.2017(12); 2746-2766 2761

Descriptografar Arquivo

Figura 13: Diagrama de sequência descriptografar arquivos

Fonte: O autor

Apresentação do aplicativo O acesso às funcionalidades do aplicativo passa pela primeira tela, em que é solicitado ao usuário que informe a chave de 16 bytes previamente cadastrada (Figura 14). Essa

chave possui duas funções: senha de acesso ao aplicativo, de maneira que somente o possuidor da chave possa acessá-lo; chave simétrica, utilizada nos processos de cifração ou decifração. Neste protótipo apenas uma chave foi cadastrada.

Page 17: TSI DESENVOLVIMENTO DE APLICATIVO PARA CRIPTOGRAFIA E ...nippromove.hospedagemdesites.ws/anais_simposio/arquivos_up/... · CRIPTOGRAFIA E GERAÇÃO DE HASH ... criptografia remete

Simp.TCC/Sem.IC.2017(12); 2746-2766 2762

Figura 14: Tela inicial

Na segunda tela, o aplicativo apresenta duas opções: Cifrar Arquivos e Listar Arquivos Cifrados (Figura 15). A opção de decifração está contida dentro de uma lista, na qual cada registro refere-se a um arquivo cifrado.

Figura 15: Tela contendo as opções de cifração ou listagem de arquivos cifrados

Ao selecionar a opção Cifrar Arquivo, é apresenta uma tela solicitando que o usuário informe o arquivo a ser cifrado (Figura 16). Figura 16: Tela apresentada ao selecionar a opção de criptografia

Page 18: TSI DESENVOLVIMENTO DE APLICATIVO PARA CRIPTOGRAFIA E ...nippromove.hospedagemdesites.ws/anais_simposio/arquivos_up/... · CRIPTOGRAFIA E GERAÇÃO DE HASH ... criptografia remete

Simp.TCC/Sem.IC.2017(12); 2746-2766 2763

Ao clicar no botão “Enviar”, o aplicativo calcula o hash do arquivo utilizado o algoritmo MD5, através da implementação da classe java.security.MessageDigest. Em seguida, é efetuada a criptografia utilizando o algoritmo simétrico AES, através das classes Java javax.crypto.Cipher, javax.crypto.CipherInputStream e javax.crypto.spec.SecretKeySpec. O aplicativo armazena, em banco de dados MySQL, as informações de data da cifração, o local em que o arquivo cifrado foi armazenado e o número do hash (Figura 17). No momento em que for solicitada a decifração, esses dados são utilizados pelos algoritmos para localizar o arquivo e capturar o número do hash gerado anteriormente.

Figura 17: Dados do arquivo cifrado apresentados ao término da operação

Os arquivos cifrados são armazenados em diretório específico, facilitando o gerenciamento (Figura 18).

Page 19: TSI DESENVOLVIMENTO DE APLICATIVO PARA CRIPTOGRAFIA E ...nippromove.hospedagemdesites.ws/anais_simposio/arquivos_up/... · CRIPTOGRAFIA E GERAÇÃO DE HASH ... criptografia remete

Simp.TCC/Sem.IC.2017(12); 2746-2766 2764

Figura 18: Diretório no qual os arquivos cifrados são armazenados

Na opção Lista de Arquivos Cifrados, são apresentados dados que permitem o usuário localizar facilmente o arquivo que deseja decifrar. Além disso, esses dados são utilizados pelos algoritmos na descriptografia, geração e conferência de hash, possibilitando que esse processo seja realizado em apenas um clique (Figura 19).

Figura 19: Lista de arquivos cifrados contendo as respectivas opções de decifragem

Para cada arquivo cifrado há uma opção de decifração vinculada. Dessa forma, caso o usuário queira descriptografar o primeiro arquivo da lista, basta clicar na opção “Decifrar Arquivo” localizada na respectiva linha. Assim, sucessivamente (Figura 20).

Figura 20: Lista vazia após todos arquivos serem decifrados

Page 20: TSI DESENVOLVIMENTO DE APLICATIVO PARA CRIPTOGRAFIA E ...nippromove.hospedagemdesites.ws/anais_simposio/arquivos_up/... · CRIPTOGRAFIA E GERAÇÃO DE HASH ... criptografia remete

Simp.TCC/Sem.IC.2017(12); 2746-2766 2765

Os arquivos decifrados são armazenados no mesmo diretório de seus respectivos cifrados (Figura 21). Figura 21: Diretório contendo arquivos decifrados

CONCLUSÃO O aplicativo desenvolvido é suficiente para mitigar vulnerabilidades relacionadas à confidencialidade, à integridade e à disponibilidade. O usuário tem a sua disposição uma aplicação que criptografa e gera hash, descriptografa e confere os números de hash gerados para cada arquivo. O embasamento teórico obtido nas referências, a visão de alto nível evidenciada no documento de visão e as técnicas e diagramas utilizados baseados em linguagem UML permitiram o desenvolvimento de uma aplicação pautada nas melhores práticas. Doravante, cabe ao usuário classificar seus arquivos, identificar quais possuem informações sensíveis, utilizar o aplicativo para gerar hash,

cifrá-los e torná-los mais seguros enquanto são mantidos no meio digital. AGRADECIMENTOS Ao professor Cid, por ter me orientado com sabedoria durante toda a elaboração deste Trabalho. Aos professores Alexandre Fanti, Joacil Rael e Valdir Zimba por terem compartilhado seus profundos conhecimentos e tornarem fácil o aprendizado de conteúdos complexos. À minha esposa Jana, pelo apoio e compreensão dispensados nesse período de elaboração do TCC; à minha mãe, pela torcida e orações.

Page 21: TSI DESENVOLVIMENTO DE APLICATIVO PARA CRIPTOGRAFIA E ...nippromove.hospedagemdesites.ws/anais_simposio/arquivos_up/... · CRIPTOGRAFIA E GERAÇÃO DE HASH ... criptografia remete

Simp.TCC/Sem.IC.2017(12); 2746-2766 2766

REFERÊNCIAS BIBLIOGRÁFICAS ABNT – Associação Brasileira de Normas Técnicas. ABNT NBR ISSO/IEC 27002 – Tecnologia da Informação – Técnicas de segurança – Código de prática para a gestão de segurança da informação . ABNT, 2005. AURÉLIO, Buarque de Holanda. Consulta online , disponível em https://dicionariodoaurelio.com/criptografia, acessado em 21/11/2017. BOOCH, G et al. The unifield modeling language user guide ; tradução de Fábio Freitas da Silva e Cristina de Amorim Machado – Rio de Janeiro: Elsevier, 2006. BORATTI, Isaias Camilo. Programação orientada a objetos e Java – Florianópolis: Visual Books, 2007. CABRAL, Carlos; CAPRINO, Willian. Trilhas em segurança da informação: Caminhos e ideias para a proteção de dados – Rio de Janeiro: Brasport, 2015. CAMPOS, A. Sistemas de segurança da Informação - Florianópolis: Visual Books, 2007. CODIGO SIMPLES. Introdução aos algoritmos de criptografia AES e DES , disponível em https://codigosimples.net/2017/02/22/introducao-aos-algoritmos-de-criptografia-aes-e-des-com-net/, acessado em 19/11/2017. DEINF/UFMA. Artigo sobre diagramas UML , disponível em http://www.deinf.ufma.br/~acmo/grad/lp2/Projeto_Livraria/ProjetoLivrariaVirtual/Doclib/Modcomp/Sequencia/Login/DiagSeqLogin.html, acessado em 17/11/2017. DEVMEDIA. Criptografia AES , disponível em https://www.devmedia.com.br/criptografia-aes-com-net/15903, acessado em 19/11/2017. DEVMEDIA. Programação Orientada a Objetos , disponível em https://www.devmedia.com.br/introducao-a-programacao-orientada-a-objetos-em-java/26452, acessado em 21/11/2017. DEVMEDIA. Orientações básicas na elaboração de um diagrama de classes , disponível em https://www.devmedia.com.br/orientacoes-basicas-na-elaboracao-de-um-diagrama-de-classes/37224, acessado em 17/11/2017. DEVMEDIA. Principais conceitos da programação orientada a objetos , disponível em https://www.devmedia.com.br/principais-

conceitos-da-programacao-orientada-a-objetos/32285, acessado em 18/11/2017. GASPAROTTO, Henrique Machado. Os quatro pilares da programação orientada a objetos , disponível em https://www.devmedia.com.br/os-4-pilares-da-programacao-orientada-a-objetos/9264, acessado em 18/11/2017. GUEDES, Gilleanes T. A. UML 2: Uma abordagem prática – São Paulo: Novatec Editora, 2009. OLIVEIRA, Mario Luiz R. Uma análise da segurança e da eficiência d algoritmo de criptografia posicional – Lavras: UFL-MG, 2002. OLIVEIRA, Paulo Cesar. Política de segurança da informação: Definição, importância, elaboração e implementação , disponível em https://www.profissionaisti.com.br/2013/06/politica-de-seguranca-da-informacao-definicao-importancia-elaboracao-e-implementacao/, acessado em 19/11/2017. MACEDO, Diego. Chaves Simétricas e assimétricas , disponível em http://www.diegomacedo.com.br/chaves-simetricas-assimetricas/, acessado em 19/11/2017. MACORATTI.NET. Mini curso sobre criptografia, disponível em http://www.macoratti.net/Cursos/Cripto/net_cripto4.htm, acessado em 27/12/2017. MELLO, Leandro C.S. Levantamentos de requisitos – Cuiabá: Faculdades Integradas Mato-Grossense de Ciências, 2010 SANTOS, Ciro Menezes. Desenvolvimento de aplicações comerciais com Java e NetBeans – Rio de Janeiro: Editora Ciência Moderna Ltda, 2010. SILVA, Ricardo Pereira. UML: Modelagem Orientada a objetos – Florianópolis: Visual Books, 2007. SOUZA, Antonio Carlos de et al. TCC: Métodos e Técnicas – Florianópolis: Visual Books, 2007.