miércoles, febrero 20, 2008

RSA - sistema criptográfico con clave pública

El sistema criptográfico con clave pública RSA es un algoritmo asimétrico cifrador de bloques, que utiliza una clave pública, la cual se distribuye (en forma autenticada preferentemente), y otra privada, la cual es guardada en secreto por su propietario.
Una clave es un número de gran tamaño, que una persona puede conceptualizar como un mensaje digital, como un archivo binario o como una cadena de bits o bytes.
Cuando se quiere enviar un mensaje, el emisor busca la clave pública de cifrado del receptor, cifra su mensaje con esa clave, y una vez que el mensaje cifrado llega al receptor, éste se ocupa de descifrarlo usando su clave oculta.
Los mensajes enviados usando el algoritmo RSA se representan mediante números y el funcionamiento se basa en el producto de dos números primos grandes (mayores que 10100) elegidos al azar para conformar la clave de descifrado.
Emplea expresiones exponenciales en aritmética modular.
La seguridad de este algoritmo radica en que no hay maneras rápidas conocidas de factorizar un número grande en sus factores primos utilizando computadoras tradicionales.
La computación cuántica podría proveer una solución a este problema de factorización.

Historia
El algoritmo fue descrito en 1977 por Ron Rivest, Adi Shamir y Len Adleman en el MIT; las letras RSA son las iniciales de sus apellidos. Fue inventado en Schenectady (estado de Nueva York). Clifford Cocks, un matemático británico trabajando para la agencia de inteligencia británica GCHQ describió un sistema equivalente en un documento interno en 1973. Debido a la lentitud de la implementación en las computadoras de la época, se lo consideró una curiosidad. Su descubrimiento sin embargo no fue revelado hasta 1997 ya que era confidencial.
El algoritmo fue patentado por el MIT en 1983 en Estados Unidos con el número 4.405.829. Esta patente expiró el 21 de septiembre de 2000. Como el algoritmo fue publicado antes de patentar la aplicación, esto impidió que se pudiera patentar en otros lugares del mundo. Como Cocks trabajó en un organismo gubernamental, una patente en Estados Unidos tampoco habría sido posible.

