Revis˜ ao da quebra de mensagens no RSA
Dionathan Nakamura Orientador: Routo Terada
DCC – IME – USP
22 de Setembro de 2010
Roteiro
1 Resumo
2 Introdu¸c˜ao
3 Goldwasser, Micali e Tong [1]
4 Ben-Or, Chor e Shamir [2]
5 Referˆencias
Roteiro
1 Resumo
2 Introdu¸c˜ao
3 Goldwasser, Micali e Tong [1]
4 Ben-Or, Chor e Shamir [2]
5 Referˆencias
Resumo
Vamos apresentar os m´etodos utilizados nos algoritmos para quebra de mensagens no RSA .
Fazemos a suposi¸c˜ao da existˆencia de or´aculos para o LSB (Least Significant Bit) da mensagem.
Assim apresentaremos:
introdu¸c˜ao ao RSA e Criptografia de Chave P´ublica;
Algoritmo de Euclides Extendido;
C´alculo da inversa multiplicativa;
Algoritmo com o or´aculo para o LSB sem erros;
Divis˜ao por 2 dentro do RSA;
Algoritmo de Euclides Bin´ario;
Algoritmo de Euclides Bin´ario Modificado;
Algoritmo com o or´aculo para o LSB com erro de 25%;
Or´aculo HALF;
Simula¸c˜ao para definir paridade.
Roteiro
1 Resumo
2 Introdu¸c˜ao
3 Goldwasser, Micali e Tong [1]
4 Ben-Or, Chor e Shamir [2]
5 Referˆencias
RSA
ms ≡y mod N
, onde N=q1.q2, com q1 e q2 primos distintos.
Obs: as opera¸c˜oes s˜ao feitas dentro deZN
Criptografia de chave p´ ublica
Alice vai gerar as chaves p´ublica e privada dela, ent˜ao ela executa os seguintes passos:
escolhe primos q1 eq2 grandes e de preferˆencia pr´oximos;
calculaN =q1.q2;
escolhe ums de tal modo que gcd(s, φ(N)) = 1;
calcula o inverso de s modφ(N), que ´es−1 ≡p modφ(N), ou aindas.p ≡1modφ(N);
por fim, apaga q1 eq2, divulga (p,N) como sua chave p´ublica e mant´em em segredo sua chave privada (s,N).
Obs: φ(N) =|Z∗N|
Comunica¸c˜ ao
Beto quer se comunicar com Alice, ele deseja enviar a mensagem mem segredo, ent˜ao ele executa os seguintes passos:
Beto calcula y ≡mpmod N e envia y para Alice;
agora y ´e ileg´ıvel, qualquer um que interceptary nada vai saber sobrem;
Alice ent˜ao recuperam calculandom≡ysmod N;
M´ aximo divisor comum — Algoritmo de Euclides
O nome da fun¸c˜aogcd(a,b) vem do inglˆesgreatest common divisor, tamb´em conhecido como Algoritmo de Euclides:
por exemplo: gcd(9,15) = 3.
O algoritmo ´e baseado nos seguintes passos:
1 certifique quea>b, sen˜ao troque entre si;
2 quandoa´e dividido porb obt´em-se q e r;
3 a recebeb;
4 b receber;
5 volte ao passo 2;
6 repita at´e que o resto seja zero;
O GCD ´e o ´ultimo restor antes dezero.
Algoritmo de Euclides de Extendido
O Algoritmo de Euclides de Extendido,
extended gcd(a,b,&x,&y), nos retorna os coeficientex e y tal que:
ao executar: extended gcd(a,b,&x,&y);
temos a cada passo: ri =a.xi +b.yi;
O interessante aqui, ´e que sea e b s˜ao primos entre si (coprimos):
ent˜aogcd(a,b) = 1;
e no ´ultimo passo vamos ter ri = 1;
assim: 1 =a.xi +b.yi;
e o algoritmo retorna esses ´ultimos como o x e y que queremos.
Inversa multiplicativa
Quando Alice estava gerando as chaves dela, ela:
garantiu que gcd(s, φ(N)) = 1;
ou seja, s e φ(N) s˜ao coprimos.
Para calcularp, que ´e a inversa multiplicatica de s, fez:
executou: extended gcd(s, φ(N),&x,&y);
assim: 1 =s.x+φ(N).y; ent˜ao, o x ´e op desejado;
lembre que: s.p≡1modφ(N).
Preliminares
n denota o comprimento de N que ´e n=dlgNe.
Em toda a apresenta¸c˜ao consideramos quem seja relativamente primo aN, ou seja, gcd(m,N) = 1, de modo que m∈Z∗N. Observe que:
gcd(m,N)6= 1 ⇐⇒ gcd(RSA(m),N)6= 1 Se n˜ao fossem relativamente primos, far´ıamos
gcd(RSA(m),N) =d, ent˜ao ou d =N = 0 oud =q1 oud =q2, e seria f´acil obters.
Roteiro
1 Resumo
2 Introdu¸c˜ao
3 Goldwasser, Micali e Tong [1]
4 Ben-Or, Chor e Shamir [2]
5 Referˆencias
Or´ aculo para o LSB
Esse trabalho sup˜oem a existˆencia de um or´aculo que retorna o LSB dem dadoRSA(m):
O1(mpmod N) =
0 sem´e par, 1 sem´e ´ımpar.
Algoritmo 1
Passo 1 — divis˜ ao por 2
Nesse est´agio, queremos garantir que podemos dividir n´umeros por 2. Vamos entender a aritm´etica m´odulo N:
para os exemplos: q1 = 3 eq2= 5, logo N= 15;
40
2 = 20≡5mod 15;
observe que 19≡4mod15; (19−15 = 4) ou seja, 19 e 4 perntencem `a mesma classe lateral
(congruˆencia m´odulo N);
ent˜ao ´e de se esperar que se: 42 ≡2mod15;
ent˜ao tamb´em: 192 ≡2mod15;
agora, por exemplo, o n´umero ´ımpar 7, quanto seria
7
2 mod15?;
como 7≡22mod 15; (7 + 15 = 22)
ent˜ao: 72 ≡11mod15.
Passo 1 — inversa de 2
Todavia estamos dentro do grupo multiplicativo ZN, ou seja, a opera¸c˜ao em quest˜ao ´e a multiplica¸c˜ao e n˜ao a divis˜ao, para resolvermos isso calculamos a inversa multiplicativa de 2:
executar: extended gcd(2,15,&x,&y);
temosx = 8;
verificando: 2.8≡1mod15;
exemplo 1a: 4.8 = 32≡2mod15; (32−2∗15 = 2) exemplo 1b: 19.8 = 152≡2mod15; (152−10∗15 = 2) exemplo 2: 7.8 = 56≡11mod 15. (56−3∗15 = 11) Pontanto, para “dividir” um n´umero por 2 basta multiplic´a-lo pela inversa multiplicativa de 2 m´odulo N.
Passo 1 — prova da divis˜ ao por 2
SejaI a inversa multiplicativa de 2, isto ´e, I.2≡1mod N.
Seja x2 =metade, ou seja, 2.metade=x.
Por hip´otese, I.x≡metade mod N.
Ent˜ao, para dividirx por 2:
I.x ≡ metade mod N [.(2)]
2.I.x ≡ 2.metade mod N
1.x ≡ x mod N c.q.d.
Algoritmo 1
Passo 1 — divis˜ ao por 2 cifrado
Sejay =mpmod N. N´os queremos dividirm por 2 e n˜aoy por 2.
Por isso, a inversa multiplicativaI deve ser relativa a 2pmod N. Seja m2 =metade, ou seja, 2.metade =m.
Por hip´otese, I.y ≡metadepmod N.
Vejamos:
I.y ≡ metadepmod N [.(2p)]
(2p).I.y ≡ (2p).(metadep)mod N 1.y ≡ (2.metade)pmod N
1.y ≡ mpmod N c.q.d.
Algoritmo 1
Passo 2 — caso par
Suponhamos que o r em alguma itera¸c˜aoi seja par. Por exemplo, r = 8;
A transforma¸c˜ao feita ´e: r ←r.I mod N. Ou seja, uma divis˜ao por 2.
Em computa¸c˜ao, ´e f´acil enxergar que dividir por 2 ´e o mesmo que derlocar um bit `a direita.
Assim, r teve seu valor atualizado de 8[1000] para 4[100].
Em ANS ´e armazenada a paridade do novor.
No passo 3 ´e f´acil enxergar a transforma¸c˜ao inversa.
Passo 2 — caso ´ımpar
Suponhamos que o r em alguma itera¸c˜aoi seja ´ımpar;
por exemplo, r= 13[1101], como proceder para extrair o 1 da direita?;
primeiro ´e feita a opera¸c˜aoN−r;
comoN er s˜ao ´ımpares, o resultado anterior ´e par;
depois, como o resultado ´e par, ´e feita a divis˜ao por 2.
Conforme os passos anteriores, fa¸camostmp= (N−r)/2. Ent˜ao, para obterr a partir de tmp:
N−2.tmp = N−2.((N−r)/2)
= N−(N−r)
= N−N+r
= r
Algoritmo 1
Passo 3
Observe que as requisi¸c˜oes ao or´aculo s˜ao feitasn vezes;
e ainda, a cada itera¸c˜ao, apenas um bit ´e adicionado;
vamos ver em exemplo.
Exemplo
SejaN = 37.31 = 1147, n= 11, m7 = 81: (m= 107) i r[i] ANS[i] t(i)
1 81 1 00001101011
2 313 0 1000001000
3 334 0 100000100
4 1060 0 10000010
5 761 1 1000001
6 236 1 011101
7 34 1 01111
8 627 0 0110
9 211 1 011
10 79 0 00
11 601 0 0
Exemplo detalhado
i m[i] bits(m) ANS[i] t(i)
1 107 1101011 1 00001101011
2 520 1000001000 0 1000001000
3 260 100000100 0 100000100
4 130 10000010 0 10000010
5 65 1000001 1 1000001
6 541 1000011101 1 011101
7 303 100101111 1 01111
8 422 110100110 0 0110
9 211 11010011 1 011
10 468 111010100 0 00
11 234 11101010 0 0
An´ alise
Sejau[i]∈Z∗N tal que u[i]smod N =r[i].
Sejav(i)=B(u[i]).
Temos que provar que: v(i)=w(i)∗t(i) para algum w(i). Em particular,v(1) =w(1)∗t(1) para algum w(1). Mas
|v(1)|=|t(1)|=n.
Assim,v(1)=t(1) e m=u[1] =M(t(1)).
De (3) do algoritmo, claramente a afirma¸c˜ao ´e v´alida parai =n.
A prova ´e feita por indu¸c˜ao.
An´ alise (cont.)
Para o caso onde ANS[i−1] = 0:
r[i] =r[i−1].I mod N [.(2s)]
r[i].2s =r[i−1].1mod N r[i−1] =r[i].2smod N , e assim:
u[i−1] =u[i].2 . Conseq¨uentemente:
v(i−1) =v(i)∗0 =w(i)∗t(i)∗0 =w(i−1)∗t(i−1)
An´ alise (cont.)
Para o caso onde ANS[i−1] = 1:
r[i] = (N−r[i −1]).I mod N [.(2s)]
r[i].2s =N−r[i−1]mod N r[i −1] =N−r[i].2smod N
=N−(u[i].2)s mod N
= (N−u[i].2)s mod N , e assim:
u[i−1] =N−u[i].2 . Conseq¨uentemente:
v(i−1)=w(i−1)∗(B(N)(−)(t(i)∗0)) =w(i−1)∗t(i−1)
Roteiro
1 Resumo
2 Introdu¸c˜ao
3 Goldwasser, Micali e Tong [1]
4 Ben-Or, Chor e Shamir [2]
5 Referˆencias
Algoritmo de Euclides Bin´ ario
Esse algoritmo ´e baseado nas seguintes id´eias de [3] (Knuth — The Art of Computer Programming):
se|b|e|c|s˜ao ambos pares, ent˜aogcd(b,c) = 2.gcd(b2,c2);
se|b|´e par e|c|´ımpar, ent˜ao gcd(b,c) =gcd(b2,c);
se|b|e|c|s˜ao ambos ´ımpares, ent˜ao gcd(b,c) = 2.gcd(b+c2 ,b−c2 );
adicionalmente, no ´ultimo caso, ou b+c2 ou b−c2 ´e divis´ıvel novamente por 2.
GCD bin´ ario modificado
Sabendo dessas propriedades, podemos criar um novo GCD bin´ario:
Inicialize com entradasb ec, repita b←b/2 ec ←c/2 at´eb e c serem ´ımpares.
La¸co b ← b+c2 ,c ← b−c2 . Elimine potˆencias de 2 at´e que sobre apenas n´umeros ´ımpares.
Termine quando ocorrer b= 1,−1,0 ou c = 1,−1,0.
E poss´ıvel verificar que ap´´ os no m´aximo dois passos no la¸co, max(|b|,|c|) ´e reduzido por um fator de ao menos 3/4.
Or´ aculo para LSB que acerta em pelo menos 75%
Esse trabalho sup˜oem a existˆencia de um or´aculo que retorna o LSB dem dadoRSA(m) com taxa de acerto de 3/4 +:
O2(mpmod N) =
0 sem´e par, 1 sem´e ´ımpar.
Or´ aculo para dizer em que metade do conjunto est´ a
Esse or´aculo (Half) diz em que metade do conjunto a mensagem est´a:
H(msmod N) =
0 sem<N/2
1 sem>N/2
Na verdade um or´aculo para o LSB ´e equivalente a um para o Half, pois um pode simular o outro.
Equivalˆ encia entre os or´ aculos para LSB e Half
LSB(2.x) = 0 ⇐⇒ HALF(x) = 0 LSB(x) = 0 ⇐⇒ HALF(I.x) = 0 Onde I ´e a inversa multiplicativa de 2mod N.
Simulando Half a partir do LSB
LSB(2.x) = 0 ⇐⇒ HALF(x) = 0
0 N/2 N
x 2.x
0 N/2 N
x 2.x
2.x-N
Simulando LSB a partir de Half
SejaI ´e a inversa multiplicativa de 2mod N.
LSB(x) = 0 ⇐⇒ HALF(I.x) = 0
0 N/2 N
x I.x
par
0 N/2 N
I.x x
par
0 N/2 N
x+N (x+N)/2
x
ímpar I.x mod N
0 N/2 2.N
x+N (x+N)/2
x
ímpar I.x mod N
Estrutura multiplicativa do RSA
Suponha que ´e dada a mensagem criptografadaRSA(m);
escolhemos um valor i;
pela estrutura multiplicativa do RSA ´e poss´ıvel calcular RSA(i.m).
RSA(i.m) = RSA(i).RSA(m) (mod N)
= ip.mpmod N
= (i.m)pmod N
= RSA(i.m)mod N
Propriedade sobre Half
SejaA(x) = 2.
Nx −12
. Ent˜ao para i,j aleat´orios:
A(x) =Pr[i ≡i+x]
A(x) =Pr[j.x≡(j + 1).x]
Caso de probabilidade alta
0 x pequeno N/2 N
0 N/2 N
x grande
0 N/2 N
0 N/2 N
Caso de probabilidade baixa
0 x N/2 N
0 N/2 N
0 N/2 x N
0 N/2 N
Fun¸c˜ ao a(x)
Seja
Sx ={j|H acerta em j.x} ∩ {j|H acerta em (j + 1).x}
Ent˜ao|Sx| ≥N(1/2 + 2.).
Seja
a(x) = |{j|j.x ≡(j + 1).x}| ∩Sx
N
Ent˜ao, para todox,|a(x)−A(x)| ≤1/2−2.
Caso da moeda milagrosa
Considere o caso hipot´etico:
vocˆe vai participar de um concurso de perguntas e respostas;
as perguntas s˜ao de 2 alternativas, sim e n˜ao;
vocˆe foi agraciado por um feiticeiro que te deu uma moeda milagrosa;
toda vez que vocˆe estiver diante de uma pergunta, ao jogar a moeda ela te d´a a resposta certa com 75% de acerto;
ent˜ao vocˆe joga a moeda e obt´em a resposta SIM;
mas essa resposta tem 25% de chance de estar errada;
o que vc faz?
para assegurar a resposta certa, vocˆe por exemplo, vc poderia jogar a moeda 1.000 vezes;
pela Lei dos Grande N´umeros, mais ou menos, 750 vezes a moeda vai cair do lado da resposta certa.
Lei dos Grande N´ umeros
Seja a m´edia amostral:
Xn = 1
n(X1+...+Xn)
Ent˜ao a m´edia amostral converge para o seu meio:
Xn→µ para n→ ∞
Simula¸c˜ ao
quando fazemos uma consulta `a HALF n˜ao temos como saber se a resposta ´e verdadeira;
a resposta certa vai depender do or´aculo para LSB;
o autor considera que o ´oraculo ´e determin´ıstico;
ou seja, h´a determinados pontos do conjunto em que o or´aculo sempre falha;
nos pontos restantes, ele sempre acerta;
por exemplo, para umx pequeno comox = 3;
este pode ser um ponto onde o or´aculo sempre falha;
ent˜ao o caso ´e diferente da moeda milagrosa;
n˜ao importa quantas vezes se consulte HALF, sempre vai retornar TOP.
Fun¸c˜ ao s (x )
Sejas(x) uma aproxima¸c˜ao para a(x) obtida por amostragem, ou seja, pegando independentementej’s e contando quantos Hd´a a mesma resposta paraRSA(j.x),RSA((j + 1).x).
Pela lei fraca dos grandes n´umeros, pegando polinomialmente (em−1,n) v´arios pontos s˜ao suficientes para que
|s(x)−a(x)|< com alta probabilidade (Pr >1− 1
lg3N).
Ent˜ao com alta probabilidade, para todox, temos:
a(x) = |{j|j.x ≡(j + 1).x}| ∩Sx
N
|a(x)−A(x)| ≤1/2−2
|s(x)−A(x)| ≤ |s(x)−a(x)|+|a(x)−A(x)| ≤1/2−
Escolha inicial
SejaI=
−N.2 ,N.2
eJ = N2 +I, ent˜ao:
x ∈I⇒A(x)≥1−
2 ⇒s(x)> 1 2 x∈J⇒A(x)≤
2 ⇒s(x)< 1 2
Assim, a paridade pode ser avaliada e vamos poder usar nosso GCD bin´ario modificado:
|x|par⇒ x 2 ∈I
|x|´ımpar⇒ x 2 ∈J
Definindo paridade
|x|par⇒ x 2 ∈I
|x|´ımpar⇒ x 2 ∈J
0x par N/2 N
0 N/2 N
(x+n)/2 x+N
x ímpar
Descri¸c˜ ao do Algoritmo
Dado RSA(m), pegue aleatoriamentei,j at´e ambos satisfazerem s(i.m),s(j.m)>1/2:
Inicialize fa¸ca b←i.m,c ←j.m. Enquantos(2−1.b)> 12 fa¸ca b ←2−1.b (e similarmente parac).
La¸co b ← b+c2 ,c ← b−c2 . Elimine potˆencias de 2 at´e que sobre apenas n´umeros ´ımpares.
Termine se mais de lg N fatores de 2 forem encontrados, aborta e recome¸ca; se mais de 2.log4/3N itera¸c˜oes ocorrerem dentro do la¸co, aborta e recome¸ca. Se b= 0 ouc = 0 recome¸ca. Se b = 1,−1 ou c = 1,−1, use os coeficientes para representar 1 =k.m e assim recuperarm=k−1mod N. Verifique a resposta aplicando RSA.
Como a chave ´ e recuperada
Suponha que ao final temos b final = 1;
no in´ıcio t´ınhamos b inicial =i inicial.m;
conforme b sofria altera¸c˜oes, o algoritmo faz as mesmas opera¸c˜oes comi;
se ao finalb final = 1 =i final .m, ent˜ao RSA(b final) = 1;
ora se: i final .m≡1mod N;
ent˜aoi final ´e a inversa multiplicativa de m;
ent˜ao, usandoi final no Algoritmo de Euclide Estendido, recuperamosm;
o mesmo pode ser similarmente executado prac final ej final.
An´ alise
A escolhas iniciais estar˜ao dentro deI com probabilidade≥2. Ser˜ao relativamente primos com probabilidade ≥ π6.2
Ser˜ao relativamente primos sem erro com probabilidade ≥ 6.π22 O algoritmo executa com alta probabilidade de sucesso e sem nenhum ´unico erro.
Roteiro
1 Resumo
2 Introdu¸c˜ao
3 Goldwasser, Micali e Tong [1]
4 Ben-Or, Chor e Shamir [2]
5 Referˆencias
[1] Shafi Goldwasser, Silvio Micali, and Po Tong.
Why and how to establish a private code on a public network (extended abstract).
In FOCS, pages 134–144, Chicago, Illinois, November 1982.
IEEE.
[2] M. Ben-Or, B. Chor, and A. Shamir.
On the cryptographic security of single RSA bits.
In ACM Symposium on Theory of Computing (STOC ’83), pages 421–430, Baltimore, USA, April 1983. ACM Press.
[3] D. Knuth.
The Art of Computer Programming V.4.
Addison-Wesley, 1969.