用户身份认证访问控制简介

HUKS提供了完备的密钥访问控制能力,以保证存储在HUKS中的密钥被合法正确地访问:

  • 业务只能访问属于自己的密钥,即只能访问通过HUKS生成或导入的密钥。

  • 支持密钥的用户身份认证访问控制,对于高安敏感的业务密钥,需要在使用密钥的时候,再次要求用户即时的验证锁屏密码或生物特征,验证通过后,才能使用业务密钥。

  • 支持严格限制密钥的使用用途,如支持只允许AES密钥进行加密解密,只允许RSA密钥进行签名验签。

使用场景及开发流程

整个用户身份认证访问控制,涉及多个环节,介绍如下。

用户身份认证

生成/导入密钥时,可以指定密钥必须经过用户身份认证后才能使用。应用可以指定用于解锁设备锁屏的凭据(锁屏密码、指纹、人脸)的子集进行身份认证。

生成/导入密钥后,即使应用进程被攻击也不会导致未经用户授权的密钥访问,一般用于高敏感且高级别安全保护的场景,比如免密登录、免密支付、自动填充密码保护等。

设置授权访问类型

除用户身份认证外,应用还需将密钥的授权访问类型(即失效条件)设置为以下三种类型之一:

  • 清除锁屏密码后,密钥永久无效。 在生成/导入密钥后,一旦清除锁屏密码,此类密钥将永久失效。修改密码不会导致失效情况发生。

    前提条件:当前用户已经设置了锁屏密码。

    适用场景:保护与用户强相关的数据、锁屏密码授权访问某部分功能。

  • 用户录入新生物特征后,密钥永久无效。 在生成/导入密钥后,一旦录入新的生物特征,这些密钥将永久失效。仅删除生物特征不会导致失效情况发生。

    前提条件:当前用户至少录入了一个生物特征(如指纹)。

    使用场景:免密登录,免密支付等

  • 用户密钥总是有效。 使用此模式生成的密钥将永久有效,除非用户主动删除。

    密钥生成时将绑定前台用户id,使用此模式生成的密钥时,仅对前台用户id进行校验。

支持挑战值校验

此外,为了保证密钥使用时用户认证结果的有效性(不可重放),HUKS支持挑战值校验:

在身份认证前,需要从HUKS获取挑战值传给用户身份认证方法,然后在密钥操作时校验认证令牌的挑战值。

二次认证密钥访问控制

除此之外,二次认证密钥访问控制还包含以下三种方式:

  • 根据AuthToken进行访问控制

    访问控制(2)

    用户身份认证访问控制流程如上图所示。

    其中,AT KEY(对称密钥)由HUKS TA每次启动时根据设备的安全根密钥重新派生而成。且UserIAM 与HUKS 的交互位于TEE环境内。

  • 允许一次认证多次授权

    密钥管理支持一次认证多次授权,允许多个密钥的访问控制授权通过一次认证完成。

    适用场景:如手机克隆,希望一次性导出数据,只需要校验一次锁屏密码。

    使用方式:HUKS 每次生成的Challenge为8字节,而传入UserIAM中的Challenge可扩展为32字节,因而支持一次授权4个密钥的访问。业务调用HUKS为每个密钥生成8字节的Challenge,而后将多个Challenge拼接为一个Challenge传入UserIAM进行认证。

  • 支持基于timestamp的访问控制

    对于某些特殊场景,如高性能场景,支持基于timestamp的免Challenge实现。在生成密钥时设置超时时间,业务使用时直接请求UserIAM发起认证,而后将包含了timestamp的AuthToken传给HUKS,HUKS校验AuthToken后,对比当前时间与timestamp差值是否大于超时时间,从而判断密钥是否允许使用。