在个人移动设备上,数据安全是至关重要的。HarmonyOS推出的通用密钥库系统(HarmonyOS Universal KeyStore,简称HUKS)为应用提供了全面的密钥管理服务。本文将深入探讨HUKS的工作原理、开发实践和实际应用案例,为开发者提供一个全面的HUKS使用指南。

HUKS概述

HUKS是HarmonyOS提供的一个系统级密钥管理系统服务,涵盖了密钥生成、存储、使用和销毁的全生命周期管理。它不仅保障了密钥的安全性,还为密钥提供了合法性证明,确保业务数据的保密性和完整性。

核心特性

  • 密钥不出安全环境:HUKS确保密钥明文在安全环境中处理,即使REE环境被攻破,密钥也不会泄露。
  • 系统级安全加密存储:基于设备根密钥加密业务密钥,提供多层次的安全保护。
  • 严格的访问控制:确保只有合法业务有权访问密钥,支持用户身份认证访问控制。
  • 密钥合法性证明:为业务提供硬件级别的密钥合法性证明。

开发实践

基本概念

在深入了解HUKS开发之前,我们先了解一些基本概念:

  • HUKS Core:HUKS的核心组件,负责密钥的密码学运算和访问控制。
  • 密钥会话:通过密钥别名建立的会话,用于缓存密钥使用期间的信息。

密钥操作

生成新密钥

使用huks.generateKeyItem方法,传入密钥别名和属性集,生成密钥。

import huks from '@ohos.security.huks';

let keyAlias = 'dh_key';
let properties = [
  // 密钥属性集
];

let huksOptions = {
  properties: properties,
  inData: new Uint8Array(new Array())
};

function generateKeyItem(keyAlias, huksOptions) {
  return new Promise((resolve, reject) => {
    huks.generateKeyItem(keyAlias, huksOptions, (error, data) => {
      if (error) {
        reject(error);
      } else {
        resolve(data);
      }
    });
  });
}

async function publicGenKeyFunc(keyAlias, huksOptions) {
  try {
    await generateKeyItem(keyAlias, huksOptions)
      .then((data) => {
        console.info(`generateKeyItem success, data = ${JSON.stringify(data)}`);
      })
      .catch((error) => {
        console.error(`generateKeyItem failed, code: ${error.code}, msg: ${error.message}`);
      });
  } catch (error) {
    console.error(`generateKeyItem exception, code: ${error.code}, msg: ${error.message}`);
  }
}

publicGenKeyFunc(keyAlias, huksOptions);
导入外部密钥

如果密钥在HUKS外部生成,可以通过huks.importKeyItem方法导入。

let keyAlias = 'AES256Alias_sample';
let plainTextSize32 = new Uint8Array([
  // 密钥数据
]);

let properties = [
  // 密钥属性集
];

let options = {
  properties: properties,
  inData: plainTextSize32
};

huks.importKeyItem(keyAlias, options, (error, data) => {
  if (error) {
    console.error(`importKeyItem failed, code: ${error.code}, msg: ${error.message}`);
  } else {
    console.info(`importKeyItem success`);
  }
});

密钥访问控制

HUKS支持用户身份认证访问控制,适用于高安全敏感场景。

let properties = [
  // 密钥属性集
  {
    tag: huks.HuksTag.HUKS_TAG_USER_AUTH_TYPE,
    value: huks.HuksUserAuthType.HUKS_USER_AUTH_TYPE_FINGERPRINT
  },
  {
    tag: huks.HuksTag.HUKS_TAG_KEY_AUTH_ACCESS_TYPE,
    value: huks.HuksAuthAccessType.HUKS_AUTH_ACCESS_INVALID_NEW_BIO_ENROLL
  }
];

// 在生成或导入密钥时设置属性

密钥证明

HUKS提供密钥合法性证明,证明密钥存在于硬件保护的HUKS Core中。

async function AttestKeyTest() {
  let aliasString = "key_attest";
  let securityLevel = StringToUint8Array('sec_level');
  let challenge = StringToUint8Array('challenge_data');
  let versionInfo = StringToUint8Array('version_info');

  let attestKeyproperties = [
    // 密钥属性集
  ];

  let huksOptions = {
    properties: attestKeyproperties
  };

  await publicGenKeyFunc(aliasString, genOptions);
  await publicAttestKey(aliasString, huksOptions);
}

常见问题与解决

  • huks未找到:确保已导入@ohos.security.huks
  • API不存在:检查SDK版本,确保使用的API与SDK版本匹配。

总结

HUKS作为HarmonyOS中的关键安全组件,为开发者提供了强大的密钥管理能力。通过本文的介绍和代码示例,开发者可以更好地理解和使用HUKS,从而提升应用的安全性。随着技术的不断进步,HUKS将继续演化,为保护用户数据安全贡献力量。


注意:本文中的代码示例仅供参考,具体实现可能因HarmonyOS版本和API的更新而变化。建议查阅最新的官方文档以获取准确的开发指导。