Пример hash length extension атаки на mac-sha256.
Для проведения атаки необходимо :
Для проведения атаки необходимо :
- Знание длины ключа.
- Имеющийся mac-sha256 от известного значения.
Используя перечисленные выше знания можно сформировать валидный mac-sha256 без знания ключа.
Пример проверяющей-функции
Предположим, что уже имеем валидный mac
Теперь необходимо подготовить входные данные для проверяющей системы, тут понадобится знание длины ключа.
Используя приведенный выше код, получаем значение 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
186ac0f8370146bf6b999a5dfa369e3675ce58f70e3726759f9c535442c888ab
Отдаем проверяющей системе на вход полученную последовательность с дополнением и рассчитанный MAC
[+] Ok, correct digest
Комментариев нет:
Отправить комментарий