Encaminhar uma mensagem de forma segura é uma …ftorres/ENSINO/MONOGRAFIAS/walker_RSA.pdf ·...

3
Criptografia Encaminhar uma mensagem de forma segura é uma preocupação que remonta aos primeiros estrategistas que se têm notícia, na Grécia Antiga. Houve época em que soldados tinham mensagens escritas em seu couro cabeludo como estratégia para transpassar uma informação pelas linhas inimigas, bastando chegar ao seu destino e ter sua cabeça raspada. Um exemplo de criptografia foi usado por Júlio César, que foi um grande Imperador de Roma, participou do primeiro triunvirato (junto com Pompeu e Crasso, em 60 a.C.) e foi assassinado no Senado em 44 a.C.. A chave utilizada por Júlio César era muito simples: desloca-se o alfabeto 3 letras e troca-as entre si. A B C D E F G H I J K L M N O P Q R S T U V W X Y Z D E F G H I J K L M N O P Q R S T U V W X Y Z A B C Na Segunda Guerra Mundial, a Alemanha dispunha de um intrincado sistema de informações criptografadas. A base de todo esse sistema era uma máquina eletro-mecânica conhecida como enigma, semelhante à apresentada na figura, capaz de gerar mensagens criptografadas com enorme facilidade. A preocupação com a guarda das informações é a base da Criptografia, essencial para o tráfego de informações, especialmente nos dias atuais. O algoritmo RSA Um dos algoritmos mais seguros de encriptação de informações atuais originou-se dos estudos de Ronald Rivest, Adi Shamir e Leonard Adleman, um trio de Matemáticos brilhantes que mudaram a história da Criptografia. O princípio do algoritmo é construir chaves públicas e privadas utilizando números primos. Uma chave é uma informação restrita que controla toda a operação dos algoritmos de criptografia. No processo de codificação uma chave é quem dita a transformação do texto puro (original) em um texto criptografado. Chave Privada É uma informação pessoal que permanece em posse da pessoa - não publicável. Chave Pública Informação associada a uma pessoa que é distribuída a todos. Basicamente, a criptografia baseia-se em substituir letras por números, ou seja, converter uma mensagem em números. Esta primeira etapa denomina-se pré-codificação. Pré-Codificação Para usarmos o método RSA, devemos converter uma mensagem em uma seqüência de números. Essa etapa é chamada de pré-codificação.

Transcript of Encaminhar uma mensagem de forma segura é uma …ftorres/ENSINO/MONOGRAFIAS/walker_RSA.pdf ·...

Page 1: Encaminhar uma mensagem de forma segura é uma …ftorres/ENSINO/MONOGRAFIAS/walker_RSA.pdf · Criptografia Encaminhar uma mensagem de forma segura é uma preocupação que remonta

Criptografia

Encaminhar uma mensagem de forma segura é uma preocupação que remonta aos primeiros estrategistas que se têm notícia, na Grécia Antiga.

Houve época em que soldados tinham mensagens escritas em seu couro cabeludo como estratégia para transpassar uma informação pelas linhas inimigas, bastando chegar ao seu destino e ter sua cabeça raspada.

Um exemplo de criptografia foi usado por Júlio César, que foi um grande Imperador de Roma, participou do primeiro triunvirato (junto com Pompeu e Crasso, em 60 a.C.) e foi assassinado no Senado em 44 a.C.. A chave utilizada por Júlio César era muito simples: desloca-se o alfabeto 3 letras e troca-as entre si.

A B C D E F G H I J K L M N O P Q R S T U V W X Y ZD E F G H I J K L M N O P Q R S T U V W X Y Z A B C

Na Segunda Guerra Mundial, a Alemanha dispunha de um intrincado sistema de informações criptografadas. A base de todo esse sistema era uma máquina eletro-mecânica conhecida como enigma, semelhante à apresentada na figura, capaz de gerar mensagens criptografadas com enorme facilidade.

A preocupação com a guarda das informações é a base da Criptografia, essencial para o tráfego de informações, especialmente nos dias atuais.

O algoritmo RSAUm dos algoritmos mais seguros de encriptação de informações atuais originou-se dos estudos de Ronald Rivest, Adi Shamir e Leonard Adleman, um trio de Matemáticos brilhantes que mudaram a história da Criptografia.

