Vous êtes sur la page 1sur 18

30 years of the RSA Crytosystem RSA

Samáris Ramiro Pereira (Faculdade de Tecnologia de São Bernardo do


Campo - FATEC SB) - SP, Brasil, profa_samaris@yahoo.com.br

Eduardo Takeo Ueda - (Universidade de São Paulo - USP) - SP, Brasil,


edu_takeo@gmail.com

Abstract. The RSA cryptosystem are the fact that this cryptographic algorithm
is the world de facto standard public key cryptosystem and it includes fundamental
mathematical concepts for the understanding of the modern cryptography being a
foundation for more advanced studies. This article synthesizes 30 years of research
on RSA, analyzing concepts and algorithms used in variations and attacks.

Key Words. RSA, Public Key, Digital Signature, Number Theory.

30 anos do Algoritmo Criptográfico de Chave Pública RSA

Resumo. O algoritmo criptográfico de chave pública RSA é um padrão


mundial tanto para confidencialidade como para assinatura digital e inclui onceitos
matemáticos fundamentais para a compreensão da criptografia moderna sendo um
alicerce para estudos mais avançados. Este artigo sintetiza 30 anos de pesquisa
sobre o RSA, analisando conceitos e algoritmos utilizados em variações e ataques.

Palavras Chaves. RSA, Chave Pública, Assinatura Digital, Teoria dos


Números.

1. Introdução
Cada vez mais transações comerciais, financeiras, governamentais e mesmo
pessoais migram para o mundo digital. Esse fato implica em que as informações
antes armazenadas em papel, filme e outros meios físicos passam a serem
armazenadas na forma eletrônica, facilitando seu armazenamento e
compartilhamento. No entanto, sua manipulação também se torna mais fácil, o que
implica em fraude e falsificação.
Métodos criptográficos é a forma mais adequada de fornecer integridade,
confidencialidade e autenticação de dados e entidades sobre informações digitais,
pois independem da natureza dos dados e dos meios físicos onde eles são
armazenados. Neste contexto, crescem as pesquisas na área de segurança da
informação e entre elas as de criptologia.
O algoritmo criptográfico RSA é um padrão mundial entre os algoritmos
criptográficos de chaves públicas, tanto para confidencialidade, como para assinatura
digital. O objetivo da pesquisa realizada, a qual foi tema de dissertação de mestrado
do primeiro autor, foi analisar as pesquisas realizadas ao longo dos 30 anos de
existência do RSA, desde o seu anúncio, em 1977, possibilitando a criação de uma
lista atualizada de cuidados, necessários para uma implementação RSA segura.
Foram analisados conceitos matemáticos, padronizações, variações, ataques, a
evolução dos cuidados com o algoritmo ao longo dos anos e outras considerações.
Esta lista agiliza estudos, análises e atualizações para pesquisadores interessados
diretamente no tema ou mesmo para que profissionais de engenharia de software e
de desenvolvimento de sistemas possam visualizar o processo envolvido no RSA e
se desejarem se assegurarem de estarem utilizando corretamente este algoritmo em
suas implementações.

2. Algoritmos Criptográficos de Chave Pública e o RSA


Um algoritmo criptográfico de chave pública se baseia em uma função
unidirecional com segredo1 a qual permite que, em um sistema criptográfico de
chave pública, para cada par de chaves, pública e privada, a chave pública seja de
conhecimento geral. Porém, a chave privada deve ser apenas de
conhecimento do proprietário do par de chaves. O proprietário da chave secreta pode
calcular eficientemente a função em ambas as direções, cifrando e decifrando
facilmente, enquanto que os demais, possuidores apenas da chave pública, só terão
tratabilidade para calcular a função de ciframento.
Desde 1976, quando foi apresentado o conceito de chave pública (Diffie e
Hellman, 1976), diversos sistemas de chave pública foram criados. Alguns
apresentaram quebras na segurança. Outros apresentaram grande dificuldade de
implementação. Atualmente, três tipos de sistemas criptográficos de chave pública
predominam no mercado, os quais se baseiam em problemas envolvidos com
funções unidirecionais com segredo: o problema da fatoração de inteiros, o problema
do logaritmo discreto sobre corpos finitos e o problema do logaritmo discreto sobre
curvas elípticas.
Apesar do RSA estar relacionado com mais de um problema encontrado em
funções unidirecionais com segredo, ele é o exemplo mais conhecido de algoritmo de
chave pública que utiliza o problema da fatoração de inteiros. Ele permite troca de
chaves, criptografia e assinatura digital, sendo mais completo do que o algoritmo
DSA que permite apenas assinatura digital e o algoritmo Diffie-Hellman permite

1
Função na qual é tratável de se calcular y=f(x), mas é intratável, o cálculo de x=f-1(y), a menos que
se tenha conhecimento de determinado parâmetro (segredo).
apenas troca de chaves. Apesar do algoritmo ElGamal permitir troca de chaves,
criptografia e assinatura digital, ele é bem menos utilizado do que o algoritmo RSA.
Comparando o RSA com algoritmos de curvas elípticas, observa-se que
existem diversas patentes relacionadas a cálculos específicos para algoritmos com
curvas elípticas e a patente norte-americana do RSA original está expirada desde
2000. Algoritmos com curvas elípticas podem prover o mesmo nível de segurança
que o RSA com chaves menores, sendo mais eficientes do que o RSA na assinatura
e deciframento, porém, são mais lentos para cifrar e verificar assinaturas digitais.
Outro aspecto a ser comparado é que, devido à data de criação dos algoritmos com
curvas elípticas serem recentes em relação ao RSA, a segurança do RSA foi muito
mais testada do que a dos algoritmos com curvas elípticas.
O RSA é o algoritmo de chave pública mais utilizado e sua utilização tem
crescido ainda mais desde que expirou a validade da sua patente norte-americana,
se difundindo em diversos aplicativos com código aberto sobre licença GPL, como o
OpenSLL.

3. Aplicações RSA
O algoritmo RSA é um padrão mundial e suas aplicações são muitas. Seguem
exemplos de aplicativos que utilizam o RSA entre as suas ferramentas de segurança.

Linguagem Java, pacote de segurança


Pelo fato da linguagem Java estar fortemente associada à Internet, um dos
aspectos mais divulgados da linguagem é sua segurança. Ela oferece várias
camadas de controle de segurança, incluindo a criptografia RSA. O pacote de
segurança da linguagem Java pode ser utilizado para gerar criptografia,
autenticação, assinatura digital e pares de chaves (pública e privada). Para cada
uma das opções citadas, há classe disponível para implementação do RSA.

Protocolo SSL e OpenSSL


Encontrado na maioria dos browsers, o protocolo SSL é uma camada do
protocolo de rede com a responsabilidade de gerenciar um canal de comunicação
seguro entre cliente e servidor. O RSA é implementado no SSL, assim como no
OpenSSL, aplicativo composto por uma biblioteca que serve de base para
implementações de rede seguras, sobre licença GPL, com código fonte aberto.

Skype, criptografia utilizada


O Skype é um software de comunicação de voz sobre IP, permitindo realizar
telefonemas via Internet. Segue o modelo ponto-a-ponto e utiliza um sistema que
engloba o algoritmo criptográfico simétrico AES com chave de 256 bits e o RSA com
chaves de 1024, 1536 ou 2048 bits (Skype, 2008).
Cartões inteligentes
O RSA pode ser implementado em cartões inteligentes, como por exemplo, no
cartão inteligente Gem Safe Xpress (Cartões, 2008).

PGP, software para criptografia


O PGP é um software para implementação de segurança em correio
eletrônico, escrito por Philip Zimmermann, em 1991. É considerado um padrão para
a criptografia de correio eletrônico. Por meio do PGP, podem-se realizar ciframentos
e deciframentos, assinaturas digitais e verificações de assinaturas e efetuar a gestão
de chaves públicas de usuários do software. Desde a primeira versão do software
PGP foi utilizado o RSA, motivo pelo qual, o programa ficou proibido por cerca de
dois anos nos Estados Unidos. Na época, ele infringia a patente do algoritmo RSA
(Zimmermann, 2008).

ICP-Brasil
O algoritmo RSA é utilizado na infra-estrutura de chaves públicas brasileira e é
o único algoritmo de chave pública que pode ser utilizado pela AC-Raiz, a raiz das
Autoridades Certificadoras de assinaturas digitais no Brasil (ICP-Brasil, 2008).

4. O algoritmo RSA
O RSA foi desenvolvido em abril de 1977 (Rivest at al., 1978), pelos
professores do MIT Ronald Rivest e Adi Shamir e pelo professor da USC Leonard
Adleman, batizado com as iniciais de seus nomes.

