a criptografia rsa e sua implementação

46
1 UNIVERSIDADE REGIONAL DE BLUMENAU - FURB CENTRO DE CIÊNCIAS TECNOLÓGICAS - CCT ENGENHARIA DE TELECOMUNICAÇÕES ERACLIS ANTÓNIO ANDRADE ALVES A CRIPTOGRAFIA RSA E SUA IMPLEMENTAÇÃO BLUMENAU 2013

Upload: eraclis-alves

Post on 20-Oct-2015

95 views

Category:

Documents


40 download

DESCRIPTION

Trabalho de conclusão de curso para a obtenção do grau de Engenheiro de Telecomuncações

TRANSCRIPT

Page 1: A Criptografia RSA e sua Implementação

1

UNIVERSIDADE REGIONAL DE BLUMENAU - FURB

CENTRO DE CIÊNCIAS TECNOLÓGICAS - CCT

ENGENHARIA DE TELECOMUNICAÇÕES

ERACLIS ANTÓNIO ANDRADE ALVES

A CRIPTOGRAFIA RSA E SUA IMPLEMENTAÇÃO

BLUMENAU

2013

Page 2: A Criptografia RSA e sua Implementação

2

ERACLIS ANTÓNIO ANDRADE ALVES

A CRIPTOGRAFIA RSA E SUA IMPLEMENTAÇÃO

Trabalho de conclusão de curso do Curso de Engenharia de telecomunicações do Centro de Ciências Tecnológicas da Universidade Regional de Blumenau

Prof. Ciro André Pitz – Orientador

BLUMENAU

2013

Page 3: A Criptografia RSA e sua Implementação

3

Page 4: A Criptografia RSA e sua Implementação

4

RESUMO

O objetivo do presente trabalho é apresentar a implementação do método da

criptografia assimétrica RSA no software Matlab. É mostrado o funcionamento de tal

criptografia, particularidades e algumas das possíveis estratégias de ataque à segurança de

redes. A partir dessas estratégias de ataque, é demonstrado no presente trabalho o motivo pelo

qual o método RSA é o mais utilizado atualmente na segurança de redes.

Palavras Chaves: Segurança em redes, Criptografia, RSA, Matlab.

Page 5: A Criptografia RSA e sua Implementação

5

ABSTRACT

The purpose of this paper is to present the implementation of the RSA asymmetric

cryptography method in Matlab. It is shown the operation of such cryptography, peculiarities

and some possible attack strategies to network security. From these attack strategies, is shown

in this paper why the RSA method is currently the most widely used in network security.

Keywords: Network Security, cryptography, RSA, Matlab.

Page 6: A Criptografia RSA e sua Implementação

6

SUMÁRIO

1 Introdução ....................................................................................................................................... 7

1.1 Objetivos ................................................................................................................................. 7

1.2 Estrutura do trabalho .............................................................................................................. 7

2 Conceitos sobre criptografia ........................................................................................................... 9

2.1 Uma breve história da criptografia ......................................................................................... 9

2.2 Funções matemáticas tipicamente utilizadas ....................................................................... 13

2.2.1 Teorema da fatoração única ......................................................................................... 13

2.2.2 A função Phi de Euler .................................................................................................... 14

2.2.3 Congruências ................................................................................................................. 14

2.2.4 Inverso multiplicativo .................................................................................................... 15

2.3 Finalidade da criptografia...................................................................................................... 15

2.4 Tipos de criptografia.............................................................................................................. 16

2.4.1 Criptografia de chave simétrica .................................................................................... 16

2.4.2 Criptografia de chave pública ........................................................................................ 18

3 A criptografia RSA .......................................................................................................................... 21

3.1 Desempenho VS Segurança................................................................................................... 24

3.2 Ataques ................................................................................................................................. 25

3.2.1 Fatoração ....................................................................................................................... 25

3.2.2 Funções unidirecionais .................................................................................................. 26

4 Implementação da criptografia RSA utilizando o Matlab ............................................................. 28

4.1 Resultados ............................................................................................................................. 30

5 Conclusão ...................................................................................................................................... 33

6 REFERÊNCIAS ................................................................................................................................. 34

7 ANEXOS ......................................................................................................................................... 35

Page 7: A Criptografia RSA e sua Implementação

7

1 INTRODUÇÃO

A criptografia é um assunto que acompanha o homem desde muito tempo. A partir do

momento que se iniciou a comunicação à distância, percebeu-se a necessidade de encontrar

formas para “ocultar” as mensagens de forma que não pudessem ser lidas por outras pessoas

que não fossem o destinatário desejável. A esteganografia (estudo da camuflagem das

mensagens) é percursora das técnicas da criptografia, onde esta última procura tornar as

mensagens ilegíveis para pessoas não autorizadas em vez de escondê-las.

A criptografia se torna uma ferramenta muito importante, especialmente quando

analisada na era da informação digital em que se vive, onde diariamente circula milhões de

dados na internet. Desta maneira é necessário garantir que cada mensagem chegue ao seu

destinatário correspondente e que não sejam interceptadas por inimigos, ou seja, é preciso

desenvolver técnicas que forneçam essa privacidade. Para a evolução e aperfeiçoamento

dessas técnicas, tanto criptógrafos (criadores de novas criptografias) quanto criptoanalistas

(investigadores de falhas nas criptografias) se fazem necessários.

1.1 Objetivos

Neste contexto, a proposta de tema para o trabalho de conclusão de curso é a descrição

do método RSA, apresentando suas particularidades e realizando a implementação do

algoritmo em Matlab.

O estudo da criptografia assimétrica RSA, é feito evidenciando os seguintes aspectos:

• As funções matemáticas tipicamente utilizadas

• A descrição do método

• A sua implementação no software Matlab

• A segurança proporcionada

• Possíveis pontos de ataques

1.2 Estrutura do trabalho

No capítulo 2 do presente trabalho, será mostrada a evolução e a importância da

criptografia ao longo dos tempos. Serão apresentados os tipos de criptografias mais usados

Page 8: A Criptografia RSA e sua Implementação

8

atualmente, os modelos de chaves simétricas e assimétricas. Falar-se-á da criptografia de

chaves simétricas, e como este contribui para o surgimento das chaves assimétricas.

Já no capítulo subsequente será feito o a fundamentação teórica do RSA. Sendo que no

capítulo 4, é mostrado como foi feita a implementação no software de simulação. Nesse

mesmo capítulo apresentam-se algumas características do método.

Page 9: A Criptografia RSA e sua Implementação

9

2 CONCEITOS SOBRE CRIPTOGRAFIA

Para a compreensão do trabalho e dos conteúdos subsequentes, é necessário o

conhecimento de alguns conceitos listados a seguir:

• Encriptação – tornar a mensagem ininteligível para os que não estão autorizados a tê-

la.

• Alfabeto simples – o alfabeto usado para escrever a mensagem original.

• Alfabeto em cifra – as letras que substituem as do alfabeto simples no texto cifrado.

• Texto simples – a mensagem antes de ser encriptada.

• Texto em cifra – a mensagem depois de ser encriptada.

• Decriptação – tornar clara uma mensagem codificada.

• Criptologia – é o estudo da criptografia e criptoanálise.

