На самом деле, хотя RFC говорит «случайная строка», одноразовый номер не обязательно должен быть случайным.Он просто должен быть уникальным.
Преимущество безопасности при использовании одноразового номера заключается в предотвращении воспроизведения.Сервер принимает только подписанные запросы, но злоумышленник может попытаться перехватить уже подписанный запрос и отправить его снова в более позднее время.Поскольку сервер принимает запросы с определенным одноразовым значением только один раз, это не работает.
Как клиент, вы должны убедиться, что вы никогда не отправляете два запроса с одинаковыми одноразовыми номерами и временными метками.Генерируя случайную строку, вы гарантируете это вероятностно.Но вы также можете использовать глобальный счетчик, который сбрасывается каждую секунду.
Задача сервера - хранить все одноразовые номера, которые он получает от конкретного клиента.По практическим соображениям сервер может истекать одноразовые номера по истечении определенного времени, но только если он также отклоняет все запросы с соответственно устаревшей временной меткой.
Таким образом, с 20-30 случайными символами вы можете быть достаточно уверены, что никогдагенерировать два идентичных одноразовых номера в течение секунды.Но 6–8 символов, как в примерах RFC, достаточно, если вы храните и проверяете сгенерированные вами одноразовые номера или готовы повторить попытку, если сервер отклоняет ваш одноразовый номер.