Что такое контрольная сумма и что с ней делать

Что такое контрольная сумма и что с ней делать
Что такое контрольная сумма и что с ней делать

Вы собираетесь нажать на кнопку загрузки и заметили странный код рядом с ней. Кажется, ему нечего делать, насколько велик файл или что-то, что вы должны отметить. Так что давай, бери файл, и беда! Похоже, это не то, что вы ожидаете.

Если бы только был быстрый способ убедиться, что только что загруженный вами элемент точно такой же, как файл, который был на веб-сайте. Ну, есть. Добро пожаловать в мир контрольных сумм!

Что такое контрольная сумма?

TL;DR: Контрольная сумма - это число в форме двоичного или шестнадцатеричного значения, полученное из источника данных. Что важно знать: контрольная сумма обычно намного меньше, чем источник данных, и к тому же она почти полностью уникальна. Это означает, что вероятность того, что некоторые другие данные дадут точно такую же контрольную сумму, крайне мала.

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

Изображение
Изображение

Все это обрабатывается в процессе создания контрольной суммы, и мы покажем вам, как это работает и как вы можете сделать это самостоятельно позже в этой статье.

А пока давайте посмотрим на полученное значение:

798B38084999FA50E7D1861E07E45F4E3AA39668DC6A12A84A058CAAA32DE0EB

Сам по себе этот код ничего нам не говорит. Мы не можем «взломать» его, чтобы выяснить, из каких единиц и нулей состоит текстовый файл. Однако предполагается, что он относится к конкретному файлу, поэтому теперь давайте изменим исходный текстовый файл, переставив некоторые слова.

Изображение
Изображение

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

22698AA81AFF43B48ADA1BCC7E26D641F0077C0AA24B5B19C8C801147A41B30D

Обратите внимание, что длина одинакова - это ключевой аспект процесса получения кода - но это совершенно другая контрольная сумма. Те же данные, другой порядок, совершенно новая контрольная сумма.

Но, возможно, этого и следовало ожидать; в конце концов, изменения в файле были не совсем тривиальными. Итак, давайте посмотрим, что произойдет, если мы изменим всего одну букву во всем этом: посмотрим, сможете ли вы определить, какую именно!

Изображение
Изображение

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

790DD6BF0733981E4EBF9BA116970D943D91C2CDD3531CF877E30F3E92F29453

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

С этим покончено, давайте тогда посмотрим, как все это работает!

Техник проверки

В основе контрольной суммы лежит программный алгоритм, который используется для создания кодов, которые мы видели. В наших примерах мы использовали очень распространенный алгоритм SHA-256 (Secure Hash Algorithm - 256 бит). Этот алгоритм представляет собой тип криптографической хеш-функции (CHF), где исходные данные помечены как сообщение, а выходные данные называются хеш-значением или просто хэшем (в данном случае контрольной суммой).

Разработанный АНБ и выпущенный почти 20 лет назад, SHA-256 принадлежит к классу CHF, которые широко используются во всем мире. Их популярность обусловлена тем, что они работают быстро и устойчивы к попыткам «взломать» код, хотя в наши дни есть гораздо лучшие варианты.

Изображение
Изображение

Штаб-квартира АНБ - дом для алгоритма безопасного хеширования

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

Итак, контрольная сумма для нашего файла test1 на самом деле 798B3808 4999FA50 E7D1861E 07E45F4E 3AA39668 DC6A12A8 4A058CAA A32DE0EB. Это было записано в шестнадцатеричном формате - запись в виде строки из 256 единиц и нулей была бы очень утомительной!

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

Изображение
Изображение

Например, предположим, что мы пытаемся найти контрольную сумму файла, который имеет общий размер 10145 бит. Это разбивается на 19 целых блоков, оставляя 417 битов для заполнения. Чтобы указать, где заканчиваются данные и начинается заполнение, к строке битов, составляющих источник, добавляется 1 в конце. Итак, здесь дополнение добавит 352 нуля.

Подождите, почему не 416? Самая последняя часть последнего блока - это специальное 64-битное число: длина исходного файла. Это означает, что в нашем примере 20-й блок должен заканчиваться двоичным значением 10145, в результате чего для заполнения сообщения требуется всего 402 бита пустого пространства.

После этого алгоритм берет самый первый 512-битный блок и делит его на 16 частей, каждая из которых имеет длину 32 бита; каждое из этих значений будет использоваться в процессе расчета хэша.

До этого момента это была самая простая часть: остальная часть процесса требует много математических вычислений.

Изображение
Изображение

Производители микросхем, такие как Intel, предлагают архитектурные решения для устройств FPGA для вычисления хеш-значений SHA-256

Это выходит далеко за рамки этой статьи, но если вам интересно разобраться в этом подробнее, вы можете прочитать об этом подробнее здесь. Но чтобы дать вам краткий обзор, сначала нужно создать начальный хеш, используя первые 8 простых чисел. Они проходят через уравнение, чтобы получить 256-битное значение, которое затем изменяется снова и снова, поскольку остальная часть алгоритма проходит через все части в каждом блоке из обработанных исходных данных.

