Буквенно-цифровые символы: определение, использование в криптовалюте, безопасность.
Шестьдесят два. Это общее количество различных символов, доступных, когда кто-то говорит: «Используйте только буквенно-цифровые символы». Двадцать шесть заглавных букв, двадцать шесть строчных, десять цифр. Если исключить регистр, то их количество уменьшится до тридцати шести. Оба числа важны, потому что почти каждый цифровой идентификатор, который вы когда-либо вводили — адрес кошелька, пароль Wi-Fi, хеш транзакции, токен GitHub — состоит из выбранного подмножества этих шестидесяти двух символов.
Выбор подмножества символов и причины его выбора — это та часть, которую большинство поясняющих статей пропускают. Именно она связывает энциклопедическое определение буквенно-цифрового символа с практической безопасностью вашего криптокошелька. В этой статье рассматривается подсчет, лежащий в его основе стандарт, способ выбора подмножеств современной криптографией и то, что теперь говорит об этом национальный орган США по паролям. Некоторые из этих рекомендаций изменились таким образом, что большинство советов по безопасности еще не успели адаптироваться.
Что такое буквенно-цифровой символ? Определение и количество.
Начнём с определения. Буквенно-цифровой символ — это любая буква от A до Z (в любом регистре) или любая десятичная цифра от 0 до 9. Вот и всё. Дальше арифметика очевидна — двадцать шесть букв на регистр плюс десять цифр дают шестьдесят два различных символа с учётом регистра и тридцать шесть без него. Всё остальное — «особые». Знаки препинания, пробелы, математические символы, буквы с диакритическими знаками, эмодзи — ничто из этого не считается буквенно-цифровым символом.
Инженеры обычно соответствуют этому определению с помощью одного из двух сокращений. Инструменты POSIX, такие как grep, sed и awk, распознают `[:alnum:]`, что соответствует шестидесяти двум символам, указанным выше. Большинство современных вариантов регулярных выражений — Python, JavaScript, Java, PCRE — используют вместо этого `\w`. Подвох с `\w` заключается в том, что он незаметно добавляет символ подчеркивания. Символ подчеркивания формально не является буквенно-цифровым символом. В большинстве программных синтаксических конструкций он рассматривается как почетный символ, поэтому префикс ключа Stripe `sk_live_` и префикс ключа AWS `AKIA` смешивают символы подчеркивания и заглавные буквы с цифрами, и никто даже не задумывается об этом.
Откуда взялся этот термин? Как ни странно, из перфокарт. В 1930-х годах для табуляционного оборудования IBM требовалось одно слово для кодов, сочетающих буквы и цифры, и «буквенно-цифровой» прижился. К началу 1960-х годов, к IBM 1401, это слово стало стандартным словарём в деловой компьютерной среде. На практике это различие имело смысл — поле, обозначенное как «буквенно-цифровое», принимало любую букву или цифру; поле, принимающее только цифры, полностью отвергало алфавит. Оттуда слово проникло в номерные знаки автомобилей, банковские коды IBAN, мнемонические правила телефонных клавиатур, артикулы товаров и сотни других мест.
Различие между регистрочувствительными и регистронечувствительными паролями важнее, чем кажется. Энтропия паролей удваивается, когда разрешены заглавные буквы. В адресах Bitcoin, использующих Base58, регистр намеренно сохраняется. Bech32 намеренно игнорирует регистр. Каждый из этих вариантов — это компромисс между выразительностью и человеческой ошибкой. Неправильный выбор приведет к потере денег из-за опечаток.

