• Nenhum resultado encontrado

ANÁLISE DE ALGORITMOS NECESSÁRIOS À IMPLEMENTAÇÃO DE UMA INFRA-ESTRUTURA DE CHAVES PÚBLICAS NO ITA.

N/A
N/A
Protected

Academic year: 2021

Share "ANÁLISE DE ALGORITMOS NECESSÁRIOS À IMPLEMENTAÇÃO DE UMA INFRA-ESTRUTURA DE CHAVES PÚBLICAS NO ITA."

Copied!
12
0
0

Texto

(1)

ANÁLISE DE ALGORITMOS NECESSÁRIOS À IMPLEMENTAÇÃO DE UMA

INFRA-ESTRUTURA DE CHAVES PÚBLICAS NO ITA.

Thiago Marques Esteves Póvoa

Instituto Tecnológico de Aeronáutica – ITA / CTA 12228-462 – São José dos Campos, São Paulo, Brasil Bolsista PIBIC-CNPq

Correio Eletrônico:

thiago.m.e.povoa@gmail.com

Tania Nunes Rabello ITA – IEF

Praça Mal. Eduardo Gomes, 50, Vila das Acácias São José dos Campos – SP

Correio Eletrônico:

tania@ita.br

Resumo: Este artigo aborda 2 algoritmos criptográficos amplamente conhecidos e utilizados na atualidade: O algoritmo de Rijndael,

no ramo da criptografia simétrica; e o algoritmo RSA, no ramo da criptografia assimétrica. Esses algoritmos foram estudados e indicados à implementação de um aplicativo que possibilitasse a troca de informações, de maneira rápida e segura, entre os diversos setores do ITA.

Palavras chave:Criptografia, RSA, AES, Rijndael, Infra-estrutura, Chave Pública.

1. Introdução

A enorme gama de atividade criptográfica existente na atualidade (em bancos, em grandes corporações, em atividades diplomáticas e governamentais...), juntamente com a crescente necessidade de uma maior segurança nos processos de transmissão de informação em organizações de pequeno porte, sejam empresas ou órgão públicos, motivou uma pesquisa na área criptográfica, e a formulação de um projeto que visou ao estudo teórico aprofundado dessa imensa área, dos seus principais algoritmos e da segurança dos mesmos, de forma a propiciar todo o arcabouço teórico para o planejamento de um aplicativo que proporcionasse uma maior funcionalidade e fluidez nos processos de transmissão de informações entre os diversos departamentos do Instituto Tecnológico de Aeronáutica (ITA).

Devido aos avanços crescentes da computação, as técnicas criptográficas tornam-se frágeis num intervalo de tempo cada vez menor. É necessário que a segurança do processo de troca de informações seja inquestionável do ponto de vista prático, pois trabalha-se com algoritmos criptográficos possíveis de serem quebrados, porém em um tempo inviável para um computador com a capacidade de processamento atual.

(2)

Fazendo-se um paralelo bastante grosseiro, pode-se comparar o papel do Certificado Digital no universo eletrônico com o da Carteira de Identidade no universo humano. A comprovação da autenticidade digital do emissor da mensagem é efetuada por meio de uma Assinatura Eletrônica aplicada ao Certificado Digital, análoga à assinatura aplicada em documentos de papel. Para que esse tipo de verificação funcione, é necessário que haja um terceiro organismo, que seja considerado confiável por ambas as partes, para realizar a emissão dos Certificados Digitais e assiná-los, atestando assim veracidade à identificação contida neles. Esse organismo é chamado de Autoridade Certificadora (AC).

De uma maneira geral, este artigo irá tratar de 2 algoritmos sugeridos no processo de elaboração de um aplicativo destinado à troca segura de informações entre os diversos setores do ITA.

2. Tópicos de Criptografia

2.1 Infra-Estrutura de Chaves Pública

Uma infra-estrutura de Chaves Públicas (ICP) é um ambiente especial, criado por um conjunto de normas, padrões e tecnologias que visam a garantir a segurança de transações eletrônicas, por meio da utilização de certificados digitais. No Brasil, o Governo Federal instituiu a Infra-Estrutura de Chaves Públicas Brasileira (ICP-Brasil), que permite a realização de transações eletrônicas seguras, autênticas e íntegras, sob a supervisão de um órgão capacitado. Uma ICP funciona com base nos seguintes componentes:

