Применение хеш-функций

Схема защищённого хранения паролей с помощью хеширования. Конкретные криптографические хеш-функции. Хеш-функции в электронно-цифровой подписи. Функции шифрования MySQL. Обратимое и необратимое шифрование. Логика выполнения и основные шаги алгоритма MD5.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 23.09.2016
Размер файла 759,8 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Применение хеш-функций

Безопасное хранение паролей с помощью хеш-функций

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

Можно хранить пароли в зашифрованном виде. Это чуть лучше, чем в сыром, но бесполезно, если кто-то, способный найти файл хранения, знает алгоритм и ключ шифра. А вот если прибегнуть к хешированию - использовать хеш-функции с длинными хеш-значениями (скажем, 256, 512, 1024 бит), то завладеть чужим аккаунтом сложно любому, кто не знает всего одного - пароля. Предполагается, что пользователь не придумал тупой пароль вроде "111".

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

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

Наглядно эту схему защищённого хранения паролей с помощью хеширования можно нарисовать следующим образом:

Список пользователей

Логин

Хеш

Ivan

101011001111

Petr

1111000010120

Введите логин и пароль

Petr

password

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

Хеш-функции в электронно-цифровой подписи

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

Другие применения хеш-функций

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

Конкретные криптографические хеш-функции

Большинство хорошо известных хеш-функции разработана на западе. Особо известны семейства SHA и MD, из них самые знаменитые - SHA1 и MD5, хотя они уже не лучшие представители своих "семей". Об этих хеш-функциях часто говорят в статьях и на форумах. Из других зарубежных хеш-функций можно рассмотреть, например, RIPEMD-160, разработанную в Бельгии.

Но не следует зацикливаться только на иностранных функциях хеширования. У нас есть ГОСТ Р34.11-2012 - российский стандарт хеширования с 256-битными хеш-значениями. Заметим: SHA1 даёт только 160-битный хеш. Принципиальная особенность ГОСТовского хеширования: оно базируется на ГОСТовском же алгоритме шифрования.

Также заслуживает внимание семейство Skein, обеспечивающее хеширование с выходами 256, 512, 1024 бит. Заметим: самая "длинная" из хвалёных хеш-функций SHA2 даёт хеш в 512 бит.

Безопасность и MySQL

Здесь будут рассмотрены многочисленные функции шифрования данных, которые входят в состав СУБД MySQL. Чаще всего шифрованию подвергаются пароли. В случае взлома базы данных злоумышленник получит доступ только к зашифрованным записям, на расшифровку которых потребуется время, за которое пароли могут стать не актуальными.

Функции шифрования MySQL

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

Примечание. Если функции передается в качестве одного из аргументов значение NULL, она также возвращает NULL.

Таблица. Функции шифрования MySQL

Функции

Описание

AES_ENCRYPT(str, key_str)

Принимает в качестве аргумента str строку, которую необходимо подвергнуть шифрованию, и секретный ключ key_str. Входные аргументы могут быть любой длины ;

AES_DECRYPT(crypt_str, key_str)

Принимает в качестве первого аргумента зашифрованную при помощи AES_ENCRYPT() строку. Ключ key_str при этом должен совпадать как в первой так и во второй строках. Если функция AES_DECRYPT() обнаруживает некорректные данные или некорректное заполнение строки, должно возвращаться значение NULL. Однако AES_DECRYPT() вполне может вернуть величину отличную от NULL, или просто "мусор"

ENCODE(str, pass_str)

Шифрует строку str, используя аргумент pass_str как секретный ключ

DECODE(crypt_str, pass_str)

Дешифрует строку crypt_str, зашифрованную функцией AES_DECRYPT(). Аргумент pass_str используется как секретный ключ

DES_ENCRYPT(str [, (key_number|key_string)])

