You are on page 1of 17

Projeto e Anlise de Algoritmos Algoritmos com Strings

T1530A, T7043A

VII. Algoritmos

com Strings

Verso 0.0

Observao
Esta a primeira verso desta apostila. Ela ainda deve passar por revises adicionais para correo de erros de digitao, de portugus, alm da correo de erros de formatao. Este material no substitui a bibliografia indicada para a disciplina, devendo ser considerado como material complementar. Os alunos devem consultar a bibliografia indicada no final do texto.

Projeto e Anlise de Algoritmos Algoritmos com Strings

Sumrio
VIII.Table

of Contents

Projeto e Anlise de Algoritmos Algoritmos com Strings

IX. Introduo
Muitas tarefas executadas em computao envolvem o manuseio de seqncias de caracteres. Entre elas podem ser citadas:

Criptologia. Busca em strings Busca de padro Compresso de dados

Em cada uma das reas citadas existe um grande nmero de algoritmos cuja desempenho fortemente dependente da freqncia de ocorrncia de dados manipulados. Neste captulo estudaremos alguns desses algoritmos.

1 Criptologia
O objeto de estudo da criptologia a criao ou identificao de chaves que codificam mensagens A criptologia est dividida em duas sub-reas:

Criptografia, voltada para criao de mtodos para codificar (ou cifrar) mensagens, e

e decodificar

Criptoanlise, voltada para a criao de mtodos para decifrar mensagens codificadas (sem o conhecimento prvio da chave utilzada para a codificao).

CHAVE (key) um conceito fundamental em criptologia. As mensagens so cifradas a partir da utilizao de uma chave. A natureza dessa chave est relacionada com o mtodo de codificao. Os algoritmos de criptografia podem ser classificados em termos de como se utilizam as chaves:

Criptografia simtrica: a mesma chave utilizada para criptografar e decifrar a mensagem. Criptografia assimtrica, tambm denominada criptografia de chave pblica (public key): a chave para criptografar os daods (chave pblica) diferente da chave utilizada para decifr-los (esta ltima denominada chave privada). As duas chaves trabalham em conjunto, de forma que somente uma chave privada especfica pode decifrar os dados codificados com uma dada chave pblica.

Aplicaes:

Dinheiro digital: permite transaes financeiras autenticadas, mas no rastreadas; Cartes inteligentes (tipo de crdito): cartes plsticos que contem computadores e uma pequenas quantidade de memria; Provedores de autenticao: para resolver o problemas de duas pessoas conversando na rede de modo seguro. As pessoas trocam chaves, de forma a ter certeza que a mensagem enviada seja decifrada somente pelo ouvinte de destino autorizado;

e-mail: codificao de mensagens importantes;


pgina3

Prof. Angelo Passaro

Projeto e Anlise de Algoritmos Algoritmos com Strings

Segurana Nacional: Codificar pequenas mensagens ou mesmo documentos importantes.

Neste captulo, nossa ateno estar voltada para um conjunto de mtodos criptogrficos. Consideremos a seguinte mensagem: A PROVA SERA DIFCIL a qual utilizaremos para estudar alguns mtodos de codificao (acentos, nmeros e outros sinais grficos no sero considerados, mas sua incluso no traz dificuldades).

Codificao de Caeser
Neste mtodo, a n-sima letra do alfabeto substituida pela (n+K)-sima, onde K uma constante (a chave). Assim, se K = 3, a mensagem acima definida codificada como segue: DCSURYDCVHUDCGLILFLO O processo completo, apesar de simples, ilustrado a seguir. A tabela de converso que usaremos para acompanhar as substituies a seguinte: 0 1 2 3 C 4 D E 5 F 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 J K L M N O P Q R S T U V W X Y Z

A B

G H I

Como comentado anteriormente, possvel estender esta tabela para considerar outros simbolos. Codificao: A P R O V A 3 3 3 S E R A D I 9 3 L F 6 3 I I 9 3 L C 3 3 F I 3 L 3

