










































Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Criptografia Assimétrica
Tipologia: Notas de estudo
1 / 50
Esta página não é visível na pré-visualização
Não perca as partes importantes!











































Especialização em Redes de Computadores
Luis Alberto de Moraes Barbosa Luis Fernando B Braghetto (RA 504339) Marcelo Lotierso Brisqui Sirlei Cristina da Silva
Campinas, Julho/
RSA – Criptografia Assimétrica e Assinatura Digital
Índice RSA – Criptografia Assimétrica e Assinatura Digital
Capítulo 1 - Introdução RSA – Criptografia Assimétrica e Assinatura Digital
“ A origem da criptografia, provavelmente, remonta aos princípios da existência humana, logo que as pessoas tenham tentado aprender a comunicar. Conseqüentemente, tiveram de encontrar meios para garantir a confidencialidade de parte das suas comunicações .” - Pierre Loidreau, escreveu um artigo na primeira revista Linux da França Esta frase expressa o significa inicial de criptografia e, aos dias de hoje, podemos notar que uma grande mudança nos métodos e maneiras de se criptografar. Este documento irá prover informações sobre uma das mais bem sucedidas implementações de algoritmos de criptografia e assinatura até hoje, o RSA. Conforme o leitor irá adiantando a leitura, irá saber sobre o que é e o que significa a criptografia, criptoanalista e afins; também entenderá métodos simples de criptografia até chegar ao RSA, que é o foco deste documento. Apesar disto, conceitos de chaves privadas, públicas, outros algoritmos, performance, etc não serão esquecidos. A idéia é dar ao leitor leigo, uma noção geral sobre como funciona a criptografia hoje, assim como o RSA e explicando até mesmo em contas para detalhar tal algoritmo. Esperamos que ajude a todos interessados em criptografia.
Capítulo 2 – Teoria da Criptografia de Chaves Públicas RSA – Criptografia Assimétrica e Assinatura Digital
2.2.1 – Introdução às Técnicas Simples de Criptografia
Os métodos de criptografia têm sido divididos em duas categorias: as cifras de substituição e as de cifras de transposição. Estas são utilizadas na criptografia simétrica. A criptografia simétrica em alguns locais também é referida como “criptografia de chave secreta” ( secret-key criptography ).
2.2.1.1 - Cifras de Substituição
Este sem dúvida é o jeito mais fácil de cifrar (e também de decifrar). As cifras de substituição trocam uma letra por outra letra correspondente. Vejamos um exemplo onde nós vamos trocar cada uma das 26 letras do abecedário pelas letras na ordem do teclado.
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 Q W E R T Y U I O P A S D F G H J K L Z X C V B N M
Este tipo de substituição é chamado de monoalfabética.
Para exemplificar vamos cifrar a palavra “palavra” com nossa cifra de substituição:
p a l a v r a H Q S Q C K Q
Por fim, a palavra “palavra” seria escondida como “hqsqckq”. Quem recebesse isso bastaria voltar atrás para descobrir a palavra original “palavra”. Qual a probabilidade de combinações possíveis para esta cifra? A resposta é 26! (fatorial de 26) que é 26. 25. 24. 23 .......... 3. 2. 1 que dá 4,032x10^26 diferentes dicionários... porém o ataque pode ser feito através de analise de freqüência. Em qualquer língua, alguns sons são utilizados com mais freqüência do que outros. Isto significa que, na linguagem escrita, algumas letras também são mais utilizadas que outras. Determinar a freqüência com que ocorrem determinadas letras em determinada língua, ou seja, fazer uma análise da freqüência de ocorrência de letras, não é nenhuma novidade. O grande sábio árabe al-Kindi já teve esta idéia há mais de 1.000 anos atrás. Na substituição monoalfabética, cada letra é trocada pela letra correspondente da chave. Isto significa que as características das letras originais são transferidas para as novas letras, inclusive suas características de freqüência de ocorrência. É o mesmo que trocar seis por meia dúzia... o caminho das pedras para quebrar a cifra! Uma análise de freqüência do alfabeto português e uma amostra razoável de texto cifrado mostra a facilidade de quebrar isso. (http://www.numaboa.com/criptologia/matematica/estatistica/freqPortBrasil.php).
Capítulo 2 – Teoria da Criptografia de Chaves Públicas RSA – Criptografia Assimétrica e Assinatura Digital
Os algoritmos ROT13 e César usam isso. Depois algoritmos como Playfair e Hill adicionaram alguma dificuldade fazendo substituições através de grupos de letras, mas ainda é muito fácil ser quebrada.
2.2.1.2 – Cifras de Transposição
As cifras de transposição usam como técnica a mudança da ordem das letras. Vejamos um exemplo onde vamos aplicar uma chave a um texto para efetuar uma mudança na ordem do texto. O texto original será “a ponte de Londres está caindo” e a chave será “viagem”
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 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
Vamos colocar a palavra “viagem” em ordem numérica. O resultado será:
Ordem original 1 2 3 4 5 6 Chave V I A G E M Valor Numérico das letras 22 9 1 7 5 13 Nova Ordem 6 4 1 3 2 5
a p o n t e d e L o n d r e s e s t a c a i n d O
E o resultado será as colunas na ordem (1, depois 2, e assim por diante) e o texto cifrado será “pddsin ead oertn nea tLs Oaeo c” O que se pode fazer é misturar transposição com substituição, porém ainda é ineficiente já que hoje se tem muito poder computacional.
Capítulo 2 – Teoria da Criptografia de Chaves Públicas RSA – Criptografia Assimétrica e Assinatura Digital
criptoanálise é o tamanho da chave. Quanto maior a chave, mais difícil é criptoanalisar o dado. O que todos devem estar se perguntando é se existe a criptografia de chaves públicas porque ainda usar a criptografia simétrica? A criptografia assimétrica exige muito mais processamento do que a criptografia simétrica. Na vida real a criptografia assimétrica é usada para combinar uma chave que será usada posteriormente por uma criptografia simétrica, ou no caso de assinaturas digitais é feito um hash da mensagem e a criptografia acontece no hash para diminuir o overhead.
2.2.3.1 – Chaves Públicas e Chaves Privadas
Um novo conceito é lançado baseado que existem duas chaves: Chave Pública e Chave Privada. Mas o que faz cada uma das chaves? Depende. Uma única definição é certa e correta: a chave privada não pode sair da mão do dono do par de chaves. Somente a chave pública pode ser distribuída. Se a finalidade do algoritmo assimétrico é ciframento dos dados, impedindo que outros não possam saber o que tem dentro da mensagem, somente o destinatário correto, a chave pública será uma chave que servirá para a criptografia dos dados e a chave privada será a chave para decriptografia (deciframento) da mensagem previamente cifrada. Neste caso, vamos exemplificar que Alice quer enviar uma mensagem para Bob, mas somente Bob poderá lê-la. Alice irá até Bob através de um canal inseguro qualquer e requisitará a chave pública de Bob. Alice irá pegar a mensagem “M” e aplicar a chave pública (KUp) de Bob usando um algoritmo conhecido de todos. Somente Bob tem a chave privada para decifrar a mensagem “C” (Mensagem C é o resultado da mensagem M após aplicar KUp). Para tanto Bob pega o algoritmo conhecido e aplica a sua chave privada (KRb) para obter a mensagem “M” novamente. Neste caso a chave pública faz o ciframento e a chave privada faz o deciframento.
Figura 1: Esquema de Criptografia Assimétrica para garantir sigilo
Capítulo 2 – Teoria da Criptografia de Chaves Públicas RSA – Criptografia Assimétrica e Assinatura Digital
Se a finalidade for assinatura digital, entende-se que somente a pessoa de posse da chave privada poderá criar a mensagem, impedindo o repúdio e garantindo a autoria e autenticação da mensagem e do autor. Neste caso, vamos exemplificar que Bob pegará uma mensagem “M” (não cifrada, como por exemplo “vou pagar 1000 reais para Alice”) e aplica a sua chave privada (KRb). A chave privada irá fazer a criptografia, ou seja, gerar a mensagem “C”. Sendo a chave pública de Bob (KUb) conhecida de todos, qualquer um poderá decriptografar a mensagem. Se a chave pública de Bob foi capaz de gerar novamente a mensagem “M”, ele e somente ele (Bob) poderia ter gerado a mensagem, garantindo a autoria e autenticação do autor. Quando se distribui a mensagem deste jeito, não se garante a confidencialidade dos dados já que a chave KUb é pública e qualquer um poderá ler isto. Isto é chamado de assinatura digital^1 (ver capítulo 4).
Figura 2: Esquema de Criptografia Assimétrica para assinatura digital E se nós quiséssemos garantir que a mensagem veio de alguém e o sigilo fosse importante? Simples, basta usarmos dois pares de chaves públicas e privadas... lembrando que se distribuirá uma para criptografar (sigilo) e uma para decriptografar (assinatura digital). Lembrando que devemos cifrar primeiro e assinar depois, pois assim poderemos verificar a assinatura sem sabermos o conteúdo.
(^1) Na assinatura digital é assinado um hash da mensagem ao invés da mensagem toda por questões de
performance.
Capítulo 2 – Teoria da Criptografia de Chaves Públicas RSA – Criptografia Assimétrica e Assinatura Digital
2.2.3.3 – RSA
RSA foi criado por R. Rivest, A. Shamir e L. Adleman em 1977. Foi o primeiro algoritmo a usar a técnica Diffie-Hellman, usando criptografia assimétrica. O RSA é muito popular até hoje e sua segurança advém da dificuldade de fatorar números inteiros muito grandes. Para garantir a segurança o RSA utiliza números primos p e q com média de 300 dígitos. Detalhes sobre o algoritmo do RSA serão visto no capítulo 3.
2.2.3.4 - DSA
DSA é o acrônimo de Padrão de Assinatura Digital ( Digital Signature Standart ), criado pelo NIST, e especifica o DSA para assinatura digital e SHA- para hash ing. O DSA é um algoritmo assimétrico e a chave privada opera sobre o hash da mensagem SHA-1. Para verificar a assinatura um pedaço do código calcula o hash e outro pedaço usa a chave pública para decifrar a assinatur a, e por fim ambos comparam os resultados garantindo a autoria da mensagem. O DSA trabalha com chaves de 512 à 1024 bits, porém ao contrário do RSA que é multipropósito, o DSA somente assina e não garante confidencialidade. Outro ponto contra o DSA é que a geração da assinatura é mais rápida do que o RSA, porém de 10 a 40 vezes mais lenta^3 para conferir a assinatura. O algoritmo do DSA é o seguinte para geração das chaves
Para gerar assinatura o DSA usa os seguintes passos:
(^3) segundo Applied Cryptography , 2nd Ed, Bruce Schneier
Capítulo 2 – Teoria da Criptografia de Chaves Públicas RSA – Criptografia Assimétrica e Assinatura Digital
Para verificar a assinatura de A ( r e s ), B deve usar os seguintes passos:
2.2.3.5 – Rápida Comparação das Utilidades dos Algoritmos
Dentre a criptografia de chaves públicas, veremos abaixo algumas das finalidades destes algoritmos:
Algoritmo Criptografia Assinatura Digital Troca Chaves RSA (^) ¸ ¸ ¸ Diffie-Hellman (^) ¸ DSA (^) ¸
Tabela 1: Comparação das Utilidades dos Algoritmos
Pode-se perceber que o RSA é o algoritmo que permite flexibilidade e por isso ele continua sendo o principal algoritmo de criptografia de chaves públicas há 20 anos.
2.2.4 – Criptografia Simétrica vs. Criptografia Assimétrica
A criptografia simétrica foi uma revolução da criptografia moderna. Todos devem pensar: Porque usar a criptografia simétrica diante das inúmeras vantagens da criptografia assimétrica? Basicamente pela dificuldade de gerar as chaves de maneira segura e problemas relativos à performance. Estes problemas serão abordados com profundidade no capítulo 6.
Capítulo 3 – O Algoritmo RSA RSA – Criptografia Assimétrica e Assinatura Digital
Em 1976, Whitfield Diffie e Martin Hellman escreveram um documento chamado “As Novas Direções da Criptografia” mostrando a idéia de usar a criptografia de chaves públicas. Logo após, os criptologistas começaram a tentar desenvolver um algoritmo que pudesse atender as especificações propostas por Diffie-Hellman. O RSA foi desenvolvido em 1978 em resposta a essa necessidade no MIT por Ron Rivest, Adi Shamir e Len Adleman (daí a sigla RSA). O algoritmo do RSA foi o primeiro algoritmo de chaves públicas é amplamente usado desde então.
O RSA é basicamente o resultado de dois cálculos matemáticos. Um para cifrar e outro para decifrar. O RSA usa duas chaves criptográficas, uma chave pública e uma privada. No caso da criptografia assimétrica tradicional, a chave pública é usada para criptografar a mensagem e a chave privada é usada para decriptografar a mensagem. A segurança desse método se baseia na dificuldade da fatoração de números inteiros extensos. Em 1977, os criadores do RSA achavam que uma chave de 200 bits requereriam 10^15 anos, porém chaves com 155 bits foram atacadas em menos de 8 meses. A saída é que na medida que os algoritmos se tornem melhores e os computadores se tornem mais velozes, maiores serão as chaves. Atualmente chaves com 300 dígitos (1000 bits) nos dão uma tranqüilidade por algum tempo. Em níveis críticos, chaves com 2000 bits começam a ser usadas. Para tanto vale lembrar que “M” é a mensagem que queremos cifrar (plaintext), “C” é a mensagem cifrada, “e” é a chave pública, “d” é a chave privada e “n” é um número que é calculado e que todos sabem (público).
Criptografar: C = Me^ mod n
Decriptografar: M = Cd^ mod n
Para cada bloco a ser cifrado deve -se fazer o cálculo acima. Ambos devem saber o valor de “n”. Portanto, a chave pública definida pela dupla “e” e “n”, sendo KUa = {e, n}. A chave privada é definida pela dupla “d” e “n”, sendo KRb = {d, n}.
Capítulo 3 – O Algoritmo RSA RSA – Criptografia Assimétrica e Assinatura Digital
Para gerar a chave precisamos de algumas coisas:
Vejamos um exemplo:
Portanto teríamos KU = {3, 33} e KR = {7, 33}. Lembrando que neste caso e , d e n tem menos de 2^6 , então temos apenas 6 bits. Se tivéssemos um texto com o número 20, uma mensagem cifrada seria: C = Me^ mod n C = 20^3 mod 33 C = 8000 mod 33 C = 14
E para decifrar: M = C d^ mod n M = 14^7 mod 33 M = 105.413.504 mod 33 (resposta = 3.194.348 x 33 + 20 = 105.413.504) M = 20
Capítulo 3 – O Algoritmo RSA RSA – Criptografia Assimétrica e Assinatura Digital
Para decriptografar a mensagem C = 3650502 M = C d^ mod n M = 3650502^422191 mod 6012707 M = 5234673
Agora nossa chave pública (3.674.911) tem somente 23 bits (2^23 = 8388608), imaginem com 512 bits ou 1024 bits o tamanho dos cálculos. Isto expressa o grande overhead do protocolo RSA. Entende-se como um mínimo de segurança sendo p e q números com 512 bits e n tendo aproximadamente 1024 bits.
Criptografia e decriptografia do RSA envolvem muita exponenciação de inteiros e módulos de n. Porém exponenciação é algo que se leva tempo linear (x passos para um exp oente x)
x^32 = x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x
Porém pode-se resolver rapidamente em tempo log 2 (x). Para isso basta a cada multiplicação, faze-la por ela mesma, formando sucessivamente x^2 , x^4 , x^8 , x^16 , x^32 (5 passos ao invés de 32). Se x for um valor não múltiplo de 2, então basta fazer até o maior múltiplo antes de x, e depois multiplicações sucessivas. Por exemplo x^40 , então faríamos x^32 * x * x * x * x * x * x * x * x, ou ainda (x^32 * x^8 ).
O algoritmo para calcular ab^ mod n é:
c fl 0; d fl 1; k fl len(bits(b)) ; tamanho de b em binário. for i fl k downto 0 do { c fl 2 * c d fl (d * d) mod n if bi = 1 then { c fl c + 1 d fl (d * a) mod n } } return d Figura 4: Algoritmo para cálculo de ab^ mod n
Capítulo 3 – O Algoritmo RSA RSA – Criptografia Assimétrica e Assinatura Digital
i 9 8 7 6 5 4 3 2 1 0 bi 1 0 0 0 1 1 0 0 0 0 c 1 2 4 8 17 35 70 140 280 560 d 7 49 157 526 160 241 298 166 67 1 Tabela 3: Teste de Mesa para algoritmo ab^ mod n
Resultado para ab^ mod n, onde a = 7, b = 560 (1000110000), n = 561
3.4.1 –Módulo: A mod B
Nós dizemos que C=A mod B, sendo C o resto da divisão entre A e B. A função inversa é A=x*B + C, onde x é o resultado inteiro da divisão.
Por exemplo, para C=A mod B, onde A = 20 e B = 8:
20 / 8 = 2 e o resto é 4 (2*8=16+4=20), logo C = 20.
Lembrando que c=a em c=a mod b onde a > b, ou seja, se a > b então o resultado de a mod b é o valor de a. Exemplo: 5 mod 20 = 5.
Agora, são chamados de “ congruentes módulo n ” quando dois números inteiros a e b tem a seguinte expressão verdadeira (a mod n) = (b mod n). A notação para isso é: a ≡^ b mod n
Por exemplo:
a = 31 e b = 41, onde n = 5. 31 mod 5 = 1 e 41 mod 1 = 1
portanto 31 ≡^ 41 mod 5.
Outro exemplo: 73 ≡4 mod 23 pois:
73 mod 23 = 4 (porque 3 * 23 = 69 + 4 = 73) 4 mod 23 = 4 (porque 0 * 23 = 0 + 4 = 4, e também a>b, então c=a)