Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Artigo sobre matematica, Resumos de Matemática

artigo sobre matematica - algoritmo

Tipologia: Resumos

Antes de 2010

Compartilhado em 11/04/2026

RicardoSIlvaSilva
RicardoSIlvaSilva 🇧🇷

3 documentos

1 / 54

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Tatiellen Souza Assis
Criptografia RSA: Teoria e Prática com Python
Rio Grande, Rio Grande do Sul, Brasil
Setembro, 2024
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36

Pré-visualização parcial do texto

Baixe Artigo sobre matematica e outras Resumos em PDF para Matemática, somente na Docsity!

Tatiellen Souza Assis

Criptografia RSA: Teoria e Prática com Python

Rio Grande, Rio Grande do Sul, Brasil

Setembro, 2024

Tatiellen Souza Assis

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

Orientador: Prof. Dr. Adilson da Silva Nunes

Rio Grande, Rio Grande do Sul, Brasil

Setembro, 2024

Agradecimentos

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)

Abstract

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.

Lista de ilustrações

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

  • Tabela 1 – Alfabeto comum e a sua equivalência
  • Tabela 2 – Conversão alfabética para numérica.
  • Tabela 3 – Conversão das letras.
  • Tabela 4 – Correspondência entre as letras e os números para a pré-codificação.
  • Tabela 5 – Conversão das letras para os números.
  • Introdução Sumário
  • 1 FUNDAMENTAÇÃO MATEMÁTICA
  • 1.1 Teoria dos Números
  • 1.2 Números Inteiros
  • 1.2.1 Propriedades dos Números Inteiros
  • 1.2.2 Divisibilidade dos números inteiros
  • 1.2.3 Divisão Euclidiana
  • 1.2.4 Máximo Divisor Comum - MDC
  • 1.3 Números Primos
  • 2 ARITMÉTICA MODULAR
  • 2.1 Congruências
  • 2.1.1 Propriedades das Congruências
  • 2.2 Teoremas da Aritmética
  • 3 CRIPTOGRAFIA
  • 3.1 Tipos de criptografia
  • 3.1.1 Cifras Simétricas
  • 3.1.2 Cifras Assimétricas
  • 3.1.3 Criptografia e matrizes
  • 4 CRIPTOGRAFIA RSA
  • 4.1 Algoritmo RSA
  • 4.1.1 Aquisição das chaves do Algoritmo RSA
  • 4.2 Pré-Codificação
  • 4.3 Codificação
  • 4.4 Decodificação
  • 5 O PYTHON
  • 6 CONCLUSÕES
  • REFERÊNCIAS

10

Introdução

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:

  • (I) entender os fundamentos teóricos do algoritmo RSA;
  • (II) implementar o algoritmo RSA em Python.

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

  1. A adição e a multiplicação são bem definidas: Para todos 𝑎, 𝑏, 𝑎′, 𝑏′^ ∈ Z se 𝑎 = 𝑎′^ e 𝑏 = 𝑏′^ então 𝑎 + 𝑏 = 𝑎′^ + 𝑏′^ e 𝑎.𝑏 = 𝑎′.𝑏′
  2. A adição e a multiplicação são associativas: ∀𝑎, 𝑏, 𝑐 ∈ Z tem-se que:

𝑎 + (𝑏 + 𝑐) = (𝑎 + 𝑏) + 𝑐 𝑒 𝑎.(𝑏.𝑐) = (𝑎.𝑏).𝑐

  1. A adição e a multiplicação são comutativas: ∀𝑎, 𝑏 ∈ Z tem-se que:

𝑎 + 𝑏 = 𝑏 + 𝑎 𝑒 𝑎.𝑏 = 𝑏.𝑎

  1. A adição e a multiplicação possuem elementos neutros: ∀𝑎 ∈ Z tem-se que:

𝑎 + 0 = 0 + 𝑎 = 𝑎 𝑒 𝑎.1 = 1.𝑎 = 𝑎

  1. A adição possui elemento simétrico: ∀𝑎 ∈ Z, existe um único elemento que será chamado oposto de 𝑎 é indicado por (𝑏 = −𝑎) tem-se que:

𝑎 + 𝑏 = 0

  1. Na matemática, as operações de multiplicação e soma estão conectadas pelo axioma da distributividade: ∀𝑎, 𝑏, 𝑐 ∈ Z, tem-se que:

𝑎.(𝑏 + 𝑐) = 𝑎.𝑏 + 𝑎.𝑐 = (𝑎.𝑏) + (𝑎.𝑐)

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 𝑎 = −𝑏.

1.2.2 Divisibilidade dos números inteiros

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.

1.2.3 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