Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Список использованных источников↑ ⇐ ПредыдущаяСтр 2 из 2 Содержание книги
Поиск на нашем сайте
2. 2. Анализ сложности алгоритма Обозначим за K – мощность множества Alpfabet длина алфавита, L – максимальная длина искомого пароля, N – число возможных комбинаций. Программа хранит алфавит Alphabet, хеш искомой строки и хеш текущей строки, а также временную строку для перебора комбинаций.
· K = |Alphabet| · - общее число возможных комбинаций.
2.1 Сложность по памяти Для данного алгоритма нам необходимо хранить алфавит размером K, индексный массив размером numcell, и временную строку размером L. Тогда сложность по памяти составит: O(max(K) + L + |K|), где max(K) — наибольший ASCII-код символа в алфавите. 2.2 Временная сложность Так как множество комбинаций уменьшается в зависимости от количества процессов P, то время, затрачиваемое для перебора комбинаций, также уменьшается в P раз. Сложность по памяти Каждый процесс будет хранить: 3. Выполнение работы 3.1 Задачи В данной работе поставленной задачей было написание кода, с использованием стандарта MPI, реализующего алгоритм “Brute Force” хеш-функции MD5 максимально эффективно, а также, с хорошей масштабируемостью итоговой программы.
3.2 Работа программы Несколько основных аспектов: 1. На вход поступает “пароль” который будет преобразован в хеш-функцию для поиска коллизий по принципу Brute Force. 2. При расчетах каждый процесс обрабатывает строки с номерами rank + commsize * i, пока не будет найдено совпадения хешей.
3.3 Описание работы алгоритма Каждый процесс, в соответствии со своим номером, определяет начальную комбинацию позиций символов перебираемого слова в алфавите и затем проверяет, чтобы начальная комбинация была корректной (для случая, когда commsize >= alphabetSize). Далее, на основе массива позиций символов в алфавите (numcell) каждый процесс формирует слово из символов, соответствующих позициям. После этого вычисляется хэш данного слова и сравнивается хэшем кодового слова. При совпадении, результат (найденная комбинация и ее хэш, а также время работы программы) выводится на экран, и процесс, в котором найдена коллизия завершает работу всей программы вызвав MPI_Abort. В противном случае перебор идет дальше. При достижении комбинации, которая является последней для текущей длины («zzz…zz»), длина инкрементируется и перебор начинается сначала, но для большей длины.
4. Практические измерения 4.1 Характеристики системы Вычислительные эксперименты выполнялись на высокопроизводительном кластере Jet со следующими характеристиками: · Количество всех узлов: 18; · Количество задействованных узлов: 8; · Соединение между узлами: Gigabit Ethernet (1 ГиБ/с). 4.2 Результаты экспериментов Коэффициент Sp(n) ускорения параллельной программы считается по формуле: где T(n) – время выполнения последовательной программы при заданном размере n входных данных и Tp(n) – время выполнения параллельной программы на p процессорах при заданном размере n входных данных. Эксперимент проводился на алфавите “abcdefghijklmnopqrstuvwxyz” с хеш-функцией слова ”zzzzz” и “zzzzzzz”
Таблица 4.2 – Результаты эксперимента Количество процессов Ускорение алгоритма со словом “zzzzz”, с Ускорение алгоритма со словом “zzzzzzz”, с 3,82303 2,94721 6,98412 7,40937 13,84628 15,40015 31,28631 29,65391 38,65012 39,54017 63,39564 62,76183
Рисунок 4.2.1 – График зависимости ускорения от числа процессов. На рисунке 4.2.1 показано, что с увеличением числа процессов увеличивается коэффициент ускорения примерно в P раз и, соответственно, скорость перебора коллизий. 5. ЗАКЛЮЧЕНИЕ В результате выполнения работы разработан и исследован алгоритм поиска коллизий хеш-функции MD5. Осуществлено моделирование разработанного алгоритма. Показано, что с увеличением числа процессов - увеличивается скорость поиска коллизии заданного ключа.
1. Message Passing Interface Forum. MPI: A Message-Passing Interface Standard Version 3.1 // University of Tennessee, Knoxville, Tennessee, 2015. - 868 p. 2. Bruce Schneier. Schneier on Security [Электронный ресурс]: // Bruce Schneier. - (February 18, 2005). "Schneier on Security: Cryptanalysis of MD5". 7 декабря 2017. - Электронно текстовые данные. - Режим доступа: https://www.schneier.com/blog/archives/2005/02/cryptanalysis_o.html, свободный. 3. Вычислительный кластер D (Jet) [Электронный ресурс]: // ЦПВТ ФГОБУ ВПО «СибГУТИ» 7 декабря 2017. - Электронно текстовые данные. - Режим доступа: http://cpct.sibsutis.ru/index.php/Main/Jet. 4. Кормен Т. Алгоритмы: вводный курс. - Москва: Вильямс, 2014. - 208 с.
ПРИЛОЖЕНИЕ Исходный код main.c #include <stdlib.h> #include <stdio.h> #include <string.h> #include <math.h> #include <mpi.h> #include "md5.h"
#define BUFFERSIZE 256
char alphabet[] = "abcdefghijklmnopqrstuvwxyz"; int alphabetSize = sizeof(alphabet) - 1; char* keyword = NULL; char* keywordhash = NULL; int root = 0;
void iteration_brute(int rank, int commsize); void hash(char *input, char **output);
int main(int argc, char** argv) { int rankm, commsizem;
MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rankm); MPI_Comm_size(MPI_COMM_WORLD, &commsizem);
keyword = (char *)malloc(BUFFERSIZE * sizeof(char)); if (argc > 1) { strcpy(keyword, argv[1]); } else { strcpy(keyword, "keyword"); } hash(keyword,&keywordhash); iteration_brute(rankm, commsizem);
free(keyword); free(keywordhash);
MPI_Finalize(); return 0; }
void iteration_brute(int rank, int commsize) { if (!strcmp(keyword, "")) return; int lenght = 1; long i = 0, j = 0, k = 0;
char* wordhash = NULL; char* word = (char*)malloc(lenght + 1 * sizeof(char)); word[lenght] = 0; int* numcell = (int*)malloc(lenght * sizeof(int));
if (rank == root) { printf("Keyword: %s\nKeywordHash: %s\n\n", keyword, keywordhash); }
double time = MPI_Wtime();
while (1) {
for (i = 0; i < lenght; i++) { numcell[i] = 0; } numcell[0] = rank; for (i = 0; ; i++) { if (numcell[lenght - 1] >= alphabetSize)break; for (j = 0; j < lenght - 1; j++) { if (numcell[j] >= alphabetSize) { numcell[j + 1] += numcell[j] / alphabetSize; numcell[j] = numcell[j] % alphabetSize; } } for (j = 0, k = lenght - 1; j < lenght, k >= 0; j++, k--){ word[k] = alphabet[numcell[j]]; } hash(word, &wordhash); if (!strcmp(word, keyword)) { printf("Word: %s\nWordHash: %s\nTime: %lf\n", word, wordhash, MPI_Wtime() - time); MPI_Abort(MPI_COMM_WORLD,0); } free(wordhash); numcell[0]+=commsize; } lenght++; word = (char*)realloc(word, lenght + 1 * sizeof(char)); word[lenght] = 0; numcell = (int*)realloc(numcell, lenght * sizeof(int)); } time = MPI_Wtime() - time; free(word); free(numcell); return; }
void hash(char *input, char **output) { md5_state_t HASH; md5_byte_t digest[16]; char *hex_output = NULL; hex_output = malloc((16 * 2 + 1) * sizeof(char)); int di;
md5_init(&HASH); md5_append(&HASH, (const md5_byte_t *) input, strlen(input)); md5_finish(&HASH, digest);
for (di = 0; di < 16; ++di) { sprintf(hex_output + di * 2, "%02x", digest[di]); } *output = hex_output; }
|
||||
Последнее изменение этой страницы: 2024-06-17; просмотров: 8; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.21.46.68 (0.01 с.) |