![]() |
Что уже устарело в Криптография, расшифровка хешей — кто сталкивался?
Давайте сразу по делу — криптография и работа с хешами постоянно развиваются. То, что еще пару лет назад казалось железобетонной защитой, сегодня может быть легко взломано или вызывать подозрения у специалистов. В этой теме хочу обсудить, что конкретно устарело в криптографии и расшифровке хешей, а также поделиться своими наблюдениями и послушать, с чем вы сталкивались на практике.
Что такое криптография и хеширование Для начала пару слов о том, с чем имеем дело. Криптография — это наука и практика защиты информации с помощью шифров. Цель — сделать данные нечитаемыми для посторонних. В повседневной практике это может быть шифрование сообщений, паролей, файлов и многое другое. Хеширование — немного другая история. Это процесс преобразования произвольного объема данных в строку фиксированной длины, которую обычно называют хешем. Главный момент — хеш-функция односторонняя, то есть по хешу нельзя вернуть исходный текст. Это классно для хранения паролей, проверки целостности, цифровых подписей и прочего. Но тут важно, какой именно алгоритм стоит использовать и как. Где всё это используется в реальной жизни - Хранение паролей на сайтах и в приложениях. Никому не нужны ваши пароли в открытом виде, потому и используют хеши. - Цифровые подписи, чтобы подтвердить подлинность документов. - Безопасная передача сообщений — например, через TLS (HTTPS). - Контроль целостности файлов и загрузок (сравнивают хеши). - Криптовалюты и блокчейн — хеши и шифры тут в основе. Что именно устарело или перестало использоваться, и почему 1. MD5 и SHA-1. Это классика из ранних 2000-х. В свое время MD5 был мега-популярен для хеширования паролей и проверки целостности, а SHA-1 — чуть круче по размеру хеша. Но — оказалось, MD5 и SHA-1 слишком быстро поддаются коллизиям, то есть разным данным, дающим одинаковые хеш-значения. Это упрощает взлом или подделку. Сейчас большинство специалистов и сервисов либо полностью отказались от них, либо используют только для нестратегических задач. 2. Примитивные способы хранения паролей. Просто сделать хеш пароля и записать — это уже не защита. Надо использовать соли (случайные данные, добавляемые к паролю перед хешированием), чтобы не получилось, что пароли одинаковые по хешам. Еще лучше — использовать адаптивные алгоритмы вроде bcrypt, Argon2, scrypt с возможностью настройки сложности. 3. Симметричные протоколы с устаревшей длиной ключей. Например, DES с 56-битным ключом уже не воспринимается как безопасный — сегодня необходим минимум 128 бит. AES с 256 битами — более-менее стандарт. 4. Вектор инициализации (IV) и режимы работы шифров. Уже не та мода, когда IV был константным или вообще отсутствовал. Сейчас это важно, чтобы не повторять одни и те же параметры при шифровании разных данных. 5. Протоколы шифрования, уязвимые к атакам типа POODLE, BEAST и другим. Старые версии TLS 1.0 и TLS 1.1 практически не используют, снимают поддержку. TLS 1.2 и 1.3 — новое время. Практические примеры из жизни - Недавно на одном проекте столкнулся с тем, что разработчики пытались проверить пароли с помощью простого MD5. Ну, в общем, спустя пару дней работы и пару статей в сети — рекомендовал перейти на bcrypt и добавить соль. Одно только это изменение значительно улучшило защиту от атак с перебором и радужных таблиц. - Вот еще: видел в open-source проекте, что использовали SHA-1 в цифровой подписи. Странно было, конечно. Промониторил, и реально этот алгоритм уже считается потенциально небезопасным для таких задач. Я предложил перейти на SHA-256 или лучше. - В администрировании сервера тоже встретил ситуацию с TLS 1.0 — старое ПО не обновлялось, а по факту посетители заходили через небезопасное соединение. Решили просто выключить поддержку устаревших версий протокола — без особых проблем. Чек-лист: что проверить и обновить в системах - Выбраны ли безопасные алгоритмы хеширования для паролей? (bcrypt, Argon2, scrypt) - Используются ли соли при хешировании? - Не применяется ли MD5 или SHA-1 для критичных функций? - Актуальны ли версии TLS и шифры на сервере? (От TLS 1.2 и выше) - Длина ключей в шифровании — минимально 128 бит, лучше 256. - Режимы шифрования — правильно настроенные с рандомным IV. - Насколько адаптивен механизм защиты паролей — возможно ли добавить "торможение" при попытках перебора? - Проверяются ли генераторы случайных чисел для криптографических задач? Типичные ошибки, которые продолжают встречаться - Хранение паролей в простом виде или с простыми хешами без соли. - Использование устаревших и уязвимых алгоритмов (MD5, SHA-1). - Настройка TLS без отключения старых протоколов, что открывает двери атакам. - Ключи шифрования маленькой длины. - Использование одинаковых IV в шифровании разных данных. - Отсутствие мониторинга и обновления криптографических библиотек. - Игнорирование рекомендаций по постепенному переходу на новые стандарты. FAQ Вопрос: Почему нельзя просто взять MD5 для хеширования паролей, если это быстро? Ответ: MD5 — слишком быстрый алгоритм, что облегчает перебор паролей при атаке. К тому же существуют радужные таблицы для быстрого взлома MD5-хешей. Лучше использовать специальные алгоритмы с задержкой, например bcrypt. Вопрос: Что лучше — SHA-256 или SHA-3? Ответ: SHA-3 — новый стандарт с другим принципом работы, но SHA-256 нестираем и широко поддерживается. Для большинства задач сегодня можно спокойно использовать SHA-256, но SHA-3 отлично подойдет, если нужна свежая альтернатива. Вопрос: Как часто нужно обновлять крипто-библиотеки и алгоритмы? Ответ: Чем чаще, тем лучше. Обновления включают исправления уязвимостей. По крайней мере стоит следить за новостями и официальными рекомендациями, а критически важные проекты обновлять быстро. Вопрос: Можно ли "расшифровать" хеш пароля? Ответ: В прямом смысле — нет, потому что хеш односторонний. Но если хеш слабый (например, MD5 без соли), то с помощью перебора и радужных таблиц можно подобрать исходные данные. Обсуждайте, делитесь своим опытом, на что наткнулись в своих проектах или администрировании. Какие еще устаревшие методы встречали? Что посоветуете новичкам, кто только начинает работать с криптографией и хешами? Тема живет и развивается, и чем больше обмена опытом — тем лучше для всех. |
| Время: 06:03 |