A patente para o algoritmo RSA (patente 4.405.829 norte-americana) foi


emitida no dia 20 de setembro de 1983, com licença exclusiva para a RSA Security
Inc. por meio do Massachusetts Institute of Technology, com data de expiração para
20 de setembro de 2000, incluindo além da confecção de produtos com o algoritmo,
sua utilização e sua venda, mas a RSA Security Inc., permitiu durante todo este
período, a utilização não comercial gratuita do algoritmo, principalmente para uso
acadêmico em docência e pesquisas. No dia 6 de setembro de 2000, a RSA
Security Inc. renunciou a patente e tornou público o algoritmo, porém, existem
variações do algoritmo RSA patenteadas por outros proprietários e com licença em
vigor. Em hardware, o RSA pode ser encontrado em cartões inteligentes e em linhas
telefônicas seguras.

O RSA permite:
• ciframento e deciframento de mensagem, no conceito de chave pública;
• a geração e a verificação de uma assinatura digital;
• a combinação dos itens anteriores.

Em 1999, Boneh afirmou que a estrutura do RSA não precisou ser alterada
desde a sua criação, pois os ataques encontrados são exemplos de utilizações
inadequadas, podendo ser evitados com a escolha dos parâmetros apropriados
(Boneh, 1999). Esta afirmação continua válida atualmente.
O algoritmo RSA gera a chave pública e a chave privada a partir de números
primos grandes, sendo computacionalmente intratável obter a chave privada a partir
da chave pública. O tamanho ideal dos fatores primos do módulo RSA varia
conforme a necessidade de cada aplicação. Quanto maior forem os números primos
usados para a criação das chaves, maior será a segurança proporcionada por esse
algoritmo e menor será o seu desempenho.

O RSA utiliza três funções unidirecionais com segredo:


• Dificuldade da fatoração de número compostos grandes: Função exposta a
ataques por fatoração: dado dois números primos grandes, p e q, é tratável se
calcular n=pq, porém, fatorar n a fim de descobrir p e q é computacionalmente
intratável.

• Dificuldade de se encontrar a raiz e-ésima discreta: Função exposta a


ataques por criptograma conhecido: calcular uma exponenciação em módulo n
é tratável: c=me mod n, mas determinar m sendo a raiz e-ézima de mod n, é
computacionalmente intratável, a menos que se tenha conhecimento do
inverso multiplicativo de e mod φ(n) ou da fatoração de n.

• Dificuldade de se calcular logaritmos discretos módulo n: Função exposta a


ataques por mensagem conhecida: dado que m = cd mod n, tem-se que logc
m = logc cd =d, então d=logc m.

Na década de 90, o problema do logaritmo discreto foi muito pesquisado,


porém os mais eficientes algoritmos para cálculo de logaritmos discretos possuem
complexidade computacional de tempo de processamento semelhante aos
algoritmos de fatoração mais eficientes no momento. Geralmente, o logaritmo
discreto em um grupo arbitrário de tamanho n possui complexidade O(√n) (Pereira,
2008).

Geralmente, as implementação RSA seguem as especificações do PKCS #1


ver. 2.1. O PKCS é um conjunto de documentos com especificações produzidas
pelos Laboratórios RSA em cooperação com desenvolvedores de sistemas de
segurança de várias partes do mundo, que visa acelerar por meio de padronização a
utilização e desenvolvimento de algoritmos de chave pública. O PKCS surgiu em
1991 como um resultado de encontros com um pequeno grupo de pessoas
precursoras no uso da tecnologia de chave pública e desde então tem se tornado
referência até mesmo para padrões estabelecidos como ANSI X9, PKIX, SET,
S/MIME e SSL. Atualmente seu desenvolvimento ocorre basicamente via lista de
discussões e workshops ocasionais (RSA, 2008).
A última versão do PKCS #1 é a versão 2.1, de 14 de junho de 2002. A
versão mais antiga do PKCS #1, entre as disponíveis pelas publicações dos
Laboratórios RSA, é a versão 1.5, de 1 de novembro de 1993. O padrão para
assinatura digital especificada no PKCS #1 ver. 1.5 é vulnerável a um ataque
descrito por Bleichenbacher e aplicado contra o protocolo SSL ver. 3.0 e portanto,
não deve ser utilizado (RSA, 2008).

