close

Вход

Забыли?

вход по аккаунту

?

ЛР3 MD5 Алексеевич

код для вставкиСкачать
 МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ Учреждение образование "Белорусский государственный технологический университет" Кафедра информационных систем и технологий Лабораторная работа №3
"Алгоритм хеширования MD5" Выполнила: студентка 5 курса 9 группы факультета ИДиП Алексеевич А.Б., Проверил: Шиман Д.В. Минск 2013
Оглавление
Введение3
1.Теоретическое введение5
2.Постановка задачи7
3.Решение задачи8
Вывод14
Введение
Шифрование - обратимое преобразование информации в целях сокрытия от неавторизованных лиц, с предоставлением, в это же время, авторизованным пользователям доступа к ней. С помощью шифрования обеспечиваются три состояния безопасности информации:
* Конфиденциальность. Шифрование используется для сокрытия информации от неавторизованных пользователей при передаче или при хранении.
* Целостность. Шифрование используется для предотвращения изменения информации при передаче или хранении.
* Идентифицируемость. Шифрование используется для аутентификации источника информации и предотвращения отказа отправителя информации от того факта, что данные были отправлены именно им.
Шифрование применяется для хранения важной информации в ненадёжных источниках и передачи её по незащищенным каналам связи. Такая передача данных представляет из себя два взаимно обратных процесса:
* Перед отправлением данных по линии связи или перед помещением на хранение они подвергаются зашифрованию.
* Для восстановления исходных данных из зашифрованных к ним применяется процедура расшифрования.
Шифрование состоит из двух составляющих: зашифрование и расшифрование.
Пусть существуют два множества, представляющее данные - и , и каждая из двух функций (шифрующая и расшифровывающая) является отображением одного из этих множеств в другое.
* Шифрующая функция: * Расшифровывающая функция: Элементы этих множеств - и являются аргументами соответствующих функций. Так же, в эти функции уже включено понятие ключа. То есть тот необходимый ключ для шифрования или расшифрования является частью функции. Это позволяет рассматривать процессы шифрования абстрактно, вне зависимости от структуры используемых ключей. Хотя, в общем случае, для каждой из этих функций аргументами являются данные и вводимый ключ.
Если для шифрования и расшифрования используется один и тот же ключ , то такой алгоритм относится к симметричным. Если же из ключа шифрования алгоритмически сложно получить ключ расшифрования, то алгоритм относят к асимметричным, то есть к алгоритмам с открытым ключом.
Для применения в целях шифрования эти функции, в первую очередь, должны быть взаимно обратными. Важной характеристикой шифрующей функции является ее криптостойкость. Косвенной оценкой криптостойкости является оценка взаимной информации между открытым текстом и шифротекстом, которая должна стремиться к нулю.
Криптографическая стойкость - способность криптографического шифра противостоять криптоанализу. Любая система шифрования, кроме абсолютно криптостойких, может быть взломана простым перебором всех возможных в данном случае ключей. Но перебирать придется до тех пор, пока не отыщется тот единственный ключ, который и поможет расшифровать шифротекст.
Методы шифрования:
* Симметричное шифрование. В симметричных криптосистемах для шифрования и расшифрования используется один и тот же ключ. Отсюда название - симметричные. Алгоритм и ключ выбирается заранее и известен обеим сторонам. Сохранение ключа в секретности является важной задачей для установления и поддержки защищенного канала связи. В связи этим, возникает проблема начальной передачи ключа (синхронизации ключей). Кроме того существуют методы криптоатак, позволяющие так или иначе дешифровать информацию не имея ключа или же с помощью его перехвата на этапе согласования. В целом эти моменты являются проблемой криптостойкости конкретного алгоритма шифрования и являются аргументом при выборе конкретного алгоритма.
* Асимметричное шифрование (с открытым ключом). В системах с открытым ключом используются два ключа - открытый и закрытый, связанные определенным математическим образом друг с другом. Открытый ключ передаётся по открытому (то есть незащищённому, доступному для наблюдения) каналу и используется для шифрования сообщения и для проверки ЭЦП. Для расшифровки сообщения и для генерации ЭЦП используется секретный ключ.
1. Теоретическое введение
Алгоритм MD5 является алгоритмом вычисления "хэш-функции" (message digest) для различных целей - шифрование паролей, проверка целостности файлов, и т.д. На вход подается поток данных произвольной длины, а на выходе получаем хэш длиной 128 бит. Сила этого алгоритма заключается в том, что практически очень сложно, почти невозможно, найти две строки, дающие одинаковый хэш. Однако, при определенных условиях, возможно получение исходного текста. Но этот метод основан на определенном выборе начальных значений, поэтому не представляет практической ценности. Также MD5 алгоритм используется в приложениях криптографии и электронно-цифровых подписей для генерации ключа шифрования. При разработке данного алгоритма принималось во внимание скорость работы на современных 32-разрядных системах, а также требование минимизации используемой памяти. По сравнению с MD4, MD5 более медленный (примерно на 15 процентов, как будет показано в конце статьи), чем MD4, но в то же время и более устойчивым, в силу особенностей построения. О сравнении скорости MD4 и MD5 будет отдельный параграф. Введем следующие обозначения: под "словом" будет подразумеваться количество информации в 32 бита, а под "байтом" - 8 бит. Последовательность бит будем рассматривать как последовательность байт, старший байт идет первым, младший - последним. Аналогично представляется последовательность байт, как последовательность слов, только младший байт идет первым. На вход алгоритма подается входной поток данных длиной N. N может быть произвольным целым неотрицательным числом. Это число может быть как кратным, так и нет, 8. Процесс вычисления MD5 суммы состоит из нескольких шагов. Рассмотрим их подробнее. Шаг 1: выравнивание потока. Процесс выравнивания заключается в дописывании в конец потока 1, а затем некоторого числа нулей. Нули добававляются до тех пор, пока длина всего потока не станет равной 512*N+448, т.е. равной 448 по модулю 512. Такое выравнивание происходит в любом случае, даже если длина потока уже удов
летворяет данному условию. Шаг 2: добавление длины. Затем в конец дописывается двоичное представление длины первоначального потока-всего 64 бита. Если же длина больше чем
2^64, то берутся младшие 64 бита. Это добавление представляет собой два "слова", младшее идет первым, за ним старшее. После этого суммарная длина потока станет кратной 16 32-битным словам. Дальнейшее вычисления основываются на представлении этого расширенного потока как массива слов длины N: A[0, ... N - 1]. Шаг 3: инициализация MD буфера. При вычислениях будет использоваться буфер из 4 слов - A, B, C, D, в котором хранятся результаты промежуточных вычислений. Начальные значения, находящиеся в этом буфере, следующие: A = 0x67452301 B = 0xEFCDAB89 C = 0x98BADCFE D = 0x10325476 Шаг 4: обработка потока блоками по 16 слов. Для дальнейших вычислений нам необходимо ввести следующие функции, зависящие от 3 параметров-"слов". Результатом работы этих функций будет также "слово". F(x, y, z) = (x & y) | (~x & z) G(x, y, z) = (x & z) | (y & ~z) H(x, y, z) = x ^ y ^ z I(x, y, z) = y ^ (x | ~z) Здесь "&" обозначает побитовая операция "AND", "|" побитовая операция "XOR", "^" операция побитового "XOR", "~" операция побитового "NOT".
На этом этапе нам также понадобится таблица констант T[1...64], заполненная с помощью следующей формулы: T[i] = [4294967296 * abs(sin(i))] , где [] есть операция взятия целой части. Определим также операцию циклического сдвига слова X на Y: X<<<Y.
2. Постановка и решение задачи
В данной лабораторной работе требуется разработать программу для зашифрования исходного сообщения с помощью алгоритма хеширования MD5.
Для выполнения работы использовался язык программирования С#.
Пример работы программы представлен на рисунке 1.
Рисунок 1. Пример работы программы.
На вход алгоритма подается входной поток данных длиной N. N может быть произвольным целым неотрицательным числом. Это число может быть как кратным, так и нет, 8. Процесс вычисления MD5 суммы состоит из нескольких шагов: выравнивание потока (в конец потока записывается 1, а затем некоторого числа нулей; дополняются нулями до тех пор, пока длина всего потока не станет равной 512*N+448, т.е. равной 448 по модулю 512), добавление длины (в конец дописывается двоичное представление длины сообщения), инициализация буфера (используется буфер из 4 слов A, B, C, D, в которых хранятся промежуточные вычисления), обработка потока блоками по 16 слов (вычисляются стандартные функции) и вывод MD5 (выводится слова в обратном порядке).
str = textBox1.Text;
var strBuilder = new StringBuilder();
var arra = Encoding.UTF8.GetBytes(str);
var array = arra.ToList();
label2.Text = Convert.ToString(array.Count);
int count = array.Count / 64;
if (count * 64 + 56 - array.Count <= 0)
{
count++;
}
label4.Text = Convert.ToString(count + 1);
int res = count * 64 + 56 - array.Count;
label6.Text = Convert.ToString(res);
array.Add(128);
for (int i = 0; i < res - 1; i++)
{
array.Add(0);
}
byte[] newarray = BitConverter.GetBytes(arra.Length * 8);
array.AddRange(newarray);
for (int i = 0; i < 8 - newarray.Length; i++)
{
array.Add(0);
}
uint A = 0x67452301;
uint B = 0xefcdab89;
uint C = 0x98badcfe;
uint D = 0x10325476;
int S11 = 7;
int S12 = 12;
int S13 = 17;
int S14 = 22;
int S21 = 5;
int S22 = 9;
int S23 = 14;
int S24 = 20;
int S31 = 4;
int S32 = 11;
int S33 = 16;
int S34 = 23;
int S41 = 6;
int S42 = 10;
int S43 = 15;
int S44 = 21;
for (int k = 0; k <= count; k++)
{
var x = new uint[16];
listBox1.Items.Add("Шаг " + k + "\n");
listBox1.Items.Add("A: " + A + "\n");
listBox1.Items.Add("B: " + B + "\n");
listBox1.Items.Add("C: " + C + "\n");
listBox1.Items.Add("D: " + D + "\n");
for (int i = k * 64, j = 0; i < k * 64 + 64; i += 4, j++)
{
var tt = array.GetRange(i, 4).ToList();
var X = BitConverter.ToUInt32(tt.ToArray(), 0);
x[j] = X;
listBox1.Items.Add("X[" + j + "] = " + X + "\n");
}
uint a = A, b = B, c = C, d = D;
/* Round 1 */
listBox1.Items.Add("Раунд 1\n");
FF(ref a, b, c, d, x[0], S11, 0xd76aa478); /* 1 */
FF(ref d, a, b, c, x[1], S12, 0xe8c7b756); /* 2 */
FF(ref c, d, a, b, x[2], S13, 0x242070db); /* 3 */
FF(ref b, c, d, a, x[3], S14, 0xc1bdceee); /* 4 */
FF(ref a, b, c, d, x[4], S11, 0xf57c0faf); /* 5 */
FF(ref d, a, b, c, x[5], S12, 0x4787c62a); /* 6 */
FF(ref c, d, a, b, x[6], S13, 0xa8304613); /* 7 */
FF(ref b, c, d, a, x[7], S14, 0xfd469501); /* 8 */
FF(ref a, b, c, d, x[8], S11, 0x698098d8); /* 9 */
FF(ref d, a, b, c, x[9], S12, 0x8b44f7af); /* 10 */
FF(ref c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
FF(ref b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
FF(ref a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
FF(ref d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
FF(ref c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
FF(ref b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
listBox1.Items.Add("a = " + a + "\n b = " + b + "\n c = " + c + "\n d = " + d + "\n");
/* Round 2 */
listBox1.Items.Add("Раунд 2\n");
GG(ref a, b, c, d, x[1], S21, 0xf61e2562); /* 17 */
GG(ref d, a, b, c, x[6], S22, 0xc040b340); /* 18 */
GG(ref c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
GG(ref b, c, d, a, x[0], S24, 0xe9b6c7aa); /* 20 */
GG(ref a, b, c, d, x[5], S21, 0xd62f105d); /* 21 */
GG(ref d, a, b, c, x[10], S22, 0x2441453); /* 22 */
GG(ref c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
GG(ref b, c, d, a, x[4], S24, 0xe7d3fbc8); /* 24 */
GG(ref a, b, c, d, x[9], S21, 0x21e1cde6); /* 25 */
GG(ref d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
GG(ref c, d, a, b, x[3], S23, 0xf4d50d87); /* 27 */
GG(ref b, c, d, a, x[8], S24, 0x455a14ed); /* 28 */
GG(ref a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
GG(ref d, a, b, c, x[2], S22, 0xfcefa3f8); /* 30 */
GG(ref c, d, a, b, x[7], S23, 0x676f02d9); /* 31 */
GG(ref b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
listBox1.Items.Add("a = " + a + "\n b = " + b + "\n c = " + c + "\n d = " + d + "\n");
/* Round 3 */
listBox1.Items.Add("Раунд 3\n");
HH(ref a, b, c, d, x[5], S31, 0xfffa3942); /* 33 */
HH(ref d, a, b, c, x[8], S32, 0x8771f681); /* 34 */
HH(ref c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
HH(ref b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
HH(ref a, b, c, d, x[1], S31, 0xa4beea44); /* 37 */
HH(ref d, a, b, c, x[4], S32, 0x4bdecfa9); /* 38 */
HH(ref c, d, a, b, x[7], S33, 0xf6bb4b60); /* 39 */
HH(ref b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
HH(ref a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
HH(ref d, a, b, c, x[0], S32, 0xeaa127fa); /* 42 */
HH(ref c, d, a, b, x[3], S33, 0xd4ef3085); /* 43 */
HH(ref b, c, d, a, x[6], S34, 0x4881d05); /* 44 */
HH(ref a, b, c, d, x[9], S31, 0xd9d4d039); /* 45 */
HH(ref d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
HH(ref c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
HH(ref b, c, d, a, x[2], S34, 0xc4ac5665); /* 48 */
listBox1.Items.Add("a = " + a + "\n b = " + b + "\n c = " + c + "\n d = " + d + "\n");
/* Round 4 */
listBox1.Items.Add("Раунд 4\n");
II(ref a, b, c, d, x[0], S41, 0xf4292244); /* 49 */
II(ref d, a, b, c, x[7], S42, 0x432aff97); /* 50 */
II(ref c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
II(ref b, c, d, a, x[5], S44, 0xfc93a039); /* 52 */
II(ref a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
II(ref d, a, b, c, x[3], S42, 0x8f0ccc92); /* 54 */
II(ref c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
II(ref b, c, d, a, x[1], S44, 0x85845dd1); /* 56 */
II(ref a, b, c, d, x[8], S41, 0x6fa87e4f); /* 57 */
II(ref d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
II(ref c, d, a, b, x[6], S43, 0xa3014314); /* 59 */
II(ref b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
II(ref a, b, c, d, x[4], S41, 0xf7537e82); /* 61 */
II(ref d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
II(ref c, d, a, b, x[2], S43, 0x2ad7d2bb); /* 63 */
II(ref b, c, d, a, x[9], S44, 0xeb86d391); /* 64 */
listBox1.Items.Add("a = " + a + "\n b = " + b + "\n c = " + c + "\n d = " + d + "\n");
A += a;
B += b;
C += c;
D += d;
}
listBox1.Items.Add("Хэш: \n" + ConvertToHexString(A) + ConvertToHexString(B) + ConvertToHexString(C) +
ConvertToHexString(D));
Вывод
В результате выполнения данной лабораторной работы была разработана программа, позволяющая зашифровать сообщение алгоритмом хеширования MD5.
2
Документ
Категория
Рефераты
Просмотров
105
Размер файла
72 Кб
Теги
алексеева, лр3, md5
1/--страниц
Пожаловаться на содержимое документа