Autoridade Certificadora Raiz: Uma Autoridade Certificadora Raiz (AC-Raiz) é o topo da cadeia hierárquica da ICP. Ela tem como função básica a execução de normas operacionais definidas para aquela infra-estrutura, atuando na emissão, expedição, distribuição, revogação e gerenciamento de certificados de autoridades certificadoras de nível imediatamente inferior ao seu, chamadas Autoridades Certificadoras Principais. A AC-Raiz também trabalha no gerenciamento da lista de certificados revogados (LCR), emitidos e vencidos. No Brasil, a AC-Raiz estabelecida pela ICP-Brasil é o Instituto Nacional de Tecnologia da Informação (ITI).

Autoridade Certificadora: Uma Autoridade Certificadora (AC) é uma entidade que estabelece previamente a identidade do futuro portador do certificado digital, por meio dos documentos necessários, e emite esse certificado. A Autoridade Certificadora, para ter seus certificados legalmente reconhecidos, tem de ter sido certificada pela Autoridade Certificadora Raiz (no caso da ICP-Brasil, pelo ITI), que é a autoridade responsável pelo processo de credenciamento das demais Autoridades Certificadoras. O estabelecimento prévio da identidade do requerente do certificado, e a aprovação da solicitação de certificado são feitos por uma Autoridade Registradora, credenciada por uma Autoridade Certificadora. Cabe à Autoridade Certificadora regulamentar o funcionamento das Autoridades Registradoras, de forma que a segurança do processo permaneça resguardada. Também é função da AC emitir os Certificados Digitais e publicá-los em repositório público, ou ainda, renová-los e revogá-los, conforme seja o caso.

Autoridade Registradora: Uma Autoridade Registradora (AR) é a entidade vinculada a uma Autoridade Certificadora, que tem como principais competências identificar e cadastrar usuários, de forma presencial, encaminhar solicitações de certificados à respectiva AC e manter registros de suas operações.

Assinatura Digital: A assinatura digital é uma modalidade de assinatura eletrônica, resultado de uma operação criptográfica que permite aferir, com segurança, a origem e a integridade do documento. A assinatura digital fica de tal modo vinculada ao documento eletrônico que, caso seja feita qualquer alteração no documento, a assinatura se torna inválida.

2.1 Cifras de Blocos

(3)

Criptografia Simétrica: A criptografia simétrica tem como princípio básico a utilização de uma chave secreta, tanto pelo emissor quanto pelo receptor, de forma que o processo aplicado na encriptação de uma determinada mensagem seja também aplicado da decriptação desta mensagem, porém de maneira inversa. Nesse tipo de processo criptográfico é necessário que haja um compartilhamento de chaves secretas entre o emissor e o receptor da mensagem. Basicamente, 2 processos simétricos de cifragem de blocos serão apresentados: O Data Encryption Standard – DES, e o Advanced Encryption Standard – AES.

Data Encryption Standard - DES: Trata-se de um algoritmo bastante conhecido no universo da criptografia. Foi desenvolvido na década de 70 pela IBM e utilizado como padrão de criptografia mundial por 3 décadas, até que em 1999 foi anunciada a quebra do algoritmo em tempo recorde (23 horas) pelo RSA Labortory’s. O DES é um algoritmo de criptografia simétrica, isto é, há uma chave secreta compartilhada pelo emissor e pelo receptor, utilizada para cifrar e decifrar as mensagens. O algoritmo trabalha com blocos de 64 bits como dados de entrada, utiliza uma chave de 56 bits, e gera um bloco criptografado de 64 bits. O algoritmo do DES é dividido em basicamente 3 processos, que consistem numa Permutação Inicial, seguida de uma Transformação Criptográfica, finalizando com uma Permutação Final.

Advanced Encryption Standard – AES: Trata-se do Algoritmo Rijndael. Será descrito em detalhes na próxima seção.

