Блог пользователя AlexanderBolshakov

Автор AlexanderBolshakov, история, 8 лет назад, По-русски

Всем добрый день!

Примерно полтора месяца назад я откликнулся на вакансию в одной московской компании. Мне дали "небольшое тестовое задание", в котором требовалось сбрутить пароль от небольшого (2 килобайта) зашифрованного файла. Файл состоит из шифртекста и хеша от открытого текста. Идея была такая: пароль может состоять из не более, чем 7 латинских букв различного регистра и цифр. Пароль хешируется, и его хеш используется в качестве ключа для расшифровки. Правильность расшифровки можно проверить, прогнав полученный plaintext через хеш-функцию и сравнив результат с хешом в зашифрованном файле.

В чем проблема? 62^7 — это примерно 3.5 триллиона различных паролей. Если перебирать миллион паролей в секунду, то понадобится потратить на это порядка тысячи машинных часов, что абсолютно неприемлемо делать ни на своей машине (слишком долго), ни на амазоновском инстансе (слишком дорого).

Собственно говоря, на тестовое задание я забил (хоть там и было сказано, что если вы не сможете подобрать пароль, то всё равно стоит прислать код). Однако, бугурт до сих пор остался. Теперь мне хочется таки написать брутфорс, чтобы узнать: что же господа спрятали внутрь файла?

Во-первых, хочу узнать общественное мнение: насколько этично выкладывать непосредственно материалы тестового задания и работающий код?

Во-вторых, а много ли желающих погонять свою машинку в течение нескольких суток ради шанса получить, к примеру, гифты в Стиме в пределах 1-2 тысяч рублей? Плюсаните, пожалуйста, первый комментарий (и, для баланса, минусаните второй).

P.S. Если кто готов использовать для такой цели что-то ну совсем мощное (например, стоечный сервер с десятками ядер) — напишите, пожалуйста, в комментариях.

  • Проголосовать: нравится
  • +21
  • Проголосовать: не нравится

»
8 лет назад, # |
  Проголосовать: нравится +61 Проголосовать: не нравится

Плюсуем, если хотим поучаствовать в процессе.

»
8 лет назад, # |
  Проголосовать: нравится -49 Проголосовать: не нравится

Минусуем для баланса.

»
8 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
  • »
    »
    8 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Радужные таблицы используют при известных хеш-функции и ее значении. Тут же значение хеш-функции используется как ключ для алгоритма симметричного шифрования. Мне кажется, Вы прочитали пост по диагонали :(.

    Да и если бы нужно было взломать просто хеш, я бы его уже давно сбрутил на моей средненькой GeForce GTX 850M за несколько часов.

    • »
      »
      »
      8 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Что-то я тогда не понял, зачем им хэш тогда в этой схеме?

      • »
        »
        »
        »
        8 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

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

        Или Вы про хеш от plaintext-а?

        • »
          »
          »
          »
          »
          8 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится

          Все понял теперь. Но тогда не понятно, что хотели авторы задачи. Может ты что-то пропустил в условии?

          • »
            »
            »
            »
            »
            »
            8 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится

            Я чуть-чуть подправил первый абзац после приветствия.

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

»
8 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

А если использовать видеокарту вместо процессора?

  • »
    »
    8 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Почему бы нет? Только я не нашёл готовую к простому повторному использованию либу для 3DES в режиме CBC на GPU. Лично я совершенно не знаком с программированием под CUDA или OpenCL :(.

»
8 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Не понимаю смысл задания, если только пароль не сожержит какое-нибудь слово, и можно было бы попробовать словарный взлом паролей, и они хотели услышать что-то в районе: "брут-форс это слишком долго, понадеемся на то что пароль какой-то слабенький и вот написанный какой-то степени кривости словарный взлом который сработал/не сработал". Смысл компании смотреть на 10-строчный брут-форс не вижу, если честно. Хотя если компания специализируется на дистрибуции, тогда может быть они и хотели простой брут-форс запаралелизовать...

»
8 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

1) чем хэшируется пароль, вдруг там много коллизий или какая-нибудь еще известная уязвимость?
2) возможно, это задача из серии "мы и сами не знаем, как ее хорошо решить", т.е. от кандидата просто ждут код с хорошей производительностью, а если кто-то не дай бог таки придумает решение, то его оторвут с руками за любые деньги
3) если не было NDA, то не вижу, почему бы не выложить это самое задание. Все что не запрещено, то разрешено

  • »
    »
    8 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Ну ладно, выложу. Вот задание, а вот файл, который надо сбрутить. К сожалению, мне "не очень нравится" предпросмотр HTML-страницы в Google Drive.

    P.S. А разве на MD5 есть успешные атаки по быстрому нахождению прообраза? Я в упор не помню.

    • »
      »
      »
      8 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Почитай эту статейку, если не найдешь способа решить свою задачу, хотя бы познания в md5 актуализируешь :)

»
8 лет назад, # |
  Проголосовать: нравится +10 Проголосовать: не нравится

Извиняюсь за некропостинг, но страшно любопытно: были ли тут во взломе какие-нибудь подвижки?