El algoritmo de Blum- Micali es un algoritmo criptográficamente seguro para generar secuencias pseudoaleatorias utilizando semillas aleatorias . Las ideas detrás del algoritmo fueron esbozadas por Bloom y Micali en 1984. El algoritmo fue desarrollado en base al algoritmo generador de Shamir propuesto por Adi Shamir un año antes [1] . El algoritmo se diferencia de su predecesor en requisitos más estrictos para la complejidad del cálculo de la secuencia de salida. A diferencia del generador Shamir, la salida de este algoritmo son bits, no números.
Considere la idea más simple de construir un generador de números pseudoaleatorios: nos dan una secuencia aleatoria inicial (semilla) y elegimos algún algoritmo de cifrado. Además, en cada iteración, al cifrar el estado actual y elegir un conjunto de bits del resultado, podemos obtener una secuencia de números que parece bastante aleatoria.
El algoritmo Bloom-Micali usa exactamente este proceso, usando "bits de núcleo duro" (bit de núcleo duro, predicado de núcleo duro ).
Al idear el algoritmo, Bloom y Micali propusieron tres requisitos para la secuencia de salida:
Un "ritmo extremo" (predicado) B para una función f es una función tal que:
— Semilla — longitud del argumento de la función . Ella es la longitud . - conversión de a , y - de a {0,1} - un poco complicado para . ; son los bits de la secuencia final generada. ; . -pseudo-aleatoriedad - una propiedad de la secuencia para la cual se realiza -bit complejo - una propiedad de la función para la cual ,
donde está el algoritmo encontrado por el criptoanalista en el tiempo .
Definámoslo como el siguiente proceso: Tome alguna secuencia aleatoria (semilla). Si es un bit complejo, entonces es un generador de números pseudoaleatorios.
- tiempo de cálculo de la función .
El teorema se demuestra por contradicción; Se supone que existe un algoritmo que permite encontrar un elemento, sabiendo lo anterior [2] .
Los generadores basados en este algoritmo se utilizan tanto en sistemas de clave privada como pública.
Dos socios, habiendo intercambiado con seguridad una secuencia inicial secreta, reciben una secuencia aleatoria común de longitud muchas veces mayor que la secuencia inicial.
En sistemas de clave pública (cifrado asimétrico)Goldwasser y Micali demostraron [3] que, asumiendo que la determinación de números compuestos de módulo de residuos cuadráticos es una tarea computacionalmente difícil, existe un esquema de encriptación con la siguiente propiedad:
"Un atacante, conociendo el algoritmo de encriptación y teniendo el texto cifrado, no puede obtener cualquier información sobre el texto original".
Esta propiedad también se conoce como el principio de Kerckhoff .
Tomemos tan simple y , que - 1024 bits y . función _ El bit complejo es una función que devuelve el bit menos significativo. es tal bajo el supuesto de que no existe un algoritmo para calcular el logaritmo discreto de complejidad mejor o igual que .
También se demostró [4] que el generador permanece asintóticamente estable si no se eligen uno, sino varios bits inferiores para la secuencia de salida. Pero vale la pena señalar que el generador en tal modificación ya no corresponderá al algoritmo Blume-Micali.
Demos algunas estimaciones numéricas para BBS para dos opciones de ataque:
Digamos que se requiere generar una secuencia de longitud , tal que ningún algoritmo pueda distinguir esta secuencia de una verdaderamente aleatoria durante operaciones con una probabilidad mayor a 1/100. El cálculo muestra que para generar tal secuencia, se requiere un grano de longitud de bits. En caso de que se requiera comprometer el generador, es decir, encuentre una semilla de la secuencia de salida para los mismos tiempos con la misma precisión, entonces la protección contra tal ataque se proporcionará solo para bits [4] .
Sea un número primo de 1024 bits y . Definamos → como .
un poco complicado
B(x) es tal bajo el supuesto de que no existe un algoritmo para calcular el logaritmo discreto con una función de complejidad o mejor.
La fuerza criptográfica de los generadores anteriores se basaba en la dificultad de encontrar un logaritmo discreto. El generador de Kalinske utiliza la idea de las curvas elípticas.
Sea un número primo tal que . Considere una curva en x ( campo de Galois ) de la forma: . Los puntos de la curva , junto con el punto en el infinito , forman un grupo de orden cíclico . Sea el generador de este grupo.
Introduzcamos la siguiente función: En
consecuencia, la función utilizada en el generador tiene la forma:
Bit complejo del generador:
La semilla de tal generador es algún punto de la curva.
Se demuestra que el problema de distinguir entre una secuencia aleatoria verdadera y una secuencia generada según el esquema Bloom-Micali puede reducirse al problema de la inversión de funciones [5] .
Las implementaciones de este algoritmo, por regla general, se basan en la complejidad de calcular funciones inversas, por ejemplo, en la complejidad de calcular el logaritmo discreto . Por lo tanto, para romper este algoritmo, solo necesita poder tomar un logaritmo discreto en un tiempo previsible. En implementaciones informáticas reales, para números elegidos correctamente, esta es una operación que consume muchos recursos. Sin embargo, un algoritmo similar en una computadora cuántica da una ganancia de velocidad al cuadrado, lo que hace que piratear dicho generador sea mucho más realista. El ataque se basa en una de las variantes de los algoritmos cuánticos : el salto de amplitud , una versión más generalizada del algoritmo de Grover [6] .