Что, если вместо хеш-функции H мы будем использовать CMAC с ключом K, а затем подпишем результат CMAC(M, K) закрытым ключом? Является ли такая операция криптографически безопасной?
Если $К$ используется для конкретной подписи, является общедоступной (что должно быть для проверки подписи кем-то, у кого есть открытый ключ и подпись, и ничего секретного), тогда легко найти второе сообщение $М'$ такой, что $\text{CMAC}(M, K) = \text{CMAC}(M', K)$; то есть подпись также будет проверяться этим вторым сообщением $М'$.
На самом деле, у злоумышленника будет большая свобода выбора. $М'$; он может указать всю $М'$ сообщение, за исключением 16-байтового выровненного блока в любом месте этого сообщения - тогда он может эффективно вычислить, каким должно быть это 16-байтовое значение; что дает ему всю $М'$.
С другой стороны, если $К$ является секретным, вышеизложенное не применяется. Конечно, возникает очевидный вопрос: если подписывающая сторона и проверяющая действительно имеют общий секрет (и вы можете быть уверены, что верифицирующая сторона не попытается сгенерировать подделку), почему бы вам просто не использовать CMAC и не беспокоиться об операции подписи? ?