A−1 = ¯P · ¯C−1= µ 6 8 8 4 ¶ µ 9 0 10 2 ¶−1
Sabemos que det(C) = 18, logo temos que determinar 18−1. Observe que 18 · 8 − 1 = 13 · 11 ⇒ 18−1 = 8. Portanto: ¯ A−1 = µ 6 8 8 4 ¶ µ 8 · 2 −8 · 0 −8 · 10 8 · 9 ¶ ≡ µ 2 4 3 2 ¶ mod 13.
Como as entradas de A−1 s˜ao inteiros mod 26 e como reduzimos suas entradas para µ
2 4 3 2
¶
m´odulo 13, segue que existem duas possibilidades para cada entrada na matriz A−1, vejamos porquˆe. Mais precisamente, A−1 =
µ 2 4 3 2
¶
+ 13A1, onde A1 ∈ M2(Z/2Z) ´e a matriz 2×2 de zeros e uns, que trazem 24 = 16 possibilidades. Contudo, em primeiro lugar, como A−1
´e invers´ıvel, o determinante dela deve ser primo. Em segundo lugar, quando substituirmos
A−1 na equa¸c˜ao A−1· C = P , deveremos satisfazˆe-la. Assim restam duas possibilidades para A1: A1 = µ 1 0 1 1 ¶ ou µ 1 1 1 1 ¶ , isto ´e , A−1 = µ 15 17 14 15 ¶ ou A−1 = µ 15 17 16 15 ¶ . Tentando decodificar com a primeira matriz (P = A−1· C) temos:
C = “WKNCCHSSJH” = µ 22 13 2 18 9 10 2 7 18 7 ¶ Ent˜ao, P = µ 15 14 16 15 ¶ µ 22 13 2 18 9 10 2 7 18 7 ¶ ≡ µ 6 21 6 4 7 8 4 7 12 15 ¶ = “GIV EGHEMP00.
Esta mensagem P n˜ao ´e leg´ıvel. Decodificando com a segunda matriz, temos:
P = µ 15 17 16 15 ¶ µ 22 13 2 18 9 10 2 7 18 7 ¶ ≡ µ 6 21 19 4 20 8 4 7 12 15 ¶ = “GIV ET HEM UP00.
Portanto, a mensagem P est´a leg´ıvel e correta.
¤
2.5 Criptografia RSA
2.5.1 Uma no¸c˜ao de Criptografia de chave p´ublica
Nos criptosistemas estudados at´e agora, para codificar determinadas mensagens utiliz´avamos dois tipos de transforma¸c˜oes: a transforma¸c˜ao linear e a transforma¸c˜ao afim . Em ambos
Cap´ıtulo 2. Criptografia RSA 27
os casos, precis´avamos de um m´odulo para codificar a mensagem e outro para decodific´a-la, sendo que um poderia ser determinado a partir do outro, distinguindo-se apenas pelas chaves codificadora e decodificadora utilizadas.
Por exemplo, no caso da transforma¸c˜ao afim para a codifica¸c˜ao, utiliz´avamos a fun¸c˜ao:
C = aP + b mod N, onde o par (a, b) era chamado chave codificadora , denotada por Kc. No processo decodificador, por sua vez, utiliz´avamos o mesmo algoritmo: P = a−1C − a−1b mod N, sendo (a−1, −a−1b) a chave decodificadora, denotada por Kd.
A utiliza¸c˜ao deste tipo de criptosistema n˜ao se mostra muito vantajosa, tendo em vista ser relativamente f´acil determinar o m´odulo e a chave decodificadora a partir do m´odulo de codifica¸c˜ao. Assim, trata-se de um criptosistema em que para dificultar a quebra de c´odigo, mantendo o m´etodo mais seguro, dever-se-ia aumentar o tamanho da unidade de mensagem do texto original e do texto codificado. Entretanto, isto provocaria um aumento do tempo para realiza¸c˜ao de opera¸c˜oes aritm´eticas no processo de codifica¸c˜ao, principalmente no que diz respeito ao c´alculo do elemento inverso, a−1. O criptosistema de chave p´ublica surgiu como forma de solucionar este problema.
Defini¸c˜ao de um criptosistema de chave p´ublica
O criptosistema de chave p´ublica tem como caracter´ıstica fundamental, e o que o distingue dos demais criptosistemas aqui estudados, o fato de que o conhecimento do processo codificador n˜ao permite a determina¸c˜ao do processo decodificador, sem um tempo exaustivo de c´alculos. Assim, a fun¸c˜ao bijetiva f — que nos fornece a unidade de mensagem do texto codificado correspondente a cada unidade de mensagem do texto original — ´e conhecida como un´ıvoca pois, do ponto de vista pr´atico, ela n˜ao ´e invers´ıvel.
Al´em disso, a raz˜ao do nome deste tipo de criptosistema, chave p´ublica, baseia-se no fato de que cada usu´ario do m´etodo tem sua chave codificadora tornada p´ublica, ou seja, qualquer pessoa fica sabendo como mandar uma mensagem para um determinado banco ou empresa se as chaves , Kc, codificadoras de cada um destes destinat´arios s˜ao conhecidas. Como cada destinat´ario cont´em sua pr´opria chave decodificadora, Kd, a qual ´e mantida secreta, ele ser´a o ´unico capaz de ler a mensagem.
Autentica¸c˜ao
Uma das partes mais importantes de uma mensagem ´e a assinatura. A assinatura pessoal ´e dif´ıcil de ser duplicada, e isso leva o receptor a ter certeza de que a mensagem ´e de fato da pessoa que o nome consta assinado. Se a mensagem ´e particularmente importante, deve-se usar m´etodos adicionais para autenticar a comunica¸c˜ao. E numa comunica¸c˜ao eletrˆonica , onde n˜ao h´a assinatura f´ısica, deve-se buscar outros m´etodos. Por exemplo, quando um executivo de uma corpora¸c˜ao quer sacar dinheiro de sua conta pelo telefone, ele ´e submetido a um question´ario, com intuito de obter informa¸c˜oes pessoais — nome da m˜ae, por exemplo — que tanto o executivo quanto o Banco identificam — atrav´es dos dados fornecidos quando a conta foi aberta — no entanto, um impostor, no caso, n˜ao saberia de tais dados.
Na Criptografia de chave p´ublica existe uma maneira f´acil de se identificar de tal forma que ningu´em passar por vocˆe. Sejam A (Aline) e B (Beto) dois usu´arios do sistema. Seja fAa
Cap´ıtulo 2. Criptografia RSA 28
transforma¸c˜ao decodificadora com a qual qualquer usu´ario do sistema pode enviar mensagens para Aline, e seja fB a trasforma¸c˜ao an´aloga para Beto. Por simplicidade, assumiremos que o conjunto P de todas as unidades de mensagens de texto original e o conjunto C de todas as unidades de mensagens do texto codificado s˜ao iguais e os mesmos para todos os usu´arios. Seja P a “assinatura” de Aline. N˜ao seria suficiente que Aline enviasse para Beto a mensagem codificada fB(P ), tendo em vista que todo mundo ´e capaz de fazer isso e assim n˜ao seria poss´ıvel saber se a mensagem foi ou n˜ao forjada. Ao inv´es disso, no in´ıcio ou final da mensagem Aline deve transmitir fBf−1
A (P ). Ent˜ao, Beto ao decodificar, incluindo esta parte, obter´a o texto original exceto por um pequeno peda¸co que corresponde a f−1
A (P ). como Beto sabe que a mensagem ´e supostamente de Aline ele aplica fA (o qual ´e p´ublico) e obtem P . Como apenas Aline poderia ter aplicado a fun¸c˜ao f−1
A , ele sabe que a mensagem foi de fato enviado por Aline.
Na pr´atica, os sistemas de codifica¸c˜ao de chave p´ublica tendem a ser mais lentos do que implementar sistemas cl´assicos que est˜ao atualmente em uso. O n´umero de unidades de mensagens leg´ıveis que podem ser transmitidas por segundo ´e menor. Por esta raz˜ao, sistemas de codifica¸c˜ao de chave p´ublica n˜ao foram disseminados em termos de mercado. Entretanto, se uma rede de usu´arios sente que o sistema tradicional ´e limitado, ent˜ao eles devem usar um sistema de Criptografia de Chave P´ublica para auxiliar a capacidade de enviar uns aos outros suas chaves K = (Kc, Kd) do sistema cl´assico.
Portanto, as regras b´asicas para o sistema cl´assico podem ser aceitas para sobrepor o outro sistema, e as chaves podem ser periodicamente trocadas usando o lento sistema de Criptografia de Chave P´ublica, enquanto um grande volume de mensagens possa ser mandado r´apido, usando m´etodos antigos.
2.5.2 O Sistema RSA
De acordo com o que foi descrito anteriormente, cada usu´ario deste criptosistema possui sua pr´opria chave codificadora e decodificadora, sendo que a primeira ´e conhecida publicamente enquanto a outra ´e mantida secreta, de forma a manter a seguran¸ca do m´etodo. Nosso pr´oximo passo consiste em descrever como determinar os m´odulos e as chaves, tendo como base a grande dificuldade que existe no processo de fatora¸c˜ao de grandes n´umeros inteiros. Descri¸c˜ao do m´etodo
Para codificar uma mensagem usando RSA ´e suficiente conhecer o produto n de dois n´umeros inteiros primos muito grandes e escolhidos aleatoriamente, os quais denotaremos por p e
q. Enquanto isso, para decodificar uma mensagem precisamos conhecer cada primo p e q separadamente. Assim, mesmo que n seja conhecido publicamente, para decodificar
precisamos fator´a-lo. Considerando que n ´e relativamente grande, sua fatora¸c˜ao n˜ao ´e um trabalho simples, o que garante a dificuldade na quebra do c´odigo.
a) Constru¸c˜ao do criptosistema
Cap´ıtulo 2. Criptografia RSA 29 1. escolher aleatoriamente dois primos grandes p e q;
2. calcular ϕ(n) = (p − 1) · (q − 1) (quando p e q s˜ao conhecidos, fica f´acil calcular
ϕ(n), no entanto, o inverso n˜ao ´e verdadeiro);
3. escolher um n´umero inteiro e entre 1 e ϕ(n) tal que mdc¡e, ϕ(n)¢ = 1 e estabelecer a chave codificadora:
Kc= (n, e);
4. calcular o inverso multiplicativo de e m´odulo ϕ(n):
d = e−1 mod ϕ(n); e estabelecer a chave decodificadora Kd = (n, d).
b) m´odulos para codifica¸c˜ao e decodifica¸c˜ao:
Ap´os um usu´ario A determinar sua chave codificadora Kc= (n, e), ela ´e tornada p´ublica e qualquer outro usu´ario B poder´a enviar mensagens para A utilizando o m´odulo:
(2.15) C = f (P ) = Pe mod n
o que corresponde `a transforma¸c˜ao de codifica¸c˜ao, uma fun¸c˜ao bijetiva de Z/NZ nele mesmo.
Exemplo. Suponha que um determinado usu´ario escolha aleatoriamente os primos p = 5 e
q = 7, ent˜ao n = p · q = 35 e ϕ(n) = (p − 1) · (q − 1) = 24. Al´em disso, podemos escolher e como sendo 7 ¡mdc(7, 24) = 1¢. Logo, se desejarmos codificar uma unidade de mensagem cujo equivalente n´umerico ´e 52, utilizamos a fun¸c˜ao (2.15):
C ≡ (52)7 mod 35 ≡ 3 mod 35.
Portanto a unidade de mensagem do texto original com equivalente num´erico 52 corresponde `a unidade de mensagem do texto codificado com equivalente num´erico 3.
Para se decodificar ´e necess´ario conhecer a chave de decodifica¸c˜ao Kd = (n, d), onde d ´e o inverso multiplicativo de e m´odulo ϕ(n), ou seja,
(2.16) d = e−1 mod ϕ(n),
o que esclarece a condi¸c˜ao de que e e ϕ(n) devam ser primos, caso contr´ario, n˜ao seria poss´ıvel determinar d. Ap´os determinar o valor de d, utilizamos o m´odulo:
(2.17) P = Cdmod n = f−1(C)
Cap´ıtulo 2. Criptografia RSA 30
´
E f´acil verificar que as fun¸c˜oes (2.15) e (2.17) s˜ao inversas uma da outra, devido `a nossa escolha de d. De (2.15), obtemos que:
Pe ≡ C mod n ⇒ P ≡ Ce−1
mod n como e−1 mod ϕ(n) = d , ent˜ao
P ≡ Cd mod n ⇒ f−1(C) = P ≡ Cdmod n
Exemplo. Suponha agora que se conhe¸ca a chave de codifica¸c˜ao, Kc = (n, e) = (33, 7), e que vocˆe deseja decodificar a unidade de mensagem do texto com equivalente num´erico 15. Para resolver este problema, devemos determinar a chave decodificadora: Kd= (n, d). Sendo
d ≡ e−1 mod ϕ(n), devemos fatorar n em um produto de dois n´umeros primos, a saber:
n = 33 = 3 · 11,
logo, ϕ(n) = 20 e d ≡ 7−1 mod 20 ≡ 3 mod 20. Assim, Kd = (n, d) = (33, 3). Agora utilizamos a fun¸c˜ao (2.17): P ≡ (15)3 mod 33 ≡ 9 mod 33. Portanto 9 ´e a decodifica¸c˜ao de 15.
Observa¸c˜oes.
a) Para ilustrar o criptosistema RSA, utilizamos valores pequenos para p e q de forma a facilitar nossos c´alculos e esclarecer como o m´etodo deve ser aplicado. Mas na pr´atica,
p e q s˜ao primos muito grandes, com mais de 100 d´ıgitos e, portanto, os c´alculos devem
ser feitos utilizando-se um computador, principalmente no que diz respeito `a fatora¸c˜ao de n.
b) Na escolha de p e q, o usu´ario A deve verificar se algumas condi¸c˜oes s˜ao satisfeitas. Dentre elas, devemos nos certificar que os dois primos n˜ao sejam valores muito pr´oximos, e que p − 1 e q − 1 n˜ao tenham um mdc muito pequeno mas que ambos tenham um fator primo relativamente grande.
c) Conforme foi visto anteriormente, quando N ´e o produto de dois primos p e q, conhecer
ϕ(n) ´e equivalente a conhecer a fatora¸c˜ao. Suponha agora que conseguimos quebrar um
sistema RSA ao determinar um inteiro positivo d tal que aed ≡ a mod n para todo a
primo com n. Isto ´e equivalente a ed − 1 ser um m´ultiplo do mmc de p − 1 e q − 1. Conhecer m = ed − 1 na verdade ´e mais fraco do que conhecer ϕ(n). No entanto, agora apresentaremos um procedimento que nos permite usar o inteiro m para fatorar n. Suponha que n seja conhecido, assim como um inteiro n tal que am ≡ 1 mod n, para
todo a primo com n. Observe que tal inteiro m deve ser par. Primeiramente verifi-camos se m
2 possui a mesma propriedade e, neste caso, podemos substituir m por m
2.Se
am/2 6≡ 1 mod n para todo a primo com n, ent˜ao devemos ter am/2 6≡ 1 mod n para pelo
menos 50 % dos a’s em (Z/NZ)∗. Assim, se testarmos in´umeros a’s escolhidos aleato-riamente e encontrarmos que em todos os casos temos am/2 ≡ 1 mod n, ent˜ao temos
alta probabilidade de ter tal congruˆencia para todo a primo com n, e assim poderemos substitui m por m
2. Realizamos este processo at´e que n˜ao tenhamos tal congruˆencia quando tomarmos metade do expoente. agora existem duas possibilidades:
Cap´ıtulo 2. Criptografia RSA 31 1. m/2 ´e m´ultiplo de um dos dois n´umeros p − 1 ou q − 1 , mas n˜ao de ambos. Neste
caso, sempre teremos am/2 ≡ 1 mod p acontece, mas em exatamente 50 % das
vezes am/2 ´e congruente a −1 ao inv´es de ser congruente a +1 m´odulo q.
2. m/2 n˜ao ´e um m´ultilplo de p − 1 nem de q − 1. Neste caso temos que am/2 ≡ 1
tanto m´odulo p quanto m´odulo q (e consequentemente m´odulo n) em exatamente 25 % das vezes,teremos am/2≡ −1 m´odulo p e q em exatamente 25 % das vezes,
e para os 50 % restantes dos valores de a , am/2 ≡ 1 m´odulo um dos primos e am/2 ≡ −1 m´odulo o outro primo.
Ent˜ao, por tentativas aleat´orias, teremos alta probabilidade de brevemente encontrar um a tal que am/2− 1 ´e divis´ıvel por um dos dois primos mas n˜ao pelo outro. Uma
vez que encontramos tal a podemos imediatamente fatorar n, pois mdc(n, am/2) = p. O exemplo acima ´e um exemplo de algoritmo probabil´ıstico.
d) Como enviar uma assinatura em RSA? Quando discutimos autentica¸c˜ao assumimos por simplicidade que P = C. Apresentaremos agora uma maneira de evitar o problema de termos diferentes nAe o problema de termos o n´umero de letras na unidade de mensagem do texto original diferente do n´umero de letras na unidade do texto codificado. Suponha que ALine est´a enviando sua assinatura para Beto. Ela conhece a chave codificadora de Beto Kc,B = (nB, eB) e a sua pr´opria chave decodificadora. O que ela faz ´e enviar
fBfA−1(P ) se nA6 nB, ou ent˜ao fA−1fB(P ) se nA > nB. Isto ´e, no primeiro caso ela toma o menor resto positivo de PdA m´odulo nA; e ent˜ao considerando este n´umero m´odulo
nb, ela calcula (PdA mod nA)eB mod nB, o qual manda como unidade de mensagem do texto codificado. J´a no caso nA > nB, primeiramente calcula-se PeB mod nB e ent˜ao, trabalhando m´odulo nA eleva-se `a potˆencia dA. Claramente Beto pode verificar a autenticidade da mensagem no primeiro caso elevando `a potˆencia dB m´odulo nB e elevando o resultado obtido `a potˆencia eA m´odulo nA; no segundo caso ele realiza as mesmas duas opera¸c˜oes, mas na ordem inversa.