Jump to content

Блюм Блюм Шуб

(Перенаправлено из генератора Blum Blum Shub )

Blum Blum Shub ( BBS ) — генератор псевдослучайных чисел, предложенный в 1986 году Ленорой Блюм , Мануэлем Блюмом и Майклом Шубом. [1] это получено из Майкла О. Рабина односторонней функции .

Блюм Блюм Шуб принимает форму

,

где M = pq — произведение двух больших простых чисел p и q . На каждом этапе алгоритма некоторый результат получается из x n +1 ; выход обычно представляет собой либо четность x битовую n +1 , либо один или несколько младших битов x n +1 .

x Начальное число 0 должно быть целым числом, взаимно простым с M (т. е. p и q не являются факторами x 0 ), а не 1 или 0.

Два простых числа, p и q , должны быть конгруэнтны 3 (по модулю 4) (это гарантирует, что каждый квадратичный остаток имеет один квадратный корень , который также является квадратичным остатком) и должны быть безопасными простыми числами с небольшим НОД (( p- 3 ) /2 , ( q-3 ) /2 ) (это делает длину цикла большой).

Интересной особенностью генератора Блюма-Блюма Шуба является возможность напрямую вычислить любое xi значение (по теореме Эйлера ):

,

где функция Кармайкла . (Здесь у нас есть ).

Безопасность

[ редактировать ]

Существует доказательство, сводящее его безопасность к вычислительной сложности факторинга. [1] Когда простые числа выбраны соответствующим образом и O ( log log M ) младших битов каждого x n выводятся , то в пределе, когда M становится большим, отличить выходные биты от случайных должно быть по крайней мере так же сложно, как решить квадратичную задачу проблема невязкости по модулю M .

Производительность генератора случайных чисел BBS зависит от размера модуля M и количества бит на итерацию j . Хотя уменьшение M или увеличение j делает алгоритм быстрее, это также снижает безопасность. В статье 2005 года дается конкретное, а не асимптотическое, доказательство безопасности BBS для заданных M и j . Результат также можно использовать для выбора двух чисел, балансируя ожидаемую безопасность и вычислительные затраты. [2]

Позволять , и (где это семя). Мы можем рассчитывать на большую длину цикла для этих малых чисел, потому что . Генератор начинает оценивать используя и создает последовательность , , , = 9, 81, 236, 36, 31, 202. В следующей таблице показаны выходные данные (в битах) для различных методов выбора битов, используемых для определения выходных данных.

Бит четности Младший бит
0 1 1 0 1 0 1 1 0 0 1 0

Ниже приведена реализация Python , которая проверяет простоту.

import sympy
def blum_blum_shub(p1, p2, seed, iterations):
  assert p1 % 4 == 3
  assert p2 % 4 == 3
  assert sympy.isprime(p1//2)
  assert sympy.isprime(p2//2)
  n = p1 * p2
  numbers = []
  for _ in range(iterations):
    seed = (seed ** 2) % n
    if seed in numbers:
      print(f"The RNG has fallen into a loop at {len(numbers)} steps")
      return numbers
    numbers.append(seed)
  return numbers

print(blum_blum_shub(11, 23, 3, 100))

Следующая реализация Common Lisp обеспечивает простую демонстрацию генератора, в частности, относительно методов выбора трех битов. Важно отметить, что требования, предъявляемые к параметрам p , q и s (seed), не проверяются.

(defun get-number-of-1-bits (bits)
  "Returns the number of 1-valued bits in the integer-encoded BITS."
  (declare (type (integer 0 *) bits))
  (the (integer 0 *) (logcount bits)))

(defun get-even-parity-bit (bits)
  "Returns the even parity bit of the integer-encoded BITS."
  (declare (type (integer 0 *) bits))
  (the bit (mod (get-number-of-1-bits bits) 2)))

(defun get-least-significant-bit (bits)
  "Returns the least significant bit of the integer-encoded BITS."
  (declare (type (integer 0 *) bits))
  (the bit (ldb (byte 1 0) bits)))

(defun make-blum-blum-shub (&key (p 11) (q 23) (s 3))
  "Returns a function of no arguments which represents a simple
   Blum-Blum-Shub pseudorandom number generator, configured to use the
   generator parameters P, Q, and S (seed), and returning three values:
   (1) the number x[n+1],
   (2) the even parity bit of the number,
   (3) the least significant bit of the number.
   ---
   Please note that the parameters P, Q, and S are not checked in
   accordance to the conditions described in the article."
  (declare (type (integer 0 *) p q s))
  (let ((M    (* p q))       ;; M  = p * q
        (x[n] s))            ;; x0 = seed
    (declare (type (integer 0 *) M x[n]))
    #'(lambda ()
        ;; x[n+1] = x[n]^2 mod M
        (let ((x[n+1] (mod (* x[n] x[n]) M)))
          (declare (type (integer 0 *) x[n+1]))
          ;; Compute the random bit(s) based on x[n+1].
          (let ((even-parity-bit       (get-even-parity-bit       x[n+1]))
                (least-significant-bit (get-least-significant-bit x[n+1])))
            (declare (type bit even-parity-bit))
            (declare (type bit least-significant-bit))
            ;; Update the state such that x[n+1] becomes the new x[n].
            (setf x[n] x[n+1])
            (values x[n+1]
                    even-parity-bit
                    least-significant-bit))))))

;; Print the exemplary outputs.
(let ((bbs (make-blum-blum-shub :p 11 :q 23 :s 3)))
  (declare (type (function () (values (integer 0 *) bit bit)) bbs))
  (format T "~&Keys: E = even parity, L = least significant")
  (format T "~2%")
  (format T "~&x[n+1] | E | L")
  (format T "~&--------------")
  (loop repeat 6 do
    (multiple-value-bind (x[n+1] even-parity-bit least-significant-bit)
        (funcall bbs)
      (declare (type (integer 0 *) x[n+1]))
      (declare (type bit           even-parity-bit))
      (declare (type bit           least-significant-bit))
      (format T "~&~6d | ~d | ~d"
                x[n+1] even-parity-bit least-significant-bit))))
  1. ^ Перейти обратно: а б Блюм, Блюм и Шуб, 1986 , стр. 364–383.
  2. ^ Сидоренко Андрей; Шенмейкерс, Берри (2005). «Бетонная безопасность псевдослучайного генератора Блюма-Блюма-Шуба». Криптография и кодирование . 3796 : 355–375. дои : 10.1007/11586821_24 .

Источники

[ редактировать ]
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 4d980d000197b93b108a2488f73ca0b8__1716343080
URL1:https://arc.ask3.ru/arc/aa/4d/b8/4d980d000197b93b108a2488f73ca0b8.html
Заголовок, (Title) документа по адресу, URL1:
Blum Blum Shub - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)