От ASCII к Unicode: краткая техническая история.
Сегодня «буквенно-цифровой» — это пережиток шестидесятилетней войны стандартов. Большинство пользователей оказались где-то посередине и так и не заметили этого.
Сначала появился ASCII. Он был выпущен в 1963 году благодаря Американской ассоциации стандартов и был официально утвержден пять лет спустя как ANSI X3.4-1968. За ним последовали две редакции — одна в 1977 году, другая в 1986 году. В версии 1968 года заглавная буква A была присвоена номеру 65, строчная буква a — номеру 97, а цифры от 0 до 9 — номерам от 48 до 57. Откройте свой редактор прямо сейчас: байт «A» по-прежнему равен 65. За шестьдесят лет ничего не изменилось.
Примерно четыре десятилетия буквенно-цифровой код ASCII оставался единственным буквенно-цифровым кодом. Затем появилась глобальная сеть. Семи битов стало недостаточно. Последствия были ужасными. Искаженные электронные письма. Сломанные базы данных. Японские веб-сайты, которые прекрасно работали в Токио, выглядели как стены вопросительных знаков на американском ноутбуке. В 1991 году появился Unicode с экстравагантной целью: присвоить уникальный номер каждому символу в каждом написанном когда-либо шрифте. В 1992 году появилась UTF-8, кодировка, которая фактически передавала Unicode по обычным сетям. Ее секрет заключался в обратной совместимости — первые 128 кодовых точек UTF-8 точно соответствуют исходным байтам ASCII 1968 года. Английский текст, выпущенный до 1991 года, продолжал работать вечно.
Переход произошел в декабре 2007 года. В том месяце общедоступная статистика веб-сканирования наконец показала, что UTF-8 обогнала ASCII по распространенности в интернете. С тех пор термин «буквенно-цифровой» перестал строго означать шестьдесят два символа ASCII. В настоящее время Unicode каталогизирует буквенно-цифровые блоки для кириллицы, греческого, арабского, иврита и китайского, японского и корейского алфавитов. Каждый алфавит имеет свои собственные буквы и цифры.
Однако на практике программное обеспечение, которому приходится работать за пределами США, по умолчанию использует исходный набор символов ASCII. Латинские буквы A–Z. Арабские цифры 0–9. Ничего больше. Причина проста. Каждая клавиатура воспроизводит ASCII. Каждая база данных принимает его. Каждый механизм регулярных выражений его знает. Выйдите за пределы этого диапазона, и вы унаследуете целый набор ошибок кодирования, похожих символов и фишинговых атак, к которым я вернусь ниже.
| Сорт | Члены | Считать | Сокращенная запись регулярных выражений | Пример | |
|---|---|---|---|---|---|
| Алфавитный | А–З, а–з | 52 | `[А-За-з]` | Простое английское слово | |
| Числовой | 0–9 | 10 | `[0-9]` или `\d` | Год, почтовый индекс | |
| Буквенно-цифровой | А–З, а–з, 0–9 | 62 | `[A-Za-z0-9]` или `[:alnum:]` | API-ключ, артикул | |
| Особый / символический | `!@#$%^&*()_+-=[]{};:'"\ | ,.<>/?` | ~33 (ASCII) | `[^A-Za-z0-9]` | Модификатор пароля |
Буквенно-цифровые символы в криптовалюте: адреса, хеши, начальные значения (сиды).
Вот тот момент, который обычно опускают в стандартных пояснениях. Криптовалютные системы никогда не используют полный набор из шестидесяти двух буквенно-цифровых символов. Они выбирают тщательно подобранные подмножества . Каждое из них — это задокументированный инженерный компромисс, а не произвольная эстетическая задумка.
Биткоин — это первое подобное решение. Устаревший биткоин-адрес (начинающийся с 1 или 3) закодирован в Base58. Алфавит был разработан вручную Сатоши Накамото. Рецепт: возьмите набор из шестидесяти двух буквенно-цифровых символов, удалите четыре элемента. Удалите цифру ноль, заглавную букву O, заглавную букву I, строчную букву l. Зачем именно эти четыре? Напишите их на стикере небрежным почерком. Отойдите. Вернитесь через пять минут. Попробуйте отличить их друг от друга. Не получится. В этом и заключается вся проблема, для решения которой был создан Base58. Остается пятьдесят восемь символов. Типичный устаревший адрес в итоге имеет длину от двадцати шести до тридцати пяти символов — достаточно коротко, чтобы скопировать его вручную, если это действительно необходимо.
SegWit был активирован в августе 2017 года. Вместе с ним появился и второй формат биткойн-адресов: Bech32, определенный в BIP-173. Bech32 делает другие ставки. Чувствительность к регистру полностью исчезает — каждый адрес пишется строчными буквами. Отбрасываются четыре других символа: цифра 1, а также b, i, o. Тридцать две оставшиеся буквы и цифры содержат встроенную контрольную сумму. Контрольная сумма автоматически обнаруживает почти все опечатки в отдельных символах. Taproot, работающий с ноября 2021 года, усовершенствовал формат до Bech32m (BIP-350) после того, как исследователи обнаружили ошибку в исходной математической модели, связанную с крайними случаями.
Ethereum выбрал третий путь. Просто используйте шестнадцатеричный код. Адрес Ethereum — это `0x`, за которым следуют ровно сорок шестнадцатеричных символов; всего сорок два символа. Шестнадцатеричный код сужает буквенно-цифровой диапазон до шестнадцати элементов. Цифры 0–9, буквы a–f, ничего больше. В 2015 году этот выбор казался логичным. К 2026, после многих лет, всматриваясь в необработанные шестнадцатеричные данные в MetaMask, это выглядит некрасиво. Решением стал EIP-55. Он выборочно переводит в верхний регистр определенные буквы в шаблоне, полученном из хеша Keccak-256 адреса в нижнем регистре. В результате получается бесплатное обнаружение опечаток. EIP-55 обнаруживает опечатки с надежностью около 99,975%. Процент пропусков составляет примерно 0,0247%. Небольшой показатель. Не нулевой.
Хэши — это простейший случай. Результат хэша SHA-256 — это 256 бит, отображаемых в виде 64 шестнадцатеричных символов. Хэш Keccak-256 в Ethereum выдает результат той же длины. Идентификатор транзакции Bitcoin — txid — это хэш SHA-256 самой транзакции, поэтому txid также состоит из 64 буквенно-цифровых шестнадцатеричных символов. На обозревателе блоков они выглядят устрашающе. На самом деле они являются чисто буквенно-цифровыми.
Сид-фразы нарушают этот шаблон. Восстановление кошелька BIP-39 — это единственное место, где криптовалюта выходит за рамки буквенно-цифрового кодирования и возвращается к чисто алфавитной территории. Стандарт кодирует 128 или 256 бит энтропии в виде двенадцати или двадцати четырех английских слов, взятых из фиксированного списка из 2048 слов. Каждое слово состоит только из строчных букв — без цифр, без смешанного регистра. Почему? Потому что целевая аудитория — человек, пишущий слова на бумаге в 3 часа ночи после того, как у него разрядился телефон, а цифры вносят неоднозначность, которой нет в буквах.
| Идентификатор | Набор символов | Длина | Пример (сокращенный) |
|---|---|---|---|
| Устаревший адрес биткоина | Base58 (58 символов, без 0/O/I/l) | 26–35 | `1A1zP1eP5QGefi2…` |
| Bitcoin Bech32 (SegWit) | 32 строчные буквы, нет 1/b/i/o | ~42 | `bc1qar0srrr7xfk…` |
| Адрес Ethereum | шестнадцатеричный код (0–9, a–f) + `0x` | 42 | `0xde0B295669a91…` |
| SHA-256 / txid | шестиугольник | 64 | `e3b0c44298fc1c1…` |
| Слово BIP-39 | только от а до я | 3–8 на слово | «отказаться от способности…» |
Каждый подмножество представляет собой элемент человекоориентированного дизайна, скрытый внутри глубоко технической системы.
Буквенно-цифровые пароли: что на самом деле говорит NIST в 2024 году?
Большинство рекомендаций по созданию паролей в открытом доступе в интернете устарели на несколько лет. Используйте символы разного регистра, добавляйте цифры, включайте хотя бы один специальный символ, меняйте пароль каждые девяносто дней — эти правила были каноническими в течение двух десятилетий. Национальный институт стандартов и технологий США официально отказался от них.
В сентябре 2024 года NIST завершил работу над четвертой редакцией своего специального издания 800-63B, федерального руководства по цифровой идентификации. Новые рекомендации поражают масштабом изменений. Рекомендуемая минимальная длина пароля для однофакторной аутентификации была увеличена до пятнадцати символов. Инструкция по правилам составления символов сформулирована как «нельзя»: сервисы не должны требовать определенные классы символов. Периодическое истечение срока действия пароля, то самое девяностодневное чередование, которое все ненавидели, также было удалено. Вместо этих правил NIST теперь требует от сервисов проверять отправленные пароли по списку известных скомпрометированных учетных данных.
Изменение обусловлено математическими расчетами энтропии. Буквенно-цифровой пул из 62 символов дает примерно 5,95 бит на символ. Полный печатный ASCII-пул из 95 символов — буквенно-цифровой плюс специальные символы — дает 6,57 бит на символ. Добавление полного набора специальных символов дает 0,62 бита на символ. Добавление еще одного символа дает полные 5,95 бита. Длина опережает сложность на порядок.
В отчете Verizon о расследованиях утечек данных за 2025 год говорится, что учетные данные составляют 22 процента всех подтвержденных точек входа в систему после утечек. Использование украденных учетных данных — автоматическое повторное использование списков паролей, попавших в сеть, — составляет в среднем 19 процентов попыток аутентификации, достигая пика в 44 процента. 49 процентов пользователей повторно используют пароли в разных сервисах. Ни одна из этих проблем не решается требованием использования заглавных букв.
Длинный буквенно-цифровой пароль без специальных символов сложнее взломать, чем короткий, составленный в соответствии со списком требований к сложности. Если ваш банк по-прежнему требует от вас составлять двенадцатисимвольный пароль, состоящий из одной заглавной буквы, одной цифры и одного специального символа, то эта политика официально не соответствует федеральному стандарту США.
В других местах, где появляются буквенно-цифровые символы
Если отбросить криптографию, пароли и буквенно-цифровые строки по-прежнему встречаются везде, где системе нужен идентификатор, который человек может ввести, а компьютер — однозначно распознать.
Банковские коды — простой пример. IBAN может содержать до тридцати четырех буквенно-цифровых символов и всегда начинается с двухбуквенного кода страны по стандарту ISO. SWIFT/BIC-коды содержат восемь или одиннадцать символов. Номерные знаки различаются в зависимости от страны — британский номерной знак совсем не похож на немецкий — но оба являются буквенно-цифровыми подмножествами одного и того же набора из шестидесяти двух символов. Идентификационные номера транспортных средств (VIN) во всем мире состоят ровно из семнадцати символов, и в VIN-кодах намеренно запрещены буквы I, O и Q, чтобы визуально отличать их от цифр.
Ключи API — это повседневные примеры, на которые большинство пользователей даже не удосуживаются взглянуть. Ключ Stripe Live открывает `sk_live_` плюс буквенно-цифровой токен. Ключ доступа AWS открывает `AKIA` плюс шестнадцать буквенно-цифровых символов. Персональный токен доступа GitHub, выданный после 2021 года, открывает `ghp_`. Эти префиксы сами по себе являются буквенно-цифровыми и выбраны для того, чтобы провайдеры могли сканировать общедоступные репозитории и журналы на предмет утечек ключей. Во многих случаях такое сканирование обнаруживает ошибку раньше, чем это сделает злоумышленник.
QR-коды заслуживают краткого упоминания. Стандарт ISO/IEC 18004 определяет специальный «буквенно-цифровой режим», который кодирует определенный набор из 45 символов — заглавные буквы, цифры, пробел и несколько знаков препинания — более эффективно, чем общий байтовый режим. QR-код, содержащий только заглавные буквы и цифры, хранит примерно в 1,6 раза больше данных на квадрат, чем тот же контент, закодированный в виде необработанных байтов.
Base32, Base58, Base64: Когда криптовалюта выбирает подмножество
Существует несколько стандартов кодирования, специально предназначенных для преобразования двоичных данных в буквенно-цифровое подмножество. Примером является RFC 4648, опубликованный IETF в 2006 году. В нем определены три варианта кодирования.
Шестнадцатеричная система счисления (Hex) — самая простая из них. Официально — Base16. Шестнадцать символов: 0–9, a–f. Используется для адресов Ethereum, криптографических хешей, практически для любой низкоуровневой отладки, где необходимо считывать необработанные байты. Base32 — более интересная система. 32-символьный алфавит был выбран для того, чтобы быть нечувствительным к регистру и, в некоторых вариантах, для того, чтобы отбросить визуально путаемые цифры 0, 1, 8 и 9. Любой, кто настроил двухфакторную аутентификацию и ввел секретный ключ в Google Authenticator, вводил Base32 — в большинстве случаев даже не подозревая об этом.
Base64 — это основной инструмент. Шестьдесят два буквенно-цифровых символа плюс два символа `+` и `/`. В URL-безопасном варианте они заменяются на `-` и `_`. Base64 используется для передачи вложений в электронные письма, кодирования URL-адресов данных внутри HTML и упаковки JSON Web Tokens для OAuth.
Алфавит Base58, используемый в Биткоине, находится за пределами RFC 4648. Сатоши Накамото разработал его независимо. Цель была иной — предотвратить повторный ввод адресов людьми, а не повысить эффективность использования байтов на символ, — и в результате получился собственный алфавит, который никто больше не использует. Base85, иногда называемый Ascii85, работает в обратном направлении. Он упаковывает четыре байта в пять символов и используется в файлах PDF и PostScript, где дополнительная плотность оправдывает потерю читаемости.

Распространённые ошибки: визуальная путаница и похожие товары.
Те же причины, по которым в криптографии выбирают подмножества буквенно-цифровых символов, являются причиной ошибок, которые допускают все. Большинство проблем возникает из-за нескольких пар символов.
Классические путаемые буквы: ноль и заглавная O. Цифра один, строчная l, заглавная I. Строчная l и заглавная I. В системе Bitcoin Base58 все четыре буквы исключаются именно по этой причине. В других системах используются другие способы предотвращения путаницы — в VIN-кодах исключаются I, O и Q, в некоторых финансовых кодах буква O исключается полностью, а в национальных правилах оформления номерных знаков может быть запрещено использование той буквы, которая наиболее похожа на 0 в шрифте страны.
Более сложная и относительно новая проблема — атаки с использованием омографов Unicode. Идея была описана в статье Евгения Габриловича и Алекса Гонтмахера 2001 года. Омограф заменяет визуально идентичный символ из другого алфавита — например, кириллическую «а» (U+0430) на латинскую «а» (U+0061). Зарегистрируйте доменное имя с такой заменой, и вы сможете разместить фишинговую страницу, которая будет выглядеть неотличимо от настоящей банковской страницы. Современные браузеры отображают исходное представление Punycode — что-то вроде `xn--80akhbyknj4f` — всякий раз, когда домен использует разные алфавиты. Эта защита обнаруживает большинство атак. Но не все.
Как создать надежный буквенно-цифровой пароль в 2026
Три правила. Все они выведены непосредственно из математических моделей NIST.
Первое: длина важнее класса символов. Стремитесь к шестнадцати символам или больше. Это правило действует независимо от того, принимает ли система только буквы и цифры или полный набор печатных символов ASCII.
Во-вторых: если вам нужно его запомнить, используйте кодовую фразу. Четыре случайных слова из большого списка — список Diceware является каноническим вариантом — превосходят почти любой короткий пароль, который человек придумает сам.
Третий пункт: для всего остального используйте менеджер паролей. Пусть менеджер генерирует длинные буквенно-цифровые строки, которые вам никогда не придется читать или вводить вручную. Как только менеджер обработает вывод, читаемость вывода перестанет иметь какое-либо значение.
Краткий справочник: подсчет буквенно-цифровых символов и примеры.
Шестьдесят два символа с учетом регистра. Тридцать шесть без учета регистра. Коды ASCII 48–57 для цифр. 65–90 для заглавных букв. 97–122 для строчных букв. Сопоставьте весь набор с регулярным выражением `[A-Za-z0-9]` или классом POSIX `[:alnum:]`. Этот набор из шестидесяти двух символов лежит в основе почти каждого цифрового идентификатора, с которым вы столкнетесь на этой неделе. Пароли. Ключи API. IBAN. Номерные знаки. Идентификаторы транзакций. Каждый сгенерированный вами адрес кошелька.