Шифрует строку str, используя аргумент pass_str как секретный ключ. В качестве второго необязательного параметра может выступать строка key_string, задающая секретрый ключ. В случае использования секретного ключа необходимо приводить его в качестве второго параметра и в функции дешифровки DES_DECRYPT(). Вместо секретного ключа можно указать номер key_number, принимающий значение от 0 до 9. Номер указывает на запись в ключевом DES-файле сервера, местоположение которого можно задать при старте сервера MySQL в параметре --des-key-file

DES_DECRYPT(str [, key_string])

Дешифрует строку str, зашифрованную при помощи функции DES_ENCRYPT(). Если при шифровании в качестве второго параметра функции DES_ENCRYPT() было передано число или второй параметр был опущен, то параметр key_string функции DES_DECRYPT() указывать уже не требуется, так как он прописывается в зашифрованную строку. Такой подход, когда секретный ключ хранится на сервере и не передается через сетевое соединение, значительно безопаснее, поскольку значение ключа невозможно извлечь из сетевого трафика. Если второй параметр не указывается, то предполагается, что используется первая строка DES-файла

ENCRYPT(str [, salt])

Подвергает строку str необратимому шифрованию, используя вызов системной функции crypt() UNIX. Если второй необязательный параметр salt не указывается, то результат каждый раз получается новым.

MD5(str)

Принимает строковой параметр str и возвращает 128-битную контрольную сумму, вычисленную по алгоритму MD5. Возвращаемая величина представляет собой 32-разрядное шестнадцатеричное число, которое уникально для строки. Таким образом для строк, отличающихся хотя бы одним символом, результат функции MD5 будет разный. В тоже время для двух одинаковых строк всегда возвращается одинаковый результат

PASSWORD(str)

Подвергает необратимому шифрованию данные str. Именно эта функция используется для шифрования паролей в MySQL

OLD_PASSWORD(str)

Эмулирует работу функции PASSWORD() версий MySQL, предшествующих MySQL 4.1

SHA1(str)

Вычисляет 160-битную контрольную сумму по алгоритму SHA1(Secure Hach Algorithm) для строки str

Обратимое шифрование

При обратимом шифровании, как правило, предоставляется две функции для шифровки и расшифровки данных.

Рассмотрим примеры с использованием функций AES_ENCRYPT (str, key_str) и AES_DECRYPT(crypt_str, key_str), оисание которых дано в таблице.

Функция AES_ENCRYPT(str, key_str)

А теперь рассмотрим шифрование поля email, в таблице users базы данных wet. Шифрование данного поля позволит уберечь пользователей от спамеров в случае, если база данных попадет им в руки. Создадим таблицу users и заполним ее поля.

Шифрование e-mail

хеширование криптографический шифрование

Как видно из листинга, прямой просмотр поля email приводит к выводу "мусора". Для того чтобы узнать настоящие адреса email, необходимо воспользоваться функцией дешифровки AES_DECRYPT() и знать секретный ключ.

Дешифровка данных

Необратимое шифрование

Функция MD5() осуществляет необратимое шифрование.

Использование функции MD5()

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

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

Функция PASSWORD() подвергает необратимому шифрованию данные и используется для шифрования паролей MySQL в столбце password в таблице привлегий user системной базы даны хmysql.

Использование функции PASSWORD()

Функция PASSWORD() используется в системе аутентификации в сервер MySQL, поэтому ее не следует использовать в приложениях -- лучше пользоваться функциями MD5() и SHA1().

Арифметика остатков и теория сравнений

Немецкий математик Карл Фридрих Гаусс предложил запись

для двух чисел a и b, если они имеют одинаковые остатки от деления на m (читается a сравнимо с b по модулю m). Например,

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

Простейшими свойствами сравнений являются следующие.

Свойство 1. Если a-b делится на m, то

Например,

так как 15 -1 =14, а 14 кратно 7.

Свойство 2. Если

И

То

Например, так как

И

То

а также

Свойство 3. Если

То

Например, так как

То

Свойство 4. Если

и c взаимно просто с m, то

Например, известно, что

а так как

Свойство 5. Если

То

Например, если

То

Задачи для самостоятельного решения

