Time-based One-time Password algorithm

Матеріал з testwiki
Версія від 14:10, 11 квітня 2024, створена imported>BlzzUa (це не протокол, а алгоритм.)
(різн.) ← Попередня версія | Поточна версія (різн.) | Новіша версія → (різн.)
Перейти до навігації Перейти до пошуку

TOTP (Time-based One-Time Password Algorithm, RFC 6238Шаблон:Sfn) — OATH-алгоритм створення одноразових паролів для захищеної аутентифікації, є поліпшенням HOTP (HMAC-Based One-Time Password Algorithm). Є алгоритмом односторонньої аутентифікації — сервер засвідчується в справжності клієнта. Головна відмінність TOTP від HOTP це генерація пароля на основі часу, тобто час є параметромШаблон:Sfn. При цьому зазвичай використовується не точне зазначення часу, а поточний інтервал з встановленими заздалегідь межами (наприклад, 30 секунд).

Історія

З 2004 року OATH (The Initiative for open authentication) працювала над проектом одноразових паролів (OTP). Першим результатом був HOTP (the Hash-based Message Authentication Code (HMAC) OTP algorithm), опублікований у грудні 2005 року. Він був представлений як проект IETF (The Internet Engineering Task Force)Шаблон:SfnШаблон:Sfn.

Подальша робота OATH йшла над покращенням HOTP. У 2008 році був представлений TOTPШаблон:Sfn. Цей алгоритм не використовує лічильник для синхронізації клієнта та сервера, а генерує пароль на основі моменту часу, який дійсний протягом деякого інтервалу. Алгоритм діє так: клієнт бере поточне значення таймера та секретний ключ, хешує їх за допомогою довільної хеш-функції та відправляє серверу, а сервер у свою чергу проводить ті ж обчислення, після чого йому залишається тільки порівняти ці значенняШаблон:Sfn. Алгоритм може бути реалізований не лише за допомогою хеш-функції SHA-1, на відміну від HOTP, тому хеш-функція також є вхідним параметромШаблон:Sfn.

Пізніше у вересні 2010 року був представлений новий алгоритм, який додатково розширює TOTP та отримав назву OATH Challenge-Response Algorithms (OCRA). Головна відмінність від попередніх алгоритмів полягає в тому, що у перевірці достовірності бере участь також і сервер. Так що клієнт може бути впевнений у його достовірностіШаблон:Sfn.

Принцип роботи

По суті, TOTP є варіантом HOTP алгоритму, в якому в якості значення лічильника підставляється величина, що залежить від часуШаблон:Sfn. Позначимо:

  • T — дискретне значення часу, що використовується в якості параметра. (Вимірюється в одиницях X, 4 байти)
  • X — інтервал часу, протягом якого дійсний пароль. (За замовчуванням 30 сек.)
  • T0 — початковий час, необхідний для синхронізації сторін. (За замовчуванням — час від початку UNIX ери)
  • K — спільний секрет.
  • CurrentTime — поточний час.

ТодіШаблон:SfnШаблон:Sfn

T=(CurrentTimeT0)/X
HOTP(K,T)=Truncate(HMAC-SHA-1(K,T))
TOTP=HOTP(K,T)

де

позначимо String — результат HMAC-SHA-1(K,T); OffsetBits — молодші 4 біта рядка String; Offset = StringToNumber(OffsetBits) і результатом Truncate буде рядок з чотирьох символів — String[Offset]...String[Offset + 3]Шаблон:Sfn

Також варто відзначити, що на відміну від HOTP, який заснований тільки на SHA-1, TOTP може також використовувати HMAC-SHA-256, HMAC-SHA-512 та інші HMAC-хеш-функції:

  • TOTP(K,T)=Truncate(HMAC-SHA-256(K,T))
  • TOTP(K,T)=Truncate(HMAC-SHA-512(K,T))

і т. д.Шаблон:Sfn

Надійність алгоритму

Концепція одноразових паролів разом з сучасними криптографічними методами може використовуватися для реалізації надійних систем віддаленої аутентифікаціїШаблон:Sfn. TOTP досить стійкий до криптографічних атак, проте ймовірність злому є, наприклад можливий такий варіант атаки «людина посередині»:

Прослуховуючи трафік клієнта, зловмисник може перехопити посланий логін і одноразовий пароль (або хеш від нього). Потім йому досить блокувати комп'ютер «жертви» і відправити аутентифікаційні дані від власного імені. Якщо він встигне це зробити за проміжок часу X, то йому вдасться отримати доступ. Саме тому X варто робити невеликим. Але якщо час дії пароля зробити дуже маленьким, то у разі невеликої розсинхронізації клієнт не зможе отримати доступШаблон:Sfn.

Також існує вразливість пов'язана з синхронізацією таймерів сервера і клієнта, так як існує ризик розсинхронізації інформації про час на сервері і в програмному та/або апаратному забезпеченні користувача. Оскільки TOTP використовує в якості параметра, то при не збігу значень всі спроби користувача на аутентифікацію завершаться невдачею. У цьому випадку помилковий допуск чужого також буде неможливий. Варто відзначити, що ймовірність такої ситуації вкрай малаШаблон:Sfn.

Дивись також

Примітки

Шаблон:Примечания

Джерела

Посилання