Импорт паролей MD5+Salt в MD5

Я переношу свой сайт из магазина oscommerce в коммерческое приложение.

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

Вот что написал кто-то на форуме:

Два добавленных символа предназначены для создания хэша таким образом, что
hash=md5(twocharactersPlainPassword)
т.е.: 2 буквы: 74
Простой пароль: PaSs
hash=md5('74PaSs')=acaa6e689ae0008285320e6617ca8e95 :74


Вот код, как Oscommerce шифрует пароль:

// This function makes a new password from a plaintext password.
function tep_encrypt_password($plain) {
  $password = '';

  for ($i=0; $i<10; $i++) {
    $password .= tep_rand();
  }

  $salt = substr(md5($password), 0, 2);
  $password = md5($salt . $plain) . ':' . $salt;

  return $password;
}

// This funstion validates a plain text password with an encrypted password
function tep_validate_password($plain, $encrypted) {
  if (tep_not_null($plain) && tep_not_null($encrypted)) {
    // split apart the hash / salt
    $stack = explode(':', $encrypted);

    if (sizeof($stack) != 2) {
      return false;
    }

    if (md5($stack[1] . $plain) == $stack[0]) {
      return true;
    }
  }

  return false;
}

Вот как моя новая корзина шифрует пароль:

if ($admin_password_encrypt == 1) {
    $password_match = md5($password);
} else {
    $password_match = $password;
}

Есть ли способ импортировать пароли клиентов из моей корзины oscommerce в мою новую корзину.


person Ibn Saeed    schedule 10.07.2009    source источник


Ответы (5)


Не сохраняйте в своей базе данных простые хэши MD5. Обычные хеши MD5 можно быстро и легко реконструировать с помощью радужных таблиц. Однако вот как вы решите свою проблему, независимо от того, как вы решите хранить пароли в будущем:

  1. Создайте в новой базе данных столбец, в котором указана «версия» пароля. Это используется для определения того, был ли пароль сгенерирован старым приложением или новым.
  2. Импортируйте старых пользователей, установив вышеупомянутый флаг, чтобы указать, что пароль импортирован.
  3. Создайте два метода проверки пароля. Один метод использует код из вашего старого приложения, другой — ваш новый метод проверки.
  4. Когда пользователь входит в систему, проверьте вышеупомянутый флаг и используйте соответствующий метод проверки.

В любом случае, я хочу повторить, что обычные хеши MD5 легко взломать для большинства паролей (поскольку людям нравятся короткие и легко запоминающиеся пароли). Используйте соль и/или более сложный алгоритм. Я бы порекомендовал оба и использовать соль, которая длиннее двух символов и не ограничивается числами. Это сделает пароли действительно безопасными.

person Blixt    schedule 10.07.2009
comment
Может быть, генерировать другую соль даже лучше, скажем, вы генерируете соль из идентификатора пользователя, константы в коде и его даты регистрации. Все эти параметры не изменятся и индивидуальны для каждого пользователя. - person usoban; 10.07.2009
comment
Это один из способов. Но я бы сказал, что более переносимо просто включить соль в тот же столбец, что и пароль, разделенный каким-либо символом. На самом деле это не проблема безопасности, поскольку, чтобы найти пароль, все равно придется генерировать хэш для каждого возможного string + salt, пока не будет найден тот же самый хэш. Для каждой отдельной строки. Ни один хакер в здравом уме не стал бы пытаться это сделать, если бы у него не было под рукой квантового компьютера. знак равно - person Blixt; 10.07.2009
comment
@Blixt, я бы попытался реализовать твое решение. Можете ли вы дать более подробное объяснение. - person Ibn Saeed; 10.07.2009
comment
Использование целой солонки и лучшего в мире хэш-алгоритма на самом деле ничего вам не купит. Это не решает проблему слабого пароля (автономная атака по словарю). Это может вынудить злоумышленника выделить больше ресурсов для решения проблемы, но ничто из ожидаемого не помешает успешной атаке. - person Einstein; 16.11.2009
comment
Я не понимаю, что вы пытаетесь сказать своим комментарием... что безопасность бессмысленна, потому что она не будет эффективной на 100%? Вместе с безопасностью развивается и хакерство. Вы никогда не достигнете точки, когда что-то будет на 100% безопасным. Но сдвигая соотношение усилия/вознаграждения в сторону усилия, вы снижаете вероятность того, что хакеры выберут вас в качестве цели. Вот почему вы всегда должны стремиться сделать свое решение безопасности максимально эффективным. - person Blixt; 16.11.2009
comment
Я бы сказал, просто полностью замените новую (прямую MD5) функцию функцией из OSCommerce. - person defines; 08.06.2010
comment
Безопасность @Blixt давно вышла за рамки MD5. Если вы используете MD5 для хранения паролей, вы делаете это неправильно. - person Hamish; 08.01.2014

Похоже, у вас есть исходный код для вашей новой корзины. Поскольку «прямой MD5» — ужасно ужасный способ хранения паролей, возможно, вам следует просто изменить его, чтобы использовать тот же механизм хранения паролей, что и в OSCommerce.

Ответ на ваш вопрос - нет, преобразовать пароли невозможно.

person Greg Hewgill    schedule 10.07.2009
comment
Есть ли лучший способ хранения паролей? Я хотел бы передать ваше предложение команде разработчиков моей новой тележки. - person Ibn Saeed; 10.07.2009
comment
Отличная статья на эту тему — Джефф «Возможно, вы неправильно храните пароли»: codinghorror.com/ блог/архивы/000953.html - person Greg Hewgill; 10.07.2009

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

person David M    schedule 10.07.2009
comment
так что нет никакого способа импортировать мои пароли? - person Ibn Saeed; 10.07.2009
comment
Только если у вас в системе реализовано точно такое же соление и хэширование. - person David M; 10.07.2009

Если пароли зашифрованы с помощью md5, вы не сможете их расшифровать. Лучше всего проверить в своем коде входа, произошло ли создание учетной записи/последнее изменение пароля до определенной даты. Если это так, используйте функцию проверки пароля OSCommerce, если нет, используйте свою собственную.

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

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

person Ali    schedule 10.07.2009

Не существует метода автоматического преобразования между алгоритмами хеширования. К сожалению, вы, вероятно, застрянете, выбирая один из следующих плохих вариантов:

  1. Настройте или запрограммируйте старую корзину для хранения хэшей в новом формате, когда пользователи входят в старую систему.
  2. Используйте взломщик паролей, чтобы восстановить некоторый процент старых паролей системной корзины.
  3. Попросите нового поставщика поддержать старый формат
  4. Отправьте уведомление всем пользователям, которым им нужно будет добавить текст соли перед своими паролями при использовании новой системы, или настройте систему, чтобы она добавляла для них известные соли.
person Einstein    schedule 16.11.2009