1. Найти остаток от деления:

- 31520 на 15;

- 1021300 на 3;

- 5100 + 1310 на 4;

- 11100 • 222 на 5.

2. Найти остаток от деления 520 • 619 - 910 + 134 на 4.

3. Доказать, что 3105 + 4105 делится нацело на 181.

4. Найти остаток от деления (96746 + 28)15 на 39.

5. При делении натурального числа n на 3 получается остаток 1, а при делении n на 37, остаток равен 33. Найдите остаток от деления n на 111.

6. Доказать, что p2 - q2 делится нацело на 24, если p, q - простые числа, большие 3.

7. Доказать, что если натуральное число делится на 99, то сумма его цифр в десятичной записи не менее 18.

Логические операции

1) Логическое умножение или конъюнкция:

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

Обозначение: F = A & B.

Таблица истинности для конъюнкции

A

B

F

1

1

1

1

0

0

0

1

0

0

0

0

2) Логическое сложение или дизъюнкция:

Дизъюнкция - это сложное логическое выражение, которое истинно, если хотя бы одно из простых логических выражений истинно и ложно тогда и только тогда, когда оба простых логических выраженныя ложны.

Обозначение: F = A + B.

Таблица истинности для дизъюнкции

A

B

F

1

1

1

1

0

1

0

1

1

0

0

0

3) Логическое отрицание или инверсия:

Инверсия - это сложное логическое выражение, если исходное логическое выражение истинно, то результат отрицания будет ложным, и наоборот, если исходное логическое выражение ложно, то результат отрицания будет истинным. Другими простыми слова, данная операция означает, что к исходному логическому выражению добавляется частица НЕ или слова НЕВЕРНО, ЧТО.

Таблица истинности для инверсии

A

неА

1

0

0

1

4) Логическое следование или импликация:

Импликация - это сложное логическое выражение, которое истинно во всех случаях, кроме как из истины следует ложь. Тоесть данная логическая операция связывает два простых логических выражения, из которых первое является условием (А), а второе (В) является следствием.

Таблица истинности для импликации

A

B

F

1

1

1

1

0

0

0

1

1

0

0

1

5) Логическая равнозначность или эквивалентность:

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

Таблица истинности для эквивалентности

A

B

F

1

1

1

1

0

0

0

1

0

0

0

1

Хэш-функция MD5

Рассмотрим алгоритм получения дайджеста сообщения MD5 (RFC 1321), разработанный профессором Рональдом Л. Ривестом из Массачусетского Технологического Института (MIT, Massachusetts Institute of Technlogy) в 1991 году.

MD5 (англ. Message Digest 5) -- 128-битный алгоритм хеширования. Предназначен для создания «отпечатков» или «дайджестов» сообщений произвольной длины. Работает на 32-битных машинах.

Зная MD5, невозможно восстановить входное сообщение, так как одному MD5 могут соответствовать разные сообщения. Используется для проверки подлинности опубликованных сообщений путем сравнения дайджеста сообщения с опубликованным. Эту операцию называют «проверка хеша» (hashcheck). Описан в RFC 1321.

Логика выполнения MD5

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

На вход алгоритма поступает входной поток данных, хеш которого необходимо найти. Длина сообщения может быть любой (в том числе нулевой). Запишем длину сообщения в L. Это число целое и неотрицательное. Кратность каким-либо числам необязательна. После поступления данных идёт процесс подготовки потока к вычислениям.

Алгоритм состоит из следующих шагов:

Рис. Логика выполнения MD5

Ниже приведены 5 шагов алгоритма:

Шаг 1: добавление недостающих битов

Сообщение дополняется таким образом, чтобы его длина стала равна 448 по модулю 512 ( ). Это означает, что длина добавленного сообщения на 64 бита меньше, чем число, кратное 512. Добавление производится всегда, даже если сообщение имеет нужную длину. Например, если длина сообщения 448 битов, оно дополняется 512 битами до 960 битов. Таким образом, число добавляемых битов находится в диапазоне от 1 до 512.

