HarmonyOS Next加密安全的雙劍合璧:Device Certificate Kit與Crypto Architecture Kit的結合

SameX發表於2024-11-10

本文旨在深入探討華為鴻蒙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 Kit Crypto Architecture Kit
主要功能 證書管理(安裝、儲存、使用、銷燬)、證書驗證、證書鏈校驗等。 加解密演算法實現(如訊息認證碼計算、訊息摘要計算、對稱和非對稱加密等)。
資料處理物件 證書及相關資訊(如證書鏈、證書擴充套件域段、證書吊銷列表等)。 原始資料(如要加密的訊息、要計算摘要的資料等)。
安全目標側重點 確保裝置身份真實性、證書合法性和信任鏈完整性。 保障資料在傳輸和儲存過程中的機密性、完整性和真實性。

透過這個表格,我們可以清楚地看到兩個Kit在功能上的差異和互補之處。

總之,Device Certificate Kit和Crypto Architecture Kit的聯動為鴻蒙系統提供了強大的加密安全保障。它們就像兩個守護天使,一個守護著裝置的身份認證,一個守護著資料的加密安全。開發者在實際應用中,要充分理解和利用它們的協同工作機制,根據具體需求合理呼叫相關功能,確保應用的安全性。就像組建一支籃球隊,每個球員都有自己的位置和職責,只有相互配合,才能贏得比賽。希望大家在鴻蒙開發的道路上,能夠巧妙地運用這兩個工具,打造出堅不可摧的安全應用。如果在使用過程中遇到問題,不要氣餒,多思考、多嘗試,相信你一定能夠攻克難題。加油哦,各位開發者小夥伴們!

相關文章