Criptografia Assimétrica: Os processos abordados acima pertencem ao ramo da criptografia simétrica. Esse fato torna imprescindível que haja comunicação entre emissor e receptor através de um canal seguro para se estabelecer a chave. Isso nem sempre é possível de ser executado, tornando assim o processo de transmissão das chaves relativamente comprometido. Esse é o ponto mais vulnerável da criptografia simétrica. Portanto, nesse universo de desconfiança na troca de informações por canais inseguros, surgiu a criptografia assimétrica, que consiste em um processo criptográfico em que não há a necessidade de compartilhamento de uma chave secreta entre emissor e receptor.

A força dos algoritmos de criptografia assimétrica não está na securidade da chave, e sim nas limitações computacionais para se realizar certos tipos de operações matemáticas. O algoritmo mais largamente utilizado nesse tipo de processo é o RSA. Neste artigo será feita uma abordagem mais detalhada do algoritmo RSA.

3. Criptografia Simétrica: Algoritmo Rijndael

3.1 Histórico

AsEm janeiro de 1997, o NIST (National Institute of Standards and Technology) iniciou o processo para a escolha do algoritmo sucessor do antigo Data Encryption Standard (DES). O algoritmo escolhido nesse processo passaria a ser o padrão mundial conhecido como Advanced Encryption Standard (AES). Dentre os vários candidatos (MARS, RC6, Serpent, Twofish…), o vencedor do concurso foi o algoritmo Rijndael, desenvolvido pelos pesquisadores belgas Joan Daemen e Vincent Rijmen, daí o seu nome Rijndael, uma junção dos nomes de seus desenvolvedores. Assim, em outubro de 2000, o Rijndael foi escolhido como algoritmo padrão para o AES, passando a ser realmente adotado como padrão criptográfico mundial a partir de novembro de 2001. A sua publicação, em dezembro de 2001, na FIPS 197 (Federal Information Processing Standards Publication), tornou o algoritmo bastante difundido, de forma que a sua utilização passou a ser enorme. Esse é o processo criptográfico utilizado como padrão em criptografia simétrica pelos EUA.

(4)

3.2 Descrição

O algoritmo se divide basicamente em 4 etapas: AddRoundKey, SubBytes, ShiftRows, MixColumns. O processo de codificação é dividido em 10 rodadas (ou 10 estados), sendo necessária a aplicação das 4 operações básicas em cada rodada. Somente na 10ª rodada não é aplicada a operação MixColumns. Em todas as demais rodadas, são aplicadas as 4 operações. Também, inicialmente, (podendo ser considerada como rodada “zero”), ocorre somente o processo AddRoundKey, de forma que a rodada 1 é iniciada após a conclusão dessa operação. O processo geral segue o seguinte esquema:

Figura 1: Descrição geral do algoritmo Rijndael.

Feita essa descrição inicial do processo de funcionamento do Rijndael, serão apresentadas descrições mais detalhadas das suas 4 operações básicas. Porém, antes de qualquer etapa do processo de encriptação começar, divide-se o conjunto de 128 bits em 16 bytes (8 bits cada), e agrupam-se esses bytes em uma matriz 4x4, conforme a figura abaixo. O primeiro índice indica a linha, e o segundo a coluna:

(5)

É bastante comum a representação de byte por números hexadecimais, isto é, um conjunto de 8 bits (1 byte) pode ser representado como um número de 2 algarismos na base 16 (número hexadecimal). Essa representação será adotada neste artigo devido à sua enorme economia de espaço e relativa simplicidade nas notações.

AddRoundKey: Consiste em, para uma determinada rodada

R

i (i = 0, 1, 2, ..., 10), proceder-se uma soma módulo 2 (processo conhecido como XOR, e representado por

) entre um byte do bloco naquela rodada, e um byte da chave da mesma rodada. Portanto, trata-se de uma operação de XOR byte a byte entre o estado do bloco e a chave da rodada. Essa é uma transformação que opera cada byte individualmente. Basicamente, se

S

jk é um byte do estado i do bloco, e

k

jk é um byte da chave da rodada i, temos que o byte

S

jk do novo estado i+1 do bloco será igual a

S

jk

k

jk do estado i.

Quando i = 0, a matriz de bytes

S

jk, j = 0, 1, 2, 3 k = 0, 1, 2, 3 corresponde ao bloco de mensagem inicial que se deseja encriptar (seus 128 bits agrupados em 16 bytes), e quando i = 0, a matriz

k

