Понадобилось немножко просветиться касательно MAC/HMAC/CMAC (при том, что познаний в криптографии практически нет - ну, так, на уровне размахивания руками и примерного понимания простых терминов...)
Статья в вики показалась довольно невнятной. Самое для дураков, на что набрёл - это
https://www.cardinalpeak.com/blog/the-difference-between-hmac-and-mac.
Но даже там мне явно не хватает какого-то базового понимания постановки задачи.
Итак, есть Алиса, Боб и симметричный шифр с ключом, которым владеют обе стороны.
Алиса шлёт Бобу шифр-текст. Боб расшифровывает. Зачем ему нужна проверка целостности и аутентичности сообщения? Я исхожу из того, что "человек посередине" пароля не знает ни в коем случае. Соответственно, злоумышленнику недоступны никакие манипуляции с исходным текстом, но он может, например, уполовинить шифр-текст. Тогда Боб получит осмысленную расшифровку, но сообщение будет неполным. Или, если критерий осмысленности исходного текста неочевиден, злоумышленник может вообще заменить шифр-текст на произвольный.
Но если Алиса пошлёт, кроме шифр-текста, ещё и шифрованный хэш исходного текста, а Боб расшифрует, захэширует и получит совпадение хэшей, то целостность и аутентичность гарантированы с точностью до коллизий хэша.
Здесь уже начинаются для меня непонятки. Задача создания преднамеренной коллизии SHA-256 даже для открытого текста на сей день не решена и вряд ли будет решена скоро. Удачная подмена "вслепую" - когда зашифрован и текст, и его хэш - мне кажется абсолютно невероятной. Соответственно, я не понимаю, чего не хватает Алисе и Бобу в вышеописанной простейшей схеме защиты?