DISS - 2015 - Paulo Sérgio Lopes Da Silva
DISS - 2015 - Paulo Sérgio Lopes Da Silva
DISS - 2015 - Paulo Sérgio Lopes Da Silva
Cuiabá - MT
Junho de 2015
Um Sistema de Criptografia de Chave Pública
Chamado ElGamal
Banca examinadora:
iii
À minha doce amada.
iv
Agradecimentos
– ao Prof. Dr. Martinho da Costa Araújo, por toda dedicação, paciência e estı́mulo
em sua orientação;
– a minha famı́lia, pelo incentivo e segurança que me passaram durante todo esse
perı́odo;
v
“Sempre me pareceu estranho que to-
dos aqueles que estudam seriamente
esta ciência acabam tomados de uma
espécie de paixão pela mesma. Em
verdade o que proporciona o máximo
prazer não é o conhecimento e sim a
aprendizagem, não é a posse mas a
aquisição, não é a presença mas o ato
de atingir a meta ”
Carl F. Gauss
vi
Resumo
vii
Abstract
In this paper we will address public key cryptosystem ElGamal. In the first chapter
we present all the mathematical concepts addressed, especially the index. In the second
chapter we will talk about the system concepts studied in this paper, historical and
relevant facts that were important for its implementation. The coding and encoding
method in this cryptosystem is presented in the third chapter. In the fourth and fifth
chapter we finish presenting a didactic proposal to include encryption in the regular
teaching mathematics.
viii
Sumário
Agradecimentos v
Resumo vii
Abstract viii
Introdução 1
1 Conceitos Básicos 2
1.1 Estrutura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Ordem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3 Obtendo uma Raiz Primitiva . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.4 A Aritmética dos Índices . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2 Noções de Criptografia 20
3 O Criptosistema de ElGamal 27
3.1 O Problema do Logaritmo Discreto . . . . . . . . . . . . . . . . . . . . . . 27
3.2 Usando o MAPLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.3 O processo de Codificação e Decodificação . . . . . . . . . . . . . . . . . . 29
3.4 Criando uma chave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.5 Codificando uma Mensagem . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.6 Decodificando a Mensagem . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.7 Exemplo Completo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.8 Resolvendo o PLD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.9 Assinaturas Digitais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.9.1 Assinando uma Mensagem com ElGamal . . . . . . . . . . . . . . . 36
ix
3.9.2 Verificando a Assinatura . . . . . . . . . . . . . . . . . . . . . . . . 36
3.9.3 Segurança da Assinatura . . . . . . . . . . . . . . . . . . . . . . . . 37
3.9.4 Exemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
x
Introdução
Suponha que você deseja mandar uma mensagem muito importante para alguém,
porém, você não queira que o mensageiro leia o que foi escrito. Este é um problema que a
humanidade enfrenta desde os primórdios da escrita, cuja solução é dada pela criptografia,
que a grosso modo é “a arte de criar mensagens secretas e enviá-las com segurança”.
Atualmente os principais interessados na solução deste problema são os diplo-
matas, militares e o comércio eletrônico, este último só desenvolveu o interesse após a
chegada das mensagens eletrônicas e a internet.
Nós vamos apresentar aqui um dos mais importantes métodos de criptografia,
porém menos conhecido que o RSA, o criptosistema de ElGamal. Para tanto será ne-
cessário, antes expor conceitos como grupos, teorema de Euler, ordem e o logaritmo
discreto.
Existem também a necessidade de saber se uma mensagem criptografada é ver-
dadeira ou não. Para suprir esta necessidade apresentaremos a assinatura digital, que
verifica a autenticidade de uma mensagem, sem necessariamente decodificá-la.
Por fim, apresentaremos uma sequência didática para aplicação dos conceitos aqui
apresentados no ensino básico.
1
Capı́tulo 1
Conceitos Básicos
1.1 Estrutura
O conjunto dos números naturais N é caracterizado1 da seguinte forma:
i) Exite uma função injetiva s : N → N. A imagem s(n) de cada número natural
n ∈ N é chamada sucessor de n.
ii) Existe um número natural 1 ∈ N tal que 1 6= s(n) para todo n ∈ N.
iii) Se um conjunto X ⊂ N é tal que 1 ∈ X e S(X) ⊂ X então X = N
Os axiomas acima citados permitem caracterizar a operação de adição que as-
socia cada par de naturais (m, n) a um único natural m + n chamado de soma. Defini-
mos o número zero, doravante 0, como sendo o elemento neutro desta operação, ou seja
n + 0 = n, ∀ n ∈ N. Definimos também o oposto do número natural n como sendo o
número −n de modo que n + (−n) = 0.
2
Definição 2 Um sistema composto por um conjunto G não vazio e uma operação binária
∗ é chamado de grupo se (G, ∗) tem as seguintes propriedades:
a∗b=b∗a
Exemplo 1
Teorema 1 Dados dois inteiros a e b, b > 0, existem um único par de números inteiros
q e r tais que
a = qb + r, com 0 ≤ r < b
i) a ≡ b (mod m) ⇔ a + c ≡ b + c (mod m)
3
ii) se a ≡ b (mod m) então a · c ≡ b · c (mod m)
Prova:
i) Notemos que a definição de congruência nos indica que a ≡ b (mod m) ⇔
m|(a − b) então
m|(a − b) ⇔ (a − b) = k · m ⇔ (a + c − c − b) = k · m ⇔ ([a + c] − [b + c]) =
k · m ⇔ m|([a + c] − [b + c]). Aplicando a definição de congruência temos a ≡ b
(mod m) ⇔ m|(a − b) ⇔ m|([a + c] − [b + c]) ⇔ a + c ≡ b + c (mod m).
ii) Para provar este item devemos salientar que se p|q então p|q ·r para qualquer r
sendo p, q, r inteiros. Notemos agora que m|(a−b) ⇒ m|(a−b)·c ⇒ m|(a·c−b·c) aplicando
a definição de congruência temos a ≡ b (mod m) ⇔ m|(a−b) ⇒ m|(a·c−b·c) ⇔ a·c ≡ b·c
(mod m)
iii) Provaremos usando indução sobre n.
Se n = 1 teremos a hipótese da proposição, Suponhamos que an ≡ bn (mod m) é
verdadeiro para algum n natural, então pela hipótese de indução temos
4
Proposição 3 Sejam r0 = a e r1 = b inteiros não-negativos com b 6= 0. Se o algoritmo
da divisão for aplicado sucessivamente para se obter
Prova Uma excelente prova desta proposição pode ser encontrada em Hefez (2013).
Exemplo 2
Note que 6 ≡ 1 (mod 5) pois, 5|6 − 1 no entanto 5|11 − 1, 5|16 − 1 e assim por diante. Em
geral podemos afirmar que, para todo inteiro k, 5k + 1 ≡ 1 (mod 5) já que 5|(5k + 1 − 1).
Generalizando, temos que 1 é o conjunto de todos os números inteiros que ao ser dividido
por 5 deixam resto 1, ou seja, a classe
Todos os conceitos apresentados neste capı́tulo pode ser encontrado com mais
riqueza de detalhes em Santos (2009).
Definição 8 Sejam [a] e [b] classes residuais módulo m então definiremos a operação
soma ⊕ de classes residuais como sendo [a] ⊕ [b] = [a + b].
Definição 9 Sejam [a] e [b] classes residuais módulo m, então definiremos a operação
multiplicação de classes residuais como sendo [a] [b] = [a · b]
Notemos que [a] = [a0 ] e [b] = [b0 ] dois representantes de cada classe residual
módulo m então a ≡ a0 (mod m) e b ≡ b0 (mod m) e certamente a+b ≡ a0 +b0 (mod m)
e a · b ≡ a0 · b0 (mod m) o que equivale a dizer que [a + b] = [a0 + b0 ] e [a · b] = [a0 · b0 ].
5
Esta observação nos diz que a soma e o produto de classes residuais estão bem definidas,
ou seja, não depende da escolha do representante da classe.
Doravante todo grupo cuja operação é uma adição se chamará grupo aditivo e
cuja operação é uma multiplicação será chamado de grupo multiplicativo.
Definição 10 Dado um grupo (G, ∗), tal que G é finito então (G, ∗) será chamado de
grupo finito. O número de elemento de G será chamado de ordem do grupo.
Prova: i)
[a] ⊕ ([b] ⊕ [c]) = [a] ⊕ [b + c]
= [a + (b + c)]
= [(a + b) + c]
= [a + b] ⊕ [c]
= ([a] ⊕ [b]) ⊕ [c]
ii) Afirmamos que a classe [0] é o elemento neutro da adição e de fato;
[a] ⊕ [0] = [a + 0] = [a] e [0] ⊕ [a] = [0 + a] = [a]
iii) Afirmamos também que a classe [m − a] é o elemento inverso da classe [a],
pois, [m − a] ⊕ [a] = [m − a + a] = [m] = [0] e [a] ⊕ [m − a] = [a + m − a] = [m] = [0]
Prova: Suponhamos que m não seja primo, então exitem a e b com a, b < m tais
que a · b = m. Como na multiplicação de classes residuais não importa o representante
da classe residual, podemos afirmar que [a] [b] = [m] = [0] no entanto, [0] não faz parte
do conjunto G, contradição.
6
Reciprocamente, devemos ver que a única possibilidade de Zm não ser fechado
para a multiplicação módulo m é se existirem classes [a] e [b], tais que [a] · [b] = [0] o que
resultaria em a · b ≡ 0 (mod m), ou seja m|a · b mas por hipótese m é primo logo, m|a
ou m|b. Se m|a então a = mk portanto,
que é absurdo, pois [a] ∈ Z∗m . De modo semelhante se m|b obtemos [b] = [0] que também
é absurdo.
Exemplo 3
7
Exemplo 4
[3]0 = [1]
[3]1 = [3]1−1 [3] = [1] [3] = [1 · 3] = [3]
[3]2 = [3]2−1 [3] = [3] [3] = [1 · 3] = [9] = [2]
[3]3 = [3]3−1 [3] = [2] [3] = [2 · 3] = [6]
[3]4 = [3]4−1 [3] = [6] [3] = [6 · 3] = [18] = [4]
[3]5 = [3]5−1 [3] = [4] [3] = [4 · 3] = [12] = [5]
[3]6 = [3]6−1 [3] = [5] [3] = [5 · 3] = [15] = [1]
[3]7 = [3]7−1 [3] = [1] [3] = [1 · 3] = [3]
Exemplo 5
Podemos notar pelo exemplo 4 que o grupo G = (Z∗7 , ) é cı́clico pois, (Z∗7 , ) = {[3]n ; n ∈
Z}. Notemos também que [3] é um gerador de (Z∗7 , ), ou seja, (Z∗7 , ) =< [3] >.
1.2 Ordem
Antes de darmos a definição de ordem apresentaremos alguns conceitos que serão
necessários para demonstrarmos proposições e teoremas importantes.
Definição 13 Uma função aritmética é uma função definida em todos os inteiros positi-
vos.
Por exemplo:
As vezes escrevemos φ(n) = #{k, 1 ≤ k ≤ n tais que (k, n) = 1} onde # significa
o número de elementos de um conjunto.
8
n 2 3 4 5 7 10
φ(n) 1 2 2 4 6 4
Tabela 1.1:
Teorema 8 A função φ(n) é multiplicativa, isto é φ(n · m) = φ(n) · φ(m) para (n, m) = 1
Exemplo 6
9
Definição 15 Um sistema reduzido de resı́duos módulo m, doravante SRRm , é o con-
junto de φ(m) inteiros, de modo que todos sejam coprimos com m e tomados quaisquer
dois elementos deste conjunto, estes não são incongruentes módulo m.
Exemplo 7
Observação 1 Pela definição SRRm dado um SRRm = {r1 , r2 , · · · , rφ(m) } temos que
todos os elementos ri ; 1 ≤ i ≤ φ(n) são coprimos com m então concluı́mos que (r1 ·
r2 · · · rφ(m) , m) = 1.
aφ(m) ≡ 1 (mod m)
Definição 16 Sejam a e n inteiros coprimos. Então, o menor inteiro positivo x tal que
ax ≡ 1 (mod n) é chamado de ordem de a módulo n
10
Vamos representar a ordem de a módulo n por ordn a,logo pelo teorema de Euler
podemos garantir a existência da ordem de a módulo n, pois sabemos que x pode assumir
o valor de φ(n).
Exemplo 8
Exemplo 9
Podemos ver no exemplo 9 que nem sempre é simples obter a ordem de a módulo
n. A proposição abaixo será destinada a facilitar esta procura. Neste caso veremos que a
ord121 2 = 110.
concluindo a prova.
11
Prova: Pelo teorema Euler temos que aφ(n) ≡ 1 (mod n); o teorema anterior nos garante
que ordn a|φ(n)
Exemplo 10
Agora podemos retornar ao exemplo 9 e obter ord121 2. Como φ(121) = 110 os can-
didatos ao valor de ord121 2 são os divisores de 110 que são os elementos do conjunto
{1, 2, 5, 10, 11, 22, 55, 110}. Já sabemos que {1, 2, 5, 10, 11} não são, então tentaremos os
demais.
222 ≡ 81 (mod 121)
255 ≡ 120 (mod 121)
2110 ≡ 1 (mod 121)
Observemos que ord121 2 = 110 = φ(121), neste caso, o número 2 recebe o nome
de raı́z primitiva módulo 121, que definimos agora.
Exemplo 11
Prova: Por hipótese temos que (a, n) = 1 ⇒ (aj , n) = 1. Notemos agora que se divi-
dirmos os temos equivalentes na congruência ai ≡ aj (mod n) por aj obtemos ai−j ≡ 1
12
(mod n), pela proposição 12 concluı́mos que ordn a|(i − j) e pela definição de congruência
temos i ≡ j (mod ordn a).
Reciprocamente se i ≡ j (mod ordn a) então i = k · ordn a + j assim ai =
k
ak·ordn a+j = aordn a · aj ≡ aj (mod n), uma vez que aordn a ≡ 1 (mod m)
t
ordn au =
(u, t)
Prova: Vamos definir ordn a = t, ordn au = s, (t, u) = d. Pela divisão euclidiana temos
u = d · u1 e t = d · t1 .
Notemos agora que
dt u1
(au )t1 = ad·u1 = at ≡1 (mod n)
r, r2 , , · · · , rφ(n)
Prova: Para provar que as primeiras φ(n) potência de uma raiz primitiva forma um
sistema reduzido de resı́duos módulo n, precisamos apenas mostrar que elas são coprimas
com n e não são congruentes duas a duas.
Pela hipótese de r ser raiz primitiva módulo n concluı́mos que (n, r) = 1. Con-
sequentemente (n, rk ) = 1 para todo k ∈ N, assim todas as potências de r são coprimas
com n.
13
Assumindo que ri ≡ rj (mod n), pela proposição 14 isso só ocorre se i ≡ j
mod ordn r, o que implica em i ≡ j mod φ(n) com 1 ≤ i ≤ φ(n) e 1 ≤ j ≤ φ(n). Pela
definição de congruência temos φ(n)|i − j que só ocorre se i − j = 0, pois i − j < φ(n).
Concluı́mos que ri ≡ rj (mod n) se, e só se, i = j.
Exemplo 12
Pelo exemplo 11, já sabemos que 3 é uma raiz primitiva módulo 5 então temos SRR5 =
{3, 32 , 33 , 34 }que podem ser SRR5 = {1, 2, 3, 4}
Proposição 17 Seja r uma raiz primitiva módulo n onde n é um inteiro maior que 1,
então ru é também raiz primitiva módulo n se, e só se, (u, φ(n)) = 1.
ordn a ordn r
Prova: Pela proposição 15 temos que ordn au = então ordn ru = =
(u, ordn a) (u, ordr n)
φ(n)
, consequentemente, ordn ru = φ(n), ou seja, ru será uma raiz primitiva módulo
(u, φ(n))
n se e só se (u, φ(n)) = 1.
Exemplo 13
Proposição 18 Se um inteiro n tem uma raiz primitiva, então n tem exatamente φ(φ(n))
raı́zes primitivas incongruentes.
14
Exemplo 14
Vamos obter as raı́zes primitivas módulo 11. Afirmamos que 2 é raiz primitiva módulo
11, e de fato é pois φ(11) = 11 − 1 = 10 e 21 ≡ 2 (mod 11), 22 ≡ 4 (mod 11),
25 ≡ 10 (mod 11) e 210 ≡ 1 (mod 11). Agora podemos obter as demais raı́zes primitivas,
e são elas: 21 ≡ 2 (mod 11), 23 ≡ 8 (mod 11), 27 ≡ 7 (mod 11) e 29 ≡ 6 (mod 11)
As raı́zes primitivas é um parte da teoria dos números importantı́ssima, po-
derı́amos escrever muitas páginas sobre este tópico, entretanto escaparı́amos e muito do
nosso objetivo neste trabalho. Para um estudo profundo deste tema recomendamos Rosen
(2005).
Todavia nosso objetivo é apresentar que todo primo tem raiz primitiva. Pra
alcançar esta meta lançamos mão de alguns teoremas cujas as demonstrações podem ser
encontradas em Rosen (2005).
Definição 18 Seja f (x) um polinômio de coeficientes inteiros. Dizemos que c é uma raiz
de f (x) módulo m se f (c) ≡ 0 (mod m).
É fácil ver que se c é uma raiz de f (x) módulo m então todo inteiro x congruente
a c módulo m também será raiz.
Exemplo 15
Exemplo 16
15
Exemplo 17
O pequeno teorema de Fermat nos diz que caso p seja primo, então o polinômio h(x) =
xp−1 − 1 tem exatamente p − 1 raı́zes módulo p.
A existência de raı́zes primitivas não está restrita aos números primos. Sabemos
que todos os números da forma 1, 2, 4, pt e 2pt com p primo e t inteiro positivo possuem
raiz primitiva. Para um justificativa ver Rosen (2005).
a ≡ rx (mod m)
16
Definição 19 Seja m um inteiro positivo com uma raiz primitiva r e a é um inteiro
positivo com (a, m) = 1 então o inteiro x com 1 ≤ x ≤ φ(m) tal que rx ≡ a (mod m) é
chamado de ı́ndice de a na base r módulo m.
Exemplo 18
assim:
Desta forma a propriedade rindr a ≡ a (mod m) nos faz lembrar o número real w
definido como logaritmo de u na base v com um u e v números reais positivos e v 6= 1, ou
seja, w = logv u. Equivalentemente v w = u e também sua propriedade de que v logv u = u
de modo semelhante 1.1 nos faz lembra que logv u = logv x ⇔ u = x. Veremos algumas
propriedades dos ı́ndices aritméticos.
Teorema 22 Seja m um inteiro positivo com raiz primitiva r e seja a e b inteiros copri-
mos com m. Então:
17
ii) indr (a · b) ≡ (indr a + indr b) (mod φ(m))
Prova i) Pelo teorema de Euler temos que rφ(m) ≡ 1 (mod m) como r é uma raiz primitiva
de m então φ(m) é a menor potência de r congruente a 1 então indr 1 = φ(m) ≡ 0
(mod φ(m)).
ii) Notemos que rindr (a·b) ≡ a · b (mod m) e rindr a+indr b = rindr a · rindr b ≡ a · b
(mod m) então rindr (a·b) ≡ rindr a+indr b (mod m), consequentemente indr (a · b) ≡ indr a +
indr b (mod φ(m))
k
iii) Inicialmente notemos que rindr a ≡ ak (mod m) e de fato indr ak = x ⇒
k k
rx ≡ ak (mod m) ⇒ rindr a ≡ ak (mod m) e rk·indr a ≡ rindr a ≡ ak (mod m) então
k
rindr a ≡ rk·indr a (mod m) e consequentemente indr ak ≡ k · indr a (mod φ(m)).
Teorema 23 Seja m um inteiro positivo com raiz primitiva r e seja a e b inteiros copri-
mos com m. Então:
Exemplo 19
assim:
18
log3 1 = 6 log3 3 = 1 log3 5 = 5
log3 2 = 2 log3 4 = 4 log3 6 = 3
Exemplo 20
e
log5 2 + log5 3 = 4 + 5 ≡ 3 = log5 6 (mod φ(7)).
19
Capı́tulo 2
Noções de Criptografia
20
a letra F corresponderá a letra A. Repetindo os cálculos teremos que G corresponde a B,
H corresponde a C e assim por diante.
Este sistema parece eficiente, no entanto, um texto de uma determinada lı́ngua
as letras aparecem com determinada frequência e algumas regras de concordância tornam
este sistema frágil.
O segundo é conhecido atualmente como “quadrado de Polybius”, neste método
as letras do alfabeto eram distribuı́das em uma matriz quadrada de ordem 5 e seu valor
correspondente seria o número i · 10 + j, onde i é a linha e j é a coluna.
1 2 3 4 5
1 A B C D E
2 F G H I J
3 K L M N O
4 P Q R S T
5 U V W X Y/Z
Tabela 2.1: O quadrado de Polybius
21
P é um conjunto chamado de Espaço de texto comum. onde estão as informações
que podem ser lidas por todos, muitas vezes chamado de texto puro.
22
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
23
a mensagem três vezes pelo canal de comunicação, que é um risco; e segundo, precisamos
que nosso criptosistema seja comutativo, ou seja, não importará a ordem que a mensagem
será criptografada e descriptografada. Estes dois problemas devem expor o sistema a
sérios riscos de se conhecer a chave secreta.
Os principais algoritmos criptográficos simétricos são:
AES
O Advanced Encryption Standard (AES) é uma cifra de bloco, anunciado pelo
National Institute of Standards and Technology (NIST) em 2003.
DES
O Data Encryption Standard (DES) foi o algoritmo simétrico mais disseminado no
mundo, até a padronização do AES. Foi criado pela IBM em 1977.
3DES
O 3DES é uma simples variação do DES, utilizando-o em três ciframentos sucessivos.
IDEA
O International Data Encryption Algorithm (IDEA) foi criado em 1991 por James
Massey e Xuejia Lai e possui patente da suı́ça ASCOM Systec.
Blowfish
Algoritmo desenvolvido por Bruce Schneier, que oferece a escolha, entre maior segu-
rança ou desempenho através de chaves de tamanho variável. O autor aperfeiçoou
o no Twofish.
RC2
Projetado por Ron Rivest (o R da empresa RSA Data Security Inc.) e utilizado no
protocolo S/MIME, voltado para criptografia de e-mail corporativo.
CAST
É um algoritmo de cifra de bloco, sendo criado em 1996 por Carlisle Adams e
Stafford Tavares.
24
codificação criptográfica e e mantenho secreta a correspondente chave d de decodificação
criptográfica.
Este modelo de criptografia foi criado na década de 1970 - pelo matemático Clif-
ford Cocks que trabalhava no serviço secreto inglês, o GCHQ - Government Commu-
nications Headquarters- na qual cada parte envolvida na comunicação usa duas chaves
diferentes (assimétricas) e complementares, uma privada e outra pública.
A segurança deste modelo de criptografia é a dificuldade de obter e a partir de
d. Vejamos agora os exemplos mais conhecidos de criptosistemas assimétricos e no que se
baseia sua segurança.
RSA
O RSA é um algoritmo assimétrico que possui este nome devido a seus inventores:
Ron Rivest, Adi Shamir e Len Adleman, que o criaram em 1977 no MIT. Atu-
almente, é o algoritmo de chave pública mais amplamente utilizado, além de ser
uma das mais poderosas formas de criptografia de chave pública conhecidas até o
momento. A segurança do RSA consiste na facilidade de multiplicar dois números
primos para obter um terceiro número, mas muito difı́cil de recuperar os dois primos
a partir daquele terceiro número.
Diffie-Hellman
Baseado no problema do logaritmo discreto, é o criptosistema de chave pública mais
antigo ainda em uso. O conceito de chave pública, aliás foi introduzido pelos autores
deste criptosistema em 1976.
Curvas Elipticas
Em 1985, Neal Koblitz e V. S. Miller propuseram de forma independente a utilização
de curvas elı́pticas para sistemas criptográficos de chave pública. Eles não chegaram
a inventar um novo algoritmo criptográfico com curvas elı́pticas sobre corpos finitos,
mas implementaram algoritmos de chave pública já existentes, como o algoritmo de
Diffie-Hellman, usando curvas elı́pticas. Assim, os sistemas criptográficos de curvas
elı́pticas consistem em modificações de outros sistemas, que passam a trabalhar no
domı́nio das curvas elı́pticas, em vez de trabalharem no domı́nio dos corpos finitos.
ElGamal
Que é o principal objetivo. Cuja segurança também está baseada na dificuldade de
25
obter solução do problema do logaritmo discreto em grupo ciclı́co finito.
26
Capı́tulo 3
O Criptosistema de ElGamal
A definição anterior por ser generalizada para um grupo cı́clico finito qualquer G
27
Sem uma boa calculadora é muito difı́cil calcular a ordem de um número inteiro
módulo p, as raı́zes primitivas e mais ainda o logaritmos discreto, para auxiliar nesta
empreitada, uma poderosa ferramenta na resolução de alguns problemas é o software
Maple© um dos mais conhecidos no meio acadêmico.
28
3.3 O processo de Codificação e Decodificação
Em cada etapa a seguir usaremos um exemplo para ilustrá-las. Posteriormente
este, apresentaremos um segundo exemplo mais amplo.
A chave pública será [y, g, p], e a chave particular será o número x. Para garantir
a segurança do algoritmo, todos os números apresentados devem ter no mı́nimo 100 casas
decimais pois, a segurança do sistema esta relaciona à quantidade de algarismos dos
números.
Exemplo 21
Tomemos o número 10007 vamos verificar se este número é primo. Existem inúmeros
teste de primalidade de um inteiro, usaremos o método chamado de Crivo de Erastótenes,
por ser o mais simples e mais acessı́vel a iniciantes em teoria dos números.
√
Sabemos que 10007 ∼ = 100 e o conjunto dos primos p menores que 100 é
{2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97} vamos começar
os testes:
29
Concluı́mos que 10007 é primo. Devemos agora obter uma raiz primitiva de
p = 10007, o faremos por tentativa e erros, no entanto é necessário ter em mente o
corolário 13.
Tentaremos inicialmente 2, calculamos φ(10007) = 10006 pelo corolário 13 sabe-
mos que os candidatos a ord10007 2 são os divisores de φ(10007) que são {1, 2, 5003, 10006}.
Calculando temos 21 ≡ 2 6≡ 1 (mod 10007), 22 ≡ 4 6≡ 1 (mod 10007), 25003 ≡ 1
(mod 10007) como ord10007 2 = 5003 6= 10006 = φ(10007) concluı́mos que 2 não é uma
raiz primitiva módulo 10007
Tentaremos agora 5, 51 ≡ 5 6≡ 1 (mod 10007), 52 ≡ 25 6≡ 1 (mod 10007),
55003 ≡ −1 (mod 10007) e 510006 ≡ 1 (mod 10007) como ord10007 5 = 10006 = φ(10007)
concluı́mos que 5 é uma raiz primitiva módulo 10007.
Basta agora escolher um número inteiro, digamos x = 1000, e calcularmos
y ≡ 51000 (mod 10007) ou seja y ≡ ((510 )10 )10 ≡ ((8800)10 )10 ≡ 823010 ≡ 5801 (mod 10007)
Logo temos a chave pública [5801, 5, 10007] e a chave privada x = 1000
a ≡ gk (mod p)
b ≡ (tp · y k ) (mod p)
Exemplo 22
30
3.6 Decodificando a Mensagem
Agora para o receptor decodificar a mensagem ele toma o valor a e calcula
x
ξ ≡ a−1 (mod p)
tp ≡ (b · ξ) (mod p).
Exemplo 23
1000
Tomemos a chave privada x = 1000 e calcularmos ξ ≡ 3290−1 (mod 10007),
que faremos por partes. Um processo simples para obtermos o inverso 3290−1 módulo
10007 é resolver a congruência 3290 · a−1 ≡ 1 (mod 10007) que é o mesmo que resolver
a equação diofantina 3267 · a−1 − 10007 · z = 1, pelo algoritmo de Euclides estendido
teremos 1 = 3290 · 5040 − 10007 · 1657, ou seja, a−1 = 5040. Agora ξ ≡ 50401000 ≡ 5437
(mod 10007)
Teremos o texto puro será tp ≡ (4528 · 5437) (mod 10007) que será tp ≡ 1516
(mod 10007) retomando o texto original.
31
obtendo a mensagem cifrada [831610, 658822], agora basta envia-la para Jhon.
Jhon recebe a mensagem enviada por Isaac e deseja decifrá-la, para tanto calcula
−1
ξ ≡ 831610532 (mod 999983)
[5, 208] [125, 171] [174, 159] [35, 86] [125, 154] [174, 52]
[17, 7] [37, 149] [125, 175] [174, 78] [37, 165] [17, 169]
[128, 68] [17, 130] [37, 165] [17, 182] [174, 91] [37, 58]
[17, 182] [125, 154] [174, 185] [37, 110] [17, 137] [174, 112]
[198, 57] [37, 45] [198, 180] [125, 141] [5, 225] [198, 206]
[174, 156] [17, 208] [125, 134]
32
b · ξ ⇒ (tp · y k ) · a−x (mod p)
⇒ tp · y k · (g k )−x (mod p)
⇒ tp · y k · y −k (mod p)
⇒ tp (mod p)
⇒ tp
p p
Tomemos m como sendo o maior inteiro mais próximo de ordp r = p − 1.
Em seguida devemos observar que pelo algoritmo de Euclides temos x = im + j
com i, j ∈ N e 0 ≤ j < m e substituindo em 3.1 teremos
rim+j ≡ a (mod m) ⇔
rim · rj ≡ a (mod m) ⇔
rj ≡ a · (rim )−1 (mod m) ⇔
que, implica em
33
m i
a· r−1 ≡ rj (mod m) (3.2)
x = 13i + j (3.3)
13 i
15j = 54 15−1 (3.4)
realizando alguns cálculos temos que 15−1 ≡ 21 (mod 157) e 2113 ≡ 22 (mod 157),
trocando estas informações em 3.4 encontramos
Como nossa solução será alguma potência de 15 módulo 157 é interessante cons-
truir uma tabela com os possı́veis valores para estas potências. Como em 3.3 usamos o
algoritmo de Euclides então 0 ≤ j < 13
j 0 1 2 3 4 5 6 7 8 9 10 11 12
15j 1 15 68 78 71 123 118 43 17 98 57 70 108
Tabela 3.2:
Agora que tenho as possı́veis respostas basta variar o valor de 0 ≤ i < ∞ até
encontrar algum valor na tabela 3.2.
Iniciamos nossa busca, construindo uma nova tabela.
Para i = 0 temos
i 0
54 · 22i (mod 157) 54
34
i 0 1
54 · 22i (mod 157) 54 89
Como 89 não consta na tabela 3.2 faremos o mesmo cálculo para i = 2, e assim
por diante, até encontrarmos algum número que conste na tabela 3.2
i 0 1 2 3 4 5 6 7
54 · 22i (mod 157) 54 89 74 58 20 126 103 68
Por fim encontramos um número, neste caso, i = 7 que consta na tabela 3.2 que
ocorre quando j = 2 pela equação 3.3 temos que x = 13 · 7 + 2 = 93 portanto
35
3.9.1 Assinando uma Mensagem com ElGamal
O sistema de criação de assinatura digital só terá efeito se a assinatura for ve-
rificável. Para verificar se a assinatura na mensagem tp é autêntica, devemos tomar a
chave pública [y, g, p] e a assinatura (γ, s) e calcular os verificadores V1 e V2 os quais não
dependem da chave privada:
V1 ≡ γ s y γ (mod p), 0 ≤ V1 ≤ p − 1
e
V2 ≡ g tp (mod p), 0 ≤ V2 ≤ p − 1.
Para que a assinatura seja verdadeira devemos obter V1 ≡ V2 (mod p), ou seja:
V1 ≡ γ s y γ (mod p)
−1
≡ γ (tp−x·γ)k y γ (mod p)
−1 tp−x·γ
≡ γk y γ (mod p)
≡ g tp−x·γ y γ (mod p)
x·γ −1
≡ g tp (g ) yγ (mod p)
≡ g tp (y γ )−1 y γ (mod p)
≡ g tp (mod p)
≡ V2 (mod p)
36
3.9.3 Segurança da Assinatura
e
s2 ≡ k −1 (tp2 − xγ) (mod p − 1),
e
s2 k ≡ (tp2 − xγ) (mod p − 1),
s1 k ≡ tp1 − xγ (mod p − 1)
xγ ≡ tp1 − s1 k (mod p − 1)
x ≡ γ −1 (tp1 − s1 k) (mod p − 1)
37
Caso alguém tente forjar uma assinatura na mensagem tp escolhendo um k e
usando a chave pública para calcular γ ≡ g k (mod p). Mas para calcular
s = (P − xγ)k −1 (mod p − 1)
3.9.4 Exemplos
γ ≡ 25 (mod 13)
facilmente chegamos a γ = 6 e
s ≡ (10 − 7 · 6) · 8 mod 12
Exemplo 25
38
Temos como texto criptografado tc = [3290, 4528] então assinaremos cada um
individualmente com a chave pública [y, g, p] = [5801, 5, 10007] e a chave privada x = 1000.
Para assinarmos 3290 usaremos k = 197, calculemos
que resulta em
γ ≡ 5488 (mod 10007)
e calculando s:
s ≡ (3290 − 1000 · 5488) · 197−1 (mod 1006).
e
s ≡ (4528 − 1000 · 172) · 167−1 ≡ 9842 (mod 10006)
e
V2 ≡ 53290 ≡ 6809 (mod 10007)
39
e
V2 ≡ 53290 ≡ 4420 (mod 10007)
Exemplo 26
Assinar a mensagem tp = 3517 usando a chave pública [y, g, p] = [18, 5, 37] e a chave
particular x = 7
Como o texto tp é maior que o primo p = 37 devemos inicialmente “quebrar”o
texto em textos menores que p. Agindo deste forma teremos tp1 = 35 e tp2 = 17.
Inicialmente estaremos assinando o texto tp1 escolhendo k = 5, calculando o valor de γ
temos
γ ≡ 55 ≡ 17 (mod 37)
e calculando
s ≡ (35 − 7 · 17)29 (mod 36)
ou seja
s ≡ 12 (mod 36).
e calculando o s temos
s ≡ (35 − 7 · 2)23 (mod 36)
ou seja
s ≡ 15 (mod 36).
40
Capı́tulo 4
4.1 A Esteganografia
Sabemos que esteganografia (do grego “escrita escondida”) é o estudo e uso das
técnicas para ocultar a existência de uma mensagem dentro de outra. Em outras palavras,
esteganografia é o ramo particular da criptologia que consiste em fazer com que uma forma
escrita seja camuflada em outra a fim de mascarar o seu verdadeiro sentido.
Esta técnica é mais aconselhada para os aluno do inicio de ensino médio, cujo
conhecimento em matemática não está preparado para cálculos avançados.
Um dos exemplos mais conhecido de esteganografia é a inserção de uma sı́laba
entre as sı́labas da palavra que desejamos transmitir. Por exemplo: fixamos como sı́laba
PE como a sı́laba de codificação, então se desejo transmitir a palavra MATEMÁTICA,
devo transmitir o código MAPETEPEMÁPETIPECA
Outro método que podemos usar é transformar o alfabeto em outros sı́mbolos,
vejamos um exemplo na figura 4.1
41
Figura 4.1: Chave Criptográfica
Neste modelo, cada letra será representada pela figura que a circunda com por
exemplo:
uma régua;
um esquadro;
um compasso;
uma tesoura e
42
Agora já esta pronto o disco criptográfico, basta usá-lo como indicado no capı́tulo
1
.
Folhas de papel A4
tesoura;
cola branca;
régua;
caneta;
43
Para criptografar mensagem devemos colocar os copos um dentro do outro de
forma que as tiras de papel se encaixem sem nenhuma sobrepor outra.
Se desejarmos criptografar a palavras Escola, escolhemos 6 copos, digamos os
copos c1 , c2 , c3 , c4 , c5 , c6 e giramos estes copos de modo a escreve a palavra Escola daı́
escolhemos uma das outras 26 palavras possı́veis para se formar com 6 letras do alfabeto
nas ordens dos copos escolhidos, suponha que tenha escolhido a palavra composta pelas
letras L1 , L2 , L3 , L4 , L5 , L6 , então a palavra Escola será o par
[L1 L2 L3 L4 L5 L6 , c1 − c2 − c3 − c4 − c5 − c6 ]
Exemplo 27
Separamos os alunos em duplas e em seguida pedimos para escolherem uma função afim
qualquer, digamos y = 2x + 3.
Um dos alunos escolhe um mensagem e a pré-codifica usando a tabela 1.1, su-
ponhamos que a mensagem seja 17241914 291422 10302110 ao passar cada número pelo
processo criptográfico o aluno terá 34483831 582847 20604223 que é uma mensagem crip-
tografada. O outro aluno da dupla que queira decodificar a mensagem calcula a inversa da
y−3
função criptográfica, neste caso x = e efetua o cálculo
2
34483831 − 3 582847 − 3 20604223 − 3
resultando 17241914 291422 10302110 que é a
2 2 2
mensagem “hoje tem aula”.
Este é um exemplo de criptografia onde se criptografa toda a palavra, no entanto
podemos criptografar letra por letra. Pode ser mais demorado para efetuar os cálculos,
porém é muito mais vantajoso quanto a gama de escolhas de funções criptográficas.
Podemos criptografar a mensagem
17 − 24 − 19 − 14 − 99 − 29 − 14 − 22 − 99 − 10 − 30 − 21 − 10
44
substituindo os espaços por 99 usando uma função de duas sentenças
2x − 24, se x ≥ 22
y=
x − 2, se x < 22
Exemplo 28
324 − 646 − 406 − 216 − 10246 − 936 − 216 − 544 − 10246 − 100 − 1000 − 496 − 100
45
Capı́tulo 5
i) m|a e m|b
Exemplo 29
Qual é o MDC(12,18)=?
Para resolver este problema devemos elencar o conjunto dos divisores de 12 e de
18 e são eles D(12) = {1, 2, 3, 4, 6, 12} e D(18) = {1, 2, 3, 6, 9, 18} e os divisores comuns
são os números {1, 2, 3, 6} e o maior deles é 6 consequentemente M DC(12, 18) = 6
46
Sabemos que este processo pode ser exaustivo, então daremos um outro método:
12, 18 2 ← Escolhemos um número primo que divida ambos os números
6, 9 3 ← repetimos o processo acima
2, 3 1 ← paramos quando somente o número 1 os divide
então o M DC(12, 18) = 2 · 3 · 1 = 6
Exemplo 30
Exemplo 31
Exemplo 32
47
Exemplo 33
Definição 24 Dado um número natural n definiremos como φ(n) como sendo a quanti-
dade de números naturais k menores que n e coprimos com n
Existem dois métodos para se calcular o valor de φ(n) dado um natural n qual-
quer. O primeiro é fazer uma lista com todos os números menores que n e tirar da lista
os não coprimos e em seguida contar os que sobraram então φ(n) será esta quantidade.
É obvio que este método não é eficiente quando se trata de números muito grande.
O segundo método é mais eficiente e já conhecemos pelo teorema 9.
Exemplo 34
Calcular φ(19).
Notemos que 19 é primo, concluı́mos que φ(19) = 19 − 1 = 18 Para facilitar a
verificação dos próximos exemplos ampliaremos a tabela 1.1.
n 1 2 3 4 5 6 7 8 9
φ(n) 1 1 2 2 4 2 6 4 6
n 10 11 12 13 14 15 16 17 18 19
φ(n) 4 10 4 12 6 8 8 16 6 18
n 20 21 22 23 24 25 26 27 28 29 30
φ(n) 8 12 10 22 8 20 12 18 12 28 8
48
Definição 25 Dados os números inteiros a, b e m a única restrição para estes números
é m > 1. Dizemos que a é congruente a b módulo m, em sı́mbolos a ≡ b (mod m), se e
somente se b − a for divisı́vel por m.
Exemplo 35
Exemplo 36
Exemplo 37
49
Para encontrar a ordem de um número módulo m basta testar todos os divisores
de φ(m).
Exemplo 38
Exemplo 39
Exemplo 40
Obter ord13 6
Sabemos que φ(13) = 13 − 1 = 12 e os divisores de 12 são {1, 2, 3, 4, 6, 12} então
61 ≡ 6 (mod 13), 62 ≡ 10 (mod 13), 63 ≡ 8 (mod 13), 64 ≡ 9 (mod 13),
66 ≡ 12 (mod 13) e 612 ≡ 1 (mod 13) Portanto ord13 6 = 12
Exemplo 41
Exemplo 42
Pelo exemplo 38 podemos concluir que 5 não é uma raiz primitiva de 19.
50
5.4 Definindo o criptosistema
Como apresentado em todo esse trabalho, o criptosistema de ElGamal é muito
eficiente, tentaremos agora transpor esta ideia para o ensino médio.
Para criptografar uma mensagem devemos primeiro criar uma chave pública que
será divulgada, para que qualquer pessoa possa me enviar uma mensagem criptografada.
Para isso eu devo escolher um número primo p, um número natural x qualquer menor que
esse primo e encontra uma raiz primitiva g deste primo, em seguida calculamos y ≡ g x
(mod m). A chave pública será o trio [y, g, p] e a chave secreta será o número x
Exemplo 43
Crie uma chave pública e um chave privada no sistema criptográfico de ElGamal usando
o primo p = 37 e a raiz primitiva g = 5
Como já temos o primo p = 37 e a raiz primitiva g = 5, então agora falta apenas
escolher um número para ser a chave privada e calcularmos a chave pública. Escolhemos
o números x = 6, notemos que apesar de x = 6 ser um número pequeno os cálculos se
tornam complicados e é neste empecilho que se garante a segurança do criptosistema.
Vamos aos cálculos:
53 ≡ 14 (mod 37)
a ≡ gk (mod p)
b ≡ (tp · y k ) (mod p)
51
Onde tp é a mensagem já pré-codificada.
52
Exemplo 44
ou seja,
a ≡ 14 (mod 37)
b ≡ 27 (mod 37).
Exemplo 45
a ≡ 18 (mod 37)
o que resulta em
b ≡ 10 · 117 ≡ 10 · 11 ≡ 36 (mod 37).
53
5.6 Decodificando um texto
Para decodificar a mensagem devemos tomar o valor a e calcular
x
ξ ≡ a−1 (mod p)
tp ≡ (b · ξ) (mod p)
Exemplo 46
Exemplo 47
Exemplo 48
54
14 · 1 ≡ 14 (mod 37)
14 · 2 ≡ 28 (mod 37)
14 · 3 ≡ 05 (mod 37)
14 · 4 ≡ 19 (mod 37)
14 · 5 ≡ 33 (mod 37)
14 · 6 ≡ 10 (mod 37)
14 · 7 ≡ 24 (mod 37)
14 · 8 ≡ 01 (mod 37)
Portanto a−1 = 8
Exemplo 49
Exemplo 50
a−1 = 8.
para obtermos
ξ ≡ 36 (mod 37).
Finalizando temos
tp ≡ (27 · 36) (mod 37)
55
tp ≡ 10 (mod 37),
Exemplo 51
a−1 = 35
então, calculamos
ξ ≡ 356 (mod 37),
logo
ξ ≡ 27 (mod 37)
ou seja,
tp ≡ 10 (mod 37)
56
Conclusão
57
aos alunos do ensino básico na forma de estı́mulo aos que acreditam que a matemática do
ensino básico seja simplória.
Finalizamos afirmando que criptografia deveria fazer parte do currı́culo de ma-
temática do ensino médio e de maneira mais avançada no currı́culo das graduações em
matemática.
58
Referências Bibliográficas
Rosen, K. H. (2005). Elementary Number Theory and Its Applications. Pearson Addilson
Wesley, New York.
59