Я полагаю, что принятый ответ является технически правильным, но неправильным, поскольку он применяется к случаю использования: для создания и передачи несанкционированных изменений данных через общедоступные / ненадежные носители.
Потому что, хотя технически очень трудно взломать или отменить хэш SHA, когда вы отправляете обычный текст "данные и хэш данных + секрет" по Интернету, как отмечалось выше, можно разумно получить секрет после сбора достаточного количества образцов ваших данных. Подумайте об этом - ваши данные могут меняться, но секретный ключ остается прежним. Поэтому каждый раз, когда вы отправляете новый блок данных, это новый образец для запуска основных алгоритмов взлома. Используя 2 или более выборок, которые содержат разные данные и хэш данных + секрет, вы можете проверить, что секрет, который вы определили, является правильным, а не ложным срабатыванием.
Этот сценарий похож на то, как взломщики Wi-Fi могут взломать пароли Wi-Fi после того, как они захватят достаточно пакетов данных. После того, как вы соберете достаточно данных, сгенерировать секретный ключ будет тривиально, даже если вы технически не обращаете SHA1 или даже SHA256. ЕДИНСТВЕННЫЙ способ убедиться, что ваши данные не были подделаны, или проверить, с кем вы разговариваете на другом конце, - это зашифровать весь большой двоичный объект данных с помощью GPG и т. П. (Открытый и закрытый ключи). Хеширование по своей природе ВСЕГДА небезопасно, когда хэшируемые данные видны.
Практически говоря, это действительно зависит от применения и цели того, почему вы хэшируете в первую очередь. Если требуемый уровень безопасности тривиален или вы говорите, что находитесь внутри 100% полностью доверенной сети, то, возможно, хеширование будет приемлемым вариантом. Надеюсь, никто в сети или любой злоумышленник не заинтересован в ваших данных. В противном случае, насколько я могу определить в настоящее время, единственным надежным вариантом является шифрование на основе ключей. Вы можете зашифровать весь блок данных или просто подписать его.
Примечание: это был один из способов, которым британцы смогли взломать код Enigma во время Второй мировой войны, что привело к поддержке союзников.
Есть мысли по этому поводу?