jk, j = 0, 1, 2, 3 k = 0, 1, 2, 3 corresponde à chave secreta inicial (novamente, 128 bits agrupados em 16 bytes). Ao longo do processo, as rodadas ocorrem seqüencialmente, de forma que em cada rodada i, é necessária a utilização de uma chave secreta específica para aquela rodada, isto é, utiliza-se a matriz

k

jk, j = 0, 1, 2, 3 k = 0, 1, 2, 3 referente à rodada i. A obtenção de todas as chaves (matrizes)

k

jk, j = 0, 1, 2, 3 k = 0, 1, 2, 3 referentes a todas as rodadas i = 1, 2, 3, ..., 10 é realizada por meio de um processo de recorrência, que utiliza a chave

k

jk, j = 0, 1, 2, 3 k = 0, 1, 2, 3 para i = 0, fornecida ao algoritmo como parâmetro inicial. Esse processo, conhecido como KeyExpansion, será descrito em detalhes ao final da apresentação do algoritmo.

SubBytes: Consiste em um processo de substituição de bytes. Nesta etapa, cada byte do estado é substituído por outro

byte de uma tabela previamente construída, conhecida como S-box (caixa de substituição). Todos os valores dessa caixa são dados na base hexadecimal. A troca de bytes ocorre da seguinte maneira:

(6)

0 1 2 3 4 5 6 7 8 9 a b c d e

f

0

63 7c 77 7b f2 6b 6f c5 30 1 67 2b fe d7 ab 76

1

ca 82 c9 7d fa 59 47 f0 ad d4 a2 af 9c a4 72 c0

2

B7 fd 93 26 36 3f f7 cc 34 a5 e5 f1 71 d8 31 15

3

4 c7 23 c3 18 96 5 9a 7 12 80 e2 eb 27 b2 75

4

9 83 2c 1a 1b 6e 5a a0 52 3b d6 b3 29 e3 2f 84

5

53 d1 0 ed 20 fc b1 5b 6a cb be 39 4a 4c 58 cf

6

D0 ef aa fb 43 4d 33 85 45 f9 2 7f 50 3c 9f a8

7

51 a3 40 8f 92 9d 38 f5 bc b6 da 21 10 ff f3 d2

8

cd 0c 13 ec 5f 97 44 17 c4 a7 7e 3d 64 5d 19 73

9

60 81 4f dc 22 2a 90 88 46 ee b8 14 de 5e 0b db

a

E0 32 3a 0a 49 6 24 5c c2 d3 ac 62 91 95 e4 79

b

e7 c8 37 6d 8d d5 4e a9 6c 56 f4 ea 65 7a ae 8

c

ba 78 25 2e 1c a6 b4 c6 e8 dd 74 1f 4b bd 8b 8a

d

70 3e b5 66 48 3 f6 0e 61 35 57 b9 86 c1 1d 9e

e

e1 f8 98 11 69 d9 8e 94 9b 1e 87 e9 ce 55 28 df

f

8c a1 89 0d bf e6 42 68 41 99 2d 0f b0 54 bb 16

Figura 3: S-Box do algoritmo Rijndael.

ShiftRows: Processo que consiste em rotacionar para a esquerda as linhas do estado do bloco, trocando assim a

posição dos seus bytes. A figura abaixo ilustra o processo:

(7)

MixColumns: Processo que consiste em aplicar uma determinada operação em cada coluna da matriz dos bytes de um

determinado estado, fornecendo assim uma nova coluna de bytes. Nesta etapa, o resultado da operação em uma determinada coluna na matriz dos bytes de um determinado estado do bloco não influencia o resultado nas demais colunas. Porém, a mudança de um byte em uma coluna influencia o resultado na coluna inteira. Os bytes da matriz do estado do bloco são tratados como polinômios sobre o corpo de Galois GF(

2

8). Nessa etapa, será necessário efetuar tanto somas (que se resumem ao já conhecido processo de XOR) quanto multiplicações de elementos neste corpo de Galois. Para se efetuar essas operações, basta considerar um byte como um polinômio de 7º grau, cujos coeficientes são representados pelas quantidades binárias 0 e 1. Todas as operações devem ser realizadas no GF(

2

8), assim, é necessário determinar qual será o polinômio irredutível utilizado nesse corpo. O polinômio de 8º grau utilizado como irredutível no GF(

2

8) adotado no algoritmo de Rijndael é

