第十二章 强身份认证

不同的身份验证方法的认证强度并不相同。静态密码被认为是一种相对较弱的身份验证机制。目前大多数互联网的应用仍然在采用静态密码的方式来进行认证,当然,有很多涉及到更多的用户数据、用户隐私的应用、企业的数据,都在引入更强的身份验证形式。在本章中,我们将讨论静态密码的问题,以及如何引入更强的身份验证形式用于多因素身份验证和逐步增强身份验证。

静态密码虽然现在仍然在被广泛使用,但是存在几个缺点。首先,很多用户为了便于记忆,会采用弱口令/弱密码,这就导致很容易被猜测和暴力破解。而如果使用强密码,对于用户来说可能很难记住,为了解决这个问题,有的用户可能会把强密码存储在一些显著的位置,导致它们更容易被盗。如果用户名和密码被盗,可能会被恶意的攻击者的人使用。并且用户可能不会意识到密码已被泄露,直到它被用于未经授权的操作。更糟糕的是,如果被泄露的密码已经在多个站点中使用,那么它的被盗可能意味着所有站点都处于危险之中。单点登录的引入使得静态密码的使用具有更高的风险,因为被盗密码可能会授予对许多系统的访问权限。

增强的身份验证形式

为了避免静态密码的缺点,可以使用几种更强的身份验证形式。

一种广泛使用的增强的身份认证机制是通过短信或电子邮件向用户发送一次性密码(OTP)。OTP通常是一串4-6位的数字代码,在身份验证时生成并发送给用户。然后,用户将收到的OTP输入登录屏幕以完成身份验证。或者,一次性密码可以由诸如手机之类的用户移动设备上的应用程序或专用的OTP硬件安全令牌生成。顾名思义,一次性密码只能使用一次,增加了被盗取的难度,即便被盗取,未经授权的一方也难以使用盗取的OTP。

通过指纹、面部扫描、视网膜扫描和声纹等生物特征因素作为更强的身份识别形式,也正在被很多互联网的业务来采用,但有一个缺点,即如果用于身份验证的因素遭到窃取,则无法重新发布。换言之,如果黑客能够捕获他们的指纹并将其与生物特征指纹认证一起使用,我们无法向一个人签发新的手指。如果生物特征认证因素受到影响,则有必要更改使用的因素或更改认证算法。

为了规避直接使用生物因素的风险,另一种方式也在推广当中,使用用户的签名进行挑战验证,将用户的私有加密密钥对安全封装在设备(如智能卡、硬件安全令牌或移动电话)中。希望认证用户的实体向认证器设备发送质询nonce,封装在设备中的密钥用于对质询nonce进行签名。对于多因素身份验证设备,用户必须输入PIN或提供生物特征因素以解锁设备,然后才能签署质询。认证实体接收来自具有已签名质询nonce的设备的消息,并使用先前注册的信息验证签名,以确定用户(受试者)是否拥有认证器设备。使用这种方法,身份验证基于拥有设备的密钥以及解锁设备的因素。

值得注意的是,基于知识的身份验证(KBA)涉及回答安全问题,与密码具有类似的风险。答案可能被远程实体猜测或窃取,并在所有者不知情的情况下使用。可以对认证方法的强度进行分类,其中一个示例分类方案是美国国家标准技术研究院NIST 800-63安全标准i,该标准定义了三个认证者保证级别的标准。目前国内尚没有对应的标准可以参考

MFA 多因素认证

多因素身份验证需要使用多个身份验证因素才能进行身份验证。这些通常包括所知(你知道的)、所持(你拥有的)和所有(你是什么)。您知道的内容可以是密码或问题答案。您拥有的东西可能是一个设备,如手机或用于上一节中描述的一种身份验证机制的硬件安全令牌。您的的身份可能是生物特征因素,如指纹、声纹或面部扫描。

