7 michael douglas matos araújo e thiago dos santos daher...

23
Simp.TCC/Sem.IC.2017(12); 2883-2905 2883 TSI HAXOR MICHAEL DOUGLAS MATOS ARAÚJO THIAGO DOS SANTOS DAHER ALVES CID BENDAHAN COELHO CINTRA RESUMO O objetivo deste trabalho é desenvolver um software que criptografa e descriptografa arquivos e pastas e, além disso, verifica integridade. Visando isso, foi elaborado o referencial teórico para embasamento do trabalho. Os seguintes temas foram tratados: segurança da informação, criptografia, engenharia de software e programação orientada a objetos. Durante a construção do programa, que foi codificado utilizando Java e a IDE NetBeans, utilizou-se a UML como linguagem de elaboração de estrutura de projetos. O resultado foi um software que atende a necessidade de manipular informações de maneira segura. Palavras-chave: criptografia; criptografar; integridade; hash; Haxor; ABSTRACT The purpose of this academic project is the development of a software that encrypts and decrypts files and folders and, besides that, checks for integrity. Aiming that, the theoretical reference was elaborated. The following topics were treated in it: information security, cryptography, software engineering and object-oriented programming. During the construction of the program, that was coded using Java and the NetBeans IDE, UML was used as a project structure development language. The result was a software that meets the need to manipulate information in a secure manner. Keywords: cryptography; encrypt; integrity; hash; Haxor. INTRODUÇÃO Dentre os inúmeros bens que qualquer pessoa ou empresa pode possuir atualmente a informação é um dos mais importantes. No ambiente corporativo, não gerenciar a informação de maneira segura pode resultar em danos financeiros. Nesse sentido, é essencial protegê-la de agentes mal-intencionados, fenômenos da natureza e acidentes que possam danificá-la e assim evitar que ocorram vazamentos, perca ou espionagem industrial, por exemplo. Para alcançar tal objetivo com base nos princípios de segurança da informação, é essencial assegurar a confidencialidade e integridade da informação, isto é, necessita-se respectivamente restringir seu acesso a pessoas não autorizadas e garantir que não seja alterada indevidamente. Justificativa Devido ao crescimento constante do meio eletrônico, a informação está cada vez mais vulnerável a inúmeras ameaças. Justifica-se, então, a necessidade de um software que reduza o risco de ela ser acessada por pessoas que não deveriam. O desenvolvimento de tal software é objetivo deste trabalho. O software utilizará criptografia simétrica e hash, que são, respectivamente, um recurso para mudar o conteúdo de uma informação utilizando uma chave para criptografar e descriptografar; e uma função criptográfica que utiliza o conteúdo do arquivo para gerar uma sequência única de caracteres. Dessa forma, o software auxiliará a manter a confidencialidade e facilitará a detecção de problemas com a integridade. Pelo fato de a necessidade de proteção de informações contidas em arquivos ser algo comum, o software poderá ser utilizado por qualquer pessoa ou empresa que necessite manter suas informações seguras. Objetivos Objetivo Geral Desenvolver um software que criptografe e descriptografe arquivos e pastas e, além disso, verifique a integridade dos arquivos através do uso da função hash. Objetivos Específicos Elaborar o referencial teórico para embasamento do trabalho. Utilizar algoritmos de criptografia simétrica e hash. Confeccionar a documentação do software a ser desenvolvido. Desenvolver o software, que utilize algum dos algoritmos de criptografia simétrica e hash pesquisados. Metodologia Inicialmente, foram adquiridos, através de uma pesquisa bibliográfica, conhecimentos sobre a informação e sua importância, linguagens de programação, criptografia e metodologias para desenvolvimento de software. Com base na pesquisa feita foi desenvolvida toda a documentação, que indica todos os requisitos e funcionamento da aplicação, utilizando diagramas e especificações. Através da documentação e dos conceitos de criptografia, desenvolveu-se o programa utilizando a linguagem de programação orientada a objetos Java e a IDE NetBeans. REFERENCIAL TEÓRICO

Upload: dokhanh

Post on 10-Feb-2019

230 views

Category:

Documents


0 download

TRANSCRIPT

Simp.TCC/Sem.IC.2017(12); 2883-2905 2883

TSI

HAXOR

MICHAEL DOUGLAS MATOS ARAÚJO THIAGO DOS SANTOS DAHER ALVES

CID BENDAHAN COELHO CINTRA

RESUMO O objetivo deste trabalho é desenvolver um software que criptografa e descriptografa arquivos e pastas e, além disso, verifica integridade. Visando isso, foi elaborado o referencial teórico para embasamento do trabalho. Os seguintes temas foram tratados: segurança da informação, criptografia, engenharia de software e programação orientada a objetos. Durante a construção do programa, que foi codificado utilizando Java e a IDE NetBeans, utilizou-se a UML como linguagem de elaboração de estrutura de projetos. O resultado foi um software que atende a necessidade de manipular informações de maneira segura. Palavras-chave: criptografia; criptografar; integridade; hash; Haxor; ABSTRACT The purpose of this academic project is the development of a software that encrypts and decrypts files and folders and, besides that, checks for integrity. Aiming that, the theoretical reference was elaborated. The following topics were treated in it: information security, cryptography, software engineering and object-oriented programming. During the construction of the program, that was coded using Java and the NetBeans IDE, UML was used as a project structure development language. The result was a software that meets the need to manipulate information in a secure manner. Keywords: cryptography; encrypt; integrity; hash; Haxor. INTRODUÇÃO Dentre os inúmeros bens que qualquer pessoa ou empresa pode possuir atualmente a informação é um dos mais importantes. No ambiente corporativo, não gerenciar a informação de maneira segura pode resultar em danos financeiros. Nesse sentido, é essencial protegê-la de agentes mal-intencionados, fenômenos da natureza e acidentes que possam danificá-la e assim evitar que ocorram vazamentos, perca ou espionagem industrial, por exemplo. Para alcançar tal objetivo com base nos princípios de segurança da informação, é essencial assegurar a confidencialidade e integridade da informação, isto é, necessita-se respectivamente restringir seu acesso a pessoas não autorizadas e garantir que não seja alterada indevidamente. Justificativa Devido ao crescimento constante do meio eletrônico, a informação está cada vez mais vulnerável a inúmeras ameaças. Justifica-se, então, a necessidade de um software que reduza o risco de ela ser acessada por pessoas que não deveriam. O desenvolvimento de tal software é objetivo deste trabalho.

