• Nenhum resultado encontrado

Raízes Quadradas Módulo Números Primos

2.2 Método das Fracções Contínuas (“CFRAC”)

3.1.1 Raízes Quadradas Módulo Números Primos

O nosso estudo acerca da determinação de raízes quadradas modulares começa com a seguinte definição:

3.1. CONCEITOS FUNDAMENTAIS

Definição 3.1 (Raiz Quadrada). Dados um primo ímparp e um inteiro a tal que ap= 1, a cada solução da equaçãox2≡ a (mod p) dá-se o nome de raiz quadrada de a módulo p.

Tendo em conta esta definição, facilmente se conclui que, se r é uma raiz quadrada de um

determinado inteiro a módulo p, o inteiro p − r é também uma raiz quadrada de a módulo p. Deste modo, de acordo com o Teorema 1.18 conclui-se facilmente que qualquer inteiro a

para o qual se verifiqueap= 1 admite exactamente duas raízes quadradas módulop. Assim

sendo, à primeira vista o problema da determinação de raízes quadradas pode parecer simples, já que basta experimentar para cada 1 ≤ x ≤ (p − 1)/2 se a congruência x2 ≡ a (mod p) é

satisfeita. No entanto, este raciocínio está muito longe de representar um processo eficiente, já que mesmo para primos não muito grandes pode demorar demasiado tempo.

Tendo em conta o raciocínio anterior, e uma vez que no decorrer do “crivo quadrático” temos, na maior parte das vezes, necessidade de determinar raízes quadradas módulo primos muito grandes, torna-se necessário descrever um método mais eficiente para resolver este problema. O algoritmo sobre o qual nos debruçamos neste texto, e um dos algoritmos mais eficientes para o efeito, é o “algoritmo de Tonelli–Shanks”, também designado por “RESSOL”. O “RESSOL” baseia um dos seus passos fundamentais no Lema 1.22, com base no qual podemos tratar directamente o caso mais simples deste problema: o caso em que o módulo é um primo p que verifica p ≡ 3 (mod 4). De facto, como consequência deste lema facilmente

se conclui que, se a é um resíduo quadrático módulo um primo p nestas condições, é possível

obter uma raiz quadrada de a módulo p tomando b ≡ ap+14 (mod p), uma vez que neste caso

se verifica

b2 ap+14 2≡ ap+12 ≡ ap−12 · a ≡ a (mod p).

Exemplo 3.2. Considerando p = 107 e a = 19, facilmente se conclui que 19

107



= 1, e portanto que 19 admite duas raízes quadradas módulo 107. Deste modo, uma vez que 107 ≡ 3 (mod 4), e também que

19107+14 = 1927≡ 33 (mod 107),

de acordo com o raciocínio anterior conclui-se também que 33 verifica 332 ≡ 19 (mod 107). Assim, r1 = 33 e r2 = 107 − 33 = 74 são as duas raízes quadradas de 19 módulo 107.

Estudado este caso particular, debruçamo-nos agora sobre o caso em que o módulo p da

referida congruência verifica p ≡ 1 (mod 4). Para o efeito, convém introduzir o seguinte

conceito, e também um resultado importante com ele relacionado:

3. CRIVO QUADRÁTICO

Definição 3.3 (Ordem). Dados dois inteiros a e n > 1 primos entre si, ao menor inteiro

positivob para o qual se verifica

ab ≡ 1 (mod n)

dá-se o nome de ordem de a módulo n(1), e denota-se por ord

n(a).

Teorema 3.4. Se mdc (a, n) = 1 e ab ≡ 1 (mod n) para algum inteiro b, então ord

n(a) | b.

Demonstração. Supondo que ordn(a) - b, ou seja, que b = q ·ordn(a) + r com 0 < r < ordn(a),

podemos imediatamente concluir que ab ≡ ar (modn). Deste modo, teria que se verificar

ar ≡ 1 (mod n), o que é absurdo uma vez que 0 < r < ord

n(a) e ordn(a) é, por definição, o

menor inteiro para o qual esta congruência se verifica.

Com base nesta definição e neste resultado auxiliar podemos então descrever outra das ideias fundamentais do algoritmo “RESSOL”, a qual se baseia no seguinte resultado:

Teorema 3.5. Sep é um número primo e a e b são dois inteiros relativamente primos com p cuja ordem módulo p é igual a 2j com j > 0, verifica-se ord

