В некоторых контекстах (HKDF (RFC-5869 sec 2.2) и BIP32 Биткойн (генерация главного ключа)) я видел, как ключ и данные обменивались для HMAC. Например, пусть HMAC будет функцией $h:\{0,1\}^c \times \{0,1\}^b \to \{0,1\}^c$ (обычное обозначение), определенное для ключа $к$ и данные $м$ как $ч(к, м)$. Ну, некоторые люди позволяют $к$ быть фиксированным общедоступным значением (например, Семя биткойнов
) и кодировать секретные байты в $м$.
Я понимаю Почему они хотели бы сделать это, например, входной материал (который может быть секретным ключом) может иметь любую заданную длину $с$. Я предполагаю, что они не ожидают целостности, они хотят только случайности.
Я ожидаю, что безопасность (или, по крайней мере, целостность) будет зависеть от секретности $к$ и свойства базовой хэш-функции. Действительно, используя результаты «Новых доказательств для NMAC и HMAC» Беллара 1, у нас есть PRF, как только функция сжатия хеш-функции является PRF, и если разработчики поступили правильно, это на самом деле не зависят от секретности $к$.
Но мне кажется, что доказательство предполагает равномерно случайный, секретный ключ. Сохраняется ли доказательство PRF, если мы раскрываем $к$ к нападающему?
(Примечание: это было бы очевидно, если бы $к$ и $м$ играли симметричные роли в построении HMAC - это тоже не так.)