• Criptoanálise – é o estudo de métodos matemáticas para tentar derrotar técnicas

criptográficas.

Observação: Por convenção, nesse trabalho, as palavras criptar e/ou codificar fazem

referência ao processo de encriptação. Do mesmo modo, as palavras decodificar e decriptar

aqui assumem mesmo significado.

2.1 Uma breve história da criptografia

A palavra criptografia tem origem no grego, onde cryptos significa oculto, secreto,

escondido e grafo significa escrita, grafia. Ela estuda os métodos para codificar uma

mensagem de modo que só seu destinatário legítimo consiga interpretá-la [1]. É a ciência da

escrita secreta, que começou provavelmente por volta de 2000 a.C no Egito, onde hieróglifos

eram usados para decorar os túmulos dos falecidos governantes e reis. Esses hieróglifos

contavam a história da vida do rei e proclamava as grandes obras de sua vida. Eles eram

propositadamente enigmáticos, mas aparentemente não pretendiam ocultar o texto [2].

Com o passar do tempo, essa arte tornou-se cada vez mais complicada e sofisticada,

tendo os seus grandes momentos especialmente durante épocas de guerras militares Há muitas

personalidades notáveis que participaram da evolução da criptografia. Por exemplo: a Júlio

César é creditada a criação de um dos primeiros sistemas de criptografia para enviar

Page 10: A Criptografia RSA e sua Implementação

10

mensagens militares a seus generais [2], designado de “cifra de César”. A cifra de César

baseia-se num alfabeto de cifra que avança um certo número de lugares (neste caso, três)

relativamente ao alfabeto simples [3]:

Tabela 2.1 - Cifra de César aplicada a uma mensagem breve.

Alfabeto simples 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

Alfabeto de cifra 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

Texto simples fujam todos

Texto em cifra IXMDP WRGRV

Esse avanço do alfabeto de cifra em relação ao alfabeto simples é conhecido também

como “deslocação de César”. Na Tabela 2.1, essa deslocação seria de três, pois o alfabeto de

cifra avança três lugares em relação ao simples. No caso geral este tipo de cifra é chamado

“cifra de substituição monoalfabética”, dado que usava apenas um alfabeto de cifra. Durante

séculos, a cifra de substituição monoalfabética foi suficiente para garantir sigilo. O

desenvolvimento subsequente da análise de frequências destruiu a sua segurança.

Posteriormente, surgiu uma classe de cifra conhecida como polialfabética, que

propunha a utilização de dois ou mais alfabetos de cifra (sendo estes com deslocações de

César diferentes entre si) e a alternância entre um e outro durante a codificação. A grande

vantagem da cifra polialfabética é que a mesma letra do texto simples não aparece

necessariamente como a mesma letra no texto em cifra. Também era muito mais complicada

de usar. Apesar deste esforço adicional exigido para implementá-la, ela era muito eficaz e

também havia um outro fator que encorajava o uso de uma forma de criptação segura: o

desenvolvimento do telégrafo, 1844, e a necessidade de proteger os telegramas da intercepção

e decifração. Embora tenha conseguido resistir bastante tempo sem solução, Charles Babage e

Friedrich Kasiski acabariam por resolver todas as cifras polialfabéticas. Assim sendo, no final

do séc. XIX, os criptógrafos andavam à procura de uma cifra nova, de algo que restabelecesse

a comunicação secreta, permitindo explorar a imediaticidade do telégrafo sem que as

comunicações fossem roubadas ou decifradas. Além disso, na virada do século XIX, o físico

italiano Guglielmo Marconi tinha inventado a rádio. O sistema de Marconi, tinha grande

vantagem em relação ao telégrafo, pois não precisava de fios para estabelecer uma

Page 11: A Criptografia RSA e sua Implementação

11

comunicação. Possibilitava uma facilidade de comunicação, como também uma facilidade de

intercepção. Em conjunto, o advento da rádio e o começo da primeira guerra mundial

intensificaram a necessidade de uma criptação eficaz.

Embora a criptografia foi utilizada durante a Primeira Guerra Mundial, uma das

máquinas mais notáveis foram empregadas durante a Segunda Guerra Mundial. Nessa época

começaria o que foi chamado de mecanização do sigilo. A fim de reforçarem as suas cifras, os

criptógrafos foram forçados a abandonar a sua abordagem do sigilo com papel e lápis e a

explorar a tecnologia mais recente para codificar mensagens [3]. E uma das grandes

realizações da criptografia foi feito pelo inventor alemão Arthur Scherbius que desenvolveu

uma peça de maquinaria criptográfica designada de Enigma, uma máquina de cifra baseada

em cifradores rotativos, que pode ser visto nas figuras 2.1 e 2.2.

Figura 2.1. Máquina Enigma.

Fonte: [3], pág. 145.

Page 12: A Criptografia RSA e sua Implementação

12

Figura 2.2- Desenho do Enigma com 3 cifradores e 1 refletor que envia a corrente para trás através dos cifradores. Nesta regulação particular, digitar b acaba por iluminar D no painel de lâmpadas.

Fonte: [3], pág. 139.

O Enigma foi muito usado durante a segunda guerra mundial, pelos Alemães para

comunicação no campo de batalha. Para codificar uma mensagem, primeiro eram escolhidas

as orientações dos cifradores (essa era a chave), em seguida através do teclado era digitada a

respectiva mensagem que se queria enviar. Para cada letra digitada, no painel de lâmpadas era

mostrada a letra cifrada correspondente. Porém, o seu algoritmo foi “quebrado” nesse mesmo

período. Na verdade, um dos primeiros computadores foi criado para decifrar as mensagens

secretas estabelecidas pelo exército alemão durante a Segunda Guerra Mundial. Um projeto

foi desenvolvido na época em Bletchley Park, Inglaterra, para tentar decifrar o código alemão.

Um dos responsáveis por este projeto era Alan Turing, o idealizador da máquina de Turing.

Era uma máquina que procurava automaticamente as regulações corretas dos cifradores.

Como consequência deste projeto foi construído um dos precursores do computador, o

Colossus. [3]

Com o desenvolvimento subsequente do computador programável, os criptógrafos

começaram a explorar o poder dos computadores com vista a criarem cifras cada vez mais

complexas. Entretanto a criptação por meio de computador estava limitada àqueles que o

possuíssem, que de início significava o governo e os militares. Porém, graças a um série de

descobertas como, a invenção do transístor (1946), circuito integrado (1959), anunciaram uma

nova era no domínio da informática. A proliferação dos computadores e sistemas de

Page 13: A Criptografia RSA e sua Implementação

13

comunicação criou uma grande demanda do sector privado procurando, na Criptografia,

meios para proteger a informação na forma digital e fornecer serviços de segurança.

Por conseguinte na década de 70, o Dr. Horst Feistel estabeleceu o precursor do DES

(Data Encription Standart) com sua família de cifras, as “cifras de Feistel”, enquanto

trabalhava no Laboratório de Pesquisa Watson da IBM. Em 1976, a Agência de Segurança

Nacional (NSA) trabalhou com as cifras de Feistel estabelecendo, o que hoje é conhecido

