Хеширование vs Шифрование: в чем разница и когда что использовать(основы)
Безопасность данных – это база современной разработки. Но новички часто путают два главных понятия: хеширование и шифрование. Несмотря на то что оба метода превращают читаемые данные для нежелательных лиц в нечитаемый набор символов, но оба метода решают абсолютно разные задачи.
В это статье я разберу механику работы каждого процесса, будет понятно почему хеширование нельзя «расшифровать», и какую технологию выбрать для защиты данных от нежелательных лиц.
Что за технологии и где используются
Хеширование – это процесс преобразования любого объёма данных в уникальную строку фиксированной длины. Главная особенность хеширования – его необратимость. Вы или иное лицо не можете восстановить исходный текст из хеша. Оно используется везде, где нужно проверить подлинность данных, не зная самих данных: от хранения паролей в базах данных до антивирусов и проверки целостности файлов.
Шифрование – это способ кодирования информации с целью ее скрыть от посторонних, но сохранить возможность восстановления(дешифрования) для определенных лиц. Здесь всегда используется «ключ». Шифрование очень важно для передачи данных по сети(пример: HTTPS), защиты данных пользователя в мессенджерах и хранения конфиденциальных документов.
Как работает хеширование
Принцип работы хеш-функции можно сравнить с работой шредера: вы можете превратить бумагу и всё что на ней написано в измельчённую бумагу, но собрать бумагу в единое целое почти невозможно.
Основные свойства
- Детерминированность: всегда один и тот же вход даёт на выходе тот же результат.
Фиксированная длина: неважно, хешируете вы одно слово или целое произведение результат будет одинаковой длины.
Лавинный эффект: даже малейшее изменение данных меняет хеш.
Стойкость к коллизиям: минимальная вероятность, что два разных выхода дадут одинаковый хеш.
Пример кода на Python
Пример кода для перевода символов и превращение в хеш для дальнейшего хранения в БД
Где применять
Хранения паролей: В БД лежат хеши. В момент входа пароль сравнивается с тем что в базе и пускает в аккаунт.
Контрольные суммы: Проверка, не сломался ли файл при загрузке.
Блокчейн: Связывание блоков через их хеши.
Как работает шифрование
Шифрование – это двухсторонняя система. Главная задача – обеспечить конфиденциальность данных при передаче между пользователями.
Делится на два базовых типа:
Симметричное – один и тот же ключ используются для шифрования, и для расшифровки. Плюс это скорость, а минус это ненадежность ведь надо передать ключ другой стороне, но его могут перехватить нежелательные лица.
Асимметричное – используется два ключа, один ключ публичный(для шифрования) и приватный(для расшифровки). Плюсы: безопасность, не нужно передавать ключ по каналу, но минус в уменьшенной скорости работы, и сложность реализации.
Примеры на Python
Симметричное шифрование
Асимметричное шифрование(метод RSA)
Можно использовать
Мессенджерах
Защита дисков
Главные различия: Сводная таблица
Частые ошибки
Никогда не шифруйте пароли
Если злоумышленник украдет ключ шифрования, то он получит все пароли в чистом виде. Только хеш и только ХЕШИРОВАНИЕ !
Используйте Salt
Для хеширование паролей обычно просто алгоритма хеширования мало, так как есть базы предрассчитанных хешей. Чтобы защититься лучше, к паролю надо добавлять «Соль», обычная доп. строка со случайными символами.
- Следите за новостями
Бывает что алгоритмы хеширования взламывают, и хеширование пароли могут быть рассекречены.
Заключение
Хеширование – это идеальный инструмент для проверки. Оно говорит нам: «Эти данные те самые, которые мы ожидали», при этом не раскрывая самих данных. Оно незаменимо в аутентификации и контроле целостности.
Шифрование – это инструмент для скрытия. Оно позволяет безопасно передавать секреты через открытый интернет, гарантируя, что прочитать их сможет только владелец ключа.
Понимание этой разницы помогает строить безопасные архитектуры. Если вам надо проверить, что файл не изменился – то хеш. Если нужно отправить номер кредитки – то шифрование.
Неважно, насколько плохую защиту вы сделаете, — важно то, что она есть.