基于证书的身份验证与用户名和密码身份验证相比有哪些优点和缺点?我知道一些,但我希望得到一个结构化和详细的答案。
更新
我也有兴趣知道他们容易受到哪些攻击,例如到目前为止提到的蛮力,而没有提到证书...... XSRF 呢?证书的寿命预计会更短,并且可以被撤销,而密码在管理员策略要求更改之前的寿命会更长......
基于证书的身份验证与用户名和密码身份验证相比有哪些优点和缺点?我知道一些,但我希望得到一个结构化和详细的答案。
更新
我也有兴趣知道他们容易受到哪些攻击,例如到目前为止提到的蛮力,而没有提到证书...... XSRF 呢?证书的寿命预计会更短,并且可以被撤销,而密码在管理员策略要求更改之前的寿命会更长......
1.用户很笨
密码是适合用户记忆的东西,用户可以选择它。由于身份验证是关于远程验证用户的物理身份(从验证者的角度来看),因此用户行为必然参与该过程 - 但是,密码依赖于在处理安全性方面最为平庸的用户部分,即他的大脑。用户根本不了解密码熵的含义。我没有责备他们认为:这是一门技术学科,一门专业,短期内不可能真正成为“常识”。另一方面,物理代币的安全性要“有形”得多,普通用户可以变得相当擅长。进化论者会说,在过去的一百万年里,人类已经被积极地选择了,因为那些不能坚持使用他们的燧石工具的人没有足够的生存来生育后代。
好莱坞电影可以用作用户如何看待密码的模型——只要这些用户也去看电影。大敌总是有一个简短的密码,只是喜欢吹嘘它,并尽可能地分发线索。而且,英国特工总是能及时猜出密码,以停用放置在女王最喜欢的花坛下的核聚变炸弹。电影投射了一个扭曲的、夸张的现实,但它们仍然代表了普通用户操作的心理基线:他们将密码设想为通过比攻击者更“机智”来提供安全性。而且,大多数人总是失败了。
“密码强度”可以通过强制规则(至少八个字符、至少两个数字、至少一个大写和一个小写字母......)有所提高,但这些规则被用户视为一种负担,有时甚至被视为一种负担。对他们与生俱来的自由的难以忍受的限制——因此用户开始以极大的创造力与规则作斗争,从传统的在便利贴上写下密码开始。通常情况下,密码强化规则会适得其反。
另一方面,用户证书意味着一个存储系统,如果该系统是用户随身携带房屋或汽车钥匙的物理设备,那么安全性(部分)取决于普通用户对安全性的管理程度。物理对象,他们通常做得很好。至少比选择好的密码要好。所以这是证书的一大优势。
2. 证书使用非对称加密
“不对称”是关于分离角色。使用密码,验证密码的人在某些时候知道密码或密码等效数据(嗯,在PAKE协议的情况下并不完全正确)。对于用户证书,证书由证书颁发机构颁发,证书颁发机构保证物理身份和加密公钥之间的链接。验证者可以是一个不同的实体,并且可以验证这样的链接并使用它来验证用户,而无需冒充用户的能力。
简而言之,这就是证书的重点:将定义用户数字身份的人(即进行从物理身份映射到计算机世界的实体)与认证用户的人分开。
这为带来不可否认性的数字签名开辟了道路。这对从在线客户那里获取金融订单的银行特别感兴趣:他们需要对客户进行身份验证(这是我们正在谈论的钱,这是一个非常严重的问题),但他们希望获得令人信服的订单痕迹——在以下意义上:a法官会信服。仅通过身份验证,银行就可以确保它正在与正确的客户交谈,但无法向第三方证明;银行可以建立一个虚假的连接记录,因此对于声称被银行本身陷害的客户来说,它是没有武器的。即使用户有证书,数字签名也不会立即可用;但是如果用户可以使用证书进行身份验证,那么大部分的工作已经完成。
此外,密码本质上容易受到网络钓鱼攻击,而用户证书则不然。正是因为不对称:证书的使用从不涉及向对等方透露任何秘密数据,因此冒充服务器的攻击者无法通过这种方式学习任何有价值的东西。
3. 证书复杂
部署用户证书很复杂,因此很昂贵:
正如任何 PKI 供应商都可以告诉您的那样(事实上,我确实告诉您),颁发和管理证书是一大堆蠕虫。尤其是撤销管理。PKI 大约是 5% 的密码学和 95% 的程序。可以做到,但不便宜。
用户证书意味着用户以某种方式存储他们的私钥,在他们的“独占访问”下。这可以通过软件(现有的操作系统和/或 Web 浏览器可以做到这一点)或使用专用硬件来完成,但是这两种解决方案都有自己的一组可用性问题。将出现的两个主要问题是 1) 用户丢失了他的密钥,以及 2) 攻击者获得了密钥的副本。软件存储使密钥丢失成为一个可能的问题(受故障硬盘的摆布),并且在多个系统(例如台式计算机和 iPad)之间共享密钥意味着一些不太可能很好地防止攻击者的手动操作。硬件令牌意味着设备驱动程序的整个混乱业务,这可能更糟。
用户证书意味着客户端相对复杂的数学运算;即使对于贫血的 Pentium II 来说,这也不是问题,但是您将无法使用来自通用 Web 站点中的一些 Javascript 的证书。证书需要客户端软件的积极合作,并且所述软件在这方面往往在人体工程学上并不理想。普通用户通常可以学习使用客户端证书进行 HTTPS 连接到网站,但代价是学习如何忽略偶尔弹出的警告,这使得他们更容易受到某些攻击(例如,攻击者试图攻击的主动攻击)给他们自己的假服务器证书)。
另一方面,基于密码的身份验证非常容易集成到几乎所有地方。当然,同样容易搞砸。但至少它不一定涉及一些不可压缩的额外成本。
概括
用户证书允许分离密码无法做到的角色。他们这样做的代价是增加了大量的实施和部署问题,这使得它们变得昂贵。然而,密码仍然很便宜,因为它适合人类的思维,这本质上意味着低安全性。密码的安全问题可以通过一些技巧(最多包括 PAKE 协议)得到一定程度的缓解,最重要的是,在出现问题时责备用户(我们知道普通用户无法选择安全密码,但任何意外都会仍然是他的错——银行就是这样做的)。
用户名密码
优点:易于部署 - 只需要一些代码和安全的数据存储。根据安全策略,可以自动生成密码或强制新用户创建密码。
优点:易于管理 - 密码重置可以(对于某些安全策略)使用自动化工具完成
缺点:为了获得良好的安全性,应尽早并经常重置密码。用户忘记或未能更改密码要么是安全风险,要么是可用性问题。
缺点:好的密码很难记住,这会导致用户重复使用密码或将密码写下来的问题。
缺点:密码数据存储是一个弱点——如果入侵者获得了密码存储,他就会得到主负载。
缺点:密码传输的所有部分都可能导致暴露——为了便于使用而在本地存储密码的网站、以明文形式传输的内部服务器组件、以明文形式存储密码的 COTS 产品中的日志文件。由于秘密是传输的一部分,您的强大程度取决于您最薄弱的环节 - 防止暴露需要认真努力,并且对用户和系统开发人员都有要求。
证书:
优点:不需要传输秘密。私钥证明不包含秘密信息 - 缓解各种存储/传输弱点。
Pro:由受信任方 (CA) 发布,允许跨多个应用程序的状态集中管理系统。如果证书变坏,它可能会被撤销。除非使用共享 ID,否则必须为每个系统单独修复密码破解。
优点:不可否认性案例更强——在大多数密码系统中,用户在创建帐户之前的初始身份验证方式非常薄弱,密码重置机制可以提供另一个合理否认的因素。由于有多种形式的证书颁发,用户很难说不是他们。警告 - 你仍然只和你的 CA 的发行政策一样好。
Pro : 服务于更多目的而不仅仅是身份验证 - 还可以提供完整性和机密性。
缺点:仍然需要密码/pin - 几乎所有私钥对存储机制都可以使用 PIN 解锁。智能卡可以具有防篡改和锁定功能以防止暴力破解,但这并不能解决用户将其 PIN 写在卡所在计算机旁边的便签上的事实。有时,密码问题会在 PKI 中以较小的规模重新出现。
缺点:基础设施的复杂性 - 设置 PKI 并非易事,而且通常在部署和维护方面都非常昂贵,以至于它只能用于大型/昂贵的系统。
缺点:证书状态报告和更新并不容易——由于基础设施的规模和复杂性,撤销已损坏的用户证书非常繁琐。通常,CA 会生成一个 CRL,该 CRL 可能会或可能不会在 OCSP 服务器中提供。然后,每个应用程序都应检查每次登录的 CRL 或 OCSP 状态。这会在 PKI 凭据被报告为已泄露到依赖该凭据的系统实际开始拒绝访问之间给系统带来各种时间延迟。状态更新的速度可以加快 - 但系统复杂性成本更高。
其他几点注意事项:
证书的寿命预计会更短,并且能够被撤销,而密码在管理员政策要求更改之前的寿命会更长......
我不同意这个前提。在我工作过的同时支持密码和 PKI 的系统上,密码更新要求的策略比颁发证书的策略短得多。撤销是一种不同的蠕虫——它是针对不太可能发生的私钥泄露事件。由于私钥数据不通过系统传输,因此通常假设暴露该数据的风险远低于密码暴露的风险。出于实际目的,密码被认为具有较短的寿命。
我也有兴趣知道他们容易受到哪些攻击,例如到目前为止提到的蛮力,而没有提到证书...... XSRF 呢?
你在这里混合苹果和橙子。蛮力可能是对任何一种身份验证凭据的可行攻击 - 但 XSRF 是对底层应用程序类型的攻击,无论身份验证机制如何,这种攻击都是可能的。除非您的意思是因为用户名/密码将通过某种文本界面输入,否则它们可能容易在该界面上执行跨站点脚本。
一般来说(对于我缺乏官方术语表示歉意 - 我通常会查找典型的攻击术语,但我的时间很短):
暴力破解 - 因为您的平均密码的密钥空间小于非对称密钥的密钥空间,所以密码更容易暴力破解。但是,证书上足够小的密钥大小也是可以暴力破解的,并且暴力破解密钥的能力随着 CPU 能力的增长而增长,从而迫使密钥大小增加的激烈竞争。
有根据的猜测 - 使用密码更容易将密钥空间缩小到合理的猜测集合,并且对于大多数非对称密钥算法来说并不那么明显,尽管 RSA 算法中存在弱密钥,因此对密码书呆子的大小有一定的依赖性攻击者是。
社会工程 - 无论哪种方式都可行,尽管证书存储在硬件中,但您不仅要控制用户的 PIN,还要控制存储其密钥的硬件。
内部攻击 - 从系统内部获取凭据,然后使用它们来模拟合法用户 - 取决于。如果密码存储不安全,那么这对于基于密码的系统来说更可行。但是如果你能控制 CA,你可以给自己颁发一个合法的证书,然后这取决于如何控制访问。
中间人 - 取决于 - 如果密码在传输过程中没有被绕过他的加密机制加密,中间人可以拦截密码。这对于 SSL/TLS 是可行的。但是,中间人也可以截获 PKI 传输的部分内容,具体取决于 PKI 的使用方式。没有随机数或时间戳的 PKI 签名容易受到中间人的复制攻击——只要无法判断消息是及时的还是唯一的,他就可以重新发送截获的消息。
我同意斯蒂芬的观点。你提出了一个很难研究的问题,因为这个问题通常不是一个比较的问题。了解为什么两者都存在并且通常不会相互评价的一个好方法是关注使用情况。证书与机器级密钥库相关联,因此非常适合预先计划的特定机器之间的机器对机器身份验证。密码非常适合人们,因为我们是移动的,并且倾向于以难以提前预测的方式从众多系统中进行身份验证。因此证书是典型的预先设计的基于硬件的身份验证,密码适用于基于移动湿件的身份验证。智能卡是向移动人员添加基于证书的身份验证的好方法,也是流程的另一个因素。
最好的系统是组合。您在密钥上输入了密码,因此您有两个因素身份验证。你知道的东西(密码)和你拥有的东西(密钥)。然而,安全层数越多,就越痛苦。这是所有安全性的重大权衡。