x

8

+ + + +

x

4

x

3

x

1

. Portanto, para o Rijndael, GF(

2

8) =

2

[ ] / (

x

x

8

+ + + +

x

4

x

3

x

1)

. Assim, pode-se representar o processo MixColumns da seguinte maneira:

Para uma coluna c fixada da matriz, consideremos seus elementos

S

jc, j = 0, 1, 2, 3. Denotemos por

U

jc, j = 0, 1, 2, 3 os elementos da nova coluna obtida, após o processo de MixColumns da coluna c. Assim, os elementos

U

jc são obtidos da seguinte maneira:

0c

U

= (Produto entre [x] e [

S

0c] mod [

x

8

+ + + +

x

4

x

3

x

1

] )

(Produto entre [x+1] e [

S

1c] mod [

x

8

+ + + +

x

4

x

3

x

1

] )

S

2c

S

3c

1c

U

= (Produto entre [x] e [

S

1c] mod [

x

8

+ + + +

x

4

x

3

x

1

] )

(Produto entre [x+1] e [

S

2c] mod [

x

8

+ + + +

x

4

x

3

x

1

] )

S

3c

S

0c

2c

U

= (Produto entre [x] e [

2c

S

] mod [

x

8

+ + + +

x

4

x

3

x

1

] )

(Produto entre [x+1] e [

S

3c] mod [

x

8

+ + + +

x

4

x

3

x

1

] )

S

0c

S

1c

3c

U

=(Produto entre [x] e [

S

3c] mod [

x

8

+ + + +

x

4

x

3

x

1

] )

(Produto entre [x+1] e [

S

0c] mod [

x

8

+ + + +

x

4

x

3

x

1

] )

S

1c

S

2c

Logo, dada uma coluna c

S

jc, j = 0, 1, 2, 3 como parâmetro de entrada para a operação MixColumns, o resultado de saída será

U

jc, j = 0, 1, 2, 3. Vale ressaltar que na última rodada do processo de encriptação não será aplicada a etapa

MixColumns.

Descrição do Processo de Construção da S-Box: Primeiramente, algumas notações devem ser apresentadas. Deve-se considerar

S

jc−1 =

b b b b b b b b

7 6 5 4 3 2 1 0 como sendo o inverso mod[

x

8

+ + + +

x

4

x

3

x

1

] de

S

jc no GF(

2

8), tal que

1

1

jc jc

S S

mod [

x

8

+ + + +

x

4

x

3

x

1

], desde que

S

jc

0. Se

S

jc = 0, define-se

S

jc1 = 0. Segue a descrição da etapa de confecção da S-Box .

Dado um byte

S

jc como parâmetro de entrada, a S-box retorna o byte

c c c c c c c c

7 6 5 4 3 2 1 0, construído da seguinte forma:

(8)

Então

c

i= (

b

i

+

b

i+4

+

b

i+5

+

b

i+6

+

b

i+7

+

d

i) mod 2 para i = 0, 1, 2, ... 7.

Vale ressaltar que o índice dos bits

b

i+4,

b

i+5,

b

i+6 e

b

i+7 deve ser reduzido módulo 8.

Portanto, para se construir a S-Box, basta efetuar o processo descrito acima para todos os bytes entre 00000000 e 99999999, e agrupar os valores obtidos em uma tabela.

Descrição do Processo de Expansão de Chave ExpansionKey: Novamente, é necessário fazer algumas considerações a respeito da notação utilizada. Como o processo de expansão da chave inicial é orientado à palavra, é necessário defini-la. Uma palavra é um conjunto de 4 bytes. Como o algoritmo de encriptação Rijndael, quanto utilizado com chaves de 128 bits tem 10 rodadas, então é necessário que se produzam 10 chaves diferentes por meio do algoritmo ExpansionKey. Somando a chave inicial, o processo terminará ao todo com 11 chaves. Como cada chave possui 128 bits (4 palavras), então ao final do processo o algoritmo deverá fornecer 44 palavras. Vamos denominá-las de w[0], w[1], w[2], ..., w[43], sendo cada w[i] uma palavra.

Também é necessário definir

M