Mensagem original Chave (K) Chave aplicada Mensagem cifrada

Traduo para tabela 1 0 16 18 15 22 1 0 19 5 18 1 0 4 3 3 3 D C S 3 3 3 3 3 3 3 3

9 12

4 3 19 21 18 25 4 3 22 8 21 4 3 7 12 9 12 6 12 15 U R Y D C V H U D C G L O

O algoritmo deve considerar o caso da aplicao da chave resultar um nmero maior que o tamanho da tabela (no nosso exemplo, esse tamanho 27). Por exemplo, se a aplicao da chave resulta 29, subtrai-se 27, resultando 2. Para decodificar a mensagem para executar o processo no sentido contrrio, ou seja, subtrai-se da mensagem cifrada o valor da chave. Se o valor resultante for menor que zero, soma-se 27. Este algoritmo um algoritmos simtrico, pois K (ou seja, a chave) a mesma para cifrar e para decifrar a mensagem. O mtodo de Caeser , obviamente, muito fraco, pois bastam 27 tentativas para identificar a chave de
Prof. Angelo Passaro pgina4

Projeto e Anlise de Algoritmos Algoritmos com Strings

codificao. Mesmo que a tabela seja substancialmente maior, o tempo necessrio para decifrar a chave (e portanto decifrar a mensagem) aumenta linearmente com o tamanho da tabela.

Tabela de substituio
Neste mtodo criada uma tabela com valores embaralhados, e a codificao obtida por substituio, conforme ilustrado a seguir. 0 1 C 2 3 C 4 D E 5 F 6 7 E 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 J K L M N O P K J Z Q R S T U V W X Y Z R P Q I D B N M L V X W U V S

A B

G H I

H A T

O G F

Mensagem original : A PROVA SERA DIFCIL Mensagem codificada : C ZXJSC WOXC TDGDADM Em princpio, o mtodo mais forte que a codificao de Caeser. Existem 27! (vinte e sete fatorial) > 10 28 opes de tabela de substituio. Contudo, pode-se utilizar alguns estratagemas para desvendar o cdigo:

freqncia de ocorrncias de letras na mensagem versus freqncia na linguagem de origem; ocorrncia de dgrafos (em portugus: lh, nh, oe, ao, qu, mp, mb....)

o que reduz em muito as tentativas para decifrar a mensagem.

Codificao de Viginere
A codificao de Viginere um mtodo simtrico. Neste mtodo uma chave pequena usada repetidamente determinando diferentes valores de K para cada letra da mensagem. K CHAVE MENSAGEM TEXTO CIFRADO O algoritmo apresentado a seguir. Neste algoritmo, pressupe-se que o vetor de mensagem original permanece inalterado e que o nmero de elementos na tabela de converso, denominado n_tabela, conhecido. Neste algoritmo supomos a tabela de converso apresentada no algoritmo de Caeser com um total de 27 elementos, inclundo o espao em branco. Dados de entrada: Mensagem, Chave : Strings
Prof. Angelo Passaro pgina5

14 15 20 N A O O O T P I

1 A R S

14 15 20 N O B O V J T A U

1 A A

14 15 20 N S F O E T T R K

1 A A B

14 15 20 N N O D S T I B

1 A F G

14 15 20 N I W O C R T I B

1 A L M

Projeto e Anlise de Algoritmos Algoritmos com Strings

