Криптография, Хеши

#2 Криптография. Свойства алгоритмов хеширования.

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

Давайте рассмотрим криптографическую хеш-функцию и посмотрим, каковы ее свойства.

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

В этом примере я вычислил хеш слова «linux» двумя разными способами, используя команду sha512sum, и используя команду openssl:

вычисление хеш слова «linux» двумя разными способами, используя команду sha512sum, и используя команду openssl

Это тот же хеш, если я вычисляю его с помощью онлайн-инструмента, и мы получим тот же результат.

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

Давайте вычислим хеш слова «computer» с помощью sha256. Команда будет выглядеть как: echo –n “computer” | openssl dgst –sha256:

echo –n “computer” | openssl dgst –sha256

Теперь давайте вычислим хеш слова «computer1», используя тот же алгоритм:

Теперь давайте вычислим хеш слова «computer1», используя тот же алгоритм

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

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

Хеш функции, всегда производят вывод фиксированной длины, независимо от размера ввода. Например, sha256 всегда производит хеш 256 бит и sha 512 — хеш 512 бит. Давайте рассмотрим несколько примеров. Я вычислю хеш двух символов a и b, используя sha256. Команда будет выглядеть как: «echo –n “ab” | sha256sum»:

echo –n “ab” | sha256sum

 Это хеш, который имеет длину 256 бит. Теперь я вычисляю хеш фразы: «echo –n “I learn Ethical Hacking” | sha256sum»:

echo –n “I learn Ethical Hacking” | sha256sum

Выходной хеш имеет ту же длину в 64 символа. Давайте теперь посмотрим хеш файла, который мне неинтересен, и его хеш будет иметь длину 256 бит. Команда будет выглядеть как: «sha256sum /var/log/auth.log»:

sha256sum /var/log/auth.log

Доступ запрещен. Давайте попробуем проверить файл /etc/passwd:

Доступ запрещен. Давайте попробуем проверить файл /etc/passwd

И, для сравнения, откроем файл «group»:

И, для сравнения, откроем файл «group»

Мы видим, что хеши такой же длины, даже если бы у меня был файл одного гигабайта, его хеш будет иметь такую ​​же длину.

Другое свойство алгоритмов хеширования — лавинный эффект. Изменяющий один бит на входе, должен создавать лавинный эффект, и его результат — совершенно другой хеш. Посмотрим пример. Давайте возьмем файл большего размера, для примера, файла словаря, который поставляется с kali linux, и рассмотрим, сколько символов и слов в этом файле. Это команда: «wc /usr/share/dict/wordlist-probable.txt»:

wc /usr/share/dict/wordlist-probable.txt

В нем более 2 миллионов символов. Давайте посчитаем хеш этого файла:

В нем более 2 миллионов символов. Давайте посчитаем хеш этого файла

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

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

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

Данные свойства, которые мы только что обсудили, являются самыми важными для любой хеш-функции.