Sunteți pe pagina 1din 10

Nome: Andr Lucas de O.

Duarte
R.A.: 11058710
1) Criptografe uma mensagem de texto usando os algoritmos DES e AES. Mostre e compare a
sada do texto criptografado (em hexadecimal) com os dois algoritmos. Faa tambm o processo
inverso (decifrar a mensagem). O texto voltou ao original? O que acontece se voc usar uma chave
diferente na decriptografia?

A mensagem escolhida para o estudo em questo foi "UFABC". Inicialmente, foi gerada
uma chave aleatria de tamanho 64 na interface inicial do applet WebCry.

Figura 1 - Chave aleatria de tamanho 64 gerada pelo applet.


A chave obtida foi 26042F24E6EBCCB6. Utilizando-se esta chave com o algoritomo DES,
o resultado obtido foi:

Figura 2 - Criptografando "UFABC" com o algoritmo DES.

Figura 3 - Bloco cifrado com o DES.


Com esta chave e o algoritmo DES, "UFABC" (em hexadecimal 5546414243) torna-se
"r#>" ou "72D39EB5DCEA193E" em hexadecimal.
Repetindo o mesmo procedimento para o algoritmo AES, o resultado obtido :

Figura 4 - Texto cifrado com o algoritmo AES.


Neste caso, a chave utilizada foi "0480CF05F21CA2175330671C32EAAF84" e "UFABC"
se tornou "29x#qb#U#@C#", ou hexadecimal "323978B813716212551B4043F51A94D4".
Para ambos os algoritmos, foi possvel retornar ao texto plano "UFABC", desde que a
mesma chave usada para encriptao tenha sido usada na decriptao. Caso contrrio, no
possvel retornar ao texto plano original.
2) Faa a criptografia de uma mensagem de texto usando o algoritmo DES e verifique a sada
(texto criptografado). Faa novamente a criptografia, usando a mesma chave. A sada permanece
igual? Altere um caractere na mensagem de texto e faa a criptografia com a mesma chave usada
anteriormente. O que possvel observar?
Utilizando-se da chave 66760DC10AD4C74B, UFABC torna-se "o"av"
(6F22EF61FBDA76E4 em hexadecimal) sempre. Alterando "UFABC" para "UFABD", o texto cifrado
torna-se "#6#Z" (14BA36F09B135AC3 em hexadecimal), o que algo completamente diferente do
obtido com o texto plano original "UFABC".
3) Faa o mesmo processo do exerccio anterior, agora com os algoritmos AES e IDEA. Analisando
o texto criptografado, possvel verificar diferenas entre os algoritmos?
Para o algoritmo AES, a chave C2719AC7F38529A4A4D692FE72AC63E7 gera ;##0
L/R#Bx, ou 3B9B0C1511300A4CD62FF6520E4278B7 em hexadecimal. E o resultado o mesmo
sempre. Alterando o texto plano para "UFABD", o resultado obtido B####HyZ, ou
4204871B1ACBEFDE86EB0E48795AB2B2 em hexadecimal. Resultados bastante diferentes, apesar de
ter se alterado apenas um caracter no texto plano.

J no algoritmo IDEA, para uma chave 1891FBB8AB52D546D6B3E56E8C0B32A3, "UFABC"


torna-se "_JFB" ou E1965F4ABCEA4642 em hexadecimal. O texto cifrado o mesmo sempre.
Alterando-se o texto plano para "UFABD", obtm-se "o# 7| ", ou 6F19B79D9E377C20 em
hexadecimal.
A diferena que salta aos solhos, que o texto cifrado com IDEA mais curto do que o cifrado
com AES.

4) Gere uma chave do algoritmo RSA. Mostre qual a chave pblica e a chave privada.

Uma chave de tamanho 24 gerada foi:


e: 44571D
d: 4AB435
n: 00AD1955
Onde "e" a chave pblica e "d" a chave privada.
5) Faa a criptografia de mensagens de texto usando diferentes tamanhos de chave do RSA.
Mostre e compare a sada (texto criptografado).

Criptografou-se "UFABC" com 4 chaves de tamanhos 24, 512, 768 e 1024, respectivamente.
Os textos criptografados obtidos, foram respectivamente:

O#@/<

2u^

\<#mH``X<"#ZI#mt1a#!W6b#uJ)JW4d
%NB#L,8?*D|}>[ {[