O princípio do algoritmo é construir chaves públicas e privadas utilizando números primos.

Uma chave é uma informação restrita que controla toda a operação dos algoritmos de criptografia. No processo de codificação uma chave é quem dita a transformação do texto puro (original) em um texto criptografado.

Chave PrivadaÉ uma informação pessoal que permanece em posse da pessoa - não publicável.

Chave PúblicaInformação associada a uma pessoa que é distribuída a todos.

Basicamente, a criptografia baseia-se em substituir letras por números, ou seja, converter uma mensagem em números. Esta primeira etapa denomina-se pré-codificação.

Pré-Codificação

Para usarmos o método RSA, devemos converter uma mensagem em uma seqüência denúmeros. Essa etapa é chamada de pré-codificação.

Page 2: Encaminhar uma mensagem de forma segura é uma …ftorres/ENSINO/MONOGRAFIAS/walker_RSA.pdf · Criptografia Encaminhar uma mensagem de forma segura é uma preocupação que remonta

Inicialmente, escolhemos uma chave boa e convertemos a mensagem, de letras para símbolos (ou números). Então precisamos determinar 2 primos distintos, que denotaremos por p e q; que são denominados parâmetros RSA. Seja n = pq; onde p e q são primos, n é chamado de modulo RSA.A ultima etapa da pré-codificação consiste em separar o número, encontrado a partir da conversão da mensagem em números, em blocos cujos valores sejam menores que n.

A maneira de escolher os blocos não e única e não precisa ser homogênea (todos os blocos com o mesmo número de dígitos), mas não podemos, por exemplo, começar um bloco com zero, pois isto traria problemas na hora de montar a seqüência recebida.

Codificação e Decodificação

Tomemos F(n) = (p - 1) (q - 1) :Seja e < F(n) inteiro positivo inversível módulo F(n); ou seja, mdc (e; F(n)) = 1:Esse número e é chamado de expoente de enciframento. O par (n; e) é denominado chave pública de codificação do sistema RSA. Agora, codifiquemos cada bloco obtido na pré-codificação (subseção anterior). Após a codificação, os blocos não poderão ser reunidos de modo que não possamos distinguí-los, pois isto tornaria impossível a decodificação da mensagem.A codificação de um bloco b será denotada por C(b). Temos que C(b) é o resto da divisão de be por n; isto é, C b≡be (mod n) .

Por exemplo, se p = 29 e q = 67; então n = 1943: Logo, F(n) = 1848: Tomemose = 701 (observe que mdc (701; 1848) = 1). Assim, um bloco 41 de mensagem é codificado como o resto da divisão de 41701 por 1943. Utilizando teoria dos números e fazendo os cálculos temos: 1317 ≡ 41701 (mod 1943) :

Para decodificar uma mensagem codificada, precisamos de n e do inverso de e módulo F(n); que chamaremos de d; ou seja ed ≡ 1 (mod F(n)) .O par (n; d) é denominado chave privada de decodificação do sistema RSA.Seja a = C (b) um bloco da mensagem codificada, então D(a) será o resultado da decodificação. Temos que D(a) é o resto da divisão de ad por n; isto é, D(a) ≡ ad (mod n) :

Para calcular d; sendo conhecidos e e F(n); basta aplicar o algoritmo euclidiano estendido, pois 1 = ed - kF(n) : Esperamos que, decodificando os blocos da mensagem codificada, possamos encontrar a mensagem original, ou seja, D(C(b)) = b. Para decodificarmos, não é necessário conhecermos p nem q; basta conhecer n e d.

No exemplo que estamos acompanhando, temos que n = 1943 e e = 701. Usando o algoritmo euclidiano estendido, temos d = 29. Assim, para decodificar o bloco 1317 recebido, devemos calcular o resto da divisão de 131729 por 1943 . Então:

41 ≡ 131729 (mod 1943)

Demonstração da Funcionalidade do Sistema

Precisamos verificar que se C(b) é um inteiro e 1≤bn ; então D(C(b)) = b. Na verdade, basta que D(C(b)) ≡ b(mod n); pois tanto D(C(b)) quanto b estão no intervalo de 1 a n-1. Logo, b e D(C (d)) só serão congruentes módulo n se forem iguais. Por isso, b deve ser menor que n e, mesmo depois de codificados, os blocos devem se manter separados.

