12 символов из 62 буквенно-цифровых вариантов на каждую позицию. Генерируется в вашем браузере.
Случайная буквенно-цифровая строка формирует каждый символ независимо из набора в 62 варианта: 26 заглавных букв, 26 строчных букв и 10 цифр. Каждая позиция несёт log2(62) ≈ 5,95 бит энтропии. 32-символьная строка, таким образом, содержит примерно 190 бит случайности, что делает её недосягаемой для любого перебора. Для сравнения: 128 бит — это текущий стандарт для симметричных ключей шифрования, защищающих секретную информацию.
Отличие от паролей существенно. Пароли требуют специальных символов для соответствия требованиям сложности, установленным системами аутентификации. Случайные строки служат другой цели: уникальность без специальных символов. Строки, состоящие только из буквенно-цифровых символов, безупречно работают в URL, именах файлов, идентификаторах баз данных, API-токенах, параметрах запросов и переменных окружения. Никакого экранирования. Никакого кодирования. Никаких крайних случаев, когда случайный амперсанд ломает парсер.
Наиболее важное свойство безопасности случайных строк — устойчивость к коллизиям: сколько строк можно сгенерировать, прежде чем две из них случайно совпадут? Ответ даёт парадокс дней рождений — результат из теории вероятностей, названный в честь удивительного факта: в группе всего из 23 человек вероятность совпадения дней рождения у двоих составляет 50%. Для случайных строк порог 50%-й вероятности коллизии наступает приблизительно при количестве строк, равном квадратному корню из общего пространства возможностей.
32-символьная буквенно-цифровая строка имеет 6232 ≈ 2190 возможных значений. Граница дней рождений составляет 295 ≈ 4 × 1028 строк. Вам потребуется сгенерировать сорок миллиардов миллиардов миллиардов строк, чтобы достичь 50%-й вероятности единственного дубликата. При скорости миллион строк в секунду это займёт более 1015 лет. Для любого практического применения коллизии математически невозможны в пределах срока жизни системы.
UUID версии 4 (/uuid) содержит 122 бита случайности в стандартизированном шестнадцатеричном формате 8-4-4-4-12. 22-символьная буквенно-цифровая строка из этого генератора обеспечивает примерно 131 бит случайности в более коротком и компактном представлении. Оба варианта служат одной фундаментальной цели: генерация уникальных идентификаторов без координации между системами.
Компромиссы конкретны. UUID повсеместно распознаются, валидируются стандартными библиотеками и сортируются хронологически некоторыми СУБД (UUIDv7). Случайные буквенно-цифровые строки короче, плотнее и не содержат дефисов. UUID занимает 36 символов включая дефисы; случайная строка с эквивалентной энтропией требует всего 22 символа. Выбирайте UUID при взаимодействии с системами, которые их ожидают. Выбирайте случайные строки, когда вы контролируете обе стороны и хотите максимальной информационной плотности.
Случайные буквенно-цифровые строки используются повсеместно в разработке программного обеспечения. API-токены аутентифицируют сервисы без паролей. Идентификаторы сессий отслеживают браузерные соединения. Значения nonce предотвращают атаки повторного воспроизведения в потоках OAuth. Временные имена файлов исключают конфликты при параллельной обработке. Тестовые данные заполняют базы данных реалистично выглядящими идентификаторами. Короткие ссылки сжимают длинные адреса в удобные для отправки ссылки. Каждый сценарий извлекает выгоду из одного и того же свойства: криптографическая непредсказуемость без специальных символов.
Генерация случайных строк обучает комбинаторике через непосредственное применение. Предложите студентам вычислить общее количество возможных строк для разных длин: 628 ≈ 2 × 1014 против 6216 ≈ 5 × 1028. Удвоение длины возводит пространство возможностей в квадрат. Затем представьте парадокс дней рождений: откройте /generate/8 и обсудите, при каком масштабе коллизии становятся вероятными для коротких строк по сравнению с /generate/32, где коллизии практически невозможны. Панель коллизий показывает границу дней рождений в реальном времени, делая абстрактную комбинаторику осязаемой.
Каждая строка, сгенерированная на этой странице, существует только внутри вашего браузера. Сервер предоставляет инструмент. Ваше устройство создаёт результат с помощью crypto.getRandomValues() — того же Web Cryptography API, который защищает онлайн-банкинг. Строка хранится в памяти браузера, пока вы её не скопируете. Закрытие вкладки уничтожает её. Сервер не имеет никакой информации ни об одной строке, когда-либо созданной этой страницей.
Введите любую длину прямо в адресную строку:
Отправьте инструмент или предложите другу сравнить его случайную строку с вашей.
Ежедневное вдохновение
Работы, отобранные жюри A' Design Award, представленные каждое утро.