O software utilizará criptografia simétrica e hash, que são, respectivamente, um recurso para mudar o conteúdo de uma informação utilizando uma chave para criptografar e descriptografar; e uma função criptográfica que utiliza o conteúdo do arquivo para gerar uma sequência única de caracteres. Dessa forma, o software auxiliará a manter a confidencialidade e facilitará a detecção de problemas com a integridade.

Pelo fato de a necessidade de proteção de informações contidas em arquivos ser algo comum, o software poderá ser utilizado por

qualquer pessoa ou empresa que necessite manter suas informações seguras. Objetivos Objetivo Geral Desenvolver um software que criptografe e descriptografe arquivos e pastas e, além disso, verifique a integridade dos arquivos através do uso da função hash. Objetivos Específicos • Elaborar o referencial teórico para embasamento do trabalho. • Utilizar algoritmos de criptografia simétrica e hash. • Confeccionar a documentação do software a ser desenvolvido. • Desenvolver o software, que utilize algum dos algoritmos de criptografia simétrica e hash pesquisados. Metodologia

Inicialmente, foram adquiridos, através de uma pesquisa bibliográfica, conhecimentos sobre a informação e sua importância, linguagens de programação, criptografia e metodologias para desenvolvimento de software.

Com base na pesquisa feita foi desenvolvida toda a documentação, que indica todos os requisitos e funcionamento da aplicação, utilizando diagramas e especificações.

Através da documentação e dos conceitos de criptografia, desenvolveu-se o programa utilizando a linguagem de programação orientada a objetos Java e a IDE NetBeans. REFERENCIAL TEÓRICO

Simp.TCC/Sem.IC.2017(12); 2883-2905 2884

Informação Segundo a norma de boas práticas de segurança da informação da Associação Brasileira de Normas Técnicas (ABNT NBR ISO/IEC 27002) (2005, p.X): A informação é um ativo que, como qualquer outro ativo importante, é essencial para os negócios de uma organização e consequentemente necessita ser adequadamente protegida. Isto é especialmente importante no ambiente dos negócios, cada vez mais interconectado. Percebe-se, portanto, que a informação não pode ser tratada de maneira inadequada, pois é um ativo de grande valor para qualquer pessoa, seja física ou jurídica. Segurança da Informação Para ABNT NBR ISO/IEC 27002 (2005, p.X), o conceito de segurança da informação “é a proteção da informação de vários tipos de ameaças para garantir a continuidade do negócio, minimizar o risco ao negócio, maximizar o retorno sobre os investimentos e as oportunidades de negócio”.

Uma ameaça pode ser entendida, de acordo com Maziero (2011), como qualquer procedimento que coloque em risco um ou mais dos pilares de segurança da informação, que serão exemplificados a seguir. Pilares de Segurança da Informação Para garantir a segurança da informação, é necessário assegurar que não existam ameaças que abalem a confidencialidade e a integridade que, segundo Stallings (2014, p.7), são: Confidencialidade : preservar restrições autorizadas sobre acesso e divulgação de informação, incluindo meios para proteger a privacidade de indivíduos e informações privadas. Uma perda de confidencialidade seria a divulgação não autorizada de informação. Integridade: prevenir-se contra a modificação ou destruição imprópria de informação, incluindo a irretratabilidade e autenticidade dela. Uma perda de integridade seria a modificação ou destruição não autorizada de informação. Além disso, existe um terceiro pilar chamado disponibilidade que, segundo Stallings (2014), é um princípio que determina que a informação deve estar sempre disponível de forma rápida e confiável. Tal princípio, no entanto, foge do escopo do software que será desenvolvido, pois não é possível controlá-lo utilizando apenas ferramentas criptográficas. Criptografia Coutinho (2005) considera como criptografia a técnica de codificar dados, informações e mensagens tornando-as inteligíveis de forma que só o destinatário autorizado possa reverter.

A figura abaixo exibe como funciona o processo de criptografia: inicialmente, tem-se um texto em claro, que é modificado utilizando um algoritmo criptográfico, gerando-se um texto encriptado inteligível; quando o texto em claro for necessário, utiliza-se novamente o algoritmo para descriptografar.

Figura 1 – Como funciona a criptografia

Fonte: SSL2BUY

Criptografia Simétrica Sacchi e col. (2013) dizem que a criptografia simétrica, também conhecida como criptografia de chave simétrica, é a forma de criptografar arquivos e descriptografá-los somente com uma chave que deve ser compartilhada com quem está autorizado acessar a informação. AES Conforme o que dizem Sacchi e col. (2013), o Advanced Encryption Standard (Padrão Avançado de Encriptação, AES) é um algoritmo simétrico que realiza a codificação por blocos, que codifica cada entrada de bits e as armazena.

Ainda de acordo com Sacchi e col. (2013), a segurança desse algoritmo deve ser baseada principalmente nas chaves e não no algoritmo, que é recomendado ser aberto para poder ser testado por qualquer um, para aumentar sua segurança. Além disso, o tamanho das chaves pode ser 128,192 ou 256 bits.

Devido a sua confiabilidade, e pelo fato de ser bastante utilizado, o AES é um excelente algoritmo para ser utilizado na criptografia de arquivos e pastas, que é o objetivo deste trabalho. Hash

De acordo com Rael (2001), o hash é uma função que transforma uma sequência de caracteres de qualquer tamanho em uma sequência de tamanho fixo. Dessa forma, ele serve como uma assinatura de qualquer informação, e muda completamente caso seja trocado apenas um bit da sequência de caracteres original. Percebe-se, portanto, que um bom exemplo do uso do de funções hash é verificar se houve violação da integridade dos arquivos. Primeiramente, é gerado o valor hash do arquivo armazenado. Quando se desejar acessar o arquivo novamente, gera-se novamente o hash e o compara com o hash antigo: caso sejam diferentes, o arquivo sofreu alterações.

Simp.TCC/Sem.IC.2017(12); 2883-2905 2885

