本文旨在深入探讨华为鸿蒙HarmonyOS Next系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。

在华为鸿蒙HarmonyOS的安全世界里,Device Certificate Kit(设备证书服务)和Crypto Architecture Kit(加解密算法框架服务)就像是一对默契十足的搭档,共同为确保加密安全而努力。今天,咱们就来深入研究一下它们是如何协同工作,为我们的设备和应用保驾护航的。

首先,让我们了解一下这两个Kit的协同工作机制。Device Certificate Kit主要负责证书的管理和验证,而Crypto Architecture Kit则专注于加解密算法的实现。当我们需要进行设备真实性验证时,Device Certificate Kit可以利用其证书管理功能,获取设备的证书信息,其中就包含了公钥。然后,将这个公钥传递给Crypto Architecture Kit,由它来进行后续的加密操作。这就好比一个负责提供钥匙(公钥),另一个则利用这把钥匙来锁门(加密)或开门(解密),两者相辅相成,缺一不可。

接下来,我们看看如何生成和获取公钥,并用于设备真实性验证。假设我们在一个需要设备认证的应用场景中,首先要使用Device Certificate Kit来创建一个应用公私钥对(包含应用公钥和应用私钥),这里以RSA或EC算法为例。示例代码如下:

import { huks } from '@kit.UniversalKeystoreKit';
import { BusinessError } from '@kit.BasicServicesKit';

let keyAlias ='serviceKey'; 

function GetGenerateProperties() {
    let properties: Array<huks.HuksParam> = new Array();
    let index = 0;
    properties[index++] = {
        tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
        value: huks.HuksKeyAlg.HUKS_ALG_ECC
    };
    properties[index++] = {
        tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
        value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_256
    };
    properties[index++] = {
        tag: huks.HuksTag.HUKS_TAG_PURPOSE,
        value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_SIGN |
            huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_VERIFY
    };
    properties[index++] = {
        tag: huks.HuksTag.HUKS_TAG_DIGEST,
        value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256
    }
    return properties;
}

async function GenerateKey(keyAlias: string) {
    let genProperties = GetGenerateProperties();
    let options: huks.HuksOptions = {
        properties: genProperties
    }
    await huks.generateKeyItem(keyAlias, options)
      .then(() => {
            console.info(`promise: generate Key success.`);
        }).catch((err: BusinessError) => {
            console.error(`promise: generate Key failed, error: ` + err.message);
        })
}

在生成公私钥对后,我们可以通过Device Certificate Kit获取应用公钥,并将其用于设备真实性验证。比如,在与服务器通信时,将公钥发送给服务器,服务器可以利用公钥对设备发送的数据进行验证,确保数据来自真实的设备。

然后,我们来了解使用Crypto Architecture Kit进行安全加密的流程。假设我们要对一段数据进行加密,首先需要初始化加密算法,然后传入数据进行加密操作,最后获取加密结果。以下是一个简单的示例,使用HMAC算法进行消息认证码计算(这里只是示例,实际应用中可根据需求选择合适的加密算法):

import { cryptoFramework } from '@kit.CryptoArchitectureKit';
import { buffer } from '@kit.ArkTS';

async function doHmac() {
    // 把字符串按utf - 8解码为Uint8Array,使用固定的128位的密钥,即16字节
    let keyData = new Uint8Array(buffer.from("12345678abcdefgh", 'utf - 8').buffer);
    let key = await genSymKeyByData(keyData);
    let macAlgName = 'SHA256'; 
    let message = 'hmacTestMessgae'; 
    let mac = cryptoFramework.createMac(macAlgName);
    await mac.init(key);
    // 数据量较少时,可以只做一次update,将数据全部传入,接口未对入参长度做限制
    await mac.update({ data: new Uint8Array(buffer.from(message, 'utf - 8').buffer) });
    let macResult = await mac.doFinal();
    console.info('HMAC result:' + macResult.data);
    let macLen = mac.getMacLength();
    console.info('HMAC len:' + macLen);
}

为了更清晰地展示Device Certificate Kit与Crypto Architecture Kit的功能区别和联系,我们来看一个模块功能对比表格:

功能模块Device Certificate KitCrypto Architecture Kit
主要功能证书管理(安装、存储、使用、销毁)、证书验证、证书链校验等。加解密算法实现(如消息认证码计算、消息摘要计算、对称和非对称加密等)。
数据处理对象证书及相关信息(如证书链、证书扩展域段、证书吊销列表等)。原始数据(如要加密的消息、要计算摘要的数据等)。
安全目标侧重点确保设备身份真实性、证书合法性和信任链完整性。保障数据在传输和存储过程中的机密性、完整性和真实性。

通过这个表格,我们可以清楚地看到两个Kit在功能上的差异和互补之处。

总之,Device Certificate Kit和Crypto Architecture Kit的联动为鸿蒙系统提供了强大的加密安全保障。它们就像两个守护天使,一个守护着设备的身份认证,一个守护着数据的加密安全。开发者在实际应用中,要充分理解和利用它们的协同工作机制,根据具体需求合理调用相关功能,确保应用的安全性。就像组建一支篮球队,每个球员都有自己的位置和职责,只有相互配合,才能赢得比赛。希望大家在鸿蒙开发的道路上,能够巧妙地运用这两个工具,打造出坚不可摧的安全应用。如果在使用过程中遇到问题,不要气馁,多思考、多尝试,相信你一定能够攻克难题。加油哦,各位开发者小伙伴们!


SameX
1 声望2 粉丝