Звучит ужасно сложно, да? Однако для современного процессора это проще простого.

Для генерации хеша требуется не более дюжины циклов процессора для каждого байта исходных данных.

Так что же делать с контрольной суммой?

TL;DR: Контрольная сумма позволяет легко проверить целостность данных, составляющих файл.

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

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

Изображение
Изображение

И это основное использование контрольной суммы: проверка целостности данных, из которых состоит файл. Это можно сделать вручную, как мы скоро увидим, или это может быть частью автоматизированной операции. Valve использует контрольные суммы на платформе Steam как часть процесса проверки файлов.

Запустите собственную контрольную сумму

Все основные операционные системы также имеют встроенный инструмент для проверки контрольной суммы.

Windows

Чтобы запустить контрольную сумму в Windows, проще всего использовать PowerShell: щелкните правой кнопкой мыши кнопку меню «Пуск» или нажмите Win+X. Если вы используете более старую версию Windows, вы можете скачать PowerShell отсюда.

Введите команду get-filehash, за которой следует путь к файлу. Либо введите команду, а затем перетащите файл в окно PowerShell. Вот как был создан наш первый тестовый файл.

Изображение
Изображение

По умолчанию PowerShell использует SHA-256 для создания контрольной суммы, но вы можете использовать другие, такие как SHA-512 или MD5. Все они будут создавать разные хэши, но они все равно будут уникальными для этого файла. Чтобы использовать другую функцию, добавьте команду -algorithm, за которой следует ее код.

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

Изображение
Изображение

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

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

На изображении ниже показаны строки кода, которые необходимо ввести, используя Shift+Enter после каждой.

Изображение
Изображение

Видите, как написано «Ложь»? Это говорит вам, что файл не тот. Если вы уверены, что у вас правильный хеш для нужного вам файла, то все подозрения падают на данные.

Обратите внимание, что контрольная сумма не может сказать вам, чем отличаются файлы - это очень бинарная проверка, если вы извините за каламбур. Но это полезный инструмент, и есть несколько очень специфических функций контрольной суммы (таких как контрольная цифра и контрольный бит), которые используются постоянно для поиска ошибок в данных.

Microsoft сделала PowerShell доступным для macOS 10.13 или новее, а также для Linux, но если мысль об использовании чего-то, созданного в Windows, приводит вас в бешенство, знайте, что вы можете сделать то же самое изначально в любой ОС, тоже.

macOS

Пользователям Mac необходимо запустить приложение «Терминал», которое находится в папке «Утилиты» в разделе «Приложения». Команды для ввода: shasum -a 256, за которыми следует адрес файла, который вы хотите проверить (или просто перетащите его в окно терминала).

Изображение
Изображение

Инструкция shasum эквивалентна Get-FileHash в PowerShell, а часть «-a 256» указывает, какой алгоритм использовать: 1 для SHA-1, 256 для SHA-256 и 512 для SHA-512.

Обратите внимание, что он дает нам ту же контрольную сумму для тестового файла, что и при использовании PowerShell в Windows? В этом его реальная сила: независимо от того, какой компьютер или файловую систему вы используете, пока алгоритм один и тот же, вы всегда будете получать хэш-значения, которые можно напрямую сравнивать.

Линукс

Если вы предпочитаете прелести Linux, вам будет приятно узнать, что это тот же процесс, что и выше - запустите Терминал и введите sha1sum, sha256sum или sha512sum, а затем адрес файла для создания необходимого хэш.

Изображение
Изображение

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

Увеличение мощности ваших загрузок

Учитывая, насколько быстро и легко вычисляются контрольные суммы, возможно, немного удивительно, что мы не выполняем их чаще или вообще не выполняем.

Несмотря на то, что такие сервисы, как Steam, обрабатывают процесс автоматически, мы полагаемся на файловые хосты, предоставляющие точные контрольные суммы для предоставляемых ими данных. В случае загрузок TechSpot, например, мы явно не указываем контрольную сумму, но инструменты, которые мы используем для подтверждения чистоты загрузок, такие как VirusTotal, используют контрольную сумму для проверки целостности файлов и сбора данных, когда несколько сторон сканируют загрузку. один и тот же файл с течением времени.

Некоторые веб-сайты предоставляют контрольные суммы для каждого файла, в то время как другие делают это только для важных или очень больших элементов (например, Microsoft в своих разделах безопасной загрузки), но это становится все более редким явлением. Для этого есть разные возможные причины, например, люди просто не знают о них.

Но там, где это предлагают хосты, вы, по крайней мере, теперь знаете, как можно использовать хэш - любая дополнительная вещь, которая даст вам немного больше спокойствия, всегда хороша.