Мне нужно зашифровать пароль в Swift и отправить его на мой веб-сервер для хранения в базе данных. Любые лучшие практики? Я видел AESCrypt.encrypt(userPassword, password: API_AUTH_PASSWORD)
, но я не уверен, достаточно ли этого (соленый и т. Д.). Кроме того, на самом сервере, как бы мне пойти на сравнение хешированных паролей для аутентификации входа? Я использую PHP. В основном я спрашиваю, существует ли общепринятый метод шифрования в Swift для хеширования и проверки паролей на веб-сервере на основе PHP.iOS - Шифрование паролей в Swift
ответ
См. this question. Вы должны понимать последствие хеширования на стороне клиента:
Pro: Вы можете использовать большее количество раундов, создавая сильный хэш.
Для справки, 1Password использует как минимум 25 000 патронов PBKDF2-HMAC-SHA512. Вероятно, ваши пользователи не будут использовать diceware, поэтому вам, возможно, понадобится более высокий счетчик.
Con: Вы запираетесь на определенный алгоритм & округлять кол-во.
Выход хеш-файла фактически станет паролем пользователя. Вы не сможете изменить настройки позже. Это означает более слабый хэш с течением времени, поскольку вычислительная мощность увеличивается.
Кроме того, поскольку хэш предоставляет доступ к вашему веб-сайту, он должен храниться в цепочке ключей.
Использование соли (например,
appname + username
) должно препятствовать влиянию на любые другие сайты server breach.Как упоминается ссылка, вы, вероятно, по-прежнему хотите использовать «быстрый» хэш (например,
SHA-512
) на сервере. Это ограничивает ущерб, если скомпрометирована только база данных.На сервере хеши следует сравнивать в постоянное время с
hash_equals
.password_compat
имеет code для более ранних версий PHP.defuse рекомендует использовать случайную соль на стороне сервера при использовании хеширования на стороне клиента.
Альтернативой & более общий сценарий, чтобы сделать все хэширования на сервере.
Для PHP см. password_hash
, password_verify
и password_needs_rehash
.
Если вы используете старую версию PHP, то есть password_compat.
Я делаю это уже, но это означает, что я отправляю пароль в виде обычного текста. Думаю, ответ будет заключаться в том, чтобы защитить сервер с помощью https? –
@itstrueimryan Да, используйте HTTPS. –
Согласитесь, что (быстрое) хеширование на стороне сервера является требованием для клиентской стороны PBKDF2ing, но я не верю, что добавление соли на стороне сервера добавляет любую ценность сверху (требуется со стороны стороны клиента). Я написал исследовательский документ именно по этой теме: [Метод защиты паролей для баз данных для веб-приложений] (https://eprint.iacr.org/2015/387.pdf). Я также ожидаю, что веб-сообщество в будущем будет двигаться к чему-то подобному: у ряда людей были подобные идеи, это просто вопрос анализа и правильное решение! – TheGreatContini
Лучшая практика - НЕ хранить пароль в вашей базе данных.
Вы должны выполнить одностороннюю хэш-функцию, такую как SHA, и вместо этого сохранить значение хэша. Когда вам нужно аутентифицировать пользователя, введите хеш введенный пользователем пароль и сравните хешированные значения. Используйте значение соли в ваших хешах для дальнейшего повышения безопасности.
Ну, yeh. Это то, что я имел в виду. Не простой старый пароль. Я хочу сохранить хешированный и соленый пароль. –
- 1. Шифрование паролей
- 2. Шифрование паролей
- 3. Шифрование паролей
- 4. XOR Шифрование в Swift IOS
- 5. Шифрование паролей в C#?
- 6. Шифрование паролей в AngularJS
- 7. Шифрование паролей в joomla
- 8. Шифрование паролей в Jackrabbit
- 9. Шифрование паролей в Sonar
- 10. Шифрование паролей Java
- 11. Perl шифрование паролей STDIN
- 12. Android - Шифрование паролей
- 13. Шифрование хешированных паролей?
- 14. Как работает шифрование паролей?
- 15. шифрование паролей на python?
- 16. Шифрование паролей с паспортом.js
- 17. шифрование паролей joomla
- 18. Что такое шифрование паролей?
- 19. шифрование паролей в приложениях iphone
- 20. Шифрование паролей в файле MSBuild
- 21. Шифрование паролей ключей в java
- 22. Шифрование паролей в функции кодирования
- 23. Асинхронное шифрование в Swift
- 24. Двустороннее шифрование паролей без ssl
- 25. Шифрование паролей с использованием javascript
- 26. Базовое шифрование паролей php/db
- 27. Шифрование паролей для C3P0 ComboPooledDataSource
- 28. Sha1 или шифрование для паролей
- 29. Шифрование паролей и криптографических вопросов
- 30. Шифрование только паролей в web.config ASP.NET
Вы не расшифровываете данные на сервере. Это плохой план. – rmaddy