SHA1 Conforme o que dizem Azevedo e Couto (2004), o Secure Hash Algorithm (Algoritmo Hash Seguro, SHA) é uma função hash bastante usada por protocolos e aplicações de segurança como: TLS, SSL, PGP, SSH, S/MIME e IPSec. Ele recebe dados como entrada que possuam no máximo 264 bits e o resumo da mensagem na saída possui 160 bits. Por ser um algoritmo muito utilizado, seguro e conceituado, é uma boa opção de função hash para ser utilizado na verificação de integridade. Derivação de Chaves Baseada em Senha De acordo com Barker e col. (2010, p.5), senhas são utilizadas para autenticação, e podem sofrer de inúmeras falhas, como baixa entropia e aleatoriedade. Elas não devem, por esse motivo, ser usadas diretamente como chaves criptográficas. No caso de aplicações que devem proteger arquivos, no entanto, muitas vezes é necessário utilizar as senhas como forma de proteção. Nesse caso, deve-se usar uma PBKDF (Password-Based Key Derivation Function, ou função de derivação de chaves baseada em senha), que é um algoritmo que gera a chave criptográfica com base em uma senha.

Engenharia de Software

De acordo com Sommerville (2011, p.5) a:

Engenharia de software é uma disciplina de engenharia cujo foco está em todos os aspectos da produção de software, desde os estágios iniciais da especificação do sistema até sua manutenção, quando o sistema já está sendo usado.

Além disso, Falbo (2005) diz que a Engenharia de Software surgiu com o intuito de melhorar a qualidade do software e aumentar a produtividade no processo de desenvolvimento.

A figura abaixo exemplifica o processo mais comum de desenvolvimento de software, na ordem em que as ações ocorrem: a fase análise é aquela na qual são avaliados os requisitos necessários para o software; a fase de projeto é aquela na qual a documentação é desenvolvida, juntamente com os diagramas UML; a fase de codificação é aquela na qual o código do programa é desenvolvido; a fase de teste é aquela na qual o software passa por testes a procura de erros; e a fase de suporte é aquela na qual o programa passa a ser implementado na prática.

Figura 2 – Processo de desenvolvimento de software

Fonte: Devmedia

PRISM De acordo com Cardoso (2003), o PRISM (Practical Software Development Model) é um modelo prático para desenvolvimento de software, que apresenta de forma clara todos os passos necessários para chegar no resultado final, que é o software, focando na produtividade e rapidez. Ainda de acordo com Cardoso (2003), os principais passos do PRISM são: detecção do problema que deve ser resolvido; levantamento de todos os requisitos necessários para o software; modelagem dos casos de uso baseado nos requisitos; escolha dos principais casos de uso; modelagem das classes de análise; modelagem dinâmica usando os diagramas de sequência; modelagem das classes de projeto; geração do código do software; e testes.

UML A Unified Modeling Language, (Linguagem de Modelagem Unificada, UML), de acordo com Silva e Videira (2001, p.117); É uma linguagem para especificação, construção, visualização e documentação de artefactos de um sistema de software. É promovido pelo Object Management Group (OMG), com contribuições e direitos de autoria das seguintes empresas: Hewlett-Packard, IBM, ICON Computing, i-Logix, IntelliCorp, Electronic Data Services, Microsoft, ObjecTime, Oracle, Platinum, Ptech, Rational, Reich, Softeam, Sterling, Taskon A/S e Unisys. Para Guedes (2011), na UML os diagramas ajudam a compreender o sistema por

Simp.TCC/Sem.IC.2017(12); 2883-2905 2886

diversos aspectos e são utilizados para analisar o sistema ou partes dele de forma ampla e complexa para que sejam identificados e evitados erros. Diagrama de Caso de Uso Conforme diz Guedes (2011), o diagrama de caso de uso é o mais informal e de fácil

compreensão. Dessa forma, quem for usar o sistema pode ter uma visão geral do seu funcionamento, ao identificar os atores que vão interagir com o software e os recursos disponibilizados para eles.

Figura 3 – Exemplo de diagrama de caso de uso

Fonte: os autores

Diagramas de Classes De acordo com Guedes (2011), o diagrama de classes está entre os principais diagramas, pois atua como suporte para outros

diagramas e define a estrutura das classes que serão utilizadas no desenvolvimento do sistema. Nele são especificados os atributos e métodos que cada classe possui, e os seus relacionamentos.

Figura 4 – Exemplo de diagrama de classes

Fonte: os autores

Simp.TCC/Sem.IC.2017(12); 2883-2905 2887

Diagramas de Sequência O diagrama de sequência, segundo Guedes (2011, p.33), é; um diagrama comportamental que preocupa-se com a ordem temporal em que as mensagens são trocadas entre os objetos envolvidos em um determinado processo. Em geral, baseia-se em um caso de uso definido pelo diagrama de mesmo

nome e apoia-se no diagrama de classes para determinar os objetos das classes envolvidas em um processo. Um diagrama de sequência costuma identificar o evento gerador do processo modelado, bem como o ator responsável por esse evento, e determina como o processo deve se desenrolar e ser concluído por meio da chamada de métodos disparados por mensagens enviadas entre os objetos.

Figura 5 – Exemplo de diagrama de sequência

Fonte: os autores

Simp.TCC/Sem.IC.2017(12); 2883-2905 2888

Documento de Visão A confecção do documento de visão é um importante passo da engenharia de software. Segundo a International Business Machines (IBM) (2017), o documento de visão: define o escopo de alto nível e o propósito de um programa, produto ou projeto. Uma instrução clara do problema, solução proposta e os recursos de alto nível do produto ajudam a estabelecer expectativas e a reduzir riscos. Linguagens de Programação Orientadas a Objeto Como o próprio nome diz, as linguagens de programação orientadas a objetos são aquelas que visualizam um programa como sendo uma interação entre objetos que, segundo Deitel e Deitel (2016, p. 8), são: [..] essencialmente componentes reutilizáveis de software. Há objetos data, objetos data/hora, objetos áudio, objetos vídeo, objetos automóvel, objetos pessoas etc. Quase qualquer substantivo pode ser razoavelmente representado como um objeto de software em termos dos atributos (por exemplo, nome, cor e tamanho) e comportamentos (por exemplo, calcular, mover e comunicar). Dentre os inúmeros tipos de linguagem de programação, as orientadas a objetos vêm se tornando as mais utilizadas. Isso ocorre, segundo Deitel e Deitel (2016), porque programas orientados a objetos são frequentemente mais fáceis de entender, corrigir e modificar. Métodos e Classes Para definir o papel de qualquer objeto, é necessário definir sua classe que, segundo Ricarte (2001, p. 3), “é um gabarito para a definição de objetos. Através da definição de uma classe, descreve-se que propriedades — ou atributos — o objeto terá”. Uma classe é, portanto, um projeto de como um determinado tipo de objeto devera se portar, contendo seus atributos e suas operações. As operações que os objetos executam são chamadas de métodos. Segundo Deitel e Deitel (2016, p. 9), o “método armazena as declarações do programa que, na verdade, executam as tarefas [...]. Por exemplo, uma classe que representa uma conta bancária poderia conter um método para fazer depósitos de dinheiro”. Instanciação e Reutilização Como já foi dito, uma classe pode ser considerada um projeto de um objeto, assim como uma planta baixa é um projeto de uma construção. Por esse motivo, é necessário “construir um objeto de uma classe antes que um programa possa executar as tarefas que os métodos da classe definem. O processo para fazer isso é chamado instanciação” (DEITEL E DEITEL, 2016, p. 9). A instanciação não necessariamente deve ser executada apenas uma vez. De acordo com Deitel e Deitel (2016), uma classe pode ser reutilizada várias vezes para criar inúmeros

