Software de Telecomunicações
Prof RG Crespo Software de Telecomunicações Teoria números : 1/37
Teoria dos números
Números primos (1)
O conjunto dos inteiros {...,-2,-1,0,1,2,...} é representado por ℤ.
Definição: A divisão de a por b (b≥1), a/b, é um par (q,r) tal que a = q.b+r (q é designado por quociente, r por resto). b é divisível por a, a|b, sse o resto de a/b for 0 (ex: 3|9) b é divisível por a, a|b, sse o resto de a/b for 0 (ex: 3|9)
Nota: A soma e a subtração de dois inteiros é O(log n), o produto e a divisão de dois inteiros é O(log2n).
Definição: um número p é primo sse existirem apenas dois divisores (1|p e p|p).
Números primos (2)
Teorema fundamental da aritmética: Qualquer número n pode ser representado por um produto de números primos. Ex: 4200 = 23.3.52.7, 10780=22.5.72
2113 - 1= 3391.23279.65993.1868569.1066818132868207
Prof RG Crespo Software de Telecomunicações Teoria números : 3/37 Definição: O maior divisor comum de dois números a b,
gcd(a,b) é o maior inteiro d tal que d|a e d|b.
Basta factorizar os dois números e tomar os primos comuns com o menor dos expoentes.
Ex: gcd(4200,10780) = 22.5.7 = 140
Números primos (3)
Nota1: gcd(a,b)=gcd(b,a).
Nota2: factorização de números é operação custosa
– 1994: a aplicação do QS-Quadratic Sieve distribuída por 1600 computadores conseguiu factorizar número RSA-129 em 8 meses.
– 2005: factorizado número RSA-560.
Definição: Dois números a b são primos entre si, sse gcd(a,b)=1. Afirma-se que a é co-primo de b.
Números primos (4)
Algoritmo de Euclides(determina gcd(a,b) sem cálculo da factorização)
1. Para calcular gcd(a,b), calcular a divisão do maior número pelo menor: a = q.b+r
2. Se r≠0, voltar ao passo 1 e calcular gcd(r,b). Se r=0, gcd(a,b) = b
Algoritmo de Euclides é O(log3n)- log n divisões * O(log2n) cada divisão
Prof RG Crespo Software de Telecomunicações Teoria números : 5/37
Algoritmo de Euclides é O(log3n)- log n divisões * O(log2n) cada divisão Ex: Determinar gcd(1547,560) 1547 = 2.560 + 427 calcular gcd(427,560) 560 = 1.427 + 133 calcular gcd(427,133) 427 = 3.133 + 28 calcular gcd(28,133) 133 = 4.28 + 21 calcular gcd(28,21) 28 = 1.21 + 7 calcular gcd(7,21) 21 = 3.7 + 0 gcd(1547,560)=7 por multiplicação russa
Números primos (5)
Proposição: Se d = gcd(a,b), existem dois números u e v tais que d=ua+vb: para calcular u,v basta inverter o algoritmo de Euclides, substituindo os restos pelas igualdades anteriores.
Ex:7 = 28 – 1.21 = 28 –1.(133-4.28) ↔ 5.28 - 1.133 = 5.(427 – 3.133) – 1.133 ↔ 5. 427 – 16.133 = 5.(427 – 3.133) – 1.133 ↔ 5. 427 – 16.133 = 5. 427 – 16.(560 – 1.427) ↔ 21.427 – 16.560 = 21.(1547 – 2.560) – 16.560 ↔ 21. 1547 – 58.560
Nota: a proposição permite facilmente calcular o inverso de um número módulo M, se M for primo.
Números primos (6)
Algoritmo estendido de Euclides:determina triplo (d,x,y) tal
que ax+My=d: se d=1, então x=a-1mod M.
Função Euclides-estendido(a,b) se b=0 retornar (a,1,0);
Prof RG Crespo Software de Telecomunicações Teoria números : 7/37 se b=0 retornar (a,1,0); k := a/b; r := a mod b; (d,x,y) := Euclides-estendido(b,r); retornar (d,y,x-ky);
Números primos (7)
Exemplo: determinar 123-1mod 1003
a b k r Retorna 1003 123 8 19 (1,13,-106) 123 19 6 9 (1,-2,13) 123 19 6 9 (1,-2,13) 19 9 2 1 (1,1,-2) 9 1 9 0 (1,0,1) 1 0 - - (1,1,0) • 123-1mod 1003 ≡ -106 ≡ 897
Números primos (8)
Definição: A função Euler totient, ϕ(n) = #{0≤b<n | gcd(b,n)=1} indica o número de todos os valores co-primos de n.
– ϕ(1) = 1
– ϕ(p) = p-1, para todos os primos de p
Prof RG Crespo Software de Telecomunicações Teoria números : 9/37
– ϕ(p) = p-1, para todos os primos de p
– se n=pq (p,q primos), então ϕ(n) = (p-1)(q-1)
Proposição: Se a for primo relativo de n, então aϕ(n)= 1 mod n
Números primos (9)
Definição: A função π(n) indica o número de primos menores que n.
Os primos até 25 são: 2, 3, 5, 7, 11, 13, 17, 19 e 23. Logo, π(3) = 2, π(10) = 4, π(25) = 9.
Teorema números primos: π(n) é da ordem de n/(ln n – a), com a ≅ 1.
Nota: há zonas em que os primos estão mais concentrados (ex: 1_000_000_000_061, 1_000_000_000_063) e noutras mais
Números primos (10)
Consequência 1: há muitos números primos por onde escolher!
Ex: π(1020) ∈ O(1020 /19) ≅ 5.2 *1018 (na realidade,
π(1020) = 2 220 819 602 560 918 840 ≅ 2.2 *1018 ) .
Consequência 2: a procura de um primo não é muito pesada.
Prof RG Crespo Software de Telecomunicações Teoria números : 11/37 Consequência 2: a procura de um primo não é muito pesada.
Em média, os números primos estão afastados O(ln n): como os pares e múltiplos de 5 não contam, a procura é 0.4 * ln n
Ex: para procurar um primo à volta de 2200 (200 dígitos
binários), devem ser necessários 0.4(ln 2200)=55 testes.
Números primos (11)
• Computação distribuída permite determinar números primos cada vez maiores.
• O maior número primo, • O maior número primo, identificado em Agosto 2008, é 243,112,609-1 com
12_978_189 dígitos decimais.
Nota: Os primos Mersenne possuem a forma 2n-1, sendo
conhecidos 49 (31= 25-1 é primo, mas 2047 = 211-1 não é
Primalidade (1)
Como escolher um número primo?
A. Por aproximação Hardly e Wright, procurar nos valores próximos prime(n) ∼ n(log n+log log n –1)
Ex: prime(106) ∼ 15 400 000: na realidade é 15 485 863.
Impraticável: para n elevado a distância entre dois primos é O(log n)
Prof RG Crespo Software de Telecomunicações Teoria números : 13/37
e determinar se número é primo custa!
B. Gerar um número aleatório n ímpar, n≠5 e verificar se é primo com um teste de primalidade (ex, Rabin-Miller). Se não for, procurar à volta de lg N. Se não conseguir encontrar, gerar novo número aleatório e procurar nessa zona.
Esta é a estratégia usada na cifra RSA para gerar números aleatórios de grande dimensão.
Primalidade (2)
Peneira de Eratosthenes (“sieve”)
– Descoberto em 250 AC
– Método determinista, mas pouco eficiente para números de grande dimensão.
1. Escrever todos os números de 2 an-1. 2. Fazer d←2 (primeiro primo).
3. Se n não for divisível por d, eliminar da lista todos os múltiplos de d.
4. Se a lista não estiver vazia, d←primo seguinte e regressar a 3. Se a lista estiver vazia, n é primo
Primalidade (3)
[Exemplo] Seja n=17
– Lista: 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 d←2: 17 não é divisível por 2!
Eliminados múltiplos de 2 (2 4 6 8 10 12 14 16) – Lista: 3 5 7 9 11 13 15
d←3: 17 não é divisível por 3! d←3: 17 não é divisível por 3! Eliminados múltiplos de 3 (3 9) – Lista: 5 7 11 13 15
d←5: 17 não é divisível por 5! Eliminados múltiplos de 5 (5 15) – Lista: 7 11 13
d←7: 17 não é divisível por 7! Eliminados múltiplos de 7 (7) – ...
Prof RG Crespo Software de Telecomunicações Teoria números : 15/37
Primalidade (4)
Teste de Rabin-Miller1. Calcular k,m (ímpar) tal que n-1= m.2k.
Nota: O cálculo é rápido: deslocar para a direita enquanto a divisão for par, k é o número de deslocamentos, m é a divisão ímpar.
2. Seleccionar base, tal que 1 ≤ b < n. 3. a ← bm mod n
i. Se a=n-1, então n pode ser primo.
ii. Se algum dos valores a2 mod n, a4 mod n, …, a2^(k-1) mod n for igual n-1,
então n pode ser primo.
iii. Se falhar 3.1 e 3.2, então n não é primo.
• Se o número for candidato a primo, efectuar o teste normal
Nota: pode revelar que, afinal, não é primo!
Primalidade (5)
Exemplo: Vejamos se n=29 é primo1. 28 = 14.2 = 7 . 22 2. Seleccionar base b=10 3. a ← 107mod 29 ≡ 17
1. a ≠ 28
2. (107 )2mod 29 ≡ 28. Pode ser primo (na realidade é!)
Prof RG Crespo Software de Telecomunicações Teoria números : 17/37
2. (107 )2mod 29 ≡ 28. Pode ser primo (na realidade é!)
Exemplo: Vejamos se n=221 é primo
1. 220 = 110.2 = 55 . 22 2. Seleccionar base b=5 3. a ← 555mod 221 ≡ 112
1. a ≠ 220
2. (555 )2mod 221 ≡ 168≠ 220 (nota: como k=2, não existem mais testes)
3. Conclui-se que 221 não é primo (nota: factorizando, tem-se 221=13*17)
Primalidade (6)
Teorema pequeno de Fermat (“Fermat Little Theorem”): Se p é co-primo de a, então ap-1=1 mod p.
Ex: 7 e 3 são co-primos, pelo que 72=1 mod 3.
Igualmente, 390=1 mod 91 [nota: 91 não é primo]
Os números (a,p) são designados pseudo-primos. Os números (a,p) são designados pseudo-primos.
Congruência (1)
Definição: a é congruente a b módulo M, a≡b mod M, sse (a–b)|M. M é designado módulo da congruência.
Ex: 17 ≡ 4 mod 26, porque 13|26.
– Os números ZM={0,1,…,M-1} formam um anel de inteiros módulo M com operadores +,* módulo M.
– Frequentemente, a≡b mod M é representado por a=b modM
Prof RG Crespo Software de Telecomunicações Teoria números : 19/37
– Frequentemente, a≡b mod M é representado por a=b modM
• A aritmética modular foi explorada em primeiro lugar por Gauss.
• A relação de congruência é fundamental na cifra, uma vez que todas as alterações não devem sair do alfabeto a cifrar/ decifrar.
Congruência (2)
• As congruências, com o mesmo módulo, podem ser somadas / subtraídas ou multiplicadas.
Se a≡b mod M e c≡d mod M, então a±c≡b±d mod M e ac≡bd mod M.
Ex: 3 = 3 mod 9, 4 = 4 mod 9, logo 3+4 = 7 mod 9 3 = 3 mod 9, 8 = 8 mod 9, logo 3+8 = 2 mod 9
• O zero é elemento neutro da adição. x+0≡x mod M ≡ 0+x mod M
Congruência (3)
Tal como em Z, os aneis ZM possuem inversos aditivos.
Definição: Um inverso aditivo módulo M de a é um valor b tal que a+b =1 mod M.
Teorema: para cada elemento de um anel Z , existe um e só
Prof RG Crespo Software de Telecomunicações Teoria números : 21/37 Teorema: para cada elemento de um anel ZM, existe um e só
um inverso aditivo.
Ex: 3+6=0 mod 9, logo 6 é inverso aditivo de 3 módulo 9.
Congruência (4)
Ao contrário de Z, os aneis ZM possuem inversos multiplicativos para alguns elementos (não todos!).
Definição: Um inverso multiplicativo módulo M de a, a-1
mod M, é um valor tal que aa-1 =1 mod M.
• A condição pode ser refeita para aa-1 = 1 + Mk, que tem
uma única solução se a e M forem primos entre si (ou seja, gcd(a,M)=1). Se a M forem primos entre si, para
identificar a-1, basta refazer a igualdade gcd(a,M)=1 1. Determinar os numeros u,v tal que 1 = uM + va
Congruência (5)
1 = 4–1.3
= 4–1.(39-9.4)↔ 10.4-1.39
= 10.(160-4.39)-1.39 ↔ 10.160-41.39 = 10.160-41.(839-5.160) ↔ 215.160-41.839
Ex: Calcular 160-1 mod 839 839 = 5.160 + 39 160 = 4.39 + 4
39 = 9.4 + 3 4 = 1.3 + 1
Prof RG Crespo Software de Telecomunicações Teoria números : 23/37 Logo, 160-1 mod 839 = 215 Verificação: 160*215 = 35400 = 1 mod 839 = 10.160-41.(839-5.160) ↔ 215.160-41.839 4 = 1.3 + 1 35400 839 41 -35399 1
Congruência (6)
Teorema: Num anel ZP todos os elementos não nulos possuem inverso multiplicativo, sse P for primo.
Prova: pela definição de inverso multiplicativo, aa-1 = 1 + Pk
que tem solução sse a,P forem co-primos. Se todos os que tem solução sse a,P forem co-primos. Se todos os elementos não nulos de ZP forem co-primos, então P é primo.
Corrolário: a/b em ZP é dada por ab-1mod P
Ex: 37/160 mod 839 = 37*160-1= 37*215= 7955 mod 839 =
Congruência (7)
Definição: a soma módulo 2, a ⊕b , resulta 1 sse os operandos forem
distintos.
a ⊕b= a+b mod 2
Propriedades: para quaisquer a,k
– a ⊕ a = 0 A B A ⊕ B
Prof RG Crespo Software de Telecomunicações Teoria números : 25/37
– a ⊕ a = 0 – a ⊕ k ⊕ k = a A B A ⊕ B 0 0 0 0 1 1 1 0 1 1 1 0
Eficiência de operações
RSA (1)
A grande dimensão dos blocos RSA levou à criação de bibliotecas de operações.
i. Produto
Pretende-se avaliar x.y, com valores na ordem 21024≈10308. Cálculo pelo método matricial (proposto pela primeira vez por Fibonnaci) é pelo método matricial (proposto pela primeira vez por Fibonnaci) é muito ineficiente.
Alternativa: multiplicação russa, com “shift” e somas.
1. Enquanto y≠1 executar e colocar lado a lado x=2.x e y=y/2 2. Cortar todos os xipara yipares
Eficiência de operações
RSA (2)
Exemplo: Cálculo de 52 * 37
52 37 multiplicação
matricial russa
Prof RG Crespo Software de Telecomunicações Teoria números : 27/37 52 37 104 18 208 9 416 4 832 2 1664 1 1924 52 *37 364 156 1924
Eficiência de operações
RSA (3)
ii. Exponenciação módulo M
Cálcular xce só depois calcular xc
mod Ngera valores de dimensão
muito elevada.
Alternativa: em cada multiplicação por x, calcular o módulo para reduzir os valores intermédios. Exponenciação pode ser efectuada da esquerda para a direita (solução adoptada aqui), ou da direita para a esquerda para a direita (solução adoptada aqui), ou da direita para a esquerda.
1. Representar c = bk-1… b0 2. Executar algoritmo
z = 1;
for ( i=k-1; i>=0; i-- ) {
if ( bi=1 ) mult=x else mult=1; z = z2.mult mod N;}
Eficiência de operações
RSA (4)
Ex: Cálculo de 3037mod 77 (37 = 100101)1. z = 1
2. i = 5; b5=1 ∴ mult= 30; z = 12 * 30 mod 77 ≡ 30 3. i = 4; b4=0 ∴ mult= 1; z = 302mod 77 ≡ 53 4. i = 3; b3=0 ∴ mult= 1; z = 532mod 77 ≡ 37 5. i = 2; b2=1 ∴ mult= 30; z = 372* 30 mod 77 ≡ 29
Prof RG Crespo Software de Telecomunicações Teoria números : 29/37 5. i = 2; b2=1 mult= 30; z = 37 * 30 mod 77 29
6. i = 1; b1=0 ∴ mult= 1; z = 292mod 77 ≡ 71 7. i = 0; b0=1 ∴ mult= 30; z = 712* 30 mod 77 ≡ 2
ComplexidadeO(lg3n)
Nota: Ataque DPA (“Differential Power Analysis”) baseado na análise das variações no consumo de energia durante o cálculo de mult*z dentro do ciclo for.
Eficiência de operações
RSA (5)
1 z x xcmod N em hardware z x mult mod N Lógica controlo c
Eficiência de operações
RSA (6)
iii. Decifra RSA
Decifra mais eficiente com auxílio do CRT
Teorema Chinês dos Restos (CRT-Chinese Remainder Theorem): Seja N=n1*n2*…*nr com ni,nj (i≠j)
co-Prof RG Crespo Software de Telecomunicações Teoria números : 31/37 Theorem): Seja N=n1*n2*…*nr com ni,nj (i≠j)
co-primos.
– Qualquer A∈[0,(N-1)] é representado por (a1=A mod n1, a2=A mod n2, …, ar=A mod nr)
– A calculado, a partir de (a1, a2,…, ar), pela seguinte equação:
r i i i i i i i r i i n n n n n n N N N n N N a A L L 1 1 2 1 1 1 mod ) mod ( + − − = = = =
∑
Eficiência de operações
RSA (7)
Exemplo: Sun-Tsu inicia batalha com 208 soldados e no final pretende determinar rapidamente os sobreviventes.
Verifica que os sobreviventes
– agrupados em 3, sobram 2 (a1= A mod 3 ≡ 2) – agrupados em 5, sobram 3 (a2= A mod 5 ≡ 3) – agrupados em 5, sobram 3 (a2= A mod 5 ≡ 3) – agrupados em 7, sobram 2 (a2= A mod 7 ≡ 2)
a) N1=5.7=35; N2=3.7=21; N3=3.5=15
b)35-1mod 3 = 2, 21-1 mod 5 = 1, 15-1 mod 7 = 1
c) A=2.35.2 + 3.21.1 + 2.15.1 (mod 3.5.7) = 23 mod 105. Sun-Tsu ou tem 23 ou tem 128 soldados.
Eficiência de operações
RSA (8)
Por ser o único com acesso a p,q o proprietário pode calcular mais rapidamente M=Cdmod N,
1. Na construção da cifra RSA tem-se N=pq. Calcular
p C
Cp = mod C C q
q = mod
Prof RG Crespo Software de Telecomunicações Teoria números : 33/37 p C M p d d p d p p p mod ) 1 mod( = − = q C M q d d q d q q q q mod ) 1 mod( = − =
2. Decifrar mensagem a partir dos resíduos
N q q p q R N p p q p R N R M R M M p q q p p q q p mod ) mod ( mod ) mod ( mod ) ( 1 1 1 1 − − − − = ⋅ = = ⋅ = + =
Números aleatórios (1)
Definição: O período de uma sequência é valor mínimo de τ, tal que s(i+τ)=s(i), para todos 0≤ i<N-τ
Ex: a sequência 010 010 01, de comprimento p=8, possui período 3.
Definição: Um bloco (“block”) é uma sequência contínua de Definição: Um bloco (“block”) é uma sequência contínua de
1’s e um salto (“gap”) é uma sequência contínua de 0’s. Uma corrida (“run”) é um bloco ou um salto.
Existem diversos métodos para determinar o grau de confinação de uma sequência binária pseudo-aleatória
– Princípio de Golomb
Números aleatórios (2)
Testes estatísticos
– Teste série: as frequências das transições 00, 01, 10, 11 são iguais. – Teste “poker”: dividir sequência por subsequências com mesmo
número de bits (m≥3)-denominados “poker hands”, e comparar a distribuição dos valores com o teste χ2.
Prof RG Crespo Software de Telecomunicações Teoria números : 35/37 Princípios de Golomb: primeira tentativa para identificar as
condições necessárias, mas não suficientes!
1. A diferença entre o número de 0’s e 1’s deve ser tão pequena quanto possível.
Nota: na sequência 101010101010101010101010101010101010, diferença entre 0’s e 1’s é nula, mas não é aleatória (tal será detectado pelo terceiro princípio de Golomb).
Números aleatórios (3)
2. Em todas as subsequências, metade das corridas são blocos e a outra metade são saltos.
A frequência de corridas de comprimento i é, pelo menos, (½)ise o número de corridas for superior a 1; metade das corridas tem comprimento 1, um quarto das corridas tem comprimento 2,… Ex: seja 00001100001110001111100001110001101110000100. Ex: seja 00001100001110001111100001110001101110000100. À primeira vista a sequência parece ser aleatória, mas não obedece aos critérios de Golomb.
Comprimento Blocos Saltos Corridas 1 19 25 44 (46%) 2 12 17 29 (30%) 3 6 10 16 (17%) 4 2 4 6 (6%) 5 1 0 1 (1%) Falha!
Números aleatórios (3)
3. Autocorrelação é de 2 valores 1 0 ), 1 2 )( 1 2 ( 1 ) ( 1 -N t 1 se , 0 t se , ) ( . 1 0{
− ≤ ≤ − − ∑ = ≤ ≤ = = + − = N t s s N t C K N t C N t i N i iProf RG Crespo Software de Telecomunicações Teoria números : 37/37
0 =
N i
Ex: 011001000111101, gerada pelo LFSR de polinómio conectivo x4+x3+1, satisfaz os critérios de Golomb.
1. Número de 0’s é 7, número de 1’s é 8. 2. Existem 8 corridas:
• 4 corridas de comprimento 1 (2 saltos, 2 blocos). • 2 corridas de comprimento 2 (1 salto, 1 bloco). • 1 salto de comprimento 3, 1 bloco de comprimento 4.
3. C(0)=1, C(t)=-1/15 for 1 ≤ t ≤ 14