Page 3: Encaminhar uma mensagem de forma segura é uma …ftorres/ENSINO/MONOGRAFIAS/walker_RSA.pdf · Criptografia Encaminhar uma mensagem de forma segura é uma preocupação que remonta

Por definição de D e C; temos:D(C(b)) ≡ be d ≡ bed (mod n):Como n = pq; vamos calcular bed módulo p e módulo q: O cálculo para os dois módulosé análogo; logo, façamos apenas um deles. Vejamos o caso de bed módulo p:Como d é o inverso de e módulo F(n); temos ed = 1 + kF(n)= 1 + k(p - 1)(q - 1)Dai, be d ≡ b b p−1k q−1 (mod p):Usemos o Pequeno Teorema de Fermat, mas para isto, temos que supor que p∤b . Digamos que isto acontece, então b p−1≡1 (mod p); ou seja, bed≡b (mod p):Analisando o caso em que p∣b ; temos que b ≡ 0(mod p). Logo, bed≡b (mod p) paraqualquer valor de b:Como, bed≡b (mod p); analogamente, podemos mostrar que, bed≡b (mod q). Daí, temosque bed - b é divisível por p e q: Mas, como p e q são primos distintos, isto é, o mdc (p; q) = 1;temos que pq∣bed – b . Portanto, como n = pq; concluímos que bed≡b (mod n) paraqualquer inteiro b. Conclusão: D(C (b)) = b; como queríamos.

A Segurança do Sistema de Criptografia RSA

O método RSA é de chave publica, sendo p e q parâmetros do sistema e n = pq: A chave de codificação, o par (n; e), é a chave publica do sistema. Assim sendo, todos os usuários terão acesso a ela. Por isso, o RSA só será seguro se for difícil de encontrar d a partir de n e e.Para encontrar d; utilizamos F(n) e e; mas para obtermos F(n); devemos ter p e q; que é a fatoração de n. Logo, para quebrar o código, devemos conseguir fatorar n, que é um problema extremamente difícil se n for grande.

Finalmente, a possibilidade de achar b; a partir de C (b) ≡ bed (mod n) sem tentar achard é praticamente impossível se n é grande. Na verdade, acredita-se que quebrar o RSA e fatorar n são problemas equivalentes. No entanto, devemos tomar alguns cuidados, pois se p e q forem pequenos, se torna fácil encontrá-los. Ou se, mesmo grandes, |p – q| for pequeno se torna fácil achá-los a partir de n; utilizando um algoritmo devido a Fermat.

Assinaturas Digitais

Uma das aplicações da criptografia são as assinaturas digitais, que possuem um importante papel nas transações bancarias, obtendo assim uma maior segurança, tanto para o cliente, quanto para o banco.Suponhamos que uma empresa realiza transações bancárias por computador. É óbvio que tanto a empresa quanto o banco queiram que a mensagem seja codificada. Mas, como o RSA é um sistema de criptografia de chave pública, qualquer pessoa poderia enviar uma mensagem para fazer transações bancárias utilizando esse sistema. Por isso, é necessário que a mensagem esteja assinada eletronicamente.Vejamos como mandar uma assinatura pelo RSA. Chamemos de Ce e De as funções de codificação e decodificação da empresa e Cb e Db as mesmas funções, só que do banco. Sendo a um bloco de mensagem que a empresa vai enviar ao banco, a codificação desse bloco seria Cb(a): Para que a mensagem vá assinada, ela deve ser Cb(De(a)): Usamos primeiro a função decodificação da empresa ao bloco a e, depois, codificamos o bloco, usando a função codificação do banco.O banco, ao receber a mensagem Cb(De(a)); aplica a sua função de decodificação, obtendo De(a); e, na seqüência, aplica a função codificação da empresa, que é pública, para obter o bloco original a:Somente a empresa conhece a função De: Portanto, se a mensagem fizer sentido, tem que ter tido origem na empresa, uma vez que a probabilidade de uma pessoa, sem conhecer De; mandar uma mensagem que faça sentido, após ser decodificada pelo banco, é praticamente nula. Assim, o banco pode estar seguro de que a mensagem é verdadeira.