![]() |
Проверяете ли вы хеши по-человечески?
Заметил, что многие обходятся только банальным сравнением хеша типа "вход = эталон" и на этом ставят крест. А ведь есть куча нюансов — от коллизий до разной кодировки и даже разных настроек алгоритма (например, соль и количество итераций). Вот примерно что перехожу по списку обычно, когда нужно разобраться с криптографией и работой с хешами:
- Убедиться, что алгоритм хеширования точно известен и совпадает с тем, что в системе. - Проверить, используется ли соль и где она берется (фиксим, если нет). - Обратить внимание на кодировку исходных данных (UTF-8, ANSI и прочие), иначе хеш не совпадёт. - Если хеш сохраняется в нескольких местах — сверить, что нигде не повреждён или не изменён. - Посмотреть, не применяются ли несколько проходов (итераций) алгоритма. - Оценить, нет ли лишних пробелов, переносов и прочего в строке для хеширования. - И, наконец, проверить, что сравнение происходит корректно — желательно не через строковое равенство, а через константное время, если речь о безопасности. Звучит очевидно, но между этими щепотками "ну я ж проверил" и реальным пониманием часто большая пропасть. Лично я без такого досконального разбора хеши не воспринимаю как надежные. Кто ещё заморачивается такими вещами? Или у вас что-то проще и не заморачиваетесь вовсе? |
| Время: 01:10 |