Криптографические хэши


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



В качестве примера, входные данные, строка:

Привет, мир
будет представлена в SHA-1 как:

0x26014e5a98a861906afa0bf7256861add8482b0a
Однако точно такой же ввод генерирует следующий вывод с использованием SHA-256:

0x2a2e76364df5ab8f0441d9c88bf7688f7f565f0f6b92a877cc94263e123021e3
Обратите внимание, что второй хэш длиннее первого. Это связано с тем, что SHA-1 создает 160-битный хэш, в то время как SHA-256 создает 256-битный хэш. Добавленный 0x указывает, что следующий хэш представлен в виде шестнадцатеричного числа.

Хэши могут быть представлены в разных базах (base2, base16, base32 и т.д.).

Хэши важны

Криптографические хэши имеют несколько очень важных характеристик:

  • детерминированные - одно и то же входное сообщение всегда возвращает один и тот же выходной хэш
  • некоррелированные - небольшое изменение в сообщении должно генерировать совершенно другой
  • уникальные - невозможно сгенерировать один и тот же хэш из двух разных сообщений в одну строку
  • невозможно угадать или вычислить входное сообщение по его хэшу. Не, ну если быть совсем честным, то иногда все же возможно, если знаешь тип (длину строки) - существуют даже базы данных хэшей.
Эти функции также означают, что мы можем использовать криптографический хэш для идентификации любого фрагмента данных: хэш уникален для данных, из которых мы его вычислили, и он не слишком длинный, поэтому его отправка по сети не занимает много ресурсов. Хэш имеет фиксированную длину, поэтому, например, хэш SHA-256 одногигабайтного видеофайла по-прежнему составляет всего 32 байта.

Идентификаторы содержимого не являются хэшами файлов

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

Давайте рассмотрим конкретный пример. Когда вы загружаете файл образа диска для Ubuntu Linux, вы можете увидеть следующую контрольную сумму SHA-256 на веб-сайте Ubuntu, указанную для целей проверки:

0xB45165ED3CD437B9FFAD02A2AAD22A4DDC69162470E2622982889CE5826F6E3D 
ubuntu-20.04.1-desktop-amd64.iso
После загрузки образа Ubuntu вы можете проверить целостность файла, хешируя файл, чтобы убедиться, что контрольные суммы совпадают:

echo "b45165ed3cd437b9ffad02a2aad22a4ddc69162470e2622982889ce5826f6e3d *ubuntu-20.04.1-desktop-amd64.iso" | shasum -a 256 --check

ubuntu-20.04.1-desktop-amd64.iso: OK
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.



тегизаметки, хэширование, криптография




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.



Урок 39. Коллекция Стек (Stack) C#
Макросы CorelDraw: модальное окно и обработка событий документа
Ю. Пахолков - AI Factory's Chess, уровень 7, 21 февраля 2019