objetos. A reutilização economiza tempo, pois classes e componentes já criados costumam passar por inúmeros testes, depuração e ajustes de desempenho. Encapsulamento e Ocultamento de Informações Segundo Ricarte (2001), o encapsulamento consiste no princípio de que cada componente de um programa deve possuir toda sua informação relevante agregada em uma unidade, ou cápsula. Isso significa, por exemplo, que uma classe deve conter todos os seus métodos e atributos dentro de si. Além disso, de acordo com Deitel e Deitel (2016, p. 9), “objetos podem se comunicar entre si, mas eles em geral não sabem como outros objetos são implementados — os detalhes de implementação permanecem ocultos dentro dos próprios objetos”. Tal característica pode ser chamada de ocultamento de informações. Interfaces Deitel e Deitel (2016, p. 10) dizem que interfaces são estruturas que especificam uma coleção de métodos (ou operações) que não foram realmente implementados. Dessa forma, a responsabilidade de implementação de tais métodos fica a cargo da classe que se basear na interface. Herança De acordo com Ricarte (2001, p. 6): Herança é um mecanismo que permite que características comuns a diversas classes sejam fatoradas em uma classe base, ou superclasse. A partir de uma classe base, outras classes podem ser especificadas. Cada classe derivada ou subclasse apresenta as características (estrutura e métodos) da classe base e acrescenta a elas o que for definido de particularidade para ela. A herança é um bom exemplo de reutilização, pois utiliza-se uma classe existente (chamada de superclasse), aproveitando seus os atributos e operações, para criar uma classe nova (subclasse). Em um programa de registro de funcionários de uma faculdade, por exemplo, pode existir uma classe “funcionário”, que pode ser aproveitada para criar uma nova classe chamada “professor” com operações e atributos específicos. Ricarte (2001, p.6) subdivide os relacionamentos de herança em três tipos: o de extensão, no qual há uma subclasse que herda e mantem as características de uma superclasse, adicionando novos membros; o de especificação, no qual a subclasse não tem nada o que herdar, exceto a obrigação de implementar certas operações especificadas por uma interface; e o de extensão e especificação, que é uma combinação dos outros dois, já que a subclasse herda as características da superclasse mas também

Simp.TCC/Sem.IC.2017(12); 2883-2905 2889

mantém sua obrigação de implementar os métodos especificados pela interface. A figura a seguir ilustra bem o conceito de herança. No caso, tem-se no topo uma classe chamada “Funcionário”, que pode ser considerada a superclasse. Logo abaixo, tem-se três classes

que herdam a classe “Funcionário”, que são as classes “Gerente”, “Secretária” e “Telefonista” que, portanto, podem ser consideradas subclasses, e contêm todos os métodos e atributos da classe “Funcionário”.

Figura 6 – Exemplo de herança

Fonte: Devmedia

Polimorfismo De acordo com Deitel e Deitel (2016, p. 312), o polimorfismo permite “programar no geral” em vez de “programar no específico”. Em particular, o polimorfismo permite escrever programas que processam objetos que compartilham a mesma superclasse, direta ou indiretamente, como se todos fossem objetos da superclasse; isso pode simplificar a programação. Em outras palavras, o polimorfismo permite que um programa trate classes diferentes da mesma forma, caso elas possuam em comum uma superclasse. Por exemplo, caso exista uma classe chamada “carro”, e outras duas subclasses que herdam essa classe, chamadas “conversível” e “caminhão”, o programa pode tratar essas duas últimas como se fossem apenas “carro”. Java De acordo com Deitel e Deitel (2016), a Sun Microsystems, em 1991, financiou um projeto de pesquisa que originou a linguagem de programação orientada a objetos C++, que a empresa acabou por chamar de Java. O fator principal da explosão de conhecimento da linguagem foi o crescimento da Web, já que a ela propôs a inclusão de conteúdo dinâmicos em páginas, em uma época que havia muito interesse por isso. Atualmente, no entanto, a linguagem tem aplicações muito mais amplas. É possível vê-la sendo utilizada em sistemas corporativos,

sistemas de servidores web, aplicativos de smartphones e softwares desktop.

Suas principais vantagens são a sua facilidade de desenvolvimento para múltiplas plataformas e uma grande biblioteca de classes que oferecem inúmeras funcionalidades. Um bom exemplo é a Java Cryptography Architecture (JCA – Arquitetura de Criptografia Java), que disponibiliza ao programador a implementação pronta de inúmeros algoritmos de criptografia. ANÁLISE DO SOFTWARE Finalidade do Documento

A Finalidade deste documento é analisar a necessidade do Haxor, que se trata de um sistema de criptografia de arquivos e pastas, ao coletar todos os recursos que serão necessários aos usuários e envolvidos. Além disso, serão especificados os detalhes de como o Haxor atinge tais necessidades.

Definições, Acrônimos e Abreviações • Haxor – é o nome do software proposto. • JRE – Java Runtime Environment – é um software necessário para a execução de aplicações criadas utilizando a linguagem de programação Java. • JAR – é o arquivo executável de um software feito em Java. • Hash – algoritmo de criptografia. • PBKDF2 – Password-Based Key Derivation Function – é um algoritmo responsável por gerar uma chave criptográfica utilizando uma senha.

Simp.TCC/Sem.IC.2017(12); 2883-2905 2890

Posicionamento Descrição da Empresa

O projeto não tem como objetivo atender a alguma empresa existente específica, mas sim a qualquer pessoa que desejar criptografar arquivos ou pastas para proteger seu conteúdo.

Oportunidade de Negócios A armazenagem e envio de informações sensíveis contidas em arquivos e pastas é algo bastante comum. Para protegê-la de roubos, vazamentos ou perda de integridade, uma boa solução é a oferecida pelo Haxor: a utilização de criptografia, que torna o conteúdo ilegível para terceiros.

Descrição do Problema

Quadro 1 – Descrição do problema

O problema Informações sensíveis contidas em arquivos e pastas podem ser acessadas por pessoas que não possuem autorização.

Afeta Qualquer pessoa ou empresa que possua informações sensíveis.

Cujo impacto é Exposição das informações sensíveis, o que pode resultar em perda financeira, de imagem, dentre outros.

Uma boa solução seria

Criptografar o arquivo ou pasta e fazer uma verificação de integridade.

Sentença de Posição do Produto

Quadro 2 – Sentença de posição do produto

Para Pessoas ou empresas.

Quem Quiser enviar ou armazenar arquivos ou pastas importantes.

O Haxor É um software.

Que Criptografa e descriptografa arquivos ou pastas e faz verificação de integridade.

Diferente de Softwares que armazenam arquivos/pastas sem o nível de proteção necessário.

Escopo do Produto

O principal objetivo do software proposto é possibilitar a armazenagem e envio seguros de arquivos e pastas, ao dificultar que pessoas não-autorizadas tenham acesso às informações. Isso é feito através da criptografia dos dados, utilizando também uma senha fornecida pelo usuário para gerar a chave criptográfica através do PBKDF2.

Além disso, o software também possui a funcionalidade de descriptografar os arquivos que foram criptografados anteriormente, fazendo também uma verificação de integridade por meio de comparação de hash.

Vale ressaltar que a criptografia e a descriptografia dos dados é feita utilizando AES, e o hash é gerado utilizando SHA-1. Além disso, devido ao fato de o software ter sido desenvolvido

na linguagem de programação Java, os algoritmos de criptografia e compactação de arquivos utilizados são da API da linguagem.

O sistema será desenvolvido utilizando o modelo prático para desenvolvimento de software, pois ele possibilita rapidez e produtividade nos processos, ao definir todas as principais etapas necessárias para se chegar no resultado final.

Descrição dos Envolvidos e Clientes Demografia do Mercado O envio e a armazenagem de informações sensíveis são algo muito comum, portanto a demografia de mercado é muito abrangente, atingindo qualquer usuário que possuir arquivos ou pastas que contenham informações importantes, e desejar protegê-las de acesso não-autorizado.

Resumo dos Envolvidos

Quadro 3 – Resumo dos envolvidos com o software

Nome Descrição Responsabilidades

Simp.TCC/Sem.IC.2017(12); 2883-2905 2891

Desenvolvedores São os desenvolvedores que farão o código e a documentação do projeto.

- Assegurar que a criptografia seja segura. - Assegurar que o arquivo estará íntegro após descriptografá-lo.

Resumo dos Clientes

Quadro 4 – Resumo dos clientes

Nome Descrição Responsabilidades Envolvidos

Usuário É qualquer pessoa ou empresa que desejar enviar ou armazenar algum arquivo ou pasta que possui informações sensíveis.

Não há responsabilidades específicas do usuário.

Auto-representado.

Ambiente dos Clientes Os usuários utilizarão o software proposto em qualquer máquina compatível com o Java 8, incluindo Windows, Mac OS e Linux. Perfis dos Envolvidos Desenvolvedores

Quadro 5 – Perfil dos desenvolvedores

Representantes Thiago Daher e Michael Douglas

Descrição São os responsáveis por desenvolver o software, desde a documentação até o código.

Tipo Alunos formandos de ensino superior no curso de Tecnologia da Segurança da Informação.

Responsabilidades Garantir que o software funcione corretamente, utilizando algoritmos de criptografia que possuem uma boa segurança.

Critérios de Sucesso Capacidade de desenvolver um software que atenda aos requisitos de segurança.

Envolvimento São envolvidos em todos os papéis necessários para a conclusão do projeto.

Produtos Liberados O software proposto.

Comentários/Problemas Nenhum.

Principais Necessidades dos Envolvidos ou dos Clien tes

Quadro 6 – Principais necessidades dos envolvidos e dos clientes

Necessidade Prioridade Preocupações Solução Atual

Soluções Propostas

Criptografar pasta ou arquivo

Alta A criptografia tem de ser segura.

Nenhuma. Implementar no software a criptografia de pastas e arquivos.

Descriptografar pasta ou arquivo

Alta A criptografia tem de ser segura.

Nenhuma. Implementar no software a criptografia de pastas e arquivos.

Verificar integridade

Alta O arquivo ou pasta que está sendo

Nenhuma. Implementar no software a verificação

Simp.TCC/Sem.IC.2017(12); 2883-2905 2892

Necessidade Prioridade Preocupações Solução Atual

Soluções Propostas

enviado poder sofrer alterações.

de integridade por meio de hash.

Alternativas e Concorrência Não há alternativas ou concorrência relevantes no mercado. Os softwares já existentes suprem de forma diferente os requisitos de confidencialidade e integridade, em relação à solução proposta pelo Haxor. Restrições O Haxor será compatível apenas com sistemas que possuem o JRE instalado e, portanto, não executará em máquinas que não possuem suporte ao JRE. Especificação de Requisitos ER aF.HXR001

Quadro 7 – Especificação do requisito de sistema ER aF.HXR001 ER aF.HXR001 Selecionar arquivo ou pasta Descrição O software deverá disponibilizar mecanismos para que o usuário possa

localizar o arquivo ou pasta que será criptografado/descriptografado. Descrição do risco Risco Prioridade

O usuário pode acidentalmente deletar o arquivo ou pasta selecionado antes do processo de criptografia ocorrer.

Baixo Baixa

O usuário pode selecionar o arquivo ou pasta errado. Baixo Baixa Usuário envolvido Usuário do software

ER aF.HXR002

Quadro 8 – Especificação do requisito de sistema ER aF.HXR002 ER aF.HXR002 Digitar a senha Descrição O software deverá disponibilizar um mecanismo para que o usuário digite uma

