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