nm, nc : inteiros (* nmero de caracteres da mensagem e da chave, respectivamente *) (* VAL e STR so funes que transformam caractere em nmero e vice-versa, utilizando a tabela de converso *) Viginere (Mensagem, Chave: String, nm, nc : inteiro) : String declarao de variveis i, ndice_chave : inteiro n_tabela : inteiro chave_num [1 .. nc]:inteiro { chave transformada em nmero inteiro, caractere a caractere } mens_cifrada : String val_car : inteiro { carctere convertido em inteiro } incio n_tabela = 27; para i = 1 at nc faa indice_chave = 1; para i = 1 at nm faa inicio para val_car = VAL(Mensagem[i]); val_car = val_car + chave_num[indice_chave]; se val_car > n_tabela ento val_car = val_car n_tabela; mens_cifrada[i] = STR(val_car) se indice_chave >= nc ento seno fim para retorna mens_cifrada; fim Ordem do algoritmo: As funes STR e VAL envolvem busca em uma tabela. Isto significa que a ordem depende do algoritmo de busca escolhido. Se a busca binria o algoritmo O(log (n_tabela)). A chamada s funes realizada no interior de uma instruo de repetio de nm iteraes. Desta forma, o algoritmo apresentado O(nm * log(n_tabela)). No caso apresentado acima, a tabela de converso apresenta 27 elementos, o que significa que log (n_tabela) , aproximadamente, 6. Portanto, o algoritmo O(N). indice_chave = 1; indice_chave = indice_chave + 1;

chave_num[i] = VAL(Chave[i]);

Codificao em binrio
A codificao em binrio um mtodo muito simples e, tambm, muito utilizado. A mensagem e a chave so codificados em binrio e a codificao obtida a partir da realizao de uma operao ouexclusivo, ou XOR, bit a bit. Este tambm um mtodo de criptografia simtrica. Conhecida a chave, a mesma operao XOR utilizada para decifrar a mensagem.
Prof. Angelo Passaro pgina6

Projeto e Anlise de Algoritmos Algoritmos com Strings

Exemplo para a codificao de uma nica letra: Codificao em binrio A Chave XOR Chave XOR 01000001 01110011 00110010 01110011 01000001 Mensagem decodificada Mensagem original Chave de oito bits Texto codificado

As demais letras da mensagem seguem o mesmo esquema. Note que a chave no precisa ser de 8 bits.

Exerccio: Codifique (codificao binria) a mensagem de exemplo, considerando a chave binria apresentada na tabela acima.

Codificao DES (Data Criptografia de Dados)

Encryption

Standard

Padro

de

Trata-se de um mtodo muito popular de criptografia simtrica de bloco. Este cdigo processa os dados em sees de tamanho pr-determinado (bloco de 64 bits). Se a quantidade de dados no mltiplo de 64 bits deve-se utilizar apoio de aplicao especfica. Funcionamento: O DES baseado no princpio da confuso e difuso. O bloco de mensagem criptografado a partir da execuo de uma srie de 16 (dezesseis) permutaes e substituies no texto. As permutaes e substituies afetam o texto original por meio de 16 subchaves , derivam de uma chave inicial

K 1 , K 2 , K 3 ..... K 15 , K 16 , que

K 0 (fornecida pelo usurio ou sistema). Para codificar o texto, cada K 1 , K 2 , K 3 ..... K 15 , K 16 . A aplicao de cada uma K 16 , K 15 ... K 3 , K 2 , K 1 .

subchave aplicada aos dados na ordem

dessas chaves denominada rodada (round). Para decifrar um bloco de texto cifrado utililza-se o mesmo processo, porm com as chaves aplicadas no sentido oposto: Obteno das sub-chaves: O DES utiliza uma chave de 56 bits e no de 64. A chave de 64 bits inicialmente fornecida inclui 8 bits de verificao de paridade (um bit em cada oito utilizado para essa verificao). Os bits de paridade so utilizados quando o DES implementado em hardware, porm, de maneira geral, essa verificao no efetuada quando o DES implementado em software e os bits de paridade so simplesmente ignorados. O primeiro passo para obter a chave de 56 bits realizar uma transformao de chave. Essa transformao pode ser feita via uma tabela, que relaciona os bits da chave original com os da chave transformada. Um exemplo desse procedimento apresentado na tabela 1.
Prof. Angelo Passaro pgina7

Projeto e Anlise de Algoritmos Algoritmos com Strings

Tabela 1: Um exemplo de transformao de chave em DES. O contedo deve ser lido da esquerda para a direita e de cima para baixo. Os bits so numerados a partir de 1.

57 10 63 14

49 2 55 6

41 59 47 61

33 51 39 53

