TOTP — различия между версиями
Andrey (обсуждение | вклад) |
Andrey (обсуждение | вклад) |
||
Строка 10: | Строка 10: | ||
− | ==Время== | + | ===Время=== |
Текущее значение дискретное время (T) получается следующим образом. Определяются два системных параметра: | Текущее значение дискретное время (T) получается следующим образом. Определяются два системных параметра: | ||
Строка 30: | Строка 30: | ||
<center>TOTP = Truncate(HMAC-SHA-512(K, (Current Unix time - T0) / X)) </center> | <center>TOTP = Truncate(HMAC-SHA-512(K, (Current Unix time - T0) / X)) </center> | ||
+ | |||
+ | == Некоторые требования к реализации == | ||
+ | |||
+ | #Сервер и генератор должны знать текущее значение Unix Time | ||
+ | #Сервер и генератор должны знать shared secret — симметричный ключ | ||
+ | #Для каждого генератора должен использоваться уникальный симметричный ключ | ||
+ | #Сервер и генератор должны использовать одинаковый параметр X — временной шаг | ||
+ | #Ключи должны генерироваться случайным образом | ||
+ | #Ключи должны быть надежно защищены от несанкционированного доступа |
Версия 20:23, 3 мая 2012
TOTP: основное
TOTP — OATH-алгоритм генерации одноразовых паролей (OTP, one-time password) на основе времени (time-base). То есть, время является тем параметром, которой отвечает за динамику. Этот алгоритм — развитие OATH HOTP, с концептуальными изменениями: вместо состояния счетчика событий используется текущее дискретное время. Оно (время), как событие в HOTP, вместе с симметричным ключом (уникальным для каждого генератора, и определяющего уникальность самого генератора) используются как аргументы HMAC.
OATH TOTP стандартизован в виде RFC 6238
Чуть-чуть математики
В отличие от алгоритма OATH HOTP, OATH TOTP может быть реализован на базе HMAC-SHA-256 и HMAC-SHA-512, а не только HMAC-SHA-1.
Время
Текущее значение дискретное время (T) получается следующим образом. Определяются два системных параметра:
- X — временной шаг (по умолчанию 30 секунд)
- T0 — начальное время (по умолчанию 0)
Далее все просто:
при этом T округляется в меньшую сторону, то есть если T0=0, X= 30, а текущее Unix Time — 59, то T=1, если же Unix Time — 60, то T=2. Именно это T вместе с симметричным ключом используется как аргумент HMAC. То есть:
Некоторые требования к реализации
- Сервер и генератор должны знать текущее значение Unix Time
- Сервер и генератор должны знать shared secret — симметричный ключ
- Для каждого генератора должен использоваться уникальный симметричный ключ
- Сервер и генератор должны использовать одинаковый параметр X — временной шаг
- Ключи должны генерироваться случайным образом
- Ключи должны быть надежно защищены от несанкционированного доступа