Добавление состоит из единицы, за которой следует необходимое количество нулей.

Шаг 2: добавление длины

64-битное представление длины исходного (до добавления) сообщения в битах присоединяется к результату первого шага. Если первоначальная длина больше, чем 264, то используются только последние 64 бита. Таким образом, поле содержит длину исходного сообщения по модулю 264.

В результате первых двух шагов создается сообщение, длина которого кратна 512 битам. Это расширенное сообщение представляется как последовательность 512-битных блоков Y0, Y1, . . ., YL-1, при этом общая длина расширенного сообщения равна L * 512 битам. Таким образом, длина полученного расширенного сообщения кратна шестнадцати 32-битным словам.

Рис. Структура расширенного сообщения

Шаг 3. Инициализация MD-буфера

Используется 128-битный буфер для хранения промежуточных и окончательных результатов хэш-функции. Буфер может быть представлен как четыре 32-битных регистра ( A, B, C, D ). Эти регистры инициализируются следующими шестнадцатеричными числами:

А = 01234567

В = 89ABCDEF

C = FEDCBA98

D = 76543210

Шаг 4: обработка последовательности 512-битных (16-словных) блоков

Основой алгоритма является модуль, состоящий из четырех циклических обработок, обозначенный как HMD5. Четыре цикла имеют похожую структуру, но каждый цикл использует свою элементарную логическую функцию, обозначаемую fF, fG, fH и fI соответственно.

Рис. Обработка очередного 512-битного блока

Каждый цикл принимает в качестве входа текущий 512-битный блок Yq, обрабатывающийся в данный момент, и 128-битное значение буфера ABCD, которое является промежуточным значением дайджеста, и изменяет содержимое этого буфера.

Определим таблицу констант -- 64-элементная таблица данных, построенную на основе функции sin. i-ый элемент T, обозначаемый T[i], имеет значение, равное целой части от 232 * abs (sin (i)), i задано в радианах. Так как abs (sin (i))является числом между 0 и 1, каждый элемент Т является целым, которое может быть представлено 32 битами. Таблица обеспечивает "случайный" набор 32-битных значений, которые должны ликвидировать любую регулярность во входных данных.

T<i> = int(4294967296 * abs(sin(i))), где int() - целая часть.

Например: T[1] = int(4294967296 * abs(sin(i))) = int(3614090360,282...) = 3614090360. 4294967296=232

Каждый цикл также использует четвертую часть 64-элементной таблицы T[1 ... 64].

Для получения MDq+1 выход четырех циклов складывается по модулю 232 с MDq. Сложение выполняется независимо для каждого из четырех слов в буфере.

Шаг 5: выход

После обработки всех L 512-битных блоков выходом L-ой стадии является 128-битный дайджест сообщения.

Рассмотрим более детально логику каждого из четырех циклов выполнения одного 512-битного блока. Каждый цикл состоит из 16 шагов, оперирующих с буфером ABCD. Каждый шаг можно представить в виде:

Рис. Логика выполнения отдельного шага

A <- B + CLSs (A + f (B, C, D) + X [k] + T [i])

Где A, B, C, D - четыре слова буфера; после выполнения каждого отдельного шага происходит циклический сдвиг влево на одно слово.

f - одна из элементарных функций fF, fG, fH, fI.

CLSs - циклический сдвиг влево на s битов 32-битного аргумента.

X [k] - M [q * 16 + k] - k-ое 32-битное слово в q-ом 512 блоке сообщения.

T [i] - i-ое 32-битное слово в матрице Т.

+ - сложение по модулю 232.

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