senha que será utilizada na geração de uma chave que irá criptografar/descriptografar o arquivo ou pasta.

Descrição do risco Risco Prioridade O usuário pode esquecer a senha. Alto Baixa O usuário pode acidentalmente errar ao digitar a senha. Médio Baixa

Usuário envolvido Usuário do software ER aF.HXR003

Quadro 9 – Especificação do requisito de sistema ER aF.HXR003 ER aF.HXR003 Criptografar Descrição O software deverá criptografar o arquivo ou pasta selecionado pelo usuário,

utilizando a chave gerada através do algoritmo de derivação de chave a partir da senha digitada.

Descrição do risco Risco Prioridade O arquivo que será criptografado não pôde ser lido. Baixo Baixa

Usuário envolvido Usuário do software ER aF.HXR004

Quadro 10 – Especificação do requisito de sistema ER aF.HXR004 ER aF.HXR004 Calcular hash Descrição O software calculará o hash antes de criptografar a pasta ou arquivo e depois

de descriptografar o arquivo.

Descrição do risco Risco Prioridade

Simp.TCC/Sem.IC.2017(12); 2883-2905 2893

O arquivo não pôde ser lido. Baixo Baixa Usuário envolvido Usuário do software

ER aF.HXR005

Quadro 11 – Especificação do requisito de sistema ER aF.HXR005 ER aF.HXR005 Verificar hash Descrição O software deverá comparar o hash gerado na criptografia com o hash gerado

na descriptografia.

Descrição do risco Risco Prioridade O hash atual difere do hash anterior. Baixo Baixa

Usuário envolvido Usuário do software ER aF.HXR006

Quadro 12 – Especificação do requisito de sistema ER aF.HXR006 ER aF.HXR006 Descriptografar Descrição O software deverá descriptografar o arquivo ou pasta selecionado pelo

usuário, utilizando a chave gerada através do algoritmo de derivação de chave a partir da senha digitada.

Descrição do risco Risco Prioridade O arquivo que será descriptografado não pôde ser lido. Baixo Baixa O usuário digitou a senha incorreta. Baixo Alta

Usuário envolvido Usuário do software ER aF.HXR007

Quadro 13 – Especificação do requisito de sistema ER aF.HXR007 ER aF.HXR007 Gerar Chave Descrição O software deverá utilizar a senha digitada pelo usuário e o PBKDF2 para

gerar uma chave criptográfica, utilizando um salt.

Descrição do risco Risco Prioridade A senha tem baixa entropia/aleatoriedade. Alto Baixa

Usuário envolvido Usuário do software Descrição dos Casos de Uso Selecionar Arquivo/Pasta

Este caso de uso deve possibilitar ao usuário informar a localização do arquivo ou pasta que será criptografado ou descriptografado. Digitar Senha

Este caso de uso deve possibilitar ao usuário informar a senha que será utilizada para gerar a chave criptográfica, através do algoritmo de derivação de chaves.

Criptografar

Neste caso de uso o software criptografa o arquivo ou a pasta selecionada utilizando a chave gerada.

Gerar Hash

Neste caso de uso o software deve calcular o hash antes de criptografar o arquivo ou depois de descriptografá-lo.

Verificar Hash

Neste caso de uso o software deve comparar o hash gerado na criptografia com o hash gerado na descriptografia, e avisar ao usuário caso sejam diferentes.

Descriptografar

Neste caso de uso o software descriptografa o arquivo selecionado utilizando a chave gerada.

Gerar Chave

Neste caso de uso o software deverá gerar a chave criptográfica, utilizando a senha como base.

Descrição dos Atores Usuário

O ator pode ser qualquer usuário que precise criptografar e descriptografar um arquivo ou pasta.

Simp.TCC/Sem.IC.2017(12); 2883-2905 2894

Diagrama Geral de Casos de Uso

Figura 7 – Diagrama geral de casos de uso

Detalhamento dos Casos de Uso UC[01] – Selecionar Arquivo/Pasta

Figura 8 – Diagrama de caso de uso Selecionar Arquivo/Pasta

Simp.TCC/Sem.IC.2017(12); 2883-2905 2895

Quadro 14 – Especificação do caso de uso Selecionar Arquivo/Pasta Nome do caso de uso Selecionar Arquivo/Pasta Descrição O software permitirá ao usuário selecionar o arquivo ou pasta desejado. Requisitos Associados ER aF.HXR001, ER aF.HXR003, ER aF.HXR006 Precondição O software já está na página principal. Pós-condições O arquivo ou pasta foi localizado corretamente. Atores Usuário.

(continua) Quadro 14 – Especificação do caso de uso Selecionar Arquivo/Pasta

(continuação) Fluxo Principal – Selecionar Arquivo/Pasta

Ações Recebidas Ações Realizadas 1 – O usuário executa o software. 3 – O usuário seleciona a opção desejada. 4 – O usuário clica no botão de selecionar arquivo/pasta. 6 – O usuário seleciona o arquivo/pasta e clica no botão de abrir.

2 – O software exibe duas opções, descriptografar ou criptografar. 5 – O software exibe uma janela para que o usuário selecione o arquivo/pasta. 7 – O software armazena a localização do arquivo/pasta.

UC[02] – Criptografar

Figura 9 – Diagrama de caso de uso Criptografar

Quadro 15 – Especificação do caso de uso Criptografar Nome do caso de uso Criptografar Descrição O software utilizará as informações digitadas pelo usuário para criptografar

o arquivo ou pasta. (continua)

Quadro 15 – Especificação do caso de uso Criptografar

(continuação) Requisitos Associados ER aF.HXR001, ER aF.HXR002, ER aF.HXR003, ER aF.HXR004 Precondição O arquivo/pasta foi selecionado. Pós-condições O arquivo criptografado foi gerado com sucesso. Atores Usuário.

Fluxo Principal – Criptografar Arquivo

Simp.TCC/Sem.IC.2017(12); 2883-2905 2896

Ações Recebidas Ações Realizadas 1 – O usuário seleciona a opção de criptografar. 3 – O usuário digita a senha desejada. 4 – O usuário redigita a senha, no espaço a isso destinado.

2 – O software exibe uma janela para que o usuário insira uma senha e a sua confirmação. 5 – O software compara as senhas e notifica o usuário caso não sejam iguais. 6 – O software gera a chave criptográfica utilizando a senha e um salt. 7 – O software gera o hash do arquivo. 8 – O software criptografa o arquivo e o salva. 9 – O software armazena no arquivo criptografado o salt, o hash da senha, e o hash do arquivo. 10 – O software informa ao usuário se o processo foi executado com sucesso.

