You are on page 1of 10

ALGORITMO DE CRIPTOGRAFIA

DES EM JAVA
Relatrio final do projeto

Aluno: Lus Filipe Martins Barros Ra: 21000315


Processamento da Informao 2016.1 Prof. Cludia Abro

1. INTRODUO
1.1 Contextualizao
Criptografia, do grego krypts, segredo, e graphein, escrita, a utilizao de
cdigos e cifras para proteger informaes sigilosas. Os primeiros registros de
mensagens criptografadas remontam Mesopotmia, 1500 anos antes de Cristo.
Naquela poca, os materiais disponveis para aplicar os mtodos de encriptao
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 informaes. Enquanto
antes a capacidade de codificar e decifrar mensagens era limitada pela capacidade
humana, hoje temos computadores poderosos bilhes de vezes mais velozes que
qualquer mente humana, construdos especificamente para encriptar e decifrar
mensagens digitais.
Algoritmos de criptografia modernos utilizam uma chave para transformar
sequncias de dados em um emaranhado sem nexo de caracteres, tornando impossvel
para usurios ou softwares descobrirem a mensagem original sem saber qual foi a chave
utilizada no processo. O algoritmo DES no diferente. Criado no incio da dcada de 70
pela IBM, a pedido do rgo de padronizao do governo americano, que percebeu a
necessidade de ter um nico sistema de criptografia para todas as trocas de informaes
confidenciais do Estado, este algoritmo tem como base a criptografia Lcifer, de Horst
Feistel. Em 1976 foi decretado como padro americano (e por consequncia, tornou-se
tambm padro mundial) e permaneceu assim at 1999, quando foi atualizado para
uma verso mais forte, o Triplo-DES, devido ao medo que as novas geraes de
supercomputadores seriam capazes de quebrar a criptografia por fora bruta. A
alterao para 3-DES foi somente um paliativo at que um novo padro pudesse ser
estabelecido, o que ocorreu em 2002 com o surgimento do AES, substituto definitivo do
DES. Entretanto, a verso simples do DES continuou a ser utilizada em larga escala at
2004 e o 3-DES continuar a ser utilizado at 2030 para informaes sensveis, mas que
no chegam a ser confidenciais.
A criptografia DES est definida em um documento oficial do National Institute
of Standards and Technology (NIST), rgo de padronizao americano. Detalhes do
processo, como as tabelas de permutao e as tabelas S-Boxes, que so a alma do
processo de encriptao, podem ser verificados neste arquivo, que est disponvel no
site oficial do rgo. O fluxograma a seguir sintetiza todo o procedimento, desde a
estrada at a sada final do sistema:

Figura 1. Fluxograma do algoritmo de encriptao DES.

Como possvel perceber na imagem acima, 16 chaves so utilizadas, que so


obtidas da chave principal atravs de vrios deslocamentos de bits.

1.2 Motivao
A motivao para a escolha deste projeto foi a relevncia do tema e sua presena
no cotidiano da vida moderna. A compreenso do funcionamento de algoritmos de
criptografia e capacidade de implement-los pode ser uma habilidade til em diversas

carreiras, especialmente aquelas ligadas cincia da computao. A escolha do DES se


deve ao fato de ser um padro amplamente utilizado, com grau de complexidade
adequado para um programador de nvel intermedirio, e ainda pela sua similaridade
ao 3-DES, que relevante at os dias atuais. A linguagem Java foi preferida em relao
ao Portugol por estar presente em praticamente qualquer dispositivo tecnolgico
informacional, e por sua riqueza de bibliotecas e funes que podem ser teis na
implementao do algoritmo.

1.3 Objetivos
O objetivo primrio 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 sada
do programa dever ser uma sequncia de 64 bits. Alm disso, dever ser construdo
outro projeto em Java para realizar a decriptografia, tendo como entrada a sequncia
obtida do outro projeto e a mesma chave que foi utilizada. A sada dever ser
exatamente igual mensagem de 8 caracteres que foi a entrada do primeiro programa.
Aps o sucesso do objetivo primrio, achei razovel definir alguns objetivos
secundrios opcionais, para serem implementados a depender do tempo restante para
a entrega do trabalho. So eles:

Fazer com que seja possvel criptografar e decriptografar sries de dados de


qualquer tamanho, e no s 64 bits.
Fazer com que seja possvel criptografar e decriptografar arquivos do
computador do usurio.
Implementar interface grfica para tornar a utilizao mais amigvel ao usurio.
Implementar a opo de criptografar e decriptografar com algoritmo 3-DES.

