Понимание энтропии сессий PHP

в session раздел php.ini есть директива под названием session.entropy_length,

Я знаю, что он используется для того, чтобы сделать идентификатор сеанса «более случайным».

  • Как это делает идентификатор сеанса более случайным?

  • Какова максимальная длина?

  • Что делать, если его длина превышает биты hash в использовании?

1

Решение

session_id хэш IP-адреса клиента (32 бита), текущей временной метки и микросекунды (52 бита), а также значения, сгенерированного из php combined lcg()функция генераторов случайных чисел Псевдо (PRNG) (64 бита). Энтропия составляет 148 бит. Однако это число не следует рассматривать как абсолютное минимальное значение, поскольку IP-адрес и временная метка хорошо известны из того, кто создает сеанс.

Когда доступно нежелательно низкое количество энтропии, можно восстановить PRNG семя из идентификатора сессии. С учетом того, что PHP использует одни и те же источники энтропии для разных генераторов, это стало еще проще.

Семя используется для генерации других псевдослучайных значений, поэтому, если злоумышленник может получить начальное значение, он может предсказать все будущие выходные данные (включая, но не только, mt_rand() а также rand). Это не хорошо.

session.entropy_length количество байтов, которые будут считаны из файла энтропии, обычно /dev/urandom или же /dev/arandom (из документации).

Если вы предоставляете случайный источник, такой как /dev/randomто энтропия тем больше, а сила генерируемой session_id сильнее.

4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector