Relatório Final Do Projeto - Luís Filipe MB

Embed Size (px)

Citation preview

  • 8/17/2019 Relatório Final Do Projeto - Luís Filipe MB

    1/10

     

    Aluno: Luís Filipe Martins Barros Ra: 21000315Processamento da Informação 2016.1  –  Prof.ª Cláudia Abrão 

    ALGORITMO DE CRIPTOGRAFIA

    DES EM JAVA Relatório final do projeto

  • 8/17/2019 Relatório Final Do Projeto - Luís Filipe MB

    2/10

    1.  INTRODUÇÃO

    1.1 Contextualização

    Criptografia, do grego kryptós, segredo, e graphein, escrita, é a utilização de

    códigos e cifras para proteger informações sigilosas. Os primeiros registros de

    mensagens criptografadas remontam à Mesopotâmia, 1500 anos antes de Cristo.

    Naquela época, os materiais disponíveis para aplicar os métodos de encriptação

    resumiam-se a formas de argila e aparatos para escrever nelas. Ao longo dos anos a

    criptografia evoluiu até se tornar o que é hoje, uma parte fundamental da vida moderna,

    presente em praticamente qualquer dispositivo capaz de enviar informações. Enquanto

    antes a capacidade de codificar e decifrar mensagens era limitada pela capacidadehumana, hoje temos computadores poderosos bilhões de vezes mais velozes que

    qualquer mente humana, construídos especificamente para encriptar e decifrar

    mensagens digitais.

    Algoritmos de criptografia modernos utilizam uma chave para transformar

    sequências de dados em um emaranhado sem nexo de caracteres, tornando impossível

    para usuários ou softwares descobrirem a mensagem original sem saber qual foi a chave

    utilizada no processo. O algoritmo DES não é diferente. Criado no início da década de 70

    pela IBM, a pedido do órgão de padronização do governo americano, que percebeu a

    necessidade de ter um único sistema de criptografia para todas as trocas de informaçõesconfidenciais do Estado, este algoritmo tem como base a criptografia Lúcifer, de Horst

    Feistel. Em 1976 foi decretado como padrão americano (e por consequência, tornou-se

    também padrão mundial) e permaneceu assim até 1999, quando foi atualizado para

    uma versão mais forte, o Triplo-DES, devido ao medo que as novas gerações de

    supercomputadores seriam capazes de quebrar a criptografia por força bruta. A

    alteração para 3-DES foi somente um paliativo até que um novo padrão pudesse ser

    estabelecido, o que ocorreu em 2002 com o surgimento do AES, substituto definitivo do

    DES. Entretanto, a versão simples do DES continuou a ser utilizada em larga escala até

    2004 e o 3-DES continuará a ser utilizado até 2030 para informações sensíveis, mas que

    não chegam a ser confidenciais.

    A criptografia DES está definida em um documento oficial do National Institute

    of Standards and Technology (NIST), órgão de padronização americano. Detalhes do

    processo, como as tabelas de permutação e as tabelas S-Boxes, que são a alma do

    processo de encriptação, podem ser verificados neste arquivo, que está disponível no

    site oficial do órgão. O fluxograma a seguir sintetiza todo o procedimento, desde a

    estrada até a saída final do sistema:

  • 8/17/2019 Relatório Final Do Projeto - Luís Filipe MB

    3/10

     

    Figura 1. Fluxograma do algoritmo de encriptação DES.

    Como é possível perceber na imagem acima, 16 chaves são utilizadas, que são

    obtidas da chave principal através de vários deslocamentos de bits.

    1.2 Motivação

    A motivação para a escolha deste projeto foi a relevância do tema e sua presença

    no cotidiano da vida moderna. A compreensão do funcionamento de algoritmos decriptografia e capacidade de implementá-los pode ser uma habilidade útil em diversas

  • 8/17/2019 Relatório Final Do Projeto - Luís Filipe MB

    4/10

    carreiras, especialmente aquelas ligadas à ciência da computação. A escolha do DES se

    deve ao fato de ser um padrão amplamente utilizado, com grau de complexidade

    adequado para um programador de nível intermediário, e ainda pela sua similaridade

    ao 3-DES, que é relevante até os dias atuais. A linguagem Java foi preferida em relação

    ao Portugol por estar presente em praticamente qualquer dispositivo tecnológico

    informacional, e por sua riqueza de bibliotecas e funções que podem ser úteis na

    implementação do algoritmo.

    1.3 Objetivos

    O objetivo primário do trabalho é construir um projeto em Java que aplique

    algoritmo DES para encriptar uma mensagem de 8 caracteres ASCII, ou seja, 64 bits. Para

    isso, o programa receberá uma chave de 8 caracteres ASCII, como uma senha. A saída

    do programa deverá ser uma sequência de 64 bits. Além disso, deverá ser construídooutro projeto em Java para realizar a decriptografia, tendo como entrada a sequência

    obtida do outro projeto e a mesma chave que foi utilizada. A saída deverá ser

    exatamente igual à mensagem de 8 caracteres que foi a entrada do primeiro programa.

    Após o sucesso do objetivo primário, achei razoável definir alguns objetivos

    secundários opcionais, para serem implementados a depender do tempo restante para

    a entrega do trabalho. São eles:

      Fazer com que seja possível criptografar e decriptografar séries de dados de

    qualquer tamanho, e não só 64 bits.

     

    Fazer com que seja possível criptografar e decriptografar arquivos do

    computador do usuário.

      Implementar interface gráfica para tornar a utilização mais amigável ao usuário.

      Implementar a opção de criptografar e decriptografar com algoritmo 3-DES.

    2.  DESENVOLVIMENTO

    Neste projeto foram utilizadas diversas variáveis, a maior parte deles vetores e

    matrizes, alguns de inteiros, outros de chars ou strings. Além disso, alguns vetores foram

    usados para inserir as tabelas de permutação e expansão. Para a criptografia, as

    principais variáveis do módulo main  estão dispostas a seguir, com seus respectivos

    significados:

    key - chave ascii, 8 caracteres ascii

    key_int - chave decimal, separada em 8 blocos

    key_bin - chave binário, separada em 8 blocos

    key_in - chave pronta para o processo, vetor de 64 posiçõeskey_pc1 - chave após passar pela pc1

  • 8/17/2019 Relatório Final Do Projeto - Luís Filipe MB

    5/10

      key_left - matriz do bloco esquerdo da chave e subchaves

    key_right - matriz do bloco direito da chave e subchaves

    subkey - matriz de subchaves concatenadas

    subkey_pc2 - matriz das subchaves após passar pela pc2

    subkey_pc2_char - subkey_pc2 transformada em char

    msg - mensagem que será criptografada

    data - dados em ascii, 8 caracteres ascii

    data_int - dados em decimal, separado em 8 blocos

    data_bin - dados em binário, separado em 8 blocos

    data_in - dados que entrarão no proceso, vetor de 64 posições

    data_in_ip - data_in após passar pela permutação inicial

    data_left - bloco da esquerda para as rodadas de encriptação

    data_right - bloco da direita para as rodadas de encriptação

    data_r_exp - data_right após passar pela expansão

    data_r_xor - data_r_exp após xor com subkey_pc2_chardata_sbox - data_r_xor após passar pelas sbox (outro método)

    data_feistel - data_sbox após passar por permutação P

    data_xor_left - data_feistel após xor com data_left

    data_concat - blocos direito e esquerdo concatenados após 16 rodadas de

    encriptação

    data_out - dados criptografados em binário (data_concat após permutação

    final)

    output - mensagem criptografada

    As variáveis criadas para realizarem permutações são estas a seguir:

    pc1 - vetor da tabela de permutação choice 1

    pc2 - vetor da tabela de permutação choice 2

    ip - vetor da tebela de permutação inicial

    exp - vetor da tabela de expansão para o bloco da direita

    p - vetor da permutação no fim da função feistel

    fp - vetor da tabela de permutação final

    As variáveis da decriptação são, na maior parte, as mesmas. A única grande

    diferença entre os dois processos é que a primeira subchave se tornará a última, asegunda se tornará a penúltima e assim sucessivamente.

    Tanto a criptografia como a decriptografia possuem duas funções: a função main 

    e a função sbox, que é responsável pela aplicação das tabelas de transformação. Esta

    função usa as seguintes variáveis:

    data_r_xor - bloco de dados da direita que passou por xor com uma subchave

    sub - matriz dividida em 8 blocos de 6 bits

    data_sbox - dados após processo das sboxes, divididos em grupos de 4

    data_sbox_out - data_sbox concatenada em um único vetor

  • 8/17/2019 Relatório Final Do Projeto - Luís Filipe MB

    6/10

    Além disso, uma matriz tridimensional foi construída para armazenar os valores

    das 8 tabelas de substituição que são necessárias:

    sbox - matriz tridimensional com todas as 8 tabelas de substituição

    3.  SIMULAÇÃO E TESTES

    3.1 Funcionamento do sistema

    Ao iniciar o programa de criptografia, a seguinte mensagem é exibida na

    interface:

    Figura 2. Mensagem inicial exibida na execução do programa. Aqui, a mensagem que será trabalhada é

    a string ‘mensagem’.

    O usuário deve então entrar com o texto que deseja encriptar. Não é necessário

    que tenha exatamente 8 caracteres, ele pode conter qualquer tamanho que for

    necessário. Então, o programa pede a chave que será aplicada, que deverá conter

    exatamente 64 bits:

    Figura 3. Chave sendo solicitada ao usuário. Ela deve conter exatamente 64 bits, ou seja, 8 caracteres da

    tabela ASCII padrão. Dois caracteres desta chave podem ser substituídos por um caractere de 16 bits databela ASCII expandida. Neste exemplo, a chave é a string ‘segredos’.

  • 8/17/2019 Relatório Final Do Projeto - Luís Filipe MB

    7/10

    Com estas entradas, o programa fornecerá como saída uma sequência de zeros

    e uns, correspondente a mensagem criptografada:

    Figura 4. Saída da mensagem criptografada. 

    Também é criado um arquivo chamado out_crip.txt  na pasta do projeto, com a

    sequência encriptada gravada nele.

    Já o projeto de decriptografia começa exibindo a seguinte mensagem:

    Figura 5. Mensagem inicial exibida na execução do programa de decriptografia. Aqui, a mensagem que

    será trabalhada é a sequência obtida na saída da criptografia.

    Esta entrada precisa necessariamente ter como tamanho um valor múltiplo de

    64 bits, pois a decriptografia atua em blocos de 64 bits. Após isso, o programa pedirá a

    chave de encriptação. Para obter os dados iniciais, devemos utilizar a mesma chave:

    Figura 6. Chave sendo solicitada ao usuário. Deve-se usar a mesma chave do programa anterior.

  • 8/17/2019 Relatório Final Do Projeto - Luís Filipe MB

    8/10

    Por fim, o programa irá devolver a mensagem original. Além disso, também cria

    um arquivo de texto chamado out_decrip.txt com a saída:

    Figura 7. Saída da mensagem decriptografada. 

    Como é possível perceber, a saída do programa de decriptação equivale a

    entrada do programa de encriptação.

    3.2 Exemplos de execução do sistema

    O código de criptografia é capaz de atuar em strings de qualquer tamanho, e o

    de decriptografia é capaz de atuar em sequências de zeros e uns de tamanhos múltiplos

    de 64. Vamos ver alguns exemplos de execução dos códigos para provar a sua

    funcionalidade.

     

    Utilizando chaves diferentes para a encriptação e decriptação, a saída final deveser diferente da mensagem:

  • 8/17/2019 Relatório Final Do Projeto - Luís Filipe MB

    9/10

      Deve ser possível atuar em mensagens menores que 8 caracteres:

      Deve ser possível atuar em mensagens de mais de 8 caracteres:

    A saída é muito grande para caber no recorte, mas foi criptografada com sucesso.

  • 8/17/2019 Relatório Final Do Projeto - Luís Filipe MB

    10/10

    4.  CONCLUSÕES

    O objetivo principal foi totalmente atingido, o algoritmo DES foi implementado

    com sucesso. Dos objetivos opcionais, apenas o primeiro foi implementado. Osprogramas encriptam e decifram mensagens de qualquer tamanho.

    Um ponto positivo do algoritmo é que ele cria um arquivo com a saída do

    programa, facilitando para o usuário nos casos de mensagens muito grandes. Um ponto

    negativo é que foram criados dois projetos distintos, um para criptografar e outro para

    decifrar, o que aumenta o trabalho necessário para todo o processo

    Nesta seção a equipe deverá comentar se os objetivos propostos na introdução

    e os algoritmos desenvolvidos foram capazes de solucionar o problema abordado ou

    não, baseados nos exemplos apresentados. Deverá ainda comentar sobre os pontospositivos e negativos do algoritmo e da implementação.

    5.  REFERÊNCIAS BIBLIOGRÁFICAS

    [1] Federal Information Processing Standards. FIPS 46-3, Data Encryption

    Standard. 1976. Disponível em: http://csrc.nist.gov/publications/fips/fips46-3/fips46-

    3.pdf . 

    [2] WIKIPEDIA. Cryptography. Disponível em:

    https://en.wikipedia.org/wiki/Cryptography. 

    [3] WIKIPEDIA. Data Encryption Standard. Disponível em:

    https://en.wikipedia.org/wiki/Data_Encryption_Standard. 

    [4] WIKIPEDIA. DES supplementary material. Disponível em:

    https://en.wikipedia.org/wiki/DES_supplementary_material. 

    [5] DES Step-by-step. Disponível em: http://dhost.info/pasjagor/des/start.php. 

    6.  APÊNDICE

    Projetos Java utilizados:

      Des_cripv2  –  projeto que faz a encriptação

      Des_decrip - projeto que faz o deciframento

    Cada um deles possui um código, de mesmo nome.

    http://csrc.nist.gov/publications/fips/fips46-3/fips46-3.pdfhttp://csrc.nist.gov/publications/fips/fips46-3/fips46-3.pdfhttp://csrc.nist.gov/publications/fips/fips46-3/fips46-3.pdfhttp://csrc.nist.gov/publications/fips/fips46-3/fips46-3.pdfhttps://en.wikipedia.org/wiki/Cryptographyhttps://en.wikipedia.org/wiki/Cryptographyhttps://en.wikipedia.org/wiki/Data_Encryption_Standardhttps://en.wikipedia.org/wiki/Data_Encryption_Standardhttps://en.wikipedia.org/wiki/DES_supplementary_materialhttps://en.wikipedia.org/wiki/DES_supplementary_materialhttp://dhost.info/pasjagor/des/start.phphttp://dhost.info/pasjagor/des/start.phphttp://dhost.info/pasjagor/des/start.phphttp://dhost.info/pasjagor/des/start.phphttps://en.wikipedia.org/wiki/DES_supplementary_materialhttps://en.wikipedia.org/wiki/Data_Encryption_Standardhttps://en.wikipedia.org/wiki/Cryptographyhttp://csrc.nist.gov/publications/fips/fips46-3/fips46-3.pdfhttp://csrc.nist.gov/publications/fips/fips46-3/fips46-3.pdf