1 Generatory kongruencyjne Generator liniowy (LCG) generuje ciągi

Transkrypt

1 Generatory kongruencyjne Generator liniowy (LCG) generuje ciągi
Generatory kongruencyjne
Generator liniowy (LCG) generuje ciągi zgodnie z następującą regułą:
Xn = (aXn – 1 + b) mod m,
gdzie Xn jest n-tym elementem ciągu, natomiast a, b i m są odpowiednimi stałymi.
Implementacje:
•
ANSI C: m = 232, a = 0x41C64E6D, b = 12356;
•
MINSTD: m = 231 – 1, a = 75, b = 0;
•
RANDU: m = 231, a = 0x10003, b = 0;
•
Fortran: m = 232 – 1, a = 630360016, b = 0;
•
NAG: m = 259, a = 1313, b = 0;
•
APPLE: m = 235, a = 0x48C227395, b = 0;
Kombinacje liniowych generatorów kongruencyjnych mają dłuższe okresy i lepiej zachowują
się w niektórych testach losowości, lecz nie są obecnie bezpieczne.
Generator kwadratowy:
Xn = (aXn – 12 + bXn – 1 + c) mod m.
Generator sześcienny:
Xn = (aXn – 13 + bXn – 12 + cXn – 1 + d) mod m.
Generator Blum-Micali
Niech a i p będą liczbami pierwszymi. Niech x0 < p będzie losowo wybraną liczbą. Definiuje
się xi +1 = a xi mod p dla i = 1, 2,... . Wtedy pseudolosowe bity si definiuje się następująco:
xi > ( p − 1) / 2
1
si = 
0
w p.p
.
Generator RSA
Niech [e, n] będzie kluczem RSA. Niech liczba x0 < n będzie losowo wybrana. Definiujemy
xi +1 = xie mod n. Wtedy pseudolosowy bit si zdefiniowany jest jako pierwszy z prawej bit
liczby xi.
1
Generator l/p
Jeżeli stan tego generatora w chwili t jest xt, to
xt + 1 = bxt mod p.
Na wyjściu tego generatora pojawia się najmniej znaczący bit wyniku dzielenia xt div p, gdzie
div oznacza operację uciętego dzielenia całkowitoliczbowego.
W celu uzyskania maksymalnej wartości okresu powtarzania stałe b i p powinny być tak
wybrane, aby liczba p była liczbą pierwszą, a liczba b – pierwiastkiem pierwotnym mod p.
Generator ten nie zapewnia bezpieczeństwa.
Generator BBS (L. Blum, M. Blum, M. Shub)
Algorytm:
Wejście: duża liczba Bluma n o nieznanym rozkładzie na czynniki pierwsze, liczba naturalna
t oznaczająca długość ciągu, losowo wybrana liczba naturalna x względnie pierwsza z n (jeśli
p oraz q są dużymi liczbami pierwszymi przystającymi do 3 modulo 4, to n = pq nazywamy
liczbą Bluma).
Wyjście: binarny ciąg pseudolosowy BBS(x) = b0b1...bt – 1.
Metoda:
1. x0 := x2 mod n.
2. Dla i = 1 do t – 1 wykonaj
xi := xi2−1 mod n,
jeśli reprezentacja binarna liczby xi bit ( xi ) = bki −1bki − 2 ...b0i dla pewnej liczby naturalnej
k, to bi := b0i .
Ciekawą cechą algorytmu BBS jest to, że umożliwia on bezpośredni dostęp do dowolnego
bitu ciągu osobie znającej rozkład liczby n.
Moc algorytmu BBS leży w dużej złożoności obliczeniowej problemu rozkładu liczby na
czynniki pierwsze.
Generator progowy (threshold generator)
Zaproponowany w 1984r. przez J.O. Bruera generator używa zmiennej (nieparzystej)
liczby rejestrów LFSR.
Funkcję progową wyraża się wzorem:
2

1 gdy
f =

0 w p. p
 n
 n
∑aj  >
 j =1  2