como DES (foi o primeiro modelo de criptografia simétrica na época moderna). Do mesmo

modo em 1976, dois contemporâneos de Feistel, Whitfield Diffie e Martin Hellman

introduziram pela primeira vez a idéia de criptografia de chave pública em uma publicação

intitulada "New Directions in Cryptography” [4]. Whitfield e Martin haviam engendrado uma

nova forma de cifrar as mensagens, chamada de criptografia assimétrica ou de chave pública.

No código usado por Júlio César, se você sabe codificar, então também sabe decodificar. No

entanto, na criptografia assimétrica saber codificar não implica saber decodificar. Isto parece

impossível: se sei codificar, para decodificar basta desfazer o que fiz. Nos capítulos seguintes

será visto que “desfazer” o processo de decodificação pode não ser tão simples quanto parece

[1].

Apesar de terem concebido a ideia de chave pública, não tinham um exemplo específico às

suas disposições. Todavia, em 1978 três pesquisadores do MIT, Ronald Rivest, Adi Shamir e

Leonard Adleman, publicaram um artigo, aonde mostraram o que viria ser a primeira cifra

assimétrica, o RSA.

2.2 Funções matemáticas tipicamente utilizadas

O principal pré-requisito para o entendimento dos capítulos posteriores é uma

familiarização com alguns conceitos matemáticos. A ideia é apresentar tais conceitos nas suas

formas mais simples, não tratando aqui de provar quaisquer umas delas matematicamente.

Entretanto se o leitor quiser saber mais sobre o assunto, há algumas referências no trabalho.

2.2.1 Teorema da fatoração única

Fatoração é decompor inteiros em números primos. Um número inteiro � é primo se

� ≠ ±1 e os únicos divisores de � são ±1 e �. Portanto 2, 3, 5, e -7 são primos, mas 45 = 5*9

não é primo. Um número inteiro, diferente de ±1, que não é primo é chamado de composto.

Logo 45 é composto.

Page 14: A Criptografia RSA e sua Implementação

14

Teorema da fatoração única. Dado um inteiro positivo n≥2 podemos sempre escrevê-

lo, de modo único, na forma:

� = �� ∗ ��

∗ ��� , (2.1)

onde 1 < �� < �� < �� < ⋯ < �� são números primos e ��,��, …… . , �� são inteiros

positivos [1].

Exemplo:

45 = 5 ∗ 9

↔ 45 = 5� ∗ 3�, onde 3 e 5 são números primos e 2 e 1 são inteiros positivos.

2.2.2 A função Phi de Euler

A função Phi (�(�)) para todo n≥ 1 denota o número de inteiros positivos que não

excedem n e que são co-primos a n. Dois números inteiros são ditos co-primos quando o

máximo divisor comum (m.d.c) entre eles é igual a 1.

Exemplo: �(6) = 2, significa que há dois números co-primos a 6, isto é, o m.d.c com 6 é

igual a 1.

1 e 6 - m.d.c (1, 6) =1. São co-primos , logo 1 é um dos dois números.

2 e 6 - m.d.c (2, 6) =2. Não são co-primos, logo 2 não é um dos números.

3 e 6 - m.d.c (3, 6) =3. Não são co-primos, logo 3 não é um dos números.

4 e 6 - m.d.c (4, 6) =2. Não são co-primos, logo 4 não é um dos números.

5 e 6 - m.d.c (5, 6) =1. São co-primos, logo 5 é o outro número.

2.2.3 Congruências

Definição: Seja m um número natural. Dois inteiros a e b dizem-se congruentes

módulo m se tiverem o mesmo resto na divisão por m [1]. Essa notação é representada pela

equação (2.2):

" ≡ $(mod() (2.2)

Z = "mod$ (2.3)

Sendo que a equação (2.3) retorna o resto da divisão de " por b

Por exemplo: 13 ≡ 18(mod5)

Page 15: A Criptografia RSA e sua Implementação

15

Usando a equação (2.3) fica:

13 mod 5 = 3, e 18 mod 5 = 3, como o resto das duas divisões são iguais, isso significa que,

13 e 18 são congruentes módulo 5.

2.2.4 Inverso multiplicativo

O inverso multiplicativo de a modulo n é um inteiro x < n de maneira que a equação

(2.4), seja:

"+ ≡ 1(mod�) (2.4)

"+mod� = 1 (2.5)

A equação (2.4) pode ser simplificada na equação (2.5). Se o x existir, ele é único, e a é dito

invertível. O inverso de a é denotado de ",�, deste modo + = ",�(mod�) [5].

Exemplo: 4+ ≡ 1(mod9), pode-se dizer que x = 7 é o inverso multiplicativo de 4, uma vez

que (4 ∗ 7)mod9 = 1.

2.3 Finalidade da criptografia

A criptografia se tornou essencial para garantir a privacidade das comunicações no

mundo atual, principalmente em redes de computadores públicas como a internet, por onde

circulam dados pessoais, comerciais, bancários e outros.

Em uma situação típica onde a criptografia é usada, duas partes (X e Y) se comunicam

através de um canal inseguro. X e Y querem garantir que a comunicação estabelecida entre

eles seja incompreensível por qualquer pessoa que possa estar ouvindo. Além disso, como X e

Y estão em locais remotos, X deve ter certeza de que as informações que recebe do Y não

tenham sido modificadas por qualquer pessoa durante a transmissão. Adicionalmente, ela

deve ter certeza de que a informação realmente se origina a partir de Y e não alguém

personificando Y [6]. A criptografia é usada para alcançar os seguintes objetivos:

• Confidencialidade: é um serviço usado para manter o conteúdo de informação

ininteligível (permaneça privado) a todos, exceto aqueles autorizados a tê-lo.

• Integridade dos dados: é um serviço que aborda a alteração não autorizada de dados.

Page 16: A Criptografia RSA e sua Implementação

16

• Autenticação: é um serviço relacionado à identificação. Esta função se aplica a ambas

as entidades (partes envolvidas na comunicação).

• Não repudiação: é um serviço que evita uma entidade de negar compromissos ou

ações anteriores. Por exemplo, uma entidade pode autorizar a aquisição de uma

propriedade (um bem) por outra entidade e, posteriormente, negar que tal autorização

foi concedida. Um procedimento que envolve uma terceira parte confiável é necessário

para resolver a disputa.

O objetivo fundamental da criptografia é tratar adequadamente essas quatro áreas,

tanto na teoria quanto na prática. Criptografia é sobre a prevenção e detecção de fraudes [5].

2.4 Tipos de criptografia

Técnicas de criptografia são geralmente divididos em dois tipos genéricos:

• Criptografia de chave secreta que também é conhecido como criptografia de chave

simétrica;

• Criptografia de chave pública que também é conhecido como criptografia de chave

assimétrica;

Para o entendimento da seção seguinte, torna-se necessário à compreensão das

seguintes simbologias:

