Нашел ответ на этот вопрос с другого форума.
Эти типы криптографических примитивов можно отличить по целям безопасности, которые они выполняют (в простом протоколе «добавления к сообщению»):
Целостность: Может ли получатель быть уверен, что сообщение не было случайно изменено?
Аутентификация: Может ли получатель быть уверен, что сообщение отправлено отправителем?
Безотказность: Если получатель передает сообщение и подтверждение третьей стороне, может ли третья сторона быть уверенной в том, что сообщение отправлено отправителем? (Обратите внимание, что я говорю о непризнании в криптографическом смысле, а не в юридическом смысле.) Также важен этот вопрос:
Ключи: Требуется ли примитиву общий секретный ключ или пары открытых и закрытых ключей? Я думаю, что короткий ответ лучше всего объяснить с помощью таблицы:
Cryptographic primitive | Hash | MAC | Digital
Security Goal | | | signature
------------------------+------+-----------+-------------
Integrity | Yes | Yes | Yes
Authentication | No | Yes | Yes
Non-repudiation | No | No | Yes
------------------------+------+-----------+-------------
Kind of keys | none | symmetric | asymmetric
| | keys | keys
Пожалуйста, помните, что аутентификация без доверия к используемым ключам бесполезна. Для цифровых подписей получатель должен быть уверен, что ключ проверки действительно принадлежит отправителю. Для MAC получатель должен быть уверен, что общий симметричный ключ был предоставлен только отправителю.
Нажмите здесь для получения дополнительной информации