首页 > 解决方案 > 我可以使用 python 的随机模块制作一个安全的基于“纯函数”的密码生成器吗?

问题描述

所以我一直在寻找不使用基于服务器的密码管理器(如 LastPass)来管理我的密码的方法,我遇到了https://lesspass.com。根据该网站,该工具为给定的主密码、用户名和网站创建相同的密码。我真的很喜欢这个想法,并决定使用 random 模块在 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 就应该足够安全,但我无法摆脱这种愚蠢不安全的感觉。谁能指出这种方法的明显缺陷并提出一些提高鲁棒性的方法?

编辑:

我认为我需要做一些澄清。我想制作一个程序,我可以在其中输入我的平台名称、用户名和主密码来生成密码。此外,每当我输入相同的组合时,我必须获得相同的密码。我实际上是在尝试创建一个不依赖任何服务器来存储我的密码的无保险库密码管理器。

标签: pythonrandomcryptographypasswordspassword-encryption

解决方案


random模块不是密码安全的。您应该改用该secrets模块。

特别是,应该优先使用秘密,而不是随机模块中的默认伪随机数生成器,该生成器是为建模和模拟而设计的,而不是安全或密码学。

API 是相同的,因此您的代码可以正常工作。

就方法而言,这几乎就是其他密码生成器的工作方式。请记住密码中实际包含多少熵(取决于length的总大小letters)。


推荐阅读