5. Processo de criação do par de chaves públicas no algoritmo RSA


Uma mensagem M é cifrada por substituição em blocos de tamanho fixo com
k bits: M={m1,m2,..., mz}, onde mi é um bloco de k bits. Cada bloco mi deve ter um
valor menor que o valor do módulo n, e portanto, menor ou igual a lg n bits, mas não
pequeno o suficiente para sofrer ataques de força bruta. Se o tamanho de k bits do
bloco mi fosse pequeno, um ataque de força bruta seria possível pela criação de um
dicionário contendo os pares ordenados (mi, ci), com ci = (mi)e mod n. Esta variação
de ataque de força bruta não testa todas as chaves possíveis, mas verifica no
dicionário criado todos os criptogramas possíveis encontrando sua respectiva
mensagem. Como o módulo tem valores na ordem de 1024 bits ou maior, o tamanho
do bloco tem no mínimo 1023 bits e com |mi| = 1023 bits não é tratável um ataque de
força bruta utilizando um dicionário (mensagem, criptograma). Para possibilitar o
deciframento correto é necessário que o tamanho em bits do bloco seja menor que o
tamanho em bits do módulo. Para otimizar o tempo de processamento e o espaço de
armazenamento, é necessário que o tamanho do bloco em bits seja o mais próximo
possível do tamanho em bits do módulo, desta forma, se k bits for o tamanho máximo
do bloco e w bits for o tamanho de n, deve-se assegurar k=w-1. O módulo n é o
produto de dois primos ímpares, portanto n nunca será potência de 2, o que
garantiria que n-1 tivesse 1 bit a menos que n. Há a necessidade de se completar o
tamanho do último bloco, com padrão a ser acordado, por exemplo, preenchendo-o
com bits nulos.
Para a criação das chaves RSA (Menezes at al., 2001) são escolhidos dois
números primos grandes distintos: p e q.
Computa-se o módulo RSA, também chamado módulo n ou simplesmente
módulo: n=pq.
Calcula-se φ(n)=(p-1)(q-1).
Escolhe-se um número inteiro positivo e, chamado de expoente público, tal
que 1< e< φ(n), de forma que mdc(e, φ(n)) = 1.
Determina-se o número d, chamado de expoente privado, tal que ed-1 seja
divisível por φ(n).
O par (e, n) é a chave pública e o par (d, n) é a chave privada. Os valores p e
q devem ser mantidos em segredo.
O ciframento é dado por c = me mod n, sendo m representação numérica (em
números inteiros positivos) do texto legível, dividido em blocos menores que n.
O deciframento é dado por m = cd mod n.
A escolha dos primos p e q e do expoente público e, deve ser cuidadosa.

Tabela 1. Variações RSA e suas finalidades


Variação Finalidade
RSA utilizando o Expoente Universal agilizar o deciframento
RSA com Chave Privada Particionada compartilhar chave privada
RSA em Lote Obsoleto
RSA CRT pelo Algoritmo de Gauss agilizar o deciframento
RSA CRT pelo Algoritmo de Garner agilizar o deciframento
RSA CRT pelo Algoritmo ART agilizar o deciframento
MRSA agilizar o deciframento
RSA PkQ agilizar o deciframento
DRSA Segurança
DRSA por Padhye segurança e velocidade
RSA Redistribuído agilizar o ciframento
MRSA Redistribuído agilizar o ciframento
DRSA por Padhye Redistribuído agilizar o ciframento seguro
RSA Desbalanceado segurança por longo prazo
Twin RSA analisa primos gêmios para uso
futuro

6. Variações RSA
Uma variação de um algoritmo criptográfico consiste em uma modificação
realizada na definição original deste, a fim de trazer algum benefício ao processo,
seja este de segurança, de tempo de processamento, de espaço de armazenamento
em memória ou outras vantagens. Pode ocorrer em diferentes partes do algoritmo e
atingir objetivos distintos.
Devido ao tempo de existência do RSA, surgiram variações da definição inicial
e algumas foram adotadas como padrão em normas técnicas. Não há análise para
se determinar qual a melhor variação RSA. Cada variação visa um determinado
objetivo. Deve-se analisar a melhor opção de variação para a implementação a ser
realizada, levando-se em consideração fatores tais como necessidade de segurança,
tempo de processamento, capacidade computacional, possibilidade de investimento
e necessidades de pagamento de taxas relativas a patentes.

