블럼 블럼 슈브
Blum Blum Shub![]() |
블럼 블럼 슈브(B.B.S.)는 레노어 블럼, 마누엘 블럼, 마이클[1] 슈브가 1986년 제안한 가성수 생성기로 마이클 O. 라빈의 단방향함수에서 파생된 것이다.
블럼 블럼 슈브가 폼을 잡는다.
- + = x 2
여기서 M = pq는 p와 q의 큰 두 개의 곱이다.알고리즘의 각 단계에서 일부 출력은 x에서n+1 파생된다. 출력은 일반적으로 x의n+1 비트 패리티 또는 x의n+1 최하위 비트 중 하나 이상이다.
시드 x는0 M(즉, p와 q는 x의0 요인이 아니라 x의 요인이 아니다)과 공동 프라임인 정수여야 하며 1이나 0이 아니어야 한다.
p와 q라는 두 가지 소수 모두 3(모드 4)에 일치해야 하며(이것은 각 2차 잔류물이 2차 잔류물인 1제곱근을 갖는다는 것을 보장한다), 작은 gcd(p-3)/2, (q-3)/2)로 안전한 소수여야 한다(이 때문에 주기 길이가 커진다).
블럼 블럼 슈브 발생기의 흥미로운 특징은 ( 오일러의 정리를 통해) 어떤 xi 값도 직접 계산할 수 있다는 것이다.
- =( x i )
여기서 은 (는) Carmichael 함수다.(여기서 ( = ( )= ( , - ) q (이 있다.
보안
그것의 보안을 팩터링의 계산상의 어려움으로 축소하는 증거가 있다.[1]프리임이 적절하게 선택되고 각n x의 O(로그 로그 M) 하위 순서 비트가 출력되면, M이 커짐에 따라 한계에서 출력 비트와 무작위를 구분하는 것은 최소한 2차 잔류도 문제 모듈로 M을 해결하는 것만큼 어려워야 한다.
예
= = = 을(서 s 은 (여기서 s {\displaystyle s})로 한다.We can expect to get a large cycle length for those small numbers, because . The generator starts to evaluate by using and creates the sequence }}, … = 9, 81, 236 36, 31, 202.다음 표는 출력을 결정하는 데 사용되는 다양한 비트 선택 방법에 대한 출력(비트 단위)을 보여준다.
패리티 비트 | 최하위 비트 |
---|---|
0 1 1 0 1 0 | 1 1 0 0 1 0 |
다음의 Common Lisp 구현에서는 특히 3비트 선택 방법과 관련하여 발전기를 간단하게 시연할 수 있다.매개변수 p, q 및 s(시드)에 부과된 요건은 점검되지 않는다는 점에 유의해야 한다.
(반기를 들다 1비트 get-of-bits (조각들) "정수 인코딩 BITS에서 1값 비트 수를 반환한다." (선언하다 (타자를 치다 (정수의 0 *) 조각들)) (그 (정수의 0 *) (로그카운트 조각들))) (반기를 들다 손익분기점 (조각들) "정수 인코딩 BITS의 짝수 패리티 비트를 반환한다." (선언하다 (타자를 치다 (정수의 0 *) 조각들)) (그 물다 (모드의 (1비트 get-of-bits 조각들) 2))) (반기를 들다 get-the-bit-bit. (조각들) "정수로 인코딩된 BITS 중 최하위 비트를 반환한다." (선언하다 (타자를 치다 (정수의 0 *) 조각들)) (그 물다 (ldb (바이트 1 0) 조각들))) (반기를 들다 벌컥벌컥 화를 내다 (&key (p 11) (q 23) (s 3)) "단순함을 나타내는 인수 없음 함수를 반환함 Blum-Blum-Sub 가성수 생성기, 를 사용하도록 구성됨 제너레이터 매개 변수 P, Q 및 S(시드)와 다음 세 가지 값 반환: (1) 숫자 x[n+1], (2) 숫자의 짝수 패리티 비트는 (3) 해당 숫자의 가장 작은 비트. --- P, Q 및 S 매개 변수는 체크인되지 않았으므로 주의하십시오. 기사에 기술된 조건에 따라." (선언하다 (타자를 치다 (정수의 0 *) p q s)) (하게 하다 ((M (* p q)) ;;; M = p * q (x[n] s)) ;; x0 = 씨앗 (선언하다 (타자를 치다 (정수의 0 *) M x[n])) #'(람다 () ;; x[n+1] = x[n]^2 mod M (하게 하다 ((x[n+1] (모드의 (* x[n] x[n]) M))) (선언하다 (타자를 치다 (정수의 0 *) x[n+1])) ;; x[n+1]을 기준으로 랜덤 비트를 계산하십시오. (하게 하다 ((짝수 비트 (손익분기점 x[n+1])) (최소 비트 (get-the-bit-bit. x[n+1]))) (선언하다 (타자를 치다 물다 짝수 비트)) (선언하다 (타자를 치다 물다 최소 비트)) ;; x[n+1]가 새로운 x[n]이 되도록 상태를 업데이트하십시오. (세트로 만들다 x[n] x[n+1]) (가치 x[n+1] 짝수 비트 최소 비트)))))) ;;; 모범적인 출력물을 인쇄하십시오. (하게 하다 ((bbs (벌컥벌컥 화를 내다 :p 11 :q 23 :s 3))) (선언하다 (타자를 치다 (기능을 하다 () (가치 (정수의 0 *) 물다 물다)) bbs)) (형식을 갖추다 T "~&키즈:E = 짝수 패리티, L = 최하위") (형식을 갖추다 T "~2%") (형식을 갖추다 T "~&x[n+1] E L") (형식을 갖추다 T "~&--------------") (고리를 틀다 되풀이하여 말하다 6 하다 (다중 가치관 (x[n+1] 짝수 비트 최소 비트) (펑콜 bbs) (선언하다 (타자를 치다 (정수의 0 *) x[n+1])) (선언하다 (타자를 치다 물다 짝수 비트)) (선언하다 (타자를 치다 물다 최소 비트)) (형식을 갖추다 T "~&~6d~d~d" x[n+1] 짝수 비트 최소 비트))))
참조
인용구
- ^ a b Blum, Blum & Shub 1986, 페이지 364–383.
원천
- Blum, Lenore; Blum, Manuel; Shub, Michael (1983). "Comparison of Two Pseudo-Random Number Generators". Advances in Cryptology. Boston, MA: Springer US. doi:10.1007/978-1-4757-0602-4_6.
- Blum, L.; Blum, M.; Shub, M. (1986). "A Simple Unpredictable Pseudo-Random Number Generator" (PDF). SIAM Journal on Computing. Society for Industrial & Applied Mathematics (SIAM). 15 (2): 364–383. doi:10.1137/0215025. ISSN 0097-5397.
- Geisler, Martin; Krøigård, Mikkel; Danielsen, Andreas (December 2004), About Random Bits (PDF), CiteSeerX 10.1.1.90.3779