Технически, термин «подпись» зарезервирован для сигнатур, а хэш-функции их не вычисляют.
Чтобы гарантировать, что данные не были изменены при передаче с помощью хеш-функции, тогда у вас должен быть безопасный внеполосный способ передачи хеш-значения; добавление значения хеша в заголовки HTTP не поможет, потому что любой, кто может изменить передаваемые данные, может пересчитать хеш по своему усмотрению и изменить заголовки HTTP, как он считает нужным.
С помощью криптографии вы можете «сконцентрировать» эту защищенную внеполосную передачу в ключе многократного использования. Если клиент и сервер имеют общее секретное значение, неизвестное предполагаемому злоумышленнику, тогда аббревиатурой является MAC, как в «Коде аутентификации сообщения»; обычный MAC это HMAC .
Во многих практических ситуациях MAC нельзя использовать, потому что MAC требует общего секрета, а секрет, который делился слишком много раз, больше не является секретом. Каждый секретный владелец имеет право пересчитать MAC. Если каждый клиент знает секрет, то в основном это не секрет, и можно предположить, что злоумышленник также знает его. Следовательно, вы можете пойти еще дальше и использовать цифровые подписи (реальные, которые используют RSA, DSS, ECDSA ...), в которых сервер использует закрытый ключ (который знает только сервер), а клиенты знают только соответствующий открытый ключ . Знание открытого ключа достаточно для проверки подписей, но не для создания новых, и закрытый ключ не может быть пересчитан из открытого ключа (хотя они математически связаны друг с другом). Однако внедрение цифровой подписи и ее правильное использование намного сложнее, чем обычно предполагается; тогда лучше всего использовать уже отлаженный протокол с существующими реализациями, и этот протокол называется «SSL».
Суть в том, что без SSL есть вероятность, что все, что вы делаете, не остановит решительного злоумышленника; он будет просто использовать циклы процессора и пропускную способность сети и даст вам теплое нечеткое ощущение.