ГОСТ 28147-89 предусматривает выработку имитовставки в соответствующем режиме. Длина имитовставки от 1 до 32 бит. Её выработка происходит по следующей схеме: Открытый текст TO разбивается на блоки длиной 64 бита. Последний блок в случае необходимости дополняется нулями.
TO = TO(1), TO(2), …, TO(n)Первый блок TO(1) шифруется в режиме простой замены ГОСТ 28147-89 тем же ключом, что и сообщение, но с применением 16 циклов вместо 32. Результат по битам по модулю 2 складывается с вторым блоком TO(2) и так же шифруется. Результат складывается с третьим блоком... и так далее.
I=E'k(TO(N) Å E'k(TO(N-1) Å E'k(…E'k(TO(2) Å E'k(TO(1))) …))Первые 32 бита получившегося блока составляют имитовставку. Спецификация шифра предусматривает использование в качестве имитовставки и меньшее количество бит по желанию, но не большее.
Имитовставка обычно передаётся в конце сообщения и может вычисляться либо отдельно от шифрования/расшифрования, либо в его процессе.
МАС на основе хэш-функции
Другим способом обеспечения целостности является использование хэш-функции. Хэш-код присоединяется к сообщению в тот момент, когда известно, что сообщение корректно. Получатель проверяет целостность сообщения вычислением хэш-кода полученного сообщения и сравнением его с полученным хэш-кодом, который должен быть передан безопасным способом. Одним из таких безопасных способов может быть шифрование хэш-кода закрытым ключом отправителя, т.е. создание подписи. Возможно также шифрование полученного хэш-кода алгоритмом симметричного шифрования, если отправитель и получатель имеют общий ключ симметричного шифрования.
НМАС
Еще один вариант использования хэш-функции для получения МАС состоит в том, чтобы определенным образом добавить секретное значение к сообщению, которое подается на вход хэш-функции. Такой алгоритм носит название НМАС, и он описан в RFC 2104.
|
При разработке алгоритма НМАС преследовались следующие цели:
- возможность использовать без модификаций уже имеющиеся хэш-функции;
- возможность легкой замены встроенных хэш-функций на более быстрые или более стойкие;
- сохранение скорости работы алгоритма, близкой к скорости работы соответствующей хэш-функции;
- возможность применения ключей и простота работы с ними
- Простота криптоанализа стойкости механизма аутентификаци при разумных предположениях относительно встроенной хэш-функции.
В алгоритме НМАС хэш-функция представляет собой "черный ящик". Это, во-первых, позволяет использовать существующие реализации хэш-функций, а во-вторых, обеспечивает легкую замену существующей хэш-функции на новую.
Введем следующие обозначения:
Н - встроенная хэш-функция, например MD5, SHA-1 или RIPEMD-160. |
M – подаваемое на вход HMAC сообщение (включая биты заполнителя, требуемые встроенной функцией хеширования). |
Yi – i-й блок M, 0 £ i £ L-1. |
L – число блоков в M. |
b - длина блока используемой хэш-функции. |
n - длина хэш-кода. |
K - секретный ключ. Если длина ключа больше b, ключ подается на вход хэш-функции, чтобы получить n-битовый ключ. Рекомендуется длина ключа ³ n. |
K+ - ключ K с добавленными в начало нулями, чтобы в результате длина получилась равной b битам. |
Вводится два вспомогательных значения:
Ipad - значение '00110110', повторенное b/8 раз. |
Opad - значение '01011010', повторенное b/8 раз. |
В этом случае алгоритм НМАС можно представить формулой
|
Подробно описать алгоритм можно следующим образом:
1. К значению K слева добавляются нули, чтобы получить b-битовую строку K+ (например, если K имеет длину 160 битов и b = 512, то значение K будет дополнено 44 нулевыми байтами 0x00).
2. Значение K+ связывается операцией XOR с ipad, в результате чего получается b-битовый блок Si.
3. К Si присоединяется M.
4. К потоку, полученному на шаге 3, применяется функция H.
5. Значение K+ связывается операцией XOR с opad, в результате чего получается b-битовый блок S0.
6. Результат хеширования, полученный на шаге 4, присоединяется к S0.
7. К потоку, полученному на шаге 6, применяется функция H, и результат подается на выход.