Цифровая подпись

Механизм CRC чрезвычайно полезен для проверки файлов, загружаемых из сетевых информационных служб. Если кто-то сообщает мне, что переданная ему через сеть ZD Net утилита вдруг без видимой причины перестает работать, то первым делом я прошу его создать ее архивный файл с помощью программы PKZIP и набрать команду PKZIP -V для просмотра созданного .ZIP файла. Среди прочих параметров он увидит также 32-разрядное значение параметра CRC, рассчитанное программой PKZIP для несжатого файла. Если вычисленное значение параметра CRC для gjkextyyjq утилиты не совпадает

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

Можно организовать собственный контроль CRC для идентификации файлов; для этого потребуется переписать через службу PC Magazine Online файл CRC.COM. (Он находится в библиотеке Tutor форума Utilities/Tips службы ZD Net/CompuServe и в файле V15N07.ZIP (на сервере по адресу http://www.pcmag.com). CRC.COM - это утилита DOS, которой в качестве входного параметра указывается имя файла. Исходя из содержащейся в нем информации она рассчитывает 32-разрядное значение контроля CRC. В программе использован известный алгоритм расчета параметра CRC-32, применяемый PKZIP и сетевых адаптерах Token-Ring фирмы IBM. Этот алгоритм отличается высоким быстродействием (исходный текст полностью написан на языке ассемблера;

производится буферизация при чтении/записи с диска; прекрасно реализован алгоритм расчета CRC-32 - все это позволяет сократить до минимума объем производимых вычислений) и обработает файлы любого размера. Теперь при пересылке файлов через модем утилита CRC.COM сможет оказать вам неоценимую услугу - дать уверенность, что информация передана без искажений.

Получив по сети файл CRC.COM, первым делом проверьте сам этот файл, набрав в строке DOS команду:

CRC CRC.COM

Если полученное значение параметра CRC не равно 86C23FA, значит файл следует загрузить снова.

Алгоритмы хэширования

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

Более высокой надежности, чем при контроле CRC, можно достичь при использовании односторонних алгоритмов хэширования; результатом их работы являются особые "хэшированные" значения. Под термином "односторонние" понимается следующее: имея на входе А, можно без особого труда получить на выходе В, но сделать обратное - то есть из В получить А - невозможно, или, во всяком случае, практически невозможно. Важная отличительная особенность любого хорошего алгоритма хэширования заключается в том, что генерируемые с его помощью значения настолько уникальны и трудноповторимы, что вряд ли кто-то даже с помощью серии суперкомпьютеров Cray и затратив колоссальное количество времени, сможет найти два набора входных данных, имеющих одинаковые значение хэширования. Как правило, эти параметры занимают не менее 128 разрядов. Чем больше их длина, тем труднее воспроизвести входной набор данных, то есть найти последовательность, обеспечивающую соответствующий результат.

Среди односторонних алгоритмов хэширования наибольшей известностью пользуются два из них: алгоритм MD5 (message digest), разработанный профессором Массачусетского технологического института Роном Ривестом (Ron Rivest) (один из авторов популярной криптосистемы с ключом общего пользования RSA), и алгоритм Secure Hash Algorith (SHA), созданный совместными усилиями Национального института по стандартизации и технологическим разработкам (NIST) и Управления национальной безопасности США (NSA). Результат анализа последовательности входных данных с помощью алгоритма MD5 - 128-разрядный цифровой идентификатор, а при использовании алгоритма SHA - 160-разрядное значение. Учитывая, что пока никому не удалось подобрать ключ ни к одному из названных алгоритмов, можно считать, что восстановление исходных данных по некоторому хэшированному значению, являющемуся результатом работы алгоритма SNA либо по некоторому коэффициенту алгоритма MD5 нереально. Таким образом, если вам отправили какой-то файл и идентификатор, полученный в результате применения к нему алгоритма MD5 или SHA, и если вы выполнили с ним тот же алгоритм хэширования и ваш результат совпал с исходным значением, определенно можно быть уверенным, что принятый вами файл не подвергся искажениям.

Алгоритм MD5

Терминология

В данном случае "word" является 32-х битной величиной, "byte" - 8-ми битная величина. Последовательность бит должна интерпретироваться таким же способом что и последовательность байт, где каждая последовательная группа из восьми бит интерпретируется как байт с старшим (наиболее значащим) битом каждого байта следующим в последовательности первым. Подобно последовательности байт должна интерпретироваться и последовательность 32-битных слов.

Запись x_i означает "x sub i" (т.е. х с индексом i). Если некоторое выражение используется как индекс, то оно берется в фигурные скобки,например x_{i+1}. Символ " ^ " используется для операций возведения в степень, т.е. x^i следует понимать как х в степени i.

Символ "+" обозначает операцию сложения слов (т.е. сложение по модулю 2^32). Далее x << s будет означать вычисление нового 32-х битного значения х путем циклического сдвига (вращения) предыдущего значения х на s бит влево. not(x) - поразрядная операция отрицания , x v y - поразрадное ИЛИ(OR) операндов x и y , x xor y – поразрядное исключающее ИЛИ(XOR) операндов x и y , и xy - поразрядное И(AND) операндов x и y.

Краткое описание алгоритма MD5

Вначале допускаем, что имеем на входе сообщение из b-бит, и что мы желаем найти Message Digest этой последовательности бит. Число b является произвольным неотрицательным целым; b может быть равным нулю,оно не обязательно должно быть множителем 8, и оно может быть произвольно большим.Представим последовательность бит сообщения как:

m0 m1 m2 . . . . . . m{b-1}

Следующие пять этапов выполняются для подсчета Message Digest сообщения.

Этап 1.Присоединение заполняющих (дополнительных) битов.

Сообщение расширяется так,чтобы его длина (в битах) совпадала с 448,по модулю 512. Дополнение всегда выполняется, даже если длина сообщения - уже совпадает с 448 по модулю 512. Дополнение выполняется следующим образом: одиночный "1" бит добавляется к сообщению, и далее "0" биты добавляются так что длина в битах заполняемого сообщения соответствует 448 по модулю 512.В общем случае,минимум один бит и максимум 512 бит добавляется.


Страница: