Введение

Криптографический генератор чисел
ISAAC (indirection, shift, accumulate, add, and count) — это криптографически стойкий генератор псевдослучайных чисел и поточный шифр, разработанный Робертом Дж. Дженкинсом-младшим в 1993 году. Исходный код эталонной реализации был передан в общественное достояние. «Я разработал тесты для взлома генератора, а затем разработал сам генератор, чтобы он проходил эти тесты. Этот генератор и есть ISAAC».

Операция

Алгоритм ISAAC имеет сходство с RC4. Он использует массив из 256 четырехбайтовых целых чисел в качестве внутреннего состояния, записывая результаты в другой массив из 256 четырехбайтовых целых чисел, из которого они считываются по одному, пока он не станет пустым, после чего они пересчитываются. Вычисление состоит в изменении элемента i элементом (i ⊕ 128), двух элементов массива состояния, полученных посредством косвенной адресации, аккумулятора и счетчика для всех значений i от 0 до 255. Поскольку для каждого 32-битного выходного слова требуется всего около 19 32-битных операций, он очень быстр на 32-битных компьютерах.

Криптоанализ

Криптоанализ был проведен Мариной Пудовкиной (2001). Ее атака может восстановить начальное состояние со сложностью, которая приблизительно меньше времени, необходимого для перебора квадратного корня всех возможных начальных состояний. На практике это означает, что атака требует меньше ресурсов, чем полный перебор. Однако этот результат не оказал практического влияния на безопасность ISAAC. В 2006 году Жан-Филипп Аумассон обнаружил несколько наборов слабых состояний. Четвертый представленный (и наименьший) набор слабых состояний приводит к сильно смещенному результату на первом раунде ISAAC и позволяет вывести внутреннее состояние, аналогично уязвимости в RC4. Неясно, может ли злоумышленник, основываясь только на выходных данных, определить, находится ли генератор в одном из этих слабых состояний. Он также показал, что предыдущая атака является ошибочной, поскольку атака Пола Пренеля основана на неверном алгоритме, а не на реальном ISAAC. Предложена улучшенная версия ISAAC, названная ISAAC+. Кроме того, алгоритм ISAAC реализован в библиотеке Java Apache Commons Math.