2. DESENVOLVIMENTO
Neste projeto foram utilizadas diversas variveis, a maior parte deles vetores e
matrizes, alguns de inteiros, outros de chars ou strings. Alm disso, alguns vetores foram
usados para inserir as tabelas de permutao e expanso. Para a criptografia, as
principais variveis do mdulo main esto dispostas a seguir, com seus respectivos
significados:
key - chave ascii, 8 caracteres ascii
key_int - chave decimal, separada em 8 blocos
key_bin - chave binrio, separada em 8 blocos
key_in - chave pronta para o processo, vetor de 64 posies
key_pc1 - chave aps passar pela pc1

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 aps 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 binrio, separado em 8 blocos
data_in - dados que entraro no proceso, vetor de 64 posies
data_in_ip - data_in aps passar pela permutao inicial
data_left - bloco da esquerda para as rodadas de encriptao
data_right - bloco da direita para as rodadas de encriptao
data_r_exp - data_right aps passar pela expanso
data_r_xor - data_r_exp aps xor com subkey_pc2_char
data_sbox - data_r_xor aps passar pelas sbox (outro mtodo)
data_feistel - data_sbox aps passar por permutao P
data_xor_left - data_feistel aps xor com data_left
data_concat - blocos direito e esquerdo concatenados aps 16 rodadas de
encriptao
data_out - dados criptografados em binrio (data_concat aps permutao
final)
output - mensagem criptografada
As variveis criadas para realizarem permutaes so estas a seguir:
pc1 - vetor da tabela de permutao choice 1
pc2 - vetor da tabela de permutao choice 2
ip - vetor da tebela de permutao inicial
exp - vetor da tabela de expanso para o bloco da direita
p - vetor da permutao no fim da funo feistel
fp - vetor da tabela de permutao final
As variveis da decriptao so, na maior parte, as mesmas. A nica grande
diferena entre os dois processos que a primeira subchave se tornar a ltima, a
segunda se tornar a penltima e assim sucessivamente.
Tanto a criptografia como a decriptografia possuem duas funes: a funo main
e a funo sbox, que responsvel pela aplicao das tabelas de transformao. Esta
funo usa as seguintes variveis:
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 aps processo das sboxes, divididos em grupos de 4
data_sbox_out - data_sbox concatenada em um nico vetor

Alm disso, uma matriz tridimensional foi construda para armazenar os valores
das 8 tabelas de substituio que so necessrias:
sbox - matriz tridimensional com todas as 8 tabelas de substituio

3. SIMULAO 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 execuo do programa. Aqui, a mensagem que ser trabalhada
a string mensagem.

O usurio deve ento entrar com o texto que deseja encriptar. No necessrio
que tenha exatamente 8 caracteres, ele pode conter qualquer tamanho que for
necessrio. Ento, o programa pede a chave que ser aplicada, que dever conter
exatamente 64 bits:

Figura 3. Chave sendo solicitada ao usurio. Ela deve conter exatamente 64 bits, ou seja, 8 caracteres da
tabela ASCII padro. Dois caracteres desta chave podem ser substitudos por um caractere de 16 bits da
tabela ASCII expandida. Neste exemplo, a chave a string segredos.

Com estas entradas, o programa fornecer como sada uma sequncia de zeros
e uns, correspondente a mensagem criptografada:

Figura 4. Sada da mensagem criptografada.

Tambm criado um arquivo chamado out_crip.txt na pasta do projeto, com a


sequncia encriptada gravada nele.
J o projeto de decriptografia comea exibindo a seguinte mensagem:

Figura 5. Mensagem inicial exibida na execuo do programa de decriptografia. Aqui, a mensagem que
ser trabalhada a sequncia obtida na sada da criptografia.

Esta entrada precisa necessariamente ter como tamanho um valor mltiplo de


64 bits, pois a decriptografia atua em blocos de 64 bits. Aps isso, o programa pedir a
chave de encriptao. Para obter os dados iniciais, devemos utilizar a mesma chave:

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

Por fim, o programa ir devolver a mensagem original. Alm disso, tambm cria
um arquivo de texto chamado out_decrip.txt com a sada:

Figura 7. Sada da mensagem decriptografada.

Como possvel perceber, a sada do programa de decriptao equivale a


entrada do programa de encriptao.

3.2 Exemplos de execuo do sistema


O cdigo de criptografia capaz de atuar em strings de qualquer tamanho, e o
de decriptografia capaz de atuar em sequncias de zeros e uns de tamanhos mltiplos
de 64. Vamos ver alguns exemplos de execuo dos cdigos para provar a sua
funcionalidade.

Utilizando chaves diferentes para a encriptao e decriptao, a sada final deve


ser diferente da mensagem:

Deve ser possvel atuar em mensagens menores que 8 caracteres:

Deve ser possvel atuar em mensagens de mais de 8 caracteres:

A sada muito grande para caber no recorte, mas foi criptografada com sucesso.

4. CONCLUSES
O objetivo principal foi totalmente atingido, o algoritmo DES foi implementado
com sucesso. Dos objetivos opcionais, apenas o primeiro foi implementado. Os
programas encriptam e decifram mensagens de qualquer tamanho.
Um ponto positivo do algoritmo que ele cria um arquivo com a sada do
programa, facilitando para o usurio 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 necessrio para todo o processo
Nesta seo a equipe dever comentar se os objetivos propostos na introduo
e os algoritmos desenvolvidos foram capazes de solucionar o problema abordado ou
no, baseados nos exemplos apresentados. Dever ainda comentar sobre os pontos
positivos e negativos do algoritmo e da implementao.

5. REFERNCIAS BIBLIOGRFICAS
[1] Federal Information Processing Standards. FIPS 46-3, Data Encryption
Standard. 1976. Disponvel em: http://csrc.nist.gov/publications/fips/fips46-3/fips463.pdf.
[2] WIKIPEDIA. Cryptography. Disponvel em:
https://en.wikipedia.org/wiki/Cryptography.
[3] WIKIPEDIA. Data Encryption Standard. Disponvel em:
https://en.wikipedia.org/wiki/Data_Encryption_Standard.
[4] WIKIPEDIA. DES supplementary material. Disponvel em:
https://en.wikipedia.org/wiki/DES_supplementary_material.
[5] DES Step-by-step. Disponvel em: http://dhost.info/pasjagor/des/start.php.

6. APNDICE
Projetos Java utilizados:

Des_cripv2 projeto que faz a encriptao


Des_decrip - projeto que faz o deciframento

Cada um deles possui um cdigo, de mesmo nome.

You might also like