#1 Криптография. Введение в хеши.
Здравствуйте, дорогие друзья.
В этой статье мы поговорим о хешах. Вы найдете их во многих областях информатики. Хеши являются важной частью подписей, сертификатов безопасности, криптовалют, таких как Bitcoin и Ethereum, а также терминала POS в супермаркете, который проверяет PIN-код вашей кредитной карты, когда вы хотите что-то заплатить.
Давайте углубимся в хеши. Алгоритм хеширования — это криптографическая функция, которая принимает входные данные, прогоняет их через некоторые математические процессы, а затем создает уникальный результат, называемый хешем. Выходной хеш иногда называют контрольной суммой или криптографическим отпечатком. На входе хеш-функции может быть буквально что угодно: от двоичной информации, такой как файл, пакет, отдельный символ, слово или фраза.
Я хотел бы показать Вам практический пример использования Linux-машины (поскольку на ней уже есть все приложения, необходимые для вычисления хешей). Если вы используете Windows, вам необходимо установить необходимые инструменты. так, я выполняю sha256sum /etc /passwd:
![sha256sum /etc /passwd](https://timcore.ru/wp-content/uploads/2022/01/screenshot_1-1.png)
Давайте подробнее рассмотрим команду, ее аргумент и результат. Используемая хеш-функция или алгоритм хеширования — sha256.
Sha расшифровывается как Secure Hash Algorithm, произносится как sha, и, на самом деле, является семейством большего количества протоколов хеширования.
Sha256sum — это приложение Linux, инструмент, реализующий хеш-протокол, который, как я уже сказал, называется sha256.
/etc/passwd — это вход хеш-функции. Cтрока, записанная в шестнадцатеричном формате, является хеш-кодом входа:
![хеш-код входа](https://timcore.ru/wp-content/uploads/2022/01/screenshot_2-1.png)
Мы можем просто сказать, что хеш файла паролей sha256 — это значение, которое вы видите прямо сейчас. Вы должны знать, что все алгоритмы хеширования являются общедоступными. Они похожи на математическую формулу, которую может увидеть и использовать каждый.
Например, sha256 является частью более крупного семейства алгоритмов хеширования, называемого sha-2. Вы можете прочитать о них больше даже в Википедии.
Другие хорошо известные алгоритмы хеширования, помимо sha-2, — это md5 и sha1, которые считаются небезопасными и устаревшими. Давайте посмотрим на хеш слова Linux, вычисленный с помощью md5 и sha1. Команда имеет вид: «echo –n “linux” | md5sum»:
![echo –n “linux” | md5sum](https://timcore.ru/wp-content/uploads/2022/01/screenshot_3-1.png)
Параметр -n используется, чтобы не добавлять новую строку. По умолчанию команда echo завершает новую строку в конце. Я хочу вычислить хеш только слова «linux» с использованием хеша sha1. Команда будет похожа на предыдущую, и имеет вид – «echo –n “linux” | sha1sum»:
![«echo –n “linux” | sha1sum](https://timcore.ru/wp-content/uploads/2022/01/screenshot_4-1.png)
Вышеперечисленные хеши записываются шестнадцатеричными числами. Другие очень безопасные и новые алгоритмы хеширования — это sha-3 или Keccak, Blake2b и RIPEMD-160. Blake2b используется Ethereum 2.0, а RIPEMD-160 — одна из двух хеш-функций, используемых Биткойном. И их никогда не взламывали.
Другой способ вычислить хеш — использовать команду openssl, например:
openssl dgst -sha3-256 /etc/passwd:
![openssl dgst -sha3-256 /etc/passwd](https://timcore.ru/wp-content/uploads/2022/01/screenshot_5-1.png)
Это хеш. Он отличается от предыдущих, потому что используется другой алгоритм хеширования. Или Вы можете вычислить хеш строки следующим образом: echo -n «linux» | openssl dgst -rmd160:
![echo -n "linux" | openssl dgst -rmd160](https://timcore.ru/wp-content/uploads/2022/01/screenshot_6-1.png)
Вы можете увидеть список всех алгоритмов хеширования, реализованных в openssl, выполнив openssl и затем help.
![Вы можете увидеть список всех алгоритмов хеширования, реализованных в openssl, выполнив openssl и затем help.](https://timcore.ru/wp-content/uploads/2022/01/screenshot_7-1.png)
![Вы можете увидеть список всех алгоритмов хеширования, реализованных в openssl, выполнив openssl и затем help.](https://timcore.ru/wp-content/uploads/2022/01/screenshot_8-1.png)
Все это хеш алгоритмы, реализованные в openssl.
Попробуем еще один пример. Давайте посчитаем хеш слова «linux», используя на этот раз алгоритм sha512, разными способами.
В первом примере я буду использовать команду sha512sum следующим образом: echo -n «linux» | sha512sum:
![echo -n «linux» | sha512sum](https://timcore.ru/wp-content/uploads/2022/01/screenshot_9.png)
Второй пример связан с командой openssl: echo –n “linux” | openssl dgst –sha512:
![echo –n “linux” | openssl dgst –sha512](https://timcore.ru/wp-content/uploads/2022/01/screenshot_10.png)
Я также могу использовать онлайн-инструмент для вычисления хеша. Можете загуглить, и убедиться в работе данных инструментов.
Независимо от того, как мы вычисляем хеш, если мы используем один и тот же алгоритм, то получаем тот же хеш, тот же результат. Это одно из свойств хешей, которое называется детерминизмом и означает, что выходные данные хеш-функции не меняются между запусками. Фактически применяется тот же математический процесс. Эти хеш-функции также называются односторонними.
Еще одно важное свойство хеш-функции состоит в том, что очень легко вычислить хеш из заданного ввода, но невозможно узнать исходный ввод из полученного хеша.
Если у Вас есть хеш, который Вы видите прямо сейчас, нет способа узнать, какая информация, какое слово, файл или пакет предоставили этот хеш. Обратите внимание, что хеширование — это не шифрование, так как нет ни секрета, ни ключа в хешировании.
На этом все. Всем хорошего дня!