j#L#X)gT=5#yTc\k#6#SK<}+#J#^.hi?
=Z$l##ZPN# u#v i1u#g  #.=I#]@ #+'

X##~s#%:#J#y`'T][wZ#dWSj-#&i[3H+

Percebe-se que, aumentado-se o tamanho da chave, no apenas o texto cifrado torna-se mais
longo, como tambm torna-se mais difcil a descoberta do texto plano original.

6) Cifre um arquivo pdf usando um algoritmo simtrico. Tente abrir o arquivo cifrado. Faa a
decifragem do arquivo e tente abrir novamente. Descreva o que foi observado.
O arquivo escolhido para ser cifrado foi o prprio roteiro desta atividade. Aps ser cifrado, no
foi possvel abrir o arquivo para leitura. Aps decifrar o arquivo, foi possvel abri-lo para leitura.

7) Criptografe arquivos de diversos tamanhos (de poucos KB at vrios MB) usando os algoritmos
DES, AES e RSA. Faa uma tabela comparativa em relao ao tempo de execuo e explique os
resultados obtidos.

Tabela 1 - Tempo gasto em segundos para encriptamento de arquivos pdf.


Tamanho

DES (s)

AES (s)

RSA (s)

100KB

0.01

0.004

0.39

200KB

0.019

0.012

0.735

2.22MB

0.225

0.095

7.883

6.57MB

0.73

0.277

25.702

Observando-se a tabela acima, percebe-se que o tempo gasto cresce conforme o tamanho do
arquivo cresce em todos os algoritmos. Porm, percebe-se que o algoritmo RSA tem drsticas mudanas
no tempo gasto, principalmente da segunda linha para a terceira linha, onde o tamanho do arquivo
aumentou ~10 vezes, e o tempo gasto aumentou proporcionalmente ~10 vezes.

8) Criptografe alguns arquivos (maiores que 3 MB) utilizando os algoritmos DES e AES.
Compacte os arquivos originais e criptografados (usando WinZip, WinRAR, etc). Compare e
explique os resultados obtidos em relao ao tamanho dos arquivos compactados.

Tabela 2 Tamanho de arquivos originais e compactados em .zip com e sem criptografia.


Original

Compactado (zip)

DES

AES

6733KB

6320KB

6591KB

6665KB

12504KB

12175KB

12498KB

12506KB

38273KB

38070KB

38207KB

38268KB

Analisando os dados acima, chega-se concluso de que os arquivos criptografados, quando


compactados apresentam tamanho maior do que o arquivo original. Isso se deve, talvez, ao fato de
que alguns caracteres menos usuais, e que, portanto, so codificados com um nmero maior de bits,
surgem nos textos cifrados, o que se traduz em um maior tamanho de arquivo. Ou tambm, algumas
propriedades (redundncia no arquivo) que levam uma maior taxa de compactao, normalmente
so perdidas no processo de criptografia, devido ao objetivo de dificultar a descoberta do texto
plano por terceiros.

9) Execute o programa StringEncrypter.java (usando NetBeans):


a) Quais so os mtodos do Java usados para gerar chaves, criptografar e decriptografar?

Mtodo responsvel por gerar chaves: generateKey()


Mtodo responsvel por criptografar: encrypt()
Mtodos responsvel por decriptografar: decrypt()
b) Verifique o funcionamento do programa (cifragem/decifragem).

Figura 5 Funcionamento do programa Java


c) A chave de criptografia pode ser gerada a partir de uma senha. Esta senha combinada com
um nmero, chamado de salt, servindo como semente para gerao da chave. Modifique a senha
de gerao de chave (testUsingPassPhrase) para teste-aula". Execute o programa vrias vezes. O
texto criptografado sempre igual para uma mesma senha? E para senhas diferentes? Explique.
Para uma dada senha, o texto criptografado sempre o mesmo. Senhas diferentes fornecem
textos criptografados diferentes. Isso acontece pois foi implementado neste programa Java o que
conhecido por Password-Based Encryption (PBE), onde a chave secreta gerada com base numa
senha. Assim, senhas diferentes levam chaves diferentes, que levam a textos criptografados diferentes,
enquanto senhas iguais, geram a mesma chave, que gera o mesmo texto criptografado.

10) Crie e implemente (em qualquer linguagem de programao) um algoritmo de