Fluxo Principal – Criptografar Pasta Ações Recebidas Ações Realizadas

1 – O usuário seleciona a opção de criptografar. 3 – O usuário digita a senha desejada. 4 – O usuário redigita a senha, no espaço a isso destinado.

2 – O software exibe uma janela para que o usuário insira uma senha e a sua confirmação. 5 – O software compara as senhas e notifica o usuário caso não sejam iguais. 6 – O software compacta a pasta. 7 – O software gera a chave criptográfica utilizando a senha e um salt. 8 – O software gera o hash do arquivo. 9 – O software criptografa o arquivo e o salva. 10 – O software armazena no arquivo criptografado o salt, o hash da senha, e o hash do arquivo. 11 – O software informa ao usuário se o processo foi executado com sucesso. Fluxo de Exceção 01

Ações Recebidas Ações Realizadas 1 – O arquivo/pasta não existe.

2 – O software exibe uma mensagem de erro informando ao usuário que localize um arquivo/pasta que exista e encerra o caso de uso.

(continua) Quadro 15 – Especificação do caso de uso “Criptografar”

(continuação) Fluxo de Exceção 02

Ações Recebidas Ações Realizadas 1 – As senhas digitadas não conferem, ou não foram digitadas.

2 – O software exibe uma mensagem de erro informando ao usuário que digite as senhas corretamente e encerra o caso de uso.

Fluxo de Exceção 03 Ações Recebidas Ações Realizadas

1 – O arquivo já existe.

2 – O software exibe uma janela perguntando ao usuário se ele deseja sobrescrever o arquivo existente. 3 – Caso o usuário decida sobrescrever, o software continua o fluxo principal normalmente. 4 – Senão, ele encerra o caso de uso.

UC[03] – Descriptografar

Figura 10 – Diagrama de caso de uso Descriptografar

Simp.TCC/Sem.IC.2017(12); 2883-2905 2897

Quadro 16 – Especificação do caso de uso Descriptografar Nome do caso de uso Descriptografar Descrição O software utilizará as informações digitadas pelo usuário para

descriptografar o arquivo. Requisitos Associados ER aF.HXR001, ER aF.HXR002, ER aF.HXR004, ER aF.HXR005, ER

aF.HXR006 Precondições O arquivo foi selecionado. Pós-condições O arquivo/pasta descriptografado foi gerado. Atores Usuário.

Fluxo Principal – Descriptografar Arquivo Ações Recebidas Ações Realizadas

1 – O usuário seleciona a opção de descriptografar. 3 – O usuário digita a senha desejada.

2 – O software exibe uma janela para que o usuário insira uma senha. 4 – O software gera o hash da senha e o compara com o hash da senha que está no arquivo. 5 – O software gera a chave criptográfica utilizando a senha e o salt armazenado no arquivo. 6 – O software descriptografa o arquivo e o salva. 7 – O software gera o hash do arquivo. 8 – O software verifica o hash do arquivo. 9 – O software informa ao usuário se o processo foi executado com sucesso.

Fluxo Principal – Descriptografar Pasta Ações Recebidas Ações Realizadas

1 – O usuário seleciona a opção de descriptografar. 3 – O usuário digita a senha desejada.

2 – O software exibe uma janela para que o usuário insira uma senha. 4 – O software gera o hash da senha e o compara com o hash da senha que está no arquivo. 5 – O software gera a chave criptográfica utilizando a senha e o salt armazenado no arquivo. 6 – O software descriptografa o arquivo e o salva. 7 – O software gera o hash do arquivo e o armazena. 8 – O software verifica o hash do arquivo. 9 – O software descompacta o arquivo. 10 – O software informa ao usuário se o processo foi executado com sucesso.

(continua)

Simp.TCC/Sem.IC.2017(12); 2883-2905 2898

Quadro 16 – Especificação do caso de uso Descriptografar (continuação)

Fluxo de Exceção 01 Ações Recebidas Ações Realizadas

1 – O arquivo selecionado não existe.

2 – O software exibe uma mensagem de erro informando ao usuário que localize um arquivo/pasta que exista e encerra o caso de uso.

Fluxo de Exceção 02 Ações Recebidas Ações Realizadas

1 – As senhas digitadas não conferem, ou não foram digitadas.

2 – O software exibe uma mensagem de erro informando ao usuário que digite as senhas corretamente e encerra o caso de uso.

Fluxo de Exceção 03 Ações Recebidas Ações Realizadas

1 – O arquivo/pasta já existe.

2 – O software exibe uma janela perguntando ao usuário se ele deseja sobrescrever o arquivo/pasta existente. 3 – Caso o usuário decida sobrescrever, o software continua o fluxo principal normalmente. 4 – Senão, ele encerra o caso de uso.

Diagrama Geral de Classes

Figura 11 – Diagrama geral de classes

Diagrama de Classes de Entidade

Figura 12 – Diagrama de classes de entidade

Simp.TCC/Sem.IC.2017(12); 2883-2905 2899

Diagramas de Sequência Diagrama de Sequência – Selecionar Pasta/Arquivo

Figura 13 – Diagrama de sequência Selecionar Pasta/Arquivo

Simp.TCC/Sem.IC.2017(12); 2883-2905 2900

Diagrama de Sequência – Criptografar

Figura 14 – Diagrama de sequência Criptografar

Diagrama de Sequência – Descriptografar

Figura 15 – Diagrama de sequência Descriptografar

Simp.TCC/Sem.IC.2017(12); 2883-2905 2901

CONCLUSÃO

Como já foi dito anteriormente, a proteção da informação é essencial para a maioria das pessoas devido ao fato de ela ser um grande ativo de valor. Levando em conta que os processos para manuseio de informações estão automatizados no meio eletrônico, também pode ser necessário fazer o mesmo com os procedimentos de segurança, através do desenvolvimento de um software.

Por meio da pesquisa bibliográfica, foi possível entender a lógica da estrutura e criação de um software, e entender os conceitos de segurança da informação e criptografia que são necessários para desenvolver um programa que atenda aos requisitos necessários levantados. O resultado é a criação do Haxor, que cumpre o objetivo de criptografar arquivos e pastas, verificar a integridade e ser útil para

