Upload
luis-filipe-martins-barros
View
217
Download
0
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