Длина и энтропия
H = log₂(число равновероятных значений)
Для случайной последовательности байтов H = байты × 8. UUID v4, OTP и алфавитные коды имеют собственное пространство значений.
IT
Сгенерируйте API-токены, refresh-токены, session ID, CSRF, NanoID и короткие коды через Web Crypto. Можно задать префикс, длину и количество.
Инструмент был полезен?
Об инструменте
Один экран для всех типичных идентификаторов, которые нужны разработчику: API-ключи, refresh-токены, сессионные ID, CSRF-токены, UUID и NanoID. Каждый создаётся криптостойким способом прямо в браузере, можно скопировать конкретный токен или всю партию сразу.
Девять форматов в одном инструменте - от 6-значного OTP до 64-байтного refresh-токена.
Поддержка префиксов в стиле Stripe (sk_, pk_, whsec_) - токен сразу узнаётся в логах.
Под капотом - crypto.getRandomValues, как у Web Crypto API.
Для каждого формата энтропия вычисляется из фактического числа случайных байт или размера равномерного пространства.
Шаг за шагом
Методика
H = log₂(число равновероятных значений)
Для случайной последовательности байтов H = байты × 8. UUID v4, OTP и алфавитные коды имеют собственное пространство значений.
21 × log₂(64) ≈ 126 бит
Вероятность коллизии зависит от размера алфавита, длины и общего числа созданных идентификаторов.
Ограничения
Источник случайности - Web Crypto: подходит для криптостойких задач.
UUID v4 даёт 122 бита случайности - шесть бит зарезервированы под версию и вариант.
Шестизначные OTP выбираются равномерно из миллиона значений и дают около 19,9 бита. Они не подходят для долгоживущих токенов.
Советы
Храните секретные ключи в Vault, AWS Secrets Manager или другом секретохранилище - не в репозитории.
Делайте refresh-токены длиннее access-токенов: минимум 64 байта.
Добавьте узнаваемый префикс к ключам: так системы поиска секретов смогут точнее обнаруживать их в коде и логах.
Вопросы
Для долгоживущего секретного ключа часто используют не менее 32 случайных байт в hex или base64url. Итоговые требования задаёт протокол вашего API; префикс помогает распознавать тип ключа в логах и сканерах секретов.
NanoID короче (21 знак против 36) и сразу URL-safe. UUID - стандарт ISO и есть в каждом языке программирования.
Так делают Stripe и многие API-провайдеры: по префиксу видно, публичный это ключ или секретный, и в каком окружении он создан.
Теоретически да. Для длинных случайных токенов вероятность мала, но принимающая система всё равно должна проверять уникальность перед сохранением.
Ещё