TOTP — различия между версиями

Материал из Power Security Support Wiki
Перейти к: навигация, поиск
(Новая страница: «==TOTP: основное== TOTP — [OATH]-алгоритм генерации одноразовых паролей (OTP, one-time password) на основе …»)
 
 
(не показано 17 промежуточных версий этого же участника)
Строка 1: Строка 1:
 
==TOTP: основное==
 
==TOTP: основное==
  
TOTP — [OATH]-алгоритм генерации одноразовых паролей (OTP, one-time password) на основе времени (time-base). То есть, время является тем параметром, которой отвечает за динамику. Этот  алгоритм  — развитие [OATH] [HOTP], с концептуальными изменениями: вместо состояния счетчика событий используется текущее дискретное время. Оно (время),  как  событие в [HOTP], вместе с симметричным ключом (уникальным для каждого генератора, и определяющего  уникальность самого генератора) используются как аргументы HMAC.
+
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.
+
В отличие от алгоритма [[OATH]] [[HOTP]], [[OATH]] TOTP может быть реализован  на базе HMAC-SHA-256 и HMAC-SHA-512, а не только HMAC-SHA-1.
 +
 
 +
 
 +
===Время===
 +
 
 +
Текущее значение дискретное время (T) получается следующим образом. Определяются два системных параметра:
 +
 
 +
 
 +
*X — временной шаг (по умолчанию 30 секунд)
 +
 
 +
*T0 — начальное время (по умолчанию 0)
 +
 
 +
 
 +
Далее все просто:
 +
 
 +
 
 +
<center>T = (Current Unix time - T0) / X, </center>
 +
 
 +
 
 +
при этом T округляется в меньшую сторону, то есть если T0=0, X= 30, а текущее Unix Time — 59, то T=1, если же Unix Time  — 60, то T=2. Именно это T вместе с симметричным ключом используется как аргумент HMAC. То есть:
 +
 
 +
 
 +
<center>'''TOTP = Truncate(HMAC-SHA-512(K, (Current Unix time - T0) / X))''' </center>
 +
 
 +
 
 +
== Некоторые требования к реализации ==
 +
 
 +
#Сервер и генератор должны знать текущее значение Unix Time
 +
#Сервер и генератор должны знать shared secret — симметричный ключ
 +
#Для каждого генератора должен использоваться уникальный симметричный ключ
 +
#Сервер и генератор должны использовать одинаковый параметр X — временной шаг
 +
#Ключи должны генерироваться случайным образом
 +
#Ключи должны быть надежно защищены от несанкционированного доступа

Текущая версия на 15:37, 15 июня 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 = (Current Unix time - T0) / X,


при этом T округляется в меньшую сторону, то есть если T0=0, X= 30, а текущее Unix Time — 59, то T=1, если же Unix Time — 60, то T=2. Именно это T вместе с симметричным ключом используется как аргумент HMAC. То есть:


TOTP = Truncate(HMAC-SHA-512(K, (Current Unix time - T0) / X))


Некоторые требования к реализации

  1. Сервер и генератор должны знать текущее значение Unix Time
  2. Сервер и генератор должны знать shared secret — симметричный ключ
  3. Для каждого генератора должен использоваться уникальный симметричный ключ
  4. Сервер и генератор должны использовать одинаковый параметр X — временной шаг
  5. Ключи должны генерироваться случайным образом
  6. Ключи должны быть надежно защищены от несанкционированного доступа