воскресенье, 25 октября 2015 г.

Hash Length Extension

Пример hash length extension атаки на mac-sha256.

Для проведения атаки необходимо :
  • Знание длины ключа.
  • Имеющийся mac-sha256 от известного значения.
Используя перечисленные выше знания можно сформировать валидный mac-sha256 без знания ключа.
Пример проверяющей-функции

Предположим, что уже имеем валидный mac
data - "data"
mac  - aa93be97ad171b84b38e931c980ceb70e0e0bb76c212ea9205356c9c3781e84e
Далее необходимо инициализировать внутреннее состояние функции sha256 используя имеющийся mac (подробнее об этом тут) и рассчитать mac для выбранного дополнения (в данном случае роль дополнения играет строка "flag")

Теперь необходимо подготовить входные данные для проверяющей системы, тут понадобится знание длины ключа.
Размер блока - 512 бит
Блок формируется так : данные + padding + длина данных
sizeof(Длина данных) = 8

Для sha функций endianness поля "Длина данных" = big-endian
Длина данных = длина секрета + длина полезной нагрузки
Длина секрета - 11 (это требуется знать заранее либо подобрать)
Длина полезной нагрузки - 4
Суммарная длина - 15 байт - 120 бит (именно количество бит идет в блок)

Получаем следующую последовательность данных - 
"data\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00xflag"

"data" - значение для которого был получен оригинальный MAC

"\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00x" - padding и size, здесь size выглядит как "\x00\x00\x00\x00\x00\x00\x00x",
где восьмой элемент - 'x' = 0x78 - количество бит

len(padding + size) = 64 - (len(secret) + len(data))

flag - значение, для которого хотим получить валидный MAC
Используя приведенный выше код, получаем значение MAC
186ac0f8370146bf6b999a5dfa369e3675ce58f70e3726759f9c535442c888ab
Отдаем проверяющей системе на вход полученную последовательность с дополнением и рассчитанный MAC
[+] Ok, correct digest

Комментариев нет:

Отправить комментарий