p(ab) = 2j 0 com j0 < j. Demonstração. Definindo x1 = a2 j−1 e x2 = b2 j−1

, e tendo em conta a Definição 3.3, facil- mente se verifica que

x21 ≡ 1 (mod p) mas x16≡ 1 (mod p),

verificando-se a mesma situação parax2. Assim, e de acordo com o Corolário 1.19, conclui-se

quex1 ≡ x2≡ −1 (mod p), e portanto que (ab)2 j−1

=x1x2 ≡ 1 (mod p). Por fim, de acordo

com o Teorema 3.4 conclui-se que ordp(ab) | 2j−1, ou seja, que ordp(ab) = 2j

0

comj0 < j.

Posto isto, o objectivo do algoritmo “RESSOL” é construir, de forma iterativa e utilizando o resultado anterior, duas sequência de inteiros (ri)ji=1e (ni)ji=1 de tal forma a que se verifique

r2

i ≡ ani (modp) para cada 1 ≤ i ≤ j,

e onde cada um dos inteirosni verifique não só ordp(ni) = 2ki mas também

ordp(n1)> ordp(n2)> · · · > ordp(nj) = 1. (3.1)

Deste modo, no final do algoritmo verifica-ser2

j ≡ a (mod p), sendo portanto rj (modp) uma

raiz quadrada dea módulo p. Para por em prática esta ideia, no “RESSOL” começamos por

escrever |Z∗p| = p − 1 na forma

p − 1 = 2k· m (k, m ∈ N, m ímpar).

(1)

Note-se que este conceito está efectivamente bem definido, uma vez que o “Teorema de Euler” [20, p. 51] nos indica que para quaisquer inteiros a e n > 1 primos entre si se verifica a congruência

3.1. CONCEITOS FUNDAMENTAIS

Convém notar que nesta equação tem que se verificark > 0, uma vez que estamos a assumir

que p é um primo ímpar. Assim, e uma vez determinados os inteiros k e m, definimos r1≡ a

m+1

2 (modp) e n1 ≡ am (mod p), obtendo deste modo

r12≡ an1 (modp).

Como referido anteriormente, se n1 ≡ 1 (mod p) podemos parar o algoritmo(2), obtendo

para raízes quadradas de a os resíduos r1 (mod p) e −r1 (mod p). Nos casos em que se

verifiquen16≡ 1 (mod p) prossegue-se com o algoritmo, escolhendo aleatoriamente(3)e apenas

neste passo inicial um não-resíduo quadrático d. Tendo em conta esta escolha, e definindo c1 ≡ dm (mod p), verifica-se facilmente que ordp(c1) = 2k, uma vez que, por um lado, se

verifica

c12 k

≡ d2km≡ dp−1≡ 1 (mod p), (3.2)

sendo que, por outro lado, o Lema 1.22 implica que

c12 k−1

≡ d2k−1m ≡ dp−12 ≡ −1 (mod p). (3.3)

Chegados a este ponto necessitamos de determinar a ordem den1, por forma a que possamos

tentar encontrarn2 tal que ordp(n1)> ordp(n2). Assim, e uma vez que

(n1)2 k−1

≡ a2k−1m ≡ ap−12 ≡ 1 (mod p),

conclui-se imediatamente que ordp(n1) | 2k−1, e portanto que a ordem deste elemento é da

forma 2k1 com k

1 < k. Ora, tendo em conta este facto, o valor de k1 pode ser encontrado

facilmente calculando sucessivamente os resíduos módulo p da sequência

(n1)2, (n1)2 2 , (n1)2 3 , · · ·, (n1)2 k−1 , (3.4)

até que se obtenha o menor inteiro positivo k1 tal que (n1)2k1 ≡ 1 (mod p). Uma vez

determinado este valor, inicia-se então o processo iterativo de construção das sequências (ri)ji=1 e (ni)ji=1 referidas anteriormente, das quais, note-se, já conhecemos os respectivos

primeiros elementos. Para o efeito, e considerando por uma questão de clareza k0 = k,

definem-se os valores

b ≡ c12k0−k1−1 (modp), c2≡ b2 (modp),

r2≡ br1 (modp), n2≡ c2n1 (modp).

(2)

Note-se que este caso se verifica automaticamente sempre que p ≡ 3 (mod 4), já que deste modo se verifica

