# 密钥生成介绍及算法规格

当业务需要使用HUKS生成随机密钥，并由HUKS进行安全保存时，可以调用HUKS的接口生成密钥。

*   密钥别名长度最大为128字节。
*   密钥别名中禁止包含个人数据等敏感信息。不建议包含加密算法、密钥长度、加密模式等信息。
*   使用当前业务已有的密钥别名作为生成的密钥别名默认会把现有密钥覆盖，可以使用HUKS\_TAG\_KEY\_OVERRIDE指定当密钥别名冲突时返回错误。
*   对于不同业务生成的密钥将基于业务身份信息进行存储路径隔离，避免不同业务因密钥别名相同导致冲突。

从API 23开始支持群组密钥特性。

*   随机生成：指HUKS在生成密钥时，利用密码学安全的伪随机数，提高密钥的随机性、不可预测性以及不可重现性，确保生成的密钥难以被推测。
    
*   安全保存：指通过HUKS生成的密钥，除了非对称密钥中的公钥外，密钥的全生命周期（从生成到销毁）均只能由HUKS在安全存储区使用，且生成的密钥文件不能被除HUKS以外的任何业务直接访问。即使是生成密钥的业务，后续也只能通过HUKS提供的接口执行密钥操作，从而获取操作结果。
    
*   密钥用途：一个密钥只能有一类用途，例如：无法通过同一个密钥进行加解密和签名验签。另外，生成密钥时指定的用途要与使用时的方式一致，否则会导致异常。
    

#### 密钥存储安全等级

在API 11之前，生成或导入密钥时，默认存储等级为DE；从API 11开始，支持开发者指定存储安全等级，默认为CE，可取值如表所示。

| 名称 | 值 | 说明 |
| --- | --- | --- |
| HUKS_AUTH_STORAGE_LEVEL_DE | 0 | 表示密钥仅在开机后可访问。 |
| HUKS_AUTH_STORAGE_LEVEL_CE | 1 | 表示密钥仅在首次解锁后可访问。 |
| HUKS_AUTH_STORAGE_LEVEL_ECE | 2 | 表示密钥仅在解锁状态时可访问。 |

业务在使用存储等级为ECE的密钥时，建议通过感知锁屏事件来清理使用该密钥创建的会话资源，以保证安全性。

#### 支持的算法

以下为密钥生成支持的规格说明。

**手机、平板、PC/2in1设备、TV、智能穿戴规格**

| 算法 | 支持的密钥长度 | API级别 |
| --- | --- | --- |
| AES | 128、192、256 | 8+ |
| RSA | 2048、3072、4096 | 8+ |
| RSA | 1024-2048（含），必须是8的倍数 | 18+ |
| HMAC | 8-1024（含），必须是8的倍数 | 8+ |
| ECC | 256、384、521 | 8+ |
| ED25519 | 256 | 8+ |
| X25519 | 256 | 8+ |
| DH | 2048 | 8+ |
| SM2 | 256 | 9+ |
| SM4 | 128 | 9+ |
| DES | 64 | 18+ |
| 3DES | 128、192 | 18+ |
| ML-DSA | 安全参数集支持44、65、87 | 26.0.0+ |

DH算法采用FFDHE知名安全素数群。

DES和3DES算法仅提供给特定场景使用，其他场景下不推荐使用。

**轻量级智能穿戴规格**

| 算法 | 支持的密钥长度 | API级别 |
| --- | --- | --- |
| AES | 128、192、256 | 8+ |
| DES | 64 | 12+ |
| 3DES | 128、192 | 12+ |
| RSA | 1024-2048（含），必须是8的倍数 | 12+ |
| HMAC | 8-1024（含），必须是8的倍数 | 12+ |
| CMAC | 128 算法仅支持3DES | 12+ |