Интернет магазин китайских планшетных компьютеров



Компьютеры - HMAC - HMAC параметры и обозначения

16 июня 2011


Оглавление:
1. HMAC
2. Описание
3. Принцип работы
4. HMAC параметры и обозначения
5. Примеры
6. Вопросы использования



HMAC алгоритм использует следующие параметры:

  • b - размер блока.
  • H - хэш-функция.
  • ipad - блок вида :. Повторяется b раз.
  • К - секретный ключ.
  • K0 - это K после предварительной необходимой обработки для получения b-байтового ключа.
  • L - размер блока на выходе хэш-функции.
  • opad - блок вида :. Повторяется b раз.
  • М - передаваемое сообщение. Длина сообщения N бит.

Криптографический ключ

Размер ключа, К, должен быть больше или равен L / 2. Стоит обратить внимание, что ключи с размером больше чем L байт уже не существенно увеличивают криптографическую стойкость функции.

Псевдокод

Следующий псевдокод показывает как HMAC может быть реализован:

FUNCTION hmac:
    IF len > blocksize THEN: // Если ключ БОЛЬШЕ чем размер блока...
        key = hash // Укорачиваем ключ до размера результата хеш-функции
        //    чем размер блока хеш-функции)
    END_IF
    IF len < blocksize THEN: // Если ключ МЕНЬШЕ чем размер блока хеш-функции...
        key = key ∥ zeroes) // Дополняем ключ нулевой последовательностью
    END_IF
    
    ipad = // Где оператор "*" - указывает сколько раз повторять элемент последовательности,
    opad = //    а blocksize - это размер блока хэш-функции, 
    
    ikeypad = ipad ⊕ key // Где оператор "⊕" - осуществляет побитовое ИСКЛЮЧАЮЩЕЕ-ИЛИ
    okeypad = opad ⊕ key
    
    RETURN hash) // Где оператор "∥" - осуществляет операцию конкатенации
END_FUNCTION

Возможные реализации

Представленные ниже языки программирования были выбраны из-за наличия стандартных библиотек поддерживающий данный алгоритм. Пример использования реализации алгоритма на языке Python:

import hmac, hashlib
print hmac.new(
    key='secret_shared_key',
    msg=open.read,
    digestmod=hashlib.md5
).hexdigest

Одна из возможных реализаций алгоритма на языке PHP:

function hmac {
    $bit = 1024; // byte length for md5
    if  > $bit) {
        $key = pack);
    }
    $key = str_pad);
    $ipad = str_pad);
    $opad = str_pad);
    $k_ipad = $key ^ $ipad ;
    $k_opad = $key ^ $opad;
    return md5));
 }


Просмотров: 5037


<<< GSS-API