Подлинность и целостность HTTP-запросов
У меня есть конечная точка API, где внешние веб-сайты могут отправлять запрос POST. Каков наилучший способ убедиться, что запросы являются подлинными, а также не подделаны, поэтому они уважают принцип целостности?
Поскольку данные не являются ценными, например, информация о кредитной карте, мне не требуется интеграция HTTPS.
Я посмотрел как на HMAC, так и на цифровые подписи, и я считаю, что второй вариант был бы лучше, но я не уверен, стоит ли идти этим путем?
Точно так же было бы достаточно хеширования запроса и проверки его на моем сервере?
1 ответ
И HMAC, и Цифровая подпись обеспечивают целостность и аутентификацию:
- целостность - потому что они оба основаны на хэше. HMAC - это код аутентификации сообщений на основе хеша. Цифровая подпись - это зашифрованный хэш некоторого сообщения.
- аутентификация - потому что HMAC использует симметричный секретный ключ, а цифровая подпись использует ассиметричный закрытый ключ. Секретные / закрытые ключи могут использоваться только с человеком, который знает это = аутентификация. Проверка секретных / закрытых ключей на стороне получателя в HMAC - получатель также знает секрет, поэтому мы называем его симметричным. Проверка секретных / закрытых ключей на стороне получателя в цифровой подписи - получатель также получает открытый сертификат, который можно проверить на доверенной третьей стороне.
Основное отличие - сообщение HMAC не может быть проверено / проверено третьей стороной, только лицо, владеющее секретом, может проверить / подтвердить подлинность сообщения. Сообщение с цифровой подписью имеет открытый сертификат, и любой человек может проверить владельца сообщения, расшифровав сообщение с прикрепленным открытым ключом, вычисляя хеш и проверив открытый ключ на специальной доверенной стороне.
Вывод - используйте HMAC, если вам не нужно, чтобы кто-либо мог проверить, действительно ли какое-то сообщение принадлежит отправителю.
Точно так же было бы достаточно хеширования запроса и проверки его на моем сервере?
Нет. Человек в середине может изменить ваше сообщение и прикрепить хэш измененного сообщения. Хеширование обеспечивает целостность, что означает, что модификация сообщения также изменит хеш, но хакер не беспокоится о равенстве хеш-функций, потому что он просто полностью заменяет сообщение содержимым и хэшем! Некоторое секретное использование, как в HMAC, предотвращает такие замены сообщений: человек-посредник все еще может изменить сообщение, но он не может пересчитать хэш, потому что он не знает секрета.