Hashtab 6.0.0.28

Проверка контрольных значений MD5, SHA

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

Пример контрольных сумм SHA-1, 256 и 512 для архива программы PhoenixMiner версии 4.5c:

File: PhoenixMiner_4.5c_Windows.zip
===================================
SHA-1: 2bea8b5d04734fd707ec59b3955e864712e66a91
SHA-256: 78300370043207516c8b8a48b20b7040b82203f9d311b6cc28890a934df74fae
SHA-512: 10e4e0ec5db2998fc54673f3b20f751845b6113869087e6e6cd3b3e6c464d00756bc16663414f80dd826d404e2ea71f4df5dc3c59073c97cc9bb7a73bb1d2786

Скриншот этой информации на сайте bitcointalk

Информация о контрольных суммах, как правило, содержится в архивах/страницах для скачивания файлов. Например, для PhoenixMiner в файловом хранилище mega содержится файл …_checksums.txt:

Что такое хеши и как они используются

Хеш-сумма (хеш, хеш-код) — результат обработки неких данных хеш-функцией (хеширования).

Хеширование, реже хэширование (англ. hashing) — преобразование массива входных данных произвольной длины в (выходную) битовую строку фиксированной длины, выполняемое определённым алгоритмом. Функция, реализующая алгоритм и выполняющая преобразование, называется «хеш-функцией» или «функцией свёртки». Исходные данные называются входным массивом, «ключом» или «сообщением». Результат преобразования (выходные данные) называется «хешем», «хеш-кодом», «хеш-суммой», «сводкой сообщения».

Это свойство хеш-функций позволяет применять их в следующих случаях:

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

Одним из применений хешов является хранение паролей. Идея в следующем: когда вы придумываете пароль (для веб-сайта или операционной системы) сохраняется не сам пароль, а его хеш (результат обработки пароля хеш-функцией). Этим достигается то, что если система хранения паролей будет скомпрометирована (будет взломан веб-сайт и злоумышленник получит доступ к базе данных паролей), то он не сможет узнать пароли пользователей, поскольку они сохранены в виде хешей. Т.е. даже взломав базу данных паролей он не сможет зайти на сайт под учётными данными пользователей. Когда нужно проверить пароль пользователя, то для введённого значения также рассчитывается хеш и система сравнивает два хеша, а не сами пароли.

По этой причине пентестер может столкнуться с необходимостью работы с хешами. Одной из типичных задач является взлом хеша для получения пароля (ещё говорят «пароля в виде простого текста» — поскольку пароль в виде хеша у нас и так уже есть). Фактически, взлом заключается в подборе такой строки (пароля), которая будет при хешировании давать одинаковое значение со взламываемым хешем.

Для взлома хешей используется, в частности, Hashcat. Независимо от выбранного инструмента, необходимо знать, хеш какого типа перед нами.

Проверка хешей в Linux

Здесь так же можно воспользоваться консолью. В случае алгоритма MD5 достаточно выполнив команду.

md5sum "путь к файлу"

Для хеш-сумм по алгоритму SHA-1 команда выглядит немного иначе.

sha1sum "путь к файлу"

В случае необходимости рассчитать циклическую контрольную сумму (CRC) используется команда

cksum "путь к файлу"

Кто не хочет связываться с консолью, может поставить программу Gtkhash с графическим интерфейсом и проверять целостность файлов в ней. Для установки программы выполнить в консоли:

sudo apt-get install gtkhash

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

Находим нужный нам образ, обращая внимание на версию, дату, разрядность и язык. Когда нужный продукт будет найден, нажимаем на «Сведения» рядом с ним

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

4«Взлом» контрольной суммы CRC32 и CRC16

Кратко затронем вопрос «взлома» CRC32. И прежде всего давайте определимся с понятием «взлом» применительно к данному вопросу.

Если задача определения контрольной суммы некоторого массива данных – прямая задача, то «взлом» – это обратная задача, а именно: подгонка контрольной суммы под определённый массив данных.

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

