Алгоритм Блум - Блум - Шуба
Алгоритм Блум - Блум - Шуба (англ. Algorithm Blum — Blum — Shub, BBS) - генератор псевдовипадкових чисел, запропонований в 1986 році Ленором Блумом, Мануелем Блумом і Майклом Шубом.
BBS має такий вигляд:
де є добуток двох великих простих чисел і . На кожному кроці алгоритму вихідні дані обчислюють з шляхом взяття або біта парності, або одного чи більше найменш значущих бітів .
Два простих числа, і , повинні бути конгруентні з 3 по (це гарантує, що кожен квадратний залишок має один квадратний корінь, який також є квадратним залишком) і найбільший спільний дільник НСД має бути маленьким (це збільшує довжину циклу).
Цікавою особливістю цього алгоритму є те, що для отримання необов'язково обчислювати всі попередні числа, якщо відомо початковий стан генератора і числа і . - е значення може бути обчислено безпосередньо використовуючи формулу:
- ,
де - функція Кармайкла: в даному випадку - найменше спільне кратне чисел () і ().
Цей генератор підходить для криптографії, але не для моделювання, тому що він недостатньо швидкий. Однак, він має високу стійкість, яка забезпечується якістю генератора виходячи з обчислювальної складності завдання факторизації чисел. Коли прості числа обрані правильно, і біт кожного є вихідними даними, тоді межа, при швидкозростаючому , відрізнити вихідні біти від випадкових буде настільки ж складно, як і факторизація .
Нехай , та . Ми можемо розраховувати отримати велику довжину циклу для таких малих чисел, тому що . Генератор починає рахувати за допомогою і створює послідовність , , , = 9, 81, 82, 36, 42, 92. У наступній таблиці показано вихідні дані (у бітах) для різних методів вибору бітів, що використовуються для визначення виходу.
Парний біт | Непарний біт | Найменш значущий біт |
---|---|---|
0 1 1 0 1 0 | 1 0 0 1 0 1 | 1 1 0 0 0 0 |
- GMPBBS[недоступне посилання з серпня 2019], a GPL'ed GMP-based implementation of Blum Blum Shub in C by daffodil-11
- BlumBlumShub[недоступне посилання з серпня 2019], a GPL'ed implementation of Blum Blum Shub in Java by daffodil-11
- An implementation in Java [Архівовано 15 січня 2016 у Wayback Machine.]
- Randomness tests [Архівовано 3 червня 2019 у Wayback Machine.]
- Lenore Blum, Manuel Blum, and Michael Shub. «A Simple Unpredictable Pseudo-Random Number Generator», SIAM Journal on Computing, volume 15, pages 364—383, May 1986.
- Lenore Blum, Manuel Blum, and Michael Shub. «Comparison of two pseudo-random number generators», Advances in Cryptology: Proceedings of Crypto '82. Available as PDF.
- Pascal Junod, «Cryptographic Secure Pseudo-Random Bits Generation: The Blum-Blum-Shub Generator», August 1999. 21 page PDF file [Архівовано 24 жовтня 2019 у Wayback Machine.]
- Martin Geisler, Mikkel Krøigård, and Andreas Danielsen. «About Random Bits», December 2004. Available as PDF and Gzipped Postscript.
- Randomness Recommendations for Security — RFC 1750 [Архівовано 22 березня 2019 у Wayback Machine.].