i, i = 1, 2, 3, ..., 10 como uma matriz 1x10 de palavras. Cada elemento dessa matriz possui um valor constante, representado da seguinte maneira (em hexadecimal):

1

M

= (01000000) 2

M

= (02000000) 3

M

= (04000000) 4

M

= (08000000) 5

M

= (10000000) 6

M

= (20000000) 7

M

= (40000000) 8

M

= (80000000) 9

M

= (1B000000) 10

M

= (36000000)

Por último, vamos definir uma variável temporária temp, necessária apenas para armazenar palavras ao longo do processo de expansão da chave.

Apresentadas as definições, segue a descrição do algoritmo:

Dada uma chave secreta inicial (128 bits), primeiramente é necessário dividi-la em 4 palavras, isto é, agrupam-se os 128 bits em 4 grupos de 32 bits cada um. Vamos denominar essas 4 palavras iniciais de w[0], w[1], w[2] e w[3].

O algoritmo utilizado para expandir essas 4 palavras em 44 opera de 2 maneiras distintas, dependendo da posição da

palavra na seqüência de geração. Assim, dada uma palavra w[i]:

Se i

0 mod (4), então:

Atribui-se à variável temp o valor de w[i-1].

(9)

Já de posse da variável temp permutada, aplica-se o processo SubBytes em cada byte

B

i da variável temp. Nesta etapa, utiliza-se a mesma S-Box descrita no texto algumas linhas acima.

De posse da variável temp permutada e substituída, opera-se da seguinte maneira:

w[i] = w[i-4]

4

i

M

temp Caso i não seja múltiplo de 4, então: Atribui-se à variável temp o valor de w[i-1].

w[i] = w[i-4]

temp

Aplicando-se esse algoritmo para i = 4, 5, 6, ..., 43, obtém-se a seqüência de palavras w[i], i = 0, 1, 2, ..., 43.

Assim, concluiu-se a descrição do algoritmo Rijndael, atual padrão AES de criptografia dos EUA. Esse foi o algoritmo escolhido para o desenvolvimento do aplicativo no ambiente educacional do ITA. Pode-se citar 3 fatores principais que levaram a essa escolha.

O primeiro deles, como não poderia deixar de ser, se baseia na segurança do processo. O algoritmo Rijndael vem se mostrando bastante resistente aos principais ataques criptográficos conhecidos atualmente (como o ataque linear ou diferencial), possibilitando assim um alto nível de confiabilidade no processo. O segundo fator é a sua atualidade. Como o Rijndael é o padrão AES de criptografia nos EUA, a sua manutenção, bem como a pesquisa e resolução de problemas, soluções e eventuais melhorias no algoritmo são o foco de estudos no mundo inteiro. Assim, utilizando-se um algoritmo bastante atual no universo criptográfico mundial, reduz-se sobremaneira os problemas advindos do mesmo. Por último, podemos citar a sua facilidade de implementação, bem como seu baixo custo computacional de execução.

Porém, ainda é necessário determinar uma maneira segura para que as chaves secretas do AES sejam distribuídas entre os diversos departamentos do ITA, bem como um processo que permita uma aplicação eficiente da assinatura digital. É nesse ponto que entra a Criptografia Assimétrica.

4. Criptografia Assimétrica: Algoritmo RSA

4.1 Histórico

A sigla RSA provém dos nomes de seus autores: Rivest, Shamir e Adleman. O algoritmo RSA se baseia na dificuldade para se fatorar inteiros muito grandes, tendo como instrumento os computadores atuais. Não se conhecem algoritmos eficientes o suficiente para fatorar números compostos grandes (cerca de 200 dígitos na base 10), o que torna a quebra do RSA um tanto quanto improvável (mas não impossível). Vejamos uma breve descrição do funcionamento do algoritmo RSA.

4.2 Descrição

Primeiramente, é necessário entender o processo de geração dos pares de chaves pública e privada, tanto do emissor quanto do receptor, de maneira totalmente independente. Cada um deles escolhe secretamente dois números primos grandes

p e q, e efetua a multiplicação n = p.q dos mesmos. Em seguida, calcula-se a função fi de Euler do número n:

φ

(n) =

(10)

Conhecendo-se o valor de

φ

