- Как правильно хранить пароль в базе данных
- Как безопасно сохранить пароль в базе данных
- Как проверить правильность введенного пароля?
- Как я хранил пароли в логарифмическом
- Как хранить пароль у приложения?
- Хранение паролей в Android
- История вопроса
- Никто не совершенен
- Обзор
- 1. KeePassDroid
- 2. B-Folders
- 3. Handy Safe Pro
- 4. Password Master
- 5. OI Safe
Как правильно хранить пароль в базе данных
Статья, первоначально опубликованная на моем сайте, о том, как безопасно хранить пароль в базе данных (https://petrepopescu.tech/2021/01/how-to-properly-store-a-password-in-the-database/) Когда я начал…
Автор: Petre Popescu
Дата записи
Автор оригинала: Petre Popescu.
Статья, первоначально размещенная на моем сайте в разделе Как безопасно сохранить пароль в базе данных
Когда я начал логарифмически, одной из первых функций, которую я реализовал, была регистрация нового пользователя. Это означало, что я должен был хранить пароль пользователя в базе данных безопасным способом, и мне нужно будет иметь возможность проверить правильность пароля, введенного при входе в систему. Это то, что довольно легко реализовать неправильно, и вы будете удивлены (или нет) тем, сколько систем и веб-сайтов хранят пароли неверным способом.
Просто посмотрите на количество утечек данных за последние несколько лет. Весьма вероятно, что ваш пароль был утечен по крайней мере один раз, причем из хорошо известного и авторитетного источника. Кроме того, вы когда-нибудь регистрировались на веб-сайте, вводили имя пользователя и пароль, которые вам нужны, и после регистрации получали электронное письмо с паролем открытым текстом? Скорее всего, хранение также было небезопасным.
Итак, прежде чем я покажу вам, как правильно хранить пароль (и какой механизм я использовал для логарифмирования), позвольте мне сразу сказать вам, как ЭТОГО НЕ делать:
- Открытый текст – НИКОГДА НЕ ХРАНИТЕ ПАРОЛИ В ОТКРЫТОМ ВИДЕ – я не могу поверить, что должен это сказать. Пароли не должны храниться в открытом тексте, потому что любой дамп базы данных может легко извлечь комбинацию электронной почты и пароля и опробовать ее на других веб-сайтах.
- Используйте свой собственный алгоритм – Если вы не гений в математике и шифровании, не пишите свои собственные алгоритмы для шифрования или хэширования пароля. Это может быть не так безопасно, как вы думаете.
- Простой хэш – Хотя и не такой плохой, как первые два, он не очень далеко. Существуют атаки с использованием радужных таблиц, которые можно выполнить на дампе базы данных, и большинство паролей можно легко восстановить. Радужная таблица-это предварительно вычисленный файл, содержащий известный хэш для многих паролей. Файл может хранить сотни тысяч паролей и их хэш с различными алгоритмами. Далее, это просто вопрос сопоставления хэшей базы данных с предварительно рассчитанным файлом. Не все пароли будут восстановлены, но большинство из них будут восстановлены.
Как безопасно сохранить пароль в базе данных
Лучший способ сохранить пароль в базе данных-это использовать алгоритм хэширования с солью. Таким образом, даже в случае утечки дампа БД восстановить пароли будет практически невозможно. Как помогает добавление соли? Во-первых, давайте объясним, в чем соль. Соль хэша-это случайно выбранная строка (или байты), которая добавляется к паролю перед его хэшированием. На самом деле не имеет значения, добавляете вы его или добавляете, если вы последовательны и соль достаточно сильна.
В базе данных вы храните соль для каждого пользователя и полученный хэш для соли+пароль. Имейте в виду (и это очень важно), что у каждого пользователя должна быть своя соль, и ее необходимо менять всякий раз, когда меняется пароль. Кроме того, чтобы быть уверенным, что соль достаточно сильна, рекомендуется иметь длину не менее 64 байт.
Затем используйте сильный и широко используемый алгоритм хэширования. В прошлом MD5 считался достаточно хорошим, после этого был рекомендован SHA-1, но в настоящее время считается необходимым SHA256 или лучше. Существуют и другие алгоритмы, но, пожалуйста, прочитайте об их сильных сторонах, прежде чем принимать решение об их использовании.
Алгоритмы хэширования обычно имеют несколько итераций. Здесь мы должны быть последовательными, так как это повлияет на вывод, даже если соль и пароли совпадают. Однако имейте в виду, что чем больше число итераций, тем больше времени потребуется для вычисления хэша. Это здорово, так как сводит к минимуму вероятность того, что кто-то совершит атаку грубой силы в случае утечки дампа БД. Проведите некоторое тестирование, чтобы увидеть, какое количество итераций подходит для вашей системы, без какой-либо серьезной нагрузки на нее.
Как проверить правильность введенного пароля?
У нас есть пароль, сохраненный правильным образом. У нас есть соль, которая уникальна для каждого пользователя, и был использован безопасный алгоритм хэширования. Но хэши являются односторонними функциями, что означает, что мы больше не можем получить пароль из заданного хэша, так как же мы проверяем во время входа в систему, что пароль, введенный пользователем, является правильным?
Мы просто снова вычисляем хэш для введенного пользователем пароля. Мы извлекаем соль из базы данных, прикрепляем ее к паролю пользователя и пересчитываем хэш, используя тот же алгоритм, который использовался при сохранении информации пользователя. После этого мы сравниваем полученный хэш с тем, который хранится в базе данных. Если они идентичны, то введенный пароль является правильным.
Как я хранил пароли в логарифмическом
Теперь, когда у нас есть все подробности, давайте посмотрим, как я сохранил пароль в логарифмическом виде и как написать аналогичную функциональность на Java. Я создал служебный класс, который обрабатывает эту часть. Он может генерировать соль и вычислять хэш строки с помощью предоставленной соли. Я выбрал следующие значения для силы хэша:
- Длина соли – 521 байт
- Размер хеш – байта-256
- Итерация – 1000
- Алгоритм – PBKDF2WithHmacSHA512
- Всегда использовал SecureRandom
Ниже приведена часть служебного класса (в том виде, в каком он в настоящее время находится в проекте). Для получения полной и обновленной версии не стесняйтесь просматривать код в логарифмическом репо.
Источник
Как хранить пароль у приложения?
Если не типична, то часто встречающаяся ситуация.
Что нам надо? С сайта стянуть какие-то данные. Если они публичные, то вопроса нет.
Но обычно это что-то из личного кабинета какого-нибудь. То есть надо логин и пароль ввести.
В простейшем случае http://super.site.ru/auth?user. onGpA8W0Rd
Можно конечно каждый раз после завершения и заново запускания приложения заставлять бедных юзеров вводить пароль каждый раз заново.
Но это садизмом отдает.
Можно поставить галочку «сохранить пароль». И вот тут возникает вопрос без ответа. А ГДЕ ЕГО ХРАНИТЬ-ТО?
В SharedPreferences в открытом виде, что бы на любом рутованном телефоне любой рут мог его посмотреть?
Зашифровать? А ключ шифрования где хранить? Там же в открытом виде? Или тоже зашифровать? А .
Ну, вы все поняли. Это до бесконечности. В любом случае ключ, которым шифруем у нас где-то в коде или в SharedPreferences в отктыром виде.
Чего делать-то?
Как люди пароли хранят?
Как хранить VKAccessToken между перезапусками приложения
Доброго дня. Подскажите пожалуйста как сделать так что бы приложение не запрашивало при каждом.
Как лучше всего хранить данные для приложения?
Допустим есть статический массив интов,или булов.Как его сохранять(onDestroy()) и.
Хранить данные приложения на SD карте
Приветствую, подскажите пожалуйста, можно ли сделать так, чтобы приложения устанавливалось на.
Где хранить информацию для приложения
Добрый день. Подскажите, пожалуйста, как лучше сделать. Если в приложении используется несного.
Источник
Хранение паролей в Android
Предисловие: Этот обзор был написан после прочтения топика “Свободный Android — золотая жила для Google” и комментариев к нему. Автору перевода данного топика я хочу сказать свое спасибо.
Кроме того, хочу поблагодарить форум androidfan.ru за их ветку с описанием приложений, где собственно и были найдены рассматреваемые экземпляры.
История вопроса
Два года назад, 21 октября 2008 года мобильная платформа Android перестала быть лишь виртуальной основой для разработчиков и вышла в реальный мир в образе коммуникатора T-Mobile G1 (HTC Dream). С момента первого выхода система претерпела множество изменений, как по качеству кода, так и по количеству возможностей, предоставляемых ей. Однако, как справедливо было замечено некоторыми хабровчанами, качество и популярность платформы зависят не только от интенсивности ее разработки и качества собственного кода, но и от приложений, которыми она позволяет пользоваться.
Кроме того, если вы любите обращать внимания на маленькие детали, то могли заметить, что Android, как операционная система, быстро приобрел большую популярность не только у простых пользователей, но также и у производителей мобильных устройств – ведь они достаточно быстро стали выпускать коммуникаторы бизнес-класса.
Осторожно, много скриншотов!
Никто не совершенен
Тем не менее, главное отличие Android-устройств от коммуникаторов бизнес-класса — это возможность активно использовать интернет-сервисы, причем не только предоставляемые главным разработчиком — Google, но и многие другие. Все это приводит пользователей платформы к необходимости хранения множества личных данных — не только пин-кодов своих банковских карт, но и множества паролей. Долгое время я сам хранил пароли в “простой” записной книжке — AK Notepad, однако сейчас я хочу рассмотреть приложения, которые позволяют делать это более правильно — шифруя информацию, которая не предназначена для посторонних.
Обзор
Список кандидатов, отобранных на рассмотрение:
1. KeePassDroid
При первом запуске KeePasDroid предлагает пользователю создать новую или открыть существующую базу хранения паролей:
KeePassDroid. Рис. 1. Создание/выбор БД для паролей.
Я запускал это приложение в первый раз, поэтому базу необходимо было создать:
KeePassDroid. Рис. 2. Ввод главного пароля.
Опционально, KeePassDroid предлагает использовать так же файл-ключ вместо пароля. Я редко использую файлы для авторизации (исключение составляют SSH-соединения), поэтому ввел обычный мастер-пароль.
Без дальнейших вопросов приложение показало мне список из двух групп с единственной кнопкой “Добавить группу”, что я и не преминул сделать:
KeePassDroid. Рис. 3. Список групп с созданной мной группой “Соцсети”.
К сожалению, сначала я не заметил, что значок группы выбирается при ее создании, а смена значка уже созданной группы в KeePassDroid не предусмотрена:
KeePassDroid. Рис. 4. Выбор значка группы при создании. Необходимо нажать кнопку, на которой нарисован ключ. | KeePassDroid. Рис. 5. Коллекция значков для групп и элементов. |
KeePassDroid обладает одной приятной возможностью — создание вложенных групп. Поэтому сортировка паролей и разделение их на группы и подгруппы ограничивается только полетом вашей фантазии 🙂
Итак, внутри возникшей группы “Cоцсети” я решил создать единственный элемент — сохранить пароль от моей учетной записи в Facebook. Это оказалось достаточно просто — внутри группы необходимо нажать кнопку “Добавить запись”, что я и сделал:
KeePassDroid. Рис. 6. Внутри группы можно добавить вложенную группу и/или элементы. | KeePassDroid. Рис. 7. Добавление элемента Facebook. |
После добавления элемента группа выглядит следующим образом:
KeePassDroid. Рис. 8. Вид группы после добавления элемента. | KeePassDroid. Рис. 9. Предложение скопировать пароль. |
Внутри элемента вы можете увидеть введенную вами ранее информацию. Пароль отображается точками – в открытом виде вы не узнаете его даже при редактировании элемента. Вместо этого KeePassDroid предлагает вам скопировать пароль в буфер обмена, размещая это предложение в системной области уведомлений. Но почему-то, дважды По замечанию пользователя @pr0tey — в первой строчке приложение предлагает вам скопировать логин, во второй — пароль (Рис. 9).
KeePassDroid. Рис. 10. Меню программы. | KeePassDroid. Рис. 11. Настройки. |
Меню программы (Рис. 10), по моему мнению, обладает достаточным и необходимым функционалом — поиск по существующим элементам, изменение мастер-пароля и настройки программы, которые чем-то напомнили мне настройки программы TrueCrypt (Рис. 11). KeePassDroid позволяется вам хранить или не хранить историю файла-ключей, время хранения в буфере обмена, скрывать или не скрывать пароль и так далее. В целом, мои впечатления от приложения — положительные.
2. B-Folders
Официальный сайт
Похоже, что создание базы данных при запуске приложений хранения секретной информации — это некий негласный стандарт среди разработчиков платформы Android
Приложение B-Folders не выбивается из этого стандарта, и при первом запуске пользователь видит стандартное предложение:
B-Folders. Рис. 1. Создание БД для паролей.
При создании базы пользователь имеет возможность указать место ее хранения (во внутренней памяти телефона, либо на SD-карте), задать пароль, а также указать время, через которое база данных будет закрыта, если не используется. Для ее открытия вам снова придется ввести пароль.
К сожалению, в момент создания БД B-Folders “порадовало” меня неприятным экраном, однако после перезапуска продолжило работу:
B-Folders. Рис. 2. Приложение неожиданно закрылось.
При первом запуске разработчики приложения уведомляют своих пользователей о новых возможностях программы с помощью всплывающего окна:
B-Folders. Рис. 3. Уведомление о новых возможностях.
В уведомлении говорится, что теперь в программе появилась возможность создавать базу данных на SD-карте, а также синхронизировать ее с помощью USB-кабеля, помимо ранее существующих способов сделать это через сеть. Лично я не люблю подобные уведомления и считаю, что список возможностей программы можно было просто вынести в раздел “справка” или подобный.
Создать новый элемент в B-Folders легко — необходимо нажать на кнопку “New Item”, после чего программа предоставит вам следующий выбор:
B-Folder. Рис. 4. Список создаваемых элементов.
Как всегда, я создаю папку (группу, категорию) “соцсети” (Рис. 5), внутри нее элемент “Login Password” (Рис. 6)
B-Folders. Рис. 5. Папка “социальные сети” | B-Folders. Рис. 6. Создание элемента Facebook |
Так же как и KeePassDroid, B-Folders позволяет создавать элементы внутри других элементов, и, главное, вложенные папки. Таким образом, пользователь получает большую свободу в распределении своих элементов.
B-Folders. Рис. 7. Так выглядит элемент “facebook” внутри директории. | B-Folders. Рис. 8. Закрытие базы данных при переключении приложения. |
При работе с программой была выявлена странная особенность. B-Folders зачем-то закрывает базу данных паролей при нажатии на кнопки “Назад” или “Домой” и, таким образом, вам придется вводить мастер-пароль каждый раз, если вы просто захотите переключиться между B-Folders и браузером. По-моему — это не слишком удобно.
Заканчивая описание, скажу следующее. У B-Folders, есть сильная сторона — возможность синхронизации с настольным компьютером, однако, мне не слишком нравятся программы, которые хранят мои пароли и, при этом, имеют неконтролируемый доступ в Интернет.
В целом, впечатление положительные, но также хочется пожелать авторам, чтобы они сделали работу приложения более стабильной.
3. Handy Safe Pro
Официальный сайт
При первом запуске приложение честно предупреждает пользователя о том, что ему доступна полнофункциональная бесплатная версия сроком на 14 дней (рис. 1.)
Handy Safe Pro. Рис. 1. Trial Предупреждение. | Handy Safe Pro. Рис. 2. Создание новой базы. |
Следующий шаг — по уже сложившейся традиции — создание базы данных для хранения секретной информации (Рис. 2.). После этой процедуры Handy Safe Pro показывает экран с предустановленным набором красивых папок, который, однако, меня не интересует — потому что я снова создаю папку “соцсети”, для того, чтобы разместить там элемент “Facebook” 🙂
Handy Safe Pro. Рис. 3. Предустановленный набор папок. | Handy Safe Pro. Рис. 4. Создание нового элемента. |
При добавлении нового элемента в папку “соцсети” приложение показало очень скромный перечень из трех элементов — Карточка, Шаблон и Папка, однако затем:
Handy Safe Pro. Рис. 5. Наборы элементов.
О да! Разработчики предусмотрели для меня список самых популярных интернет-сервисов, среди которых большой и красивой иконкой выделялся мой любимый Facebook!
Handy safe Pro. Рис. 6. Заполнение информации элемента. | Handy Safe Pro. Рис. 7. Добавленный элемент. |
Заполнение информации об элементе напоминает ранее рассмотренные программы, но заполняемая информация не ограничивается фиксированным количеством полей – вы вольно добавить столько контактных данных, сколько захотите. Единственное, что мне показалось немного странным — для ввода пароля используется обычное текстовое поле, что все-же несколько странно для такого приложения.
Однако, в просмотре информации об элементе введенная информация предстает перед пользователем так, как нужно (рис. 8) и раскрывается только после нажатия кнопки “Show Password” (рис. 9):
Handy Safe Pro. Рис. 8. Просмотр “карточки” элемента. | Handy Safe Pro. Рис. 9. Подробная информация элемента. |
Просматривая подробную информацию, вы так же имеете возможность скопировать пароль в буфер обмена.
Handy Safe Pro. Рис. 10. Меню программы. | Handy Safe Pro. Рис. 11. Настройки. |
Handy Safe Pro так же как и B-Folders имеет возможность синхронизации данных с настольным компьютером, однако, при этом ваши данные не будут передаваться через интернет.
4. Password Master
Официальный сайт
Password Master — пожалуй, самая странная из всех рассмотренных в этом обзоре программ.
Ну что ж, в семье не без урода кто-то все-таки должен был выделиться из толпы. Традиционное создание БД представлено вводом главного пароля, который может быть только комбинацией цифр. Лично я считаю это не слишком безопасным, однако, кому-то может понравиться упрощенный ввод информации для мобильного устройства. Кто знает… Другой странностью этого приложения явился экран, с просьбой указать свой главный почтовый ящик. Основная роль почтового ящика — возможность восстановления мастер-пароля, если вы вдруг забудете его. Конечно, это опять удобство в ущерб безопасности.
Password Master. Рис. 1. Ввод мастер-пароля. | Password Master. Рис. 2. Ввод e-mail для восстановления пароля. Адрес впоследствии нельзя изменить. |
При создании элемента, Password Master, к сожалению, не предоставляет возможность создания собственных рубрик, поэтому элемент “Facebook” мне пришлось сделать как есть, назначив ему категорию “интернет”, вместо уже полюбившейся мне категории “соцсети”.
Password Master. Рис. 3. Добавление элемента Facebook. | Password Master. Рис. 4. Общий перечень рубрик, доступных для распределения элементов. |
Запись пароля производится в обычном текстовом поле, после чего складывается впечатление, что разработчики этого программного продукта совсем уж наплевали на безопасность.
Внешний вид элементов зависит напрямую от выбранной рубрики:
Password Master. Рис. 5. Добавленный Facebook.
Настройки это приложения ничем не примечательны, поэтому останавливаться на них не буду. Впечатление от программы — весьма неоднозначные, хотя, возможно она понравится тем, кто любит совсем простой софт.
5. OI Safe
Официальный сайт
Работа с OI Safe похожа на работу с предыдущими приложениями – все начинается с ввода мастер-пароля (рис.1) и предупреждения о том, что необходимо сохранить ключ (рис. 2):
OI Safe. Рис 1. Ввод мастер-пароля. | OI Safe. Рис 2. Предупреждение о необходимости сохранить ключ. |
После принятия пользовательского соглашения в OI Safe, как и в KeePassDroid, пользователь видит список из двух предустановленных категорий — Buisness и Personal. К сожалению, я ошибся и решил создать элемент “Facebook” внутри категории Personal. Заметив ошибку, я отменил создание, однако OI Safe добавило в категорию пустой элемент (рис. 3,4):
OI Safe. Рис. 3. Добавление пустого элемента. | OI Safe. Рис. 4. Рубрика Personal содержит пустой элемент. |
С созданием категории “Соцсети” и добавлением элемента “Facebook” никаких проблем уже не возникло:
OI Save. Рис. 5. Добавление элемента Facebook. | OI Save. Рис. 6. Элементы и рубрики не содержат значков. |
Второй минус этого действия — невозможность назначить значки для элементов или рубрик.
Меню программы (рис. 4.), кажется весьма скромным, если не выбрать пункт “Еще” (рис. 7).
OI Safe. Рис.7. Функциональные возможности. | OI Safe. Рис. 8. Параметры программы. |
Настройки программы также напоминают KeePassDroid, и так же как и KeePassDroid — OI Safe не поддерживает синхронизацию данных пользователя с настольным компьютером.
Источник