Для начала нужно посчитать обычным образом контрольную сумму CRC32, CRC16 или любую другую, какая вам нужна, для этого изменённого файла. Пусть это будет C1. Теперь нужно добавить такое же число нулевых байтов в конец файла, которое содержится в контрольной сумме (для CRC32 – 4 байта, для CRC16 – 2 байта, и т.д.). Можно простым перебором подобрать такое число C2, которое мы и запишем в эти нулевые байты. Ведь понятно, что полный диапазон всех допустимых значений CRC32 укладывается в 232 ~ 4,295 млрд. То есть за 4 с небольшим миллиарда итераций расчёта контрольной суммы с начальным содержимым регистра, равным С1, мы брутфорсом («в лоб», методом грубой силы) подберём нужное значение. При современных вычислительных мощностях это не составит проблемы. А уж «взломать» с помощью перебора CRC16 вообще дело нескольких секунд.

Можно ли разместить нулевые байты в середине или начале файла? Можно. К операции XOR применим сочетательный закон: a XOR (b XOR c) = (a XOR b) XOR c, поэтому можно с успехом разбить файл на 3 части: до вставки, после вставки, и сама вставка. Посчитать CRC для первых двух частей (C1 и C2 на иллюстрации), объединить их операцией XOR, заполнить этим числом начальное содержимое регистра, а затем «сбрутфорсить» CRC оставшейся третьей части X.

+-----------------+-----+---------+
|        c1       |  x  |   c2    |
+-----------------+-----+---------+

Есть более интеллектуальный и изящный способ подогнать CRC под нужное значение. Суть его в том, что вместо последовательного перебора всех подряд значений мы «прокручиваем назад» несколько раз (по числу байтов или битов контрольной суммы) наш табличный алгоритм или алгоритм побитового сдвига до тех пор, пока CRC не будет желаемой. На эту тему есть подробные и качественные материалы в сети.

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

Hash MD5 и SHA256

SHA256sum и MD5sum являются программами, которые реализуют алгоритмы SHA256 и MD5 соответственно. Эти файлы в основном используются для подтверждения целостности и подлинности файла.

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

Но это не типично. Из-за проблем безопасности в алгоритме MD5 большинство разработчиков не используют его. В настоящее время широко используются только hash SHA256.

На веб-сайте Monero Вы могли заметить hash-значения SHA256, перечисленные вместе с программным обеспечением.

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

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

Просто скачайте файл и откройте его с помощью Блокнота или в Блокноте ++. Вы увидите случайную строку букв и цифр, похожих на эту.

