首先,我不想重新发明轮子,我只想自己造一辆车。非产品环境;仅为娱乐和娱乐。
目标是使用单个私有(从未发布)主密码为每个网站帐户(twitter.com、reddit.com等)创建唯一的密码(令牌)。
以下方法是否与这些目标一致?
HOST_HASH = SHA512( LOGIN + SERVER )
USER_HASH = SHA512( USER_NAME + HOST_HASH )
PWD_HASH = SHA512( USER_PASSWORD )
KEY = PBKDF2_SHA256( USER_HASH, PWD_HASH, ITERATIONS_300000, LENGTH_512BITS )
DIGEST = HMAC_SHA512( HOST_HASH, KEY )
TOKEN = BASE64( SHA1(DIGEST) ) #-- just for convenient outputUSER_NAME =用户全名(即:琼斯·史密斯)USER_PASSWORD =用户秘密主密码(或密码)LOGIN =用户别名或电子邮件或任何用于登录的内容(即: jsmith123)SERVER =网站或域名(即: stackoverflow.com)TOKEN =强且唯一的密码,很容易重建,但很难猜测(?)发布于 2022-01-19 02:59:39
你用哈希哈希。在你的计划中它是安全的。见这里的细节。
您使用PBKDF2,从而保护派生密码不受暴力胁迫。
但是,您的方法可能会导致可用性问题。假设您拥有网站、电子邮件服务、社交网络、视频/音频服务、网络商店、银行等的100-200个帐户。请考虑以下情况:
要更改一个网站的密码,您必须更改基本密码。这将改变所有其他网站的派生密码。这就是为什么你必须去每一个网站,并改变你的密码。
你决定这对你是否可以接受。
但是,如果您使用密码管理器,您将得到可靠的保护密码,例如使用AES-256加密,使用可配置的迭代次数进行密码派生,您仍然需要记住一个好的密码,比如基于dicewire的密码,但优点是,不同资源的所有密码都是相互独立的,并且不会出现上述可用性问题。
https://crypto.stackexchange.com/questions/98173
复制相似问题