信息安全精要:从概念到安全性评估
上QQ阅读APP看书,第一时间看更新

2.2 身份验证

在信息安全中,身份验证是用于确定身份声明是否属实的一系列方法。需要注意的是,身份验证并不决定被验证方被允许做什么,这只是一个单独的任务,称为“授权”。我将在第3章讨论授权。

2.2.1 因子

进行身份验证有多种方法:你知道的事项、你的特征、你拥有的东西、你所做的事情,以及你所在的位置。这些方法被称为因子。当尝试验证身份声明时,你将使用尽可能多的因子。你使用的因子越多,得到的结果就越真实。

你知道的事项,这是一个常用的身份验证因子,包括密码或PIN码。但是,这类因子有些弱,因为如果这类因子所依赖的信息被公开,你的身份验证方法就可能不再唯一。

你的特征,这是基于个人相对特有的身体特征的因子,通常称为生物识别。虽然生物识别可以包括简单的属性,如身高、体重、发色或瞳孔颜色,但这些属性通常不够独特,不足以构成非常安全的识别符。而复杂的识别符,如指纹、虹膜、视网膜图案或面部特征,则更为常见。它们比密码要强,因为伪造或窃取物理识别符的副本尽管存在可能性,但更为困难。存在的问题是,生物识别是否真的算是一个验证因子,或者只构成证实。我将在本章稍后的部分再次就生物识别问题进行更深入的讨论。

你拥有的东西,通常是基于物质占有的因子,尽管可以扩展到某种逻辑概念。常见的例子有ATM卡,州或联邦颁发的身份证或基于软件的安全令牌,如图2-1所示[3]。一些机构(如银行)已开始使用访问逻辑设备作为身份验证的方法,如手机或电子邮件账户。

036-01

图2-1 向移动电话发送安全令牌是一种常见的身份验证方法

这类因子的强度可能会根据实施情况而有所不同。如果想要使用发送到不属于你的设备的安全令牌,就需要窃取这个设备来伪造身份验证方法。另外,如果将安全令牌发送到电子邮件地址,拦截起来就会容易得多,而且强度也会大大降低。

你所做的事情,有时被认为是你身体特征的变种,这是基于个人活动或行为的一个因子。这可能包括对个人步态或笔迹的分析,或者对他人输入密码时两次按键时间延迟的分析。这类因子显示了一种强认证方法,不易被伪造。但相较于其他因子,这类因子可能更容易错误地拒绝合法用户。

你所在的位置,是基于地理位置的身份验证因子。这个因子与其他因子的运行方式不同,需要一个人出现在特定的位置。例如,当更改ATM的PIN码时,大多数银行都会要求你进入分行,在那里还将要求你出示身份证和账号。如果银行允许在线重置PIN码,攻击者就可以远程更改你的PIN码,并进一步清理你的账户。虽然这类因子可能不如其他一些因子有用,但在不完全颠覆验证系统的情况下,人们很难对抗这一因素。

2.2.2 多因子身份验证

多因子身份验证,是指使用上文中讨论的一个或多个因子。当你只使用两个因子时,有时也称为双因子身份验证

我们回到ATM示例,它能够很好地说明多因子身份验证。在这个示例中,你使用的是你知道的事项(你的PIN码)和你拥有的东西(ATM卡)。ATM卡既是身份验证的一个因子,也是身份识别的一种形式。多因子身份验证的另一个示例是写支票。在这种情况下,你使用的是你拥有的东西(支票)和你所做的事情(签名)。此时,开具支票所涉及的两个因子相当薄弱,所以有时你会看到与第三个因子——指纹一并使用。

根据选定的因子,你可以针对每种情况,组合更强或更弱的多因子身份验证方案。在某些情况下,虽然有些方法可能更难被击败,但实施起来却不切实际。例如,DNA是一种强大的身份验证方法,但大多数情况下并不实用。我在第1章中说过,你的安全应该与你保护的对象价值成正比。你当然可以在每个信用卡终端上安装虹膜扫描仪,但这是昂贵的、不切实际的,而且可能会让客户感到不安。

2.2.3 双向验证

双向验证是一种身份验证机制,双方根据该机制对彼此进行身份验证。这些参与方通常是基于软件的。在标准的单向身份验证过程中,客户端向服务器进行身份验证。在双向验证中,不仅客户端向服务器进行身份验证,服务器也向客户端进行身份验证。双向验证通常依赖数字证书,我将在第5章讨论这一点。简而言之,客户端和服务器都将拥有一个证书来验证对方的身份。

在不执行双向验证的情况下,你可能会受到假冒攻击(通常称为中间人攻击)。在中间人攻击中,攻击者将自己插入客户端和服务器之间。然后,攻击者对客户端仿冒服务器,对服务器仿冒客户端,如图2-2所示,绕过正常的流量模式,然后拦截和转发通常直接在客户端和服务器之间流动的流量。

038-01

图2-2 中间人攻击

这通常是可行的,攻击者只需要破坏或伪造从客户端到服务器的身份验证。而如果执行双向验证,这种攻击将更为困难,因为攻击者必须伪造两个不同的身份验证。

尽管多因子验证通常只在客户端进行,但你可以将双向验证与其结合起来。从服务器返回客户端的多因子身份验证不仅在技术上具有挑战性,在大多数环境中也是不切实际的,因为这将增加客户端的技术负担,甚至可能影响用户。你很可能会显著降低生产效率。