(n), escolhe-se um número e, de forma que 1 < e <

φ

(n), e também MDC (e,

φ

(n)) =

1. A necessidade de e e

φ

(n) serem primos entre si é decorrência imediata do próximo passo, que consiste em encontrar o

inverso multiplicativo de e modulo

φ

(n). Por meio do Algoritmo de Euclides Estendido, encontra-se d, tal que d.e

1

(mod

φ

(n)), isto é, d =

e

−1 modulo (n).

A chave pública consiste no par de números (n,e), e a chave privada em (n,d). Publica-se a chave pública em qualquer tipo de canal, seja ele seguro ou não, e utiliza-se a chave privada para se decodificar as mensagens enviadas por meio da chave pública. Vejamos como ocorre o processo de codificação, envio, e decodificação de mensagens por meio do algoritmo RSA.

É necessário primeiramente converter o texto a ser codificado em um bloco numérico m. De posse de m, uma entidade B adquire a chave pública (n,e) de A, calcula c

m

e (mod n) e envia c para A. Para decodificá-la, A calcula m

d

c

(mod n), obtendo assim a mensagem original enviada por B. Isso ocorre como conseqüência direta do Teorema de

Euler, que diz:

a

φ( )n

1 (mod n). Assim, como:

d.e

1 (mod

φ

(n)), e c

m

e (mod n)

Então:

d

c

(

m

e d

)

(mod n)

Mas:

d.e

1 (mod

φ

(n)),

Então existe um inteiro positivo k, tal que d.e = k.

φ

(n) + 1. Assim:

. ( ) 1 d k n

c

m

φ + (mod n)

( )

(

) .

d n k

c

m

φ

m

(mod n) Mas: ( )n

m

φ

1 (mod n) Portanto: d

c

1

k.m (mod n)

d

c

m (mod n), obtendo-se assim a mensagem original.

A força do algoritmo reside no fato de que para se decifrar a mensagem é necessário conhecer

φ

(n) a partir da chave

pública (n,e). Isso só pode ser feito se forem conhecidos os fatores primos p e q que compõem n. Portanto, seria necessário decompor n em fatores primos, o que é computacionalmente muito custoso para números muito grandes. Mesmo os melhores algoritmos de fatoração conhecidos na atualidade ainda se mostram ineficientes quando trabalham com inteiros muito grandes.

Dessa discussão surge, com certa naturalidade, a seguinte (e delicada) questão: se os algoritmos de fatoração

conhecidos atualmente não conseguem determinar os fatores primos de números muito grandes, como então é possível obter os números primos grandes necessários para se gerar o par de chaves pública e privada?

(11)

métodos que se podem aplicar em números grandes e verificar se são compostos ou não. Como exemplo, pode-se citar os algoritmos de Miller-Rabin e de Solovay-Strassen.

Os algoritmos assimétricos (no caso o RSA) também podem ser utilizados no processo de assinatura digital. Vejamos como isso acontece. O emissor criptografa a mensagem (seja utilizando criptografia assimétrica, com a chave pública do receptor, seja utilizando criptografia simétrica, com a chave privada conhecida de ambas as partes), e a envia criptografada ao receptor. Este pode decodificá-la (seja utilizando sua chave privada, na criptografia assimétrica, seja utilizando a chave secreta conhecida de ambas as partes, na criptografia simétrica) e conhecer seu conteúdo. Porém, é necessário que se tenha certeza quanto à procedência da mensagem. Uma maneira de garantir a autenticidade da mesma é utilizar uma função hash. Um hash é uma espécie de “resumo” da mensagem original, que foi produzido utilizando-se a chave privada do emissor da mensagem. Daí a importância da criptografia assimétrica na assinatura digital, mesmo quando se utilizam algoritmos simétricos na codificação da mensagem. É necessário que ambas as partes possuam um par de chaves pública e privada (criptografia assimétrica), mesmo quando se utilizam algoritmos simétricos na encriptação, pois é o envio de um hash produzido a partir da chave privada do emissor que irá garantir a sua identidade ao receptor. Isso acontece pois quando se produz um hash a partir da chave privada do emissor, esse hash pode ser decodificado utilizando-se a chave pública do mesmo emissor. Assim, para que seja possível utilizar a chave pública do emissor para se decodificar um hash, é estritamente necessário que a entidade que codificou o hash tenha utilizado a chave privada do emissor. Mas ora, a única entidade que (supostamente) conhece a chave privada do emissor é o próprio emissor, garantindo-se assim a autenticidade da mensagem. De maneira prática, pocede-se assim: O emissor codifica a mensagem (seja por criptografia simétrica, seja por criptografia assimétrica) e também codifica um hash da mensagem utilizando sua chave privada (criptografia assimétrica). Feito isso, ele envia tanto a mensagem codificada quanto o seu hash ao receptor. O receptor decodifica a mensagem (por criptografia simétrica ou assimétrica) e lê seu conteúdo. Para ter certeza da sua autenticidade, ele também decodifica o hash com a chave pública do “suposto” emissor. Caso a decodificação do hash produza uma mensagem idêntica à mensagem original decodificada, então isso significa que o hash foi realmente codificado utilizando-se a chave privada do emissor, garantindo-se assim que o emissor é verdadeiro.

