Приветствую всех, в данной статье с небольшим примером, мы рассмотрим защиту данных со стороны разработчиков.
Зачем беспокоиться о защите?
Пользователи при вводе пароля доверяют вам свою безопасность. Если ваша база данных будет взломана, а пароли пользователей незащищены, то «хацкеры» смогут использовать эти пароли для компрометации аккаунтов ваших пользователей на других ресурсах (большинство людей везде используют один и тот же пароль).
Итак, предположим у нас есть приложение, пусть снова будет чат. Попробуем смоделировать структуру аккаунта пользователя на начальных этапах, у меня вышло так:
- Имя Фамилия(возможно никнейм)
- Пароль
- Email адрес
Имя Фамилия
Т.к. пользователям в чате необходимо как-нибудь представляться, дабы сообщения не путались, и не было что-то типа
Client 1: привет.
Client 2: привет.
Также стоит запретить использовать существующие никнеймы.
Ограничиваем возможность показывать Email адрес публично.
Пароль
«Оставлю как есть — никто не взломает.»
Имеются различные способы защиты данных, в нашем случае — пароля, мы же рассмотрим хеширование солью или «солёное» хеширование.
Суть данного метода заключается в том, что после регистрации, в базу данных сохраняется не пароль пользователя, а его хэш, и при последующих авторизациях хеш из базы будет сравниваться с хешем введённого пароля.
ВАЖНО:
В WEB-приложениях хеш необходимо вычислять на сервере.
Сохранение пароля:
- Генерируем длинную случайную соль
- Присоединяем соль к паролю и вычисляем хеш-код с помощью стандартной криптографической хеш-функции, например, SHA256;
- Сохраняем и соль, и хеш-код в записи базы данных пользователей.
Проверка пароля:
- Извлекаем соль и хеш-код пользователя из базы;
- Добавляем соль к введенному паролю и вычисляем хеш-код с помощью той же самой функции;
- Сравниваем хеш-код введенного пароля с хеш-кодом из базы данных. Если они совпадают, пароль верен. В противном случае, пароль введен неправильно.
Вывод:
Пароли необходимо хешировать, хеширование должно происходить на сервере, нет защиты на паролях — подножка для твоих пользователей.
Способы хеширования:
- MD5
MD5 (англ. Message Digest 5) — 128-битный алгоритм хеширования) — Предназначен для создания «отпечатков» или дайджестов сообщения произвольной длины и последующей проверки их подлинности.
- SHA-1
Secure Hash Algorithm 1 —реализует хеш-функцию, построенную на идее функции сжатия.
- SHA256, SHA512
SHA-2 (англ. Secure Hash Algorithm Version 2 — безопасный алгоритм хеширования, версия 2) — семейство криптографических алгоритмов — однонаправленных хеш-функций, включающее в себя алгоритмы SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/256 и SHA-512/224. Хеш-функции предназначены для создания «отпечатков» или «дайджестов» для сообщений произвольной длины.
- NTLM
NTLM - это протокол проверки подлинности запроса и ответа, который использует три сообщения для аутентификации клиента в среде, ориентированной на соединение и четвертое дополнительное сообщение, если требуется проверка целостности.
- bcrypt
bcrypt — адаптивная криптографическая хеш-функция формирования ключа, используемая для защищенного хранения паролей.
Пример реализации защиты данных пользователя (PHP):
В мобильном приложении, которое было разработано мной на андроид, защита данных реализована таким образом, т.е. это серверная часть приложения.
Что-ж, на этом статья криптографии закончена, спасибо за внимание :)
Берегите себя, своих близких и свои данные.