Generación de claves
Supongamos que Alicia y Bob están comunicándose a través de un medio de transmisión inseguro (abierto), y Alicia quiere enviar un mensaje privado (o seguro) a Bob. Usando RSA, Alicia tomará los siguientes pasos para la generación de la clave pública y privada:
Seleccione dos números primos largos y de manera que .
Calcule .
Calcule .
Seleccione un entero positivo e tal que el tales que e y φ(n) sean Primos entre sí.
Calcule d tal que .
Los números primos pueden ser comprobados con un test de primalidad (test probalístico).
(pasos 4 y 5 pueden ser realizados con el algoritmo extendido de Euclides; Ver aritmética modular.
(paso 5, puede también ser encontrado un entero que provoca:
, para ser un entero, entonces usando el valor de:
(del paso 3 PKCS#1 v2.1 usa λ = MCM(p − 1,q − 1) a la vez de φ = (p − 1)(q − 1) ).
La clave privada será d y la clave pública será e. *Adicionalmente el parámetro n debe hacerse público.
La clave pública consiste en:
n, el módulo.
e, el exponente público (a veces exponente de cifrado).
La clave privada consiste en:
n, el módulo, el cual es público y aparece en la clave pública
d, el exponente privado (a veces el exponente de descifrado), el cual debe permanecer oculto.
Normalmente, una diferencia de la clave pública (incluyendo parámetros del Teorema chino del resto “CRT” ) es almacenada:
p y q, los primos de generación de claves.
y son llamados: dmp1 y dmq1
conocido como iqmp
Esta forma permite rápidamente descifrar y autentificarse usando CRT. En esta forma, todas las partes de la clave privada deben ser ocultas(guardadas en secreto).
Alicia transmite la clave pública a Bob, y guarda las claves privadas p y q, las cuales están ocultas ya que son los factores de n, y con éstos se podría calcular d a partir de e; p y q no son guardados en el CRT de la clave privada, éstos están resguardados a lo largo de todos los procesos intermediarios de la generación de la clave.

Cifrado de mensajes
Ejemplo rápido: Bob quiere enviar a Alicia un mensaje secreto que solo ella pueda leer.
Alicia envía a Bob una caja con una cerradura abierta, de la que solo Alicia tiene la llave. Bob recibe la caja, el escribe el mensaje, lo pone en la caja y cierra esta con su cerradura (ahora Bob no puede leer el mensaje). Bob envía la caja a Alicia y ella la abre con su llave. En este ejemplo, la caja con la cerradura es la clave pública de Alicia, y la llave de la cerradura es su clave privada.
Supongamos que Bob desea enviar un mensaje M a Alicia. Él cambia M en un número m < n =" pq" d =" inv" c =" NeR" c =" h(M)dE" id="Descifrado_de_mensajes" name="Descifrado_de_mensajes">
Descifrado de mensajes
Alicia recibe c de Bob, y conoce su clave privada d. Ella puede recuperar m de c por el siguiente procedimiento:

Dado m, ella puede recuperar el mensaje M. El descifrado procede de la siguiente forma:

Ahora, con ed ≡ 1 (mod p-1) y ed ≡ 1 (mod q-1), el pequeño teorema de Fermat nos da
, p ≠ q, aplicando CRT a estas dos congruencias:
.
Así,


Ejemplo:
Aquí tenemos un ejemplo de cifrado/descifrado con RSA. Los parámetros usados aquí son pequeños y orientativos con respecto a los que maneja el algoritmo, pero podemos usar también OpenSSL para generar y examinar una par de claves reales.
p=61
1º nº primo Privado
q=53
2º nº primo Privado
n=pq=3233
producto p*q
e=17
exponente Público
d=2753
exponente Privado
La clave pública (e, n). La clave privada es d. La función de cifrado es:
encrypt(m) = me(mod n) = m17(mod 3233)
Donde m es el texto sin cifrar La función de descifrado es:
decrypt(c) = cd(mod n) = c2753(mod 3233)
Donde c es el texto cifrado. Para cifrar el valor del texto sin cifrar 123, nosotros calculamos:
encrypt(123) = 12317(mod 3233) = 855
Para descifrar el valor del texto cifrado, nosotros calculamos
decrypt(855) = 8552753(mod 3233) = 123
Ambos de estos cálculos pueden ser eficientemente usados por el algoritmo de multiplicación cuadrática para exponenciación modular.

Padding schemes (Esquema de relleno)
RSA debe ser combinado con alguna versión del padding scheme, ya que si no el valor de M resulta será textos cifrados inseguros. RSA usado sin padding scheme podría sufrir muchos problemas.
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 pequeños (e=3) y valores pequeños de m, el resultado de m podría ser estrictamente menor que el módulo de n. En este caso, el texto cifrado podría ser fácilmente descifrado, tomando la raíz e-ésima del texto cifrado sin tener en cuenta el módulo.
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 pública, y almacenando el resultado cifrado. Observando los textos cifrados en un canal de comunicación, el atacante puede usar este diccionario para descifrar el contenido del mensaje.
En la práctica, el primero de los dos problemas podría presentarse cuando enviamos pequeños mensajes ASCII donde m es la concatenación de uno o mas carácter/es ASCII codificado/s. Un mensaje consiste en un solo carácter ASCII NUL (cuyo valor es 0) se codificaría 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) produciría siempre un texto cifrado de 1. Para sistemas convencionales al usar valores pequeños de e, como 3, un solo carácter ASCII mensaje codificado usando este esquema sería inseguro, ya que el máximo valor de m sería 255, y 2553 es menor que cualquier módulo razonable. De esta manera los textos sin cifrar podrían ser recuperados simplemente tomando la raíz cúbica del texto cifrado. Para evitar estos problemas, la implementación práctica del RSA se ayuda de algunas estructuras, uso del randomized padding dentro del valor de m antes del cifrado. Esta técnica 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 números grandes de los posibles textos cifrados. La última característica es la incrementación del diccionario haciendo este intratable a la hora de realizar un ataque.
Estándares como PKCS han sido cuidadosamente diseñados para la seguridad de los de mensajes importantes con el cifrado RSA. Porque el pad scheme rellena el texto sin cifrar m con algunos números adicionales (bits); el tamaño del mensaje un-padded M debe ser algo más pequeño. RSA-padding scheme debe ser cuidadosamente diseñado así como para prevenir ataques sofisticados los cuales podrían ser facilitados por la predictibilidad de la estructura del mensaje. Versiones más recientes del PKCS Standard usando construcciones ad-hoc, las cuales fueron encontradas vulnerabilidades más tarde en la practica adaptativa de elección de ataques de textos cifrados. Las construcciones modernas usan técnicas seguras como Optimal Asymetric Encryption Padding (OAEP) para proteger los mensajes mientras previenen estos ataques. El PKCS estándar también incorpora procesado de esquemas diseñados para proveer adicionalmente la seguridad de autentificaciones RSA. Por ejemplo: the Probabilistic Signature Scheme for RSA (RSA-PSS).

Autenticación de mensajes
RSA puede también ser usado para autenticar un mensaje. Supongamos que Alicia desea enviar un mensaje autentificado a Bob. Ella produce un valor hash del mensaje, aumenta la potencia de d≡ mod n (como ella hace cuando descifra mensajes), y marca con una “firma” el mensaje. Cuando Bob recibe el mensaje autentificado, él aumenta la autentificación para aumentar e≡ mod n (como hace él cuando cifra menajes), y compara el resultado hash con el actual valor hash del mensaje. Si es el resultado, el conoce que el autor del mensaje estaba en posesión de la clave secreta de Alicia, y que el mensaje no ha sido tratado de forzar entonces (no ha sufrido ataques).
Observar que la seguridad de padding-scheme como RSA-PSS son esenciales para la seguridad del mensaje cifrado, y que la misma clave nunca debería ser usada para ambos cifrados ni los propósitos de autentificación.

Seguridad
La seguridad del criptosistema RSA está basado en dos problemas matemáticos: el problema de factorizar números grandes y el problema RSA. El descifrado completo de un texto cifrado con RSA es computacionalmente intratable, no se ha encontrado un algoritmo eficiente todavía para ambos problemas. Proveyendo la seguridad contra el descifrado parcial podría requerir la adición de una seguridad padding scheme.
El problema del RSA se define como la tarea de tomar raíces eth módulo a componer n: recuperando un valor m tal que me=c ≡mod n, donde (e, n) es una clave pública RSA y c es el texto cifrado con RSA. Actualmente la aproximación para solventar el problema del RSA es el factor del módulo n. Con la capacidad para recuperar factores primos, un atacante puede computar el exponente secreto d desde una clave pública (e, n), entonces descifra c usando el procedimiento standard. Para conseguir esto, un atacante factoriza n en p y q, y computa (p-1)(q-1) con lo que le permite determinar d y e. No se ha encontrado ningún método en tiempo polinómico para la factorización de enteros largos. Ver factorización de enteros para la discusión de este problema.
La factorización de números grandes por lo general proponen métodos teniendo 663 bits de longitud usando métodos distribuidos avanzados. Las claves RSA son normalmente entre 1024-2048 bits de longitud. Algunos expertos creen que las claves de 1024 bits podrían comenzar a ser débiles en poco tiempo; con claves de 4096 bits podrían 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 computador 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 teórico llamado TWIRL descrito por Shamir y Tromer en el 2003 cuestionó a la seguridad de claves de 1024 bits. Es actualmente recomendado que n sea como mínimo de 2048 bits de longitud.
En 1993, Peter Shor publicó su algoritmo, mostrando que una computadora cuántica podría en principio mejorar la factorización en tiempo polinomial, mostrando RSA como un algoritmo obsoleto. Sin embargo, las computadoras cuánticas no se esperan que acaben su desarrollo hasta dentro de muchos años….

Consideraciones prácticas

Generación de claves
Buscando números primos grandes p y q por el test de aleatoriedad y realizando tests probabilísticos de primalidad los cuales eliminan virtualmente todos los no-primos (eficientemente).
Los números p y q no deberían ser suficientemente cercanos para que la factorización de Fermat para n sea exitosa. Además, si cualquier p-1 o q-1 tiene sólo factores primos pequeños, n puede ser factorizado rápidamente, con lo que estos valores de p o q deben ser descartados.
Uno no debería emplear un método de búsqueda de primos con el cual dar alguna información cualquiera sobre los primos al atacante. En particular, un buen generador aleatorio de números primos para el comienzo del valor empleado. Observar que el requerimiento esta en ambos ‘aleatorios’ e ‘impredecibles’. Esto no son los mismos criterios; un número podría haber sido elegido por un proceso aleatorio, pero si éste es predecible de cualquier forma (o parcialmente predecible), el método usado resultara una seguridad baja. Por ejemplo: la tabla de números aleatorios de Rand Corp en 1950 podría muy bien ser verdaderamente aleatoria, pero ha sido publicada y a ésta puede acceder el atacante. Si el atacante puede conjeturar la mitad de los dígitos de p o q, ellos podrían rápidamente computar la otra mitad. (Ver Coppersmith en 1997).
Es importante que la clave secreta d sea muy grande. Wiener mostró en 1990 que si p esta entre q y 2q (es típico) y d
Velocidad
RSA es mucho más lento que DES y que otros criptosistemas simétricos. En la practica, Bob normalmente cifra mensajes con algoritmos simétricos, cifra la clave simétrica con RSA, y transmite a ambos la clave simétrica RSA-cifrada y el mensaje simétricamente-cifrado a Alicia.
Esto plantea además problemas adicionales de seguridad, por ejemplo, es de gran importancia usar un generador aleatorio fuerte para claves simétricas, porque de otra forma Eve (un atacante que quiera averiguar el contenido del mensaje) podría puentear la clave simétrica de RSA mediante la adivinación de la clave simétrica.

Distribución de claves
Como todos los cifrados, es importante como se distribuyan las claves públicas del RSA. La distribución 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 envía a Bob su propia clave pública, 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 pública 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 están basados en certificados digitales u otros componentes de infraestructuras de la clave pública.

Ataques
Aquí se explican algunos de los ataques detectados para RSA.

Ataques de esquemas de relleno (scheme padding attacks)
Un ataque ha sido encontrado en algunas implementaciones de las firmas digitales RSA, haciendo uso del esquema de relleno (scheme padding)de PCKS-1 cuando la llave pública es e = 3. Un ataque similar podría aplicarse sobre implementaciones de firmas difitales especificador por la ANS (American National Standart) X9.31.Este ataque no es sobre el algoritmo de RSA, si no que de una incorrecta implementación del proceso de verificación de firmas-
Como funciona el ataque
Contexto
Una firma digital PKCS-1 es computada en un valor hash H(M) es que rellenado de la siguiente manera: 00 01 FF FF …FF 00 ASN.1 H(M)
Donde 00 01 FF FF …FF 00 es el valor de relleno, ASN.1 es usado para proveer información sobre la función de hash (básicamente, el largo del valor del hash), y H(M) es el valor del hash. Nótese que el valor del hash H(M) debería ser justificado a la derecha. En este caso, después que la firma digital es descifrada usando un exponente público, el texto rellenado de arriba debería obtenerse.
El valor de hash H(M) puede ser extraído buscando a través del relleno y de los valores de ASN.1, y seleccionando el numero apropiados de bytes a continuación. Una manera de verificar la firma es comparando el valor extraído de H(M) con una valor de hash computado separadamente del mensaje M. Si son iguales, se considera una firma digital válida.
X9.31 posee un método similar de relleno, la única diferencia es que en vez de estar justificado a la derecha, el valor del hash es seguido por 2 bytes (trailer) con un valor arreglado. Cuando se usa SHA-1, el relleno del valor del hash es así: 6B BB BB ...BB BA H(M) 33 CC
Problema
Algunas implementaciones extraen el numero de bits para el valor del hash a partir de la posición relativa al relleno, sin verificar si hay información inesperada después del valor del hash.En el caso de PKCS-1, el valor del hash es seleccionado al encontrar el final del relleno y del final del valor ASN.1, y luego extrayendo el valor del hash sin verificar si hay información adicional seguida del valor del hash. (es decir, cuando el valor del hash esta justificado a la derecha en el texto hasheado del relleno). En el caso de ANS X9.31, el valor del hash es elegido cuando se encuentra el fin del relleno, y cuando se extrae el valor del hash sin chequear que solo 2 bytes con los valores esperados sigan a continuación del valor del hash en el texto hasheado del relleno.
Ataques
Cuando se usa el métedo de PKCS-1, para algún mensaje M con valor de hash H(M), es algo fácil encontrar la raíz cúbica de un String como: 00 01 FF …FF 00 ASN.1 H(M) basura
Donde el numero de ocurrencias de FF en el relleno es reducido, y la basura es inteligentemente escogida para modificar el texto al cubo de algún valor.
Cuando se usa el relleno ANS X9.31 el hash de este podría ser alterado reduciendo el número de ocurrencias de BB en el relleno:
6B BB BB ...BB BA H(M) basura
Donde los últimos 2 bytes de basura son el trailer esperado (p.e., 33 CC), y el hash del relleno modificado del texto tiene una raíz cubica.
El ataque fue presentado con e=3 como ejemplo. Para ambos métodos de relleno, cuando un valor pequeño de e es usado, y cuando puede encontrarse la raíz de un texto (como el de arriba) entonces el ataque tendrá éxito. Cuando e es grand, encontrar la raíz (eth root) módulo n será muy difícil.
Como prevenir este ataque cuando se usa PKCS-1:
• No usar 3 como el exponente público para las firmas RSA.
• Si el esquema de relleno PKCS-1 es usado para encontrar el valor del hash, entonces hay que verificar que no hay más información a la derecha del valor del hash.
Como prever este ataque cuando se usa ANS X9.31:
• No usar el 3 o el 2 como el exponente público para las firmas digitales. • Si el esquema de relleno ANS X9.31 es usado para encontrar el valor del hash, entonces hay que verificar que el valor del hash es seguido por sólo 2 bytes que contienen el valor esperado.

Ataques que miden el tiempo
Este tipo de ataque puede ser comparado con la siguiente situación: Si Alicia quiere tener sus pertenencias seguras en casa, comprará una buena cerradura y pondría varias de estás en su puerta. Sin embargo, un ladrón que quiera entrar a su propiedad puede simplemente remover el marco de la puerta y entrar sin problemas en su hogar, robando todo lo que Alicia quiso proteger. Si bien este tipo de ataques no es común en el mundo real, si existe un símil en el mundo del cifrado, el llamado timing attack.
Timing attacks son una forma de "ataque de canal secundario" donde el atacante recopila información sobre la implementación del sistema de cifrado en vez de buscar alguna debilidad inherente en las propiedades matemáticas del sistema. Fuentes imprevistas de información aparecen debido a la manera con la que se ejecuta una operación o el medio usado. Ataques de canal secundario utilizan información sobre el tiempo de cifrado, consumo de poder, emanaciones electromagnéticas o incluso sonido para recuperar información secreta sobre el sistema de cifrado.
Ataques de tiempo explotan la variación del tiempo en las operaciones de criptografía. Debido a optimizaciones del rendimiento,los cómputos realizados por un algoritmo criptográfico toman, por lo general, distintas cantidades de tiempo, dependiendo de la entrada y del valor del parámetro secreto. Si los tiempos de operaciones relativos a la llave privada de RSA puede ser estimados de manera razonablemente precisos, en algunos casos puede aplicarse un análisis estadísticos para obtener la clave secreta involucrada en las operaciones.

Como funcionan los ataques de tiempo
Aquí tenemos una ilustración simple de como funcionan los ataques de tiempo.
Sea C el mensaje a descifrar, d la llave privada a ser obtenida, denotada por d0d1…dn donde d0 = 1. El cálculo a ser realizado es Cd mod N. Suponga que los algoritmos raíz cuadrada y multiplicación son usados para computar esta potencia modular, y la operación mod(x,N) está implementada en la Figura 2.
x = C
for j = 1 to n
x = mod(x2, N)
if dj == 1 then
x = mod(xC, N)
end if
next j
return x
Figura 1: Algoritmos del cuadrado y multiplicación.
mod(x, N)
if x >= N
x = x % N
end if
return x
Figura 2: Pseudocode de la función mod
Considere los algoritmos del cuadrado y de multiplicación en la figura 1. Si dj = 0 entonces x = mod(x2, N), pero si dj = 1 entonces dos operaciones, x = mod(x2, N) y x = mod(xC, N), se realizan. En otras palabras, el tiempo de computación debería ser mayor cuando dj=1. Notése además en la Figura 2 que la reducción modular "%" es ejecutada solo si el resultado intermedio de la multiplicación es mayor que el modulo de N. Este ataque explota estos dos hechos y usa dos conjuntos de mensajes, uno tipo para los que el calculo de mod(xC, N) requiera una reducción y otro en el que no.
Asumamos que podemos hacer que el sistema descifre un mensaje de nuestra elección, lo que es comúnmente posible en sistemas reales. Comenzamos atacando d1 eligiendo 2 mensajes Y y Z, donde Y3 < j =" 1." x =" mod(x" x =" mod(x" d1 =" 1." i =" 0," i =" 0," y =" (y0" z =" (z0"> y + e, donde e puede ser determinado empíricamente, concluimos que d1 = 1; si no d1 = 0. Una vez que d1 es conocido, podemos atacar d2 mediante un proceso análogo eligiendo Y y Z valores que satisfagan distintos criterios. La llave privada d puede ser obtenida bit a bit utilizando este método
Lo interesante de este ataque es la simpleza. Para que este ataque funcione no necesitamos conocer los detalles de la implementación del algoritmo, y tampoco necesitamos saber como factorizar números primos grandes, todo lo que necesitamos saber es que las potencias son realizadas mediante el uso de cuadrado y multiplicación.
Una forma de frustrar estos ataques es asegurar que la operación de descifrado tome un tiempo constante en todos los textos cifrados. Sin embargo, esta aproximación puede significar la reducción del funcionamiento. En vez, de más implementaciones RSA una técnica alternativa conocida como blindaje criptográfico. RSA binding usa propiedades multiplicativa del RSA. A la vez computando (rec)d ≡mod n. El resultado de esta computación es rm≡ mod n y también en efecto r puede ser eliminada multiplicándolo por su inversa. Un nuevo valor de r es escogido para cada texto cifrado, Con el blindaje aplicado, el tiempo de descifrado se relaciona con el tiempo del texto cifrado así que el ataque de sincronización falla.

Ataques de potencias
Ataque basado en un exponente público "bajo"
Aunque un exponente bajo acelera el cifrado, también lo hace más inseguro. Si se cifran e(e+1)/2 mensajes linealmente dependientes con diferentes claves públicas y el mismo valor de e hay un ataque contra el sistema. Si los mensajes son idénticos entonces es suficiente con e mensajes. La solución más sencilla a este problema es añadir a los mensajes valores aleatorios independientes, PGP por ejemplo hace esto de modo que un mismo mensaje no se cifrará dos veces de la misma manera.
Ataque basado en un exponente privado "bajo"
Otro ataque, permite recuperar d cuando éste no supera un cuarto de n y e es menor que n. Esto ocurre raramente si e se elige al azar. El fundamento matemático del ataque es la representación de los números racionales como fracciones continuas finitas.

Ataques usando Predictor de saltos (Branch Predictor Analysis, BPA)
El análisis del predictor de saltos (Branch Prediction Analysis, (BPA)), ha llevado recientemente a un nuevo ataque de "canal secundario" algo parecido a los timing attacks para RSA. Prolijos procesos espías que corran simultáneamente con un proceso RSA, son capaces de colectar durante sólo una ejecución de RSA casi todos los bits de una llave secreta. Se le llama a este tipo de ataque, que consiste en analizar los estados del Predictor de saltos de un CPU espiando un único casi-paralelo proceso, Ataque de análisis de predictor de saltos (En inglés, Simple Branch Prediction Analysis (SBPA)). Bastante diferente a aquellos métodos que se basan en métodos estadísticos o que requieren muchos datos sobre el calculo relativo a una misma llave.
La recuperación de casi todas los bits de una llave secreta de un ataque SBPA contra una implementación OpenSSL de RSA demuestra que las técnicas de aleatorización utilizadas para proteger a RSA de ataques de "canal secundario" son (relativo a los ataques SBPA) totalmente inútiles. Desafortunadamente, esto no es cierto, ya que incluso estas implementaciones de “balanced branch” pueden ser totalmente descifradas por los ataques SBPA. Aún más, a pesar de métodos de particionamiento asistidos por hardware, tales como protección de memoria, sacos de arena o incluso virtualización, ataques SBPA logran tomar control sobre un proceso sin importancia para poder atacar a otro proceso que corre en paralelo en el mismo procesador. Es por esto, que concluimos que los ataques SBPA son mucho más peligrosos que lo previamente anticipado y que ciertamente no corresponden a ataques de tiempo.

Ataques adaptativos al texto cifrado elegido
En 1998, Daniel Bleichenbacher describió el primer ataque adaptativo eligiendo textos cifrados contra mensajes cifrados con RSA usando el PKCS #1 v1 padding scheme (un padding scheme aleatorio, que crea estructura para un mensaje cifrado-RSA, así es posible determinar si el mensaje descifrado es válido) Debido a defectos con PKCS #1 scheme, Bleichenbacher hizo posible montar un ataque práctico contra la implementación RSA del protocolo Secure Socket Layer, y recupero la sesión de claves. Como resultado de este trabajo, los criptógrafos ahora recomiendan el uso de seguridad padding scheme con Optimal Asymmetric Encryption Padding, laboratorios RSA han realizado nuevas versiones de PKCS #1 que no son vulnerables a estos ataques.

Texto obtebido integramente de la wikipedia.

No hay comentarios: