Разработка программы для подсчета хэш-суммы файла и текста с графическим интерфейсом
Введение
В настоящее время с хэшированием мы сталкиваемся практически на каждом
шагу: при работе с веб браузером, различными компиляторами, текстовыми
редакторами и переводчиками, базами данных и т.д.
Под хэшированием обычно понимают процесс преобразования входного массива
данных произвольной длины в выходную битовую строку фиксированной длины.
Такие
преобразования также называются хэш-функциями или функциями свёртки, а их
результаты называют хэшем
<#"552443.files/image001.gif">
Это хэш-значение вместе со следующим блоком сообщения становится
следующим входом функции сжатия. Хэш-значением всего сообщения является
хэш-значение последнего блока.
Хэшируемый вход должен каким-то способом содержать бинарное представление
длины всего сообщения. Таким образом преодолевается потенциальная проблема,
вызванная тем, что сообщения различной длины могут давать одно и то же
хэш-значение. Иногда такой метод называется MD-усилением.
1.3
Описание алгоритма
Существует
множество алгоритмов хэширования с различными характеристиками (разрядность
<#"552443.files/image002.gif">
Рис.
0. Главный цикл MD5
Рис. 2. Одна операция MD5
F(X,Y,Z) = (X Ù Y) Ú ((ØX) Ù Z)
G(X,Y,Z) = (X Ù Z) Ú (Y Ù (ØZ))(X,Y,Z) = X Å Y Å Z(X,Y,Z) = Y Å (X Ú (ØZ))
(Å - это XOR, Ù - AND, Ú - OR, а Ø - NOT.)
Эти функции спроектированы так, чтобы, если соответствующие биты X, Y и Z
независимы и не смещены, каждый бит результата также был бы независимым и
несмещенным. Функция F -
это побитовое условие: если X, то Y, иначе Z. Функция H -
побитовая операция четности.
Если Mj обозначает j-ый подблок сообщения (от 0 до 15), а <<<s обозначает циклический сдвиг влево
на s битов, то используются следующие
четыре операции:
FF(a,b,c,d,Mj,s,ti) означает a = b + ((a + F(b,c,d) + Mj + ti)
<<<s)(a,b,c,d,Mj,s,ti) означает a = b + ((a + G(b,c,d) + Mj + ti) <<<s)(a,b,c,d,Mj,s,ti)
означает a = b + ((a + H(b,c,d) +
Mj + ti) <<<s)(a,b,c,d,Mj,s,ti) означает a = b + ((a + I(b,c,d) + Mj + ti) <<<s)
Четыре этапа (64 действия выглядят следующим образом):
Этап
1:(a, b, c, d, M0, 7, 0xd76aa478)(d, a, b, c, M1, 12, 0xe8c7b756)(c, d, a, b,
M2, 17, 0x242070db)(b, c, d, a, M3, 22, 0xc1bdceee)(a, b, c, d, M4, 7,
0xf57c0faf)(d, a, b, c, M5, 12, 0x4787c62a)(c, d, a, b, M6, 17, 0xa8304613)(b,
c, d, a, M7, 22, 0xfd469501)(a, b, c, d, M8, 7, 0x698098d8)(d, a, b, c, M9, 12,
0x8b44f7af)(c, d, a, b, M10, 17, 0xffff5bb1)(b, c, d, a, M11, 22,
0x895cd7be)(a, b, c, d, M12, 7, 0x6b901122)(d, a, b, c, M13, 12, 0xfd987193)(c,
d, a, b, M14, 17, 0xa679438e)(b, c, d, a, M15, 22, 0x49b40821)
Этап
2:(a, b, c, d, M1, 5, 0xf61e2562)(d, a, b, c, M6, 9, 0xc040b340)(c, d, a, b,
M11, 14, 0x265e5a51)(b, c, d, a, M0, 20, 0xe9b6c7aa)(a, b, c, d, M5, 5,
0xd62fl05d)(d, a, b, c, M10, 9, 0x02441453)(c, d, a, b, M15, 14, 0xd8ale681)(b,
c, d, a, M4, 20, 0xe7d3fbc8)(a, b, c, d, M9, 5, 0x2,lelcde6)(d, a, b, c, M14,
9, 0xc33707d6)(c, d, a, b, M3, 14, 0xf4d50d87)(b, c, d, a, M8, 20,
0x455al4ed)(a, b, c, d, M13, 5, 0xa9e3e905)(d, a, b, c, M2, 9, 0xfcefa3f8)(c,
d, a, b, M7, 14, 0x676f02d9)(b, c, d, a, M12, 20, 0x8d2a4c8a)
Этап
3:(a, b, c, d, M5, 4, 0xfffa3942)(d, a, b, c, M8, 11, 0x8771f681)(c, d, a, b,
M11, 16, 0x6d9d6122)(b, c, d, a, M14, 23, 0xfde5380c)(a, b, c, d, M1, 4,
0xa4beea44)(d, a, b, c, M4, 11, 0x4bdecfa9)(c, d, a, b, M7, 16, 0xf6bb4b60)(b,
c, d, a, M10, 23, 0xbebfbc70)(a, b, c, d, M13, 4, 0x289b7ec6)(d, a, b, c, M0,
11, 0xeaa127fa)(c, d, a, b, M3, 16, 0xd4ef3085)(b, c, d, a, M6, 23,
0x04881d05)(a, b, c, d, M9, 4, 0xd9d4d039)(d, a, b, c, M12, 11, 0xe6db99e5)(c,
d, a, b, M15, 16, 0x1fa27cf8)(b, c, d, a, M2, 23, 0xc4ac5665)
Этап
4:(a, b, c, d, M0, 6, 0xf4292244)(d, a, b, c, M7, 10, 0x432aff97)(c, d, a, b,
M14, 15, 0xab9423a7)(b, c, d, a, M5, 21, 0xfc93a039)(a, b, c, d, M12, 6,
0x655b59c3)(d, a, b, c, M3, 10, 0x8f0ccc92)(c, d, a, b, M10, 15, 0xffeff47d)(b,
c, d, a, M1, 21, 0x85845ddl)(a, b, c, d, M8, 6, 0x6fa87e4f)(d, a, b, c, M15,
10, 0xfe2ce6e0)(c, d, a, b, M6, 15, 0xa3014314)(b, c, d, a, M13, 21,
0x4e081lal)(a, b, c, d, M4, 6, 0xf7537e82)(d, a, b, c, M11, 10, 0xbd3af235)(c,
d, a, b, M2, 15, 0x2ad7d2bb)(b, c, d, a, M9, 21, 0xeb86d391)
На i-ом этапе ti является целой частью 232*abs(sin(i)), где i измеряется в радианах.
После всего этого a, b, c и d
добавляются к A, B, C и D, соответственно, и алгоритм
продолжается для следующего блока данных. Окончательным результатом служит
объединение A,
B, C и D.
1.4
Безопасность
MD5
Рон Ривест привел следующие улучшения MD5 в сравнении с MD4:
1
Добавился
четвертый этап.
2 Теперь в каждом действии используется
уникальная прибавляемая константа.
3 Функция G на этапе 2 с ((XÙY)Ú(XÙZ)Ú(YÙZ)) была изменена на (XÙZ)Ú(YÙ(ØZ)), чтобы сделать G менее симметричной.
4
Теперь каждое
действие добавляется к результату предыдущего этапа. Это обеспечивает более
быстрый лавинный эффект.
5 Изменился порядок, в котором
использовались подблоки сообщения на этапах 2 и 3, чтобы сделать шаблоны менее
похожими.
6 Значения циклического сдвига влево на
каждом этапе были приближенно оптимизированы для ускорения лавинного эффекта.
7 Четыре сдвига, используемые на каждом
этапе, отличаются от значений, используемых на других этапах.
Том Берсон (Tom Berson) попытался применить
дифференциальный криптоанализ к одному этапу MD5, но его вскрытие не оказалось эффективным ни для одного из
четырех этапов. Более успешное вскрытие ден Боера и Босселаерса, использующее
функцию сжатия, привело к обнаружению столкновений в MD5 Само по себе это вскрытие невозможно для вскрытия MD5 в практических приложениях, оно не
влияет и на использование MD5 в
алгоритмах шифрования, подобных Luby-Rackoff.
Успех этого вскрытия означает только, что одна из основных целей
проектирования MD5- создать
устойчивую к столкновениям функцию сжатия не была достигнута.
Хотя справедливо, что "кажется, что у функции сжатия есть слабое
место, но это практически не влияет на безопасность хэш-функции "
Глава 2.
Описание программы, реализующей алгоритм MD5 на Delphi
2.1
Анализ технического задания и постановка задачи проектирования
Согласно заданию необходимо разработать программу вычисляющую хэш-код
сообщения. Для решения поставленной задачи был выбран язык программирования Delphi, так как он является языком высокого
уровня и позволяет быстро и эффективно создавать приложения. Delphi - это
продукт Borland International, высокопроизводительный инструмент визуального
построения приложений включает в себя настоящий компилятор кода и предоставляет
средства визуального программирования, несколько похожие на те, что можно
обнаружить в Microsoft Visual Basic или в других инструментах визуального
проектирования. В основе Delphi лежит язык Object Pascal, который является
расширением объектно-ориентированного языка Pascal.
Преимущества Delphi по сравнению с аналогичными программными продуктами.
быстрота разработки приложения;
высокая производительность разработанного приложения;
низкие требования разработанного приложения к ресурсам компьютера;
наращиваемость за счет встраивания новых компонент и инструментов в среду
Delphi;
возможность разработки новых компонент и инструментов собственными
средствами Delphi (существующие компоненты и инструменты доступны в исходных
кодах);
Система программирования Delphi рассчитана на программирование различных
приложений и предоставляет большое количество компонентов для этого.
Поскольку данная программа является приложением Windows, то для ее
реализации будем использовать стандартный подход при написании программ под
Windows с использованием графического интерфейса. Так отдельно создается форма
с визуальными компонентами, для различных визуальных компонент сопоставляются
процедуры - обработчики. Далее, как только происходит событие на каком-то из
визуальных компонент (щелчок мыши, нажатие на кнопку или пункт меню),
операционная система посылает приложению соответствующее сообщение, и
запускается соответствующий обработчик именно для этого события. Тогда решение
задачи можно разбить на 2 этапа:
. Разработка визуального интерфейса пользователя, на основе
экранных форм среды Delphi и визуальных компонент.
. Разработка обработчиков событий от элементов экранных форм,
разработка алгоритмов и программных кодов действий.
2.2
Разработка экранных форм программы
В Windows основной элемент пользовательского интерфейса - форма. В Delphi
каждый проект имеет, по крайней мере, одно окно - главное окно приложения. Все
окна в Delphi основаны на объекте TForm. Формы имеют свои свойства, события и
методы, при помощи которых мы можем управлять видом и поведением формы. Форма,
это обычный компонент Delphi, но в отличие от других, её нет на панели
компонентов. В данном проекте используются 2 формы
- f_main (основная форма)
- f_info (форма «О программе», содержит информацию о
программе, версию продукта, ФИО разработчика)
Список и назначение основных компонентов, расположенных на главной форме f_main:
- Label. Этот компонент используется для
отображения различных надписей на формах. Основное свойство для этого
компонента -Caption. Именно оно и отвечает за надпись на компоненте.
- Edit. Представляет собой однострочное
текстовое поле, служащее для ввода данных пользователем. Основным свойством
компонента, передающим введённую информацию, является свойство Edit1.Text типа
String. На главной форме программы расположено два таких компонента e_file (предназначен для ввода полного пути к файлу, для
которого необходимо вычислить хэш) и e_text (необходим для ввода текста, для
которого так же нужно вычислить хэш).
- RzToolbar. Это панель, которая управляет компоновкой инструментальных
быстрых кнопок и других компонентов.