Массив из 32-битных слов X [0..15] содержит значение текущего 512-битного входного блока, который обрабатывается в настоящий момент. Каждый цикл выполняется 16 раз, а так как каждый блок входного сообщения обрабатывается в четырех циклах, то каждый блок входного сообщения обрабатывается по схеме, показанной на рис. 64 раза. Если представить входной 512-битный блок в виде шестнадцати 32-битных слов, то каждое входное 32-битное слово используется четыре раза, по одному разу в каждом цикле, и каждый элемент таблицы Т, состоящей из 64 32-битных слов, используется только один раз. После каждого шага цикла происходит циклический сдвиг влево четырех слов A, B, C и D. На каждом шаге изменяется только одно из четырех слов буфера ABCD. Следовательно, каждое слово буфера изменяется 16 раз, и затем 17-ый раз в конце для получения окончательного выхода данного блока.

Можно суммировать алгоритм MD5 следующим образом:

MD0 = IV

MDq+1 = MDq + fI[Yq, fH[Yq, fG[Yq, fF[Yq, MDq]]]]

MD = MDL-1

Где IV - начальное значение буфера ABCD, определенное на шаге 3.

Yq - q-ый 512-битный блок сообщения.

L - число блоков в сообщении (включая поля дополнения и длины).

MD - окончательное значение дайджеста сообщения.

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

На вход алгоритма поступает входной поток данных, хеш которого необходимо найти. Длина сообщения может быть любой (в том числе нулевой). Запишем длину сообщения в L. Это число целое и не отрицательное. Кратность каким-либо числам не обязательна. После поступления данных идет процесс подготовки потока к вычислениям.

Схема MD Шаг 1. Выравнивание потока