criptografia de bloco usando a cifra de Feistel com dois estgios, conforme figura abaixo. A
entrada deve ser um bloco de 8 bits. A chave deve ter 4 bits (escolha uma chave qualquer).
Verifique manualmente se o processo de criptografia e decriptografia foi implementado
corretamente. (obs: o algoritmo criado deve ser aplicado na funo F).
Foi criado dois scripts .m em MatLAB para solver o problema. Um para a criptografia e
outro para decriptografia.
A chave me escolhida foi 1110. As chaves K0 e K1, derivadas da chave me, foram obtidas
como a primeira permutao e segunda permutao circular da chave me, portanto K0 = 0111 e K1
= 1011. A funo F, foi designada para fazer um XOR entre o vetor Ri invertido com a chave de
cada turno. Como exemplo, tomemos o texto plano P = 00100110. O processo de criptografia :
Primeiro estgio:
L0 = 0010
R0 = 0110
F(R0,K0) = XOR(0110,0111) = 0001

Segundo estgio
L1 = R0 = 0110
R1 = XOR(L0,F(R0,K0)) = XOR(0010,0001) = 0011
F(R1,K1) = XOR(1100,1011) = 0111
Texto Cifrado
L2 = R1 = 0011
R2 = XOR(L1,F(R1,K1)) = XOR(0110,0111) = 0001
C = R2 L2 = 00010011
No processo de decriptografia, tem-se:
Primeiro estgio
R2 = 0001
L2 = 0011
F(L2,K1) = XOR(1100,1011) = 0111
Segundo Estgio
R1 = L2 = 0011
L1 = XOR(R2,F(L2,K1)) = XOR(0001,0111) = 0110
F(L1,K0) = XOR(0110,0111) = 0001
Texto Plano
R0 = L1 = 0110
L0 = XOR(R1,F(L1,K0)) = XOR(0011,0001) = 0010
P = L0 R0 = 001000110
As funes criadas em MatLAB forneceram o seguinte resultado:

Figure 5 Resultados obtidos no MatLAB

Percebe-se que os clculos manuais e o obtido com os scripts fornecem os mesmos


resultados.
Ambos scripts so fornecidos abaixo:
%
%
%
%
%
%

Esta funo foi desenvolvida como soluo do ltimo problema


do roteiro de laboratrio 1 da disciplina EN3611 - Segurana de Redes
da UFABC, 3Q2015, ministrada pelo professor Joo Henrique Kleinschmidt.
Aluno: Andr Lucas de O. Duarte
R.A. : 10058710
ltima Modificao: 06/10/2015

function C = encFeistel(P)
% Est funo recebe como entrada um texto plano de 8 bits e encripta
% utilizando um algoritmo de Feistel de dois estgios. Para decifrar o
% texto cifrado C, deve-se usar a funo decFeistel.
% Chave escolhida
chave = [1 1 1 0];
% Chaves derivadas da chave "me"
K0 = circshift(chave,[0 1]);
K1 = circshift(chave,[0 2]);
% Primeiro Estgio
L0 = P(1:4);
R0 = P(5:8);
F0 = xor(fliplr(R0),K0);
% Segundo Estgio
L1 = R0;
R1 = xor(L0,F0);
F1 = xor(fliplr(R1),K1);
% Texto Cifrado
L2 = R1;
R2 = xor(L1,F1);
C = [R2 L2];

%
%
%
%
%
%

Esta funo foi desenvolvida como soluo do ltimo problema


do roteiro de laboratrio 1 da disciplina EN3611 - Segurana de Redes
da UFABC, 3Q2015, ministrada pelo professor Joo Henrique Kleinschmidt.
Aluno: Andr Lucas de O. Duarte
R.A. : 10058710
ltima Modificao: 06/10/2015

function P = decFeistel(C)
% Est funo recebe como entrada um texto cifrado de 8 bits e decripta
% utilizando um algoritmo de Feistel de dois estgios. Para cifrar o
% texto plano P, deve-se usar a funo encFeistel.
% Chave escolhida
chave = [1 1 1 0];
% Chaves derivadas da chave "me"
K0 = circshift(chave,[0 1]);
K1 = circshift(chave,[0 2]);
% Primeiro Estgio
R2 = C(1:4);
L2 = C(5:8);
F2 = xor(fliplr(L2),K1);

% Segundo Estgio
R1 = L2;
L1 = xor(R2,F2);
F1 = xor(fliplr(L1),K0);
% Texto Plano
R0 = L1;
L0 = xor(R1,F1);
P = [L0 R0];
L0 = xor(R1,F1);
P = [L0 R0];

S-ar putea să vă placă și