Безопасно ли хешировать пароли, которые защищают конфиденциальные данные с помощью MD5? - PullRequest
1 голос
/ 16 июня 2011

Я разговаривал с этим охранником. Он, наверное, самое большее, что я могу себе позволить для моего нового проекта. В любом случае, это сервис, который сохраняет конфиденциальные данные (пароль, PIN-коды), которые могут быть запрошены пользователем по телефону. У пользователя есть пароль (4 цифры), который он использует для доступа к конфиденциальным данным. Парень из службы безопасности сказал мне, что он будет использовать MD5 для хеширования пароля, который используется для доступа к конфиденциальным данным. Здесь, как я думал, началось обсуждение, и я совершенно уверен, что MD5 слишком уязвим, так как он был взломан / возникли конфликты.

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

Ответы [ 5 ]

5 голосов
/ 16 июня 2011

Я вижу здесь ряд проблем.

Во-первых, если четырехзначный пароль - это все, что препятствует доступу к вашим сверхчувствительным данным, у вас проблемы. Я надеюсь, что существуют другие меры безопасности, так как ручное взлом 10 000 комбинаций тривиально, а с каким-то сценарием гораздо меньше.

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

В-третьих, потребности алгоритма хеширования пароля отличаются от потребностей других алгоритмов хеширования. Вам нужно, чтобы алгоритм был медленным, что обычно означает необходимость его многократного запуска, и вам нужно, чтобы в нем была соль, чтобы пароль не мог быть получен из справочной таблицы. Предположительно, Blowfish не плохой. Я считаю, что документы pgcrypto из PostgreSQL имеют довольно хорошее объяснение.

2 голосов
/ 16 июня 2011

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

Обычно используют какой-то метод для медленного хеширования и добавления соли. Проверьте Википедия по ключевым функциям деривации . PBKDF2 и bcrypt являются популярным выбором для KDF.

Но я не могу придумать, как защитить 4-значный пароль. Всего 10 000 разных паролей. Это просто для грубой силы. Даже соли и KDF не помогут вам.

Системы, использующие PIN-коды с низкой энтропией, полагаются на проверяющий сервер / аппаратные средства, которые никогда не будут скомпрометированы. Таким образом, они могут заблокировать атакующего после нескольких неправильных попыток. Но вы не сможете этого сделать, если злоумышленник получит доступ к хэшу пароля.

1 голос
/ 16 июня 2011

Подумайте, почему вы хэшируете пароли?Потому что даже если ваша база данных украдена, злоумышленник не сможет найти пароль на основе хэша.Но: если пространство ваших паролей составляет 4 цифры (10000 комбинаций), сколько времени потребуется, чтобы найти пароль, соответствующий данному хешу MD5?Одну миллисекунду?Вы столкнетесь с той же самой уязвимостью безопасности с любой современной хэш-функцией (в настоящее время MD5 не считается безопасной).

Что вам нужно, так это соление с очень длинной солью.Для каждого пользователя создайте несколько случайных данных (называемых salt ) и вычислите хэш (пароль + соль).Вы явно не храните пароли, но вы будете хранить хэши и соли для каждого пользователя. Вторая мысль: 4-значный пароль с солью по-прежнему небезопасен - все, что вы получите, это то, что злоумышленнику придется использовать грубую силупароль для каждого пользователя, но с пространством ключа 10K это все еще тривиально.Я не знаю другого метода, который защитил бы такой короткий пароль.

0 голосов
/ 16 июня 2011

Существует простой способ выяснить это, основываясь на риске.

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

В любом случае вероятность взлома MD5 в одном испытании, скорее всего, намного меньше, чем 10 -4 , поэтому он, вероятно, прав.

0 голосов
/ 16 июня 2011

Да, MD5 серьезно скомпрометирован.Я бы посоветовал вам использовать функциональность PBKDF2, которая обеспечила бы гораздо лучшую безопасность.

Безопасность MD5

Статья Википедии PBKDF2

Я бы порекомендовал использовать более надежный пароль, чем 4-значный.

...