Openssl Message Digest Односторонняя атака грубой силы

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

4 Задача 2: Недвижимость в одном направлении против собственности без столкновений
В этой задаче мы рассмотрим разницу между двумя свойствами общих хеш-функций: односторонние
собственность против собственности без столкновений. Мы будем использовать метод грубой силы, чтобы увидеть, сколько времени требуется, чтобы сломать
каждое из этих свойств. Вместо того чтобы использовать инструменты командной строки openssl, вы должны написать свой
собственная C-программа для вызова функций дайджеста сообщений в криптографической библиотеке openssl. Документы можно найти на
http://www.openssl.org/docs/crypto/EVP_DigestInit.html.
Лаборатория обучения компьютерной безопасности, CMSC 414, весна 2013
2
Поскольку большинство хеш-функций достаточно сильны против атаки методом перебора на эти два свойства,
нам понадобятся годы, чтобы сломать их, используя метод грубой силы. Чтобы сделать задачу выполнимой, во всем этом
В проекте мы уменьшаем длину хеш-значения до 24 бит. Мы можем использовать любую одностороннюю хеш-функцию, но мы
используйте только первые 24 бита хеш-значения.
Напишите программу, которая, учитывая 24-битное хеш-значение, находит соответствующий текст (только строчные символы ASCII
Ослабляет). Ваша программа должна будет многократно 1) генерировать случайный текст, 2) хэшировать его, 3) сравнивать младшие 24 бита
на вход.
Ваша программа (источник должен называться task2.c) будет вызываться следующим образом:

          ./task2 <digest name> <hash value>

например, ./task2 sha256 2612c7. . . и ваша программа должна записать выигрышный текст в task2.out.
Пожалуйста, убедитесь, что вывод доступен для чтения и записи, т.е.

       open("task2.out", O`enter code here` WRONLY | O CREAT, 0644);

Мы проверим с помощью инструментов командной строки, например, openssl dgst -sha256 task2.out,
Вопрос: Сколько текстов нужно было хешировать, чтобы найти конкретный хеш? (дать в среднем три испытания)

Я не могу понять, как начать писать свою программу. Любые вклады с благодарностью. Поскольку я не решаю это для домашней работы. Я ищу некоторые указатели, а не код.

0

Решение

Что ж, читая текст, мне ясно, в чем заключается задача, и неясно, какую часть вы не получите. Когда начать?

  • создайте скелетную программу, как привет слово
  • создать функцию, которая генерирует случайный текст
  • создайте функцию, которая принимает текст и хэш-идентификатор, и использует openssl для его хеширования, возвращая хеш
  • создать функцию, которая извлекает младшие 24 бита хеша
  • создайте функцию, которая принимает параметры командной строки и конвертирует их в 24-битное число, которое является искомым хешем и хеш-идентификатором, для сбрасывания в openssl (или выхода с индикацией ошибки)
  • запустить цикл, который продолжает подавать новые случайные строки, пока результирующий хеш не совпадет с req и не подсчитает
  • записать выигрышный текст в файл и номер для вывода
  • выполнить все оставшиеся задачи из задания …
1

Другие решения

Алгоритм хорошо изложен Balog Pal. Просто добавить несколько вещей:
В одностороннем свойстве вам дается хеш, и вы ищете другой текст с похожим хешем.
В свойствах без столкновений вам просто нужно найти два текста с похожими хэшами. Итак, вы начинаете с создания двух текстов и сравниваете их соответствующие хеши. Если они одинаковы, вы обнаружили столкновение. Если нет, вы сохраняете уже сгенерированные хэши, а затем генерируете новый текст, находите его хеш и сравниваете его с сохраненными хешами. если с ним совпадает какой-либо сохраненный хеш, вы обнаружили столкновение, иначе сохраните его в списке сохраненных хешей. Повторяйте цикл, пока не найдете столкновение.

Реализация того же Python может быть найдена по ссылке ниже. Он включает в себя минимум комментариев, так что вы должны выяснить все из кода. Как только это будет сделано, попробуйте реализовать его в C или Java.

https://github.com/arafat1/One-Way-Property-versus-Collision-Free-Property/blob/master/HashProperty.py

0

По вопросам рекламы [email protected]