Date: 1 de março de 2007.
Números Inteiros
Notação 1. Denotamos por ℤ o conjunto dos números inteiros. Temos as funções (operações) +, ⋅ : ℤ × ℤ → ℤ tais que valem as seguinte propriedades:
Exercício 1. Prove a partir das propriedades acima
Exercício 2 (módulo ou valor absoluto) . Definimos ∀a ∈ ℤ |a| = a se a ≥ 0 e |a| = −a caso contrário. Prove que para a,b ∈ ℤ:
Notação 2. Denotamos por ℤ+ o conjunto dos números inteiros positivos, i.e., inteiros maiores que 0. Os inteiros menores ou iguais a 0 são ditos não-positivos. Analogamente, definimos os inteiros negativos e os inteiros não-negativos.
Assumimos que os inteiros são representados numa base b ∈ ℤ+, b > 1. Assim o tamanho da representação de n é + 1.
Se, e.g., um algoritmo que recebe como entrada inteiros n1,n2,…,nk é de tempo polinomial no pior caso se a complexidade de tempo desse algoritmo é expressa por um polinômio em ,,…,.
Exemplo 1. Para os algoritmos aprendidos na escola:
Observação 1. Para a notação assintótica, uma entrada grande significa que a grandeza dos números da entrada é grande, ao contrário de ordenação, por exemplo, onde uma entrada grande significa uma entrada com muitos números para serem ordenados.
Sejam a,b ∈ ℤ.
Nesse caso, dizemos que b é um divisor de a, que c é o quociente e que a é múltiplo de b.
Demonstração. Se ba e a≠0 então |a| = |b||c| > |b|. ♦
Definição 5 (elemento mínimo). Seja S ⊂ ℤ. Dizemos que m ∈ S é um elemento mínimo de S se m ≤ a ∀a ∈ S.
Teorema (Teorema da Divisão). Para todo inteiro a e todo inteiro positivo b existe um único inteiro q e existe um único inteiro r com 0 ≤ r < b tal que
| (1) |
Demonstração. Em dois casos:
1)a ≥ 0: Defina o conjunto
| (2) |
Como a ≥ 0 temos a ∈ S (x = 0), portanto S≠∅.
Tome r = minS, que existe pelo Princípio da Boa-Ordem.
r ∈ S implica que ∃q ∈ ℤ tal que em r = a − bq ≥ 0, pela definição de S.
Resta mostrar que r < b. Suponha que r ≥ b; então r −b = a−bq −b = a−b(q + 1) ≥ 0, portanto a − b(q + 1) ∈ S, mas r − b < r contrariando o fato de r ser elemento mínimo.
Note que se a = bq′ + (r + k) então k ≥ b.
2)a < 0: pelo caso 1, temos que existem únicos inteiros q e r tais que |a| = bq + r e 0 ≤ r < b.
Se r = 0 então −|a| = a = b(−q) + r, senão −|a| = (−q)b − r = (−q − 1)b + (b − r) e 0 ≤ b − r < b. ♦
Exercício 4. Escreva um algoritmo Int_Div(a,b) que devolve q e r como no teorema acima, de complexidade O(log(a)log(b)).
Exercício 5 (Teorema da Divisão). Prove o teorema 1.1 para b≠0: Para todo inteiro a e todo inteiro não-nulo b existe um único inteiro q e existe um único inteiro r com 0 ≤ r < |b| tal que a = bq + r.
| (4) |
e que para r e s inteiros e distintos, 0 ≤ r,s ≤ b − 1
| (5) |
Portanto, é uma partição dos inteiros.
Exercício 7. Mostre que a relação definida por
| (6) |
se e somente se m ∈ [n]b para todos m,n ∈ ℤ, é uma relação de equivalência.
Para inteiros a e b temos 1 ∈ D(a) ∩ D(b) e se ambos não são nulos temos para todo m ∈ D(a) ∩ D(b) que m ≤ max{|a|,|b|} pela proposição 1, portanto está definido maxD(a) ∩ D(b) para quaisquer a,b ∈ ℤ (justifique).
Demonstração. O caso a = b = 0 é trivial. Vamos supor que a≠0.
Primeiro, vamos mostrar que aℤ + bℤ = dℤ para algum d ∈ ℤ; em seguida, que d = mdc(a,b).
Como (aℤ + bℤ) ∩ ℤ+≠∅ (justifique) podemos aplicar o Princípio da Boa Ordem (PBO) e tomar d o menor elemento positivo de aℤ + bℤ.
| (12) |
Claramente dℤ ⊆ aℤ + bℤ. Vamos mostrar que dℤ ⊇ aℤ + bℤ.
Tome um elemento c de aℤ + bℤ; existem inteiros x1 e y1 tais que c = ax1 + by1. Pelo Teorema da Divisão existem inteiros q e r tais que c = dq + r, onde 0 ≤ r < d, e
| (13) |
como 0 ≤ r < d e d é mínimo deduzimos que r = 0. Portanto c = dq ∈ dℤ.
Resta mostrar que d = mdc(a,b).
Do resultado acima temos que existem inteiros x e y tais que a = dx e b = dy, portanto, d ∈ D(a) ∩ D(b) por definição, logo d ≤ mdc(a,b). Por outro lado, existem inteiros m e n tais que d = am + bn portanto mdc(a,b)d (exerc. 3 (5)). Da proposição 1 mdc(a,b) ≤ d, logo, mdc(a,b) = d. ♦
Corolário 4. Dados inteiros a, b e n a equação ax+by = n admite solução inteira se e somente se mdc(a,b)n.
Corolário 6. Para quaisquer inteiros a e b existe um único inteiro positivo d tal que da e db e para todo inteiro positivo c, se ca e cb então cd. Ainda d = mdc(a,b).
Exercício 8. Determine se é verdadeiro ou falso as igualdades ∀a,b,c ∈ ℤ:
Exercício 9. (Teorema de Euclides) Sejam a,b,c ∈ ℤ tais que abc. Prove que se mdc(a,b) = 1 então ac.
O seguinte algoritmo é conhecido como Algoritmo de Euclides (circa 300 aC). Ele determina o mdc de dois inteiros quaisquer. De saída, usamos o exercício 8 item (8), mdc(a,b) = mdc(|a|,|b|) para fazer as contas nos inteiros não-negativos.
O algoritmo termina pois 0 ≤ a modb < b, pelo Teorema da Divisão, logo o valor da variável b decresce estritamente a cada iteração.
Exemplo 3. Nas tabelas abaixo cada linha mostra o valor das variáveis em cada rodada.
|
|
|
|
Note que se a < b então na primeira chamada teremos a ← b e b ← a, também note que mdc(a,0) = |a|, ∀a ∈ ℤ. Portanto, para provar a correção e a complexidade do algoritmo de Euclides, podemos assumir que a > b > 0.
É fácil deduzir que o Algoritmo de Euclides funciona corretamente do resultado abaixo.
Demonstração. Do Teorema da Divisão a modb = a − bq para algum q ∈ ℤ. Portanto (exerc. 3 item (5)) da e db ⇒ d|b e da modb.
Por outro lado, se db e da modb então (exerc. 3 item (5)) dbq + (a modb), ou seja, da. Portanto db e da modb ⇒ da e db. Logo vale (14). ♦
Demonstração. Faça d = mdc(a,b). Temos que da e db, portanto, db e da modb. Pelo corolário 6 do teorema 1.2 temos dmdc(b,a modb).
Agora, faça d = mdc(b,a modb). Pelo teorema acima temos que da e db, portanto, dmdc(a,b), pelo corolário 6 do teorema 1.2.
Pelo corolário 5 da proposição 1 mdc(a,b) = mdc(b,a modb). ♦
Teorema. Se a ≥ b > 1, então o número de chamadas recursivas no Algoritmo de Euclides é no máximo 2lg(b).
Demonstração. Tome r = a modb. Vejamos que r < a∕2.
Se b ≤ a∕2 então a afirmação segue do Teorema da Divisão. Se b > a∕2 então o Teorema da Divisão nos dá a = b ⋅ 1 + (a − b), assim r = a − b < a∕2.
Assim, após 2 chamadas consecutivas a grandeza da entrada cai pela metade
| (15) |
com r < a∕2 e r′ < b∕2. Após 2t passos teremos que a entrada é limitada por (a∕2t,b∕2t). Logo, com 2lg b passos o algoritmo terminou. ♦
Corolário. O número de operações no pior caso do Algoritmo de Euclides com dois números de tamanho n é O(n3).
Demonstração. Pelo teorema são O(n) divisões, cada uma com custo O(n2). ♦
No que segue, fk é o k-ésimo número de Fibonacci, definido por f1 = 1, f2 = 1 e fk = fk−1 + fk−2, ∀k ≥ 3.
Exercício 11 (Pior caso do Algoritmo de Euclides). Mostre que o algoritmo de Euclides com entradas fk+2 e fk+1 executa k chamadas recursivas. Prove o seguinte
Teorema (Teorema de Lamé). Se (a,b) é o menor par de inteiros positivos que fazem a algoritmo de Euclides executar k chamadas recursivas então (a,b) = (fk+1,fk+2).
Observação 4. Considerando os exercícios acima, a estimativa 2lg b do teorema é superestimada em menos que 40% pois
| (16) |
pois fk = {[(1 + )∕2]k − [(1 −)∕2]k}.
Observação 5. Uma análise mais cuidadosa1 permite concluir que o custo do algoritmo é O(log(a)log(b)).
1.3.1. Algoritmo de Euclides Estendido. O algoritmo a seguir é uma extensão do algoritmo de Euclides.
Considere uma execução do algoritmo acima com entradas 99 e 78.
a | b | x | y | d | |
99 | 78 | 1 | −11 | 14 | 3 |
78 | 21 | 3 | 3 | −11 | 3 |
21 | 15 | 1 | −2 | 3 | 3 |
15 | 6 | 2 | 1 | −2 | 3 |
6 | 3 | 2 | 0 | 1 | 3 |
3 | 0 | − | 1 | 0 | 3 |
Observação 6. O número de chamadas recursivas do algoritmo estendido é o mesmo que no Algoritmo de Euclides.
Exercício 12 (Correção do algoritmo estendido). Prove que o algoritmo 2 funciona corretamente.
Para isso, suponha que (d′,x′,y′) são os valores atribuídos na linha 2.
| (17) |
A prova segue por indução.
Exercício 13 (Complexidade do algoritmo estendido). Prove que a complexidade do algoritmo 2 é O(log(a)log(b)).
Exercício 14. Escreva uma versão do algoritmo 2 para quaisquer inteiros.
Definição 12 (número primo). Um número inteiro p é primo se tem exatamente dois divisores positivos: 1 e |p|.
Definição 13 (divisor próprio). Todo divisor b de a com 1 < |b| < |a| é chamado de divisor próprio de a.
Observação 7. Decorre das definições acima que os inteiros −1, 0 e 1 não são primos nem compostos, todo outro inteiro ou é primo ou é composto.
O Problema da Primalidade pode ser resolvido em tempo polinomial. Em 2002 os indianos M. Agrawal, N. Kayal, e N. Saxena mostraram2 um algoritmo que determina se n é primo em tempo O(log 12+εn). Esse algoritmo foge do escopo da disciplina.
Veremos algoritmos probabilísticos (devolve composto ou provavelmente primo) que são extremamente simples (envolvem conceitos que aparecerão adiante) e úteis como o teste de Miller–Rabin, de complexidade O(k × log 3n), onde k é o número de rodadas do teste. Para k = 100 a probabilidade do algoritmo devolver provável primo todas as vezes quando a entrada é composto é menor que 10−30.
Observação 8. 10−30 é um número muito pequeno, por exemplo, na teoria do Big-Bang é estimado que o universo tem 4.3 × 1017 segundos de idade, o universo observável (7.4 × 1026 metros) contém aproximadamente 1080 átomos.
Demonstração. De fato, ou a é primo (e a proposição vale nesse caso) ou a tem um divisor d, 1 < d < a. Considere m o menor desses divisores (PBO). m deve ser primo, caso contrário m teria um divisor próprio que, pelo exercício 3 item (2), divide a contrariando a minimalidade de m. ♦
Demonstração. Por indução em a. Se a = 2 o lema vale porque 2 é primo. Dado a > 2 suponha que o lema vale para todo inteiro entre 2 e a − 1, inclusive.
Pela proposição acima, a = pq com p primo; ou q = 1 (e o lema vale nesse caso) ou 2 ≤ q < a e pela hipótese de indução q = p1p2pn, portanto, a = pp2pn, o que prova o lema. ♦
Demonstração. Sejam p,a,b inteiros tais que pab. Se pa então o lema vale, senão mdc(a,p) = 1 e pelo exercício 9 temos pb. ♦
Exercício 16. Prove a seguinte generalização do lema acima: Se um primo p divide a1a2…an então pai para algum i.
Teorema (Teorema Fundamental da Aritmética). Todo inteiro positivo pode ser escrito como produto de fatores primos, e essa fatoração é única a menos da ordem dos fatores primos.
Demonstração. Suponha que existam inteiros positivos com mais de uma fatoração em primos e tome a o menor deles. Digamos que
| (19) |
Pela definição de número primo, n = 1 ⇔ m = 1. Podemos assumir n,m ≥ 2. Assim p1q1q2qm e pelo exercício anterior p1qi para algum i e como qi é primo temos p1 = qi. Pela propriedade cancelativa do inteiros (página 2) temos
| (20) |
contrariando a minimalidade de a. ♦
Definição 15 (fatoração). A fatoração de um número inteiro a é a representação de |a| como um produto de primos. Escrevemos a fatoração agrupando os fatores iguais
| (21) |
com p1 < p2 < pn. O expoente mi é dito multiplicidade de pi.
Não se conhece algoritmo eficiente para esse problema.
Definição 16 (primos relativos, coprimos). Dois inteiros a e b são primos relativos, ou coprimos se mdc(a,b) = 1.
Exercício 18. (Crivo de Eratóstenes) Prove que o seguinte algoritmo determina todos os números primos até n
Teorema. Existem infinitos números primos.
Demonstração. Vamos mostrar que para todo inteiro positivo n existe um primo maior que n. Para tal, tome p um fator primo de n! + 1.
Se p ≤ n então pn! por definição de fatorial. Se p divide n! e n! + 1 então p divide a diferença desses números (exerc. 3 item (5)), i.e., p|1, portanto |p| = 1 (corolário 3), um absurdo. Assim, p > n. ♦
Os números de Fermat são definidos por para todo inteiro n ≥ 0. Em 1640 Fermat mostrou que Fn é primo para n ∈{0,1,2,3,4} e conjeturou que esses números eram primos até que em 1732 Euler mostrou que F5 é composto. A seguinte tabela3 mostra para quais valores de n as fatorações são conhecidas até o momento, mostra também o número de dígitos de Fn, quantos fatores primos e o número de dígitos desses fatores.
n | dígitos | fatores | dígitos dos fatores | Autores |
5 | 10 | 2 | 3, 7 | Euler 1732 |
6 | 20 | 2 | 6, 14 | Landry 1880 |
7 | 39 | 2 | 17, 22 | Morrison e Brillhart 1975 |
8 | 78 | 2 | 16, 62 | Brent e Pollard 1981 |
9 | 155 | 3 | 7, 49, 99 | Manasse e Lenstra 1993 |
10 | 309 | 4 | 8, 10, 40, 252 | Brent 1995 |
11 | 617 | 5 | 6, 6, 21, 22, 564 | Brent 1988 |
Para alguns outros números de Fermat são conhecidos alguns fatores, mas a fatoração completa ainda não é conhecida. Por exemplo, sabe-se que F12 tem 5 fatores primos mais um fator composto de 1187 dígitos. O F14 é o atual primeiro número de Fermat que é sabido ser composto mas que nenhum dos seus fatores é conhecido.4
Édouard Lucas, um matemático francês, provou que os fatores primos de um número de Fermat são da forma k2n + 1. Em 1857, aos 15 anos, Lucas começou a testar a primalidade de 2127 − 1 à mão, usando os números de Lucas. Em 1876, após 19 anos de trabalho, provou que 2127 − 1 é primo.
Exercício. Complete o seguinte argumento para dar uma prova da infinitude de números primos: Os números de Fermat satisfazem a recursão ∏ i=0n−1Fi = Fn−2 para todo n ≥ 1 (prove). Se m divide Fi e Fn para i < n então m2 (prove). Os números de Fermat são ímpares, portanto m = 1, i.e., quaisquer dois números de Fermat têm máximo divisor comum igual a 1. Assim, existem infinitos números primos (prove).
Aritmética modular
Lembrando o exercício 7, dado n ∈ ℤ+ a relação ≡ (mod n) definida para quaisquer a,b ∈ ℤ por
| (22) |
é uma relação de equivalência sobre ℤ, ou seja, para inteiros a,b,c valem
Proposição 11. Sejam n > 0 um inteiro fixo. Para quaisquer a,b,c,d inteiros valem as seguintes propriedades:
Demonstração. Se a = nq + b então a + c = nq + b + c, portanto a + c ∈ nℤ + b + c. Isso prova (1).
Se a + c = nq + b + c então a = nq + b, portanto a ∈ nℤ + b. Isso prova (2).
Se a = nq+b e c = np+d então ac = n(npq+qd+pb)+bd, portanto ac ∈ nℤ+bd. Isso prova (3). ♦
Note que o item (2) corresponde a propriedade cancelativa dos inteiros, entretanto, não vale a versão multiplicativa dessa propriedade, ou seja, para c ⁄≡ 0 (mod n)
| (23) |
por exemplo, 5 ⋅ 3 ≡ 3 ⋅ 3 (mod 6) mas 3 ⁄≡ 5 (mod 6).
Demonstração. De ac = nq + bc temos que (a − b)c = nq, portanto cnq. De mdc(c,n) = 1 temos, pelo Teorema de Euclides (exerc. 9) que cq, portanto, existe z ∈ ℤ tal que cz = q. Assim, ac = nzc + bc e a proposição segue da propriedade cancelativa dos inteiros. ♦
Exercício 22. Mostre que se p > 1 é primo então
| (25) |
Dê exemplos onde a implicação falha no caso de p não ser primo.
Exemplo 4. Vamos determinar o resta da divisão de 560 por 26.
Mas 52 ≡−1 (mod 26), portanto 54 ≡ 1 (mod 26). De 560 = 5415 temos 560 ≡ 1 (mod 26).
Exemplo 5 (divisibilidade por 3). Dado n ∈ ℤ+, n = dt−1 ⋅ 10t−1 + dt−2 ⋅ 10t−2 + + d1 ⋅ 10 + d0 com di ∈.
De 10 ≡ 1 (mod 3) temos que 10m ≡ 1 (mod 3), portanto, d⋅10m ≡ d (mod 3). Logo n ≡∑ idi (mod 3).
Exemplo 6 (divisibilidade por 11). Seja n como acima. De 10 ≡ −1 (mod 11) temos que 10m ≡ (−1)m (mod 11), portanto n ≡ d0−d1+d2−±dt−1 (mod 11).
Exemplo 7 (divisibilidade por 7). Para congruências módulo 7 temos 10 ≡ 3 (mod 7), 102 ≡ 2 (mod 7), 103 ≡ −1 (mod 7) , 104 ≡ −3 (mod 7), 105 ≡ −2 (mod 7), 106 ≡ 1 (mod 7) e daqui em diante os restos se repetem.
Assim, n é divisível por 7 se d0 + 3d1 + 2d2 −d3 − 3d4 − 2d5 + d6 + 3d7 + 2d8 − d9 − 3d10 for divisível por 7.
Exemplo 8 (F5 é composto). F5 = 225 + 1 = 232 + 1. Dividindo 216 = 65.536 por 641 temos resto 154 e 1542 ≡ 640 (mod 641), logo 232 ≡ 640 (mod 641), portanto 641232 + 1.
Exercício 24. Use o exercício acima e o teorema binomial de Newton para provar que
| (26) |
para quaisquer inteiros a e b.
Exercício 26. Prove o resultado do exercício acima usando a seguinte estratégia: Imagine números escritos na base n, com no máximo p dígitos. Ponha dois números na mesma caixa se eles resultam um do outro de um deslocamento cíclico. Quantos estarão em cada caixa?
3.1. Pequeno Teorema de Fermat.
Seja a ∈ ℤ e p um primo que não divide a. Então
| (28) |
Demonstração. Considere os múltiplos de a
| (29) |
Se dois deles são congruentes módulo p, digamos mr ≡ ms (mod p) com 1 ≤ r < s ≤ (p − 1), então r ≡ s (mod p), pois mdc(a,p) = 1 e vale a lei cancelativa (propo. 12), mas isso é um absurdo.
Se, para algum 0 < r < p ocorrer mr ≡ 0 (mod p) então pr pois mdc(a,p) = 1 (lema 10), o que é um absurdo.
Assim, m1,m2,…,mp−1 devem ser congruentes a 1,2,…,p − 1 em alguma ordem. Logo
| (30) |
Como p ⁄1 ⋅ 2(p − 1) devemos ter p(ap−1 − 1) (propo. 12), isto é, ap−1 ≡ 1 (mod p). ♦
Antes de explorarmos as possíveis aplicações do teorema de Fermat, devemos notar que computar 2n−1 é extremamente custoso quando n é grande, digamos que com 100 dígitos; isso daria cerca de 10100 passos o que é impossível de realizar. Em geral ab avaliado por multiplicações repetidas custa Ω(b(log a)2).
Um jeito mais esperto é “elevar ao quadrado” repetidas vezes, por exemplo, para calcular 224 podemos começar com 23 = 8, elevá-lo ao quadrado, o que resulta 26 = 62, elevá-lo ao quadrado, o que resulta 212 = 4.096, e elevá-lo ao quadrado, o que resulta 224 = 16.777.216. Outro exemplo, para calcular 229 com esse método de trás pra frente teríamos 229 = 2 ⋅ 228, a raiz de 228 é 214 cuja raiz é 27 que é 2 ⋅ 26 que por sua vez é 22 ⋅ 23. Assim, se n é representado com k bits então 2n é calculado usando menos que 2k multiplicações.
A segunda dificuldade é o tamanho que esses números podem assumir. Nesse caso, se queremos verificar divisão por n então podemos tomar o resto da divisão por n sempre que uma operação resulta num número maior que n. Por exemplo, para verificar se 25224 − 1 começamos como acima, 23 = 8 que ao quadrado resulta 26 = 64 e 64 mod25 = 14, elevando ao quadrado temos 212 e 142 = 196, como 196 mod25 = 21 no próximo passo obtemos 224 por um lado e 212 = 441 pelo outro; 441 mod25 = 16 e como 25 ⁄16 − 1 deduzimos que 25 não é primo.
Resumindo, ab é avaliado com base na observação de que
| (32) |
Exercício 27. Provar no algoritmo acima O(log b) quadrados são executados, ∑ ibi multiplicações por a são executadas, onde bk…b1b0 é a representação binária de b e que a complexidade é O((log b)(log a)2).
O seguinte algoritmo é uma versão iterativa do algoritmo acima. Seja bkbk−1…b1b0 a representação binária de b, b = ∑ i=0kbi2i, e defina
Portanto, ck+1 = bk2k + + b12 + b0 = b e dk+1 = ab modn.
Exemplo 9. Vamos usar essa estratégia para calcular 224 mod25. Primeiro, 24 em base 2 fica b = 11000.
i | 1 | 2 | 3 | 4 | 5 |
b i | 1 | 1 | 0 | 0 | 0 |
ci | 1 | 3 | 6 | 12 | 24 |
di | 2 | 8 | 14 | 21 | 16 |
Portanto 224 ≡ 16 (mod 25).
Finalmente, o algoritmo baseado nessa idéia é escrito do seguinte modo.
Para provar que esse algoritmo funciona usamos a técnica do invariante do laço: imediatamente antes de cada iteração do for na linha 4 valem
Inicialmente, antes da primeira rodada, o prefixo é vazio e d = 1 = a0 modn.
Sejam c′ e d′ os valores de c e d ao final de uma iteração, portanto antes da próxima iteração. Então c′← 2c caso bi = 0 ou c′← 2c + 1 caso bi = 1 de modo que c estará correto antes da próxima iteração. Se bi = 0 então d′ = d2 modn = (ac)2 modn = ac′ modn. Se bi = 1 então d′ = d2a modn = (ac)2a modn = ac′ modn. Em ambos os casos d = ac modn antes da próxima iteração.
Para verificar o término, ao final temos i = −1, assim c = b e d = ac modn = ab modn.
Dados inteiros a,b,n, n > 0, vamos estudar as soluções de
| (33) |
Existe inteiro x tal que ax ≡ b (mod n) se, e somente se, existe y ∈ ℤ tal que ax + ny = b. Pelo teorema 1.2, aℤ + nℤ = mdc(a,n)ℤ, portanto, ax + ny = b tem solução se e só se b ∈ mdc(a,n)ℤ.
Tome d = mdc(a,n) e b1 tal que b = b1d. Pelo teorema de Bézout existem r,s ∈ ℤ tais que d = ar + ns, portanto ar ≡ d (mod n).
Note que x0 = rb1 é uma solução da equação (33) pois
Agora suponha que x seja uma solução de (33) e seja y ∈ ℤ tal que ax + ny = b. Para x0 = rb1 e y0 = sb1 vale ax0 + ny0 = b (verifique). Logo ax + ny = ax0 + ny0, donde
| (34) |
e dividindo essa equação por d obtemos a1(x − x0) = n1(y0 − y), onde a1d = a e n1d = n. Agora, n1a1(x−x0) e mdc(a1,n1) = 1, portanto, n1(x−x0), ou seja, existe t ∈ ℤ tal que x − x0 = tn1, portanto
| (35) |
Substituindo em (34)
| (36) |
Conseqüentemente, todas as soluções da congruência são da forma
| (37) |
Teorema. Dados inteiros a,n, n > 0, d = mdc(a,n) e b um múltiplo de d; escrevendo d = ar + ns e b = db1 a equação aX ≡ b (mod n) tem d soluções distintas módulo n, dadas por
| (38) |
Ademais, qualquer outra solução é congruente a alguma dessas soluções.
Demonstração. Pela proposição 13 e pelo exercício 29 resta mostrar que se x ∈ ℤ é solução então x ≡ xh (mod n) para algum h ∈. Mas x é solução, portanto, x = rb1 + t para algum t ∈ ℤ.
Pelo teorema da divisão t = dq + r e substituindo em x temos
| (39) |
portanto, x modn = rb1 + nq + r modn = rb1 + r modn e como 0 ≤ r < d o teorema segue. ♦
Corolário 15 (Inverso multiplicativo). Para n > 1, aX ≡ 1 (mod n) tem solução se e somente se mdc(a,n) = 1. A única solução é denotada por a−1 modn.
As soluções de (33) podem ser computadas eficientemente, assim como o inverso multiplicativo, quando esses existem.
Esse algoritmo realiza O(log n + mdc(a,n)) operações aritméticas.
Exercício. Mostre que o inverso multiplicativo de a módulo n pode ser encontrado em tempo O(log(a)log(n)), para todo n > 1 e a tal que mdc(a,n) = 1.
Exercício 31. Sejam a,n ∈ ℤ, b ∈ dℤ onde d = mdc(a,n), e r,s ∈ ℤ tais que d = ar + ns. Escreva a = a1d, b = b1d e n = n1d. Prove que as equações
| (40) |
têm as mesmas soluções.
Teorema (Teorema chinês do resto5 ). Sejam n1,n2,…,nk inteiros maiores que 1 e tais que mdc(ni,nj) = 1 para todos i≠j, e sejam c1,…,ck inteiros arbitrários. Então o sistema
| (41) |
tem uma solução módulo n = n1n2nk.
Demonstração. Escrevemos n = Nini e temos mdc(Ni,ni) = 1. Sejam ri,si ∈ ℤ tais que riNi + sini = 1, para todo i ∈.
Tomamos x0 = ∑ i=1kciriNi vamos mostrar que é solução. Primeiro Ni ≡ 0 (mod nj) ∀i≠j, logo
| (42) |
Ainda, de Njrj + njsj = 1 temos Njrj ≡ 1 (mod nj) (∀j), logo x0 ≡ cjrjNj ≡ cj (mod nj) (∀j).
Agora vamos mostrar que a solução é única módulo n. Assuma que para x ∈ ℤ vale x ≡ ci (mod ni) para todo i. Então x ≡ x0 (mod ni) (∀i) donde ni(x − x0) (∀i), logo n(x − x0) (justifique), ou seja x ≡ x0 (mod n). ♦
Exemplo 10. Considere o sistema
i | ri | si |
1 | 1 | −10 |
2 | −1 | 3 |
3 | −1 | 7 |
e x0 = 2 ⋅ 1 ⋅ 21 + (−1)(−1)14 + 4(−1)6 = 32. Ainda, toda solução inteira é da forma 32 + 42t, t ∈ ℤ.
Exercício 32. Sejam n1,n2,…,nk inteiros positivos, e sejam a1,…,ak e b1,…,bk inteiros arbitrários tais que mdc(ai,ni)bi para todo i. Prove que o sistema
| (43) |
tem solução.
Exercício 33. Mostre que as soluções do exemplo 10 são soluções do sistema
Exemplo 11 (Partilha de senhas). O problema e dados inteiros n > k ≥ 1 determinar uma estratégia para que n pessoas partilhem uma senha s ∈ ℤ sem conhece-la de modo que
A idéia e tomar uma lista L = números inteiros tais que mdc(mi,mj) = 1 para todo i≠j e é possível escolher s
| (44) |
onde N = m1m2mk e M = mn−k+2mn−k+3mn.
Note que o produto de quaisquer k números de L é maior que N, o produto de menos que k é menor que M e s > m para todo m ∈ L. Cada pessoa recebe um par (m,sm) com m ∈ L e sm = s modm. Note que s > sm.
Em um grupo de t pessoas temos o sistema
| (45) |
cuja solução x0 ≡ s (mod m1m2mt). Agora,
| (46) |
e podemos escolher os módulos de modo que esse intervalo seja muito grande, o que torna a busca por y inviável.
Exercício 35. Num teatro duas tropas se enfrentam numa cena de batalha. Uma tropa tem 100 mosquetes e depois de atirar tantos tiros quanto possíveis lhes sobraram 13 cartuchos. A outra tropa tem 67 mosquetes e ao fim lhes restam 32 cartuchos. Supondo que a cada salva de tiros cada soldado atirou apenas uma vez determine o número mínimo de cartuchos de cada tropa no início da apresentação.
Exercício 36. Resolva X2 + 42X + 21 ≡ 0 (mod 105). Dica: fatore 105 e resolva a equação para módulo cada fator e use o teorema chinês do resto.
Exercício 37. A teoria do Biorritmo diz que os estados físico, mental e emocional de uma pessoa oscilam periodicamente, a partir do dia do nascimento, em ciclos de 23, 29 e 33 dias, respectivamente. Dado que os dias mais positivos dos ciclos físico, mental e emocional são, respectivamente, o 6o, o 7o e o 8o dias de cada ciclo, quantas vezes os três ciclos estão simultaneamente no ponto máximo nos primeiros 10 anos de vida?
Exercício 38. Mostre que nas condições do teorema chinês do resto uma solução pode ser computada em tempo O(log 2n). Dica: use as fórmulas da prova do teorema e mostre que o produto de k inteiros pode ser feita em tempo O(log 2n) sem assumir que k é constante. Mostre que dados n1,…,nk, z e n = ∏ ini os inteiros z modni podem ser calculados em tempo O(log 2n).
Exercício 39 (Teorema Chinês do resto generalizado). Sejam n1,n2,…,nk inteiros maiores que 1 e sejam c1,…,ck inteiros arbitrários. Então o sistema
| (47) |
tem solução se e somente se ci ≡ cj (mod mdc(ni,nj)) para todo i≠j. Caso exista, a solução é única módulo mmc(n1,n2,…,nk).
Exercício 40. Prove que no caso do exercício anterior a existência pode ser decidida em tempo O(log 2n) e, caso exista, a única solução modular pode ser determinada em tempo O(log 2n), onde n = n1n2nk.
Definição 17 (sistema completo de resíduos). S ⊂ ℤ é um sistema completo de resíduos módulo n se para todo a ∈ ℤ existe um b ∈ S tal que a ≡ b (mod n).
Exemplo 12 (sistema de completo de resíduos mod5). Alguns sistemas completos de resíduos módulo 5 são os conjuntos:
Fixe um natural n > 1. Retomando a definição 8 e o exercício 6, pág. 9 temos [a]n = [b]n se e somente se a ≡ b (mod n) e, ainda, se [a]n≠[b]n então [a]n ∩ [b]n = ∅. Cada elemento de uma classe [ ]n é um representante da classe, por exemplo, −2 e 10 são representantes da classe [4]6. Como dois inteiros representam a mesma classe de resíduo módulo n se e somente se tem o mesmo resto na divisão por n o número de classes é n − 1.
Definição 18 (forma reduzida). Uma classe representada na forma [a]n com 0 ≤ a < n dizemos que ela está no forma reduzida.
Definição 19 (ℤn). Dado n > 1 inteiro
| (48) |
é o conjunto dos inteiros módulo n. Em geral, se S é um sistema completo de resíduos módulo n
| (49) |
No ℤn introduzimos uma operação de soma e outra de multiplicação da seguinte forma
Exercício 41. Mostre que as operações definidas acima não dependem da escolha dos representante das classes.
Exercício 42. Mostre que nos inteiros módulo n valem as seguinte propriedades:
| (52) |
e [0]n é a única classe que satisfaz essa sentença.
| (53) |
[b]n é denotado por −[a]n.
| (54) |
e [1]n é a única classe que satisfaz essa sentença.
| (57) |
Definição 20 (divisor de zero). Para n > 1, um elemento não-nulo [a]n ∈ ℤn é um divisor de zero se existe [b]n ∈ ℤn não-nulo tal que [a]n[b]n = [0]n.
Demonstração. Se [a]n é um divisor do zero então [a]n[b]n = [ab]n = [0]n para algum [b]n ∈ ℤn não-nulo, ou seja, nab. Se mdc(a,n) = 1 então nb pelo teorema de Euclides (exerc. 9) e nesse caso [b]n = [0]n, contradição.
Se mdc(a,n) = d > 1 então dx = a e dy = n para algum x ∈ ℤ e algum y ∈ ℤ. Assim, ay = dxy = nx portanto [ay]n = [0]n e como y < n temos que [y]n é não-nulo, ou seja, [a]n é divisor do zero. ♦
Corolário. Se p > 1 é primo então ℤp não contém divisores de zero.♦
Demonstração. O se é o corolário anterior, vamos provar o somente se. Suponha que ℤn não contém divisores do zero. Se n for composto então existe d, divisor próprio de n, tal que n = dp com 1 < d,p < n. Assim [d]n[p]n = [0]n com [d]n,[p]n≠[0]n contrariando o fato de não haver divisores de zero em ℤn. ♦
Demonstração. Se n é primo então ℤn não contém divisores do zero o que significa que se [a]n[c]n = [b]n[c]n e [c]n≠[0]n então ([a]n − [b]n)[c]n = [0]n e assim [a]n − [b]n = [0]n, ou seja, [a]n = [b]n.
Agora, se vale a cancelativa então de [a]n[c]n = [0]n e [c]n não-nulo tiramos que [a]n[c]n = [0]n[c]n implica [a]n = [0]n, ou seja, ℤn não tem divisores do zero e pelo resultado anterior n é primo. ♦
Definição 21 (elemento invertível do ℤn, inverso). Para n > 1, [a]n ∈ ℤn é invertível se existe [b]n ∈ ℤn tal que [a]n[b]n = [1]n. Nesse caso, [b]n é chamado inverso de [a]n
Demonstração. Se mdc(a,n) = 1 então pelo corolário 15 existe b ∈ ℤ tal que ab ≡ 1 (mod n) ou seja [ab]n = [1]n portanto [a]n é invertível.
Se mdc(a,n) = d > 1 então existe [b]n não-nulo tal que [a]n[b]n = [0]n (lema 16). Assim se [a]n for invertível, como inverso [c]n, temos
| (60) |
contrariando o fato de [b]n ser não-nulo. ♦
Corolário. Se p > 1 é primo então todo elemento não-nulo de ℤp é invertível.♦
Definição 22 (sistema completo de invertíveis módulo n). A ⊂ ℤ com mdc(b,n) = 1 para todo b ∈ A é um sistema completo de invertíveis módulo n se para todo a ∈ ℤ tal que mdc(a,n) = 1 existe um b ∈ A tal que a ≡ b (mod n).
Exercício 44. Prove que se mdc(a,n) = mdc(b,n) = 1 então mdc(ab,n) = 1 e conclua que o produto de duas classes de ℤn∗ é uma classe de ℤn∗.
Exercício 45 (Teorema Chinês do resto, versão 2). Se mdc(m,n) = 1 então a função
Usando o exercício 45 podemos concluir que se mdc(m,n) = 1 então φ(mn) = φ(m)φ(n) e, indutivamente, se mdc(ni,nj) = 1 para todo i≠j então (exerc. 44) φ(n1n2nk) = φ(n1)φ(n2)φ(nk).
Se p é primo então ℤp = logo φ(p) = p − 1. Ainda, para potências de primo temos φ(pk) = pk−1(p − 1) pois se pka então a = qp onde 0 ≤ q < pk−1, logo há pk−1 múltiplos de p.
Agora, se n = p1m1pkmk é a fatoração de n então
|
ou seja,
| (63) |
Exercício 46 (Prova alternativa de (63)). Sejam pi, 1 ≤ i ≤ k, o primos da fatoração de n e denote por Ai o conjunto dos múltiplos de pi menores ou iguais a n. Use o princípio de inclusão-exclusão para provar (63).
Demonstração. Tome A = um sistema completo de invertíveis módulo n e forme o conjunto A ⋅ a = . Como a é invertível
|
Também, temos que xia modn ∈ A pois mdc(xia,n) = 1 (exerc. 44) logo existe uma permutação π tal que xia ≡ xπ(i) (mod n), portanto,
|
e como mdc(x1x2xφ(n)) = 1 temos aφ(n) ≡ 1 (mod n). ♦
4.3. Computação com inteiros módulo n.
Operações importantes, principalmente em criptografia de chave pública. Quando se trata de computação com inteiros módulo n assumimos o ℤn com os representantes da classes na forma reduzida.
Teorema. Duas classes podem ser somadas e subtraídas em tempo O(log n) e multiplicadas e divididas em tempo O(log 2n).
Somar [a]n e [b]n é tomar a soma dos representantes c = a + b e se c ∈{0,1,…,n− 1}, então não há mais nada pra fazer, mas se n ≤ c < 2n então devolver c − n. Caso c = a − b e c ∈{0,1,…,n − 1} então devolver c, senão caso −n < c < 0 então o representante de [c]n é c + n. Isso pode ser feito em tempo O(log n).
Para computar [a]n ⋅ [b]n tomamos c = ab e em seguida c modn. Como o quociente da divisão é menor que n o custo total é O(log n).
Para determinar o inverso multiplicativo de [a]n executamos o algoritmo estendido de Euclides para o par (a,n) e obtemos d = mdc(a,n) e um inteiro x tal que ax ≡ d (mod n) e |x| < n (justifique); se d = 1 devolva x ou x + n (caso x seja negativo). O tempo total de computação é O(log 2n).
No que segue X é um conjunto e ⊕,⊙: X × X → X são duas operações binárias sobre X.
Definição 25 (semigrupo). (X,⊕) é um semigrupo se ⊕ é associativa. (X,⊕) é um semigrupo abeliano se ⊕é associativa e comutativa.
Definição 26 (monóide). Um semigrupo (X,⊕) é um monóide se admite elemento neutro, i.e., existe e ∈ X tal que a⊕e = e⊕a = a para todo a ∈ X. Analogamente ao semigrupo, define-se monóide abeliano.
Definição 27 (grupo). Um monóide (X,⊕) é um grupo se todo elemento tem inverso, i.e., para todo a ∈ X existe −a ∈ X tal que a ⊕ (−a) = (−a) ⊕ a = e. Analogamente ao monóide, define-se grupo abeliano.
Exemplo 15. (ℤ,+) é um grupo, (ℤ,⋅) não é um grupo, (ℤn,+) é um grupo, (ℤn,⋅) não é um grupo, (ℤn∗,⋅) é um grupo.
Definição 28 (anel). (X,⊕,⊙) é um anel se (X,⊕) é um grupo abeliano, (X,⊙) é um semigrupo e vale a distributiva: ∀x,y,z ∈ X
anel comutativo se o semigrupo é comutativo (abeliano).
Definição 29 (anel com unidade). (X,⊕,⊙) é um anel com unidade se (X,⊙) tem elemento neutro. No que segue denotamos o elemento neutro de ⊕ por 0 e denotamos o elemento neutro de ⊙ por 1.
Definição 30 (domínio de integridade). Um anel comutativo (X,⊕,⊙) é um domínio de integridade se não contém divisores do zero, i.e., se ab = 0 então a = 0 ou b = 0.
Exercício 47. Determine quais são as estruturas satisfeitas pelo ℤm com as operações + e ⋅, para cada m ≥ 2. Prove que (ℤp,+,⋅) é um corpo se e só se p > 1 é primo.
Seja (K,+,⋅) um corpo.
Definição 33 (polinômio, K[X], grau, mônico). Um polinômio sobre K com indeterminada X é uma expressão formal
| (65) |
onde ai ∈ K são os coeficiente de f(X) e existe n ∈ ℤ+ tal que ai = 0 para todo i > n. O conjunto de todos os polinômios sobre K é denotado por K[X]. O grau de f(X) é n = max{i: ai≠0} e nesse caso escrevemos f(X) = ∑ i=0naiXi.
Note que o grau do polinômio que tem todos os coeficientes nulos, chamado polinômio identicamente nulo sobre K não está definido. Se o polinômio tem grau n e an = 1 então ele é dito mônico.
Em K[X] definimos soma e produto de polinômios da seguinte forma. Sejam f(X) = ∑ i=0naiXi e g(X) = ∑ i=0mbiXi dois polinômios
Exercício 48. Prove que (K[X],+,⋅) é um domínio de integridade, onde o elemento neutro da soma é o polinômio identicamente nulo, aquele com todos os coeficiente 0, e o elemento neutro da multiplicação é o polinômio constante igual a 1 (a0 = 1 e ai = 0 para i > 1).
Observação 9. Não confunda polinômio com função polinomial. Por exemplo, no corpo ℤp (p primo) f : ℤp → ℤp dada por f(x) = xp − x é nula pelo teorema de Fermat. O polinômio Xp − X não é o polinômio identicamente nulo sobre o ℤp, pois dois polinômios são iguais se e somente se têm os mesmos coeficientes. Esse fenômeno, dois polinômios diferentes induzirem a mesma função polinomial não não ocorre em corpos infinitos como, por exemplo, ℚ, ℝ e ℂ.
Teorema (Teorema da divisão para polinômio). Sejam f(X),g(X) ∈ K[X] com g(X)≠0. Então existem únicos q(X),r(X) ∈ K[X] tais que
| (68) |
onde r(X) = 0 ou o grau de r(X) é menor que o grau de g(X).
Demonstração. Se f(X) é nulo então basta tomar q(X) = r(X) = 0. Sejam n e m os graus de f(X) e g(X), respectivamente, e ai e bi os coeficientes de f(X) e g(X), respectivamente. Se n < m podemos tomar q(X) = 0 e r(X) = f(X). Então vamos assumir que n ≥ m e provar o teorema por indução em n.
Para n = 0 basta tomar q(X) = a0b0−1 e r(X) = 0. Suponha n > 0 e assuma que o teorema da divisão vale para polinômios de grau menor que n.
Tome
| (69) |
que tem grau menor que n, portanto, pelo hipótese de indução
| (70) |
com r1(X) nulo ou de grau menor que o grau de g(X). Das duas últimas equações tiramos que
| (71) |
com r1(X) nulo ou de grau menor que o grau de g(X).
Para mostrar a unicidade suponha que
|
com q1(X)≠q2(X). Então g(X)(q1(X) −q2(X)) = r1(X) −r2(X) é uma igualdade entre polinômios de graus diferentes, um absurdo. ♦
Exercício 49 (Teorema da divisão para polinômio num anel). Sejam A um domínio de integridade f(X),g(X) ∈ A[X] com g(X)≠0 e com coeficiente líder invertível em A. Então existem únicos q(X),r(X) ∈ A[X] tais que
| (72) |
onde r(X) = 0 ou o grau de r(X) é menor que o grau de g(X).
Definição 35 (raiz de um polinômio). Dizemos que b ∈ K raiz do polinômio f(X) = ∑ i=0naiXi ∈ K[X] se f(b) = ∑ i=0naibi = 0
Teorema (Número de raízes de um polinômio). Um polinômio f(X) ∈ K[X] de grau n tem no máximo n raízes.
Demonstração. Para n = 0 os polinômios não têm raiz. Seja f(X) um polinômio de grau n > 0 e suponha que polinômios de grau n−1 têm no máximo n−1 raízes.
Se f(X) não tem raiz então o teorema está provado.
Suponha que a ∈ K é uma raiz de f(X). Então, pelo exercício acima, f(X) = (X −a)q(X) donde tiramos que o grau de q(X) é n− 1. Por hipótese q(X) tem no máximo n − 1 raízes.
Como não há divisores do zero em K[X] (é um domínio de integridade) se f(b) = 0 então b − a = 0 ou q(b) = 0, logo toda raiz de f(X) diferente de a tem que ser raiz de q(X). Portanto, f(X) tem no máximo n raízes. ♦
Por esta seção estamos assumindo que (X,∘) é um grupo abeliano com |X| finito. A ordem de X é |X|.
Usaremos a notação multiplicativa, ou seja, com o elemento neutro denotado por 1, vamos denotar por a−1 o inverso de a em X com relação a operação do grupo.
Definição 36 (subgrupo, ordem). Dado um grupo (X,∘) um subconjunto de X que é um grupo com o operação de X chamado de subgrupo.
A ordem de um subgrupo, assim como a ordem de um grupo, é o número de elementos no subconjunto.
Teorema (Teorema de Lagrange). A ordem de qualquer subgrupo divide a ordem do grupo.
Demonstração. Se H é um subgrupo de X então podemos definir a seguinte relação de equivalência sobre X
| (73) |
A classe de equivalência de b é denotada por [b]H = .
É fácil notar que |[b]H|≤|H|, mas vale, de fato, a igualdade entre essas cardinalidades
Portanto [b]H tem H elementos para qualquer b ∈ X, ou seja, todas as classes de equivalência têm a mesma cardinalidade de H. Como as classes de equivalência particionam X temos que |H| divide |X|. ♦
Se H é subgrupo de X então denotamos por X∕H o conjunto das classes de equivalência modH, definido em (73). Note que a operação [a]H ∘ [b]H = [a ∘ b]H está bem definida e (X∕H,∘) é um grupo.
Observação 10. O grupo no teorema acima não precisa ser abeliano. Na definição acima se X não é abeliano então X∕H não está definido para todo H, somente para os subgrupos normais. Não trataremos disso neste texto.
Definição 37 (Homomorfismo de grupos). Sejam (X,∘) e (Y,×) grupos. Uma função f : X → Y é um homomorfismo se para quaisquer a,b ∈ X
|
Se, além disso, f é bijetora então f é um isomorfismo.
Exercício 53. Seja n = p1m1p2m2pkmk. Use o teorema chinês dos restos para provar que ℤn∗ é isomorfo a ℤp1m1∗× ℤp2m2∗×× ℤpkmk∗.
Teorema (Teorema do homomorfismo). Sejam (X,∘) e (Y,×) grupos com identidades 1X e 1Y , respectivamente, e f um homomorfismo. Então
Demonstração. Os itens (1) e (2) ficam como exercício. Vamos mostrar (3). Defina
Note que im(f) logo é sobrejetora. Agora, se [a]ker(f)≠[b]ker(f) e ([a]ker(f)) = ([b]ker(f)) então f([a]ker(f) ∘ [b]ker(f)−1) = 1Y , ou seja, [a ∘ b−1] ∈ ker(f), logo [a]ker(f) = [b]ker(f), uma contradição. Portanto, é injetiva. ♦
) = im(Definição 40 (ordem de a, ordX(a)). A ordem de a em X, denotada ordX(a) é a ordem do subgrupo gerado por a.
Note que para a ∈ X a seqüência a0,a1,a2,…,an,… deve em algum momento repetir elementos, ou seja, existe m ∈ ℤ+ tal que am = an para n < m. Para o menor m para o qual isso ocorre deve valer que n = 0, caso contrário am−n = 1 e m−n < m contrariando a minimalidade de m. De outra forma
|
Portanto, a ordem de a em X é o menor k ∈ ℤ+ tal que ak = 1.
Exercício 55. Deduza o teorema de Euler (pág. 78) do teorema de Lagrange.
Demonstração. Se k = qordX(a) então ak = aqordX(a) = (aordX(a))q = 1.
Por outro lado, se ak = 1 então tome q,r ∈ ℤ tal que k = ord(a)q + r com 0 ≤ r < ord(a) dados pelo teorema da divisão. Então ak = aord(a)q+r = ar e como r < ord(a) temos r = 0. ♦
Corolário. ak = aℓ se e só se k ≡ ℓ (mod ordX(a)).♦
Corolário. Se X tem ordem n então ak = ak modn, para todo a ∈ X.♦
Exemplo 17. No (ℤn,+) — aqui usaremos notação aditiva — se a tem ordem k então k[a]n = [0]n, ou seja, ka é um múltiplo de n e pela definição de ordem é o menor múltiplo de a que é múltiplo de n, ou seja ka = mmc(n,a). Portanto, para todo a ∈ ℤn
| (75) |
Pela equação acima, se mdc(a,n) = 1 então ordℤn(a) = n, ou seja, todo b ∈ ℤn é da forma ka para algum inteiro positivo k.
Demonstração. Se at em ordem k então akt = 1 e pelo corolário do lema 20, kt ≡ 0 (mod n) e k é o menor inteiro positivo tal que kt é múltiplo de n, ou seja
| (77) |
♦
Definição 41 (grupo cíclico, gerador). Dizemos que um grupo X é cíclico se X = ⟨a⟩. Nesse caso dizemos que a é um gerador de X.
Exemplo 18. (ℤn,+) é cíclico e 1 é um gerador. Em geral, (ℤn∗,⋅) não é cíclico, e.g., (ℤ8∗,⋅) não é cíclico, mas (ℤ4∗,⋅) é cíclico6 .
Demonstração. Seja a um gerador de X. Para todo b ∈ X, existe t ∈ ℤ+ tal que at = b, portanto, ordX(b) = n∕mdc(t,n), logo os geradores de X são os at ∈ X tais que mdc(t,n) = 1, donde tiramos que há φ(n) geradores. ♦
Exercício 56. Prove que se |X| é primo então X é cíclico, mais que isso, prove também que X = ⟨a⟩ para qualquer a ∈ X.
Exercício 58. Prove que se ordX(a1) = n1 e ordX(a2) = n2 e mdc(n1,n2) = 1 então ordX(a1 ∘ a2) = n1n2.
7.1. Considerações computacionais a respeito de ordem em ℤn e ℤn∗.
De acordo com o exemplo 17 é fácil determinar a ordem de um elemento do (ℤn,+), entretanto, esse não é o caso do (ℤn∗,⋅). O algoritmo trivial toma a ∈ ℤn∗ e calcula todas as potências ak, o que é inviável se |ℤn∗|é grande, o que é o caso em criptografia.
Mesmo a ordem de ℤn∗ é difícil de computar quando n não é primo, ou seja, não é conhecido algoritmo eficiente para o seguinte._______________________________
Observação 11. Se uma fatoração de n é conhecida então podemos computar φ(n) em tempo polinomial usando (63) (pág. 77). Por outro lado, é sabido que dado n e φ(n) podemos computar em tempo polinomial uma fatoração de n, o que parece indicar que φ(n) é tão difícil computacionalmente quanto fatoração.
Exercício 59. Suponha que existe um algoritmo que dados inteiros n > 1 e a ∈ ℤn∗ devolve ordℤn∗(a) em tempo polinomial em log n. Mostre como usar esse algoritmo para para computar em tempo polinomial uma fatoração de n.
O seguinte resultado mostra como calcular a ordem de um elemento de ℤp∗ quando é conhecida a fatoração de p − 1.
Lema 23. Seja a ∈ X e m = p1m1p2m2pkmk positivo tal que am = 1. Então
| (78) |
onde fi é o maior inteiro não-negativo tal que am∕pifi = 1, para todo i ∈{1,2,…,k}.
Demonstração. Seja k = ordX(a). Pelo lema 20 temos km portanto k = p1r1p2r2pkrk com 0 ≤ ri ≤ mi para todo i.
Para determinar r1 tome a seqüência
|
e seja f1 o maior inteiro não-negativo tal que am∕p1f1 = 1 (a primeira ocorrência de 1). Então temos
|
mas de am∕p1f1+1 ≠1 temos que k não divide m∕p1f1+1, ou seja
|
isso só pode ocorrer se r1 = m1 − f1. Analogamente, ri = mi − fi para todo i ∈. ♦
Corolário 24. Dado n ∈ ℤ+, se an = 1 e an∕p≠1 para todo p primo e divisor de n, então a tem ordem n.♦
Demonstração. Basta notar que (an∕pm )p = an∕pm−1 logo an∕pm ≠1, para todo inteiro m > 1. ♦
Quando usamos um grupo cíclico em criptografia, freqüentemente precisamos conhecer o gerador desse grupo. Note que no corolário acima a recíproca vale. Logo temos o seguinte resultado.
Teorema. Se X é cíclico de ordem n = p1m1p2m2pkmk então a é um gerador de X se e somente se an∕pi≠1 para todo i ∈.
Como o número de fatores k é no máximo log 2n, testar se a é gerador pode ser feito de modo eficiente. Na próxima seção veremos como determinar os geradores do ℤp∗.
Exercício 60. Dados inteiros m1,m2,…,mk > 1, sejam m = m1m2mk e mi′ = m∕mi. Para a ∈ ℤn, mostre como computar am1′,am2′,…amk′ com O(log(k)log(m)) multiplicações.
Agora veremos como determinar um gerador do ℤp∗ para p primo. Primeiro vamos provar que esse grupo é cíclico.
Teorema. Se p > 1 é primo então (ℤp∗,⋅) é cíclico.
Demonstração. Tome a fatoração
| (79) |
O polinômio X(p−1)∕pi − [1]p ∈ ℤp[X] tem no máximo (p − 1)∕pi < p − 1 raízes, portanto, existe [ai]p ∈ ℤp∗ tal que
| (80) |
Fazemos
| (81) |
Pelo exercício 57 ordℤp∗([qi]p) = pimi.
Usando uma generalização do exercício 58 temos ordℤp∗([q1q2qk]p) = p − 1, portanto, é um gerador do grupo. ♦
Exercício 61. Seja n > 1. Prove que se para cada fator primo p de n − 1 existe um inteiro a tal que [a]nn−1 = [1]n e [a]n(n−1)∕p≠[1]n, então n é primo.
Definição 42 (raiz primitiva módulo p). Seja p > 1 primo. Uma raiz primitiva módulo p é um gerador de ℤp∗.
Portanto, ℤp∗ admite raiz primitiva para qualquer p > 1 primo.
Observação 12. Os elementos de ℤp são as raízes da equação Xp−1 − [1]p = [0]p (teo. de Fermat), portanto, podemos determinar todas as raízes a partir de um gerador, ou raiz primitiva.
Exemplo 19. O ℤ11∗ é um grupo de ordem 10 = 2 ⋅ 5. Para simplificar, vamos escrever ℤ11 = . Assim, a é um gerador se a2 ⁄≡ 1 (mod 11) e a5 ⁄≡ 1 (mod 11)
a | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
a2 mod11 | 1 | 4 | 9 | 5 | 3 | 3 | 5 | 9 | 4 | 1 |
a5 mod11 | 1 | 10 | 1 | 1 | 1 | 10 | 10 | 10 | 1 | 10 |
Logo, os geradores são 2,6,7,8. Se escolhemos um elemento aleatoriamente com probabilidade 1∕10 e repetimos a escolha de modo independente, o número esperado de rodadas até sair um gerador do ℤ11∗ é 10∕4. Se usarmos o fato de que 1 e −1 não são geradores podemos melhorar a expectativa para 8∕4 = 2. Essa é a idéia do algoritmo a seguir.
Como já dissemos, freqüentemente precisamos conhecer o gerador desse grupo._
Não se conhece algoritmo eficiente para determinar um gerador de ℤp∗ a menos que seja dado a fatoração de p − 1.
Seguindo a demonstração do teorema anterior precisamos, de fato, de um modo eficiente de achar ai tal que vale (80), para cada fator pi de p − 1 (79).
A imagem do homomorfismo f : ℤp∗→ ℤp∗ definido por f(x) = x(p−1)∕pi é um subgrupo de ℤp∗ de ordem pi.
Sejam g uma raiz primitiva, x = gk e y = gℓ, y≠x. Então f(x) = f(y) se e só se k(p − 1)∕pi ≡ ℓ(p − 1)∕pi (mod p − 1), se e somente se k ≡ ℓ (mod pi). Portanto, a pré-imagem f−1(x), para qualquer x, tem cardinalidade pimi−1 ∏j≠ipjmj = (p− 1)∕pi. Assim, |f(ℤp∗)| = pi e se escolhemos x ∈ ℤp∗ com probabilidade uniforme então a probabilidade de f(x) = 1 é 1∕pi.
Para provar que o algoritmo funciona basta notar que no final da i-ésima iteração da linha 1 qipimi ≡ 1 (mod p) e qipimi−1 ⁄≡ 1 (mod p).
O tempo do algoritmo depende do número de rodadas da linha 2. Se a é escolhido uniformemente no passo 3 então b está distribuído uniformemente num subgrupo de ℤp∗ de ordem pi temos, como vimos acima que b = 1 com probabilidade 1∕pi, logo, se Xi é o número de rodadas do repita para i fixo, então Xi é uma variável aleatória com distribuição geométrica com probabilidade de sucesso 1 − 1∕pi, portanto, o valor esperado de Xi é 1∕(1 − 1∕pi) ≤ 2. No total, o número esperado de rodadas X = ∑ i=1kXi ≤ 2k.
As exponenciações nas linhas 4 e 6 podem ser feita em tempo O(log 3p) (exerc. 28), assim como o produto na linha 8. Portanto o tempo esperado é O(k log 3p) = O(log 4p).
Exercício 62. Dê uma prova detalhada para o seguinte argumento usado acima: f(x) = f(y) se e só se k(p−1)∕pi ≡ ℓ(p−1)∕pi (mod p−1), se e somente se k ≡ ℓ (mod pi).
Exercício 63. Dê uma prova detalhada para: a pré-imagem por f de qualquer elemento tem cardinalidade pimi−1 ∏j≠ipjmj.
Exercício 64. Dê uma prova detalhada para o seguinte argumento usado acima: Assim, |f(ℤp∗)| = pi e se escolhemos x ∈ ℤp∗ com probabilidade uniforme então a probabilidade de f(x) = 1 é 1∕pi.
O seguinte algoritmo probabilístico para construir um gerador do ℤp∗ é assintoticamente mais eficiente que o algoritmo 11 acima.
Exercício 65 (Algoritmo para determinar gerador). Suponha que são dados inteiros positivos p1,m1,p2,m2,…,pk,mk como acima.
Exercício 66. Decida se o seguinte algoritmo funciona corretamente
Exercício 67. Deduza que φ(n) = Ω(n∕log n) de (63), pág. 77, e de que há ≤ log 2n fatores na fatoração de n.
Exercício 68. Use o exercício anterior para deduzir a complexidade esperada (média) do algoritmo 12.
Observação 13. A necessidade de se ter uma fatoração não inviabiliza totalmente o algoritmo 11 acima porque o que se faz na prática é gerar um número “fatorado” n e testar a primalidade de n+1. Ou, ainda, podemos escolher um primo da forma 2q + 1 para q primo, portanto os fatores de p − 1 são 2 e q.
Seja X um grupo cíclico de ordem n e a ∈ X um gerador. Queremos computar a inversa da função expa: ℤ → X definida por expa(k) = ak.
Definição 43 (logaritmo discreto). Se a gera um grupo de ordem n, então para todo b ∈⟨a⟩ existe k ∈{0,1,…,n − 1} tal que ak = b.
Dizemos que k é o logaritmo discreto em X de b na base a.
O problema computacional do logaritmo discreto em X pode ser formulado da seguinte maneira
A dificuldade do problema nessa formulação depende da representação de X. Se a representação é aditiva como (ℤn,+) o problema do logaritmo discreto em X é resolver ak ≡ b (mod n) que é fácil, se a representação é multiplicativa como (ℤn∗,⋅) (cíclico) então o problema é difícil, não se conhece algoritmo eficiente para o seguinte problema.
No caso dos resíduos de inteiros, o logaritmo discreto é um isomorfismo, ou seja, (ℤp∗,⋅) é isomorfo ao grupo aditivo (ℤφ(p),+).
Exemplo 20. Omitindo os colchetes [ ] para simplificar, a função dlog2: ℤ11∗→ ℤ10 dada por
(ℤ11∗,⋅) | (ℤ10,+) |
1 | 0 |
2 | 1 |
3 | 8 |
4 | 2 |
5 | 4 |
6 | 9 |
7 | 7 |
8 | 3 |
9 | 6 |
10 | 5 |
satisfaz dlog2(a⋅b) = dlog2(a) + dlog2(b), onde a soma e o produto operam nos respectivos grupos. O caso geral é tratado no exercício a seguir.
Exercício 69. Seja a uma raiz primitiva módulo p. Verifique que a função dloga: ℤp∗→ ℤp−1 dada por [a]pk[k]p−1 é um isomorfismo.
Exemplo 21. Para p = 1990 é sabido que 3 é uma raiz primitiva. Assim,
|
Sabemos computar rapidamente 3789 modp, usando o algoritmo 7, entretanto, não sabemos resolver eficientemente a equação 3x ≡ 1452 (mod 1999).
Observação 14. Em aplicações criptográficas X = ℤp∗ para p ≥ 21024 o que torna uma busca exaustiva por dloga(b) de complexidade exponencial.
Exemplo 22 (Troca de chaves—protocolo Diffie–Hellman–Merkle). 7 cíclico X de ordem n e um gerador g de X, de conhecimento público, Alice e Bob estabelecem um chave comum da seguinte forma
Se um espião, conhecendo g e X, intercepta A e B então o problema é determinar a tal que ga = A, determinar b tal que gb = B, e com isso feito (que é a parte difícil se for feita uma escolha apropriada de X) computar k = gab.
Um parte importante para a segurança do protocolo é a escolha de X, g e n. Comentamos acima que não é para todo X que o problema do logaritmo discreto é difícil. Usualmente X = ℤn∗ e para segurança, n deve ser primo ou ter um ter um fator primo grande (se os fatores forem pequenos o algoritmo Pohlig–Hellman determina a e b eficientemente). Padrões atuais (ansi x9.42) definem os seguinte domínios para os parâmetros envolvidos, considerando X = ℤp∗
Um problema nesse protocolo é que o interceptador pode assumir o papel de Alice para Bob e o de Bob para Alice e assim conhecer a chave para decodificar alguma mensagem. Isso pode ser evitado usando-se assinaturas digitais, que veremos adiante.
Observação 15. A capacidade de computar logaritmo discreto eficientemente implica na violação do protocolo de Diffie–Hellman–Merkle, não se sabe se a recíproca vale.
Criptografia
Um sistema de codificação é uma quina (,,,,) de conjuntos onde
tais que para cada e ∈ existe d ∈ tal que Dd(Ee(p)) = p.
Exemplo 23 (Cifra de César). Essa cifra identifica o alfabeto com o ℤ26, = ℤ26 e , = . Para e,d ∈ ℤ26 temos as funções
Normal: abcdefghijklmnopqrstuvwxyz
Cifrado: defghijklmnopqrstuvwxyzabc
Normal: A ligeira raposa marrom saltou sobre o cachorro cansado
Cifrado: d oljhlud udsrvd pduurp vdowrx vreuh r fdfkruur fdqvdgr
Exemplo 24 (Cifra de Vigenère). A cifra de Vigenère (1523-1596) é um método de encriptação baseado em trabalhos dos matemáticos italianos Leon Alberti (1404), Giovanni Porta (1525) e do alemão Johannes Tritemius (1492). Funciona como as cifras de César, entretanto, a cifra de uma letra depende da posição dela no texto.
Informalmente, a cifragem ocorre do seguinte modo. Escolhemos uma palavra chave, por exemplo ENGLISH e escrevemos essa palavra repetidamente até que a string obtida tenha o mesmo número de letras que o texto que será codificado, por exemplo ENGLISHISALLGREEKTOGERMANS. Usamos uma tabela 26 × 26 com as linhas e colunas indexadas pelo alfabeto, a primeira linha é composta pelo alfabeto na seqüência usual, a segunda é a seqüências deslocada ciclicamente uma posição para esquerda, a terceira duas posições, e assim por diante. A i-ésima letra da cifra é obtida na posição (l,c) da tabela, onde l é a linha que corresponde a i-ésima letra da chave e c é a coluna que corresponde a i-ésima letra do texto. No nosso exemplo
baseado na tabela de Vigenère:
Essa cifragem é poderosa quando usada com uma língua pouco conhecida como o Quechua8 . Durante a Segunda Grande Guerra Mundial o americanos usaram-no com a língua do povo Navajo com sucesso, os japoneses nunca conseguiram quebrar esse código.
Friedrich Kasiski foi o primeiro a publicar, em 1863, um ataque com sucesso sobre a cifra de Vigenère, mas Charles Babbage já havia desenvolvido o mesmo método um pouco antes, em 1854.
A força dessa cifra reside no fato de impedir uma análise baseada na freqüência das ocorrências dos caracteres, entretanto, a repetição da chave a torna vulnerável caso o comprimento dela seja descoberto.
Os sistemas têm duas grandes classes, os simétricos e os assimétricos ou de chave pública.
Definições usuais
10.0.1. Cifras afim. As cifras de César e Vigenère são exemplos de cifras afim.
Nesses sistemas = = Σ = ℤm. Cada chave é um par (a,b) ∈ ℤm × ℤm tal que mdc(a,m) = 1 (a é inversível módulo m). As funções de codificação e decodificação são
Exemplo 25. Considere o alfabeto usual com 26 letras identificado com o ℤ26 com a chave (a,b) = (7,3).
b | a | l | d | e |
1 | 0 | 11 | 3 | 4 |
10 | 3 | 2 | 24 | 5 |
k | d | c | y | f |
e a decodificação pode ser lida na tabela de baixo pra cima.
Essa codificação pode ser quebrada se se conhece a correspondência entre dois pares de letras, por exemplo b → k e d → y corresponde a 1a + b ≡ 10 (mod 26) e 3a + b ≡ 24 (mod 26), respectivamente. Isolando b na primeira equivalência e substituindo na segunda temos 2a + 10 ≡ 24 (mod 26), ou seja, a + 5 ≡ 12 (mod 13), portanto a = 7 e b = 3.
Uma generalização n-dimensional do caso anterior: as funções sobre = = ℤmn são da forma ℤmn → ℤmn
A chave decodificadora que corresponde a (A,b) é (det(A)−1 modm,b).
Essa cifras são quebradas se o atacante conhece n + 1 pares (P,C) ∈×. Suponha que um atacante conheça
|
e se det(P)=det 1 − 0, 2 − 0,…, n − 0é invertível então A ≡ CP−1 modm e = 0 − A 0.
Gilbert Sandford Vernam era um engenheiro da AT&T Bell Labs em 1917 quando inventou e patenteou o seguinte sistema de crifagem (cifra de Vernam): dada uma chave k, escolhida previamente e armazenada numa fita de papel perfurado9 ,
| (86) |
O fato da chave ser re-usada tornava o sistema inseguro. Pouco tempo depois Joseph Mauborgne, na época capitão do exército americano, propôs que a informação contida na fita fosse aleatória e usada uma única vez (one-time pad). Claude Shannon10 , na época da 2a Grande Guerra, provou que o one-time pad é inquebrável.
Definição 45 (cifra de Vernam, one-time pad). A cifra de Vernam é o criptossistema com = = ={0,1}n com as funções de codificação e decodificação dadas em (86). Se as chaves são strings aleatórias escolhidas uniformemente em e usadas uma única vez então o sistema é chamado one-time pad.
Observação 16. 11 Uma versão desse sistema é usado no RC4, um algoritmo muito usado em protocolos conhecidos, como Secure Socket Layers (SSL) (para proteger o tráfego Internet) e WEP (para a segurança de redes sem fios). Em algumas aplicações podem converter-se em sistemas inseguros, porém, alguns sistemas baseados em RC4 são seguros o bastante num contexto prático.
10.1.1. Sigilo Perfeito. Fixamos um sistema com ,, finitos e uma distribuição de probabilidade Pr: → [0,1] tal que Pr(P) > 0 (∀P ∈). A idéia de sigilo perfeito é a seguinte: escolhemos um texto de acordo com a distribuição Pr e o ciframos. Entregamos ao adversário o texto cifrado C e perguntamos qual a probabilidade do texto que foi cifrado? Se o adversário não pode fazer melhor do que responder Pr(P), ou seja, o conhecimento de C não torna uns textos mais prováveis e outros menos prováveis do que eles são, significa que ele não ganhou informação com o conhecimento de C e temos segredo perfeito.
Formalmente, defina o espaço amostral × onde a distribuição Pr é determinada por uma escolha P e uma escolha de K feitas independentemente, e defina as variáveis aleatórias
| (87) |
Definição 46 (sigilo perfeito). Um criptossistema simétrico nas condições acima tem sigilo perfeito se para quaisquer P ∈ e todo possível C ∈
| (88) |
para toda distribuição Pr.
Exemplo 26. Tome = {0,1}, = {a,b} e = {A,B} com
P | 0 | 1 |
Pr(P) | 1∕4 | 3∕4 |
K | A | B |
Pr(K) | 1∕4 | 3∕4 |
K | A | B |
EK(0) | a | b |
EK(1) | b | a |
resulta em
C | a | b |
Pr(C) | 5∕8 | 3∕8 |
(P|C) | (0|a) | (1|a) | (0|b) | (1|b) |
Pr(P|C) | 1/10 | 9/10 | 1/2 | 1/2 |
não tem, sigilo perfeito pois se o adversário recebe C = a então ele tem quase certeza de que o texto cifrado foi a.
Exemplo 27. One-time pad com = = ={0,1}2. A seguinte tabela tem entradas Pr(C = C|P = P); fixado P as possíveis cifras são PxorK onde K varia sobre toda chave possível, portanto, independente de P as cifras são equiprováveis.
C | 00 | 01 | 10 | 11 | ||
Pr(P) | P | |||||
1∕6 | 00 | 1/4 | 1/4 | 1/4 | 1/4 | |
1∕3 | 01 | 1/4 | 1/4 | 1/4 | 1/4 | |
1∕4 | 10 | 1/4 | 1/4 | 1/4 | 1/4 | |
1∕4 | 11 | 1/4 | 1/4 | 1/4 | 1/4 | |
A tabela abaixo mostra Pr(P = P|C = C), a probabilidade do texto ser P dado que o adversário viu C
C | 00 | 01 | 10 | 11 | ||
Pr(P) | P | |||||
1∕6 | 00 | 1∕6 | 1∕6 | 1∕6 | 1∕6 | |
1∕3 | 01 | 1∕3 | 1∕3 | 1∕3 | 1∕3 | |
1∕4 | 10 | 1∕4 | 1∕4 | 1∕4 | 1∕4 | |
1∕4 | 11 | 1∕4 | 1∕4 | 1∕4 | 1∕4 | |
Nesse exemplo temos sigilo perfeito pra essa distribuição particular.
Lema 25. Para o one-time pad da definição 45
Demonstração. Fixado P, temos C = PxorK se e só se K = PxorC. Como K é escolhida uniformemente a probabilidade é (1∕2)n. ♦
Teorema. O one-time pad tem sigilo perfeito.
Demonstração. Usando o teorema de Bayes
Observação 17. O one-time pad não é o único sistema que possui sigilo perfeito, mas é o mais simples. Foi o primeiro a ser descoberto.
Exercício 71 (Teorema de Shannon). Dados um sistema com ,, finitos e uma distribuição de probabilidade Pr: → [0,1] tal que Pr(P) > 0 (∀P ∈), esse sistema tem sigilo perfeito se e somente se as chaves têm distribuição uniforme e se para todo P ∈ e todo C ∈ existe um único K ∈ tal que EK(P) = C.
Exercício 72. Prove que não existe sistema de codificação com sigilo perfeito se os textos de n bits usam chaves de n − 1 bits.
Observação 18 (Curiosidades12 ). Enquanto one-time pads são seguras se gerado e usado corretamente, pequenos erros puderam viabilizar criptoanálises bem sucedidas:
É um criptossistema assimétrico; deve o seu nome a três professores do MIT: Ron Rivest, Adi Shamir e Len Adleman14 , que o publicaram em 197815 .
Tome = = ℤn onde n é o produto de dois primos n = p⋅q. Uma chave pública é um par (e,n), onde e ∈ ℤφ(n)∗\{1}. As funções de codificação são
| (89) |
A chave de decodificação correspondente é d = d(e) = e−1 modφ(n). Essa é a chave privada e deve ser mantida em segredo.
As funções de decodificação são
| (90) |
Essas funções são computadas eficientemente pelo algoritmo 7.
Demonstração. Se d = d(e) então DdEe(P) = Ped modn com ed = 1 + rφ(n) para algum r ∈ ℤ. Logo Ped = P1+rφ(n) = PPp−1(q−1)r, mas se p ⁄P então
| (91) |
pois Pp−1 ≡ 1 (mod p) pelo teorema de Fermat (pág. 44). Também, Ped ≡ P (mod p) se pP, ou seja,
| (92) |
Analogamente, vale
| (93) |
De (92) e (93) temos que pqPed − P, ou seja, Ped ≡ P (mod n), assim
| (94) |
Como P < n, temos Ped modn = P. ♦
Observação 19. A chave privada d = d(e) é computada eficientemente a partir de e e φ(n) pelo algoritmo de Euclides estendido (algoritmo 8).
Exemplo 28. Tome os primos p = 61 e q = 53, portanto n = pq = 3233. A função de Euler é φ(n) = (p−1)(q−1) = 3120. Escolhemos e = 17 e obtemos d = 2753. A chave pública é 17. Se o texto comum é m então o texto cifrado é c = m17 mod3233. A chave privada é 2753. O texto decifrado é dada por m = c2753 mod3233.
Por exemplo, para codificar m = 123, calculamos c = 12317 mod3233 = 855 usando o algoritmo 7. Para decodificar c = 855, calculamos com o algoritmo 7, m = 8552753 mod3233 = 123.
Observação 20. Se P > n então uma alternativa para usar o RSA é fazer o seguinte. Usamos Σ = ℤN de modo que teremos blocos em Σk, onde k = . Assim a palavra m1m2…mk pode ser vista como um número
|
A segurança do RSA é baseada na dificuldade computacional do Problema RSA:
Acredita-se que esse problema seja equivalente ao problema da fatoração.
Conjectura 27 (Rivest, Shamir e Adleman). Um algoritmo eficiente para o problema RSA implica num algoritmo eficiente para o problema da Fatoração.
Se φ(n) puder ser determinado eficientemente a partir de n e e então a fatoração de n pode ser computada eficientemente: supondo que n = pq, de φ(n) = (p− 1)(q − 1) temos que p + q = n + 1 − φ(n). Também, (p − q)2 = (p + q)2 − 4n. De p + q e p − q é fácil determinar p e q. De φ(n) obtem-se a chave privada d através do algoritmo de Euclides estendido.
Ainda, se d, diretamente, puder ser computado eficientemente a partir de n e e, então pode-se computar a fatoração de n eficientemente. Como a recíproca claramente é verdadeira, esses problemas são computacionalmente equivalentes.
Exercício 73 (Determinar d a partir de (e,n) implica em fatorar n). Assuma que existe um algoritmo que compute d a partir de n e e. Prove que
| (95) |
Seja s inteiro tal que ed − 1 = 2st com t ímpar. Prove que existe i ∈{1,2,…,s} tal que
| (96) |
para pelo menos metade de todos os a ∈ ℤn∗. Prove que
| (97) |
Baseando-se nos fatos acima, escreva um algoritmo aleatorizado que em média com 2 rodadas de sorteio determina um divisor de n. Mostre um algoritmo aleatorizado de tempo polinomial que determina fatoração de n.
Do ponto de vista prático, a segurança depende de maneira fundamental da escolha dos primos. São conhecidos casos de quebra do RSA na prática por causa de escolhas ruins. Essa escolha depende entre outras coisas do estado-da-arte dos algoritmos de fatoração. Algumas heurísticas resultam em algoritmos eficientes de fatoração para casos particulares, por exemplo, quando |p − q|é pequeno. Também, o tamanho dos primos é importante, não é seguro usar primos de 512 bits como já foi feito, atualmente usa-se pelo menos 2048 bits. Isso deve-se essencialmente a tecnologia, processadores estão ficando mais rápidos e para instâncias pequenas de problemas intratáveis a computação é factível.
Veja mais sobre segurança e aspectos práticos do RSA nas seções 8.2.2 e 8.2.3 no Handbook of Applied Cryptography.
Exercício 74. Como pode ser a cifra do texto 100000 usando RSA com p = 11, q = 29, n = 319 e e = 3. Qual o valor de d?
Exercício 77 (Ataque do módulo comum). Considere que P é cifrado com duas chaves distintas (e,n) e (f,n) tais que mdc(e,f) = 1. Mostre como P pode ser recuperado a partir dos textos cifrados Pe modn e Pf modn nesse caso.
Exercício 78 (Ataque cíclico). Sejam (e,n) chave pública, P um texto comum e C o texto cifrado correspondente. Prove que existe um inteiro positivo k tal que Cek ≡ C (mod n) e que Cek−1 ≡ P (mod n). Esse ataque é viável na prática?
Exemplo 29 (Gerando um par de chaves RSA com openSSL). Exemplo de uma seqüência de comandos para gerar um par de chaves privada, pública de 32 bits e o último comando mostra os parâmetros usados, e,n,d,p,q; as outras variáveis são usadas para acelerar a computação.
O texto acima segue o seguinte padrão de apresentação:
Como no caso anterior o criptossistema de Rabin é assimétrico e baseado na dificuldade do problema de fatoração. A vantagem aqui é que foi provado que quebrar o código é equivalente à fatoração.
Tome = = ℤn onde n é o produto de dois primos n = p ⋅ q.
A chave pública é n e a chave privada é (p,q). Dado o texto comum P, a codificação de P é C = P2 modn. A codificação e feita extraindo-se a raiz quadrada de C módulo n e decidindo-se por quais das quatro raízes é o texto.
Exercício 79. Sejam p e q primos e tome u = pq−1 − qp−1. Mostre que u2 ≡ 1 (mod p), u2 ≡ 1 (mod q) e u2 ≡ 1 (mod n).
Mostre que se x0 é solução de x2 ≡ a (mod n) então também são soluções −x0, ux0 e −ux0.
Para facilitar (não é necessário, apenas aumenta a eficiência) a extração de raiz quadrada podemos escolher p ≡ q ≡ 3 (mod 4)______________________________
A segurança agora é baseada na dificuldade computacional do Problema da raiz quadrada módulo n, para n composto:_____________________________________
Se a fatoração n = pq é conhecida então como vimos acima sabemos resolver esse problema eficientemente. A recíproca também vale como mostra o exercício a seguir.
Exercício 81. Suponha que exista um algoritmo eficiente que, dado a e n determina de modo eficiente uma solução de x2 ≡ a (mod n). Sorteie b ∈ ℤn∗ e compute b2 modn, em seguida use o algoritmo anterior para determinar uma solução x de X2 ≡ b2 (mod n). Com probabilidade temos x ⁄≡±b (mod n). Prove que nesse caso mdc(b − x,n) ∈{p,q}.
Exercício 82. Prove que se n é um inteiro composto ímpar e a ∈ ℤn∗ então o número de soluções de X2 ≡ a2 (mod n) é 2k, onde k é o número de fatores primos distintos de n.
Proposto pelo egípcio Taher Elgamal em 1985. É um sistema assimétrico com chave pública (p,g,A), onde p é um primo, g é uma raiz primitiva de ℤp∗ e A = ga ∈ ℤp∗. A chave privada correspondente é o logaritmos discreto a = dloggA.
O espaço dos textos comuns é o ℤp. A função de codificação correspondente a chave pública (p,g,A) é
| (100) |
onde b ∈{1,…,p− 2}é sorteado uniformemente. Portanto é um protocolo probabilístico, o que acredita-se dificulta muito a criptoanálise. Note que o mesmo texto pode ter cifras diferentes por causa de sorteios diferentes. A função de decodificação que inverte essa cifragem é
| (101) |
Dessa forma
| (102) |
Exemplo 30. Seja (23,7,4) uma chave pública, e 6 a chave privada. Para codificar o texto 7, sorteamos b = 3 e enviamos (21,11). O receptor computa 2123−1−6 ⋅ 11 mod23 = 7.
Observação 21. As exponenciações podem ser calculadas previamente (e mantidas em segredo) o que torna a codificação bastante rápida, bastando fazer uma multiplicação modular.
A segurança do Elgamal é baseada na dificuldade computacional do Problema de Diffie–Hellman:_______________________________________________________
Um algoritmo eficiente para esse problema implica na quebra do El Gamal, conhecidos uma cifra gb modp,(ga)b ⋅ P modp e a chave pública (p,g,ga) esse algoritmo pode ser usado para calcular g−ab modp e resolver (ga)b ⋅ P modp para P, e vice-versa.
Exercício 83. Mostre que um algoritmo eficiente para o Problema do Logaritmo Discreto (veja seção 9) implica num algoritmo eficiente para o Problema de Diffie–Hellman.
Conjectura 28. Quebrar o Elgamal implica num algoritmo eficiente para o problema do Logaritmo Discreto.
Esquemas de assinaturas digitais podem ser derivados desses sistemas criptográficos assimétricos.
Dizemos que uma assinatura é universalmente forjável se um adversário pode forjar uma assinatura digital sem conhecer a chave privada.
14.0.2. RSA. Alice quer enviar um documento P com uma assinatura s para Bob. Sejam (e,n) e d = d(e) um par de chaves RSA pública e privada, respectivamente, de Alice. Alice computa s = Pd modn e envia (P,s) para Bob. Para a verificação da assinatura Bob verifica se P = se modn.
Proposição 29. A assinatura RSA é universalmente forjável se é permitido ao adversário pedir para assinar algumas mensagens.
Demonstração. No papel do adversário, escolha r ∈ ℤn∗ e peça para assinar mr modn e r−1 modn. Note que ass(m1 ⋅ m2) = ass(m1)ass(m2) (veja exercício 75). ♦
Alice quer enviar um documento P com uma assinatura s para Bob. Sejam (p,q) e n um par de chaves RSA privada e pública, respectivamente, de Alice. Alice computa s = P1∕2 modn e envia (P,s) para Bob. Para a verificação da assinatura Bob verifica se P = se modn.
Proposição 30. O sistema pode ser quebrado se é permitido ao adversário pedir para assinar algumas mensagens.
Demonstração. No papel do adversário, escolha r tome P = r2 e peça para assinar P até obter uma resposta diferente de r. Se a resposta for diferente de r então as duas raízes podem ser usadas para fatorar n. ♦
Exercício 84. Mostre que o adversário pode assinar alguma mensagem, não necessariamente uma de sua escolha, apenas conhecendo a chave pública.
Alice quer enviar um documento P com uma assinatura s para Bob. Sejam (p,g,A) e a um par de chaves RSA pública e privada, respectivamente, de Alice. Alice sorteia k ∈ ℤp−1∗, computa r = gk modp e s = (P − ar)(k−1 modp − 1) modp − 1, envia (P,(r,s)) para Bob. Para a verificação da assinatura Bob verifica se gP = Arrs modp.
Proposição 31. Um adversário pode assinar alguma mensagem, não necessariamente uma de sua escolha, apenas conhecendo um par (P,ass(P)).
Demonstração. O adversário escolhe v invertível módulo p−1, escolhe u, computa r = guAv modp, computa s = −rv−1 modp−1 e P = su modp−1. Assim, (r,s) é uma assinatura de P. ♦
Exercício 85. Qual é o problema de se usar o mesmo k para toda assinatura? Qual é o problema de se usar um gerador previsível para a escolha de k?
é uma variante mais eficiente (rápido) do El Gamal adotado como padrão nos Estados Unidos. Não serve como criptossistema.
Alice escolhe uma raiz primitiva g módulo p e computa x = g(p−1)∕q modp e, finalmente, sorteia a ∈{1,2,…,q − 1} e computa A = ga modp. As chaves públicas e privadas são (p,q,g,A) e a, respectivamente.
|
Então ass(P) = (r,s).
(1) 1 ≤ r,s ≤ q − 1;
(2) r = ((g(s−1P) modq A(rs−1) modq ) modp) modq;
Exercício 86. Mostre que sob as hipóteses na escolha das chaves valem: q tem 160 bits e p entre 512 e 1024 bits, p é múltiplo de 64 logo sua expansão binária tem de 8 a 16 strings de comprimento 64. Prove que se qp − 1 então ℤp∗ contém um elemento de ordem q. Mostre que x tem ordem q em ℤp∗.
O ganho de eficiência vem do fato que no Elgamal são feitas exponenciações com expoentes tão grandes quanto p enquanto que no DSA os expoentes são números de 160 bits.
Para o DSA também vale que
Proposição 32. Um adversário pode assinar alguma mensagem, não necessariamente uma de sua escolha, apenas conhecendo um par (P,ass(P)).
A prova e deixada como exercício. Esse ataque pode ser evitado: se trocarmos as ocorrências do texto P nos protocolos de assinatura e verificação por h(P) onde h é uma função de hash criptográfico então o esquema continua válido e a proposição acima deixa de ser verdade. O mesmo vale para o Elgamal.
Se um adversário puder computar logaritmo discreto no subgrupo ⟨g⟩⊂ ℤp∗ então ele é capaz de determinar a chave privada da Alice e assinar documentos. Esse é o único ataque geral conhecido ao DSA e atualmente não se sabe levar vantagem do fato de dlog ser computado em um subgrupo de ℤp∗ de ordem > 2159.
Pelo que vimos, devemos ter mecanismos eficientes para obter números primos. De um modo geral, esses primos são gerados da seguinte forma______________________
Para a primeiro passo, usualmente é sorteado um número dentre todos os números ímpares do tamanho desejado. Pelo Teorema dos Números Primos a quantidade de números primos até n é n∕lnn, assintoticamente. Como metade desses números são pares, as fração de números primos é < 2∕lnn, por exemplo a proporção deles até 22048 é ≤ 2∕2048ln2 ≈ 7∕5000.
Para o segundo passo, como a probabilidade de um número sorteado n ter um fator pequeno é alta, antes de passarmos para o algoritmos mais sofisticados, testamos se algum inteiro até um limiar M é divisor próprio de n. A proporção dos candidatos descartados nessa fase é ∏ p=1,primoM(1 − 1∕p) ≈ 1∕lnM. O valor de M depende, entre outras coisas, do algoritmo usado a seguir nesse passo e uma boa estratégia pode ser determiná-lo experimentalmente. Atualmente, o usual é um número da ordem de 1012.
Vimos na seção 2 que é conhecido um algoritmo de tempo polinomial em log n para decidir primalidade, entretanto ainda é impraticável usar esse algoritmo com instâncias grandes. Aqui há duas alternativas viáveis, testes aleatorizados que podem errar mas com um probabilidade muito pequena (veja observação 8) e algoritmos determinísticos que decidem o problema da da Primalidade quando restringimos a entrada, por exemplo para números de Fermat (veja seção 2.1).
As próximas seções apresentam alternativas para o passo 2. Na seção 19 discutimos brevemente geradores de números primos.
A seguinte entrada foi retirada do manual do Maxima16 , um sistema de computação algébrica, e é um exemplo típico de como a primalidade de um número é testada na prática.
De acordo com o teorema de Fermat, dados inteiros n e a, se n é primo e não divide a então an−1 ≡ 1 (mod n), portanto, qualquer outro resultado indica que n é composto. Entretanto, o teorema não garante que se an−1 ≡ 1 (mod n) então n é primo. Por exemplo 2340 ≡ 1 (mod 341) mas 341 = 11 ⋅ 31.
Definição 48 (pseudo-primo). Um número inteiro ímpar e composto n é um pseudo-primo para a base a se an−1 ≡ 1 (mod n).
Assim, 341 é pseudo-primo para a base 2. De fato, é o menor pseudo-primo para a base 2. Podemos descobrir que 341 é composto testando-o contra outras bases e nesse caso 3340 ≡ 54 (mod 341) o que atesta que 341 é composto. Entretanto, estender essa estratégia não produz um algoritmo eficiente para decidir primalidade, como veremos a seguir.
Todo n > 1 ímpar e composto é pseudo-primo para as bases 1 e n − 1. Não há números que sejam pseudo-primos para toda base a ∈{2,…,n− 2} pois se mdc(a,n) > 1 então an−1 ⁄≡ 1 (mod n). Isso garante que se incrementamos a base e fazemos o teste de Fermat então o mais longe que iremos é até o menor divisor primo de n, mas isso pode não ser muito melhor do que usar crivo de Eratóstenes (dado no exercício 18).
Exemplo 31. Testar primalidade de 10471357350880434151684603802033528
526913077464985215455699379117762699733064822510844685769516730761
652160510194271214128021140230710440669128221618836326458128548136
9054808044171 = 2827554835337072870547521843211213457668614806974
48 703443857012153264407439766013042402571 × 37033260045095264880
23456 099083350582733994873563592630385840178271946361725689882577
69601 envolveria 1099 tentativas, aproximadamente, o que é impraticável.
Uma saída é sortear a ∈{2,3,…,n − 2} uniformemente e verificar se an−1 ≡ 1 (mod n); se sim devolva “primo, provavelmente” senão devolva “composto, certamente”. No caso n = pq, com p,q primos, por exemplo, temos n − φ(n) = p + q − 1 inteiros tais que mdc(a,n) > 1; no exemplo 31 isso dá uma probabilidade menor que (2 × 10100)10−199 = 2 × 10−99 de sortear um divisor próprio de n. Resta a esperança de que an−1 ⁄≡ 1 (mod n) para muitos a ∈{2,…,n − 2} tais que mdc(a,n) = 1.
Se pseudo-primos forem raros então poderíamos esperar que isso dá uma boa chance de descobrir uma testemunha a.
Exemplo 32 (pseudo-primos são raros17 ). Existem 21.853 pseudo-primos na base 2 menores que 2,5 × 1010, enquanto que a quantidade de primos é 1.091.987.405. No caso das bases 2 e 3 juntas, há apenas 23 pseudo-primos para ambas as bases no intervalo entre 1 e 100 mil.
Usando o algoritmo de exponenciação modular (algoritmo 7) para cada teste na linha 3, o teste de Fermat tem complexidade O(k log 3n).
Se o algoritmo responde composto então a resposta está certa, senão pode ocorrer que n é um número pseudo-primo para todas as bases escolhidas no laço repeat, nesse caso o algoritmo erra.
Se n é composto e ímpar então defina
| (103) |
Se o algoritmo respondeu errado então todos os sorteios escolheram algum elemento de Ln que é um o subgrupo do ℤn∗. Logo, pelo Teorema de Lagrange, m|Ln| = |ℤn∗| e se Ln for subgrupo próprio temos m ≥ 2, portanto, nesse caso a probabilidade do algoritmo errar em k sorteios independentes é menor que (1∕2)k. Entretanto, pode ocorrer m = 1 e nesse caso o algoritmo responde certo somente se escolher a tal que mdc(a,n) > 1, o que pode ser extremamente raro.
Existem inteiros pseudo-primos para todas as bases coprimas a eles, i.e., existe n tal que Ln = ℤn∗.
Números de Carmichael são extremamente raros, nos inteiros positivos até 1018 a quantidade18 de números de Carmichael é 1.401.644 enquanto que 24.739.954.287.740.860 é a quantidade19 de primos. Sobre a distribuição desses números, se c(n) é a quantidade de números de Carmichael até n, então é sabido que
Exemplo 33. A densidade dos números de Carmichael até 10256 é menor que 0,8 × 10−58. A seguinte figura mostra um gráfico da densidade c(n)∕n máxima dos números de Carmichael para n ∈ [0,10256]
Proposição 33 (Critério de Korselt). Um número inteiro n > 1 divide an−a para todo inteiro a se, e somente se, cada fator primo p de n satisfaz (i) p2 ⁄n; e (ii) p − 1n − 1.
Demonstração. Seja n tal que nan − a para todo a ∈ ℤ. Suponha que existe um fator primo p de n tal que p2n. Como npn − p temos p2pn − p que implica em ppn−1 − 1, um absurdo. Logo, vale (i). Agora, seja p um fator primo de n e a uma raiz primitiva módulo p. Claramente, a e p são coprimos. Como pn temos que pa(an−1 − 1), ou seja, pan−1 − 1 e como a é raiz primitiva módulo p temos p − 1n − 1. Assim, vale (ii).
Para a recíproca, considere um inteiro positivo n que satisfaz (i) e (ii) e seja p uma fator primo de n. Para qualquer inteiro a, se pa então pan − a, senão temos ap−1 ≡ 1 (mod p), pelo teorema de Fermat, e por (ii) temos an = aan−1 = aa(p−1)q ≡ a (mod p). Logo pan − a para todo fator primo p de n. Disso temos que ∏ pnpan − a, ou seja, an ≡ a (mod n). ♦
Teorema. n é um número de Carmichael se e semente se n é um composto que satisfaz o critério de Korselt.
Demonstração. Exercício. Mostre também que todo número de Carmichael é ímpar. ♦
Demonstração. Se n = pq então q − 1qp − q e p − 1 ⁄qp − 1, absurdo. ♦
Exercício 88 (Há infinitos pseudo-primos para qualquer base fixa). Sejam a > 1 e p > 2 primo. Mostre que
| (105) |
é pseudo-primo para a base a.
Exercício 89 (Generalização do teorema de Euler). Prove que
| (106) |
para todo a ∈ ℤn∗, onde n = p1m1p2m2pkmk e
| (107) |
O teste de Miller–Rabin deriva de uma primeira versão, de Miller, determinística mas baseada na validade da hipótese de Riemann generalizada (ainda uma conjectura). Rabin introduziu a aleatoriedade que dispensa essa hipótese20 .
A idéia desse teste é que se n é primo então para a ∈ ℤn∗ temos an−1 ≡ 1 (mod n) então a(n−1)∕2 ≡ 1 (mod n) ou a(n−1)∕2 ≡−1 (mod n); no primeiro caso temos a(n−1)∕4 ≡ 1 (mod n) ou a(n−1)∕4 ≡−1 (mod n), e assim por diante até que teremos ou a(n−1)∕2j ≡−1 (mod n) para algum j ou ar ≡ 1 (mod n) para r ímpar. Por outro lado, se em algum momento temos uma raiz quadrada de 1 módulo n diferente de ±1 (veja exercício 82 abaixo), então por repetidas exponenciações a 2 temos an−1 ⁄≡ 1 (mod n). Portanto, se n é primo então a seqüência a20r ,a21r ,a22r ,,a2sr módulo n é da forma (1,1,…,1) ou (−1,…,−1,1,1,…,1), mas se essa seqüência for da forma (…,b) com b≠1 ou (…,b,1,1,1,…,1) então n é composto e a é uma testemunha desse fato.
Proposição 35. Sejam n um primo ímpar e r,s inteiros tais que n − 1 = 2sr com r ímpar. Seja a um inteiro tal que mdc(a,n) = 1. Então ou ar ≡ 1 (mod n) ou a2jr ≡−1 (mod n) para algum j, 0 ≤ j ≤ s − 1.
Demonstração. Seja a como no enunciado, considere a seqüência
| (108) |
e seja t o menor inteiro tal que a2tr ≡ 1 (mod n); note que a2sr = an−1 ≡ 1 (mod n), portanto t está bem definido. Então, ou t = 0 e temos ar ≡ 1 (mod n) ou t ≥ 1 e
|
como n divide a2tr − 1 e, pela escolha de t, não divide a2t−1r − 1, necessariamente na2t−1r + 1, ou seja, a2t−1r ≡−1 (mod n). ♦
Exemplo 34. Seja n = 561, o menor número de Carmichael. Temos 560 = 2435. Para a = 2 temos 235 ≡ 263 (mod 561), 22135 ≡ 263 (mod 561), 22435 ≡ 263 (mod 561), finalmente 22335 ≡ 263 (mod 561), portanto, n é composto.
O algoritmo original de Miller, citado acima, é baseado no fato de valer a recíproca da proposição acima supondo a validade da hipótese de Riemann generalizada.
Definição 50 (pseudo-primo forte). Dizemos que um inteiro composto ímpar n é um pseudo-primo forte para a base a, 1 ≤ a < n, se para n− 1 = 2sr com r é ímpar vale
Defina para n composto e ímpar tal que
| (111) |
Exemplo 35. Para n = 91(= 7 × 13), n − 1 = 90 = 21 × 45. Como 9r = 945 ≡ 1 (mod 91) temos que 91 é pseudo-primo forte para a base 9. Ainda,
|
Vamos chamar a ∈ ℤn∗\ Ln′ de testemunha do fato de n ser composto.
_____________________________________________________________________
Cada divisão por 2 na linha 1 custa O(log n), portanto, no pior caso o custo é O(log 2n). O custo de Testemunha() é essencialmente o de s = O(log n) multiplicações módulo n, cada uma custa O(log 2n), portanto a complexidade de pior caso do teste é O(k log 3n).
O próximo resultado mostra que o número de testemunhas é abundante, o que propicia um ambiente bom para algoritmos aleatorizado.
Note que se n é primo então Ln′ = ℤn∗ segue da proposição 35.
Demonstração. Seja n = p1m1p2m2pkmk um inteiro ímpar e composto com n − 1 = 2sr para r ímpar. Defina
| (113) |
Note que que (−1)20 ≡−1 (mod n) e que t < max{ℓ: 2ℓλ(n)} (veja exercícios 89 e 90). Defina
| (114) |
onde
Ln′⊆ L: Se a ∈ Ln′ então ou ar ≡ 1 (mod n), portanto a2tr ≡ 1 (mod n), ou a2ir ≡−1 (mod n) para algum i, 0 ≤ i ≤ t, logo a2tr ≡±1 (mod n), ou seja a ∈ L.
Para provar o teorema notemos que |M||K|, |M||L|, |K||J| e |L||ℤn∗|, pelo teorema de Lagrange. Pela afirmação do parágrafo anterior o teorema segue de 4|L|≤|ℤn∗|. Para provar esse fato, considere que
| (115) |
Vamos provar daí que |ℤn∗|∕|L|≥ 4.
Primeiro, |L|∕|M| = 2: defina a relação de equivalência sobre L por a ≡ b (mod M) se e somente se ab−1 ∈ M. Logo a ≡ b (mod M) se e só se em amb−m ≡ 1 (mod n). Mas am ≡±1 (mod n) e b−m ≡±1 (mod n), portanto a ≡ b (mod M) se e só se am ≡ b−m (mod n). Logo, as duas classes de equivalência em L∕M são e .
Agora, vamos provar que |K|∕|M| = 2k. Defina
Voltando para (115) temos
| (116) |
portanto, se k ≥ 3 então |ℤn∗|≥ 4|L|. Se k = 2 então n não é um número de Carmichael, pelo corolário 34, logo existe a ∈ ℤn∗ tal que an−1 ⁄≡ 1 (mod n), ou seja, J≠ℤn∗. Como J é um subgrupo próprio |ℤn∗|∕|J|≥ 2, portanto, |ℤn∗|≥ 4|L|.
Finalmente, se k = 1 então n = pe com e ≥ 2. Usando o isomorfismo entre os grupos (ℤn∗,⋅) e (ℤφ(n),+) temos que o número de soluções módulo n de xn−1 ≡ 1 (mod n) é igual ao número de solução módulo φ(n) de (n − 1)x ≡ 0 (mod φ(n)), nesse caso |J| = mdc(n − 1,φ(n)) = mdc(pe − 1,(p − 1)pe−1) = p − 1. Exceto quando pe = 9 vale |ℤn∗|∕|J| = pe−1 ≥ 4; no caso n = 9 verifica-se que Ln′ = {−1,1}≤ (n − 1)∕4. ♦
Exercício 92. Prove as inclusões da equação (114).
Observação 22. Para a maioria dos inteiros compostos n a quantidade de bases para as quais n é pseudo-primo forte é bem pequeno, menor que φ(n)∕4. Por exemplo, para n = 105 temos L105′ = {1,104}. Entretanto, existe inteiro n tal que |Ln|∕φ(n) = 1∕4, como é o caso do 91, temos |Ln′| = 18, como vimos no exemplo 35, e φ(n) = 72.
Os maiores primos conhecidos ao longo da história tem sido, quase sempre, números de Mersenne. Isso ocorre devido à forma eficiente como é comprovada a primalidade de números de Mersenne.
Definição 51 (números de Mersenne, primo de Mersenne). Um número de Mersenne é um inteiro positivo da forma Mn = 2n − 1, para n > 1, se Mn é primo então é chamado primo de Mersenne.
O teste de Lucas-Lehmer é baseado na seguinte caracterização de primos de Mersenne que não será provado21 neste texto.
Teorema. Para todo n > 1 o número de Mersenne Mn = 2n − 1 é primo se e somente se
Não é sabido se existem infinitos primos de Mersenne. Também, não se sabe se existem infinitos primos p para os quais Mp é composto.
O seguinte resultado serve para “descartar” alguns números de Mersenne.
Demonstração. Ponha q = 2p + 1 e suponha que qMp. Se q não é primo então tem fator r com r ⁄≡ 1 (mod p) pois r < p. Se 2p + 1Mp então r é um fator de Mp. Se rMp então 2p ≡ 1 (mod r), como p é primo ordℤr∗(2) = pr − 1, ou seja, r ≡ 1 (mod p), uma contradição, portanto q é primo.
Se q é primo então Mp = 2p − 1 = 2(q−1)∕2 − 1 ≡ 0 (mod q) (exercício). ♦
Observação 23. Primos de Mersenne têm uma história longa, os pitagóricos batizaram de perfeito todo número n tal que a soma dos divisores positivos vale 2n, por exemplo 6, 28 e 496 são perfeitos. Euclides notou que se Mp é primo então 2p−1Mp é perfeito. Não é difícil provar quer todo número perfeito par é da forma 2p−1Mp para p primo e Mp primo. A seguinte conjectura é uma das mais antigas da matemática.
Observação 24. Note que se p é primo, Mp composto e q é um fator primo de Mp então 2p ≡ 1 (mod q), logo 2 tem ordem p em ℤq∗, portanto pq − 1, dai p < q. Desse fato podemos derivar uma demonstração de que existem infinitos números primos.
18.1. Teste baseado em fatoração.
Existem alguns testes para primalidade de n baseados na fatoração de n + 1 ou de n− 1. Esses testes funcionam bem quando essas fatorações são fáceis como é o caso dos números de Fermat e de Mersenne.
O próximo teste é aleatorizado e funciona se é conhecida a fatoração e n− 1. A idéia é que se existe a tal que
então pelo corolário 24 (página 101) a tem ordem n − 1, como n − 1 deve dividir φ(n) ≤ n − 1 temos que φ(n) = n − 1, ou seja, n é primo. Suponha que n é primo; se sorteamos a e aplicamos os testes (1) e (2) então a probabilidade de escolher um elemento de ordem n − 1 é φ(n − 1)∕(n − 1) (veja corol. 22), portanto, o número esperado de sorteios até descobrirmos uma testemunha de que n é primo é μ = n − 1∕φ(n − 1). Usando o fato que para todo n ≥ 5
| (117) |
então μ < 6lnln(n − 1).
A probabilidade do número de rodadas até encontrar uma testemunha ser maior que k é, usando a desigualdade de Markov, menor que μ∕k. Com k = 12lnlnn essa probabilidade é menor que 1∕2 e com k = lnn a probabilidade tende a zero.
Cada iteração no algoritmo calcula uma exponencial para cada fator primo de n. Uma exponenciação modular custa O(log 3n) e são O(log n) fatores, portanto a complexidade é O(k log 4n).
O teste de Lucas requer uma fatoração completa de n − 1. O seguinte resultado permite um teste conhecendo-se somente uma parte da fatoração.
Teorema (Pocklington, 1914). Suponha n − 1 = qkR com q primo que não divide R. Se existe um inteiro a tal que an−1 ≡ 1 (mod n) e mdc(a(n−1)∕q − 1,n) = 1, então todo fator primo de n é congruente a 1 módulo qk.
Demonstração. Seja p um divisor primo de n, e seja m a ordem de a módulo p. Então mn − 1 (primeira hipótese sobre a), mas não divide (n − 1)∕q (segunda hipótese), logo qkm. O resultado segue de mp − 1. ♦
Corolário 40. Se n− 1 = FR, com F > R, e para todo fator primo q de F existe a > 1 tal que (i) an−1 ≡ 1 (mod n) e (ii) mdc(a(n−1)∕q − 1,n) = 1, então n é primo.
Demonstração. Tome qk a maior potência de q que divide F. Todo fator primo de n deve ser côngruo a 1 módulo qk, portanto côngruo a 1 módulo F; F > implica que n é primo. ♦
Exercício 95 (teste de Pépin, 1877). Seja Fn = 22n + 1 o n-ésimo número de Fermat (veja seção 2.1). Prove que Fn é primo se e somente se 3(Fn−1)∕2 ≡ −1 (mod Fn) (Dica: o “se” segue do exercício 61, a prova do “somente se” precisa de um resultado chamado de lei da reciprocidade quadrática, veja a entrada da Wikipedia para
Exercício 96 (teste de Proth, 1878). Uma quantidade relevante do maiores primos conhecidos são caracterizados pelo resultado a seguir, devido a fácil implementação desse teste. Prove o seguinte:
Seja n = r2s + 1 com 2s > r. Então n é primo se e somente se existe um inteiro a tal que a(n−1)∕2 ≡−1 (mod n).
Seja n = rqs + 1 com q primo e qs > r. Prove que se existe um inteiro a tal que an−1 ≡ 1 (mod n) e mdc(a(n−1)∕q − 1,n) = 1, então n é primo.
Exercício 97. Derive algoritmos para testar primalidade para os casos particulares tratados nos dois exercícios acima. Determine a complexidade dos algoritmos.
A seguir veremos com um pouco mais de detalhes a técnica dada no começo dessa seção para gerar primo: sorteie um número e teste primalidade até que tenha-se um número primo.
Com a tecnologia atual números até 1012 são rapidamente gerados por boas implementações do Crivo de Eratóstenes.
Uma técnica mais recente é o Crivo de Atkin–Bernstein22 que testa inteiros representados por formas quadráticas, por exemplo, um inteiro positivo p ≡ 1 (mod 4) não-divisível por um quadrado é primo se e somente se o número de soluções (x,y) positivas de 4x2 + y2 = p é ímpar. Um dos autores mantém uma implementação desse algoritmo em http://cr.yp.to/primegen.html onde afirma que a implementação gera os 50.847.534 primos até 1.000.000.000 em 8 segundos em um Pentium II-350. O crivo de Atkin–Bernstein computa primos até n realizando O(n∕log log n) operações enquanto que o crivo de Eratóstenes realiza O(n) operações.
Vamos assumir que temos uma fonte de bits aleatórios que fornece bits com distribuição uniforme e em tempo constante.
Notação 52. Escrevemos s ←R{0,1}k nos algoritmos para denotar que s recebe da fonte uma string de k bits aleatórios. Denotamos por (s)10 o número s em notação decimal.
Denote por I, T e N as variáveis aleatórias “número de iterações do repeat”, “tempo de execução” e “valor devolvido”, respectivamente. Note que n na linha 3 tem distribuição uniforme sobre o conjunto {0,1,…,2k − 1}, portanto, Pr(n < M) = M∕2k. A variável I tem distribuição geométrica com probabilidade de sucesso M∕2k, portanto o número esperado de iterações é E(I) = 2k∕M ≤ 2. O tempo do algoritmo é T = O(k)I, logo E(T) = O(k). Note que Pr(N = n|n < M) = 1∕M.
Uma versão mais eficiente seria devolver n modM, o que evitaria a execução de mais que uma iteração do repita, entretanto, o resultado não tem distribuição uniforme em {0,…,M}. Isso pode ser visto tomando M = 5, teríamos qualquer um dos números 0,1,2 duas vezes mais prováveis que os números 3 e 4.
Exercício 98. Suponha que temos uma fonte de bits aleatórios que devolve 1 com probabilidade p e 0 com probabilidade q = 1 − p, independentemente, onde p≠q. Mostre como obter bits com distribuição uniforme dessa fonte.
Observação 25. Para obtermos n aleatório uniformemente no intervalo B = {a,…,b} basta executar o algoritmo acima com M = b − a e devolver n + a.
Notação 53. Denotamos por n ←RB o fato de n receber um inteiro do intervalo B dado pelo algoritmo 24 segundo a observação 25 acima.
Denote por I, T e N as variáveis aleatórias “número de iterações do repeat”, “tempo de execução” e “valor devolvido”, respectivamente. Na análise desse algoritmo vamos usar o teorema dos números primos donde derivamos que se π(n) é a quantidade de primos menores ou iguais a n então π(n) = Θ(n∕log n). Na linha 2 temos Pr(n primo) = π(M)∕(M − 1), portanto, E(I) = (M − 1)∕π(M) = Θ(k).
Vamos supor que Teste_Primo(n) é um algoritmo determinístico que decide primalidade. Considere o conjunto de instâncias B = {2,3,…,M} e denote por TP(n) o tempo gasto pelo algoritmo determinístico para decidir primalidade numa instância n ∈ B. Então o tempo esperado, se todas as instâncias são eqüiprováveis, é
Agora, se Teste_Primo(n) é um algoritmo aleatorizado que devolve falso caso n é composto e verdadeiro caso n seja, provavelmente, primo (equivalentemente, devolve composto ou provável primo com a notação que já usamos), então o tempo esperado de execução envolve a distribuição de probabilidade em I e a distribuição dos bits aleatórios usados pelo algoritmo de teste de primalidade
Seja Teste_Primo(n) um algoritmo aleatorizado como acima com probabilidade de responder errado no máximo ε, para algum ε > 0.
Numa iteração do laço, seja C o evento “n, sorteado na linha 2, é composto”, que ocorre com probabilidade δ, e S o evento “Teste_Primo(n), na linha 3, declara n primo”. A probabilidade do algoritmo 25 devolver um número composto numa iteração é Pr(C ∩ S).
O número esperado de iterações do repita é E(I) = 1∕Pr(S). De
|
temos
| (118) |
A probabilidade do algoritmo 25 devolver um número composto é dada por Pr(N é composto) = ∑ i≥1Pr(Ci), onde Ci é o evento “devolve um composto na i-ésima iteração”. Claramente, Pr(Ci) = Pr(C ∩ S)Pr(I ≥ i), logo
Teorema. No algoritmo 25, se δ é a probabilidade de n receber um número composto na linha 2 e ε é a probabilidade de Teste_Primo(n) errar linha 3 então
| (119) |
19.3. Números primos com k bits.
O postulado de Bertrand garante que para todo inteiro positivo n existe um primo p tal que n < p < 2n. Uma versão mais forte desse famoso resultado23 garante que existem mais que n∕(3log(2n)) primos nesse intervalo.
Esse fato garante que existem mais que 2k−1∕(3log(2k)) ≈ 2k−1∕k primos com k bits para todo k ≥ 2. Assim, a probabilidade de um sorteio (uniforme) no intervalo {2k−1,…,2k − 1} produzir um primo é ≈ 1∕(2k), logo E(I) = O(k) e o algoritmo 25 modificado de acordo com a observação 25 erra com probabilidade 2kε, aproximadamente.
19.4. Usando o teste de Miller–Rabin.
No caso do teste de Miller–Rabin vimos, corolário 36, que ε < (1∕4)t, onde t é o número de rodadas. Da seção anterior resulta que o gerador de primos baseado no teste de Miller–Rabin erra com probabilidade menor que
| (121) |
O tempo esperado de execução do teste de Miller–Rabin é μM = O(tk3), portanto, gerar um número primo tem tempo esperado E(T) = (O(tk3 + O(k))O(k) = O(tk4). Esse tempo está superestimado se observarmos que quando n é composto então esperamos que o teste de Miller–Rabin termina antes das t rodadas.
Seja Z o número de rodadas do teste; quando n é primo Y = t e quando n é composto esse fato é detectado com probabilidade pelo menos 3∕4.
Como já foi comentado, o teste de primalidade do número sorteado pode
ser mais eficiente se testamos na força-bruta os casos pequenos. Assim, um
gerador de prováveis primos baseado no teste de Miller–Rabin pode ser escrito
como
_____________________________________________________________________
Certamente, o algoritmo acima não tem probabilidade de erro maior que (121). Boas estimativas24 para ε mostram que (121) está superestimada freqüentemente. Por exemplo, se for possível tolerar a probabilidade de erro de (1∕2)80, então para gerar um número de 1000 bits é suficiente tomar t = 3.
Ainda, podemos combinar esse teste com algumas informações conhecidas25 sobre pseudo-primos fortes para a base a que abreviamos a-pspf:
Os primeiros três deles são de Pomerance, Selfridge e Wagstaff26 , e todos os outros são devidos a Jaeschke27 . No mesmo artigo Jaeschke considerou outros conjuntos de primos e encontrou resultados ligeiramente melhores
e por Charles Geathouse28
19.5. Usando o teste de Fermat.
O que faz o teste de Fermat apropriado para gerar números primos aleatoriamente é a raridade dos pseudo-primos; usando estimativas de Pomerance29 é possível provar que um número de 1024 bits escolhido aleatoriamente será pseudo primo na base 2 com probabilidade menor que 10−41.
Observação 27 (Primos no PGP30 ). O teste Fermat é usado pelo PGP com k = 4 para gerar números primos. A chance do PGP gerar um número de Carmichael é menor que 1 em 1050.
Su Hee Kim e Carl Pomerance31 consideraram a probabilidade Pr(x) que um pseudo-primo menor que x é composto. Mais especificamente, dado x então Pr(x) é a probabilidade de n ser composto dado que
dígitos de x | limitante para Pr(x) |
500 | 2.3 × 10−55 |
700 | 1.8 × 10−82 |
1000 | 1.2 × 10−123 |
2000 | 8.6 × 10−262 |
5000 | 7.6 × 10−680 |
10000 | 1.6 × 10−1331 |
100000 | 1.3 × 10−10584 |
Por exemplo, se você escolher um aleatoriamente um número ímpar n de 120 dígitos, escolher uma base a tal que n é um pseudo-primo ara a então a a probabilidade de que n é composto é inferior a 0,00000000000528. Foi mostrado por Erds e Pomerance que Pr(x) → 0 conforme x →∞.
Seja (A,+,⋅) um anel comutativo.
Definição 54 (ideal). I ⊆ A é um ideal de A se (I,+) é um subgrupo de (A,+) e ai ∈ A para todos a ∈ A e i ∈ I.
Com essa definição a multiplicação em A define naturalmente uma multiplicação em A∕I = .
Definição 55 (anel quociente). Se I é um ideal do anel A então o conjunto das classe de equivalência módulo I com a soma [a]I + [b]I = [a + b]I e a multiplicação [a]I[b]I = [ab]I é um anel, chamado de anel quociente.
Notação 56 ((a1,…,ak)). Dados {a1,…,ak}⊆ A denotamos por (a1,…,ak) o menor subanel de A que contém {a1,…,ak}.
Exercício 101. Considere o anel ℤn[X]. Determine o subgrupo ⟨X⟩ do grupo (ℤn[X],+) e o ideal (X) do anel (ℤn[X],+,⋅).
O anel que interessa no momento é o anel de polinômios ℤn[X].
Seja f,g,h ∈ ℤp[X], p primo, com g de grau n. Então para [h] ∈ ℤp[X]∕(g) temos f ∈ [h] se e somente se gh − f portanto, pelo teorema da divisão para polinômios a classe [h] tem um único polinômio mônico de grau < n, assim toda classe pode ser representada por um polinômio mônico de grau menor que n. Note que [g] = [0], ou seja, supondo que g = Xn + an−1Xn−1 + + a1X + a0 temos
| (122) |
Exemplo 36. Considere o anel quociente ℤ2[X]∕(X2 + X + 1). Claramente,
|
De acordo com (122) temos [X2] = [−X − 1] = [X + 1]. Ainda
|
portanto, a tabela de multiplicação desse anel é
⋅ | [0] | [1] | [X] | [X + 1] |
[0] | [0] | [0] | [0] | [0] |
[1] | [0] | [1] | [X] | [X + 1] |
[X] | [0] | [X] | [X + 1] | [1] |
[X + 1] | [0] | [X + 1] | [1] | [X] |
Demonstração. Se n é primo, então n divide para i ∈, portanto (X + a)n = Xn + an em ℤn[X] e (123) segue do teorema de Fermat.
Por outro lado, se n > 1 é composto, seja pk a maior potência do primo p que divide n. Então n = pkc e
|
Se pk divide o lado direito então p, absurdo. Também, como a e n são coprimos mdc(pk,mdc(an−q,pk) = 1, logo o coeficiente de Xp em (X + a)n, é não-nulo. ♦
O resultado acima foi a base de um algoritmo probabilístico polinomial de Agrawal e Biswas32 e é uma generalização do pequeno teorema de Fermat.
Exercício 103. Deduza o teorema de Fermat a partir do teorema 20.1.
Exercício 105. Um polinômio em ℤp[X], onde p é primo, é dito irredutível se não pode ser escrito como produto de polinômios de grau menor. Prove que se p(X) é irredutível então ℤp[X]∕(h(X)) é um corpo.
O teste dado pelo teorema 20.1 não é prático porque computar os coeficientes do lado esquerdo de (123) toma tempo Ω(n). Uma alternativa seria avaliar tal identidade módulo um polinômio de forma Xr − 1 no anel ℤn[X] para uma escolha apropriada de r com r = poly(log n), ou seja, usar o teste
| (125) |
Se n é primo então a equação (125) vale, mas a recíproca não vale. Agrawal, Kayal e Saxena contornaram essa dificuldade mostrando que se (125) vale para uma quantidade polinomial (em log n) de valores de a então n é uma potência de primo.
Teorema. Sejam s,n ∈ ℕ, s ≤ n, inteiros positivos. Sejam q e r primos tais que qr − 1 e n(r−1)∕q modr ⁄∈{0,1}, e
| (126) |
Se para todo a ∈ vale que a é coprimo a n e vale (125) então n é uma potência de primo.
Antes de provar esse teorema, vamos estabelecer o seguinte.
Proposição 42. Sejam n,r,a,p inteiros, p primo, tais que [(X + a)n] = [Xn + a] em ℤp[X]∕(Xr − 1). Então
| (127) |
em ℤp[X]∕(Xr − 1) para qualquer inteiro i ≥ 0.
Demonstração. Para i = 0 é trivial e para i = 1 vale por hipótese. A prova segue pro indução, suponha que vale para i ≥ 0. Da hipótese da proposição temos que (X + a)n = Xn + a + q(X)(Xr − 1) e substituindo n por ni temos
|
e como [Xnir − 1] = [0] no anel ℤp[X]∕(Xr − 1) temos
|
e usando a hipótese indutiva [Xni + a]n = [(X + a)ni ]n = [X + a]ni+1 , logo
|
♦
Idéia da demonstração do teorema 20.2. Sejam r,q primos tais que qr − 1, p um primo que divide n tal que p(r−1)∕q modr ⁄∈ {0,1}; tal p existe pois se todos os fatores de n não tivessem a propriedade então n também não teria. Considere os produtos da forma t = nipj, onde 0 ≤ i,j ≤; note que 1 ≤ t ≤ n2. Como há (+1)2 > r pares, pelo princípio da casa dos pombos existem t1 e t2 côngruos módulo r. Note que se t1 = t2 então n é potência de p.
Usando a proposição anterior, o exercício 104 e o teorema de Fermat
|
no ℤp[X]∕(Xr − 1). Portanto [(X + a)tj] = [Xtj + a](∀j ∈).
De t1 ≡ t2 (mod r) temos Xr − 1|Xt1 − Xt2 e da equação acima
Seja h ∈ ℤp[X]∕(Xr−1) um fator irredutível (Xr − 1)∕(X − 1) = Xr−1 + + X + 1; é sabido, e vamos assumir aqui, que o grau desse polinômio é a ordem (multiplicativa) de p módulo r, portanto maior ou igual a q, caso contrário p(r−1)∕q ≡ 1 (mod r).
Seja G = ⟨{X + a: a ∈{1,2,…,s − 1}}⟩ subgrupo do grupo multiplicativo do corpo ℤp[X]∕(h(X)). Os elementos de G são da forma ∏ a∈S(X + a)ma onde ∑ma ≤ q − 1. De p(r−1)∕q ⁄≡ 0,1 (mod r) pode ser mostrado que |G|≥.
Note que [(X + a)t1] = [(X + a)t2] para todo 1 ≤ a < s. Em G temos gt1 = gt2 para todo g ∈ G. Se t1≠t2 então gt1 = gt2 tem no máximo |t1 − t2| soluções num corpo.
Observação 28. É conjeturado que se r > 1 não dividir n e (125) vale, então n é primo ou n2 ≡ 1 (mod r).
Se n é primo as condições das linhas 1 e 4 são falsa. Pelo teorema 20.1 a condição da linha 5 também é falsa, portanto o algoritmo responde primo. Por outro lado, se o algoritmo responde primo, então n não é da forma ab com b > 1, mdc(c,n) = 1 para todo c ∈ e (125) vale. Um teorema não trivial de Fouvry33 garante a existência de r e q como na hipótese com
| (128) |
assim podemos tomar s = 2log n que vale a desigualdade (123), portanto, pelo teorema 20.2 n = p1.
20.3. Análise da complexidade .
No que segue usaremos a notação (f(n)) para denotar a classe das funções O(f(n)poly(log f(n))).
A linha 1 pode ser feita em tempo (log n).34 Um algoritmo de complexidade (log 3n), mas bastante simples, é o seguinte
Vamos verificar que esse algoritmo executa O(log 2nlog log n) multiplicações. O número de multiplicações é O(log b) para a linha 3 mais o número de multiplicações na linha 2. Nessa linha
A convergência do método de Newton é quadrática, portanto, o repeat é executado no máximo log() = O(log log n) vezes, a linha 4 contribui com O(log n) multiplicações, portanto, o método de Newton realiza O(log nlog log n) multiplicações. Com isso, n = ab pode ser decidido com O(log 2nlog log n) multiplicações de números de tamanho O(log n), logo a complexidade é O(log 4nlog log n). Se usamos Transformada Rápida de Fourier, ao invés do algoritmo usual de multiplicação, o custo de cada multiplicação de números de tamanho O(log n) é O(log nlog log n), o que resulta num algoritmo para decidir potência com complexidade O(log 3n(log log n)2) = (log 3n).
Exercício 107. Uma alternativa ao método acima para determinar se n é da forma ab é com segue: seja k tal que 2k−1 ≤ n < 2k; então uma b-ésima raiz de n pertence ao intervalo 2 ≤ n1∕b < 2 e podemos fazer uma busca binária nesse intervalo. Descreva o algoritmo em detalhes e determine a complexidade.
De volta ao algoritmo 27, o custo da linha 4 é s ⋅ O(log n) = O(slog n).
Na linha 5, [Xn + a] pode ser representado por Xn modr + a pois [Xn] = [Xqr+n modn] = [(Xr)qXn modr] = [Xn modr] (veja (122)). No lado direito da congruência podemos adaptar facilmente o algoritmo 7 para computar (X + a)n.
A linha 6 garante que serão O(log n) multiplicações de polinômios de grau < r, e os coeficientes são de tamanho O(log n), portanto, o custo é O(log n)O(r log 2n), ou O(log n)O(r log nlog log n) se usamos transformada rápida de Fourier para multiplicação de polinômios. Falta computar o custo da linha 6. Como P(X) tem grau no máximo r − 1 temos
Finalmente, de (128) resulta a complexidade polinomial para o AKS: (log 12n).
O algoritmo 27 um pouco mais refinado fica da seguinte forma.
Exercício 108. O seguinte algoritmo aleatorizado “decide” primalidade. Determine
em que caso o algoritmo erra e qual é a probabilidade da resposta errada.
Observação 29. Veja em http://cr.yp.to/papers.html#aks uma exposição de J. Bernstein sobre o AKS e que contém diversas melhorias, inclusive reduzem as constantes envolvidas no tempo por uma fator de pelo menos 2.000.000. Esta é talvez a melhor fonte no momento para estado-da-arte desse algoritmo.
Exercício 109. Se trocarmos φ(n) por λ(n) no RSA o sistema funcionaria? Justifique. Se a resposta foi sim, tem alguma vantagem ou desvantagem?
Exercício 110. Considere o seguinte algoritmo para n > 2 ímpar
Prove que esse algoritmo retorna divisores n.
Exercício 111. Mostre um algoritmo baseado no exercício anterior que se n = pq com p e q primos tais que |p−q|é pequeno então n pode ser fatorado eficientemente.
Exercício 112. No RSA, suponha que Alice mantenha duas chaves privadas ao invés de uma, a saber as chaves dp = e−1 modp e dq = e−1 modq. Quando ela recebe uma mensagem cifrada C = Me modn ela computa Mp = Cdp modp e Mq = Cdq modq e usa o Teorema Chinês do resto para determinar x tal que
|
Prove que x ≡ M modn. É possível recuperar M? Esse esquema é mais eficiente que o apresentado em aula?
Exercício 113. Fixado n, sejam d e (e,n) um par de chaves RSA. Suponha que existe um algoritmo polinomial no tamanho da representação de n que decide se e é invertível módulo φ(n) e em caso positivo devolve o inverso. Mostre que existe um algoritmo de tempo log O(1)(n) que computa φ(n)
Exercício 114. Suponha que três servidoras A, B e C usam RSA para autenticação de usuário e as chaves públicas são (3,nA), (3,nB) e (3,nC). Suponha que yA,yB,yC possam ser lidos dos arquivos dos sistemas, onde ym = x3 modnm (m ∈{A,B,C}). Mostre que se Alice logar nas três máquinas então a senha dela pode ser computada de modo eficiente.
Exercício 115. Escreva um algoritmo que receba dois polinômios f,g ∈ ℤp[X] com g(X)≠0 e devolva q(X),r(X) ∈ ℤp[X] tais que
| (129) |
onde r(X) = 0 ou o grau de r(X) é menor que o grau de g(X).
Determine a complexidade do algoritmo.
Exercício 116. Suponha que temos uma fonte de bits aleatórios que devolve 1 com probabilidade p e 0 com probabilidade q = 1 − p, independentemente, onde p≠q. Mostre como obter bits com distribuição uniforme dessa fonte.
Exercício 117. Prove que com probabilidade maior que zero o seguinte algoritmo não pára.
Exercício 118. O objetivo desse exercício é mostrar que se um adversário consegue decifrar 1% das mensagens codificadas com o RSA então ele consegue decifrar todas.
Suponha que E(e,n)−1 pode ser computada para εφ(n) elementos do ℤn∗ em tempo t. Prove os enunciados a seguir e conclua que existe um algoritmo aleatorizado que computa E(e,n)(y), para todo y, em tempo esperado t∕ε.
(a) Mostre que se z ←Rℤn∗ então z, ze e zey são identicamente distribuídos para todo y ∈ ℤn∗.
(b) Suponha A um algoritmo de tempo t para o qual existe Y ⊆ ℤn∗ com εφ(n) elementos tal que A(y)e = y para todo y ∈ Y . Prove que
|