p − 1 ≡ 2 (mod 4), e portanto m = (p − 1)/2.

(3)

Não são conhecidos algoritmos determinísticos polinomiais para determinar não-resíduos quadráticos mó- dulo p, sendo no entanto e na maior parte dos casos possível determinar rapidamente um resíduo deste tipo por “tentativa e erro” uma vez que metade dos elementos de Z∗psão de facto não-resíduos quadráticos.

3. CRIVO QUADRÁTICO

Esta construção tem duas razões de ser fundamentais: por um lado, com estes valores verifica- -se a congruência

(r2)2≡ b2(r1)2 ≡ c2an1 ≡ an2 (mod p), (3.5)

e, por outro lado, c2 assim definido verifica ordp(c2) = 2k1. Com efeito, tendo em conta,

respectivamente, as equações (3.2) e (3.3), facilmente se verifica que (c2)2k1 ≡ (b2)2k1 ≡  (c1)2 k0−k12k1 ≡ (c1)2k0 ≡ 1 (mod p), (c2)2 k1−1 ≡ b2k1 ≡ c21k0−1 ≡ −1 (mod p).

Ora, como já sabemos, verifica-se também ordp(n1) = 2k1, e portanto a construção anterior

implica que os elementos c2 e n1 têm a mesma ordem módulo p. Consequentemente, e uma

vez quek1> 0, o Teorema 3.5 implica que

ordp(n2) = ordp(c2n1) = 2k2 com k2 < k1.

Deste modo, conseguimos obter um elemento n2 que verifica ordp(n1) > ordp(n2), como

pretendíamos. Assim sendo, para verificar se podemos concluir o algoritmo ou se necessitamos de outra iteração, é necessário determinar o expoentek2 da equação anterior, o qual pode ser

determinado por um processo semelhante ao utilizado para determinar ordp(n1) na equação

(3.4). Se se verificar ordp(n2) = 1 entãon2 ≡ 1 (mod p), e portanto, tendo em conta a equação

(3.5), conclui-se quer2 (modp) é uma raiz quadrada de a módulo p. Se, pelo contrário, se

verificar ordp(n2)> 1, voltamos ao início da iteração, repetindo o mesmo raciocínio.

Aplicando iterativamente este raciocínio, e substituindo em cada iteração i ≥ 2 os

valores de ri−1, ci−1, ni−1, ki−2 e ki−1 respectivamente por ri, ci, ni, ki−1 e ki, obtém-se

uma sequência estritamente decrescente do tipo de (3.1), verificando-se ao fim de um número finitoj de iterações a congruência nj ≡ 1 (mod p). Assim que esta congruência for obtida, o

inteirorj é uma raiz quadrada dea módulo p, e podemos parar este processo.

Exemplo 3.6. Suponhamos que após verificar que 193 é um número primo, e que143193= 1, pretendíamos determinar uma raiz quadrada de 143 módulo 193 utilizando o “RESSOL”. No passo inicial do algoritmo verificamos que p ≡ 1 (mod 4). Deste modo, precisamos de

prosseguir com o algoritmo uma vez que a obtenção das raízes quadradas não pode ser feita recorrendo ao processo descrito para os casos em quep ≡ 3 (mod 4). Começamos então por

determinar os inteiros positivosk e m tais que p − 1 = 2k· m, com m ímpar. Assim, e uma

vez que 193 − 1 = 192 = 26· 3, tomamos k = k0= 6 e m = 3, e definimos

r1 ≡ 143

3+1

3.1. CONCEITOS FUNDAMENTAIS

Algoritmo 3.1: “RESSOL — Raízes Quadradas Módulop”

Dados de Entrada: Um primo ímparp e um resíduo quadrático a módulo p

Dados de Saída: Um inteiror tal que r2

p a[a]

(1) Sep ≡43 devolverr ≡p a

p+1

4 e parar.

(2) Determinark e m tais que p − 1 = 2k· m, com m ímpar.

(3) Definirr1 ≡pa

m+1

2 e n1p am.

(4) Determinar aleatoriamented tal qued p



= −1 e definirc1 ≡p dm.

(5) Determinark1 tal que ordp(n1) = 2k1 e definir i = 1.

(6) Enquanto (ki > 0)[b] fazer: (7) Definir k0=k i− ki+1 e fazeri = i + 1. (8) Definir b ≡p (ci−1)2 k0−1 , cip b2, ripbri−1 e nip cini−1.

