Я понимаю, что HOTP можно использовать для создания числовых одноразовых паролей. Алгоритм позади существа:Генерирование буквенно-цифровой OTP с использованием HOTP
К секретный ключ
C быть счетчиком
HMAC (K, C) = SHA1 (К ⊕ 0x5c5c ... ∥ SHA1 (К ⊕ 0x3636 ... ∥ С)) с ⊕, как XOR , ∥ как конкатенация, (с является сообщением)
Усекать быть функцией, которая выбирает 4 байта из результата HMAC определенным образом
Тогда HOTP (K, C) математически определяется
HOTP (K, C) = усечение (HMAC (K, C)) & 0x7FFFFFFF
Я использовал следующий пример реализации для моих тестов, и это работает прекрасно:
Мой вопрос заключается в том, что это возможно для генерации буквенно-цифрового OTP с использованием HOTP вместо числового. Преимущество, очевидно, состоит в том, что сила OTP увеличивается во много раз для заданной длины. Таким образом, 8-значный буквенно-цифровой код гораздо более строгий, чем 8-значный цифровой код.
Спасибо, Аби
Спасибо cornelinux, Полезно знать, что это можно сделать. Не могли бы вы дать мне немного больше указания, как в КАК это можно сделать. Мой SHA1 возвращает значение в 20 байт (от -127 до 127). Как я могу сделать это буквенно-цифровым значением? – user1826116
Сначала вы должны решить, какие символы вы хотите использовать. Таким образом, вы получаете список, возможно, (26 + 26 +10 = 56 возможных символов). Тогда вам, вероятно, следует сопоставить один байт символу ... – cornelinux
ok, поэтому мне нужно отобразить 256 возможных байтовых комбинаций из HMAC на 62 возможных набора символов. Это в основном означает, что 4 байта из моего 256-байтового набора будут соответствовать 1 байту из моего 62-байтового выходного набора. Это можно легко сделать, но как вы думаете, это снижает безопасность/силу HOTP в некотором роде? – user1826116