Figura 1. Variações RSA: Linha do Tempo

A figura 1 posiciona variações RSA no tempo e a tabela 1 apresenta estas


variações e suas respectivas finalidades, possibilitando uma visão abrangente.
Maiores informações podem ser obtidas em (Pereira, 2008).
A variação Twin RSA utiliza primos gêmeos e foi proposta sem definição de
aplicação, para que fosse analisada pela comunidade de criptologia, sendo sugerido
seu uso para que um usuário pudesse ter dois pares de chaves RSA com o custo de
armazenamento em memória de um e ainda pudesse cifrar suas mensagens com o
módulo n e assiná-las com o módulo n+t, sendo mais uma opção para solucionar o
problema de blocagem em ciframentos com assinatura digital pelo RSA.
7. Ataques e Defesas
A escolha inadequada de parâmetros RSA, a divulgação dos mesmos e outros
erros de implementação possibilitam ataques ao RSA, assim como o ataque MITM,
que pode ocorrer na distribuição de chaves de qualquer algoritmo de chave pública.
A figura 2 posiciona os ataques que foram apresentados no tempo,
possibilitando uma visão geral e a tabela 2 apresenta uma lista de ataques ao RSA e
suas respectivas complexidades computacionais de tempo de processamento. Cada
ataque exige uma detalhada análise dos cuidados necessários para que este não
obtenha sucesso. Um único cuidado que seja esquecido torna a implementação RSA
vulnerável. Em caso de utilização de variações do RSA, devem-se observar os
cuidados específicos para esta variação. É importante também, estar atento a novas
publicações sobre o tema, visto que podem surgir novos ataques ao algoritmo.

Tabela 2. Ataques RSA: Complexidade de Tempo de Processamento

Além dos ataques citados, em algoritmos RSA implementados em cartões


inteligentes, avaliando-se o tempo que um cartão inteligente leva para fazer um
deciframento ou uma assinatura digital, pode-se recuperar o expoente privado d,
devido à relação existente entre o tamanho do expoente e o tempo de
processamento da exponenciação modular (Boneh, 1999). Este mesmo ataque foi
proposto, medindo-se ao invés do tempo, o consumo de energia elétrica do cartão
inteligente durante a geração da assinatura digital pois o adversário provavelmente
pode descobrir a chave privada: durante a redução modular de uma mensagem
muito longa, assim como ocorre com o tempo, o consumo de energia elétrica do
cartão será acima da média.

Figura 2. Ataques RSA: Linha do Tempo

A maneira para se defender desse tipo de ataque é baseada na técnica de


ocultamento. Antes do deciframento (ou assinatura), o cartão inteligente escolhe um
valor aleatório r pertencente a Z*n e calcula m'=cre mod n. Depois ele aplica d em m',
a qual é desconhecida pelo adversário, não possibilitando o ataque. É obtido c'=(m')d
mod n. Por fim, é processado c=c'/r mod n.
A segurança do RSA depende ainda, da intratabilidade da fatoração de
números inteiros. Existem dois tipos de algoritmos de fatoração: os de propósito
especial e os de propósito geral. Os algoritmos de fatoração de propósito especial
dependem do tamanho dos fatores desconhecidos do número inteiro n que se deseja
fatorar, de forma que, sua eficiência, depende do tamanho do menor fator primo de
n. Este tipo de algoritmo é mais eficiente para fatorar números que possuem fatores
primos pequenos (com até 256 bits) do que para fatorar números que possuem
fatores primos balanceados. Os algoritmos de fatoração de propósito geral
dependem do tamanho do número n que se deseja fatorar.
O custo de tempo de processamento dos principais algoritmos da fatoração foi
citado na tabela 1 e consideram:
n: o número inteiro a ser fatorado;
e: a constante de Euler (e=2,71828183);
p: o menor fator primo de n e
o(1): função assintótica que se aproxima de 0, quando n tende ao infinito.

A figura 3 apresenta um gráfico de fatoração de inteiros ao longo do tempo.

Figura 3. Fatoração de inteiros ao longo do tempo


8. Dados Históricos
Foram realizadas pesquisas ao longo dos trinta anos de existência do
algoritmo RSA. Muitas pesquisas ficaram obsoletas como as que testam resistência
aos algoritmos de fatoração mais eficientes da época, variações para assinaturas
digitais sem empacotamento, estudos para implementações em hardware,
indicações de procedimentos para implementação segura na época em que foram
escritas. Segue as referências que marcaram rumos importantes na história do
algoritmo RSA (Pereira, 2008):

• 1976: Proposto o conceito de Chave Pública. Diffie e Hellman.

• 1977: Publicação do algoritmo RSA. Rivest, Shamir e Adleman. Proposto o


ataque cíclico de Simmons e Norris.

• 1979: Análise de pontos fixos no ciframento RSA. Blakley e Borosh. Proposto


o ataque cíclico generalizado. Williams e Schmid.

• 1981: Proposto o algoritmo de fatoração Crivo Quadrático. Pomerance.

• 1982: Proposto o RSA CRT. J. J. Quisquater and C. Couvreur.

• 1985: Proposto o algoritmo ElGamal. Proposto o conceito de Curvas Elípticas.


Koblitz, e Miller.

• 1986: Proposto o ataque de Hastad (expoente público pequeno).

• 1988: Proposto o algoritmo de fatoração NFS. Pollard.

• 1990: Proposto RSA Rebalanceado. Wiener.

• 1991: Publicado PKCS #1. A versão 1.0 foi publicada em março, sofrendo
correções até estabilizar em junho, com a publicação da versão 1.4. Publicado
o software PGP. Zimmermann. Fatorado Módulo RSA-100, com 332 bits e 100
dígitos decimais, utilizando-se o algoritmo QS.
• 1992: Proposto ataque MITM, Ocultamento. Davida. Proposto algoritmo
análogo ao RSA baseado em curvas elípticas. Demytko.

• 1994: Mensagens passam a ser codificadas. Bellare e Rogaway. Proposto


outro algoritmo análogo ao RSA baseado em curvas elípticas. Koyama at al.
• 1995: Demonstrado que primos fortes são suficientes para proporcionar
defesa ao RSA contra ataques cíclicos (não necessitando de primos
duplamente fortes). Maurer.

• 1995: Criado o projeto FAFNER, que busca utilizar o ambiente distribuído na


Internet para quebrar algoritmos criptográficos.

• 1996: Proposto a codificação de mensagem RSA-OAEP. Bellare e Rogaway.


Proposto o ataque à Exponenciação Modular. Kocher.

• 1997: Proposto o MRSA. Collins, Hopkins, Langford e Sabin.

• 1998: Requerida a patente do MRSA. Pedido de registro de patente norte-


americana para o MRSA abril de 1998. Publicado PKCS #1 versão 2.0. Esta
versão incorpora ao PKCS #1 o RSAOAEP. Proposto o RSA PkQ. Takagi.
Proposto o RSA-PSS. Bellare e Rogaway.

• 1999: Proposto o DRSA. Pointcheval.

• 2000: Padrão ISO/IEC 9796-1 fica obsoleto. Grieu. Expoente privado não
deve ser menos que n0,292. Boneh e Durfee. Expirada a patente do algoritmo
RSA.

• 2002: Publicado PKCS #1 versão 2.1. Este versão incorpora ao PKCS #1 o


RSAPSS e o MRSA. Proposto o algoritmo de teste determinístico de
primalidade AKS. Agrawal at al.

• 2005: Proposto o dispositivo TWIRL. Shamir e Tromer. Proposto o Twin


MRSA. Lenstra e Weger. Fatorado Módulo RSA-640, com 640 bits e 193
dígitos decimais, com o algoritmo NFS em processamento paralelo.
• 2006: Proposto o RSA-CRT pelo algoritmo ART para MRSA. Rao e Yang.

• 2007: Em 23 de abril o projeto NFSNET divulgou que o processamento


distribuído de fatoração do número 2772 + 1 estava 70% concluído (NFSNET,
2008).

9. Cuidados RSA
O RSA é um algoritmo criptográfico de chave pública amplamente aceito e
disseminado que permite o sigilo de mensagens e a geração e verificação de
assinaturas digitais (autenticação de originalidade de dados e identidade do
remetente). Sua estrutura não precisou ser alterada desde a sua criação, mas
existem vulnerabilidades caso sua implementação não seja cuidadosa. O RSA utiliza
uma teoria matemática elegante, com vários conceitos matemáticos envolvidos,
sendo que a análise destes fundamentos matemáticos possibilita maior confiança na
segurança dele, é um embasamento para a criação de variações que apresentem
benefícios e é um alicerce para estudos mais sofisticados.
A maior vulnerabilidade do RSA se encontra na falta de atenção quanto aos
cuidados que seguem, a serem observados ao se desenvolver uma aplicação que
utilize o algoritmo RSA, envolvendo implementação, escolha das chaves e utilização
do algoritmo (Pereira, 2008):

