Retail

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

Description
Anais do 14 Encontro de Iniciação Científica e Pós-Graduação do ITA XIV ENCITA / 2008 Instituto Tecnológico de Aeronáutica, São José dos Campos, SP, Brasil, Outubro, 20 a 23, ANÁLISE DE ALGORITOS
Categories
Published
of 12
All materials on our website are shared by users. If you have any questions about copyright issues, please report us to resolve them. We are always happy to assist you.
Related Documents
Share
Transcript
Anais do 14 Encontro de Iniciação Científica e Pós-Graduação do ITA XIV ENCITA / 2008 Instituto Tecnológico de Aeronáutica, São José dos Campos, SP, Brasil, Outubro, 20 a 23, ANÁLISE DE ALGORITOS NECESSÁRIOS À IPLEENTAÇÃO DE UA INFRA-ESTRUTURA DE CHAVES PÚBLICAS NO ITA. Thiago arques Esteves Póvoa Instituto Tecnológico de Aeronáutica ITA / CTA São José dos Campos, São Paulo, Brasil Bolsista PIBIC-CNPq Correio Eletrônico: Tania Nunes Rabello ITA IEF Praça al. Eduardo Gomes, 50, Vila das Acácias São José dos Campos SP Correio Eletrônico: 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. A utilização de algoritmos eletrônicos para a troca de informações possui claras vantagens no quesito facilidade, porém, com ela surgem também alguns inconvenientes que necessitam ser corrigidos. Como há o conceito de chave pública, isto é, todos que desejarem podem enviar mensagens secretas à entidade que divulgou sua chave pública (sem a necessidade do conhecimento de uma chave secreta específica), ou mesmo em sistemas simétricos, em que todos os componentes conhecem a chave secreta do sistema, a troca de informações gera um problema considerável no processo: como garantir a autenticidade do emissor da mensagem? Em outras palavras, como garantir que a identidade do organismo que envia a mensagem criptografada é realmente verdadeira? Em tese, qualquer um poderia enviar mensagens criptografadas se passando por outra pessoa, ou outra entidade. Para corrigir esse tipo de inconveniente, surgiu o conceito de Infra-Estrutura de chave pública (ICP, ou PKI). O funcionamento de uma ICP se baseia no conceito de certificação digital. Certificado Digital é um aparato que possibilita a verificação da autenticidade do emissor da mensagem, bem como a sua integridade. 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 Trata-se de um processo de cifragem em que não se trabalha com os caracteres da mensagem original individualmente, mas sim em blocos, gerando assim blocos de caracteres cifrados. Esse tipo de algoritmo é largamente utilizado atualmente no trânsito de informações, daí a fundamental importância de uma abordagem mais detalhada do mesmo. Como a substituição criptográfica não é feita caractere a caractere, mas sim em blocos, a simples contagem de frequência de letras não é suficiente para tornar a segurança do processo questionável. 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 IB 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 As Em 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 (ARS, 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 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. O algoritmo Rijndael funciona da seguinte maneira. Dado um bloco inicial de comprimento 128 bits, existem 3 tipos diferentes de tamanhos de chaves possíveis de serem adotados: pode-se ter chaves de 128 bits (o que implica um algoritmo desenvolvido em 10 rodadas ou rounds ), 192 bits (11 rodadas) ou 256 bits (12 rodadas). Os três tamanhos possíveis possuem algoritmos absolutamente semelhantes, não sendo necessária a descrição dos três. Assim, por simplicidade e sem perda de generalidade, será descrito, a seguir, apenas o processo que adota chaves de 128 bits. O algoritmo tem como entradas o bloco de mensagem que se deseja criptografar (com comprimento 128 bits), e a chave secreta (com comprimento 128 bits também), retornando assim um bloco criptografado de comprimento 128 bits. Nota-se, portanto, que o algoritmo Rijndael se enquadra na categoria conhecida como criptografia simétrica, pois tanto para codificar quanto para decodificar a mensagem, é necessário que se conheça uma chave de caráter secreto. 3.2 Descrição O algoritmo se divide basicamente em 4 etapas: AddRoundKey, SubBytes, ShiftRows, ixcolumns. 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 ixcolumns. 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: Figura 2: atriz inicial de bytes. É 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 é um byte do estado i do bloco, e k é um byte da chave da rodada i, temos que o byte S do novo estado i+1 do bloco será igual a S k do estado i. Quando i = 0, a matriz de bytes S, 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, 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, j = 0, 1, 2, 3 k = 0, 1, 2, 3 referente à rodada i. A obtenção de todas as chaves (matrizes) k, 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, 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: Tendo-se um byte S = a7a6a5a4a3a2a1 a 0 formado por 8 bits ( a n ), separa-se esse byte em 2 números hexadecimais I = a7a6a5a 4 e J = a3a2a1a 0 (4 bits em cada número). Assim, a linha da S-box utilizada será a linha I, e a coluna utilizada será a coluna J. O elemento que se encontra na linha I e na coluna J será o novo byte do processo. Por exemplo, o byte , cujo valor em hexadecimal é 53, deverá ser substituído pelo byte que se encontra na linha 5 e na coluna 3 da S-Box. a b c d e f c 77 7b f2 6b 6f c b fe d7 ab 76 1 ca 82 c9 7d fa f0 ad d4 a2 af 9c a4 72 c0 2 B7 fd f f7 cc 34 a5 e5 f1 71 d c7 23 c a e2 eb 27 b c 1a 1b 6e 5a a0 52 3b d6 b3 29 e3 2f d1 0 ed 20 fc b1 5b 6a cb be 39 4a 4c 58 cf 6 D0 ef aa fb 43 4d f9 2 7f 50 3c 9f a a3 40 8f 92 9d 38 f5 bc b6 da ff f3 d2 8 cd 0c 13 ec 5f c4 a7 7e 3d 64 5d f dc 22 2a ee b8 14 de 5e 0b db a E0 32 3a 0a c c2 d3 ac e4 79 b e7 c8 37 6d 8d d5 4e a9 6c 56 f4 ea 65 7a ae 8 c ba e 1c a6 b4 c6 e8 dd 74 1f 4b bd 8b 8a d 70 3e b f6 0e b9 86 c1 1d 9e e e1 f d9 8e 94 9b 1e 87 e9 ce df f 8c a1 89 0d bf e d 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: Figura 4: Esquema de funcionamento do processo ShiftRows. ixcolumns: 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 8 tratados como polinômios sobre o corpo de Galois GF( 2 ). 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 8 quantidades binárias 0 e 1. Todas as operações devem ser realizadas no GF( 2 ), assim, é necessário determinar qual será o 8 polinômio irredutível utilizado nesse corpo. O polinômio de 8º grau utilizado como irredutível no GF( 2 ) adotado no 8 algoritmo de Rijndael é x + x + x + x + 1. Portanto, para o Rijndael, GF( 2 ) = Z [ x] / ( x + x + x + x + 1) 2. Assim, pode-se representar o processo ixcolumns da seguinte maneira: Para uma coluna c fixada da matriz, consideremos seus elementos S, j = 0, 1, 2, 3. Denotemos por U, j = 0, 1, 2, 3 os elementos da nova coluna obtida, após o processo de ixcolumns da coluna c. Assim, os elementos U são obtidos da seguinte maneira: [ [ [ [ U 0c = (Produto entre [x] e [ S 0c ] mod [ x + x + x + x + 1 ] ) S2c S3c U 1c = (Produto entre [x] e [ S 1c ] mod [ x + x + x + x + 1 ] ) S3c S0c U 2c = (Produto entre [x] e [ S 2c ] mod [ x + x + x + x + 1 ] ) S0c S1c U 3c =(Produto entre [x] e [ S 3c ] mod [ x + x + x + x + 1 ] ) S1c S2c x x x x ] ) (Produto entre [x+1] e [ S 1c ] mod ] ) (Produto entre [x+1] e [ S 2c ] mod x x x x ] ) (Produto entre [x+1] e [ S 3c ] mod x x x x ] ) (Produto entre [x+1] e [ S 0c ] mod x x x x saída será U ixcolumns. Logo, dada uma coluna c S, j = 0, 1, 2, 3 como parâmetro de entrada para a operação ixcolumns, o resultado de, j = 0, 1, 2, 3. Vale ressaltar que na última rodada do processo de encriptação não será aplicada a etapa Descrição do Processo de Construção da S-Box: Primeiramente, algumas notações devem ser apresentadas. Deve-se 1 considerar S 8 = b7b6 b5b4 b3b 2b1b 0 como sendo o inverso mod[ x + x + x + x + 1] de S no GF( 2 ), tal que S S 1 1 mod [ x + x + x + x + 1], desde que S 0. Se S = 0, define-se de confecção da S-Box. forma: Dado um byte 1 S = 0. Segue a descrição da etapa S como parâmetro de entrada, a S-box retorna o byte c7c6c5c4c3c2c1 c 0, construído da seguinte Seja d7d6d5d4d3d2d1d 0 = ( ) Calcula-se 1 S = b7b6 b5b4 b3b2 b1b 0 Então c i = ( bi + bi bi bi bi di ) mod 2 para i = 0, 1, 2, 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 e , 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 uti
Search
Related Search
We Need Your Support
Thank you for visiting our website and your interest in our free products and services. We are nonprofit website to share and download documents. To the running of this website, we need your help to support us.

Thanks to everyone for your continued support.

No, Thanks