使用多因素身份验证,当一个因素被破解后,其他的强因素可以降低整个系统的受损风险。如果身份验证需要输入静态密码以及手机生成的一次性密码,黑客将不得不窃取用户密码并解锁手机,以模拟用户并访问其帐户。因此,需要多个因素进行身份验证可以更有力地保证身份验证人是合法的帐户所有者。

在某些情况下,授权策略可能需要多因素身份验证。并不是所有的情况下,都会要求多因素认证,可能会降低用户体验。 在某些,仅当检测到异常情况(例如用户试图从新设备或非典型地理位置访问)时,才可能需要多因素身份验证。但是在某些企业环境可能需要多因素身份验证才能进行远程访问,甚至有的在办公室中访问也需要进行多因素身份验证才能获得更敏感的资源。对于访问敏感内容,可能需要每次都进行多因素的认证,例如管理员对生产云服务器的访问。

选择解决方案的身份验证机制时,应考虑到所涉及的应用程序和数据的敏感性以及解决方案的可用性,因为用户可能会试图规避对于特定情况来说过于繁重或被认为过于苛刻的机制。美国国家标准技术研究院关于身份的标准NIST800-63-3第6节,特别是第6.2节ii,展示了如何为部署的应用选择合适的认证保证级别的一个示例。(NIST特别出版物800-63Biii附带了每个认证保证级别的认证类型列表。

认证升级

当用户进行身份验证时,将创建一个经过身份验证的会话,并确保用户是帐户的合法所有者。例如,如果用户使用静态密码登录,会为用户创建一个会话,当然密码有可能被盗,并且帐户正被冒名顶替者使用,因此从身份验证保证的角度来看,用户的会话可能被视为“一级”。如果用户随后使用更强大的身份验证形式(如在其手机上生成的一次性密码)进行身份验证,则登录的用户是合法帐户所有者的可信度要要高得多,因为当需要其手机进行身份验证时,用户将更难模拟用户。在使用一次性密码进行身份验证之后,用户的会话可能会被认为是“第二级”的身份验证保证。升级身份验证是使用更强大的身份验证形式进行身份验证的过程,以提高现有身份验证会话的身份验证保证级别。

授权策略可能要求身份验证会话处于特定的身份验证保证级别,以便用户访问资源或执行涉及更多风险的事务。具有敏感度不同功能的应用程序可以使用逐步身份验证来要求对更敏感的事务进行更强的身份验证。例如,用户可能能够匿名浏览零售网站,但必须通过使用密码进行身份验证来提升其会话,以访问先前存储的购买交付地址信息。在企业场景中,管理人员可以使用密码访问的身份验证保证级别来查看应付账款系统以运行报告,但在支付的过程中,必须通过使用一次性密码进行身份验证来提升安全会话的级别,以便批准大额付款。逐步认证有助于建立一个模型,在该模型中,不同场景所需的认证机制的强度与所涉及的受保护资源中固有的风险相称。

会话超时

身份提供者可以允许配置多种形式的身份验证,以及每个身份验证的分类或身份验证保证级别。然后,用户的认证会话可以包括关于所使用的认证机制、认证保证级别或认证上下文类以及会话到期的信息。如果身份提供程序支持不同身份验证保证级别的身份验证会话,则它可能支持对于升级认证会话给予较短的会话超时时长,从而提供对更敏感资源的访问的保护。对于特权更高的会话,缩短会话超时时间将减少高特权会话被恶意劫持的机会,并符合特权最小化的安全原则。

请求身份验证机制

应用需要向身份提供者请求使用特定类别的身份验证机制来实现所需级别的身份验证保证。这可以通过身份验证上下文类引用来完成,身份验证上下文涉及多个因素,例如用于创建帐户的标识过程、防止凭据泄露的保护以及使用的身份验证机制。身份验证上下文类表示一组身份验证方法,身份验证上下文类引用是身份验证上下文类的标识符。 以下各节解释应用程序如何请求特定的身份验证上下文类别,以及身份提供者如何提供声明以传递所使用的身份验证上下文类引用和/或身份验证机制。

OIDC

OIDC客户端可以使用认证请求的以下参数,按优先顺序请求一个或多个认证上下文类:

  • acr_value–身份验证上下文类参考

颁发给应用程序的ID令牌可以包含以下参数,以传递用于对ID令牌中引用的用户(主题)进行身份验证的身份验证上下文类和身份验证方法:

  • acr–身份验证上下文类引用,身份验证上下文类的标识符
  • amr–认证方法参考,用于认证用户的一种或多种方法的标识符

应用程序和OpenID提供程序必须为使用的acr和amr值建立值和含义。OpenID Connect扩展身份验证配置文件(EAP)ACR值1.0iv规范草案列出了ACR值,身份验证方法参考值规范草案v列出了建议的amr值。

SAML2.0

SAML2.0身份验证请求可以使用<RequestedAuthonContext>元素指定应用程序所需的身份验证上下文类。如果身份提供程序提供此信息,SAML2.0身份验证响应将在身份验证断言的<AuthnContext>元素中显示用于对用户进行身份验证的身份验证上下文类。应用程序(服务提供商)和身份提供商必须提前为不同的身份验证上下文类建立定义。文档“OASIS安全断言标记语言(SAML)V2.0的身份验证上下文”vi列出了几个可以使用的预定义身份验证上下文类。

认证降级

为了保持“最小化授权”的安全原则,对于特定任务,仅需要给予能够进行该特权级别进行操作最低授权即可。试想,在一个场景中,会话可以存在不同的保证级别或身份验证上下文,更高级别的会话允许访问更敏感的资源,理想情况下,当用户不再需要提升的权限时,他们可以“降低”会话的身份验证保证级别。这减少了会话被劫持时可能造成的损害,以及在更高权限级别上操作时人为错误的风险。降级可以通过一个明确的机制来实现,尽管我们的经验中没有看到这样做。更实际的做法可能是简单地依靠为更高级别的特权操作指定较短的会话超时时长来实现。

部署

在部署MFA之前,有些注意事项需要考虑。第一,在广泛的推广多因素认证之前,需要在具有代表意义的小范围用户群体内去评估该方案的可行性。在代表目标用户群体的用户范围内测试多因素身份验证机制和逐步升级身份验证,对于在广泛推出之前确定可用性具有很大价值。例如,评估认证设备的耐久性和电池寿命(如有),有助于评估更换损坏/失效硬件设备的意外成本。同时,当需要更换时,您还需要一个快速、安全地更换丢失或损坏设备的过程,以恢复用户登录的能力,有助于评估这一过程是否安全和便捷。确保在任何部署中都有计划的安全分发、替换和撤销身份验证机制,能够有效的提高身份实施的成功。

本章重点回顾

密码是一种相对较弱的身份验证形式,使用移动终端或多因素加密身份验证设备上生成的一次性密码被视为更强的形式。 逐步身份验证是使用更强大的身份验证形式进行身份验证的行为,它将已经存在的身份验证会话提升到更高级别的身份验证保证。授权策略可能要求会话处于特定身份保证级别,以便访问敏感资源。

OIDC和SAML 2.0都允许应用程序请求身份提供者使用特定的身份验证上下文类的身份验证机制对用户进行身份验证,并接收有关用于对用户进行身份验证的身份验证上下文类和/或身份验证方法的信息。 通过缩短会话超时或注销来及时终止更高级别的会话是身份验证降级的推荐实现方式。

参考

i. https://pages.nist.gov/800-63-3/sp800-63b.html

ii. https://pages.nist.gov/800-63-3/sp800-63-3.html#sec6

iii.https://pages.nist.gov/800-63-3/sp800-63b.html

iv.https://openid.net/specs/openid-connect-eap-acr-values-1_0.html

v.https://datatracker.ietf.org/doc/html/draft-ietf-oauth-amr-values-04

vi.https://docs.oasis-open.org/security/saml/v2.0/saml-authn-context-2.0-os.pdf

沪ICP备2023020061号 上海绿软科技有限公司版权所有