Алгоритм М

Это название дано Кнутом [863]. Алгоритм представляет собой способ объединить несколько псевдослучай­ных потоков, увеличивая их безопасность. Выход одного генератора используется для выбора отстающего в ы-хода другого генератора [996, 1003]. На языке С:

#define ARR_SIZE (8192) /* например - чем больше, тем лучше */ static unsigned char delay! ARRSIZE ] ; unsigned char prngA( void ) long prngB( void ) ; void init_algM( void ) {

long i ;

for ( i = 0 ; i < ARR_SIZE ; i++ ) delay[i] = prngAO ; } /* lnlt_algM */ unsigned char alglM( void ) {

long j,v ;

j = prngBO % ARR_SIZE ; /* получить индекс delay[]*/

v = delay[j] ; /* получить возвращаемое значение */

delay[j] = prngAO ; /* заменить его */

return ( v ) ;

} /* algM */

Смысл состоит в том, что если prngA - действительно случайно, невозможно ничего узнать о prngB (и, сле­довательно, невозможно выполнить криптоанализ). Если prngA имеет такой вид, что его криптоанализ может быть выполнен только, если его выход доступен в свою очередь (т.е., только если сначала был выполнен крип-


тоанализ prngB), а в противном случае оно по сути действительно случайно, то эта комбинация должна быть безопасной.