Длина ID чтобы не угадали
От: vsb Казахстан  
Дата: 20.02.19 06:23
Оценка:
Есть страница вида /order/123456. 123456 это идентификатор чего-либо. Страница не требует авторизации, в то же время нежелательно, чтобы кто-то мог угадывать валидные идентификаторы, поэтому идентификатор генерируется случайно от 1 до N. Пусть в базе M записей (например миллион). Пусть злоумышленник делает t попыток отгадать (например 1000 в секунду или 86400 * 1000 * 365 * 10 = 315,3 млрд за 10 лет). Пусть хочется, чтобы шанс отгадать хоть один идентификатор был <= 1%. Как правильно посчитать N для таких входных данных?

Я посчитал, у меня непонятная формула получилась. Шанс не угадать в 1 раз (1 — M/N) = (N-M)/N, во второй раз (N-M)/N * (1 — M/(N-1)) = ((N-M)(N-M-1))/(N(N-1)), в t-й раз [(N-M)*(N-M-1)*(N-M-(t-1)]/[N*(N-1)*...*(N-(t-1))] = [(N-M)! * (N-t)!] / [(N-M-t)! * N!]. И чего мне теперь с этими факториалами делать я не понимаю.

В принципе вопрос можно переформулировать как длина идентификатора сессии, там по сути такие же условия, есть M активных сессий, длина идентификатора N, есть атака с подбором сессии.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.