我们能否利用比特币的想法来摆脱传统的密码方案?(用户名、哈希)

Can we use the bitcoin idea to get rid of traditional password schemes? (usernames, hashing)

提问人:prime 提问时间:8/23/2023 更新时间:8/31/2023 访问量:44

问:

我考虑了传统的密码哈希:https://security.stackexchange.com/questions/211/how-to-securely-hash-passwords/31846#31846

然而,比特币有一种方法可以让人们使用人类可读的助记词作为他们“账户”的恢复秘密(BIP-39):https://en.bitcoin.it/wiki/Seed_phrase

他们可以从一个列表中使用 12-24 个英语随机单词,因此该单词集具有很高的熵。 这有助于在一张纸上备份重要机密的传统方法,而不是备份很长的加密密钥。

从高熵种子中,它们以编程方式派生 ECDSA 密钥对或密钥树,并使用公钥作为标识符,使用私钥对可以使用公钥验证的质询进行签名。

我们可以使用类似的系统来摆脱传统密码身份验证的一些问题吗?(例如发送纯文本密码和在服务器上密集使用大量云成本对计算机进行哈希处理,使用个人身份数据作为用户名,不知道服务器是否正确散列或如何处理我们的个人数据)

顺便说一句:网络钓鱼机密的问题可以通过自动填充或谨慎、不经常手动使用机密来解决。

这个想法:

  • 生成 25 个随机 base32 标记(26 个字母 + 10 个数字 - I、O、1、0)作为人类可读的密码,可以存储在通行证管理器或便利贴或任何地方(12-24 个单词是很多字符,也可以通过减少字符数和视觉分隔符来实现可读性)
  • 我们可以使用 pbkdf2 将客户端上的密码散列为种子,并使用种子生成 ECDSA 密钥对,而不是在服务器上进行密码散列,就像使用 BIP-32 一样: https://en.bitcoin.it/wiki/BIP_0032
  • 公钥将作为一种用户名(匿名),存储在服务器上,而不是密码哈希
  • 如果泄露,暴力攻击将不得不重新创建计算机密集型密码哈希过程来攻击私钥,就像我们在服务器上存储密码哈希一样
  • 通过身份验证,客户端将进行散列,提供公钥并使用私钥登录一些随机的服务器质询,服务器将验证公钥的存在并找到相应的内部用户 ID 并使用公钥验证签名

这似乎是对传统密码管理的帕累托改进:

  • 秘密不会传播
  • 服务器负载最小,因为 CPU 密集型密码哈希发生在客户端
  • 如果公钥在服务器上泄漏,则类似于密码哈希泄漏时:暴力攻击必须执行密集的 pbkdf2 哈希过程(这就是为什么我会使用密码哈希来获取种子)
  • 没有个人用户名
  • 透明密码哈希

它甚至可以与用户名/电子邮件/电话号码+密码等传统方案一起使用。 初始熵通常不是那么大,腌制没有真正的意义,因此可以使用一种全局盐(胡椒)。但是,由于没有单独加盐每个条目,我们损失了用户名,因为我们没有将纯文本存储在受感染的服务器上,因此在客户端上对用户名+密码进行密码哈希时,熵实际上更高。

至于实现,我考虑了以下库:https://github.com/bitcoinjs/bip32/blob/master/src/bip32.js

但是 Web 加密 API 中可能有本机方法可以执行相同的操作。

安全 比特币 密码-哈希

评论


答:

-2赞 bk2204 8/23/2023 #1

有一种使用最近标准化的 ECDSA 和/或 Ed25519 密钥对的现有方法,称为密钥。它们使用与 FIDO2 安全密钥(如 YubiKeys)相同的技术,但它们的存储方式可以跨计算机传输。它们不是用种子生成的,而是伪随机生成的,并存储在某种加密存储中(可能以正常方式受密码保护)。它们通常可以在大多数支持 FIDO2 的网站上使用,只需很少的额外工作。

正如你所提到的,优点是服务器只有一个公钥,而这些公钥已经被普遍认为是安全模型的一部分。由于它们是使用 CSPRNG 生成的,因此假设 CSPRNG 是安全的,因此在功能上无法猜测它们。此外,它们在每个站点都是唯一的,不能与其他密钥关联,因此站点 A 无法仅根据凭据将其用户与站点 B 相关联。

许多网站仍将使用用户名,因为在与其他用户的交互或支持方面为用户提供标识符很方便。由每个站点决定。

请注意,对于 SSH,OpenSSH 已经提供基于 FIDO2 的安全密钥作为特殊密钥类型,因此用户可以使用 ECDSA 或 Ed25519 密钥,其中存储作为安全密钥进行备份,并且 SSH 密钥已经受益于许多与通行密钥相同的好处。

评论

1赞 prime 8/31/2023
通行密钥的营销很好,但我的问题完全不同,使用比特币的想法。许多人希望在本地存储他们的秘密并完全控制它,存储私钥不起作用(很长时间),因此我们的想法是以强大的人类友好代码为起点。密钥是通过同步云密钥管理器管理的私钥。不是每个人都可以/想要使用复杂的通行证管理器。“比特币的想法”已经是密码向前迈出的一步,它不尊重那些不想使用内置或跨平台密码管理器的人。它还有很多其他缺陷。
1赞 prime 8/31/2023
任何网站都可以在内部使用用户名。用户名不需要成为身份验证过程的一部分,尤其是电子邮件。如果您撰写 fido/passkey 营销博客文章,您肯定知道 passkey,尤其是 passkey 背后的身份验证技术不需要用户名。他们调用密钥 ID 用户 ID(以及不同位置的用户句柄,呃...),但它实际上是后台身份验证使用的密钥。
1赞 prime 8/31/2023
我认为比特币的想法也是对密码想法的帕累托改进:秘密的创建不会发生在苹果/谷歌/Microsoft系统中(并且在闭源环境中使用不那么随机的生成器,在闭源环境中创建私钥可能会使其对美国国家机构不利)。您可以真正选择如何管理您的密钥:纸张、本地磁盘、通行证管理器。您有一个密钥,而不是 3、4、5、6 个密钥。通行密钥将是一个维护地狱,用户可以在不告知的情况下删除它们,创建另一个,在不知情的情况下更改用户名标签等。
1赞 r j 8/31/2023
我知道你是fido/passkey的支持者,但问题又来了:“我们可以使用比特币的想法来摆脱传统的密码方案吗?比如我能买到杜松子酒吗?酒吧招标:有一种现有的方法是将可口可乐(链接到公司网站)倒在糟糕的威士忌(链接到 fido 标准)上,然后得到酒精饮料。让公司决定是否要在饮料中使用大量糖!饮料不需要糖。您应该进入无糖酒吧并决定是否要喝糖(提供个人身份信息)。
0赞 bk2204 9/1/2023
你问,“我们能不能用一个类似的系统来[解决这些问题]?我说,是的,你可以使用一个现有的系统。您可以使用任何您想要的方法构建密钥,如果您愿意,包括基于比特币的方法。该标准是存储中立的,如果需要,您可以使用本地开源密码管理器或动态生成密码管理器。但是,如果需要轮换凭据,确定性地生成密钥可能会带来问题。