Причина, по которой используется base32, состоит в том, чтобы избежать человеческой ошибки. Не имеет ничего общего с пространством.
Причина, по которой Base32 не упоминается в RFC4226, заключается в том, что он не имеет ничего общего с закрытым ключом, HMAC и генерацией токенов.
Base32 используется только для доставки закрытого ключа в удобочитаемой форме человеку.
Подробнее, если интересно.
Закрытый ключ в TOTP должен быть 20-байтовым (160-битным) секретом.
Закрытый ключ используется с HMAC-SHA1 для кодирования счетчика времени эпохи.
Токен извлекается из сгенерированного 160-битного HMAC.
НО ввести этот секрет в такой инструмент, как Google Autheatator, нелегко.
Хорошо, есть вариант QR-кода, который собирает этот закрытый ключ с веб-сайта.
Но эта функция не всегда доступна.
Так что, когда вам нужно ввести этот закрытый ключ, это поделиться с пользователем в формате base32.
т. е. ключ кодируется так, чтобы создать строку BASE32.
Так почему же BASE32 лучше, чем base64 в этом случае?
Одна важная и простая причина, и почему BASE32 вообще существует.
Использует только прописные буквы A-Z (без строчных) и цифры 2-7. № 0189
26 + 6 символов = 32.
Нет строчных букв и 0189, поэтому ilI1 не перепутан. Есть только я.
B и 8 0 и O путаница также устранена.
До такой степени, что если был введен 0, его можно рассматривать как O. A 1 как I и т. Д.
Независимо от того, пытается ли инструмент выполнить автокоррекцию или мои предпочтения, просто укажите пользователю недействительную запись - дело вкуса. Но что ясно, человеческая ошибка неуникальной интерпретации строки значительно уменьшается.
Это не относится к base64.
Все вышеперечисленные проблемы с перепутанными прописными и строчными буквами и числами относятся к base64.