Assim, encerra-se a apresentação dos tópicos desenvolvidas no projeto com maior ênfase ao longo do ano. Toda a teoria criptográfica abordada é de fundamental importância para um pleno entendimento dos algoritmos utilizados nos processos criptográficos operados na atualidade.

5. Conclusões

Concluiu-se que a aplicação de criptografia assimétrica para a distribuição das chaves utilizadas na cifragem e decifragem de mensagens mostra-se mais adequada em casos como o de órgãos onde várias pessoas precisam transmitir informação confidencial entre si, que é exatamente o caso do ITA. Portanto, a utilização concomitante de algoritmos de criptografia simétrica (codificação e decodificação de mensagens), e de criptografia assimétrica (distribuição segura das chaves e assinatura digital) foi a estragégia adotada no planejamento do aplicativo.

(12)

6. Agradecimentos

Agradeço ao CNPq pela bolsa PIBIC a mim concedida.

7. Referências

Coutinho, Severino C., “Números Inteiros e Criptografia RSA”, 2. ed. Rio de Janeiro, IMPA/SBM, 2000.

Daemen, J. and Rijmen, V., “The Rijndael Block Cipher. AES Proposal.”, Document Version 2. 1999. Disponível em

http://www.esat.kuleuven.ac.be/~rijmen/rijndael/rijndaeldocV2.zip.

Federal Information Processing Standards Publication 197 – FIPS 197. “Advanced Encryption Standard (AES) ”. National

Institute of Standards and Technology NIST. November, 2001. Disponível em

http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf

Stinson, Douglas R., “Cryptography: theory and practice. ”,CRC Press, 2º ed., N.Y. 2002.

Referências

Documentos relacionados

6.4.4 Os documentos a serem entregues para análise de Títulos serão: Diploma ou Declaração/Certificados junto com o Histórico de Especialização, Mestrado e/ou

4.3.6.2 O medidor de volume de água pode incluir dispositivos auxiliares. 4.3.6.3 É permitido o uso de dispositivo de leitura remota para ensaios, verificação e leitura à distância,

• Para evitar danos ao produto (devido a relâmpagos e/ou picos de tensão) durante uma tempestade ou quando o equipamento não for ser usado durante um período de tempo prolongado,

NUTRIÇÃO FUNCIONAL NUTRACÊUTICOS/FITOTERÁPICOS COMPLEXO B 2mg/kg L-GLUTAMINA 20-30mg/kg ZINCO QUELATO 10mg/kg BROMELINA 500mcg-10mg/kg. TARAXACUM

Apesar dos esforços para reduzir os níveis de emissão de poluentes ao longo das últimas décadas na região da cidade de Cubatão, as concentrações dos poluentes

23/09/18 – após café da manhã deslocamento para Pompéia e Herculano com retorno a Roma no final do dia.. 25/09/18 – após café da manhã deslocamento para San Casciano (pernoite

Com o tempo em restrição, o corpo passa a se ajustar com uma redução do gasto metabólico, com isso, a estratégia de jejuar se torna uma alternativa para lidar com esse quadro,

A Lei nº 2/2007 de 15 de janeiro, na alínea c) do Artigo 10º e Artigo 15º consagram que constitui receita do Município o produto da cobrança das taxas