./(() = 0 : Encriptação da mensagem m, usando a chave x, originando o texto cifrado c

12(0) = ( : Decriptação do texto cifrado c, usando a chave y, obtendo a mensagem m.

2.4.1 Criptografia de chave simétrica

Na criptografia de chave simétrica, uma única chave é usada, tanto na encriptação e

decriptação. Como será mostrado na figura abaixo, o remetente utiliza a chave para codificar

o texto simples e envia a mensagem cifrada para o receptor. O destinatário aplica a mesma

chave para decodificar a mensagem e recuperar o texto simples. Como uma única chave é

usada para ambas a funções (codificação e decodificação), a criptografia de chave secreta é

também chamada de criptografia simétrica. Com esta forma de criptografia, é óbvio que a

Page 17: A Criptografia RSA e sua Implementação

17

chave deve ser do conhecimento tanto do remetente como do receptor, na verdade esse é o

segredo [6]. A figura 2.3 ilustra o conceito de chave simétrica.

Figura 2.3 - Encriptação usando chave Simétrica.

Fonte: [5], pág. 16.

Isso resulta em uma situação bastante paradoxal: Antes de usar este método para

comunicar um segredo (uma mensagem criptografada), um outro segredo deve ser

comunicado com antecedência: a chave. A maior dificuldade com esta abordagem é a

distribuição da chave, isto é, de sempre ter que trocar chaves, garantindo que elas não sejam

interceptadas por terceiros/adversários. Esta limitação das chaves simétricas acabou por

impulsionar o surgimento das chaves assimétricas, cuja ideia era de criar um novo tipo de

criptografia, onde a chave utilizada para a decriptação, não precisasse ser trocada.

Exemplos de chaves simétricas: DES, RC2, RC4, IDEA (International Data Encryption

Algorithm).

Page 18: A Criptografia RSA e sua Implementação

18

Vantagens:

• As chaves são relativamente curtas;

• Chaves simétricas podem ser projetadas para ter altas taxas de transferência de dados.

Desvantagens:

• Numa comunicação entre duas partes, a chave deve permanecer em segredo em ambos

os lados;

• Numa rede grande, existem muitos pares de chaves a serem gerenciados;

• Em uma comunicação de duas partes entre as entidades X e Y, às vezes é necessário

que a chave seja alterada frequentemente e, talvez, para cada sessão de comunicação.

2.4.2 Criptografia de chave pública

Num sistema de chave assimétrico, como o próprio nome sugere, as chaves de

codificação e de decodificação não são idênticas. O destinatário (pessoa que quer receber a

mensagem encriptada) gera dois pares de chaves diferentes, uma pública e a outra privada. A

chave privada não pode ser compartilhada com ninguém. O proprietário da chave privada é

responsável pela segurança dela, de tal modo que ela não seja perdido ou comprometido. Por

outro lado, a chave pública é apenas isso, pública. Criptografia de chave pública pretende que

a chave pública seja acessível a todos os usuários. Na verdade, isso é o que torna o sistema

forte. Se uma pessoa pode acessar chave pública de qualquer um com facilidade, geralmente

através de algum tipo de serviço de diretório, em seguida, as duas partes podem se comunicar

de forma segura e com pouco esforço, ou seja, sem um prévio acordo de distribuição de

chaves [6]. A figura 2.4 descreve a criptografia de chave pública:

Page 19: A Criptografia RSA e sua Implementação

19

Figura 2.4 - Encriptação usando chave Assimétrica.

Fonte: [5], pág. 26.

Vale frisar que na figura 2.4, o adversário é passivo, ele só é capaz de ler as

informações de um canal inseguro, então tanto a distribuição da chave pública (e), como a

mensagem codificada (c), através de um canal inseguro pode ser feita, sem comprometer o

conteúdo da mensagem. Caso o adversário fosse ativo (aquele que também pode transmitir,

alterar ou excluir informações em um canal inseguro), seria necessário a autenticação das

chaves públicas, verificando assim a verdadeira origem das mesmas. Alice deve ser

convencida de que ela está codificando as mensagens com a chave pública legítima de Bob, e

não de alguém se passando por Bob.

Exemplos de chaves assimétricas: RSA, ElGamal, Rabin, ECC (Elliptic curve cryptography).

Vantagens:

• Somente a chave privada deve ser mantida em segredo;

Page 20: A Criptografia RSA e sua Implementação

20

• Dependendo do modo de utilização, um par de chaves pública/privada pode

permanecer inalterado por períodos de tempo consideráveis;

• Numa rede grande, o número de chaves necessárias pode ser consideravelmente menor

do que no cenário de chave simétrica.

Desvantagens:

• Taxas de transferência para os métodos de criptografia de chave pública mais

populares são de diversas ordens de valor mais lento do que os mais conhecidos

esquemas de chave simétrica;

• Tamanho das chaves são normalmente muito maiores do que aqueles requeridos para a

criptografia de chave simétrica1.

Criptografia de chave simétrica e de chave pública tem uma série de vantagens

complementares. Sistemas criptográficos atuais exploram os pontos fortes de cada um.

Técnicas de criptografia de chave pública podem ser usadas para estabelecer uma chave para

o sistema de chave simétrica, sendo utilizado por entidades X e Y na comunicação. Neste

cenário, X e Y podem aproveitar a natureza de longo prazo das chaves do esquema de chave

pública e a eficiência de desempenho do sistema de chave simétrica2 [5].

1 As chaves privadas dos sistemas de chave pública devem ser grandes (1024 bits no caso de RSA) já as chaves

secretas em sistemas de chave simétrica (64 ou 128 bits). 2 Até o momento, o desempenho computacional (número de bits/segundos) de criptografia de chave pública é

inferior à da criptografia de chave simétrica.

Page 21: A Criptografia RSA e sua Implementação

21

3 A CRIPTOGRAFIA RSA

Atualmente, o sistema de chave pública mais conhecido e utilizado é o RSA [7], que

foi proposto pela primeira vez no artigo "A method for obtaining digital signatures and

public-key cryptosystems" por Rivest et al em 1978. O nome do método se deve às inicias dos

criadores, Ronald Rivest, Adi Shamir e Leonard Adleman. É um sistema com base na teoria

dos números, que pode ser usado tanto para fornecer o sigilo como assinaturas digitais3. De

acordo com [8] o esquema do RSA é a seguinte:

Geração das chaves:

� São gerados dois números primos grandes4, secretos e randômicos p e q aproximadamente do mesmo tamanho

� Calcular o n de acordo com a equação (3.1) � = � ∗ 3 (3.1)

� Calcular o �(�) conforme a equação (3.2)

�(�) = (� − 1) ∗ (3 − 1) (3.2)

� Selecionar um inteiro randômico �, 1 < � < �(�) onde m.d.c.(�, �(�)) =1[Anexo B];

� Computar o valor do 5[AnexoA], 1 < 5 < �(�), segundo a equação (3.3) � ∗ 5 ≡ 1mod�(�) (3.3)

� Após a geração das chaves pela entidade X, a mesma determina as chaves públicas e

privadas. O par (5, �) são as chaves privadas. Enquanto o par (�, �) as chaves públicas.

Encriptação

A entidade Y irá codificar uma mensagem para a entidade X, que será descodificada pela

entidade X.

Entidade Y deve fazer o seguinte:

3 Para mais informações sobre o uso do método para assinaturas digitais, ver [9]

4 Nas aplicações práticas entende-se como um mínimo de segurança sendo cada um dos números com 512

bits.

Page 22: A Criptografia RSA e sua Implementação

22

� Obter a chave pública da entidade X.

� Representar a mensagem m como um inteiro no intervalo de [0…� − 1]

� Computar a equação (3.4)

< = (mod � (3.4)

� Enviar o texto codificado < para a entidade X

Decriptação

Para recuperar a mensagem original m do texto cifrado <, a entidade X deve fazer o seguinte:

� Obter o texto cifrado <da entidade Y

� Recuperar a mensagem utilizando as chaves privadas (d e n) previamente geradas

aplicando-se a equação (3.5)

( = 0=mod � (3.5)

Antes de fazer a codificação RSA, é feita uma pré-codificação, onde se converte as

letras em números usando uma tabela de conversão. Um exemplo pode ser visto na tabela 3.1:

Tabela 3.1 - Pré-codificação

O espaço entre duas palavras será substituído pelo número 99, quando for feita a conversão.

Por exemplo, se a mensagem a ser transmitida for mulher na noite, ela será convertida nessa

sequência numérica, a qual será designada de sequência 1:

223021171427992310992324182914 (Sequência 1)

Se for escolhido um � = 17 e q = 19, segundo a equação (3.1), � = 323.

Consequentemente, a sequência 1 deve ser quebrada em blocos5 menores que 323, sendo estes

5 Deve-se evitar que o bloco comece por zero, porque traria problemas na hora de decodificar. Ver [1] Pag. 182

Fonte: [1], pág. 181.

A B C D E F G H I J K L M

10 11 12 13 14 15 16 17 18 19 20 21 22

N O P Q R S T U V W X Y Z

23 24 25 26 27 28 29 30 31 32 33 34 35

Page 23: A Criptografia RSA e sua Implementação

23

os blocos a serem codificados. A divisão da sequência 1 em blocos configura assim a etapa

seguinte, aqui denominada de sequência 2. Podem ser esses os blocos:

22–302–117–142–79–92–310–99–23–24–182–91–4 (Sequência 2)

Depois calcula-se a partir da equação (3.2), o valor de ��323� = 288. A partir deste calcula-

se o valor do �. Neste caso os valores de � poderiam ser quaisquer um dos valores abaixo, pois

estão todos no intervalo requerido e o máximo divisor comum com o 288 é 1:

5, 7, 11, 13, 17, 19, 23, 25, 29, 31, 35, 37, 41, 43, 47, 49, ......... , 287.

Suponhamos que é escolhido � = 11. Em seguida deve ser feito o cálculo do valor do 5. É

um valor que satisfaça a equação (3.3), isto de uma forma simplificada:

� ∗ 5 (?5 ��323� = 1

↔ �11 ∗ 5 � (?5 288 = 1

O valor do 5 = 131. Sendo assim as chaves são:

• Chaves públicas: (�, �) = (11, 323)

• Chaves privadas: (5,�) = (131, 323)

Como n =323 (@A@AAAA@@B�, tem 9 bits, dizemos que este é um algoritmo com chave de

9 bits6.

Tendo feito a pré-codificação, a criação das respectivas chaves públicas e privadas,

logo em seguida será feita a codificação propriamente dita. Para isso é ilustrado a codificação

e decodificação só do primeiro bloco da sequência 2, lembrado que o processo é idêntico para

os outros blocos.

Para codificar é utilizada a equação (3.4), onde o m recebe o valor do bloco, o (n, e)

são as chaves públicas:

< = 22��mod323

↔ < = 181

Para decodificar, deve-se usar a equação (3.5), sendo o C o valor do texto codificado,

o (n, d) as chaves privadas correspondentes. Portanto a decodificação fica:

6 Para se ter uma ideia, em aplicações práticas, entende-se como um mínimo de segurança n tendo

aproximadamente 1024 bits.

Page 24: A Criptografia RSA e sua Implementação

24

( = 181���mod 323

↔ ( = 22

Como pode ser visto, através do texto codificado foi possível chegar à mensagem original m.

É bom enfatizar que para além do d, são também consideradas chaves privadas �, qe

�(�). Uma vez que ninguém pode ter acesso a essas informações, exceto quem as gerou.Se o

“inimigo” tiver conhecimento de qualquer um desses dados, o método pode ser “quebrado”.

Se ele conhecer o valor de �(�) , ele consegue calcular o 5 = �,�(mod�(�)). Ou se ele

conseguir os valores de � e q, ele computa o valor do �(�) = (� − 1) ∗ (3 − 1), e

consequentemente ele tem o valor dodcalculado por5 = �,�(mod�(�)).

3.1 Desempenho VS Segurança

Embora o RSA ofereça excelente segurança criptográfica, por causa da complexidade

dos cálculos matemáticos envolvidos no algoritmo, ele cifra e decifra mensagens de forma

muito lenta, quando comparado aos algoritmos de chave simétrica. Por isso em muitas

aplicações de RSA, o usuário usa uma pequena chave pública para acelerar a operação de

encriptação. No entanto, a operação de decriptação deve tomar mais custos computacionais

para realizar a exponenciação modular, pois o expoente da chave privada é sempre muito

grande. O tamanho da chave privada depende das necessidades dos usuários para manter o

segredo. Quanto maior for a chave privada, maior é a segurança, mas também mais lenta é a

velocidade correspondente de cálculo.

Deste modo, serão listadas algumas precauções a serem tomadas no que se diz respeito

ao RSA:

Expoente de chave pública

Para reduzir o tempo de encriptação ou de verificação da assinatura, tem sido proposto o uso

de um pequeno expoente e. Os menores valores propostos para e são 3 e 17, porém para

defender-se de certos ataques um valor de e = 65537 é recomendado [9].

Page 25: A Criptografia RSA e sua Implementação

25

Expoente de chave privada

É importante que d seja escolhido grande o suficiente de forma que um criptoanalista não

pode encontrá-lo por meio de busca direta. Mostra-se que, se o expoente privado (d) utilizado

for menor que n^0,292, então o sistema não é seguro, isto é, pode ser “quebrado” [10].

Entretanto isso requer um alto grau de conhecimento matemático.

Escolha dos primos

Devemos tomar alguns cuidados na escolha dos números primos, pois se p e q forem

pequenos, torna-se fácil encontrá-los. Ou se, mesmo sendo grandes, se |p – q| for pequeno

torna-se fácil achá-los a partir de n, utilizando um algoritmo de Fermat7. Os fatores p e q de n

devem ser ambos bem grandes, e da mesma ordem de grandeza da raiz quadrada de n.

3.2 Ataques

Uma forma de atacar RSA, matematicamente, é fatorar n em seus dois fatores

primos. Isto permite o cálculo �(�) = (� − 1) ∗ (3 − 1), que, por sua vez, permite

determinação de 5 = �,�(mod�(�)).

3.2.1 Fatoração

Em teoria dos números, fatoração de um inteiro é a decomposição de um número

composto em divisores menores não triviais, que, quando multiplicados juntos igualam ao

valor original. Quando os números são muito grandes, nenhum algoritmo de fatoração

eficiente é conhecido. Um esforço concluído em 2009 por vários pesquisadores conseguiram

fatorar um número 232 dígitos (RSA-768), utilizando centenas de máquinas em um período

de dois anos. Nem todos os números de um determinado comprimento são igualmente difíceis

de fatorar. Os casos mais difíceis desses problemas (para as técnicas atualmente conhecidos)

são semiprimos, o produto de dois números primos. Quando eles são grandes, escolhidos

7 Para mais informações sobre a escolha dos números primos, consulte [1], Pág.187

Page 26: A Criptografia RSA e sua Implementação

26

aleatoriamente, e aproximadamente do mesmo tamanho, mesmo os mais rápidos algoritmos

de fatoração nos mais rápidos computadores podem levar tempo suficiente para fazer a busca

impraticável [11]. A fim de garantir a segurança de um sistema RSA, o comprimento do n é

geralmente superior a 1024 bits em uso no comércio atual [12].

3.2.2 Funções unidirecionais

No início de trabalho, foi dito que na criptografia de chave assimétrica, saber codificar

não significava saber decodificar. Então, mesmo que prove que não é possível fatorizar

inteiros no período de tempo considerado eficaz, o RSA só vai ser seguro mesmo se não

houver como inverter a função de codificação. Mas como é possível saber codificar uma

mensagem e não saber decodificar a mesma mensagem? Pois bem, antes de mais nada, é

preciso saber que a criptografia de chave pública é baseado num tipo de função que é

considerada “especial”.

A maioria das funções matemáticas são classificadas como funções bidirecionais visto

que são fáceis de fazer e fáceis de desfazer. Tem-se o conhecimento de que o número 50 foi

resultado de uma duplicação, para obter o número que a originou é só efetuar a operação

contrária, isto é, divide-se 50 por 2 e tem-se o valor original que é 25. Entretanto a função

usada na criptografia assimétrica é chamada de função unidirecional, ou One-way functions,

como o próprio nome sugere é fácil de fazer, mas muito difícil de desfazer.

One-way functions

São chamadas funções unidirecionais, porque são fáceis de computar numa direção,

mas aparentemente muito difícil de computar na direção contrária. Um exemplo é ilustrado na

tabela 3.2:

Tabela 3.2 - Exemplo de uma one-way function, C�D� = ED mod 17

x 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

F�+� 3 9 10 13 5 15 11 16 14 8 7 4 12 2 6 1

Fonte: [5], pág. 8.

Page 27: A Criptografia RSA e sua Implementação

27

Dado um número x entre 1 e 16, é relativamente fácil encontrar a imagem de f. No entanto,

dado um número f(x)=7, sem ter a tabela disponível, é muito difícil encontrar o valor

correspondente de x.

É importante mencionar que neste exemplo específico foram usados números

pequenos, só para uma questão de comparação. Porém, quando utilizados números muito

grandes fica mais difícil ainda de encontrar x a partir de f(x).

Trapdoor one-way functions

É uma one-way function com a propriedade adicional de que dado alguma informação

extra (chamado de trapdoor), torna-se possível encontrar x a partir de f(x) [5]. Um exemplo de

uma trapdoor one-way function seria a função utilizada no método RSA, sendo que o valor do

d (chave privada) seria o trapdoor, ou seja, com esse valor é possível inverter o texto cifrado

na mensagem original. Sem essa informação especial (adicional) a referida inversão é um

processo muito difícil.

Outras formas de ataques também são mencionadas, onde:

• A função ���� é determinado diretamente, sem determinar p e q. Novamente,

isto permite a determinação de 5 = �,�(mod�(�)).

• O valor do d é determinado diretamente, sem determinar �(�).

Contudo, argumenta-se que essas abordagens não são mais fáceis do que fatorar n [13].

Page 28: A Criptografia RSA e sua Implementação

28

4 IMPLEMENTAÇÃO DA CRIPTOGRAFIA RSA UTILIZANDO O MATLAB

A implementação foi feita no software Matlab, aonde foi desenvolvida cinco funções,

que depois pode ser chamada a partir da janela de comando. Vale a pena enfatizar que como

tudo foi desenvolvido na janela de comando do Matlab, os valores gerados nos passos

anteriores ficam gravados nas respectivas variáveis. Abaixo será mostrado a particularidade

de cada umas dessas funções:

• funcao_primos ;

• Escolheprimos ;

• RSA_public ;

• RSA_cod ;

• RSA_decod .

funcao_primos

O formato dessa função é: [h] =funcao_primos(inicio,numero_de_primos) onde

[h] é o parâmetro de saída, neste caso serão os números primos gerados de acordo com os

parâmetros de entrada (inicio,numero_de_primos). O inicio é o valor de

referência através do qual serão gerados os números primos. Já, numero_de_primos é a

quantidade de primos gerados a partir do valor de referência (inicio) informado. A única

condição exigida da respectiva função, é que o valor do inicio seja maior ou igual a 3. O

código desenvolvido para a função em questão é apresentado no Anexo C do trabalho.

Exemplo:

inicio = 10

numero_de_primos = 6

[h] =funcao_primos(10, 6). A função irá gerar 6 respectivos primos depois de 10.

[h] = 11, 13, 17, 19, 23, 29.

Escolheprimos

A forma da função é: [p,q]=escolheprimos(h) , onde (h) é o parâmetro de

entrada, que nada mais é do que a lista de números primos gerados pela funcao_primos.

Page 29: A Criptografia RSA e sua Implementação

29

Através dessa lista o escolheprimos seleciona dois primos aleatórios e atribui um para o

p e o outro para o q, que são os parâmetros de saída [p,q] . No Anexo D do trabalho é

apresentado o código desenvolvido para a respectiva função.

RSA_public

Essa é a função que gera as chaves públicas (�, �). O formato da função é: [n,e]=

RSA_public(p,q). Os parâmetros de entrada (p,q) significa que ele pega os

respectivos valores de p e q selecionados pelo o escolheprimos e em seguida retorna

os valores dos parâmetros de saída [n,e]. No código implementado, o primeiro valor do

parâmetro de saída, n, é obtido a partir da multiplicação dos parâmetros de entrada p e q. Já

para encontrar o valor do e foi feito um laço de repetição, onde são testados números de 1 até

���� − 1. Quando os números testados nessa faixa forem co-primos a φ�n�, automaticamente

este é salvo numa lista, a partir do qual será escolhido um valor aleatório que é atribuído à

variável e. O código desenvolvido para a função RSA_public é mostrado no Anexo E do

trabalho.

RSA_cod

Através dessa função que é feita a codificação da mensagem: [Mensagem_codificada]=

RSA_cod(m,n,e). O valor do m do parâmetro de entrada é valor da mensagem a ser

enviada. Este valor deve ser inteiro e variar de “0” (zero) a n-1. Os valores de (n,e), são os

gerados pela função RSA_public na etapa anterior. O parâmetro de saída,

[Mensagem_codificada] exibirá o valor codificado que será um outro número inteiro. É

exibido no Anexo F do trabalho o código desenvolvido para a função em questão.

RSA_decod

Essa função é a usada para decodificar a mensagem:

[Mensagem_decodificada]=RSA_decod(Mensagem_codificada,p,q,e), aonde a

Mensagem_codificada é aquela que foi gerada no passo anterior por RSA_cod. O valor

Page 30: A Criptografia RSA e sua Implementação

30

do e usado tem que ser a mesma que foi originada a partir do RSA_public. Os valores de

p e q (as chaves privadas) devem ser os mesmos selecionados pela função

escolheprimos, caso contrário a mensagem decodificada não será a mesma codificada pelo

RSA_cod. O código desenvolvido para a função correspondente é mostrado no Anexo G do

trabalho.

Dessas cinco funções, só o RSA_cod seria usado pelo remetente da mensagem, para

codificar a mensagem. Os outros seriam utilizados pelo destinatário da mensagem.

Para desenvolver as funções RSA_cod e RSA_decod, foi necessário implementar no

caso do RSA_cod a equação 3.4 e para RSA_decod a equação 3.5. Porém quando os

respectivos expoentes são muito grandes, esta operação (exponenciação modular) é

dispendiosa para os computadores, demora a ser realizada. Sendo assim, foi necessário o uso

de um algoritmo que acelere esse processo. O algoritmo 4.1 foi utilizado para contornar esse

problema.

Algoritmo 4.1 - Square and Multiply Algorithm

Computa M = NO(?5 P, onde . = ∑ �R2R ,S,�

RTU �R ∈ {0, 1}

1. M? = 1, Z? = N

2. for ] = 0 até � − 1 faça

3. ZR`� = ZR� (?5 P

4. if �R = 1 então

5. MR`� = MR ∗ ZR (?5 P Fonte: [9]

Entretanto, como pode ser visto, esse algoritmo tem na linha 3 uma nova

exponenciação modular e na linha 5 uma multiplicação modular que igualmente é um

processo custoso. Foi usado um algoritmo que acelere a multiplicação modular. Posto isso, a

equação da linha 3 foi transformada em: ZR`� = �ZR ∗ ZR�mod N. Dessa forma foi usado

algoritmo de Gutub [14], para resolver os problemas da linha 3 e 5. O algoritmo de Gutub é

mostrado no Anexo H do presente trabalho.

4.1 Resultados

A implementação do RSA feita no Matlab é mostrada na figura 4.1.

Page 31: A Criptografia RSA e sua Implementação

31

Figura 4.1 - Criptografia RSA implementada no Matlab

Como é visto na figura 4.1, a partir de uma lista de números primos, [h], é escolhido o

p e q. Em seguida foram geradas as chaves públicas (11, 11227). Posteriormente é efetuada a

codificação de uma mensagem m = 100, obtendo assim o texto cifrado (C =10416), e a partir

deste é feita a decodificação que resulta na mensagem original m = 100. Portanto, validando

assim o funciomento do método implementado.

No gráfico 4.1 é mostrado uma comparação entre o tempo de encriptação e

decriptação da implementação realizada. Foi feita a encriptação e decriptação com diferentes

valores dos números primos, mas para uma mesma mensagem, m.

Page 32: A Criptografia RSA e sua Implementação

32

Gráfico 4.1 - Comparação entre o tempo de Encriptação de Decriptação

À medida que aumenta os valores dos números primos, maior será a chave de decriptação,

chave privada (d), independentemente do valor do e. Por isso no gráfico 4.1 pode ser visto que

o tempo de decriptação é maior que o tempo de encriptação, uma vez que o expoente da chave

privada é sempre maior que o expoente da chave pública. Com isso leva mais tempo para

executar a exponenciação modular, portanto é uma operação mais demorada de ser realizada.

0

50

100

150

200

250

1 2 3 4 5 6

Tempo (ms)

Números primos p e q (10^7)

Encriptação

Decriptação

Page 33: A Criptografia RSA e sua Implementação

33

5 CONCLUSÃO

Ao mesmo tempo em que a informação se torna um bem cada vez mais precioso e que

a revolução das comunicações transforma a sociedade, a criptografia continuará a

desempenhar um papel indispensável para comunicação.

Em aplicações práticas da criptografia RSA são utilizados números muito grandes. Por

exemplo, é recomendado que tanto o p como q sejam no mínimo números com 512 bits,

levando a elevados valores de complexidade computacional da criptografia RSA. Devido à

simplicidade dos algoritmos implementados no presente trabalho, não foi possível demonstrar

o funcionamento do método com valores elevados de p e q. Entretanto, a implementação do

método foi satisfatória, dado que foi demonstrado o seu principio de funcionamento através

do detalhamento do algoritmo utilizado no processo de criptografia e descriptografia.

De maneira geral, o RSA fornece uma robusta segurança. Porém, tal segurança pode

ser ameaçada se for concebido um algoritmo eficiente baseado em uma possível nova técnica

de fatoração. Atualmente existem vários métodos para fatoração, mas nenhum é eficaz contra

o RSA. Além disso, como qualquer outro método de criptografia, o método RSA é susceptível

ao avanço tecnológico. O surgimento de computadores rápidos o suficiente para decompor n

em fatores, em um intervalo de tempo suficiente pequeno, pode ser eficiente no ataque ao

método RSA.

Page 34: A Criptografia RSA e sua Implementação

34

6 REFERÊNCIAS

[1] S. Coutinho, Números Inteiros e Criptografia RSA, Rio de Janeiro: IMPA, 2003.

[2] Fred, Cohen, “A Short History of Cryptography,” 1997.

[3] S. Simon, The Code Book, New York: Doubleday, 1999.

[4] G. K. e S. E., “MULTILEVEL CRYPTOGRAPHY TECHNIQUE USING GRACEFUL CODES,”

www.jgrcs.info, vol. 2, 2011.

[5] M. Alfred e V. Scott, Handbook of Applied Cryptography, CRC Press, 1996.

[6] S. Mohammad e P. Shafiul, “A Cost Effective Symmetric Key Cryptographic Algorithm for Small

Amount,” 24 Dezembro 2005.

[7] Z. Xin e T. Xiaofei, “Research and Implementation of RSA Algorithm for,” 22 Agosto 2011.

[8] A. Sattar e J. Haidar, “An Efficient RSA Public Key Encryption Scheme,” 7 Abril 2008.

[9] B. Thomas e P. Christof, “Montgomery Modular Exponentiation on Reconfigurable Hardware,”

Abril 1999.

[10] B. Dan e D. Glenn, “Cryptanalysis of RSA with Private Key d Less Than N^0,292,” Julho 2000.

[11] P. Varghese e S. Rasmi, “An Implementation of a New public key System based on RSA which

leads hackers,” Novembro 2012.

[12] S. Hongwei e C. Youlin, “An Improved RSA Signature Algorithm based on Complex Numeric

Operation Function,” Marcço 2010.

[13] R. Ronald, S. A. e A. L., “A Method for Obtaining Digital Signatures and Public-Key

Cryptosystems,” 1978.

[14] M. L. BISSOLI, IMPACTO DA MULTIPLICAÇÃO E EXPONENCIAÇÃO MODULAR EM, Marília, 2007.

Page 35: A Criptografia RSA e sua Implementação

35

7 ANEXOS

Anexo A – Algoritmo de Euclides para o cálculo do inverso multiplicativo

Page 36: A Criptografia RSA e sua Implementação

36

Anexo B – Algoritmo para o cálculo dos valores do expoente de chave pública

Page 37: A Criptografia RSA e sua Implementação

37

Anexo C – Função função_primos

function [h]= funcao_primos(inicio,numero_de_primos) lista=[]; p=1; lastphi=1; E=zeros(100,1); E(1)=0; nmax=numero_de_primos+2; f=zeros(nmax,1); f(1)=2; if (inicio<3) errordlg('O valor de referência dever ser maior ou igual a 3 ','ERRO'); else if(mod(inicio,2)==0) f(2)=inicio-1; else f(2)=inicio; end N2=5; K=1; j=0; G=0; s=0; i=2; d=6; t=0; q=0; while i<nmax i=i+1; lastphi=1; p=1; G=0; while lastphi~=0, if (p~=1) M1=0; else M1=f(i-1)+2; end k=mod((G+M1+3),3); M2=M1+2*abs((cos((2^k)*pi)-1)/2); while (d>=5), j=j+1; if(j>1) N=round (N2+abs(4*sin((j)*pi/2)+2*cos((j)*pi/2))); N2=N; else N=N2; end d=(G+M2)/N; d1=N*N; d2=G+M2; t=t+1; if ((mod(G+M2+N,N)~=0)) M3= round (M2);

Page 38: A Criptografia RSA e sua Implementação

38

q=q+1; s=s+1; else q=q+1; if (d>=2) K=d; T=round (abs(10*cos(j*pi/2)+2*sin(j*pi/2))); KT=mod(K*T,6); k=mod(G+M2+N,N); if (k>=1) KT1=KT*abs(0/2); else KT1=KT*abs(-1); end M3=round (M2+KT1); else M3=round (M2); end end if(d2<=d1) d=2; else end M2=M3; end f(i)=M3; d=6; j=0; p=p+1; phi=f(i); E(p)=f(i); lastphi=phi; if(s==t) lastphi=0; end if (p==2) E(p+1)=E(p)+E(p-1); else if (p==3) E(p+1)=E(p)+E(p-1)+E(p-2); else if (p==4) E(p+1)=E(p)+E(p-1)+E(p-2)+E(p-3); else if(p>=5) y=p-2; w=0; x=zeros(p,1); for o=1:y x= E(p-o)+w; w=x; end E(p+1)= E(p)+w; end end end end G= E(p+1); q=0; t=0;

Page 39: A Criptografia RSA e sua Implementação

39

s=0; N2=5; end f(i)=G; h=f(3:nmax); end end end

Page 40: A Criptografia RSA e sua Implementação

40

Anexo D – Função Escolheprimos

function [p,q]=escolheprimos(h) l=length(h); escolhe=randperm(l); p=h(escolhe(1)); q=h(escolhe(2)); end

Page 41: A Criptografia RSA e sua Implementação

41

Anexo E – Função RSA_public

function [n,e]= RSA_public(p,q) n=p*q; O=(p-1)*(q-1); e=2; t=e; lista=[]; while t<O s=O; p=t; e=t; d=mod(O,e); while d~=0 O=e; e=d; d=mod(O,e); end if(e==1) lista=[lista;p]; else end t=t+1; O=s; end tamL=length(lista); e=lista(randi(tamL)); end

Page 42: A Criptografia RSA e sua Implementação

42

Anexo F – Função RSA_cod

function [Mensagem_codificada]= RSA_cod(m,n,e) m1=m; if(m1>=n || m1<0) errordlg('A mensagem deve ser menor que o valor do n, isto é, 0 < Mensagem < n','ERRO'); else phi1=n; x=m1; exp=e; N=phi1; Nb=dec2bin(N); n=length(Nb); E=dec2bin(exp,n); E=cellfun(@str2num, cellstr(E'))'; Z=zeros(n,1); P=zeros(n,1); P(1)=1; Z(1)=x; i=1; e=zeros(n,1); for i=1:(n) Yg=Z(i); mg=N; xg=Z(i); xy=dec2bin(xg); Eg=cellfun(@str2num, cellstr(xy'))'; kg=length(xy); i1=kg-1; Po=0; px=0; while i1>=0 Po=2*Po; px=px+1; if(Po>=mg) Po=Po-mg; else end eg= Eg(1,(px)); if(eg==1) Po=Po+Yg; if (Po>=mg) Po=Po-mg; else end else end i1=i1-1; end Z(i+1)=Po; e(i)= E(1,(n-i+1)); if(e(i)==1)

Page 43: A Criptografia RSA e sua Implementação

43

Yg=Z(i); mg=N; xg=P(i); xy=dec2bin(xg); Eg=cellfun(@str2num, cellstr(xy'))'; kg=length(xy); i1=kg-1; Po=0; px=0; while i1>=0 Po=2*Po; px=px+1; if(Po>=mg) Po=Po-mg; else end eg= Eg(1,(px)); if(eg==1) Po=Po+Yg; if (Po>=mg) Po=Po-mg; else end else end i1=i1-1; end P(i+1)=Po; else P(i+1)=P(i); end end P=P(i+1); Mensagem_codificada=P; end end

Page 44: A Criptografia RSA e sua Implementação

44

Anexo G – Função RSA_decod

function [Mensagem_decodificada]=RSA_decod(Mensagem_codificada,p,q,e) phi1=p*q; phi=(p-1)*(q-1); n=phi; a=e; g=n; u=a; i=0; v=1; q=0; t=0; while u>0 q=floor(g/u); t=g+(-q*u); g=u; u=t; t=i+(-q*v); i=v; v=t; end if(i<0) i=n+i; else end d=i; x=Mensagem_codificada; exp=d; N=phi1; Nb=dec2bin(N); n=length(Nb); E=dec2bin(exp,n); E=cellfun(@str2num, cellstr(E'))'; Z=zeros(n,1); P=zeros(n,1); P(1)=1; Z(1)=x; i=1; e=zeros(n,1); for i=1:(n) Yg=Z(i); mg=N; xg=Z(i); xy=dec2bin(xg); Eg=cellfun(@str2num, cellstr(xy'))'; kg=length(xy); i1=kg-1; Po=0; px=0; while i1>=0 Po=2*Po; px=px+1;

Page 45: A Criptografia RSA e sua Implementação

45

if(Po>=mg) Po=Po-mg; else end eg= Eg(1,(px)); if(eg==1) Po=Po+Yg; if (Po>=mg) Po=Po-mg; else end else end i1=i1-1; end Z(i+1)=Po; e(i)= E(1,(n-i+1)); if(e(i)==1) Yg=Z(i); mg=N; xg=P(i); xy=dec2bin(xg); Eg=cellfun(@str2num, cellstr(xy'))'; kg=length(xy); i1=kg-1; Po=0; px=0; while i1>=0 Po=2*Po; px=px+1; if(Po>=mg) Po=Po-mg; else end eg= Eg(1,(px)); if(eg==1) Po=Po+Yg; if (Po>=mg) Po=Po-mg; else end else end i1=i1-1; end P(i+1)=Po; else P(i+1)=P(i); end end P=P(i+1); Mensagem_decodificada=P; end

Page 46: A Criptografia RSA e sua Implementação

46

Anexo H – Algoritmo de Gutub