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