Всем добрый день!
Примерно полтора месяца назад я откликнулся на вакансию в одной московской компании. Мне дали "небольшое тестовое задание", в котором требовалось сбрутить пароль от небольшого (2 килобайта) зашифрованного файла. Файл состоит из шифртекста и хеша от открытого текста. Идея была такая: пароль может состоять из не более, чем 7 латинских букв различного регистра и цифр. Пароль хешируется, и его хеш используется в качестве ключа для расшифровки. Правильность расшифровки можно проверить, прогнав полученный plaintext через хеш-функцию и сравнив результат с хешом в зашифрованном файле.
В чем проблема? 62^7 — это примерно 3.5 триллиона различных паролей. Если перебирать миллион паролей в секунду, то понадобится потратить на это порядка тысячи машинных часов, что абсолютно неприемлемо делать ни на своей машине (слишком долго), ни на амазоновском инстансе (слишком дорого).
Собственно говоря, на тестовое задание я забил (хоть там и было сказано, что если вы не сможете подобрать пароль, то всё равно стоит прислать код). Однако, бугурт до сих пор остался. Теперь мне хочется таки написать брутфорс, чтобы узнать: что же господа спрятали внутрь файла?
Во-первых, хочу узнать общественное мнение: насколько этично выкладывать непосредственно материалы тестового задания и работающий код?
Во-вторых, а много ли желающих погонять свою машинку в течение нескольких суток ради шанса получить, к примеру, гифты в Стиме в пределах 1-2 тысяч рублей? Плюсаните, пожалуйста, первый комментарий (и, для баланса, минусаните второй).
P.S. Если кто готов использовать для такой цели что-то ну совсем мощное (например, стоечный сервер с десятками ядер) — напишите, пожалуйста, в комментариях.
Плюсуем, если хотим поучаствовать в процессе.
Минусуем для баланса.
https://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D0%B4%D1%83%D0%B6%D0%BD%D0%B0%D1%8F_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0
Радужные таблицы используют при известных хеш-функции и ее значении. Тут же значение хеш-функции используется как ключ для алгоритма симметричного шифрования. Мне кажется, Вы прочитали пост по диагонали :(.
Да и если бы нужно было взломать просто хеш, я бы его уже давно сбрутил на моей средненькой GeForce GTX 850M за несколько часов.
Что-то я тогда не понял, зачем им хэш тогда в этой схеме?
Так текстовый пароль же удобнее, чем энное количество шестнадцатеричных знаков. Вроде бы стандартная же идея — хешировать пароль и использовать хеш в качестве ключа для симметричного шифра.
Или Вы про хеш от plaintext-а?
Все понял теперь. Но тогда не понятно, что хотели авторы задачи. Может ты что-то пропустил в условии?
Я чуть-чуть подправил первый абзац после приветствия.
Авторы дали мне зашифрованный файл и хотели, чтобы я написал программу, которая сбрутит пароль. Если не сбрутит — хотели хотя бы посмотреть на мои попытки.
А если использовать видеокарту вместо процессора?
Почему бы нет? Только я не нашёл готовую к простому повторному использованию либу для 3DES в режиме CBC на GPU. Лично я совершенно не знаком с программированием под CUDA или OpenCL :(.
Не понимаю смысл задания, если только пароль не сожержит какое-нибудь слово, и можно было бы попробовать словарный взлом паролей, и они хотели услышать что-то в районе: "брут-форс это слишком долго, понадеемся на то что пароль какой-то слабенький и вот написанный какой-то степени кривости словарный взлом который сработал/не сработал". Смысл компании смотреть на 10-строчный брут-форс не вижу, если честно. Хотя если компания специализируется на дистрибуции, тогда может быть они и хотели простой брут-форс запаралелизовать...
1) чем хэшируется пароль, вдруг там много коллизий или какая-нибудь еще известная уязвимость?
2) возможно, это задача из серии "мы и сами не знаем, как ее хорошо решить", т.е. от кандидата просто ждут код с хорошей производительностью, а если кто-то не дай бог таки придумает решение, то его оторвут с руками за любые деньги
3) если не было NDA, то не вижу, почему бы не выложить это самое задание. Все что не запрещено, то разрешено
Ну ладно, выложу. Вот задание, а вот файл, который надо сбрутить. К сожалению, мне "не очень нравится" предпросмотр HTML-страницы в Google Drive.
P.S. А разве на MD5 есть успешные атаки по быстрому нахождению прообраза? Я в упор не помню.
Почитай эту статейку, если не найдешь способа решить свою задачу, хотя бы познания в md5 актуализируешь :)
Я уже аж подумал, что там и правда будет что-то новое, но увы :(.
Извиняюсь за некропостинг, но страшно любопытно: были ли тут во взломе какие-нибудь подвижки?
Не-а, сам видишь, энтузиазма у народа несколько маловато.