Разница между шифрованием и хэшированием

в нашем проекте есть несколько мест, где мы могли бы сошло с майнинга. Например, мы храним зашифрованную ссылку между лицензией и лицензированным объектом в базе данных вместе с незашифрованной ссылкой. Это необходимо для того, чтобы пользователь не мог изменить лицензированный объект, используя базу данных.

основная причина, по которой мы используем шифрование везде, заключается в том, что у нас уже была хорошая библиотека шифрования и системный ключ. Это действительно не кажется стоит время, чтобы разработать библиотеку хэширования в дополнение.

есть ли какой-либо риск безопасности, который мы создаем, используя шифрование вместо хэширования?

6 ответов


сохраняя простой текст вместе с зашифрованным текстом, вы создаете хороший репозиторий тестовых строк, если кто-то захочет узнать ваш ключ. Поскольку вы, по-видимому, используете указанный ключ для шифрования все Я бы сказал, что это is риск.

помните, что хорошая вещь о центральных базах данных заключается в том, что когда-нибудь кто-то получит данные. Если история-это хоть какой-то урок.


Если вы используете симметричный шифр, и система развернута во "враждебной" среде, то это вопрос времени, прежде чем мотивированный человек сможет изолировать ключ и подписать свои собственные (или другие) лицензионные данные.

в этих случаях вам нужен ассиметрический шифр, чтобы "подписать" лицензию своим закрытым ключом, который хранится безопасно на компьютере в хранилище и не связан с внешним миром. Ладно, небольшое раздражение, но в безопасной обстановке.

простой хэш не поможет в этом случае, потому что они могут быть использованы для подписи поддельных лицензий. Если вы хотите быть уверены, что только вы можете одобрить изменения лицензии, то использование ассиметрического шифра для шифрования лицензии (или хэша лицензии) является наиболее простым способом.


Ну, шифрование-это двусторонний процесс. Предполагая, что вы используете шифрование на основе ключа, вы в безопасности, пока ключ шифрования безопасен, и вы используете современный алгоритм (скажем, AES). Хэширование, напротив, является односторонним процессом, что практически невозможно восстановить хэш-вход из хэшированного значения. Таким образом, не имея ключа, хэширование можно считать более безопасным. Он также может быть менее вычислительно голоден.


любые данные, которые могут быть зашифрованы и могут быть расшифрованы.

хеширование-это односторонний процесс, especically если вы используете новый алгоритм SHA2 методов.


из того, что я понимаю, вы хотите достичь целостности своих данных (т. е. вы хотите добиться того, что никто не может изменить ваши данные незаметно). Это может быть достигнуто с помощью цифровой подписи (например, RSA, DSA) или MAC (код аутентификации сообщения). Mac является симметричным эквивалентом цифровой подписи, которая обычно является асимметричной схемой.

поэтому в вашем случае MAC (например, HMAC) должен быть хорошим выбором!


вы ввели секретность ключа как слабое место, я бы сказал, что это риск, хотя оценка серьезности потребует больше деталей.

хеширование, с другой стороны, будет зависеть исключительно от сложности поиска столкновений, что, вероятно, является более безопасным сценарием, чем сохранение этого ключа в секрете.