Входные данные выравниваются так, чтобы их размер был сравним с 448 по модулю 512 (L' = 512 * N + 448). Сначала дописывают единичный бит в конец потока, затем необходимое число нулевых бит (выравнивание происходит, даже если длина уже конгруэнтна -- сравнима с 448).

Шаг 2. Добавление длины сообщения

В оставшиеся 64 бита дописывают 64-битное представление длины данных до выравнивания. Если длина превосходит 264 , то используются только младшие 64 бита. Вычисления будут основываться на представлении этого потока данных в виде массива слов по 512 бит.

Рис. Схема MD5

Шаг 3. Инициализация MD-буфера

Для вычислений инициализируются 4 переменных размером по 32 бита и задаются начальные значения шестнадцатеричными числами:

А = 01 23 45 67;

В = 89 AB CD EF;

С = FE DC BA 98;

D = 76 54 32 10.

В этих переменных будут храниться результаты промежуточных вычислений. Начальное состояние ABCD называется инициализирующим вектором.

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

Потребуются 4 функции для четырех раундов. Введем функции от трех параметров -- слов, результатом также будет слово.

Определим таблицу констант T[1..64] -- 64-элементная таблица данных, построенная следующим образом: T[i] = int(4294967296 * | sin(i)| ) и s -- циклический сдвиг влево на s бит полученого 32-битного аргумента.

Выровненные данные разбиваются на блоки (слова) по 32 бита, и каждый блок проходит 4 раунда из 16 операторов. Все операторы однотипны и имеют вид: [abcd k s i], определяемый как a = b + ((a + Fun(b,c,d) + X[k] + T[i]) < < < s), где X -- блок данных. X[k] = M [n * 16 + k], где k -- номер 32-битного слова из n-го 512-битного блока сообщения.

Шаг 4. Вычисление в цикле

Заносим в блок данных элемент n из массива. Сохраняются значения A, B, C и D, оставшиеся после операций над предыдущими блоками (или их начальные значения, если блок первый).

AA = A

BB = B

CC = C

DD = D

Раунд 1

/*[abcd k s i] a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */

[ABCD 0 7 1][DABC 1 12 2][CDAB 2 17 3][BCDA 3 22 4]

[ABCD 4 7 5][DABC 5 12 6][CDAB 6 17 7][BCDA 7 22 8]

[ABCD 8 7 9][DABC 9 12 10][CDAB 10 17 11][BCDA 11 22 12]

[ABCD 12 7 13][DABC 13 12 14][CDAB 14 17 15][BCDA 15 22 16]

Раунд 2

/*[abcd k s i] a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */

[ABCD 1 5 17][DABC 6 9 18][CDAB 11 14 19][BCDA 0 20 20]

[ABCD 5 5 21][DABC 10 9 22][CDAB 15 14 23][BCDA 4 20 24]

[ABCD 9 5 25][DABC 14 9 26][CDAB 3 14 27][BCDA 8 20 28]

[ABCD 13 5 29][DABC 2 9 30][CDAB 7 14 31][BCDA 12 20 32]

Раунд 3

/*[abcd k s i] a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */

[ABCD 5 4 33][DABC 8 11 34][CDAB 11 16 35][BCDA 14 23 36]

[ABCD 1 4 37][DABC 4 11 38][CDAB 7 16 39][BCDA 10 23 40]

[ABCD 13 4 41][DABC 0 11 42][CDAB 3 16 43][BCDA 6 23 44]

[ABCD 9 4 45][DABC 12 11 46][CDAB 15 16 47][BCDA 2 23 48]

Раунд 4

/*[abcd k s i] a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */

[ABCD 0 6 49][DABC 7 10 50][CDAB 14 15 51][BCDA 5 21 52]

[ABCD 12 6 53][DABC 3 10 54][CDAB 10 15 55][BCDA 1 21 56]

[ABCD 8 6 57][DABC 15 10 58][CDAB 6 15 59][BCDA 13 21 60]

[ABCD 4 6 61][DABC 11 10 62][CDAB 2 15 63][BCDA 9 21 64]

Суммируем с результатом предыдущего цикла:

A = AA + A

B = BB + B

C = CC + C

D = DD + D

После окончания цикла необходимо проверить, есть ли еще блоки для вычислений. Если да, то изменяем номер элемента массива (n++) и переходим в начало цикла.

Шаг 5. Результат вычислений

Результат вычислений находится в буфере ABCD, это и есть хеш. Если выводить побайтово, начиная с младшего байта A и закончив старшим байтом D, то мы получим MD5-хеш.

Пример

MD5("md5") = 1bc29b36f623ba82aaf6724fd3b16718

Хеш содержит 128 бит (16 байт) и обычно представляется как последовательность из 32 шестнадцатеричных чисел.

Размещено на Allbest.ru

...

Подобные документы

  • Симметрическое шифрование как способ шифрования, в котором применяется один и тот же криптографический ключ. Функции стандартного диалогового окна открытия и сохранения файла. Характерная схема действий при генерации подписи. Цифровая подпись файла.

    курсовая работа [641,5 K], добавлен 14.06.2011

  • Формирование ключей для шифрования сообщения. Описание алгоритма RSA: шифрование и дешифрование. Понятие и история изобретения криптосистемы с открытым ключом. Свойства односторонней функции и сложность раскрытия шифра. Сущность цифровой подписи.

    лабораторная работа [326,0 K], добавлен 04.11.2013

  • Состав, параметры технических средств. Выработка общего ключа для шифрования/расшифровки сообщения. Структура подключения ПЛИС с персональным компьютером по Ethernet. Модули формирования электронно-цифровой подписи. Архитектура стандарта Gigabit Ethernet.

    дипломная работа [3,6 M], добавлен 13.09.2017

  • Симметричные и асиметричные методы шифрования. Шифрование с помощью датчика псевдослучайных чисел. Алгоритм шифрования DES. Российский стандарт цифровой подписи. Описание шифрования исходного сообщения асимметричным методом с открытым ключом RSA.

    курсовая работа [101,1 K], добавлен 09.03.2009

  • Перевод исходного текста и первого подключа в двоичную последовательность. Логическое сложение с исключением. Открытый и закрытый ключи в алгоритме шифрования RSA. Шифрование и расшифрование. Электронная цифровая подпись. Применение функции хеширования.

    контрольная работа [21,9 K], добавлен 28.03.2012

  • Разработка приложения для шифрования данных с помощью алгоритма DES5: процесс шифрования, расшифрования, получение ключей. Спецификация программы, процедуры и функции; описание интерфейса пользователя. Реализация задачи в среде программирования DELPHI.

    курсовая работа [812,6 K], добавлен 27.03.2012

  • Обзор криптографических классов библиотеки Framework Class Libr: классы алгоритмов симметричного и асимметричного шифрования, хеширования. Классы-форматеры и деформатеры. Классы для формирования и проверки цифровой подписи. Примеры применения классов.

    курсовая работа [30,0 K], добавлен 27.12.2011

  • Разработка программы шифрования данных с использованием алгоритма DES. Структура алгоритма, режимы его работы. Электронный шифровальный блокнот. Цепочка цифровых блокнотов. Цифровая и внешняя обратная связь. Структура окна: функции основных кнопок.

    лабораторная работа [830,3 K], добавлен 28.04.2014

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

    курсовая работа [301,9 K], добавлен 29.10.2017

  • Общая схема цифровой подписи. Особенности криптографической системы с открытым ключом, этапы шифровки. Основные функции электронной цифровой подписи, ее преимущества и недостатки. Управление ключами от ЭЦП. Использование ЭЦП в России и других странах.

    курсовая работа [288,2 K], добавлен 27.02.2011

  • Основы криптографических систем. Алгоритм создания открытого и секретного ключей. Схема передачи шифрованной информации и алгоритм для цифровой подписи. Преимущества и недостатки системы RSA. Основные формулы для создания RSA-ключей шифрования.

    курсовая работа [683,6 K], добавлен 18.12.2011

  • Изучение истории развития электронной цифровой подписи. Исследование её назначения, принципов работы, основных функций. Виды электронных подписей в Российской Федерации. Асимметричные алгоритмы подписей. Использование хеш-функций. Управление ключами.

    реферат [33,5 K], добавлен 04.06.2014

  • Разъяснения по использованию систем цифровой подписи в связи с ведением закона "Об электронной цифровой подписи". Пример практического применения механизма электронно-цифровой подписи: программа контроля подлинности документов, хранимых в базе данных.

    контрольная работа [180,1 K], добавлен 29.11.2009

  • Развитие навыков работы с табличным процессором Microsoft Excel и программным продуктом MathCAD и применение их для решения задач с помощью электронно-вычислительных машин. Схема алгоритма. Назначение функции Линейн и метода наименьших квадратов.

    курсовая работа [340,4 K], добавлен 17.12.2014

  • Свойства и методы формирования криптопараметров и оценка стойкости. Криптографические хэш-функции. Методы и алгоритмы формирования рабочих ключей. Моделирование упрощенной модели электронной цифровой подписи файла с использованием метода Шнорра.

    курсовая работа [47,9 K], добавлен 14.12.2012

  • Алгоритм функции формирования и проверки подписи. Интерфейс как аппаратная или программная система сопряжения объектов с различными характеристиками. Разработка программы, которая реализует процедуру подписи сообщения и процедуру проверки подписи.

    курсовая работа [150,0 K], добавлен 13.11.2009

  • Назначение электронной цифровой подписи как реквизита электронного документа, предназначенного для его защиты с помощью криптографического ключа. Асимметричные алгоритмы шифрования и атаки на электронную подпись. Средства работы с цифровой подписью.

    реферат [20,6 K], добавлен 09.10.2014

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

    курсовая работа [492,6 K], добавлен 18.09.2016

  • Традиционные симметричные криптосистемы. Основные понятия и определения. Методы шифрования. Метод перестановок на основе маршрутов Гамильтона. Асимметричная криптосистема RSA. Расширенный алгоритм Евклида. Алгоритмы электронной цифровой подписи Гамаля.

    курсовая работа [235,6 K], добавлен 06.01.2017

  • Обзор основных используемых языков программирования (С++, Java, Pascal). Анализ существующих методов шифрования паролей. Основные понятия объектно-ориентированного программирования. Реализация приложения для генерирования паролей на языке Object Pascal.

    курсовая работа [822,4 K], добавлен 07.07.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.