Escolar Documentos
Profissional Documentos
Cultura Documentos
Criptografia
Criptografia
1o Semestre - 2006
(Última Modificação: 4 de Maio de 2006)
1 Bibliografia e referências
Livro texto: S.C. Coutinho Números inteiros e criptografia RSA IMPA/SBM,
2000.
Outras referências:
elaine@mat.ufmg.br
2 Introdução
O objetivo desse curso é estudar o método de criptografia de chaves públicas
conhecido como RSA. Para entender como este método funciona, é necessário
o estudo de alguns conceitos de uma área da matemática chamada Teoria de
números. E, é claro, espera-se desenvolver, ao longo do curso, o raciocı́nio
lógico matemático dos alunos, introduzindo métodos de prova de teoremas como
indução matemática e demonstração por absurdo.
Deve ficar bem claro que este é um curso de matemática para cientistas da
computação. Isto é, o rigor nunca será deixado de lado mas a atenção estará
sempre voltada para a aplicação principal proposta: criptografia RSA.
1
2.1 Criptografia
• Criptografia: estuda os métodos para codificar uma mensagem de modo
que só seu destinatário legı́timo consiga interpretá-la.
2
2.3 Computação algébrica
• Chave pública do RSA: multiplica-se dois primos muito grandes.
3.1 Algoritmos
• Algoritmo = processo de cálculo baseado em regras formais.
• Perguntas:
a = bq + r 0 ≤ r < b.
• Algoritmo da divisão:
Etapa 1: q = 0; r = a
Etapa 2: Se r < b, pare. Nesse caso, o quociente é q e o resto r.
Etapa 3: Se r ≥ b, faça r := r − b, q := q + 1 e volte à Etapa 2.
• Observações:
3
1. O algoritmo sempre para: sequência decrescente de números inteiros
positivos.
2. O resultado da aplicação do algoritmo corresponde às especificações
da saı́da (trivialmente).
3. O algoritmo é extremamente ineficiente, em especial se a >> b.
a = bq + r 0≤r<b
Prova .
Unicidade - Sejam q, q ′ , r, r′ tais que
a = bq + r 0≤r<b (1)
a = bq ′ + r′ 0 ≤ r′ < b (2)
Subtraindo-se (1) de (2), obtemos:
r − r′ = b(q ′ − q)
0 ≤ b(q ′ − q) < b
4
• Escrevemos d = mdc(a, b). Se mdc(a, b) = 1, dizemos que a e b são
primos entre si .
• Exemplo:
1234 54 46 8 6 2
46 8 6 2 0
Ou seja, mdc(1234, 54) = 2.
• Perguntas:
• Respostas:
a = bq1 + r1 e 0 ≤ r1 < b
b = r1 q2 + r2 e 0 ≤ r2 < r1
r1 = r2 q3 + r3 e 0 ≤ r3 < r2
r2 = r3 q4 + r4 e 0 ≤ r4 < r3
.. ..
. .
– Segunda pergunta: observe que
Prova .
Sejam
d1 = mdc(a, b) e d2 = mdc(b, s).
5
Afirmamos que d1 ≤ d2 . De fato, d1 é o máximo divisor de a e b. Logo d1 divide
a e b e portanto existem inteiros positivos u e v tais que:
a = d1 u eb = d1 v
s = d1 u − d1 v = d1 (u − vg).
Prova .
Aplicando o algoritmo a a e b, temos:
a = bq1 + r1 e 0 ≤ r1 < b
b = r1 q2 + r2 e 0 ≤ r2 < r1
r1 = r2 q3 + r3 e 0 ≤ r3 < r2
r2 = r3 q4 + r4 e 0 ≤ r4 < r3
.. ..
. .
rn−2 = rn−1 qn e rn = 0
Da última linha, temos que rn−1 divide rn−2 e portanto mdc(rn−1 , rn−2 ) = rn−1 .
Aplicando sucessivamente o lema 2, temos que mdc(a, b) = rn−1 .
O resultado que mais vamos usar durante o curso sobre mdc é o seguinte:
α.a + β.b = d.
6
Exemplo 1 Sejam a = 1234 e b = 54. Temos que:
Agora, observe que sabemos calcular 46 em função de 1234 e 54. Então, substi-
tuindo:
Continuando,
46 = 8.5 + 6 → 6 = 46 − 8.5
= (1234 − 54.22) − (54.(23) + 1234.(−1)).5
= 1234.(6) + 54.(−22 − (23).5)
= 1234.(6) + 54.(−137)
8 = 6.1 + 2 → 2 = 8−6
= (54.(23) + 1234.(−1)) − (1234.(6) + 54.(−137))
= 1234(−1 − 6) + 54(23 + 137)
= 1234(−7) + 54(160)
Observe que o teorema não diz que os valores de α e β são únicos. Na verdade,
existe uma infinidade de números que satisfazem a equação αa + βb = d.
Pergunta: para que serve calcular α e β?
Resposta:
1(1), 4, 5, 7, 8, 9.
7
4 Fatoração única
n = pe11 . . . . .pekk
onde 1 < p1 < p2 < . . . < pk são números primos e e1 , . . . , ek são inteiros
positivos (multiplicidades).
1. k é primo ou composto?
Respostas:
8
algoritmo ao número qn1 , determinando q2 , o segundo fator primo de n. Para
determinar o terceiro fator primo q3 , aplicamos o algoritmo ao número q1n.q2 e
n
assim por diante, até chegarmos em q1 .q2 .....q s−1
= qs , com qs primo. Observe
que q1 ≤ q2 ≤ . . . ≤ qs−1 ≤ qs e
n n n
n> > > ... > > 0,
q1 q1 .q2 q1 .q2 . . . . .qs
ou seja, o algoritmo sempre termina.
9
√
Etapa 2: Incremente x de uma unidade e calcule y = x2 − n.
Etapa 3: Repita a etapa 2 até encontrar um valor inteiro para y, ou até que x = n+1
2 .
No primeiro caso, n tem fatores x + y e x − y; no segundo, n é primo.
Logo, x = 1164 e y = 113. Os fatores procurados são x+y = 1277 e x−y = 1051.
10
2. Se a e b dividem c então o produto a.b divide c.
c = a.t = a.b.k
4.6 Unicidade
11
4.7 Exercı́cios propostos
1. Prove a propriedade fundamental dos primos.
√
2. Demonstre que, se p é um número primo, então p é um número irracional.
3. Livro texto: 2, 4, 5, 8, 11, 12.
5 Números primos
Até agora:
Considere o polinômio:
x f (x)
1 2
2 5
3 10
4 17
5 26
6 37
7 50
8 65
9 82
2 5
12
A pergunta que surge então é: isso é fruto do azar?
Teorema 7 Dado um polinômio f (x) com coeficientes inteiros, existe uma in-
finidade de inteiros positivos m tais que f (m) é composto.
Prova .
Vamos Provar o teorema apenas no caso em que o polinômio tem grau 2. Ou
seja, consideraremos f do tipo:
Podemos supor a > 0. Suponhamos que exista m tal que f (m) = p onde p é
primo. Calculando f (m + hp):
ou seja, se
2amh + aph2 + bh = h.(2am + aph + b) > 0
Como podemos sempre tomar h positivo, temos:
−b − 2am
2am + aph + b > 0 → h >
a.p
Existe uma infinidade de números dessa forma. Logo, se existe inteiro m tal
que f (m) é primo, então existe uma infinidade de tais números.
Conclusão: não existe uma fórmula polinomial (em uma variável) para
primos .
M (n) = 2n − 1
13
• Nenhum primo é perfeito.
• Outro resultado: Todo número perfeito par possui a forma acima. Ex:
6 = 22−1 (22 − 1)
p# = q # .p
14
5.5 Infinidade de primos
Prova .
Digamos que exista uma quantidade finita de primos:
{p1 , p2 , . . . , pk }
Podemos supor que esses primos estão ordenados, de modo que pk é o maior
deles. Considere o número p#
k + 1. Como vimos, esse número possui fator primo
maior que pk . ABSURDO!
Observações:
√
1. Podemos parar em n...
Etapa 4: Atribua o valor P 2 a uma nova variável T ; substitua por zero o valor da
posição (T −1)
2 e incremente T de 2P ; repita até que T > n; incremente P
de 2 e volte à Etapa 2.
15
5.8 Exercı́cios propostos
1. Entenda e implemente o algoritmo da pag 65 do livro texto.
2. Livro texto: 1, 3 a 7, 8 e 10.
6 Aritmética modular
Aritmética modular = aritmética dos fenômenos cı́clicos.
Exemplos: Horas, dias do mês, letras do alfabeto, etc.
Reflexiva x ∼ x.
Simétrica Se x ∼ y então y ∼ x.
Transitiva Se x ∼ y e y ∼ z então x ∼ z.
Exemplos:
x = {y ∈ X : y ∼ x}.
Propriedades:
16
• X é a união de todas as classes de equivalência.
Exemplos:
10 ≡ 0 (mod 5) 23 ≡ 1 (mod 11)
• a ≡ a (mod n) (trivialmente)
• Transitividade: exercı́cio.
a = {a + kn | k ∈ Z}
17
6.3 Artimética modular
a+b=a+b
Exemplo:
5 + 4 ≡ 9 ≡ 1 (mod 8)
Logo,
5+4=9=1
a.b = a.b
Propriedades da adição:
A1 (a + b) + c = a + (b + c).
A2 a + b = b + a.
A3 a + 0 = a.
A4 a + −a = 0.
Propriedades da multiplicação:
M1 (a.b).c = a.(b.c).
M2 a.b = b.a.
M3 a.1 = a.
AM a.(b + c) = a.b + a.c.
Exemplo: em Z6 ,
2.3 = 6 = 0!!!
18
Como 10 ≡ 1 (mod 3),
a ≡ an + an−1 + . . . + a1 + a0 (mod 3)
Logo, a ≡ 0 (mod 3) se e somente se
an + an−1 + . . . + a1 + a0 ≡ 0 (mod 3)
Observe que podemos usar o mesmo argumento para provar que um número
inteiro é divisı́vel por 9 se a soma de seus algarismos é divisı́vel por 9
(10 ≡ 1 (mod 9)).
• Divisibilidade por 11: 11|a se a soma alternada de todos os algaris-
mos de a é divisı́vel por 11. Prova Observe que 10 ≡ −1 (mod 11).
Portanto,
10k ≡ (−1)k (mod 11)
é igual a 1 ou -1 dependendo da paridade de k. Logo,
a ≡ (−1)n .an + (−1n−1 ).an−1 + . . . + a2 − a1 + a0 (mod 11)
6.5 Potências
2 3
3515 = 35.352 .352 .352
≡ 15.(15)2 .(352 )2 .((352 )2 )2 (mod 20)
≡ 15.5.(5)2 .((352 )2 )2 (mod 20)
≡ 15.5.5.(5)2 (mod 20)
≡ 15.5.5.5 (mod 20)
≡ 15.5 (mod 20)
≡ 15 (mod 20)
19
6.6 Equações diofantinas
x3 − 117y 3 = 5
É muito fácil ver que isso é verdade através da redução módulo 9. De fato, como
117 é divisı́vel por 9,
x3 − 117y 3 ≡ x3 ≡ 5 (mod 9)
Prova (⇒) Suponha que a tem inverso. Então existe b tal que
a.b ≡ 1 (mod n)
Logo,
a.b + k.n = 1
e portanto mdc(a, n) = 1.
(⇐) Suponha mdc(a, n) = 1. Logo existem α e β tais que:
α.a + β.n = 1
Ou seja,
α.a ≡ 1 (mod n)
e portanto a tem inverso em Zn .
O conjunto dos elementos de Zn que têm inverso é muito importante. Vamos
denotá-lo por U(n). Em outras palavras,
U(n) = {a ∈ Z(n)|mdc(a, n) = 1}
20
No caso de n = p ser primo,
a.x ≡ b (mod n)
x ≡ α.b (mod n)
4, 5, 6(b), 7, 10 e 11
21
Questão 2 - Verifique se as proposições abaixo são verdadeiras ou falsas. Dê
uma demonstração (= justificativa clara e bem escrita) ou um contra-exemplo
para justificar a sua conclusão.
√
(a) Se p é um número primo, então p é um número irracional.
(b) Se um número inteiro A se escreve em base 8 na forma an an−1 ...a1 a0 , com
0 ≤ ai ≤ 7, então 2|A se e somente se a0 = 0.
(c) Se p > 3 é um número primo e p ≡ a( (mod 3)), então mdc(a, 3) = 1.
(d) Todo número inteiro representável com três algarismos iguais na base 10 é
divisı́vel por 37.
(e) Se x e y são inteiros ı́mpares, então x2 + y 2 = p2 para algum primo p.
Resolução:
√ a
a) V- Suponha que existam a, b ∈ ℵ tais que p = b. Podemos supor
mdc(a, b) = 1. Logo,
p.b2 = a2
e portanto p|a2 . Pela propriedade fundamental dos primos, p|a. Logo,
existe c ∈ ℵ tal que a = pc.
A = an .8n + . . . + a1 .8 + a0 ≡ a0 (mod 2)
ou seja, 2|A se e somente se 2|a0 . Deste modo, 2|A se e somente se
a0 ∈ {0, 2, 4, 6}.
a = 3n + k, com k = 1, 2
Pelo algoritmo euclideano, mdc(a, 3) = mdc(k, 3) = 1 para k = 1, 2.
22
d) V - Seja n = aaa = a(111). Como 111 = 3.37,
x = 2n + 1, y = 2m + 1
Logo,
x2 + y 2 = 4n2 + 4n + 1 + 4m2 + 4m + 1
= 2(2n2 + 2n + 2m2 + 2m + 1)
= 2k
onde k é um número ı́mpar. Logo não existe p ∈ ℵ tal que
x2 + y 2 = p2
Observe que p não precisa ser primo: vale para qualquer número natural.
a ≡ 1 (mod p) ou a ≡ −1 (mod p)
(⇐=) Trivial!
23
8 Indução e Fermat
Seja P (n) uma proposição que afirma que uma determinada propriedade vale
para cada número natural n. Por exemplo:
Prova
24
Caso geral: veja pag 95 do livro texto.
aa′ ≡ 1 (mod p)
Logo,
ap−1 ≡ 1 (mod p).
k = (p − 1).q + r 0 ≤ r < (p − 1)
Logo,
ak ≡ a(p−1).q+r ≡ (ap−1 )q .ar (mod p).
p−1
Mas (a ) ≡ 1 (mod p) e portanto
ak ≡ ar (mod p).
1, 3, 46, 7, 8, 12
9 Pseudoprimos
Nesta seção, veremos com usar o pequeno teorema de Fermat para identificar
que um número é composto sem fatorá-lo .
25
9.1 Pseudoprimos
bn−1 ≡ 1 (mod n)
Apesar de às vezes dar errado, esse teste (chamado de teste de Leibniz) é muito
útil. Tambeém é possı́vel melhorar o resultado do teste se testarmos para duas
bases.
Como vimos anteriormente, não existem números que sejam pseudoprimos para
todas as bases. Entretanto, pode ocorrer que um número composto n seja
pseudoprimo para todas as bases b tais que mdc(b, n) = 1.
Dizemos que um número composto ı́mpar é um número de Carmichael se
bn ≡ b (mod n).
26
Os números de Carmichael possuem duas propriedades muito interessantes,
dadas pelo teorema baixo:
1. p2 não divide n;
2. p − 1 divide n − 1.
bn ≡ b (mod p)
bp−1 ≡ 1 (mod p)
bn ≡ (bp−1 )q .b ≡ b (mod p)
Por (1), temos que n = p1 . . . pk com p1 < p2 < . . . < pk . Como os primos são
distintos, bn − b é divisı́vel pelo produto p1 .p2 . . . . .pk = n. Em outras palavras,
bn ≡ b (mod n)
pn − p = p(pn−1 − 1)
Mas p não divide pn−1 − 1, logo p2 não pode dividir pn − p. Portanto, n não
pode dividir pn − p. Em outras palavras, p ≡ p (mod n). Absurdo.
O restante da demonstração depende do teorema da raiz primitiva, que só será
vista no capı́tulo 10...
Observações:
27
9.3 Teste de Miller
Teorema de Fermat: detecta números compostos com uma certa eficiência, mas
não é um bom teste de primalidade.
Teste de Miller: Calcula-se a sequência de potências módulo n:
k
bq , b2q , . . . , b2 q
onde n − 1 = 2k q.
O fato é que, se n é primo, então:
k
b2 q
≡ bn−1 ≡ 1 (mod n)
j
Digamos que j é o menor expoente tal que b2 q ≡ 1 (mod n). Se j ≥ 1
podemos escrever
j j−1 j−1
b2 q − 1 = (b2 q − 1)(b2 q + 1)
j j−1
Se n é primo e divide b2 q −1, então n deve dividir (b2 q
+1) pela minimalidade
de j. Logo,
j−1
b2 q − 1 ≡ −1 (mod n)
Ou seja, uma das potências
k
bq , b2q , . . . , b2 q
Teste de Miller.
28
Logo 561 tem que ser composto.
2, 5, 7, 8, 10
10 Teorema de Euler
O pequeno teorema de Fermat nos diz como trabalhar com certas congruências
envolvendo expoentes quando o módulo é primo. Nessa seção, veremos como
lidar com congruências módulo um número composto.
n 1 2 3 4 5 6 7 8 9 10 11 12
φ(n) 1 1 2 2 4 2 6 4 6 4 10 4
U(n) = {a ∈ Zn : mdc(a, n) = 1}
29
Desta forma, φ(n) nada mais é do que o número de elementos de U(n).
Vamos ver como calcular φ(n). Começamos com alguns casos especiais. Seja p
um número primo. Então todos os inteiros positivos menores que p são primos
com p. Logo
φ(p) = p − 1
30
Exemplo 9 Temos que U(8) = {1, 3, 5, 7} e portanto φ(8) = 4. Observe que,
se a, b, c ∈ U(8), então a.b ∈ U(8) e, se c 6= b, então
3.1 ≡ 3 (mod 8)
3.3 ≡ 1 (mod 8)
3.5 ≡ 7 (mod 8)
3.7 ≡ 5 (mod 8)
Logo,
(3.1).(3.3).(3.5).(3.7) ≡ 1.3.5.7 (mod 8)
e portanto,
34 .1.3.5.7 ≡ 1.3.5.7 (mod 8)
Como mdc(1.3.5.7, 8) = 1, podemos cortar o termo comum dos dois lados da
equivalência:
34 ≡ 1 (mod 8)
aφ(n) ≡ 1 (mod n)
Logo,
aφ(n) .b1 . . . . .bφ(n) ≡ b1 . . . . .bφ(n) (mod n)
Como mdc(b1 . . . . .bφ(n) , n) = 1, podemos cortar o termo comum dos dois lados
e portanto,
aφ(n) ≡ 1 (mod n)
Capı́tulo 8: 4, 6, 8, 9, 10, 18
31
10.4 Tabela Hashing
32
11 Criptografia RSA
11.1 Pré-codificação
C(b) ≡ be (mod n)
33
Exemplo 10 Considere a frase Paraty é linda . Convertendo em números,
2510271029349914992118231310
Agora devemos escolher n. Vamos começar com um número pequeno, por ex-
emplo
n = 11.13 = 143
Podemos então quebrar a mensagem acima em blocos, que devem ter valor
menor que 143:
Então temos que φ(143) = 10.12 = 120 e portanto e deve ser um número que
não divide 120. O menor valor possı́vel é 7. Logo,
2
C(25) ≡ 257 ≡ 252 .252 .25 (mod 143)
2
≡ 252 .53.25 (mod 143)
≡ 532 .53.25 (mod 143)
≡ 92.53.25 (mod 143)
≡ 14.25 (mod 143)
≡ 64 (mod 143)
Logo o inverso de 7 módulo 120 é −17. Como d deve ser usado como um
expoente, precisamos que d seja positivo. Logo tomamos d = 120 − 117 = 103.
34
11.3 Funciona?
D(C(b)) = b?
DC(b) ≡ b (mod n)
E por que não a igualdade? Observe que DC(b) e b são menores que n − 1.
Por isso escolhemos b menor que n e mantivemos os blocos separados depois da
codificação!
Por definição, temos que
Mas d é o inverso de e módulo φ(n). Logo existe inteiro k tal que ed = 1+kφ(n).
Logo,
bed ≡ b1+kφ(n) ≡ (bφ(n) )k .b (mod n)
Se mdc(b, n) = 1, então podemos usar o teorema de Euler:
Se b e n não são primos entre si, obderve que n = p.q, p e q primos distintos.
Logo,
bed ≡ b1+kφ(n) ≡ (b(p−1) )k.(q−1) .b (mod p)
Se mdc(b, p) = 1, então podemos usar o teorema de Fermat (bp−1 ≡ 1 (mod p)).
Se não, temos que p|b e portanto
bed ≡ b ≡ 0 (mod p)
Logo,
bed ≡ b (mod p)
qualquer que seja b.
Fazemos o mesmo para o primo q, obtendo:
bed ≡ b (mod q)
Portanto,
bed ≡ b (mod p.q)
como querı́amos.
35
11.4 Porque o RSA é seguro
Suponha que desejamos implementar o RSA de chave pública (n, e), de modo que
n seja um inteiro com aproximadamente r algarismos. Para construir n, escolha
r
4r 45r
um primo p entre 10 e 100 algarismos e, em seguida, escolha q próximo de 10p . O
tamanho da chave recomendado atualmente para uso pessoal é de 768 bits. Isso
significa que n terá aproximadamente 231 algarismos. Para construir tal número
precisamos de dois primos de, digamos, 104 e 127 algarismos respectivamente.
Outra coisa a ser observada é que os números p − 1, q − 1, p + 1, p − 1 não tenham
fatores primos pequenos, pois senão seria fácil fatorar n.
Para encontrar p e q, seguiremos a seguinte estratégia:
36
2. Verifique se n é divisı́vel por um primo menor que 5.000.
11.6 Assinaturas
Ca (Dm (b))
Ou seja, primeiro ele “decodifica” a mensagem como só ele pode fazer, depois ele
codifica o resultado, como só o Allan pode ler. Para ler a mensagem, primeiro o
Allan aplica Da e depois Cm . Observe que Cm é público. Se a mensagem fizer
sentido, é certo que a origem foi mesmo o Mário!
Mas cuidado ! Esse sistema pode ser usado para quebrar o RSA, como em
1995 por um consultor em assuntos de segurança de computadores...
Capı́tulo 11: 1, 2, 3, 4, 6.
12 1o trabalho prático
O trabalho tem como objetivo a criação de dois números primos grandes (entre
20 e 30 bits). Para isso:
37
• Verifique se m, k são divisı́veis por um primo menor que 5.000.
13 Raı́zes primitivas
bp−1 ≡ 1 (mod p)
mas
br \ ≡ 1 (mod p)
se r < p − 1.
38
Teorema de Lagrange. A ordem de b tem que dividir a ordem de U(n), que
é igual a φ(n).
bn−1 ≡ 1 (mod n)
e n−1
b p \ ≡ 1 (mod n)
para cada fator primo de n − 1, então n é primo.
Demonstração: Veja o livro texto pag 168.
Continua... Aguardem!
14 Sistemas de congruências
O objetivo dessa seção é estudar a solução de sistemas de equações lineares. A
aplicação para criptografia é o desenvolvimento de um método para partilhar
senhas.
ax ≡ b (mod n)
39
Se a não tem inverso em Zn , então mdc(a, n) = d 6= 1. Logo, a equação:
ax − ny = b
só tem solução quando b é divisı́vel por d.
Suponhamos então que d divide b. Escreveremos a = da′ , b = db′ e n = dn′ .
Cancelando os d’s, chegamos à seguinte equação:
a′ x − n′ y = b′
Ou seja,
a′ x ≡ b′ (mod n′ )
Observe que agora mdc(a′ , n′ ) = 1, e essa equação sempre tem solução.
Três satélites passarão sobre o Rio essa noite. O primeiro à uma hora , o
segundo às 4 horas e o terceiro às 8 horas da manhã. O primeiro leva 13 horas
para completar uma volta em torno da terra, o segundo 15 horas e o terceiro 19
horas. Determine quantas horas decorrerão, à partir de meia noite, até que os
três satélites passem ao mesmo tempo sobre o Rio.
Montagem matemática: seja x é o número de horas, contadas a partir da meia
noite de hoje, quando os três satélites passarão juntos sobre o Rio. Então:
x ≡ 1 (mod 13)
x ≡ 4 (mod 15)
x ≡ 8 (mod 19)
40
Podemos re-escrever a primeira equação cmo x = 1 + 13t, Substituindo a
primeira equação na segunda, obtemos:
t ≡ 6 (mod 15)
u ≡ 1 (mod 19)
Logo,
x = 79 + 195u
= 274 + 3705v
Logo os satélites passarão juntos pela primeira vez 274 horas depois da meia
noite de hoje.
Observe que, para resolver o problema dos satélites, resolvemos as duas primeiras
equações, obtendo x = 79 + 195u. Isso corresponde a uma nova equação, x ≡ 79
(mod 195). Em geral, a solução de um sistema de muitas equações é obtida
através da solução de vários sistemas de duas equações. Desta forma, vamos
analisar apenas o algoritmo correspondente á solução de um sistema de duas
equações.
Considere então o sistema
x ≡ a (mod m)
x ≡ b (mod n)
x = a + my
my ≡ (b − a) (mod n)
41
Teorema Chinês do resto. Sejam n1 , . . . , nk inteiros positivos, dois a dois
primos entre si. Então o sistema
x ≡ a1 (mod n1 )
..
.
x ≡ ak (mod nk )
x ≡ 3 (mod 12)
x ≡ 19 (mod 8)
Suponha que que desejemos partilhar uma senha s entre n pessoas, de modo
que a cada pessoa seja dado um elemento (uma parte) da senha. Esse elemento
é tal que é escolhido de um conjunto S de n pares de inteiros positivos de modo
que, para um inteiro positivo k ≤ n previamente escolhido temos:
N >s>M
42
Suponhamos que sejan conhecidos, em um dado momento, t elementos, ≥ k.
Denotaremos esses pares por (m1 , s1 ), . . . , (mt , st ). Vamos resolver o sistema de
congruências:
x ≡ s1 (mod m1 )
x ≡ s2 (mod m2 )
...
x ≡ st (mod mt )
obtendo x0 como solução. Pelo teorema chinês do resto,
x0 ≡ s (mod m1 . . . . .mt )
m1 . . . . .mt ≥ N > s
Pelo teorema chinês do resto, o sistema acima tem uma única solução menor
que m1 . . . . .mt . Mas s também é solução do sistema e s < m1 . . . . .mt . Logo
s = x0 .
Observações:
S = {(11, 19), (13, 17), (17, 13), (19, 11), (23, 7)}
Se os funcionários que possuem as senhas (17, 13) e (23, 7) estão no banco, para
obter a senha é preciso resolver o sistema
x ≡ 13 (mod 17)
x ≡ 7 (mod 23)
A solução é x = 30 + 391k...
1,2,4
43
15 Lógica e ciência da computação
15.1 Motivação
• Afirmativas são verdadeiras ou falsas, onde falso é a mesma coisa que não
verdadeiro.
44
Existem dois números irracionais x e y tais que xy é racional.
Existem sete 7s consecutivos na representação decimal do número
π.
• É claro que a proposição { maior tem valor 1} deve deixar de ser válida
no estado 2, enquanto que a proposição { maior tem valor 2}, que não
era válida no estado 1, passa a valer no estado 2.
• Esse tipo de comportamento não pode ser descrito em lógicas clássica ou
intuicionista, apenas em lógica linear.
45
15.6 Linguagens lógicas de programação - λ-Prolog
• As fórmulas de primeira ordem de Harrop estendem as cláusulas de Horn,
uma vez que admitem implicações e quantificadores universais no gol:
G ::= A|G ∧ G|P ⊃ G|∀xG
D ::= A|G ⊃ A|∀xD
• Deste modo, o programa pode crescer ao longo da prova (modularização) e
novas constantes podem ser adicionadas ao programa (abstract datatypes)
• Desvantagem: recursos ilimitados para construção de provas.
46
17 Semântica
Tradicionalmente, linguagens de computadores têm sido baseadas em uma seqüência
de comandos, determinados por sentenças imperativas. Em linguagem natural,
tais sentenças são aquelas que podem ser encontradas em um livro de receitas:
47
2. fornecer ferramentas para os designers de linguagens de programação, para
que possam sugerir linguagens melhores, confiáveis e com descrições for-
mais simples.
18 Semântica Denotacional
É a semântica que mapeia construtores sintáticos de programas em valores ab-
stratos (números, funções, etc) que eles denotam. Esses “mapeamentos” são
usualmente definidos recursivamente (como no cado do while acima). É claro
que alguns cuidados devem ser tomados quando trabalhamos com funções re-
cursivas. Em especial, para “modelar” o espaço de todas as funções recursi-
vas precisarı́amos de um conjunto X que contivesse todo o espaço de funções
X −→ X. Por questões de cardinalidade, sabemos que isso é impossı́vel. Para
lidar com essa dificuldade, foi proposto, em 1969, um modelo para funções re-
cursivas X −→ X restritas a funções contı́nuas em X (de acordo com uma certa
topologia).
Esse modelo, chamado de teoria de domı́nio, é utilizado para descrever a semântica
denotacional do λ-calculus, base de linguagens de programação funcionais. E,
utilizando o λ-calculus, podemos facilmente descrever a semântica denotacional
de linguagens como o Algol60, base do Pascal.
Outro tipo de semântica que tem sido muito estudada é a semântica categórica.
As idéias básicas desse tópico (muito em moda atualmente) são elegantes e de
fácil entendimento para um aluno da graduação com alguma maturidade na
área de Álgebra.
1. A chave pública (n) criada no TP1, juntamente com o número e tal que
mdc(e, φ(n)) = 1.
48
4. Teste em um texto de, no mı́nimo, 20 linhas. O texto, os blocos e o texto
cifrado deverão estar contidos no trabalho.
49