ISAAC ( dirección indirecta, desplazamiento, acumulación, adición y conteo ) es un generador de números pseudoaleatorios criptográficamente seguro y un cifrado de flujo diseñado por Robert J. Jenkins Jr. en 1993. [1] El código fuente de la implementación de referencia fue dedicado al dominio público . [2]
“Desarrollé (…) pruebas para romper un generador, y desarrollé el generador para pasar las pruebas. El generador es ISAAC.” [3]
El algoritmo ISAAC tiene similitudes con RC4 . Utiliza una matriz de 256 enteros de cuatro octetos como estado interno, escribiendo los resultados en otra matriz de 256 enteros de cuatro octetos, desde donde se leen uno a la vez hasta que se vacían, momento en el que se vuelven a calcular. El cálculo consiste en alterar i -elemento con ( i ⊕128)-elemento, dos elementos de la matriz de estado encontrados por indirección, un acumulador y un contador, para todos los valores de i de 0 a 255. Dado que solo se necesitan alrededor de 19 operaciones de 32 bits para cada palabra de salida de 32 bits, es muy rápido en computadoras de 32 bits.
Marina Pudovkina (2001) realizó un criptoanálisis . [4] Su ataque puede recuperar el estado inicial con una complejidad que se aproxima a ser menor que el tiempo necesario para buscar en la raíz cuadrada de todos los estados iniciales posibles. En la práctica, esto significa que el ataque necesita en lugar de . Este resultado no ha tenido ningún impacto práctico en la seguridad de ISAAC. [5]
En 2006, Jean-Philippe Aumasson descubrió varios conjuntos de estados débiles. [6] El cuarto conjunto de estados débiles presentado (y el más pequeño) conduce a una salida altamente sesgada para la primera ronda de ISAAC y permite la derivación del estado interno, similar a una debilidad en RC4 . No está claro si un atacante puede determinar solo a partir de la salida si el generador está en uno de estos estados débiles o no. También demuestra que un ataque anterior [7] es defectuoso, ya que el ataque de Paul - Preneel se basa en un algoritmo erróneo en lugar del ISAAC real. Se propone una versión mejorada de ISAAC, llamada ISAAC+. [5]
Muchas implementaciones de ISAAC son tan rápidas que pueden competir con otros PRNG de alta velocidad, incluso con aquellos diseñados principalmente para la velocidad y no para la seguridad. Solo existen unos pocos generadores más de tan alta calidad y velocidad en uso. [ cita requerida ] ISAAC se utiliza en la herramienta Unix shred para sobrescribir datos de forma segura. [8] El algoritmo ISAAC también se implementa en la biblioteca Java Apache Commons Math. [9]