Anda di halaman 1dari 7

RSA

RSA (desambiguacin)
En criptografa, RSA (Rivest, Shamir y Adleman) es un sistema criptogrfico de clave
pblica desarrollado en 1977. Es el primer y ms utilizado algoritmo de este tipo y es vlido
tanto para cifrar como para firmar digitalmente.
La seguridad de este algoritmo radica en el problema de la factorizacin de nmeros
enteros. Los mensajes enviados se representan mediante nmeros, y el funcionamiento se
basa en el producto, conocido, de dos nmeros primos grandes elegidos al azar y
mantenidos en secreto. Actualmente estos primos son del orden de
, y se prev que
su tamao crezca con el aumento de la capacidad de clculo de los ordenadores.
Como en todo sistema de clave pblica, cada usuario posee dos claves de cifrado: una
pblica y otra privada. Cuando se quiere enviar un mensaje, el emisor busca la clave
pblica del receptor, cifra su mensaje con esa clave, y una vez que el mensaje cifrado llega
al receptor, este se ocupa de descifrarlo usando su clave privada.
Se cree que RSA ser seguro mientras no se conozcan formas rpidas de descomponer
un nmero grande en producto de primos. La computacin cunticapodra proveer de una
solucin a este problema de factorizacin.

Historia
El algoritmo fue descrito en 1977 por Ron Rivest, Adi Shamir y Leonard Adleman,
del Instituto Tecnolgico de Massachusetts (MIT); las letras RSA son las iniciales de sus
apellidos. Clifford Cocks, un matemtico britnico que trabajaba para la agencia de
inteligencia britnica GCHQ, haba descrito un sistema equivalente en un documento
interno en 1973. Debido al elevado coste de las computadoras necesarias para
implementarlo en la poca su idea no trascendi. Su descubrimiento, sin embargo, no fue
revelado hasta 1997 ya que era confidencial, por lo que Rivest, Shamir y Adleman
desarrollaron RSA de forma independiente.
El algoritmo fue patentado por el MIT en 1983 en Estados Unidos con el nmero
4.405.829. Esta patente expir el 21 de septiembre de 2000. Como el algoritmo fue
publicado antes de patentar la aplicacin, esto impidi que se pudiera patentar en otros
lugares del mundo. Dado que Cocks trabaj en un organismo gubernamental, una patente
en Estados Unidos tampoco hubiera sido posible.

Algoritmo RSA
El algoritmo consta de tres pasos:

Idea del algoritmo


Supongamos que Bob quiere enviar a Alicia un mensaje secreto que solo ella pueda leer.
Alicia enva a Bob una caja con una cerradura abierta, de la que solo Alicia tiene la llave.
Bob recibe la caja, escribe el mensaje, lo pone en la caja y la cierra con su cerradura
(ahora Bob no puede leer el mensaje). Bob enva la caja a Alicia y ella la abre con su llave.
En este ejemplo, la caja con la cerradura es la clave pblica de Alicia, y la llave de la
cerradura es su clave privada.
Tcnicamente, Bob enva a Alicia un mensaje llano
en forma de un nmero
menor que otro nmero , mediante un protocolo reversible conocido como padding
scheme (patrn de relleno). A continuacin genera el mensaje cifrado mediante la
siguiente operacin:

,
donde

es la clave pblica de Alicia.

Ahora Alicia descifra el mensaje en clave

mediante la operacin inversa dada por

,
donde

es la clave privada que solo Alicia conoce.

Generacin de claves
1. Cada usuario elige dos nmeros primos distintos

y .

Por motivos de seguridad, estos nmeros deben escogerse de forma


aleatoria y deben tener una longitud en bits parecida. Se pueden
hallar primos fcilmente mediante test de primalidad.

2. Se calcula

se usa como el mdulo para ambas claves, pblica y privada.

3. Se calcula

, donde

es la funcin de

Euler.
4. Se escoge un entero positivo
sea coprimo con

menor que

, que

se da a conocer como el exponente de la clave pblica.


Si se escoge un

con una suma encadenada corta, el cifrado ser

ms efectivo. Un exponente

muy pequeo (p. ej.

suponer un riesgo para la seguridad.


5. Se determina un

) podra

(mediante aritmtica modular) que satisfaga

la congruencia

, es decir, que

sea

el multiplicador modular inverso de

Expresado de otra manera,


por

es dividido exactamente
.

Esto suele calcularse mediante el algoritmo de Euclides extendido.


se guarda como el exponente de la clave privada.

La clave pblica es

, esto es, el mdulo y el exponente de cifrado.

La clave privada es
, esto es, el mdulo y el exponente de descifrado, que
debe mantenerse en secreto.
Nota:

PKCS#1 v2.0 y PKCS#1 v2.1 se especifican mediante la funcin de


Carmichael
Euler, donde

en vez de la funcin

de

indica el mnimo comn mltiplo.

Para una mayor eficiencia los siguientes valores se calculan de antemano y se


almacenan como parte de la clave privada:

y : los primos para la generacin de las claves,

Cifrado
Alicia comunica su clave pblica
a Bob y guarda la clave privada en
secreto. Ahora Bob desea enviar un mensaje
a Alicia.
Primero, Bob convierte
en un nmero entero
menor que mediante un
protocolo reversible acordado de antemano. Luego calcula el texto cifrado
mediante la operacin
.
Esto puede hacerse rpido mediante el mtodo de exponenciacin binaria.
Ahora Bob transmite a Alicia.

Descifrado
Alicia puede recuperar
a partir de usando su exponente
privada mediante el siguiente clculo:

de la clave

.
Ahora que tiene
en su poder, puede recuperar el mensaje original
invirtiendo el padding scheme.
El procedimiento anterior funciona porque
.
Esto es as porque, como hemos elegido
que

de forma

, se cumple
.

La ltima congruencia se sigue directamente del teorema de Euler cuando


es
coprimo con . Puede demostrarse que las ecuaciones se cumplen para todo
usando congruencias y el teorema chino del resto.

Esto muestra que se obtiene el mensaje original:


.

Ejemplo
Aqu tenemos un ejemplo de cifrado/descifrado con RSA. Los parmetros usados
aqu son pequeos y orientativos con respecto a los que maneja el algoritmo, pero
podemos usar tambin OpenSSL para generar y examinar un par de claves reales.
p = 61
q = 53
n = pq = 3233
e = 17
d = 2753

1 n primo privado
2 n primo privado
producto pq
exponente pblico
exponente privado

La clave pblica (e, n). La clave privada es (d, n). La funcin de cifrado es:

Donde m es el texto sin cifrar. La funcin de descifrado es:

Donde c es el texto cifrado. Para cifrar el valor del texto sin cifrar 123, nosotros
calculamos:

Para descifrar el valor del texto cifrado, nosotros calculamos:

Ambos de estos clculos pueden ser eficientemente usados por el algoritmo de


multiplicacin cuadrtica para exponenciacin modular.

Esquemas de relleno
RSA debe ser combinado con algn esquema de relleno, ya que si no el valor
de M puede llevar a textos cifrados inseguros.

El valor m=0 o m=1 siempre produce textos cifrados iguales para 0 o 1


respectivamente, debido a propiedades de los exponentes.

Cuando ciframos con exponentes pequeos (e=3) y valores pequeos de m, el


resultado de m podra ser estrictamente menor que el mdulo de n. En este
caso, el texto cifrado podra ser fcilmente descifrado, tomando la raz e-sima
del texto cifrado sin tener en cuenta el mdulo.

Dado que el cifrado RSA es un algoritmo determinista (no tiene componentes


aleatorios) un atacante puede lanzar con xito un ataque de texto elegido
contra el criptosistema, construyendo un diccionario de textos probables con la
llave pblica, y almacenando el resultado cifrado. Observando los textos

cifrados en un canal de comunicacin, el atacante puede usar este diccionario