Simp.TCC/Sem.IC.2017(12); 2883-2905 2902

qualquer pessoa, mesmo aquelas que não tenham grandes conhecimentos em segurança da informação. Para tal, o software utiliza o algoritmo criptográfico simétrico AES para criptografar e descriptografar e o algoritmo SHA-1 para verificar a integridade. REFERÊNCIAS BIBLIOGRÁFICAS Associação Brasileira de Normas Técnicas. NBR ISO/IEC 27002: Técnicas de Segurança – Código de prática para a gestão da segurança da informação. Rio de Janeiro, 2005. AZEVEDO, Joedson dos Santos; COUTO, Mailson Sousa. Criptografia Hash Sha-1 : aplicação, riscos e depreciação. Anais da Secitec. Vítoria da Conquista, 2014. Disponível em: <https://pt.scribd.com/document/245740359/Artigo-Joedson-Azevedo-SHA1>. Acesso em: 28 nov. 2017. BARKER, Elaine; BURR, William; CHEN, Lily; TURAN, Meltem Sönmez. Recommendation for Password-Based Key Derivation. Part 1: Storage Applications. Departamento de Comércio dos Estados Unidos, 2010. CARDOSO, Caíque. UML na Prática: do Problema ao Sistema. . Rio de Janeiro: Editora Ciência Moderna, 2003. COUTINHO, S. C. Criptografia. 1ª Edição. Rio de Janeiro: Instituto de Matemática Pura e Aplicada, 2005. DEITEL, Harvey; DEITEL, Paul. Java: como programar. 10ª Edição. São Paulo: Pearson Education do Brasil, 2016. FALBO, Ricardo de Almeida. Engenharia de Software. UFES, Universidade Federal do Espírito Santo. Espírito Santo, 2005.

GUEDES, Gilleanes T. A. UML 2 uma abordagem prática. 2ª Edição. São Paulo: Novatec Editora, 2011. International Business Machines, IBM. Documento de Visão. Knoledge Center, 2017. Disponível em <https://www.ibm.com/support/knowledgecenter/pt-br/SSYMRC_4.0.7/com.ibm.rational.rrm.help.doc/topics/r_vision_doc.html>. Acesso em: 27 nov. 2017. MAZIERO, Carlos Alberto. Sistemas Operacionais VIII - Aspectos de Segurança. UTFPR, Universidade Tecnológica Federal do Paraná. Paraná, 2011. RAEL, Joacil Basilio. Tratamento da Informação: Integridade de Informações em Meios Eletrônicos. UnB, Universidade de Brasília. Brasília, 2001. RICARTE, Ivan Luiz Marques. Programação Orientada a Objetos: Uma Abordagem com Java. FEEC/UNICAMP, Universidade Estadual de Campinas. Campinas, 2001. Disponível em: <http://www.dca.fee.unicamp.br/cursos/PooJava/Aulas/poojava.pdf>. Acesso em: 01 dez. 2017. SACCHI, Rodrigo P. da Silva; TREVISAN, Diogo Fernando; SANABRIA, Lino. Estudo do Padrão Avançado de Criptografia AES – Advanced Encryption Standard. UFRGS, Universidade Federal do Rio Grande do Sul. Rio Grande do Sul, 2013. SILVA, Alberto Manuel Rodrigues da; VIDEIRA, Carlos Alberto Escaleira. UML, Metodologias e Ferramentas CASE. .Lisboa, Portugal: Edições Centro Atlântico, 2001. SOMMERVILLE, Ian. Engenharia de Software. 9ª Edição. São Paulo: Pearson Education do Brasil, 2011. STALLINGS, William. Criptografia e Segurança de Redes: Princípios e Práticas. 6ª Edição. São Paulo: Pearson Education do Brasil, 2014.

APÊNDICE A

Segue abaixo a tela inicial do Haxor, que exibe para o usuário mecanismos para que ele digite o arquivo/pasta de origem, o arquivo/pasta de destino e escolha se quer criptografar ou descriptografar:

Figura 16 – Tela inicial do Haxor

Simp.TCC/Sem.IC.2017(12); 2883-2905 2903

Caso o usuário clique no botão “Buscar...”, o software exibe uma tela para que ele selecione um arquivo/pasta:

Figura 17 – Tela de seleção do arquivo/pasta de origem

Figura 18 – Tela de seleção do arquivo/pasta de destino

Simp.TCC/Sem.IC.2017(12); 2883-2905 2904

Além disso, se o usuário clicar nos botões de criptografar ou descriptografar sem ter selecionado primeiro o arquivo/pasta de origem ou o arquivo/pasta de destino, o software não permite que a operação inicie:

Figura 19 – Usuário não selecionou arquivo/pasta de origem

Figura 20 – Usuário não selecionou arquivo/pasta de destino

Após clicar nos botões de criptografar/descriptografar, o software exibe uma tela para que o usuário digite a senha criptográfica que será utilizada:

Figura 21 – Tela de inserir senha

Existe a possibilidade de o usuário clicar em “Iniciar o processo” sem ter digitado a senha, ou ter confirmado incorretamente a senha. Nesse caso, o software exibe a mensagem de erro apropriada e não permite que o processo continue:

Figura 22 – Nenhuma senha foi digitada

Figura 23 – As senhas não conferem

Simp.TCC/Sem.IC.2017(12); 2883-2905 2905

Se as senhas foram digitadas corretamente, o software inicia o processo. No entanto, antes ele verifica se a validade do arquivo/pasta de origem e do arquivo/pasta de destino, exibindo mensagens de erro/confirmação específicas caso tenha algo incorreto:

Figura 24 – Arquivo/pasta de destino já existe

Figura 25 – Arquivo/pasta de origem não existe ou é incorreto

Após o usuário clicar em “Iniciar o processo”, e estiver tudo correto, o software inicia o processo de

criptografia/descriptografia, voltando para a tela principal para exibir uma barra de progresso: Figura 26 – Criptografia/descriptografia ocorrendo

Após um tempo, caso o processo tenha ocorrido com sucesso, o software exibe uma mensagem de sucesso:

Figura 27 – Processo executado com sucesso

No entanto, existe a possibilidade de ocorrer ou algum erro, ou então que o processo de verificação de integridade falhe. Nesse caso, o software exibe a mensagem de erro correspondente:

Figura 28 – Verificação de integridade falhou