Почему шифрование необходимо для обеспечения безопасности после хеширования в алгоритме UMAC (универсальный код аутентификации сообщений)?
В Википедии для UMAC, https://en.wikipedia.org/wiki/UMAC, говорится:
Полученный дайджест или отпечаток затем шифруется, чтобы скрыть идентичность используемой хэш-функции.
Кроме того, в этом документе, http://web.cs.ucdavis.edu/~rogaway/papers/umac-full.pdf, говорится:
Сообщение аутентифицируется, хешируя его с помощью общей хеш-функции, а затем шифруя полученный хеш (используя ключ шифрования).
Мой вопрос, если набор хэш-функций H
достаточно велико, а количество хеш-блоков |B|
достаточно большой, зачем нам шифровать - секретный хеш не достаточно безопасный?
Например, возьмем сценарий наихудшего случая, когда каждый клиент отправляет одинаковое короткое содержимое, например "x". Если мы хэшируем до 32 байтов, и наш хеш зависит от секретного 32-байтового хеш-ключа и хэши имеют одинаковые свойства, как злоумышленник может надеяться узнать секретный хеш-ключ любого отдельного клиента, даже без шифрования?
И, если злоумышленник не узнает ключ, как злоумышленник может надеяться злонамеренно изменить содержимое сообщения?
Спасибо!
1 ответ
Я не особо разбираюсь в UMAC, но:
- Наличие радужной таблицы для определенной хэш-функции разрушает любое шифрование, которое вы наложили на сообщение, поэтому вместо единой поверхности атаки у вас теперь есть два
- По мере того, как вычислительные мощности увеличиваются со временем, у вас будет все больше шансов выяснить открытый текст сообщения, поэтому PFS ( https://en.wikipedia.org/wiki/Forward_secrecy) никогда не будет возможна, если вы оставите MAC в незашифрованном виде.
- Вдобавок ко всему, если вы можете определить одно текстовое сообщение из значения MAC, вы экспоненциально приблизитесь к расшифровке остальной части сообщения, получив некоторую информацию о PRNG, контексте других данных, IV и т. Д.