para descifrar el contenido del mensaje.
En la prctica, el primero de los dos problemas podra presentarse cuando
enviamos pequeos mensajes ASCII donde m es la concatenacin de uno o
ms carcter/es ASCII codificado/s. Un mensaje consiste en un solo carcter
ASCII NUL (cuyo valor es 0) se codificara como m=0, produciendo un texto
cifrado de 0 sin importar qu valores de e y N son usados. Probablemente, un
solo ASCII SOH (cuyo valor es 1) producira siempre un texto cifrado de 1.
Para sistemas convencionales al usar valores pequeos de e, como 3, un solo
carcter ASCII mensaje codificado usando este esquema sera inseguro, ya
que el mximo valor de m sera 255, y 255 es menor que cualquier mdulo
razonable. De esta manera los textos sin cifrar podran ser recuperados
simplemente tomando la raz cbica del texto cifrado. Para evitar estos
problemas, la implementacin prctica del RSA se ayuda de algunas
estructuras, uso del rellenado aleatorio dentro del valor de m antes del cifrado.
Esta tcnica asegura que m no caer en el rango de textos sin cifrar
inseguros, y que dado un mensaje, una vez que este rellenado, cifrar uno de
los nmeros grandes de los posibles textos cifrados. La ltima caracterstica
es la incrementacin del diccionario haciendo este intratable a la hora de
realizar un ataque.
El esquema de relleno de RSA (en ingls RSA-padding scheme) debe ser
cuidadosamente diseado para prevenir ataques sofisticados los cuales
podran ser facilitados por la predictibilidad de la estructura del mensaje.
Ejemplos de esquema de relleno usados con RSA:2 3

RSA-OAEP (Optimal Asymetric Encryption Padding) o su versin moficada


RSA-OAEP+. Este tipo de relleno es usado por ejemplo en PKCS#1 y en la red
de anonimato TOR

RSA-SAEP+ (Simplified Asymmetric Encryption Padding)

RSA-REACT

RSA-PSS (Probabilistic Signature Scheme). Usado por ejemplo en PKCS#1

Algunos de estos esquemas de relleno, por ejemplo RSA-OAEP y RSA-PSS, ecuentran


su 'justificacin' terica en el polmico modelo de orculo aleatorio.

Autenticacin de mensajes
RSA puede tambin ser usado para autenticar un mensaje. Supongamos que Alicia
desea enviar un mensaje autentificado a Bob. Ella produce un valor hashdel mensaje, lo
eleva a la potencia de d mod n (como ella hace cuando descifra mensajes), y lo adjunta
al mensaje como una firma. Cuando Bob recibe el mensaje autentificado, utiliza el
mismo algoritmo hash en conjuncin con la clave pblica de Alice. Eleva la firma recibida
a la potencia de e mod n (como hace cuando cifra mensajes), y compara el resultado
hash obtenido con el valor hash del mensaje. Si ambos coinciden, l sabe que el autor
del mensaje estaba en posesin de la clave secreta de Alicia, y que el mensaje no ha
sido tratado de forzar (no ha sufrido ataques).
Se debe observar que la seguridad de los padding-schemes como RSA-PSS son
esenciales tanto para la seguridad de la firma como para el cifrado de mensajes, y que
nunca se debera usar la misma clave para propsitos de cifrado y de autentificacin.

Seguridad
La seguridad del criptosistema RSA est basado en dos problemas matemticos: el
problema de factorizar nmeros grandes y el problema RSA. El descifrado completo de
un texto cifrado con RSA es computacionalmente intratable, no se ha encontrado un
algoritmo eficiente todava para ambos problemas. Proveyendo la seguridad contra el
descifrado parcial podra requerir la adicin de una seguridad padding scheme.
El problema del RSA se define como la tarea de tomar races e-simas mdulo a
componer n: recuperando un valor m tal que mec (mod n), donde (e, n) es una clave
pblica RSA y c es el texto cifrado con RSA. Actualmente la aproximacin para solventar
el problema del RSA es el factor del mdulo n. Con la capacidad para recuperar factores
primos, un atacante puede calcular el exponente secreto d desde una clave pblica
(e, n), entonces descifra c usando el procedimiento estndar. Para conseguir esto, un
atacante debe factorizar n en p y q, y calcular (p-1)(q-1) con lo que le permite
determinar d y e. No se ha encontrado ningn mtodo en tiempo polinmico para la
factorizacin de enteros largos. Ver factorizacin de enteros para la discusin de este
problema.
La factorizacin de nmeros grandes por lo general proponen mtodos teniendo 663 bits
de longitud usando mtodos distribuidos avanzados. Las claves RSA son normalmente
de entre 1024-2048 bits de longitud. Algunos expertos creen que las claves de 1024 bits
podran comenzar a ser dbiles en poco tiempo; claves de 4096 bits podran ser rotas en
un futuro. Por lo tanto, si n es suficientemente grande el algoritmo RSA es seguro.
Si n tiene 256 bits o menos, puede ser factorizado en pocas horas con un ordenador
personal, usando software libre. Si n tiene 512 bits o menos, puede ser factorizado por
varios cientos de computadoras como en 1999. Un dispositivo hardware terico
llamado TWIRL descrito por Shamir y Tromer en el 2003 cuestion a la seguridad de
claves de 1024 bits. Se recomienda actualmente que n sea como mnimo de 2048 bits de
longitud.
En 1993, Peter Shor public su algoritmo, mostrando que una computadora cuntica
podra en principio mejorar la factorizacin en tiempo polinomial, mostrando RSA como
un algoritmo obsoleto. Sin embargo, las computadoras cunticas no se esperan que
acaben su desarrollo hasta dentro de muchos aos.

Consideraciones prcticas
Generacin de claves
Buscando nmeros primos grandes p y q por el test de aleatoriedad y realizando tests
probabilsticos de primalidad los cuales eliminan virtualmente todos los no-primos
(eficientemente).
Los nmeros p y q no deberan ser suficientemente cercanos para que la factorizacin de
Fermat para n sea exitosa. Adems, si cualquier p-1 o q-1 tiene slo factores primos
pequeos, n puede ser factorizado rpidamente, con lo que estos valores de p o q deben
ser descartados.
No se debera emplear un mtodo de bsqueda de primos con el cual se d alguna
informacin cualquiera sobre los primos al atacante. En particular, se debe utilizar un
buen generador aleatorio de nmeros primos para el valor empleado. Obsrvese que el
requerimiento est en que ambos sean aleatorios eimpredecibles. No son el mismo
criterio; un nmero podra haber sido elegido por un proceso aleatorio, pero si ste es
predecible de cualquier forma (o parcialmente predecible), el mtodo usado resultar en
una baja seguridad. Por ejemplo: la tabla de nmeros aleatorios de Rand Corp en 1950
podra servir muy bien como ejemplo de criterio verdaderamente aleatorio, pero ha sido
publicada y a sta puede acceder el atacante. Si el atacante puede conjeturar la mitad de
los dgitos de p o q, l podra rpidamente calcular la otra mitad. (Ver Coppersmith en
1997).

Es importante que la clave secreta d sea muy grande. Wiener mostr en 1990 que
si p est entre q y 2q (es tpico) y d < n1/4/3, entonces d puede calcularse eficientemente a
partir de n y e. Aunque valores de e tan bajos como 3 se han usado en el pasado, los
exponentes pequeos en RSA estn actualmente en desuso, por razones que incluyen el
no relleno del texto sin cifrar, vulnerabilidad listada antes. 65537 es normalmente usado
como valor de e, considerado demasiado grande para evitar ataques de exponenciacin
pequeos, de hecho tiene un peso de Hamming suficiente para facilitar una
exponenciacin eficiente.

Velocidad
RSA es mucho ms lento que DES y que otros criptosistemas simtricos. En la prctica,
Bob normalmente cifra mensajes con algoritmos simtricos, cifra la clave simtrica con
RSA, y transmite a ambos la clave simtrica RSA-cifrada (es decir la transmite cifrada
con RSA) y el mensaje simtricamente-cifrado a Alicia.
Esto plantea adems problemas adicionales de seguridad, por ejemplo, es de gran
importancia usar un generador aleatorio fuerte para claves simtricas, porque de otra
forma Eve (un atacante que quiera averiguar el contenido del mensaje)
podra puentear la clave asimtrica de RSA mediante la adivinacin de la clave simtrica.

Distribucin de claves
Como con todos los cifrados, es importante cmo se distribuyan las claves pblicas del
RSA. La distribucin de la clave debe ser segura contra un atacante que se disponga a
espiar el canal para hacer un ataque de replay. Supongamos Eve (atacante) tiene alguna
forma de dar a Bob arbitrariamente claves y hacerle creer que provienen de Alicia.
Supongamos que Eve puede interceptar transmisiones entre Alicia y Bob. Eve enva a
Bob su propia clave pblica, como Bob cree que es de Alicia, Eve puede entonces
interceptar cualquier texto cifrado enviado por Bob, descifrarlo con su propia clave
secreta, guardar una copia del mensaje, cifrar el mensaje con la clave pblica de Alicia, y
enviar el nuevo texto cifrado a Alicia. En principio, ni Alicia ni Bob han detectado la
presencia de Eve. Contra la defensa de ataques algunos estn basados en certificados
digitales u otros componentes de infraestructuras de la clave pblica.

Anda mungkin juga menyukai