——BEGIN PGP SIGNED MESSAGE——
Hash: SHA256
5659c436ca92eed8ef42d5b2d162ff6283feba220748f9a373a5a53968975e34 bitcoin-0.17.1-aarch64-linux-gnu.tar.gz
aab3c1fb92e47734fadded1d3f9ccf0ac5a59e3cdc28c43a52fcab9f0cb395bc bitcoin-0.17.1-arm-linux-gnueabihf.tar.gz
b1e1dcf8265521fef9021a9d49d8661833e3f844ca9a410a9dd12a617553dda1 bitcoin-0.17.1-i686-pc-linux-gnu.tar.gz
6aa567381b95a20ac96b0b949701b04729a0c5796c320481bfa1db22da25efdb bitcoin-0.17.1-osx64.tar.gz
e3d785d800b71d277959d15b2c2b33d44dd72c1288e559928a40488dd935c949 bitcoin-0.17.1-osx.dmg
3e564fb5cf832f39e930e19c83ea53e09cfe6f93a663294ed83a32e194bda42a bitcoin-0.17.1.tar.gz
e9245e682126ef9fa4998eabbbdd1c3959df811dc10df60be626a5e5ffba9b78 bitcoin-0.17.1-win32-setup.exe
6464aa2d338f3697950613bb88124e58d6ce78ead5e9ecacb5ba79d1e86a4e30 bitcoin-0.17.1-win32.zip
fa1e80c5e4ecc705549a8061e5e7e0aa6b2d26967f99681b5989d9bd938d8467 bitcoin-0.17.1-win64-setup.exe
1abbe6aa170ce7d8263d262f8cb0ae2a5bb3993aacd2f0c7e5316ae595fe81d7 bitcoin-0.17.1-win64.zip
53ffca45809127c9ba33ce0080558634101ec49de5224b2998c489b6d0fc2b17 bitcoin-0.17.1-x86_64-linux-gnu.tar.gz
——BEGIN PGP SIGNATURE——
yYo/F2yO57Yacv597rKILlg29QxEVTqa5+slMdwuU7NP5AdAcQV4EtFqoCOqM7C7
JL/zZWYnTywK3l0hOuCBJiY86izutWME5xgm7Eh3ORj+K6ZYT4iXw2JIkTdumeuS
X0WDE3ShH4rb35IaQX75FJLp5R7hLTXiNgng7b8Xhy/62bJ75Ob4HVVSLG1Lkhps
vtml10br+78qXiofzk8zaAW6KaG7G9nbBa0hfDjUEsYzA6P5iWA+53ykupc82HNa
ZT2gk+wWhNhZOd/ANheriM0eqm/ZlK7oydYRRtf9Tamk+XJgREU1x8cWlMZcCPEE
uIUzb7/REvYSjwcwArYLCq/eFPfjQe7jcG2WexnpxxkKJBvu2v4zVw9LLUPll094
BAmfk34iJKhN2cGVhvjO0Q9GKk0B2HzvhD5xn1Hnlp+NbXVNbKonYvkB71D3GY4W
t/eRyv7Erfi4dhHf+8oQ
=UEoM
——END PGP SIGNATURE——

Это криптографический hash, и эта информация предоставляется пользователям для проверки целостности файла. Разработчики криптовалюты и веб-сайты советуют пользователям проверять подлинность загружаемого файла перед его использованием. Однако большинство пользователей не делают этого или не знают, что делать с этой информацией. Поэтому мы решили сделать статью по этому вопросу. Здесь, в этом руководстве для начинающих, мы покажем вам, как проверять контрольные суммы (только hash SHA256 и hash MD5, а не подписи PGP).

Но зачем это делать!? В любом случае я загружаю кошелек из официального источника, так почему я должен проверять подлинность загруженного кошелька? Кроме того, что такое контрольная сумма и как помогает проверка контрольной суммы?

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

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

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

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

Для высчитывания контрольной суммы существует множество различных алгоритмов или так называемых хеш-функций. Самыми известными и популярными алгоритмы являются: CRC32, MD5, SHA-1 и SHA-2. Но, есть и множество других алгоритмов, некоторые из которых имеют широкое применения, а некоторые используются только для специфических задач. При этом часть существующих алгоритмов признаны устаревшими или уязвимыми и больше не используются. Так, алгоритм MD5 практически полностью перестал использоваться поскольку выяснилось, что он может выдавать одинаковые значения для разных входных значений.

Для примера продемонстрируем, как выглядит контрольная сумма на практике. Например, возьмем строку «Hello, world!» и высчитаем ее контрольную сумму с использованием нескольких популярных алгоритмов.

Алгоритм Значение
Adler32 205e048a
CRC32 ebe6c6e6
Haval 5711dea10d85b988fcb1eed99ce7310c
MD2 8cca0e965edd0e223b744f9cedf8e141
MD4 0abe9ee1f376caa1bcecad9042f16e73
MD5 6cd3556deb0da54bca060b4c39479839
RipeMD128 3cbb446fc20277b2a4e4b8b8b40aa962
RipeMD160 58262d1fbdbe4530d8865d3518c6d6e41002610f
SHA-1 943a702d06f34599aee1f8da8ef9f7296031d699
SHA-256 315f5bdb76d078c43b8ac0064e4a0164612b1fce77c869345bfc94c75894edd3
SHA-384 55bc556b0d2fe0fce582ba5fe07baafff035653638c7ac0d5494c2a64c0bea1cc57331c7c12a45cdbca7f4c34a089eeb
SHA-512 c1527cd893c124773d811911970c8fe6e857d6df5dc9226bd8a160614c0cd963a4ddea2b94bb7d36021ef9d865d5cea294a82dd49a0bb269f51f6e7a57f79421
Tiger b5e5dd73a5894236937084131bb845189cdc5477579b9f36
Whirlpool 238034e71c9f4d712ef02f8fe109bc1f32425530088c1ea13786e1ffdc953a7d567db4aba11ce0226efdd5ed5d55abd087b58122f891e61df996a37e595131b5

Как видно, каждый алгоритм выдает значение, которое не имеет совершенно ничего общего с исходными данными. И сколько раз мы бы не высчитывали контрольную сумму строки «Hello, world!», мы каждый раз будем получать одни и те же значения.

2Расчёт контрольной суммы CRC методом побитового сдвига

На основании всего вышеизложенного, давайте напишем функцию на языке Visual Basic .NET, которая будет рассчитывать контрольную сумму CRC, принимая ряд параметров, которые я описал выше, и возвращая значение CRC в виде 32-разрядного беззнакового числа.

Код расчёта CRC методом побитового сдвига на языке VB.NET

''' 
''' Возвращает контрольную сумму типа CRC, рассчитанную методом побитового сдвига.
''' 
''' Входная последовательность байтов (исходное сообщение).
''' Образующий многочлен разрядности width.
''' Порядок CRC в битах, 8/16/32.
Public Shared Function GetCrc_Simple(ByVal bytes As Byte(), ByVal poly As UInteger, Optional ByVal width As Integer = 32, Optional ByVal initReg As UInteger = &HFFFFFFFFUI, Optional ByVal finalXor As UInteger = &HFFFFFFFFUI, Optional ByVal reverseBytes As Boolean = True, Optional ByVal reverseCrc As Boolean = True) As UInteger

  Dim widthInBytes As Integer = width \ 8
  
  'Дополняем сообщение width нулями (расчёт в байтах):
  ReDim Preserve bytes(bytes.Length - 1 + widthInBytes)
  
  'Создаём очередь битов из сообщения:
  Dim msgFifo As New Queue(Of Boolean)(bytes.Count * 8 - 1)
  For Each b As Byte In bytes
    Dim ba As New BitArray({b})
    If reverseBytes Then
      For i As Integer = 0 To 7
          msgFifo.Enqueue(ba(i))
      Next
    Else
      For i As Integer = 7 To 0 Step -1
          msgFifo.Enqueue(ba(i))
      Next
    End If
  Next
  
  'Создаём очередь из битов начального заполнения регистра:
  Dim initBytes As Byte() = BitConverter.GetBytes(initReg)
  Dim initBytesReversed As IEnumerable(Of Byte) = (From b As Byte In initBytes Take widthInBytes).Reverse
  Dim initFifo As New Queue(Of Boolean)(width - 1)
  For Each b As Byte In initBytesReversed
    Dim ba As New BitArray({b})
    If Not reverseBytes Then
       For i As Integer = 0 To 7
           initFifo.Enqueue(ba(i))
       Next
    Else
      For i As Integer = 7 To 0 Step -1
          initFifo.Enqueue(ba(i))
      Next
    End If
  Next
  
  'Сдвиг и XOR:
  Dim register As UInteger = 0 'заполняем width-разрядный регистр нулями.
  Do While msgFifo.Count > 0
    
    Dim poppedBit As Integer = CInt(register >> (width - 1)) And 1 'определить перед сдвигом регистра.
    
    Dim shiftedBit As Byte = Convert.ToByte(msgFifo.Dequeue)
    If initFifo.Count > 0 Then
      Dim b As Byte = Convert.ToByte(initFifo.Dequeue)
      shiftedBit = shiftedBit Xor b
    End If
    
    register = register > (32 - width)) 'маскируем младшие разряды.
  
  Return crc

End Function

