Nomad
Nomad12. Oktober 2020 13:54

Как использовать свой алгоритм хэширования пароля в Django?

bcrypt, django

всем привет

у меня вопрос по поводу метода хранения пароля в джанго.
по умолчанию джанго ставит алгоритм pbkdf2_sha256
в документации написанно что есть еше 2 алгоритма, меня интересует bcrypt
НО когда меняешь на bcrypt то джанго ставит work factor = 12
моя задача поменять на work factor = 15

в django.contrib.auth есть hashers.py а в нем class BCryptSHA256PasswordHasher(BasePasswordHasher):

в данном классе прописан фактор: rounds = 12

знает кто как переопределить данное значение???

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

5
Илья Чичак
  • 12. Oktober 2020 14:45
  • Die Antwort wurde als Lösung markiert.

1) а чем не устроил стандартный алгоритм? (мне реально просто интересно=))
2) наследуешься от этого класса, переопределяешь классовую переменную на 15 и указываешь свой класс в качестве хешера

# utils/hashers.py

class MyBCryptSHA256PasswordHasher(MyBCryptSHA256PasswordHasher):
    rounds = 15


# settings.py

PASSWORD_HASHERS = [
    'utils.hashers.MyBCryptSHA256PasswordHasher',
    'django.contrib.auth.hashers.Argon2PasswordHasher',
    'django.contrib.auth.hashers.PBKDF2PasswordHasher',
    'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher',
]

    Илья Чичак
    • 12. Oktober 2020 14:48

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

      Nomad
      • 12. Oktober 2020 16:18

      спасибо за решение.

        Nomad
        • 13. Oktober 2020 09:56
        • (bearbeitet)

        привет

        если честно это просто мой интерес, а появился вопрос после того как я где то в нете прочитал что во первых bcrypt это надежнее а если фактор 15 ТО у брудфорсеров нету никакого шанса

        да и по сути не важно, я просто задался вопросом )
        и спасибо вам за ответ

          Илья Чичак
          • 13. Oktober 2020 11:15
          • (bearbeitet)

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

          при авторизации, когда пользователь ввел пароль, присходит следующее:
          1) ищется пользователь по email (если не нашелся - отбой)
          2) берется хэш пароля этого пользователя и из него берется алгоритм, соль, количество преобразований
          3) введеный пароль хэшируется тем же алгоритмом, с той же солью, столько же раз
          4) хэши сравниваются (не совпали - отбой)

          самый важный момент в плане безопасности django:
          если пользователь не нашелся - всеравно будет взят хэш от введеного пароля, чтобы нельзя было по времени ответа подобрать login-ы, которые уже есть (хэширование 30 000 раз - не самая быстрая операция, которая еще и выполняется на процессоре)
          без этого, если login уже есть, сервер отвечал бы на сколько-то миллисекунд дольше
          а уже к выявленным логинам можно применить брутфорс, от которого шифрованием защититься нельзя
          брутфорс подбор пароля можно предотвратить, сделав что-то типа 3 попытки логина и если все попытки не удачные, постепенно увеличивать задержку во времени между попытками

          про второй шаг:
          исключительно для обратной совместимости, поскольку раз во сколько то версий разработчики Django могут увеличить количество итераций или ввести и сделать по-умолчанию новый алгоритм, и чтобы твои уже существующие пароли не превратились в тыкву - типа старые пароли проверяются старым алгоритмом, новые - новым, и никто ничего не заметил

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

          главное, в продакшене не менять SECRET_KEY - он тоже используется в хэшировании паролей + генерация кук (и если куки - не так страшны, то отвалившиеся пароли - штука печальная)

            Kommentare

            Nur autorisierte Benutzer können Kommentare posten.
            Bitte Anmelden oder Registrieren
            Letzte Kommentare
            A
            ALO1ZE19. Oktober 2024 08:19
            Fb3-Dateileser auf Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
            ИМ
            Игорь Максимов5. Oktober 2024 07:51
            Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
            d
            dblas55. Juli 2024 11:02
            QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
            k
            kmssr8. Februar 2024 18:43
            Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
            Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
            Jetzt im Forum diskutieren
            J
            JacobFib17. Oktober 2024 03:27
            добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
            JW
            Jhon Wick1. Oktober 2024 15:52
            Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
            КГ
            Кирилл Гусарев27. September 2024 09:09
            Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
            F
            Fynjy22. Juli 2024 04:15
            при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

            Folgen Sie uns in sozialen Netzwerken