














































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
artigo sobre matematica - algoritmo
Tipologia: Resumos
1 / 54
Esta página não é visível na pré-visualização
Não perca as partes importantes!















































Criptografia RSA: Teoria e Prática com Python
Criptografia RSA: Teoria e Prática com Python
Trabalho de Conclusão de Curso, Matemá- tica Aplicada Bacharelado, submetido por Tatiellen Souza Assis junto ao Instituto de Matemática, Estatística e Física da Univer- sidade Federal do Rio Grande.
Universidade Federal do Rio Grande - FURG Instituto de Matemática, Estatística e Física - IMEF Curso de Matemática Aplicada Bacharelado
Desde já, agradeço a Deus por ter permitido que eu tivesse saúde e determinação para não desanimar durante a realização deste trabalho.
Ao meu esposo Carlos Henrique Veiga e meu filho Kevin Veiga, que me incentiva- ram nos momentos difíceis e compreenderam a minha ausência.
Agradeço também aos meus pais, Sidney Assis e Rosimeri Souza e meus irmãos por todo ensinamento durante todos os dias desde meu nascimento.
Aos meus amigos, que sempre estiveram ao meu lado, pela amizade incondicional e pelo apoio demonstrado ao longo de todo o período de tempo do curso. Ao meu orientador Prof. Dr. Adilson da Silva Nunes, por ter desempenhado tal função dedicação e amizade, por todos os conselhos, pela ajuda e principalmente pela paciência com qual me guiou ao meu aprendizado. Por fim, mas não tão menos importante, à todos professores do IMEF que contribuíram de alguma forma, direta ou indiretamente ao longo desses anos de curso, certamente tiveram impactos na minha formação acadêmica.
“Faça as coisas o mais simples que puder, porém não as mais simples”
(Albert Einstein)
The objective of this work is to explore the application of RSA Cryptography, analyzing how the encoding and decoding of a message works, using the Public Key and the Private Key. Important concepts are covered and for this, it was necessary to present basic no- tions of Number Theory, including the theory and result of Divisibility, Prime Numbers, Congruence and Fermat’s Little Theorem. Throughout the work, practical implementa- tions were carried out using the Python programming language.
Key-words :RSA encryption, Congruence, Algebra, Prime Numbers.
Figura 1 – Modelo de Cifra Simétrica......................... 33 Figura 2 – Modelo de Cifra Assimétrica........................ 35 Figura 3 – Descrição para o Algoritmo RSA..................... 37
10
A criptografia é uma ferramenta fundamental para garantir a segurança da in- formação no mundo digital. Com o crescente volume de dados sendo transmitidos e armazenados eletronicamente, a proteção contra acessos não autorizados se tornou uma prioridade. Entre os diversos métodos de criptografia existentes, o RSA(Rivest-Shamir- Adleman) destaca-se por sua robustez e ampla aplicação em sistemas de comunicação segura.
Desenvolvido em 1977, o RSA é um algoritmo de criptografia assimétrica que utiliza um par de chaves, uma pública e uma privada, para codificar e decodificar mensa- gens. A segurança do RSA baseia-se em fatorar um número grande em seus componentes primos, um problema matemático que, até hoje, não possui uma solução eficiente.
Este trabalho tem como objetivo mostrar o algoritmo de criptografia RSA e de- monstrar sua eficácia através de uma implementação prática utilizando a linguagem de programação Python.
A escolha do Python como ferramenta de implementação se dá pela sua sim- plicidade e poderosa capacidade de manipulação de dados, tornando-o ideal para esta simulação criptográfica. O estudo busca alcançar os seguintes objetivos específicos:
A metodologia adotada inclui o desenvolvimento de um programa em Python que simula o processo da criptografia e descriptografia RSA.
A estrutura deste trabalho está da seguinte forma: inicialmente será feita uma revisão da fundamentação matemática referente aos conceitos e noções básicas da Teoria dos Números. Na sequência, abordaremos a Criptografia, apresentando os tipos de cifras simétrica e assimétrica, além da utilização de matrizes na criptografia. Posteriormente, detalharemos a metodologia da Criptografia RSA e sua implementação na linguagem Python. No capítulo final, será apresentada a conclusão. Dessa forma, o objetivo deste estudo é contribuir para a compreensão da segurança que a Criptografia RSA proporciona.
Capítulo 1. Fundamentação Matemática 12
𝑎 + (𝑏 + 𝑐) = (𝑎 + 𝑏) + 𝑐 𝑒 𝑎.(𝑏.𝑐) = (𝑎.𝑏).𝑐
𝑎 + 𝑏 = 𝑏 + 𝑎 𝑒 𝑎.𝑏 = 𝑏.𝑎
𝑎 + 0 = 0 + 𝑎 = 𝑎 𝑒 𝑎.1 = 1.𝑎 = 𝑎
𝑎 + 𝑏 = 0
𝑎.(𝑏 + 𝑐) = 𝑎.𝑏 + 𝑎.𝑐 = (𝑎.𝑏) + (𝑎.𝑐)
Nem sempre se trabalha com esse conjunto munidos das operações de adição e multipli- cação que possuem as propriedades acima. Neste caso esses elementos de tais conjun- tos, juntamente com as suas operações, estão sujeitos às leis básicas da aritmética, que se chama de anel, como por exemplo, os números reais, números racionais e os números complexos, munidos das respectivas operações de adição e multiplicação, são anéis. Como existem de outros conjuntos sujeitos às leis básicas, os axiomas acima não caracterizam os inteiros, a seguir será mostrado os axiomas que faltam para diferenciar o conjunto dos inteiros desses conjuntos. O conjunto dos inteiros pode ser particionado em três subcon- juntos Z = N∪{ 0 }∪{−N}, onde {−N} é o conjunto simétrico dos elementos de N vejamos uma consequência desses axiomas:
Proposição 1. 𝑎.0 = 0 ∀𝑎 ∈ Z. Pois,
Demonstração. 𝑎.0 = 𝑎(0 + 0) = 𝑎.0 + 𝑎. 0
o que implica que 𝑎. 0 − 𝑎.0 = (𝑎.0 + 𝑎.0) − 𝑎. 0
Capítulo 1. Fundamentação Matemática 13
𝑎. 0 − 𝑎.0 = 𝑎.0 + (𝑎. 0 − 𝑎.0) = 𝑎. 0 0 = 𝑎. 0
Proposição 2. A adição é cancelativa com respeito à igualdade. ∀𝑎, 𝑏, 𝑐 ∈ Z,
𝑎 = 𝑏 ⇔ 𝑎 + 𝑐 = 𝑏 + 𝑐
Demonstração. Como a adição está bem definida, segue que 𝑎 = 𝑏 ⇒ 𝑎 + 𝑐 = 𝑏 + 𝑐 (propriedade 1). Suponha que 𝑎 + 𝑐 = 𝑏 + 𝑐
Somando (−𝑐) a ambos os lados:
𝑎 + 𝑐 − 𝑐 = 𝑏 + 𝑐 − 𝑐
𝑎 = 𝑏
Obtemos o desejado.
Exemplo 1.2.1. Se 𝑎 + 𝑏 = 0, então 𝑏 = −𝑎 e 𝑎 = −𝑏. Começaremos com 𝑏 = −𝑎 para 𝑎 + 𝑏 = 0. 𝑎 + 𝑏 = 0 𝑎 + 𝑏 = 𝑎 − 𝑎 𝑏 = −𝑎
Agora para 𝑎 = −𝑏. 𝑎 + 𝑏 = 0 𝑎 + 𝑏 = 𝑏 − 𝑏 𝑎 = −𝑏
Portanto 𝑎 + 𝑏 = 0, então 𝑏 = −𝑎 e 𝑎 = −𝑏.
A divisibilidade é um conceito fundamental na Teoria dos Números. Formalmente, podemos defini-lá da seguinte maneira:
Definição 1.2.2. Dados 𝑎, 𝑏 ∈ Z. Dizemos que 𝑎 divide 𝑏 quando existir algum inteiro 𝑐 ∈ Z tal que 𝑏 = 𝑎.𝑐
Neste caso, diremos também que 𝑎 é um divisor ou um fator de 𝑏, ou ainda, 𝑏 de dividendo ou que 𝑏 é divisível por 𝑎 e 𝑐 o quociente.
Capítulo 1. Fundamentação Matemática 15
Demonstração.
(ii) Se 𝑎 | 𝑏 então existe 𝑐 ∈ Z tal que 𝑏 = 𝑎.𝑐. Tomando |𝑏|, dá-se
|𝑏| = |𝑐.𝑎| = |𝑐| |𝑎|
logo |𝑎| | |𝑏|, ou seja, |𝑎| divide |𝑏|. Agora se |𝑎| divide |𝑏|, então existe 𝑐 ∈ Z de forma que |𝑏| = |𝑎| .𝑐 Além do mais se 𝑏 ≥ 0 , sabemos que
|𝑏| = 𝑏
ou se 𝑏 < 0 , sabemos que |𝑏| = −𝑏 Do mesmo modo, se 𝑎 ≥ 0 , sabemos que
|𝑎| = 𝑎
ou se 𝑎 < 0 , então |𝑎| = −𝑎 Analogamente para os casos (𝑎 ≥ 0 𝑒 𝑏 < 0) e (𝑎 < 0 𝑒 𝑏 < 0).
Demonstração. (iii) Se 𝑎 | 𝑏 e 𝑏 | 𝑐 então 𝑎 | 𝑐. Assim existe 𝑘 1 e 𝑘 2 inteiros tais que:
𝑏 = 𝑎.𝑘 1
𝑐 = 𝑎.𝑘 2 Substituindo a primeira pela segunda igualdade, obtemos
𝑐 = (𝑎𝑘 1 )𝑘 2 ⇒ 𝑐 = 𝑎(𝑘 1 𝑘 2 )
Como 𝑘 1 e 𝑘 2 é um número inteiro pois o produto de dois inteiros, podemos definir 𝑘 = 𝑘 1 𝑘 2. Assim temos 𝑐 = 𝑎𝑘 Ou seja, 𝑎 | 𝑐
Capítulo 1. Fundamentação Matemática 16
Demonstração.
(iv) Por hipótese, existe 𝑐 ∈ Z tal que |𝑏| = 𝑎.𝑐, se 𝑏 ≥ 0 sabemos que
|𝑏| = 𝑏
ou se 𝑏 < 0 então |𝑏| = −𝑏 Agora se 𝑏 ≥ 0 , temos que 𝑏 = 𝑎.𝑐 isto é 𝑎 divide 𝑏. Por outro lado no caso em que 𝑏 < 0 temos
−𝑏 = 𝑐.𝑎 ⇔ 𝑏 = (−𝑐).𝑎
ou seja, 𝑎|𝑏.
Demonstração.
(v) De fato como 𝑎|𝑏 então existe um 𝑐 ∈ Z com (𝑐 ̸= 0) tal que
𝑏 = 𝑎.𝑐
Tomando o módulo de 𝑏, temos
|𝑏| = |𝑎.𝑐| = |𝑎|.|𝑐|
Com 𝑏 ̸= 0 e 𝑐 ̸= 0 e por isso
|𝑐|̸ = 0 ⇒ |𝑐| ≥ 1
De fato de |𝑐| ≥ 1 , vai existir 𝑞 ∈ Z+ tal que
|𝑐| = 1 + 𝑞
segue |𝑏| = (1 + 𝑞)|𝑎| = |𝑎| + |𝑎|𝑞 com outras palavras |𝑎| ≤ |𝑏|.
Capítulo 1. Fundamentação Matemática 18
Proposição 6. Sejam 𝑎, 𝑏, 𝑐, 𝑑 ∈ Z, tais que:
𝑎 | 𝑏 𝑒 𝑎 | 𝑐
então, para todo 𝑥, 𝑦 ∈ Z, 𝑎 | (𝑏𝑥 + 𝑐𝑦)
Demonstração. Do fato que 𝑎 | 𝑏 𝑒 𝑎 | 𝑐
existem dois números 𝑚, 𝑛 ∈ Z tais que
𝑏 = 𝑎𝑚 𝑒 𝑐 = 𝑎𝑛
agora, realizaremos a operação de multiplicação nas duas igualdades, multiplicando os números inteiros 𝑥 e 𝑦, respectivamente, resultando em 𝑏𝑥 = (𝑎𝑚)𝑥 e 𝑐𝑦 = (𝑎𝑛)𝑦. Por fim temos,
ao ordenar os termos, chegamos à conclusão de que,
𝑏𝑥 + 𝑐𝑦 = (𝑚𝑥 + 𝑛𝑦)𝑎
donde conclui-se 𝑎 | (𝑏𝑥 + 𝑐𝑦).
Com os resultados expressados nessa subseção e dada as definições, conseguimos entender e falar da Divisão Euclidiana.
É sempre possível efetuar a divisão de 𝑎 por 𝑏, com resto, mesmo quando 𝑏 ̸= 0 não divide o número inteiro por 𝑎, esse fato já era conhecido por Euclides, porém sem demonstração, em "Os Elementos".
Teorema 1.2.1 (Princípio da Boa Ordem). Todo subconjunto não vazio do conjunto dos naturais possui um menor elemento.
Proposição 7. Dados dois números inteiros 𝑎 e 𝑏 quaisquer, com 𝑏 ̸= 0 existe 𝑛 ∈ Z tal que 𝑛𝑏 > 𝑎.
Teorema 1.2.2 (Algoritmo da Divisão). Sejam 𝑎, 𝑏, dois números inteiros, com 𝑏 ̸= 0. Existem únicos números inteiros 𝑞, 𝑟 tais que:
𝑎 = 𝑏𝑞 + 𝑟, 0 ≤ 𝑟 < |𝑏|
Capítulo 1. Fundamentação Matemática 19
Demonstração. A demonstração será dividida em duas etapas: a existência e a unicidade.
Existência: Considere o conjunto 𝑋 = {𝑎 − 𝑏𝑘; 𝑘 ∈ Z}, pela Proposição 7 existe 𝑛 ∈ Z tal que 𝑛(−𝑏) > −𝑎 e assim 𝑎 − 𝑏𝑛 > 0. Este conjunto contém todos os valores que podem ser subtraindo múltiplos de 𝑏 de 𝑎. O conjunto 𝑋 é não vazio, pois quando 𝑘 = 0 contém 𝑎 e pelo Teorema 1.2.1 existe um menor elemento em 𝑋, que chamamos de 𝑟. Assim temos, 𝑟 = 𝑎 − 𝑏𝑞
para algum 𝑞 ∈ Z.
Precisamos mostrar que 0 ≤ 𝑟 < |𝑏|. Se 𝑟 < 0 , podemos escrever,
𝑟 = 𝑎 − 𝑏𝑞 < 0
implica que 𝑎 < 𝑏𝑞
Assim podemos escolher 𝑘 = 𝑞 + 1, e obter 𝑏(𝑘) = 𝑏(𝑞 + 1) = 𝑏𝑞 + 𝑏 o que proporciona o próximo múltiplo de 𝑏. Reescrevendo 𝑎:
𝑎 < 𝑏(𝑞 + 1)
escrevendo 𝑎 como a soma do próximo múltiplo de 𝑏 e a diferença que leva até 𝑎:
𝑎 = 𝑏(𝑞 + 1) + (𝑟 + 𝑏)
onde 𝑟 + 𝑏 > 0 e 𝑟 + 𝑏 < |𝑏| se |𝑏| > 0. Isso contradiz a escolha de 𝑟 como o menor elemento, portanto 𝑟 deve ser não negativo. Agora, se 𝑟 ≥ |𝑏|, podemos novamente escolher 𝑘 de forma que:
𝑟 − |𝑏| = 𝑎 − 𝑏𝑞 − |𝑏| ≥ 0
levando a uma nova escolha de 𝑞, contradizendo, pois o fato de 𝑟 ser o menor elemento. Portanto, 𝑟 < |𝑏|
Unicidade: Suponhamos que existem dois pares (𝑞 1 , 𝑟 1 ) e (𝑞 2 , 𝑟 2 ) que satisfazem a relação: 𝑎 = 𝑏𝑞 1 + 𝑟 1 e 𝑎 = 𝑏𝑞 2 + 𝑟 2 então temos:
𝑏𝑞 1 + 𝑟 1 = 𝑏𝑞 2 + 𝑟 2
rearranjando, obtemos, 𝑏𝑞 1 − 𝑏𝑞 2 = 𝑟 2 − 𝑟 1