Gdy długości wszystkich rejestrów są względnie pierwsze, a wielomiany gałęzi
sprzężenia zwrotnego pierwotne, to okres tego generatora jest maksymalny.
Generator samodecymujący Rueppela (self-decimation generator)
Zaproponowany został w 1987r. przez R.A. Rueppela i steruje własnym wejściem
zegarowym. Kiedy wyjście rejestru LFSR jest równe 0, wtedy ten LFSR jest taktowny d razy,
a gdy jest równe l to k razy.
Generator samodecymujący Rueppela
Okres tego generatora jest równy
2 
T =  T0 
3 
wtedy gdy okres rejestru LFSR jest maksymalny i równy T0, gdzie  oznacza całkowite dolne
ograniczenie.
3
Generator rozrzedzający (shrinking generator)
Zaproponowany w 1993r przez D. Coppersmitha, H. Krawczyka i Y. Mansoura. Generator
ten wykorzystuje dwa rejestry LFSR. Bity wyjściowe jednego z rejestrów mają za zadanie
zdecydować, które bity drugiego rejestru mają być wykorzystane, a które odrzucone.
Generator rozrzedzający
Jeżeli na wyjściu rejestru S pojawi się jedynka, bit wyjściowy z rejestru A jest
dołączany do ciągu klucza ki. Obydwa rejestry pracują równocześnie. Jeżeli długości
rejestrów
(
)
są
względnie
pierwsze, to
okres
takiego
generatora
wynosi
T = 2 LS − 1 2 LA −1 .
Generator wykorzystujący automat komórkowy (Wolfram’s cellular automaton
generator)
Zaproponowany
w
1985r.
przez
S.
Wolframa
generator
wykorzystuje
jednowymiarowy automat komórkowy, który składa się z N komórek ai (O ≤ i≤ N-1). Wartość
początkowa wszystkich komórek jest ziarnem. W każdym kroku
zawartość wszystkich
komórek jest zmieniana zgodnie z regułą:
ai = ai-1 XOR ( ai OR ai+1 ),
gdzie indeksy w tym wzorze wyliczane są modulo N. Do ciągu klucza w każdym kroku
dołączany jest jeden ustalony bit ai (ustalany na podstawie odpowiednich bitów z chwili
wcześniejszej).
Generator Geffego (Geffes generator)
Zaproponowany w 1973 r. przez P.R. Geffego. Wykorzystuje trzy rejestry LFSR
powiązane ze sobą nieliniowo przez multiplekser. Działanie tego generatora można
opisać wzorem:
4
k=( a3 AND a1 ) OR ((NOT a1) AND a2).
Generator Geffego
Liniowa złożoność tego generatora wynosi Λ = ( L1 + 1 )L2 + L1 L3 gdzie Li oznacza
długość rejestru i. Okres ciągu wyjściowego z generatora odpowiada najmniejszej
wspólnej wielokrotności trzech okresów generatorów składowych. W najlepszym
przypadku jest on równy iloczynowi okresów generatorów składowych T=T1T2T3 pod
warunkiem, że długości rejestrów składowych są względnie pierwsze.
Przemienny generator stop-and-go (alternating step generator)
Zaproponowany w 1987r. przez C.G. Gunthera generator został zbudowany z
trzech rejestrów LFSR o różnej długości. LFSR-1 taktuje rejestr LFSR-2 jedynką, a
rejestr LFSR-3 zerem. Ciąg wyjściowy jest sumą modulo 2 ciągów wyjściowych
LFSR-2 i LFSR-3.
Naprzemienny generator Stop-and-Go
Jeżeli długości wszystkich trzech rejestrów są względnie pierwsze, a zarówno okresy
generatorów LFSR-2 i LFSR-3 (gcd (T2,T3 ) = l), to okres generatora jest równy
iloczynowi okresów wszystkich rejestrów T=T1T2T3.
5
Kaskada Gollmanna (Cascade generator)
Generator ten został zaproponowany przez D. Gollmanna i jest to ulepszona wersja
generatora Betha-Pipera. Składa się on z ciągu rejestrów LFSR, gdzie wyjście zegarowe
każdego następnego rejestru w ciągu jest sterowane przez poprzedni LFSR.
Kaskada Gollmanna
Ciągiem wyjściowym tego generatora jest ciąg wyjściowy ostatniego rejestru LFSR.
Złożoność liniowa generatora składającego się z n rejestrów jest równa: Λ =L (2L – 1)n-1
wtedy gdy wszystkie rejestry mają taką samą długość L (jest to wielka liczba). Jego okres jest
n-tą potęgą okresu pojedynczego rejestru T = (2L – 1)n.
Generator obcinający
W generatorze tym używa się innego rodzaju sterowania zegarem niż w omawianych
generatorach. Bierzemy pod uwagę dwa rejestry LFSR-1 i LFSR-2. Taktujemy oba te rejestry
i jeżeli bitem wyjściowym LFSR-1 jest 1, to bit wyjściowy generatora pochodzi z wyjścia
LFSR-2. Jeżeli 0 jest bitem wyjściowym LFSR-1, to odrzucamy oba bity, taktujemy oba
rejestry po czym powtarzamy operację.
Sposób ten jest prosty, a generator ten jest bezpieczny i dość wydajny. Jeśli
wielomian, który określa nam kształt sprzężenia zwrotnego jest rzadki, to generator ten jest
podatny na ataki. Częstość pojawiania się bitów na wyjściu generatora nie jest regularna, jest
więc źródłem kłopotów w zastosowaniach – jeśli rejestr LFSR-1 wytwarza długi ciąg zer, to
na wyjściu tego generatora nie pojawi się nic. W celu usunięcia tej niedogodności autorzy
proponują buforowanie.
6
Generator samoobcinający
Generator ten jest odmianą generator obcinającego. Zamiast dwóch rejestrów LFSR,
stosuje się parę bitów wyjściowych jednego rejestru LFSR. Taktujemy LFSR dwukrotnie i
jeżeli pierwszym bitem w parze jest 1, to bitem wyjściowym jest drugi bit z pary. Jeżeli
pierwszym bitem w parze jest 0, to odrzucamy oba bity, po czym rozpoczynamy następną
próbę. Wymagania pamięciowe
tego generatora są o połowę mniejsze od generatora
obcinającego, ale za to jest o wiele wolniejszy.
Liniowy rejestr przesuwający ze sprzężeniem zwrotnym
(szczegóły w podanej literaturze)
7
(1,0)
(58,19,0)
(68,9,0)
(162,8,7,4,0)
(2,1,0)
(3,1,0)
(4,1,0)
(5,2,0)
(58,6,5,1,0)
(59,7,4,2,0)
(59,6,5,4,3,1,0 )
(60,1,0 )
(68,7,5,1,0)
(111,49,0)
(113,9,0)
(113,15,0)
(163,7,6,3,0)
(164,12,6,5,0)
(165,9,8,3,0)
(166,10,3,2,0)
(6,1,0)
(7,1,0)
(7,3,0)
(8,4,3,2,0)
(9,4,0)
(10,3,0)
(11,2,0)
(12,6,4,1,0)
(13,4,3,1,0)
(14,5,3,1,0)
(15,1,0)
(165,3,2,0)
(17,3,0)
(17,5,0)
(17,6,0)
(18,7,0)
(18,5,2,1,0)
(19,5,2,1,0)
(20,3,0)
(21,2,0)
(22,1,0)
(23,5,0)
(24,4,3,1,0)
(25,3,0)
(26,6,2,1,0)
(27,5,2,1,0)
(28,3,0)
(29,2,0)
(30,6,4,1,0)
(31,3,0)
(31,6,0)
(31,7,0)
(31,13,0)
(61,5,2,1,0)
(62,6,5,3,0)
(63,1,0)
(64,4,3,1,0)
(65,18,0)
(65,4,3,1,0)
(66,9,8,6,0)
(66,8,6,5,3,2,0)
(67,5,2,1,0)
(68,9,0)
(68,7,5,1,0)
(69,6,5,2,0)
(70,5,3,1,0)
(71,6,0)
(71,5,3,1,0)
(72,10,9,3,0)
(72,6,4,3,2,1,0)
(73,25,0)
(73,4,3,2,0)
(74,7,4,3,0)
(75,6,6,3,1,0)
(76,5,4,2,0)
(77,6,5,2,0)
(78,7,2,1,0)
(79,9,0)
(79,4,3,2,0)
(80,9,4,2,0)
(80,7,5,3,2,1,0)
(81,4,0)
(82,9,6,4,0)
(82,8,7,6,1,0)
(83,7,4,2,0)
(84,13,0)
(113,30,0)
(114,11,2,1,0)
(115,8,7,2,0)
(116,6,5,2,0)
(167,6,0)
(170,23,0)
(172,2,0)
(174,13,0)
(117,5,2,1,0)
(118,33,0)
(119,8,0)
(119,45,0)
(175,6,0)
(175,16,0)
(175,18,0)
(175,57,0)
(120,9,6,2,0)
(121,18,0)
(122,6,2,1,0)
(177,8,0)
(177,22,0)
(177,88,0)
(123,2,0)
(124,37,0)
(125,7,6,5,0)
(126,7,4,2,0)
(178,87,0)
(183,56,0)
(194,87,0)
(198,65,0)
(127,1,0)
(127,7,0)
(127,63,0)
(201,14,0)
(201,17,0)
(201,59,0)
(128,7,2,1,0)
(129,5,0)
(130,3,0)
(131,8,3,2,0)
(132,29,0)
(201,79,0)
(202,55,0)
(207,43,0)
(212,105,0)
(218,1,0)
(133,9,8,2,0)
(134,57,0)
(135,11,0)
(218,15,0)
(218,71,0)
(218,83,0)
(135,16,0)
(135,22,0)
(136,8,3,2,0)
(137,21,0)
(225,32,0)
(225,46,0)
(225,74,0)
(225,88,0)
(138,8,7,1,0)
(139,8,5,3,0)
(140,29,0)
(225,97,0)
(225,109,0)
(231,26,0)
8
(32,7,6,2,0)
(32,7,5,3,2,1,0)
(33,13,0)
(33,16,4,1,0)
(34,8,4,3,0)
(34,7,6,5,2,1,0)
(35,2,0)
(36,11,0)
(36,6,5,4,2,1,0)
(37,6,4,1,0)
(37,5,4,3,2,1,0)
(38,6,5,1,0)
(39,4,0)
(40,5,4,3,0)
(41,3,0)
(42,7,4,3,0)
(42,5,4,3,2,1,0)
(43,6,4,3,0)
(44,6,5,2,0)
(45,4,3,1,0)
(46,8,7,6,0)
(46,8,5,3,2,1,0)
(47,5,0)
(48,9,7,4,0)
(48,7,5,4,2,1,0)
(49,9,0)
(49,6,5,4,0)
(50,4,3,2,0)
(51,6,3,1,0)
(53,6,2,1,0)
(54,8,6,3,0)
(54,6,5,4,3,2,0)
(55,24,0)
(55,6,2,1,0)
(56,7,4,2,0)
(57,7,0)
(57,5,3,2,0)
(84,8,7,5,3,1,0)
(85,8,2,1,0)
(86,6,5,2,0)
(87,13,0)
(141,13,6,1,0)
(142,21,0)
(143,5,3,2,0)
(144,7,4,2,0)
(231,34,0)
(234,31,0)
(234,103,0)
(236,5,0)
(87,7,5,1,0)
(88,11,9,8,0)
(88,8,5,4,3,1,0)
(89,38,0)
(145,52,0)
(145,69,0)
(146,5,3,2,0)
(147,11,4,2,0)
(250,103,0)
(255,52,0)
(255,56,0)
(255,82,0)
(89,51,0)
(89,6,5,3,0)
(90,5,3,2,0)
(91,8,5,1,0)
(148,27,0)
(149,10,9,7,0)
(150,53,0)
(151,3,0)
(258,83,0)
(266,47,0)
(270,133,0)
(282,35,0)
(91,7,6,5,3,2,0)
(92,6,5,2,0)
(93,2,0)
(151,9,0)
(151,15,0)
(151,31,0)
(282,43,0)
(286,69,0)
(286,73,0)
(94,21,0)
(94,6,5,1,0)
(95,11,0)
(95,6,5,4,2,1,0)
(151,39,0)
(151,43,0)
(151,46,0)
(151,51,0)
(294,61,0)
(322,67,0)
(333,2,0)
(350,53,0)
(96,10,9,6,0)
(96,7,6,4,3,2,0)
(97,6,0)
(98,11,0)
(151,63,0)
(151,66,0)
(151,67,0)
(151,70,0)
(366,29,0)
(378,43,0)
(378,107,0)
(390,89,0)
(98,7,4,3,1,0)
(99,7,5,4,0)
(100,37,0)
(152,6,3,2,0)
(153,1,0)
(153,8,0)
(462,73,0)
(521,32,0)
(521,48,0)
(100,8,7,2,0)
(101,7,6,1,0)
(102,6530)
(104,11,10,1,0)
(105,16,0)
(154,9,5,1,0)
(155,7,5,4,0)
(156,9,5,3,0)
(158,8,6,5,0)
(159,31,0)
(521,158,0)
(521,168,0)
(607,147,0)
(607,273,0)
(1279,216,0)
(106,15,0)
(107,9,7,4,0)
(108,31,0)
(159,34,0)
(159,40,0)
(160,5,3,2,0)
(1279,418,0)
(2281,715,0)
(2281,915,0)
(109,5,4,2,0)
(110,6,4,1,0)
(111,10,0)
(161,18,0)
(161,39,0)
(161,60,0)
(2281,1029,0)
(3217,67,0)
(3217,576,0)
Niektóre wielomiany pierwotne modulo 2 (więcej w Schneier B. Kryptografia dla praktyków)
9