I. Os primos p e q devem ser grandes para evitar ataques de força bruta. A


ordem de grandeza destes primos deve ser analisada conforme o contexto
da aplicação, podendo variar conforme a necessidade de segurança e
conforme a capacidade computacional relacionada à aplicação.
• Atualmente, o tamanho mínimo considerado seguro para os primos p e
q é de 512 bits.

II. Os números primos p e q devem ter aproximadamente o mesmo


comprimento em bits, para evitar ataques com algoritmos de fatoração no
número primo de menor tamanho.
• Para aplicações atuais são aceitáveis módulos n com 1024 bits. Nestes
casos, os primos p e q devem ter 512 bits cada um. Para novas
aplicações é recomendável a utilização de módulos com 2048 bits e
nestes casos, os primos p e q devem ter 1024 bits cada um.

III. A diferença |p-q| não pode ser pequena, pois se p é próximo de q, então p
é aproximadamente igual à raiz quadrada de n e efetuando-se testes
sucessivos para todos os primos próximos a raiz quadrada de n encontra-
se p (ou q).
• Este ataque possibilita a fatoração de n em tempo O(|p-q|), o qual não
deve ser tratável. Como referência, pode-se utilizar |p-q|
aproximadamente igual a 2x, x sendo o quociente de |n| dividido por 4.

IV. Cada um dos números p-1 e q-1 deve ter um fator primo grande, caso
contrário, fica possível fatorar n em tempo computacional tratável, como
por exemplo, com o algoritmo de fatoração p-1 de Pollard.
• No mínimo, p-1=2p' e q-1=2q', com p' e q' também primos da mesma
ordem de grandeza que p e q.

V. Cada um dos números p+1 e q+1 deve ter um fator primo grande, caso
contrário, torna-se possível fatorar n em tempo computacional tratável,
como por exemplo, com o algoritmo de fatoração p+1 de Pollard.
• No mínimo, p+1=2p'' e q+1=2q'', com p'' e q'' também primos da mesma
ordem de grandeza que p e q.

VI. O mdc(e-1, p-1) e o mdc(e-1, q-1) são sempre maior ou igual a 2, mas
devem ser pequenos para evitar um elevado número de pontos fixos.

VII. O tamanho do bloco em bits não pode ser pequeno demais para que
possibilite a construção de um tabela de pares ordenados (mensagem,
criptograma).
• O tamanho de bloco ideal é menor inteiro maior ou igual a lg(n)-1.

VIII. Em uma assinatura digital, ao se particionar a mensagem M em blocos,


não se deve permitir mdc(m, n) diferente de 1, evitando assim, um ataque
de fatoração de n via mdc (c, n).

IX. O algoritmo RSA não deve ser aplicado isoladamente, mas sempre dentro
de uma codificação de mensagem, o que impede diversos tipos de
ataques.

X. O par de chaves RSA de cada usuário deve apresentar certificação de


validade de AC credenciada, evitando um ataque MITM.
XI. Vale atentar ainda que, os valores relacionados à chave privada, tais como
de p, q, φ(n) ou suas variações, devem permanecer secretos assim como
o expoente d.

XII. O usuário detentor da chave privada deve ter cuidado, não só quanto a
não divulgá-la, mas também estar atento a não utilizá-la sem necessidade,
por exemplo em mensagens aleatórias, sem objetivo bem definido, as
quais podem ser utilizadas como parte de alguns ataque.

XIII. O expoente privado d, não pode ser menor que n0,292.

XIV. É recomendável que o expoente público e seja no mínimo e =


216+1=65.537 para módulos de 1024 bits. Para módulos n de 2048 bits
devem ser utilizados expoentes e com no mínimo 21 bits.

XV. Um módulo n não pode ser utilizado por mais de um usuário, assim como
não deve existir na aplicação, dois módulos n1 e n2 tal que (n1, n2) seja
diferente de 1.

XVI. Para utilização de uma variação do RSA, como por exemplo o MRSA,
deve-se observar os cuidados específicos para esta variação.

XVII. Ao se implementar uma aplicação RSA, deve-se atentar que somente


atendendo a todos os cuidados, a implementação estará devidamente
segura.

XVIII. Estar sempre atento a novas publicações sobre o algoritmo RSA, visto que
sempre pode surgir novos ataques ao algoritmo como por exemplo, o
dispositivo de hardware teórico TWIRL proposto em 2003 por Shamir e
Tromer. Podem surgir também variações que sejam úteis a aplicação que
está sendo implantada como, por exemplo, o RSA CRT pelo algoritmo
ART, que agiliza o deciframento do MRSA, proposto por Rao e Yang, em
2006.

10. Conclusões e Problemas de Pesquisa em Aberto


Devido à longa existência e ao volume de pesquisas realizadas no algoritmo
RSA, novas pesquisas exigem um elevado conhecimento matemático e
computacional. Podem existir novas pesquisas propondo por exemplo:
• novos testes de primalidade;
• algoritmos para fatoração mais eficientes que os atuais;
• variações RSA que apresentem algum benefício em relação às atuais;
• novos ataques ao RSA e
• análise da repercussão de novas tecnologias sobre o algoritmo.
O algoritmo criptográfico RSA é um padrão mundial entre os algoritmos
criptográficos de chaves públicas, tanto para confidencialidade, como para
assinatura digital. Suas aplicações são atuais e muitas. O conteúdo das pesquisas
desenvolvidas desde o anúncio do RSA se encontra disperso devido ao volume e
ao tempo, incluindo uma época na qual estas pesquisas não contavam com o
recurso da divulgação eletrônica via Internet, o que gerou algumas pesquisas
redundantes. Este fato contribui com a maior vulnerabilidade do RSA, a falta de
conhecimento e atenção quanto aos cuidados a serem observados ao se
desenvolver uma aplicação que o utilize. E estes cuidados crescem gradativamente
com o anúncio de novos ataques, com o crescimento da capacidade de
processamento computacional e outros. Neste contexto encontra-se a contribuição
deste artigo, que apresenta o conjunto de cuidados necessários para a
implementação segura do RSA, concentrando e sintetizando as pesquisas no tema.

11. Referências
Boneh, D. (1999) “Twenty years of attacks on the RSA cryptosystem”, journal
Notices of the American Mathematical Society, volume 46, number 2.

Cartões Safe Xpresso (2008) URL: http://www.cartoes-cifroes.com/produtos/cartoes


\_sc\_safex.htm, Dezembro.

Diffie, W. and Hellman, M. E. (1976) “New Directions in Cryptography”, Cambridge


University Press, 2005. IEEE International Symposium on Information Theory in
Ronneby, Sweden, June.

ICP Brasil (2008) “Infra-estrutura de Chaves Públicas Brasileira”, URL:


http://www.icpbrasil.gov.br/, Dezembro.

Instituto Nacional de Tecnologia da Informação (2008), “Autoridade Certificadora


Brasileira Raiz – ITI”, URL: http://www.iti.gov.br/twiki/bin/view/ITI/Apresentacao,
Dezembro.

Menezes, A. J., Oorschot, P. C., Vanstone S. A. (2001) “Handbook of Applied


Cryptography”, CRC Press.
NFSNET project (2008) “NFSNET Large-scale Distributed Factoring”, URL:
http://www.nfsnet.org/, Dezembro.

Rivest, R. L. and Shamir, A. and Adelman, L. M. (1978) “A method for obtaining


digital signatures and public-key Cryptosystems”, Communications of the
ACM, 21, 120-126.

Pereira, S. R. (2008) “O Sistema Criptográfico de Chave Pública RSA”,


Dissertação apresentada à Universidade Católica de Santos, UNISANTOS.

RSA Security Inc. (2008) “Laboratórios RSA”, URL:


http://www.rsasecurity.com/rsalabs/, Dezembro.

Skype Technologies (2008) “Guide for Network Administrators - edition 1.0.1”,


http://www.skype.com/security/guide-for-network-admins.pdf, Dezembro.

Zimmermann, P. (2008) Philip Zimmermann Home Page, URL:


http://www.philzimmermann.com/EN/background/index.html, Dezembro.

Vous aimerez peut-être aussi