OCRA

Материал из Power Security Support Wiki
Перейти к: навигация, поиск

Основное

OCRA (OATH Challenge-Response Algorithm, стандартизован как RFC 6287) это развитие алгоритма HOTP. В общих чертах – это алгоритм генерации одноразового значения на основании случайного значения (запроса), то есть вместо счетчика событий на вход подается случайное значение, полученное с сервера. В дополнение аутентификации клиента здесь добавлены такие возможности как взаимная аутентификация, подпись транзакций

Требования, предъявляемые к реализации

  1. Алгоритм должен поддерживать аутентификацию на основе запрос-ответ (что собственно и является основной целью данного алгоритма)
  2. Алгоритм должен поддерживать подпись данных на основе симметричного ключа
  3. Алгоритм должен поддерживать аутентификацию сервера, для возможности подтвердить, что клиент взаимодействует с доверенным сервером
  4. Длина и формат запроса должны быть настраиваемыми
  5. Длина и формат ответа должны быть настраиваемыми
  6. Запрос может генерироваться с проверкой целостности, с вставкой контрольного бита. Это позволит убедиться в том, что запрос введен верно
  7. Каждый токен (генератор) программный или аппаратный должен иметь уникальный секрет (ключ), значение которого генерируется случайным образом или рассчитывается по специальным алгоритма генерации колючей.
  8. Алгоритм может поддерживать дополнительные атрибуты, такие как штамп времени или информация о сессии.

Математика процесса

Если описывать алгоритм, то можно использовать следующее представление:

OCRA = CryptoFunction(K, DataInput)

где,

К — общий секрет

DataInput — структура данных, названная выше случайным значением

CryptoFunction — функция расчета


DataInput

DataInput = {OCRASuite | 00 | C | Q | P | S | T}

где, 00 – разделитель

С – беззнаковый 8-байтный счетчик, синхронизированный между обоими участниками (клиент и сервер). Опциональный параметр

Q – 128-байтный запрос, если он короче, то значение дополняется нулями

P – хэш-функция (поддерживается SHA-1 RFC 3174, SHA-256 и SHA-512) от PIN-кода, который известен обеим сторонам (клиент и сервер)

S – строка, длиной до 512 байт, описывающая параметры сессии

T – 8-байтное значение временных интервалов (секунд, минут, часов, дней – зависит от конкретной реализации), прошедших с 1 января 1 1970 (UT), используется для простановки штампа времени

При расчете значения, состояние счетчика (С) на стороне клиента всегда увеличивается на 1, а на стороне сервера только в случае успешного прохождения аутентификации (подтверждения транзакции)

CryptoFunction

По умолчанию, в качестве функции используется HOTP-SHA1-6, то есть алгоритм HOTP на базе SHA1 c длиной значения 6 цифр. Рассматривается семейство HOTP-функций, как расширение HOTP:

  1. HOTP-H-t , где варьируются H – алгоритм хэш-функции, t – длина значения, то есть обрезки
  2. HOTP-H-t, если t=0, то обрезка не выполняется и в качестве значения используется полное значение хэш-функции.

Рекомендуемые варианты:

  1. HOTP-SHA1-4
  2. HOTP-SHA1-6
  3. HOTP-SHA1-8
  4. HOTP-SHA256-6
  5. HOTP-SHA512-6

OCRASuite

Это текстовая строка, представленная в виде: <Algorithm>:<CryptoFunction>:<DataInput>