''' 
''' Обращает заданное число младших битов переданного числа.
''' 
''' Число, которое требуется «отзеркалить».
''' Сколько младших битов обратить, 0..32.
''' 
''' Например: reflect(&H3E23, 3) == &H3E26.Private Shared Function reflect(ByVal inpValue As UInteger, Optional ByVal bitsToReflect As Integer = 32) As UInteger
    Dim t As UInteger = inpValue
    Dim reflected As UInteger = inpValue
    For i As Integer = 0 To bitsToReflect - 1
        Dim bm As UInteger = bitMask(bitsToReflect - 1 - i)
        If (t And 1) = 1 Then
            reflected = reflected Or bm
        Else
            reflected = reflected And Not bm
        End If
        t >>= 1
    Next
    Return reflected
End Function

''' 
''' Возвращает наибольший разряд числа.
''' 
''' Число, разрядность которого следует определить.
''' Private Shared Function bitMask(ByVal number As Integer) As UInteger
    Dim res As UInteger = (1UI End Function

Как вы могли заметить, в данной реализации расчёта CRC используется LINQ, так что соответствующая ссылка должна быть добавлена в проект.

Предлагаемая программа плохо масштабируема. То есть она работает хорошо при вычислении контрольной суммы CRC для коротких сообщений, длиной до нескольких десятков килобайтов. Я писал её с целью только продемонстрировать работу простого алгоритма, и не занимался оптимизацией. При расчёте CRC для длинного сообщения, размером десятки или сотни мегабайтов, программа будет сильно загружать процессор и память, т.к. всё сообщение целиком загружается в очередь. Этому способствует метод преобразования числа в битовую последовательность, используя Queue(Of Boolean). Для работы с такими большими сообщениями желательно реализовать промежуточный буфер, который будет передавать сообщение в программу небольшими порциями.

Зато у этой программы есть одно преимущество: она может быть использована для расчёта CRC любого порядка, не обязательно 8, 16 или 32. Это может быть CRC5 или CRC49. Только для чисел больше 32-х разрядов нужно изменить соответствующим образом входные параметры – допустим, poly передавать не как UInteger, а как ULong, или передавать его в виде битового массива (тогда теоретически порядок CRC вообще будет неограничен).

Проверка информации контрольной суммы

Итоговый скрипт () основан на коде из . Этот скрипт значительно дополнен по сравнению с оригиналом, и включает в себя несколько новых функций:

  • Обработка параметров командной строки при помощи модуля . С их помощью можно указать файл контрольной суммы (хранилище контрольной суммы и другой полученной информации), сравнивать или нет новую информацию с предыдущей (при помощи считывания содержимого chksumfile) и возможность назначить основной каталог для поиска. При сравнении файлов данные обновляются и отображаются только различия.
  • Функция для загрузки и обработки существующего файла данных позволяет без труда сравнить старую и новую информацию.
  • Функция gendiff , которая непосредственно сравнивает отдельные поля текущего и сохраненного состояний, чтобы сообщить об изменениях. Эта функция вызывается только в том случае, если известно, что имел место определенный тип изменений.
    #!/usr/local/bin/perl 
    
    use Digest::MD5;
    use IO::File;
    use strict;
    use File::Find ();
    use Getopt::Long;
    
    my $chksumfile = 'chksums.dat';
    my $compare = 0;
    my $basedir = '/etc';
    
    use vars qw/*name *dir *prune/;
    *name   = *File::Find::name;
    *dir    = *File::Find::dir;
    *prune  = *File::Find::prune;
    
    GetOptions("chksumfile=s" => \$chksumfile,
               "compare" => \$compare,
               "basedir=s" => \$basedir);
    
    my $chksumdata = {};
    
    if ($compare)
    {
        loadchksumdata($chksumfile);
    }
    
    my $outfile = '';
    
    if (!$compare)
    {
        $outfile = IO::File->new($chksumfile,"w");
    }
    
    File::Find::find({wanted => \&wanted}, $basedir);
    
    if ($compare)
    {
        foreach my $file (keys %{$chksumdata})
        {
            print STDERR "Couldn't find $file, but have the info on record\n";
        }
    }
    
    sub loadchksumdata
    {
        my ($file) = @_;
    
        open(DATA,$file) or die "Cannot open check sum file $file: $!\n";
        while()
        {
            chomp;
            my ($filename,$rest) = split(/:/,$_,2);
            $chksumdata->{$filename} = $_;
        }
        close(DATA);
    }
    
    sub wanted {
        next unless (-f $name);
    
        my $fileinfo = genchksuminfo($name);
    
        if ($compare)
        {
            if (exists($chksumdata->{$name}))
            {
                if ($chksumdata->{$name} ne $fileinfo)
                {
                    print STDERR "Warning: $name differs from that on record\n";
                    gendiffreport($chksumdata->{$name}, $fileinfo);
                }
                delete($chksumdata->{$name});
            }
            else
            {
                print STDERR "Warning: Couldn't find $name in existing records\n";
            }
        }
        else
        {
            printf $outfile ("%s\n",$fileinfo);
        }
    }
    
    sub gendiffreport
    {
        my ($orig,$curr) = @_;
    
        my @fields = qw/filename chksum device inode mode nlink uid gid size 
    		mtime ctime/;
    
        my @origfields = split(/:/,$orig);
        my @currfields = split(/:/,$curr);
    
        for(my $i=0;$inew();
    
        my (@statinfo) = stat($file);
    
        $chk->add(@statinfo);
        $chk->addfile(IO::File->new($file));
        return sprintf("%s:%s:%s",
                       $file,$chk->hexdigest,
                       join(':',@statinfo));
    }

Для использования этого скрипта вначале необходимо создать файл с эталонной контрольной суммой и другими данными, которые будут служить в качестве основы для сравнения. Например, для получения данных о контрольных суммах файлов в каталоге /etc можно использовать следующую команду:

$ genmd5.pl --basedir=/etc --chksumfile=etc-chksum.dat

Теперь, когда есть эта информация, если вы внесете изменения в файлы и запустите скрипт повторно, будет создан отчет об изменениях. В можно увидеть отчет об изменении файла /etc/hosts.

Листинг 9. Отчет об изменении файла /etc/hosts
$ genmd5.pl --basedir /private/etc --compare
Warning: /private/etc/hosts differs from that on record
        chksum differ; was d4a23fcdaa835d98ede1875503273ce6, 
		                now beb50782b3fd998f35786b1e6f503d1b
        inode differ; was 4879566, now 4879581
        size differ; was 1186929905, now 1186930065
        mtime differ; was 1186929905, now 1186930065
Couldn't find /private/etc/hosts~, but have the info on record

Обратите внимание, что в отчете выведена информация об изменении файла и об удалении файла. При создании новых файлов в отчет также добавляется информация

Как этот процесс работает

Процесс проверки ISO является немного сложным, поэтому, прежде чем мы перейдем к точным шагам, давайте объясним точно, что влечет за собой этот процесс:

  1. Вы загрузите ISO-файл Linux с веб-сайта дистрибутива Linux или где-то еще, как обычно.
  2. Вы загрузите контрольную сумму и ее цифровую подпись с веб-сайта дистрибутива Linux. Это могут быть два отдельных файла TXT или вы можете получить один файл TXT, содержащий оба фрагмента данных.
  3. Вы получите открытый ключ PGP, принадлежащий дистрибутиву Linux. Вы можете получить это на веб-сайте дистрибутива Linux или на отдельном сервере ключей, которым управляют одни и те же люди, в зависимости от вашего дистрибутива Linux.
  4. Вы будете использовать ключ PGP, чтобы проверить, что цифровая подпись контрольной суммы была создана тем же человеком, который сделал ключ — в данном случае, сопровождающими этого дистрибутива Linux. Это подтверждает, что сама контрольная сумма не была подделана.
  5. Вы сгенерируете контрольную сумму загруженного ISO-файла и убедитесь, что она соответствует загруженному вами TXT-файлу контрольной суммы. Это подтверждает, что файл ISO не был подделан или поврежден.

Процесс может немного отличаться для разных ISO, но обычно он следует этой общей схеме. Например, существует несколько разных типов контрольных сумм. Традиционно суммы MD5 были самыми популярными. Однако суммы SHA-256 теперь чаще используются в современных дистрибутивах Linux, поскольку SHA-256 более устойчив к теоретическим атакам. В первую очередь мы обсудим суммы SHA-256 здесь, хотя аналогичный процесс будет работать для сумм MD5. Некоторые дистрибутивы Linux также могут предоставлять суммы SHA-1, хотя они еще менее распространены.

Точно так же некоторые дистрибутивы не подписывают свои контрольные суммы PGP. Вам нужно будет только выполнить шаги 1, 2 и 5, но этот процесс гораздо более уязвим. В конце концов, если злоумышленник может заменить файл ISO для загрузки, он также может заменить контрольную сумму.

Использование PGP намного более безопасно, но не надежно. Злоумышленник все еще может заменить этот открытый ключ своим собственным, он может заставить вас думать, что ISO является законным. Однако, если открытый ключ размещен на другом сервере — как в случае с Linux Mint — это становится гораздо менее вероятным (так как им придется взломать два сервера вместо одного). Но если открытый ключ хранится на том же сервере, что и ISO и контрольная сумма, как в случае с некоторыми дистрибутивами, тогда он не обеспечивает такой безопасности.

Тем не менее, если вы пытаетесь проверить подпись PGP в файле контрольной суммы, а затем проверяете свою загрузку с этой контрольной суммой, это все, что вы можете сделать в качестве конечного пользователя при загрузке ISO-образа Linux. Вы все еще намного более защищены, чем люди, которые не беспокоятся.

Заключение

Да, такой вот он удобный, образ ISO. Изготовили — и выжигаете из него
сколько угодно дисков. Если ошибок нет, то получатся точные копии. И загрузочные
флэшки из ISO можно создавать, поскольку нынче практически все образы с
дистрибутивами GNU/Linux являются гибридными, LiveCD/LiveUSB.

Остаётся лишь ещё раз напомнить о необходимости проверять образы и
выжженные из них диски на предмет наличия ошибок.

Предыдущие публикации:

  • Что такое FTP-сервер
  • Рабочий стол GNOME 2
  • Рабочий стол GNOME 3
  • 5
    способов бесплатно получить целевой трафик на свой блог
  • 6
    SEO-хитростей для YouTube, о которых мало кто говорит
  • Планшетные компьютеры
  • Компьютерная техника
    — выбираем правильно
  • ALT Linux 6.0
    Centaurus (Альт Линукс 6.0 Кентавр)
  • Краткий обзор Nokia 808
    PureView
  • Dota
    (Defence of the Ancients). Ждем выхода Dota 2

Последнее редактирование: 2012-03-23 03:41:37

Метки материала:
и, с, как, что такое, iso, что, образ, ним, что такое iso, как с, iso-образ, работать, такое, и как, с ним, что такое iso-образ, образ и, и как с, как с ним, как с ним работать, оптические диски, накопители данных, ит, it, данные, работаем на компьютере

Вывод

Итак, было рассмотрено понятие «контрольной суммы». Стало ясно, для чего она используется. Для рядового пользователя это легкий вариант для того, чтобы проверить файл на целостность и соответствие оригиналу. Были описаны полезные утилиты для вычисления и сравнения хеш-сумм. Первая способна сравнивать различные суммы, а вторая только по одному алгоритму, но зато не требует инсталляции, что актуально при отсутствии прав администратора.

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

Проверка целостности скачанных файлов

Полезные советы
Проигрыватели видео
Кодеки
Download-менеджеры
Torrent-клиенты
Настройки программ
Проверка целостности скачанных файлов

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

(размер: ~ 87кб)

Программа не требует установки. Для пользователей операционных систем Linux, Unix, MacOS и других — аналогичные программы смотрите прямо в составе своей ОС.

Ссылка на основную публикацию