为什么数字签名不是验证 Web 客户端的标准方法?

信息安全 验证 密码学
2021-08-26 23:26:52

网络是一堆不兼容的 cookie 方案,愚蠢的要求(“您的密码必须包含字母、数字和至少一个来自 !()-_. 的符号,并且必须以字母开头,一旦您更改它就可以” t 重用它”)和不可靠的(更不用说集中的)第三方身份验证协议。

在我看来,如果公钥像当前电子邮件地址一样被普遍视为在线身份,那么网络将更加安全和标准化。验证一条信息就像加密签名一样简单。它甚至可能发生在应用层,例如使用 HTTP 标头Signature: algorithm=sha256;encoding=base64;signed-digest=...;public-key=...

公钥密码学真的不适合在所有互联网层上提供通用识别和身份验证吗?还是非加密身份验证是市场失灵?

4个回答

最简单的答案是密钥/证书分发是一个困难且昂贵的问题。

为了使证书安全工作,您通常需要一些受信任的权威机构(通常是 CA)来签署证书。谁会这样做?您不能指望某个受信任的实体四处走动并批准每个互联网用户的证书。您可以使用信任网络,但这有其自身的复杂性(我们信任哪些签名?普通互联网用户会关心认可其他人的证书吗?让他们这样做是否安全?)。证书吊销怎么办?你怎么能很好地处理数百万客户的问题?

你很快就指出了密码的缺陷——你是对的。但是没有其他方法具有密码的所有优点,因此任何替代方法都带来了好处和成本。

关于这个话题,我推荐剑桥安全小组的工作。您可能对他们博客上的身份验证标签感兴趣。最近一篇关于该主题的论文是这篇博文中总结的替代密码的探索:Web 身份验证方案的比较评估框架) 。

不幸的是,本文没有分析您提出的方案,私钥存储在用户的 PC 上,而用户在注册时提供的公钥作为其身份的一部分。但是我们可以查看论文中使用的标准,看看哪些标准失败了。

各种认证方案的比较评估

  • Scalable-for-Users:这取决于您是希望用户拥有一个身份还是每个服务一个身份。
  • Nothing-to-Carry:只要您接受将私钥存储在手机中,您的方案就具有Quasi-Nothing-to-Carry属性。
  • Easy-Recovery-from-Loss:只要私钥专门用于身份验证就可以了——更改私钥就像重置密码一样简单。(作者认为密码重置不在他们的研究范围内。)
  • 服务器兼容:不,就像密码的任何其他替代方案一样,必须修改服务器。诚然,这与其说是技术问题,不如说是营销问题。
  • Browser-Compatible:这取决于客户端如何使用私钥(这对安全性有影响)。
  • Resilient-to-Theft:密码不是很有弹性,但记忆的密码对盗窃具有弹性,这与存储在设备上的密钥不同。

我看到的两个主要障碍是设备被盗的风险和多个身份的管理。通过使用密码保护私钥可以在一定程度上防止设备盗窃,但密钥文件会受到攻击者无限制的高速暴力搜索,这与用于在线身份验证的密码不同,可以被限制。

多个身份的管理是一个更大的问题:这意味着用户必须决定是否在多个站点上使用相同的身份。重复使用相同的密钥很方便,但很容易被发现,因此这是一个主要的隐私问题。虽然这对于安全性来说是一个坏主意,但用户可以(并且确实)重复使用密码,而不涉及隐私。在不同的站点上使用不同的身份需要对多个密钥进行繁琐的管理,这比一般用户想要的负担更大。更好的方案是将私钥与一些秘密存储库结合起来,这与密码管理器共享所有困难。

联合身份是您描述的问题的名称。

信息技术中的联合身份是链接个人电子身份和属性的方法,存储在多个不同的身份管理系统中。

它没有在网络上发生的原因是网络不是从头开始设计的,这是一个很难解决的问题。大多数网站阻力最小的路径是管理自己的密码数据库。

要理解这些问题,请考虑

  1. 用户希望能够从一台设备移动到另一台设备,但是没有简单的硬件解决方案可以将密钥库安全地从一台设备移动到另一台设备。
  2. 单一身份显然对恶意软件没有更强的抵抗力——它可能只是一个单点故障。如果恶意软件进入一台机器,并窃取了整个网络(或其中大部分)的单个私钥,那么你就有麻烦了。恶意软件可以通过键盘记录窃取密码,但仅限于您访问的那些网站,而它仍然存在。

它归结为经济学。

密码安全性并不完美。但它足以解决网络世界中的大多数问题。对于大多数人来说,它也很简单——即使他们经常忘记密码本身。密码安全也恰好可以在您能想到的任何平台和用户界面上实现。通常,它已经很普遍,以至于已经融入您的工具包中。

正如Oleksi 指出的那样,证书样式的安全性很难站起来你也将面临让人们能够使用它的挑战。尤其是在像今天这样的多设备世界中。想象一下帮助你妈妈在她的智能汽车上安装证书的乐趣。