Могу ли я создать безопасный генератор паролей на основе «чистой функции», используя случайный модуль python? - PullRequest
0 голосов
/ 28 апреля 2020

Поэтому я искал способы управления своими паролями без использования менеджера паролей на основе сервера, такого как LastPass, и я наткнулся на https://lesspass.com. Согласно веб-сайту, этот инструмент создает один и тот же пароль для данного мастер-пароля, имени пользователя и веб-сайта. Мне очень понравилась идея, и я решил сделать собственное доказательство концепции в python, используя случайный модуль. Я сделал эту простую функцию:

    import random
    import string
    import os


    MASTER_PASS=os.environ.get('MASTER_PASS')


    def generate(platform, user, length):
        random.seed(platform+user+MASTER_PASS)
        letters=string.ascii_letters +string.digits + string.punctuation
        password=""
        for i in range(length):
            password+=random.choice(letters)
        print(password)



    generate("facebook", "xyz.abc", 32)

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

РЕДАКТИРОВАТЬ:

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

1 Ответ

2 голосов
/ 28 апреля 2020

Модуль random не является криптографически безопасным. Вместо этого следует использовать модуль secrets.

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

API идентичен, поэтому ваш код будет работать.

Что касается этого подхода, то именно так работают другие генераторы паролей. Просто помните, сколько энтропии на самом деле в пароле (зависит от length и общего размера letters).

...