Одностороннее хеширование
Хешфункция реализует специальный алгоритм преобразования данных. Ее результатом является хешкод. Одностороннее хеширование — это математическое преобразование, обладающее следующими свойствами:
ш на вход функции поступают данные переменного размера, а на выходе получается строка фиксированной длины (иногда называется дайджестом сообщения);
ш вычисление хешкода — легкая процедура;
ш определение исходных данных по имеющемуся хешкоду сопряжено с немалыми вычислительными трудностями;
ш невозможно найти два набора данных, которые при трансформации дадут одинаковый хешкод.
Идея заключается в том, чтобы создать для каждого файла или сообщения идентификационную метку, меняющуюся при модификации файла. Но в связи с тем, что средства хеширования свободно доступны, злоумышленник может поменять не только файл, но и хешкод, чтобы нельзя было обнаружить изменение. Есть ряд способов защиты от подобного жульничества. Один из них — вычислить хешкоды важных файлов в их исходном виде и сохранить их на внешнем носителе или в системе, недоступной злоумышленнику. Такой подход реализован в программах Bastille и Tripwire. Другой способ — вычислить хешкод и зашифровать его. Можно, к примеру, включить хешкод в цифровую подпись.
Одно из назначений хешфункций — гарантировать целостность данных. Об этом пойдет речь при описании программ Bastille и Tripwire. Другое назначение — аутентификация, о которой будет рассказываться при рассмотрении модулей РАМ и одноразовых паролей.
Имеется множество алгоритмов хеширования. Среди них назовем MD4, MD5, SHA1, являющийся частью более общей спецификации DSA (Digital Signature Algorithm — алгоритм создания цифровой подписи), и RIPEMD.
Пароли не шифруются, а хешируются
В Linux для хеширования применяется функция crypt (). Она реализует модифицированный алгоритм DES, в котором на вход поступает не более 64 бит данных (8 символов), а на выходе получается 104разрядный хешкод (13 символов, первые два из которых не являются частью хешкода). Эта функция является стандартным средством хеширования паролей. Тринадцатибайтовый пароль каждого пользователя хранится в файле /etc/shadow (или, если его нет, в файле /etc/passwd). Хешированные пароли часто называют зашифрованными, что подразумевает возможность их расшифровки. Однако по отношению к хешированному паролю это сделать чрезвычайно сложно (если вообще возможно), особенно в случае применения алгоритма MD5. На практике расшифровка вообще не выполняется. Когда пользователь вводит пароль, он хешируется функцией crypt (), а полученный хешкод сравнивается с содержимым соответствующего поля файла /etc/shadow. При совпадении пароль принимается.