BBSアルゴリズムを理解するのを手伝ってください。私はこの実装を行いました:
class EmptySequenseError(Exception):
pass
class BlumBlumShub(object):
def __init__(self, length):
self.length = length
self.primes = e(1000) # Primes obtained by my own Sieve of Eratosthenes implementation.
def get_primes(self):
out_primes = []
while len(out_primes) < 2:
curr_prime = self.primes.pop()
if curr_prime % 4 == 3:
out_primes.append(curr_prime)
return out_primes
def set_random_sequence(self):
p, q = self.get_primes()
m = p * q
self.random_sequence = [((x+1)**2)%m for x in range(self.length)]
def get_random_sequence(self):
if self.random_sequence:
return self.random_sequence
raise EmptySequenseError("Set random sequence before get it!")
いくつか質問があります。最初はライブラリを使いたくありませんrandom
。あまりにも素朴です。私のシーケンスは増加しています。完全にランダムではありません。返されたシーケンスの増加を防ぐ方法は? そして、私はアルゴリズムの説明のこの部分を理解していません:
アルゴリズムの各ステップで、何らかの出力がx n+1から導出されます。出力は通常、 x n+1 のビット パリティか、x n + 1の 1つ以上の最下位ビットです。
意味を教えてください。
要約を編集:
- アルゴリズムを修正しました。
- en.wikipedia の引用に置き換えられた引用。