• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 用户身份认证访问控制简介
2
3<!--Kit: Universal Keystore Kit-->
4<!--Subsystem: Security-->
5<!--Owner: @wutiantian-gitee-->
6<!--Designer: @HighLowWorld-->
7<!--Tester: @wxy1234564846-->
8<!--Adviser: @zengyawen-->
9
10HUKS提供了完备的密钥访问控制能力,以保证存储在HUKS中的密钥被合法正确地访问:
11
12- 业务只能访问属于自己的密钥,即只能访问业务自身通过HUKS生成或导入的密钥。
13
14- 支持密钥的用户身份认证访问控制,对于高安全级别、保护敏感数据的业务密钥,需要在使用密钥的时候,再次要求用户即时地验证锁屏密码或生物特征,验证通过后,才能使用业务密钥。
15
16- 支持严格限制密钥的使用用途,如支持只允许AES密钥进行加密解密,只允许RSA密钥进行签名验签。
17
18> **说明:**
19> <!--RP3-->轻量级设备<!--RP3End-->不支持用户身份认证访问控制功能。
20
21## 使用场景及开发流程
22
23整个用户身份认证访问控制,涉及多个环节,介绍如下。
24
25### 用户身份认证
26
27生成/导入密钥时,可以指定密钥必须经过用户身份认证后才能使用。应用可以指定用于解锁设备锁屏的凭据(锁屏密码、指纹、人脸)的子集进行身份认证,详情请参考[用户身份认证和授权访问类型详细规格](#用户身份认证和授权访问类型详细规格)。
28
29生成/导入密钥后,即使应用进程被攻击也不会导致未经用户授权的密钥访问,一般用于高敏感且高级别安全保护的场景,比如免密登录、免密支付、自动填充密码保护等。
30
31### 设置授权访问类型
32
33除用户身份认证外,应用还需将密钥的授权访问类型(即失效条件)设置为以下三种类型之一:
34
35- **清除锁屏密码后,密钥永久失效。**
36
37  在生成/导入密钥后,一旦清除锁屏密码,此类密钥将永久失效。修改密码不会导致失效情况发生。
38
39  前提条件:当前用户已经设置了锁屏密码。
40
41  适用场景:保护与用户强相关的数据、锁屏密码授权访问某部分功能。
42
43- **用户录入新生物特征后,该特征下密钥永久失效。**
44
45  在生成/导入密钥后,一旦录入新的生物特征,该特征下此类密钥将永久失效。仅删除生物特征不会导致失效情况发生。
46
47  这表示该授权访问类型下,仅录入同类型的新生物特征会无法使用此类密钥,而其它身份认证方式(其它生物特征、锁屏密码)仍可正常使用此类密钥。需要注意的是,如果清除锁屏密码,该授权访问类型的密钥也将永久失效。
48
49  前提条件:当前用户至少录入了一个生物特征(如指纹)。
50
51  使用场景:免密登录、免密支付等。
52
53- **用户密钥总是有效。**
54
55  使用此模式生成的密钥将永久有效,除非用户主动删除。
56
57  这表示无论用户如何清除、更改锁屏密码和生物特征,只要用户身份认证成功,此类密钥总是可用。
58
59  密钥生成时将绑定前台用户id,使用此模式生成的密钥时,仅对前台用户id进行校验。
60
61### 支持挑战值校验
62
63此外,为了保证密钥使用时用户认证结果的有效性(不可重放),HUKS支持挑战值校验。
64
65在身份认证前,需要从HUKS获取挑战值传给用户身份认证方法,然后在密钥操作时校验认证令牌的挑战值。
66
67### 二次认证密钥访问控制
68
69除此之外,二次认证密钥访问控制还包含以下三种方式:
70
71- **根据AuthToken进行访问控制**
72
73  ![访问控制(2)](figures/访问控制(2).png)
74
75  用户身份认证访问控制流程如上图所示。
76
77  其中,AT KEY(对称密钥)由HUKS TA每次启动时根据设备的安全根密钥重新派生而成。且UserIAM 与HUKS 的交互位于TEE环境内。
78
79- **允许一次认证多次授权**
80
81  密钥管理支持一次认证多次授权,允许多个密钥的访问控制授权通过一次认证完成。
82
83  适用场景:如手机克隆,希望一次性导出数据,只需要校验一次锁屏密码。
84
85  使用方式:HUKS 每次生成的Challenge为8字节,而传入UserIAM中的Challenge可扩展为32字节,因而支持一次授权4个密钥的访问。业务调用HUKS为每个密钥生成8字节的Challenge,而后将多个Challenge拼接为一个Challenge传入UserIAM进行认证。
86
87- **支持基于timestamp的访问控制**
88
89  对于某些特殊场景,如高性能场景,支持基于timestamp的免Challenge实现。在生成密钥时设置超时时间,业务使用时直接请求UserIAM发起认证,而后将包含了timestamp的AuthToken传给HUKS,HUKS校验AuthToken后,对比当前时间与timestamp差值是否大于超时时间,从而判断密钥是否允许使用。
90
91## 用户身份认证和授权访问类型详细规格
92
93为方便查阅,在表格中将使用对应的简写指代具体的用户认证类型,其对应关系如下:
94
95- HUKS_USER_AUTH_TYPE_PIN,即锁屏密码,简写为PIN。
96- HUKS_USER_AUTH_TYPE_FACE,即生物特征(人脸),简写为FACE。
97- HUKS_USER_AUTH_TYPE_FINGERPRINT,即生物特征(指纹),简写为FINGERPRINT。
98<!--RP1--><!--RP1End-->
99
100安全访问控制类型简写为:
101- HUKS_AUTH_ACCESS_INVALID_CLEAR_PASSWORD,即清除锁屏密码后,密钥永久失效。简写为INVALID_CLEAR_PASSWORD。
102- HUKS_AUTH_ACCESS_INVALID_NEW_BIO_ENROLL,即用户录入新生物特征后,该特征下密钥永久失效。简写为 INVALID_NEW_BIO_ENROLL。
103- HUKS_AUTH_ACCESS_ALWAYS_VALID,即用户密钥总是有效。简写为ALWAYS_VALID。
104
105| 用户身份认证                      | 授权访问类型     | 说明                                                  |
106| -------------------------------| -------------- | -------------------------------------   |
107| PIN                            | INVALID_CLEAR_PASSWORD | 当前仅支持锁屏密码进行身份认证,清除锁屏密码后,密钥永久失效。  |
108| FACE                           | INVALID_CLEAR_PASSWORD | 当前仅支持人脸进行身份认证,清除锁屏密码后,密钥永久失效。  |
109| FINGERPRINT                    | INVALID_CLEAR_PASSWORD | 当前仅支持指纹进行身份认证,清除锁屏密码后,密钥永久失效。  |
110| PIN  \|  FACE                  | INVALID_CLEAR_PASSWORD | 当前支持锁屏密码或人脸任一凭据进行身份认证,清除锁屏密码后,密钥永久失效。  |
111| PIN  \|  FINGERPRINT           | INVALID_CLEAR_PASSWORD | 当前支持锁屏密码或指纹任一凭据进行身份认证,清除锁屏密码后,密钥永久失效。    |
112| PIN  \|  FACE  \|  FINGERPRINT | INVALID_CLEAR_PASSWORD | 当前支持锁屏密码、人脸或指纹任一凭据进行身份认证,清除锁屏密码后,密钥永久失效。    |
113| FACE                           | INVALID_NEW_BIO_ENROLL | 当前仅支持人脸进行身份认证,录入新的人脸后,密钥永久失效。  |
114| FINGERPRINT                    | INVALID_NEW_BIO_ENROLL | 当前仅支持指纹进行身份认证,录入新的指纹后,密钥永久失效。  |
115| PIN  \|  FACE                  | INVALID_NEW_BIO_ENROLL | 当前支持锁屏密码或人脸任一凭据进行身份认证,录入新的人脸后,用户通过人脸凭据无法使用密钥,通过锁屏密码仍可正常使用密钥;清除锁屏密码后,密钥永久失效。   |
116| PIN  \|  FINGERPRINT           | INVALID_NEW_BIO_ENROLL | 当前支持锁屏密码或指纹任一凭据进行身份认证,录入新的指纹后,用户通过指纹凭据无法使用密钥,通过锁屏密码仍可正常使用密钥;清除锁屏密码后,密钥永久失效。   |
117| FACE  \|  FINGERPRINT          | INVALID_NEW_BIO_ENROLL | 当前支持人脸或指纹任一凭据进行身份认证,录入新的生物特征后,用户通过该生物特征凭据无法使用密钥,其它凭据不受影响仍可正常使用密钥;清除锁屏密码后,密钥永久失效。    |
118| PIN  \|  FACE  \|  FINGERPRINT | INVALID_NEW_BIO_ENROLL | 当前支持锁屏密码、人脸或指纹任一凭据进行身份认证,录入新的生物特征后,用户通过该生物特征凭据无法使用密钥,其它凭据不受影响仍可正常使用密钥;清除锁屏密码后,密钥永久失效。    |
119| PIN                            | ALWAYS_VALID           | 当前仅支持锁屏密码进行身份认证,密钥永久有效。    |
120| FACE                           | ALWAYS_VALID           | 当前仅支持人脸进行身份认证,密钥永久有效。    |
121| FINGERPRINT                    | ALWAYS_VALID           | 当前仅支持指纹进行身份认证,密钥永久有效。    |
122| PIN  \|  FACE                  | ALWAYS_VALID           | 当前支持锁屏密码或人脸进行身份认证,密钥永久有效。    |
123| PIN  \|  FINGERPRINT           | ALWAYS_VALID           | 当前支持锁屏密码或指纹进行身份认证,密钥永久有效。    |
124| FACE  \|  FINGERPRINT          | ALWAYS_VALID           | 当前支持人脸或指纹进行身份认证,密钥永久有效。    |
125| PIN  \|  FACE  \|  FINGERPRINT | ALWAYS_VALID           | 当前支持锁屏密码、人脸或指纹进行身份认证,密钥永久有效。    |
126<!--RP2--><!--RP2End-->
127
128