25 43 31 45

17 35 23 37

9 27 15 29

1 19 7 21

58 11 62 13

50 3 54 5

42 60 46 28

34 52 38 20

26 44 30 12

18 36 22 4

A interpretao da tabela a seguinte: cada posio p da tabela contm o nmero do bit da chave original. Desta forma, o nmero 57 na posio um da tabela, indica que nesta posio fica o bit 57 da chave original; na posio 2 da chave transformada fica o bit 49, na posio 14 da chave transformada fica o bit 18 da chave original, na posio 15 fica o bit 10, e assim por diante. A chave transformada de 56 bits. Note que os bits mltiplos de 8 (8, 16, 24, ...) no aparecem na tabela, pois correspondem aos bits de paridade que foram ignorados. Uma vez obitda a chave de 56 bits, computam-se as subchaves. Para tal, segue-se o procedimento apresentado na figura 1. A chave de 56 bits dividida em dois blocos de 28 bits cada. Para a construo de cada subchave, gira-se cada bloco de 28 bits um certo nmero de bits para a esquerda. Esse nmero de bits depende da rodada de construo da subchave, e pode ser definido a partir de uma tabela, como a apresentada na tabela 2.
Tabela 2 : Nmero de rotaes de bits por rodada (round) para a construo de subchaves DES.

Rodada Rotao de bits

1 1

2 1

3 2

4 2

5 2

6 2

7 2

8 2

9 1

10 2

11 2

12 2

13 2

14 2

15 2

16 1

Uma vez realizada a rotao para cada rodada, os campos de 28 bits so novamente reunidos, e destes so escolhidos 48 bits para formar as subchaves (os outros oito so descartados). Esta operao denominada opo, ou escolha, de permuta. Sua implementao tambm pode ser feita a a partir de uma tabela, a qual indicar quais bits da subchave de 56 bits formada pela reunio dos blocos de 28 sero utilizados para montar a subchave de 48 bits. Um exemplo apresentado na tabela 3.
Tabela 3: Escolha permutada para a criao de uma subchave DES de 48 bits.

14 23 41 44

17 19 52 49

11 12 31 39

24 4 37 56

1 26 47 34

5 8 55 53

3 16 30 46

28 7 40 42

15 27 51 50

6 20 45 36

21 13 33 29

10 2 48 32

O processo repetido para cada uma das subchaves, de forma a assegurar que, em cada rodada, os dados sejam codificados com subchaves que apresentam bits diferentes dos da chave original.
Prof. Angelo Passaro pgina8

Projeto e Anlise de Algoritmos Algoritmos com Strings

K0 (64 bits) Transformao de chave

K0 (56 bits)

(28 bits)
Girar bits para a esquerda

(28 bits) Reunir


Girar bits para a esquerda

Escolha permutada Subchave para a primeira rodada (round 1)

K1 (48 bits)

(28 bits)
Girar bits para a esquerda

(28 bits) Reunir


Girar bits para a esquerda

Escolha permutada Subchave para a oitava rodada (round 8)

K8 (48 bits)

(28 bits)
Girar bits para a esquerda

(28 bits) Reunir


Girar bits para a esquerda

Escolha permutada Subchave para a decima-sexta rodada (round 16)

K16 (48 bits)

Figura 1 - Esquema de criao de suchaves DES


Prof. Angelo Passaro pgina9

Projeto e Anlise de Algoritmos Algoritmos com Strings

Codificando e decodificando mensagens (blocos de dados) Uma vez obtidas as subchaves, pode-se codificar ou decodificar blocos de dados. Novamente, o processo envolve um conjunto de permutaes, Figura 2. O passo inicial envolve a permutao de um bloco de 64 bits de dados, conforme uma tabela pr-definida, Tabela 4. Esta permutao, denominada permutao inicial, no aumenta a segurana da codificao DES. Trata-se de uma herana dos primrdios da definio do padro, e deve ser executada. Completada a permutao inicial, o bloco de dados submetido ao conjunto de 16 rodadas, passando por um conjunto de operaes repetitivas.
Tabela 4: Permutao inicial para blocos de dados no padro DES.

58 62 57 61

50 54 49 53

42 46 41 45

34 38 33 37

26 30 25 29

18 22 17 21

10 14 9 13

2 6 1 5

60 64 59 63

52 56 51 55

44 48 43 47

36 40 35 39

28 32 27 31

20 24 19 23

12 16 11 15

4 8 3 7

Inicialmente, o bloco de dados permutado dividido em dois blocos de 32 bits, denominados L0 e R0. Para cada rodada i, computa-se Li e Ri, partindo de Li-1 e Ri-1. Li e Ri so ento utilizados pela rodada seguinte, at se conseguir o bloco de dados R16L16. Ri-1 expandido de 32 para 48 bits, utilizando-se uma tabela de permutao de expanso (efeito de difuso 1 bit no bloco de dados afeta mais bits no procedimento seguinte). Observem o efeito na Tabela 5 (prestem ateno nas casas em destaque),
Tabela 5 Permutao de Expanso para blocos de dados em DES.

32 8 16 24

1 9 17 25

2 10 18 26

3 11 19 27

4 12 20 28

5 13 21 29

4 12 20 28

5 13 21 29

6 14 22 30

7 15 23 31

8 16 24 32

9 17 25 1

Completada a permutao de expanso em Ri-1, a qual denotaremos por E(Ri-1), realiza-se uma operao XOR, a qual ser denotada por , entre esta e a subchave Ki de 48 bits. Esta operao produz um resultado intermedirio que denominaremos Rint . Matematicamente, estas operaes podem ser expressas pela seguinte equao: Rint = E(Ri-1) Ki.

Em seguida, Rint passa por oito substituies executadas com oito caixas-S (S-boxes) separadas. Cada caixa-S j recebe um bloco de seis bits, da posio 6j para 6j+6 em Rint e busca um valor de 4 bits numa tabela (na verdade um conjunto de tabelas).
Prof. Angelo Passaro

O valor encontrado gravado em um buffer


pgina10

na posio 4j. A tabela 6 apresenta as substituies referentes a algumas das caixas-S.

Projeto e Anlise de Algoritmos Algoritmos com Strings

Mensagem ou

texto cifrado

Permutao inicial

L0 (32 bits)

R0 (32 bits)

Permutao de expanso Codificao K = K1

Substituies S-box Permutaes P-box

ou decodificao K = K16

L1 = R0 Primeira rodada Permutao de expanso Codificao K = K2 R1 = L0 f(R0,K)

Substituies S-box Permutaes P-box

ou decodificao K = K15

L2 = R1 Segunda rodada R2 = L1 f(R1,K)

Codificao K = K16

Permutao de expanso Substituies S-box Permutaes P-box

ou decodificao K = K1

R16 = L15 f(R15,K) Decima sexta rodada

L16 = R15

Permutao final Texto cifrado ou Mensagem Figura 2: Esquema de codificao e decodificao DES
Prof. Angelo Passaro pgina11

Projeto e Anlise de Algoritmos Algoritmos com Strings

Tabela 6: Substituies de Caixa-S. Caixa-S 1

14 0 4 15

4 15 1 12

13 7 14 8

1 4 8 2

2 14 13 4

15 2 6 9

11 13 2 1

8 1 11 7

3 10 15 5

10 6 12 11

6 12 9 3

12 11 7 14

5 9 3 10

9 5 10 0

0 3 5 6

7 8 0 13

Caixa-S 2

15 3 0 13

1 13 14 8

8 4 7 10

14 7 11 1

6 15 10 3

11 2 4 15

3 8 13 4

4 14 1 2

9 12 5 11

7 0 8 6

2 1 12 7

13 10 6 12

12 6 9 0

0 9 3 5

5 11 2 14

10 5 15 9

Caixa-S 3

10 13 13 1

0 7 6 10

9 0 4 13

14 9 9 0

6 3 8 6

3 4 15 9

15 6 3 8

