HarmonyOS开发者社区 HarmonyOS入门之HUKS解析

HarmonyOS入门之HUKS解析

在个人移动设备上,数据安全是至关重要的。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);
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
导入外部密钥

如果密钥在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`);
  }
});
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
密钥访问控制

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
  }
];

// 在生成或导入密钥时设置属性
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
密钥证明

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);
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.

常见问题与解决

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

总结

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


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

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐

  • 浏览量 1053
  • 收藏 0
  • 0

所有评论(0)

查看更多评论 
已为社区贡献8条内容