(9) Determinarki tal que ordp(ni) = 2ki.

(10) Devolverri e parar.

[a]Por uma questão de economia de espaço optámos por utilizar a notação a ≡nb para denotar a ≡ b (mod n).

[b]Note-se que podemos substituir a condição ki> 0 pela condição equivalente n

i6≡ 1 (mod p).

Em seguida, devemos determinar um não-resíduo quadrático módulo 193, ao qual chamamosd.

Uma vez que 3193−12 ≡ 1 (mod 193), 3 é um resíduo quadrático módulo 193, e portanto não

pode ser escolhido parad. Naturalmente, 4 é também um resíduo quadrático módulo 193, mas

5193−12 ≡ −1 (mod 193),

pelo que podemos escolher d = 5 e definir c1 ≡ 53 ≡ 125 (mod 193). Para completar este

passo inicial falta apenas determinar ord193(n1), que sabemos ser da forma 2k1 para algum

k1≥ 1. Utilizando o processo descrito em (3.4) verificamos então que

(64)2≡ 43 6≡ 1 (mod 193), (64)22 ≡ 112 6≡ 1 (mod 193), (64)23 ≡ 192 6≡ 1 (mod 193),

(64)24 ≡ 1 (mod 193),

(3.6)

e portanto que ord193(64) = 24. Deste modo, obtém-se k1 = 4 > 0, razão pela qual

prosseguimos para a etapa seguinte do algoritmo.

3. CRIVO QUADRÁTICO

Na primeira iteração definimosk0=k0− k1 = 2, e os valores

b ≡ 12522−1

≡ 185 (mod 193), c2 ≡ 1852 ≡ 64 (mod 193),

r2 ≡ 185 · 184 ≡ 72 (mod 193), n2≡ 64 · 64 ≡ 43 (mod 193).

Uma vez definidos estes valores, notamos através de um processo semelhante ao da equação (3.6) que ord193(43) = 23, e portanto que k2 = 3. Com efeito, nesta altura já se verifica

16 = ord193(n1) > ord193(n2) = 8. Ainda assim k2 > 0, pelo que prosseguimos.

Na segunda iteração verificamos que k0 = k1 − k2 = 1. Assim, e de modo análogo ao que

fizemos anteriormente, definimos os valores

b ≡ 6421−1

≡ 64 (mod 193), c3 ≡ 642 ≡ 43 (mod 193),

r3 ≡ 64 · 72 ≡ 169 (mod 193), n3≡ 43 · 43 ≡ 112 (mod 193).

Uma vez que neste caso se verifica ord193(112) = 4 = 22, tomamosk3= 2> 0 e prosseguimos

com o algoritmo.

Na terceira iteração definimos uma vez maisk0 =k

2− k3 = 1, bem como os valores

b ≡ 4321−1

≡ 43 (mod 193), c4 ≡ 432 ≡ 112 (mod 193),

r4 ≡ 43 · 169 ≡ 126 (mod 193), n4 ≡ 112 · 112 ≡ (−1) (mod 193).

Deste modo, facilmente concluímos que ord193(n4) = 2, e portanto quek4 = 1> 0.

No início da quarta iteração definimosk0 =k3− k4 = 1, obtendo assim

b ≡ 11221−1

≡ 112 (mod 193) c5 ≡ 1122≡ (−1) (mod 193)

r5 ≡ 112 · 126 ≡ 23 (mod 193) n5 ≡ (−1) · (−1) ≡ 1 (mod 193).

Naturalmente,n5assim definido verifica ord193(n5) = 1, e portanto o algoritmo termina neste

passo com a obtenção da raiz quadrada r5 = 23 de 143 módulo 193. Com efeito, verifica-se

facilmente que

232 = 529 ≡ 143 (mod 193).

Analisando os diversos resultados obtidos no decorrer do algoritmo concluímos que as sequên- cias (ri)5i=1e (ni)5i=1 obtidas foram respectivamente

(184, 72, 169, 126, 23) e (64, 43, 112, −1, 1),

tendo-se efectivamente verificado (ri)2 ≡ 143ni (mod 193) em cada iteração. Por fim, concluí-

mos que a sequência das ordens dos elementos da sequência (ni)5i=1é a sequência estritamente

decrescente

3.1. CONCEITOS FUNDAMENTAIS