5 10 0 7

1 2 11 4

13 8 1 15

12 5 2 14

7 14 12 3

11 12 5 11

4 11 10 5

2 15 14 2

8 1 7 12

Caixa-S 4

7 13 10 3

13 8 6 15

14 11 9 0

3 5 0 6

0 6 12 10

6 15 11 1

9 0 7 13

10 3 13 8

1 4 15 9

2 7 1 4

8 2 3 5

5 12 14 11

11 1 5 12

12 10 2 7

4 14 8 2

15 9 4 14

Caixa-S 5

2 14 4 11

12 11 2 8

4 2 1 12

1 12 11 7

7 4 10 1

10 7 13 14

11 13 7 2

6 1 8 13

8 5 15 6

5 0 9 15

3 15 12 0

15 10 5 9

13 3 6 10

0 9 3 4

14 8 0 5

9 6 14 3

Caixa-S 6

12 10 9 4

1 15 14 3

10 4 15 2

15 2 5 12

9 7 2 9

2 12 8 5

6 9 12 15

8 5 3 10

0 6 7 11

13 1 0 14

3 13 4 1

4 14 10 7

14 0 1 6

7 11 13 0

5 3 11 8

11 8 6 13

Prof. Angelo Passaro

pgina12

Projeto e Anlise de Algoritmos Algoritmos com Strings

Caixa-S 7

4 13 1 6

11 0 4 11

2 11 11 13

14 7 13 8

15 4 12 1

0 9 3 4

8 1 7 10

13 10 14 7

3 14 10 9

12 3 15 5

9 5 6 0

7 12 8 15

5 2 0 14

10 15 5 2

6 8 9 3

1 6 2 12

Caixa-S 8

13 1 7 2

2 15 11 1

8 13 4 14

4 8 1 7

6 10 9 4

15 3 12 10

11 7 14 8

1 4 2 13

10 12 0 15

9 5 6 12

3 6 10 9

14 11 13 0

5 0 15 3

0 14 3 5

12 9 5 6

7 2 8 11

As tabelas das caixas-S so utilizadas como segue: 1. Procure a caixa-S j 2. Procure o nmero da fileira correspondente aos dois bits formados a partir do primeiro e do ltimo bit do bloco de seis bits (a fileira comea a ser contada do ndice zero); 3. Procure a coluna correspondente ao valor de quatro bits formado a partir dos bits do meio do bloco de seis bits (a coluna comea a ser contada a partir do ndice zero). 4. O valor codificado corresponde aos valor localizado na fileira e coluna identificadas nos dois passos anteriores, no formato binrio. Por exemplo, seja um conjunto de seis bits de Rint com os valores 101011, e vamos assumir que este conjunto esteja associado caixa-S 3. O primeiro e o sexto bits formam o valor 11 em binrio (112), o que corresponde ao valor decimal 3. Desta forma, estamos interessados na fileira 3, contada a partir de zero. Os quato bits do meio, 01012, que em binrio corresponde a 10012. As caixas-S confundem os dados e so as principais responsveis pela segurana do DES. Completadas as substituies das caixas-S, o resultado um valor de 32 bits que deve ainda ser permutado utilizando uma caixa-P, Tabela 7.
Tabela 7: Permutao de caixa-P.

corresponde ao valor decimal 5. Ou seja estamos

interessados na quinta coluna, contada a partir de zero. Consultando a tabela, encontramos o valor 9,

16 2

7 8

20 24

21 14

29 32

12 27

28 3

17 9

1 19

15 13

23 30

26 6

5 22

18 11

31 4

10 25

A permutao final, representada pela Tabela 8, desfaz o efeito da permutao inicial.

Prof. Angelo Passaro

pgina13

Projeto e Anlise de Algoritmos Algoritmos com Strings

Tabela 8: Permutao final

40 38 36 34

8 6 4 2

48 46 44 42

16 14 12 10

56 54 52 50

24 22 20 18

64 62 60 58

32 30 28 26

39 37 35 33

7 5 3 1

47 45 43 41

