Методы и задачи криптографической защиты информации. Мартынов А.И. - 45 стр.

UptoLike

Составители: 

Если инкремент b равен нулю, то есть генератор имеет вид
()
maXX
nn
mod
1
=
,
и мы получим самую простую последовательность, которую можно предложить
для генератора с равномерным распределением. При соответствующем выборе
констант a = 7
5
= 16 807 и m = 2
31
-1 = 2 147 483 647 мы получим генератор с
максимальным периодом повторения. Эти константы были предложены
учеными Парком и Миллером, поэтому генератор вида
(
)
12mod7
31
1
5
=
nn
XX
называется генератором Парка-Миллера.
Преимуществом линейных конгруэнтных генераторов является их
быстрота за счет малого количества операций на байт и простота реализации. К
сожалению, такие генераторы в криптографии используются достаточно редко,
поскольку являются предсказуемыми.
Иногда используют квадратичные и кубические конгруэнтные
генераторы, которые обладают большей стойкостью к взлому.
Квадратичный конгруэнтный генератор имеет вид
(
)
mсbXaXX
nnn
mod
1
2
1
++=
.
Кубический конгруэнтный генератор задается как
(
)
mdсXbXaXX
nnnn
mod
1
2
1
3
1
+++=
.
Для увеличения размера периода повторения конгруэнтных генераторов
часто используют их объединение [13]. При этом криптографическая
безопасность не уменьшается, но такие генераторы обладают лучшими
характеристиками в некоторых статистических тестах.
Пример такого объединения для 32-битовой архитектуры может быть
реализован так:
// Long   32-  
static long s1 = 1;
static long s2 = 1;
//MODMULT  s*b mod m  ,  m=a*b+c  0<=c<m
#define MODMULT(a,b,c,m,s) q = s/a; s = b*(s-a*q)-c*q;
if (s<0) s+=m;
double combinedLCG (void)
{
long q;
long z;
MODMULT (53668, 40014, 12211, 2147483563L, s1)
MODMULT (52774, 40692, 3791, 2147483399L, s2)
z = s1 - s2;
if (z<1)
z += 2147483562;
return z*4.656613e-10;
}
void InitLCG (long InitS1, long InitS2)