Алгоритм Блюма — Микали
Алгоритм Блюма — Микали (англ. Blum-Micali algorithm) — это криптографически стойкий алогоритм генерации псевдослучайных последовательностей, с использованием зерна (Random seed). Идеи алгоритма были изложены Блюмом и Микали в 1984 году. Алгоритм был разработан на основе алгоритма генератора Шамира, предложенного Ади Шамиром годом ранее[1]. Алгоритм отличается от предшественника более сильными требованиями к сложности вычисления выходной последовательности. В отличие от генератора Шамира выходом данного алгоритма являются биты, а не числа.
Основная идея алгоритма
Рассмотрим простейшую идею построения генератора псевдослучайных чисел: мы задаёмся некоторой начальной случайной последовательностью (зерно) и выбираем некоторый алгоритм шифрования. Далее на каждой итерации шифруя текущее состояния и выбирая из полученного результата набор битов, мы можем получать последовательность чисел, которая выглядит довольно случайным образом.
Алгоритм Блюма — Микали использует именно этот процесс, используя «хардкор-биты» (hard-core bit, hard-core predicate).
Придумывая алгоритм, Блюм и Микали выдвинули три требования к выходной последовательности:
- Количество выходных битов [math]\displaystyle{ b_i }[/math] должно полиномиально зависеть от длины зерна (в силу конечной длины цикла алгоритма).
- Получение битов [math]\displaystyle{ b_i }[/math] должно быть простым в вычислительном плане — количество действий должно быть ограничено сверху некоторой полиномиальной функцией от длины зерна.
- Биты [math]\displaystyle{ b_i }[/math] должны быть непредсказываемы. При известном генераторе и известных первых [math]\displaystyle{ k }[/math] битах последовательности [math]\displaystyle{ b_1, ..., b_k }[/math], но не зная зерна, определение следующего бита [math]\displaystyle{ b_{k+1} }[/math] c вероятностью, отличной от 50%, должно являться вычислительно сложной задачей. То есть, такое вычисление не должно выполняться за полиномиальное от длины зерна количество операций.
Понятие хардкор-бита
«Хардкор-битом» (предикатом) B для функции f называют некоторую функцию, такую, что:
- Выходное значение B — 1 бит.
- Для неё нет такого полиномиально-временно́го (то есть из класса BPP — Bounded-error probabilistic polynomial) алгоритма, который может правильно указать B(x) по известной f(x) с вероятностью, отличной от 1/2.
Теорема Блюма - Микали
[math]\displaystyle{ S }[/math] — Seed
[math]\displaystyle{ n }[/math] — длина аргумента функции [math]\displaystyle{ f }[/math]. Она же — длина [math]\displaystyle{ S }[/math].
[math]\displaystyle{ f }[/math] - преобразование из [math]\displaystyle{ \{0,1\}^n }[/math] в [math]\displaystyle{ \{0,1\}^n }[/math] , а [math]\displaystyle{ B }[/math] — из [math]\displaystyle{ \{0,1\}^n }[/math] в {0,1} - сложный бит для [math]\displaystyle{ f }[/math].
[math]\displaystyle{ h_i = B(S_i) }[/math]; [math]\displaystyle{ h_i }[/math] — биты конечной генерируемуой последовательности.
[math]\displaystyle{ S_i = f(S_{i-1}) }[/math]; [math]\displaystyle{ S_0 = S }[/math].
[math]\displaystyle{ (t, \varepsilon) }[/math]-псевдослучайность - свойство последовательности для которой выполнено [math]\displaystyle{ |P(A(B_1..B_i) == B_i+1) - 1/2| \lt \varepsilon }[/math]
[math]\displaystyle{ (t, \varepsilon) }[/math]-сложный бит - свойство функции [math]\displaystyle{ A }[/math], для которой [math]\displaystyle{ |P(A(B_1..B_i) == 0) - 1/2| \lt \varepsilon }[/math],
где [math]\displaystyle{ A() }[/math] — алгоритм, найденный криптоаналитиком за время [math]\displaystyle{ t }[/math].
Определим [math]\displaystyle{ G_{BM} }[/math] как следующий процесс:
Возьмем некоторую случайную последовательность (seed).
Если [math]\displaystyle{ B }[/math] является [math]\displaystyle{ (t, \varepsilon) }[/math]-сложным битом, то [math]\displaystyle{ G_{BM} }[/math] — [math]\displaystyle{ (t- m*TIME(f), \varepsilon*m) }[/math]-генератор псевдослучайных чисел.
[math]\displaystyle{ TIME(f) }[/math] - время вычисления функции [math]\displaystyle{ f }[/math].
Теорема доказывается от противного; Предполагается, что существует алгоритм позволяющий найти [math]\displaystyle{ i + 1 }[/math] элемент, зная [math]\displaystyle{ i }[/math] предыдущих[2].
Применение
Генераторы, основанные на данном алгоритме находят применение в системах как с закрытым, так и с открытым ключом.
В системах с закрытым ключом
Два партнёра безопасно обменявшись секретной начальной последовательностью, получают общую случайную последовательность длиной во много раз большей, чем начальная последовательность.
В системах с открытым ключом (асимметричное шифрование)
Гольдвассер и Микали показали[3], что в предположении что определение квадратичных вычетов по модулю от составных чисел - вычислительно сложная задача, существует шифровальная схема, обладающая следующим свойством:
"Злоумышленник, зная алгоритм шифрования и имея зашифрованный текст не может получить никакой информации об оригинальном тексте."
Это свойство так же известно под названием принципа Керкгоффса.
Примеры генераторов
Генератор Блюма — Блюма — Шуба (BBS)
Возьмём такие простые [math]\displaystyle{ p }[/math] и [math]\displaystyle{ q }[/math], что [math]\displaystyle{ N = pq }[/math] — 1024-битное и [math]\displaystyle{ p = q = 3\ mod\ 4 }[/math]. Функция [math]\displaystyle{ f(x) = x^2\ mod\ N }[/math]. В качестве сложного бита берется функция, возвращающая наименьший значимый бит. [math]\displaystyle{ B(x) }[/math] является таковым в допущении, что не существует алгоритма вычисления дискретного логарифма сложности лучше либо равной [math]\displaystyle{ n^2 }[/math].
Также было показано[4], что генератор остаётся асимптотически стойким, если для выходной последовательности выбирать не один, а несколько младших битов. Но стоит отметить, что генератор в такой модификации уже не будет соответствовать алгоритму Блюма-Микали.
Приведём некоторые численные оценки для BBS для двух вариантов атаки:
Допустим, требуется сгенерировать последовательность длиной [math]\displaystyle{ 10^7 }[/math], такую что ни один алгоритм не сможет отличить эту последовательность от истинно случайной за время [math]\displaystyle{ 2^{80} }[/math] операций с вероятностью больше чем 1/100. Расчет показывает, что для генерации такой последовательности требуется зерно длиной [math]\displaystyle{ n \geqslant 6800 }[/math] бит. В случае, если требуется скомпрометировать генератор, т.е. найти зерно по выходной последовательности за те же времена с той же точностью, то защита от подобной атаки будет обеспечиваться всего при [math]\displaystyle{ n \geqslant 1100 }[/math] бит[4].
Dlog generator
Пусть [math]\displaystyle{ p }[/math] — 1024 битное простое число, а [math]\displaystyle{ g }[/math] принадлежит [math]\displaystyle{ \mathbb{Z}_p }[/math]. Определим [math]\displaystyle{ f: \{1, ..., p - 1\} }[/math] → [math]\displaystyle{ \{1, ..., p - 1\} }[/math], как [math]\displaystyle{ f(x) = g^x\ mod\ p }[/math].
Сложный бит
[math]\displaystyle{ B(x) = \left\{\begin{matrix}
0, & x \lt p/2 \\
1, & x \geqslant p/2 \end{matrix}\right. }[/math]
B(x) является таковым в допущении, что не существует алгоритма вычисления дискретного логарифма c функцией сложности [math]\displaystyle{ n^3 }[/math] или лучше.
Генератор Калински
Криптостойкость вышеприведённых генераторов базировалась на сложности нахождения дискретного логарифма. Генератор Калински использует идею эллиптических кривых.
Пусть [math]\displaystyle{ p }[/math] - простое число, такое что [math]\displaystyle{ p = 2\ mod\ 3 }[/math]. Рассмотрим кривую в [math]\displaystyle{ F_p }[/math] x [math]\displaystyle{ F_p }[/math] (поле Галуа) вида: [math]\displaystyle{ y^2 = x^3 + c }[/math].
Точки кривой [math]\displaystyle{ (x, y) }[/math] вместе с точкой на бесконечности [math]\displaystyle{ \mathcal{O} }[/math] образуют циклическую группу порядка [math]\displaystyle{ p + 1 }[/math]. Пусть [math]\displaystyle{ Q }[/math] — генератор этой группы.
[math]\displaystyle{ P }[/math]
Введём следующую функцию:
[math]\displaystyle{ \phi(P) = \left\{\begin{matrix}
y, & P = (x, y) \\
p, & P = \mathcal{O}\end{matrix}\right. }[/math]
Соответственно, функция, используемая в генераторе имеет вид:
[math]\displaystyle{ f(P) = \phi(P)*Q }[/math]
Сложный бит генератора:
[math]\displaystyle{ B(P) = \left\{\begin{matrix}
1, & P = \phi(P) \geqslant (p + 1)/2 \\
0, & P = \phi(P) \lt (p + 1)/2\end{matrix}\right. }[/math]
Seed такого генератора - некоторая точка на кривой.
Уязвимости алгоритма
Доказано, что проблема, состоящая в том, чтобы различить истинную случайную последовательность и последовательность сгенерированную согласно схеме Блюма-Микали может быть сведена к задаче обращения функции [math]\displaystyle{ f }[/math][5].
Реализации данного алгоритма, как правило, опираются на сложность вычисления обратных функций, например на сложности вычисления дискретного логарифма. Следовательно, для взлома этого алгоритма необходимо лишь уметь брать дискретный логарифм за обозримое время. На настоящих реализациях компьютеров для правильно подобранных чисел - это очень ресурсоёмкая операция. Однако, аналогичный алгоритм на квантовом компьютере даёт выигрыш в скорости в квадрате, что делает взлом такого генератора весомо более реальным. Атака основана на одном из вариантов квантовых алгоритмов - подскоке амплитуды, более обобщенном варианте Алгоритма Гровера[6].
Примечания
- ↑ Adi Shamir On the generation of cryptographically strong pseudorandom sequences, 1983
- ↑ [Manuel Blum and Silvio Micali, How to Generate Cryptographically Strong Sequences of Pseudorandom Bits, SIAM Journal on Computing 13, no. 4 (1984): 850-864.
- ↑ S.Goldwasser and S.Micali, Probabilistic encryption and how to play mental poker keeping secret all partial information, Proc 14th ACM Symposium on Theory of Computing, 1982, pp. 365-377
- ↑ 4,0 4,1 Andrey Sidorenko and Berry Schoenmakers, State Recovery Attacks on Pseudorandom Generators, 2005.
- ↑ O.Goldreich. Foundations of Cryprography. Basic Tools. Cambridge University Press, Cambridge, United Kingdom, 2001.
- ↑ Elloá B. Guedes, Francisco Marcos de Assis, Bernardo Lula Jr — Examples of the Generalized Quantum Permanent Compromise Attack to the Blum-Micali Construction. http://arxiv.org/abs/1012.1776 Архивная копия от 15 августа 2016 на Wayback Machine
См. также
Литература
- B. S. Kaliski. Elliptic Curves and Cryptography: A Pseudorandom Bit Generator and Other Tools. PhD thesis, MIT, Cambridge, MA, USA, 1988.
- https://web.archive.org/web/20080216164459/http://crypto.stanford.edu/pbc/notes/crypto/blummicali.xhtml
- https://web.archive.org/web/20150224041435/http://www.csee.wvu.edu/~xinl/library/papers/comp/Blum_FOCS1982.pdf