15 13 11 9

55 53 51 49

23 21 19 17

63 61 59 57

31 29 27 25

Comentrios finais sobre o procedimento DES Com DES dados so codificados ou decodificados executando uma srie de permutaes e substituies. A forma como essas operaes afetam os dados dependente das 16 subchaves derivadas da chave inicial fornecida pelo usurio ou pelo sistema. A segurana do DES tanto maior quanto mais subchaves diferentes umas das outras forem obtidas. Contudo, certas chaves iniciais levam a situaes nas quais todas as subchaves so iguais. Estas chaves iniciais so denominadas chaves fracas. As chaves fracas so decorrncia do processo de subdiviso da chave inicial de 56 bits em dois blocos de 28. As quatro chaves fracas do DES e o que produzem so apresentadas na tabela 9.
Tabela 9 : Chaves fracas de DES

Chaves 0101 0101 0101 0101 1F1F 1F1F 1F1F 1F1F E0E0 E0E0 F1F1 F1F1 FEFE FEFE FEFE FEFE

Transformao 0000000 0000000 0000000 FFFFFFF FFFFFFF 0000000 FFFFFFF FFFFFFF

Evitar chaves fracas uma questo de segurana no DES. Apesar da ocorrncia dessas chaves em gerao de chaves aleatria ser rara, mecanismos adequados devem ser utilizados para evit-las. Outro problema so as denominadas chaves semi-fracas. Chaves semi-fracas existem em pares. Duas chaves so semi-fracas se as subchaves produzidas esto em ordem oposta. Isto significa dizer que se codificarmos um texto com uma chave do par, podemos decodificar os dados utilizando a outra chave, obtendo novamente a mensagem original. DES apresenta seis chaves sei-fracas, Tabela 10.
Tabela 10: Lista das chaves-semifracas de DES

Chave 1 01FE 01FE 01FE 01FE 1FE0 1FE0 0EF1 0EF1 01E0 01E0 01F1 01F1 1EFE 1EFE 0EFE 0EFE 011F 011F 010E 010E E0FE E0FE F1FE F1FE
Prof. Angelo Passaro

Chave 2 FE01 FE01 FE01 FE01 E01F E01F F10E 1FE0 E001 E001 F101 F101 FE1F FE1F FE0E FE0E 1F01 1F01 0E01 0E01 FEE0 FEE0 FEF1 FEF1
pgina14

Projeto e Anlise de Algoritmos Algoritmos com Strings

Exerccio: Codifique, e em seguida decodifique, um bloco de 64 bits da mensagem de exemplo, aplicando as tabelas de converso e permutao DES apresentadas nesta seo.

Criptosistemas de Chave Pblica


Criptosistemas de chave pblica seguem o esquema resumido a seguir. Um usurio tem uma chave pblica (P) e uma chave privada (S), a qual deve ser mantida secreta. Cria-se um livro de chaves pblicas: Chave pblica (P) ABC CBA Cassio Rupert Nome

....
Cria-se a chave privada S para cada uma das chaves pblicas P constantes do livro de chaves pblicas. Para cada chave P, existe uma chave S especfica. A chave P fornecida aos correspondentes, ou seja s pessoas que transmitiro a mensagem para o receptor, o qual a decodificar utilizando a chave S. Nenhuma chave precisa ser transmitida anexa mensagem, o que reduz a possibilidade de comprometimento da chave. . A mensagem M criptografada com a aplicao da chave pblica, o que denotado por P(M) e enviada ao destino. O receptor da mensagem deve aplicar a chave privada S para decodificar a mensagem, o que denotado por S(C).

Mensagem M

Mensagem cifrada C = P(M)

Transmissor

Receptor

Decodificao da mensagem M = S(C)

Para a criao de um algoritmo de criptografia de chave pblica, as seguintes condies devem ser satisfeitas: i. S(C) = S(P(M)) = M , qualquer que seja M; ii. Todos os pares (SP) so distintos iii. Derivar S a partir de P to dificil quanto ler M. iv. Tanto S como P so fceis de obter por computao. Criptosistemas com chave pblica, que respeitam as condies de i a iv passaram a ser realidade com o algoritmo RSA (criado por R. Rivest, A. Shamir e L. Adleman). Trata-se de um mtodo de
Prof. Angelo Passaro pgina15

Projeto e Anlise de Algoritmos Algoritmos com Strings

criptografia assimtrica de bloco muito popular. Contudo, diferente do DES, o tamanho do bloco no fixo em 64 bits, mas sim varia conforme o tamanho das chaves. Como no DES, algoritmos adicionais devem ser considerados se o tamanho da mensagem no multiplo do tamanho do bloco. A base do mtodo repousa em algoritmos de aritmtica modular, mas especificamente, a operao de exponenciao modular, aplicados a inteiros muito grandes. A exponenciao modular o processo de computao de obteno do resto da diviso de um nmero inteiro A por um outro inteiro n, o que costuma ser representado por (A mod n). Neste algoritmo, a chave pblica P um par de inteiros (N,p) e a chave secreta tambm (N,s). O inteiro s mantido secreto. Tipicamente, para que as chaves sejam consideradas seguras, N um inteiro com aproximadamente 400 dgitos e p e s so inteiros com 200 digitos cada, aproximadamente.

A mensagem M separada em elementos menores do que N (por exemplo, logN bits da string binria por vez). Os nmeros obtidos so, independentemente, elevados a uma potncia N Para codificar uma mensagem, ou pedao dela, M : C = P(M) = Mp mod N Para decodificar uma mensagem cifrada M = S(C) = Cs mod N

Criando chaves pblicas e privadas Para assegurar o casamento das chaves P e S (condio i), utiliza-se o procedimento apresentado a seguir. Selecionam-se dois nmeros primos entre s, p1 e p2, de aproximadamente 200 digitos cada. Faz-se N = p1 * p2 O nmero inteiro p, que far parte da chave pblica, escolhido como sendo o menor inteiro que seja primo relativo de (p1 1) * (p2 -1).. Exemplo: Se p1 = 11 e p2 = 19, ento N = 11 * 19 = 209. Neste caso, (p1 - 1) * (p2 - 1) = 180; o menor inteiro que primo relativo de 180 (ou seja, no tem fatores comuns com este) o nmero 17, o qual ser escolhido para p..

Na prtica, escolhas comuns para o valor de p so 3, 17 e 65537. Tendo escolhido o valor de p, computa-se o valor correspondente para s, o qual parte da a chave privada, conforme a expresso:

1= s p mod p11 p21


Uma variao do algoritmo de Euclides utilizada para o clculo de multiplicativos modulares inversos.
Prof. Angelo Passaro pgina16

Projeto e Anlise de Algoritmos Algoritmos com Strings

Exemplo: Considerando p1 = 11 e p2 = 19, obteve-se p = 17 (ver exemplo anterior). Aplicando a expresso acima, obtem-se o valor s = 53, como uma das soluo possveis. Observe que a igualdade satisfeita. Este, contudo, no o nico valor possvel para s. Outras possibilidades so 233, 413, 593, etc. o fato de no ser possvel derivar um valor nico para s que torna o algoritmo RSA seguro. Imagine o tamanho do problema para se obter o valor de s se p e s tm em torno de 200 algarismos!!!!!

Desempenho: Uma mensagem pode ser codificada em tempo linear (O(N)). Elevar qualquer nmero a uma potncia operao de tempo constante, pois a representaao do nmero de comprimento constante.

IX.1. Bibliografia

[1] Robert Sedgewick, Algorithms in C, Addison Wesley Publishing Co., 1990 [2] Kyle Loudon, Dominando algoritmos com C, Editora Cincia Moderna Ltda, 2000, Parte II, cap.15. [4] A. M. Tenenbaum, Y. Langsam, M. J., Augenstein, Estruturas de dados usando C, So Paulo, Makron Books, 1995

Prof. Angelo Passaro

pgina17

You might also like