Расскажите о безопасности в хранилище паролей

задняя часть база данных алгоритм Безопасность
Расскажите о безопасности в хранилище паролей

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


Прежде всего, давайте разберемся с алгоритмами, которые можно использовать для защиты паролем.Очевидно, что использование открытого кода должно быть очень плохим решением.При взломе фона происходит прямая утечка всех паролей пользователей, что означает огромный риск. Следовательно, нам необходимо сохранить пароль пользователя с помощью некоего необратимого алгоритма. Например: MD5, SHA1\SHA-3\SHA-256.. Алгоритмы хеширования. Эти алгоритмы необратимы. Когда система проверяет пароль пользователя, ей необходимо сравнить пароль, зашифрованный хэшем, с паролем в базе данных, где хранится пароль, и, если они совпадают, проверка пройдена.


Реализация алгоритма MD5

Алгоритм MD5 (алгоритм MD5 Message-Digest) — это широко используемая хэш-функция шифрования, в основном используемая для генерации 128-битного (16-байтового) хеш-значения. Его идея реализации очень проста и легка для понимания.Его основная идея состоит в том, чтобы отображать наборы данных переменной длины в наборы данных фиксированной длины. Для этого он разбивает входящее сообщение на 512-битные куски. Убедитесь, что его длину можно разделить на 512, дополнив сообщение до конца. Теперь эти блоки будут обрабатываться алгоритмом MD5 и результатом будет 128-битное хеш-значение. После использования MD5 результирующее хеш-значение обычно представляет собой 32-битное шестнадцатеричное число.

Давайте посмотрим на реализацию версии JAVA:


public static String getMd5(String plainText) {

try {

MessageDigest md = MessageDigest.getInstance("MD5");

md.update(plainText.getBytes());

byte b[] = md.digest();

int i;

StringBuffer buf = new StringBuffer("");

for (int offset = 0; offset < b.length; offset++) {

i = b[offset];

if (i < 0)

i += 256;

if (i < 16)

buf.append("0");

buf.append(Integer.toHexString(i));

}

return buf.toString();

} catch (NoSuchAlgorithmException e) {

e.printStackTrace();

return null;

}

}


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


6-значный чистый цифровой пароль, взлом

6-значный пароль + строчная буква, взломать

6 цифр + смешанный пароль из прописных и строчных букв, взлом


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

Кроме того, MD5 не избегает коллизий хэшей: это означает, что разные пароли приведут к одному и тому же значению хеш-функции.


Является ли MD5 + достаточно соленым, чтобы быть безопасным


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


Инструмент для повышения безопасности хранения паролей — Bcrypt


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

Bcrypt — это специализированный алгоритм хеширования паролей, основанный на алгоритме Blowfish, разработанный Нильсом Провосом и Дэвидом Мазьером. И вводит коэффициент работы, который позволяет вам решить, насколько дорог алгоритм.


Ниже приведена реализация шифрования JAVA с использованием BCrypt:


public class BCryptDemo1 {

public static void main(String[] args) {

// Hash a password for the first time

String password = "password";

String hashed = BCrypt.hashpw(password, BCrypt.gensalt());

System.out.println(hashed);

String Authenticator = "password";

if (BCrypt.checkpw(Authenticator, hashed))

System.out.println("It matches");

else

System.out.println("It does not match");

}

}


Если вам нужно загрузить исходный код Bcrypt, вы можете загрузить его на сайте mindrot.org.

Итак, насколько безопасен пароль, зашифрованный bcrypt? В соответствии с настройками по умолчанию, для пароля из 8-значных прописных и строчных букв + цифры потребуется более 1000 лет, чтобы взломать его методом грубой силы даже на современном компьютере с самой высокой производительностью, что удивительно.


небольшое резюме

1. Хранение открытых паролей в приложениях крайне опасно.

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

3. Чтобы избежать этого, алгоритм, который нам нужен, состоит в том, чтобы сделать атаку грубой силы как можно более медленной и минимизировать воздействие.Рекомендуется использовать алгоритм Bcrypt.


Отсканируйте QR-код или вручную выполните поиск в общедоступной учетной записи WeChat [стек архитектуры]: ForestNotes

Добро пожаловать на перепечатку, принесите следующий двумерный код