1# Asset Store Kit简介 2 3<!--Kit: Asset Store Kit--> 4<!--Subsystem: Security--> 5<!--Owner: @JeremyXu--> 6<!--Designer: @skye_you--> 7<!--Tester: @nacyli--> 8<!--Adviser: @zengyawen--> 9 10Asset Store Kit(关键资产存储服务,简称ASSET)包含了一系列开放接口,用于提供用户短敏感数据的安全存储及管理功能。这类短敏感数据包括但不限于密码类(账号/密码)、Token类(应用凭据)以及其他关键明文(如银行卡号)等长度较短的敏感信息。 11 12## 基本概念 13 14关键资产的安全存储,依赖底层的通用密钥库系统。具体来说,关键资产的加/解密操作以及访问控制校验,都由通用密钥库系统在安全环境(如可信执行环境)中完成,即使系统被攻破,也能保证用户敏感数据不发生泄露。 15 16其中,关键资产的加/解密使用AES256-GCM算法,关键资产的访问控制分为以下几类: 17 18- **基于属主的访问控制:** 所有的关键资产都受属主访问控制保护,业务无需设置。 19 - 只允许关键资产被其属主(写入该关键资产的业务)访问。 20 - 关键资产属主身份由ASSET从系统服务中获取,即使业务身份被仿冒,仿冒者也无法获取到其他业务的数据。 21 - 关键资产加/解密时,其属主身份参与了完整性保护,即使关键资产属主身份被篡改,攻击者也无法获取到其他业务的数据。 22 23- **基于群组的访问控制:** 24 - 同一开发者开发的多个应用,可配置为同一群组,并在存储关键资产时设置群组共享,以便群组内的多个应用可以互通访问数据。 25 - 关键资产所属的群组信息,由开发者ID和群组ID组成。其中,开发者ID无需配置,群组ID在应用开发期配置,参考[配置文件标签说明](../../quick-start/app-configuration-file.md#配置文件标签)。应用发布时使用开发者私钥签名保证群组ID的完整性。 26 - 开发者可以为应用配置多个群组,根据关键资产的共享范围,将不同关键资产配置在相应的群组内,从而实现细粒度的群组访问控制。 27 28- **基于锁屏状态的访问控制:** 分为以下三种保护等级(安全性依次递增),业务可根据实际情况设置任意一种,若不设置,则默认保护等级为“首次解锁后可访问”。 29 - 开机后可访问:关键资产在开机后被允许访问。 30 - 首次解锁后可访问:关键资产在开机首次解锁后被允许访问。 31 - 屏幕处于解锁状态时可访问:关键资产仅在处于解锁状态时被允许访问。 32 33- **基于锁屏密码设置状态的访问控制:** 该访问控制默认不开启,业务可根据实际情况决定是否开启。 34 - 在用户设置了锁屏密码后,关键资产才被允许访问。 35 36- **基于用户认证的访问控制:** 该访问控制默认不开启,业务可根据实际情况决定是否开启。 37 - 关键资产在用户身份认证通过后被允许访问。 38 - 任意一种认证方式(指纹、人脸、PIN码)通过,均可授权本次关键资产的访问。 39 - 业务可通过设置认证有效期,达成一次用户认证、授权多个关键资产访问的效果。认证有效期最长可设置10分钟。 40 41## 约束与限制 42 43- 设备限制 44 45 轻量级智能穿戴设备暂不支持使用本Kit。 46 47- 基于别名的访问 48 49 关键资产以密文的形式存储在ASSET数据库中,以业务身份 + 别名作为唯一索引。故业务需要保证每条关键资产的别名唯一。 50 51- 批量查询关键资产 52 53 批量查询出的关键资产需要通过IPC通道传输给业务,受IPC缓冲区大小限制,建议对查询超过40条关键资产时,进行分批查询,且每次查询数量不超过40条。 54 55- 业务自定义数据存储 56 57 - ASSET为业务预留了12个关键资产自定义属性,名称以"DATA_LABEL"开头。对于超过12个自定义属性的情况,业务可以将多段数据按照一定的格式(如JSON)拼接到同一个ASSET属性中。 58 59 - ASSET对部分属性会进行完整性保护,这部分属性名称以"DATA_LABEL_CRITICAL"开头,写入后不支持更新。 60 61- 基于群组的访问控制 62 63 - ASSET不支持沙箱应用、应用分身存储或访问群组数据。 64 65 - [IS_PERSISTENT](../../reference/apis-asset-store-kit/js-apis-asset.md#tag)属性设置为True的关键资产,不允许设置为群组共享。 66 67- 关键资产删除时机 68 - 业务主动调用remove删除关键资产时,删除符合条件的数据。详见删除关键资产[ArkTS](asset-js-remove.md)、[C/C++](asset-native-remove.md)开发指导。 69 - 应用卸载时,清除该应用存储在ASSET中的数据。[IS_PERSISTENT](../../reference/apis-asset-store-kit/js-apis-asset.md#tag)属性设置为true的数据将保留。 70 - 系统子用户删除时,清除该用户下ASSET中所有数据。 71 - 设备恢复出厂设置时,清除ASSET中所有数据。 72 73## 与相关Kit的关系 74 75关键资产存储服务仅提供短敏感数据(不超过1KB)的安全存储能力,如业务希望对超长的数据提供保护时,请考虑使用[通用密钥库系统](../UniversalKeystoreKit/huks-overview.md)或[加解密算法库框架](../CryptoArchitectureKit/crypto-architecture-kit-intro.md)保护您的数据。