本文旨在深入探討華為鴻蒙HarmonyOS Next系統(截止目前 API12)在開發多語言電商平臺方面的技術細節,基於實際開發實踐進行總結。主要作為技術分享與交流載體,難免錯漏,歡迎各位同仁提出寶貴意見和問題,以便共同進步。本文為原創內容,任何形式的轉載必須註明出處及原作者。
在HarmonyOS Next系統的安全架構中,Asset Store Kit佔據著舉足輕重的地位,它為關鍵資產的儲存和管理提供了堅實的基礎,是保障系統安全與使用者資料隱私的重要組成部分。
(一)引言
- 重要地位闡述
- Asset Store Kit是HarmonyOS Next生態系統中不可或缺的一部分,它猶如一座堅固的堡壘,專門用於保護那些對應用和使用者至關重要的關鍵資產。這些關鍵資產涵蓋了密碼類資料(如賬號密碼)、Token類資料(應用憑據)以及其他敏感的明文資訊(如銀行卡號等)。在當今數字化時代,這些資料的安全性直接關係到使用者的財產安全、隱私保護以及應用的正常執行。例如,在移動支付應用中,使用者的銀行卡號和支付密碼等關鍵資產必須得到妥善保護,否則將面臨巨大的風險。Asset Store Kit透過提供一系列強大的功能和機制,確保這些關鍵資產在儲存、訪問和管理過程中的安全性,從而為整個HarmonyOS Next系統的穩定執行提供了有力支撐。 - 關鍵作用強調
- 其關鍵作用主要體現在兩個方面。一方面,它提供了統一的介面和方法,使得開發者能夠方便、高效地儲存和管理關鍵資產。開發者無需深入瞭解複雜的底層安全機制,只需呼叫Asset Store Kit提供的簡單易用的介面,即可實現關鍵資產的安全儲存和操作。另一方面,Asset Store Kit透過多種安全措施,如加密演算法和訪問控制機制,有效防止關鍵資產被非法獲取和篡改。這不僅保護了使用者的利益,也增強了使用者對應用的信任,促進了應用的廣泛使用和發展。
(二)關鍵資產儲存原理
- 通用金鑰庫系統的依賴
- 關鍵資產的安全儲存高度依賴於底層的通用金鑰庫系統。通用金鑰庫系統就像是一個安全的保險櫃,負責儲存和管理用於加密和解密關鍵資產的金鑰。當應用需要儲存關鍵資產時,Asset Store Kit會與通用金鑰庫系統進行互動,獲取相應的金鑰。然後,利用這些金鑰,透過先進的加密演算法(如AES256 - GCM演算法)對關鍵資產進行加密處理,將其轉換為密文形式後儲存在ASSET資料庫中。例如,在儲存使用者密碼時,首先從通用金鑰庫系統獲取加密金鑰,然後使用該金鑰對密碼進行加密,確保密碼在儲存過程中的機密性。 - 安全環境中的加解密執行
- 加解密操作在安全環境(如可信執行環境)中進行,這為關鍵資產的安全性提供了額外的保障。可信執行環境是一個獨立的、隔離的硬體區域,具有高度的安全性。在這個環境中,即使系統的其他部分遭受惡意攻擊,加解密操作仍然能夠安全地執行,不會洩露關鍵資產的資訊。例如,當使用者登入應用並需要驗證密碼時,密碼的解密操作在可信執行環境中進行,解密後的密碼與使用者輸入的密碼進行比對,只有在比對成功後,使用者才能獲得相應的訪問許可權。這樣的設計確保了密碼在整個驗證過程中始終處於安全狀態,有效防止了密碼被竊取或篡改。
(三)訪問控制機制
- 基於屬主的訪問控制
- 所有關鍵資產都受到屬主訪問控制的嚴格保護,這是一種最基本的訪問控制方式,業務無需額外設定。其核心原理是,只有寫入該關鍵資產的業務(即屬主)才能對其進行訪問。例如,在一個電商應用中,使用者的訂單資訊是由該電商應用寫入到關鍵資產儲存中的,那麼只有這個電商應用有權訪問和管理這些訂單資訊。即使其他應用試圖獲取這些訂單資訊,也會因為不具備屬主身份而被拒絕訪問。這種基於屬主的訪問控制機制有效地防止了不同業務之間的資料交叉訪問,確保了每個業務的資料獨立性和安全性。 - 基於鎖屏狀態的訪問控制
- 此訪問控制分為三個等級,分別為開機後可訪問、首次解鎖後可訪問和解鎖時可訪問,其安全性依次遞增。
- 開機後可訪問:適用於一些對安全性要求相對較低,但又需要一定便利性的場景。例如,某些新聞資訊類應用,使用者可能希望在開機後就能快速訪問應用中的內容,而不需要先解鎖裝置。在這種情況下,應用可以將相關的關鍵資產(如使用者的瀏覽歷史記錄等)設定為開機後可訪問,以提升使用者體驗。
- 首次解鎖後可訪問:這是一種較為常用的設定,適用於大多數普通應用。例如,社交類應用中的使用者聊天記錄等關鍵資產,在使用者首次解鎖裝置後即可訪問。這樣既保證了一定的安全性,防止裝置在未解鎖狀態下關鍵資產被非法訪問,又能在使用者解鎖後方便地使用應用,提高了應用的可用性。
- 解鎖時可訪問:對於安全性要求極高的應用,如銀行類應用或涉及重要商業機密的企業應用,通常會將關鍵資產設定為解鎖時可訪問。這意味著只有當裝置處於解鎖狀態,且使用者透過了身份驗證(如密碼、指紋、人臉等)後,才能訪問這些關鍵資產。例如,銀行應用中的使用者賬戶餘額、交易明細等關鍵資訊,只有在使用者解鎖裝置並透過身份驗證後才能檢視,最大限度地保障了使用者的資金安全和隱私。 - 基於鎖屏密碼設定狀態的訪問控制
- 該訪問控制預設處於關閉狀態,開發者可以根據實際應用場景決定是否開啟。當開啟此功能後,關鍵資產只有在使用者設定了鎖屏密碼的情況下才被允許訪問。例如,在一個儲存使用者個人隱私照片的相簿應用中,開發者可以選擇開啟基於鎖屏密碼設定狀態的訪問控制。這樣,只有當使用者為裝置設定了鎖屏密碼,確保裝置有一定的安全性基礎後,才能訪問相簿中的照片,有效防止他人在裝置未設定鎖屏密碼時輕易獲取使用者的隱私照片。 - 基於使用者認證的訪問控制
- 同樣預設關閉,開發者可按需開啟。開啟後,關鍵資產在使用者透過身份認證(如指紋、人臉、PIN碼等任意一種認證方式)後才會被允許訪問。並且,開發者可以設定認證有效期,最長可達10分鐘。例如,在企業內部使用的辦公應用中,使用者可能需要頻繁訪問一些敏感檔案(如公司財務報表等關鍵資產)。透過開啟基於使用者認證的訪問控制,並設定適當的認證有效期(如5分鐘),使用者在首次認證後的5分鐘內進行多次檔案訪問操作時無需重複認證,既提高了工作效率,又保證了檔案的安全性。在認證有效期過後,若使用者再次訪問關鍵資產,則需要重新進行身份認證。
(四)關鍵資產屬性說明
- 屬性列表與含義(表格形式)
屬性名稱 | 含義 | 是否必選 | 說明 |
---|---|---|---|
ALIAS(別名) | 用於唯一標識每條關鍵資產的字串,型別為Uint8Array,長度為1 - 256位元組 | 可選 | 是業務查詢和操作關鍵資產的重要依據,類似於資料庫中的索引,必須保證每條關鍵資產的別名唯一 |
ACCESSIBILITY(訪問控制等級) | 基於鎖屏狀態的訪問控制設定,型別為number,取值範圍詳見Accessibility | 可選 | 決定關鍵資產在何種鎖屏狀態下可被訪問,如開機後、首次解鎖後或解鎖時可訪問 |
REQUIRE_PASSWORD_SET(鎖屏密碼要求) | 是否僅在設定了鎖屏密碼的情況下可訪問關鍵資產,型別為bool | 可選 | 可進一步增強關鍵資產的安全性,根據業務需求決定是否開啟此限制 |
AUTH_TYPE(認證型別) | 訪問關鍵資產所需的使用者認證型別,型別為number,取值範圍詳見AuthType | 可選 | 指定訪問關鍵資產時需要的使用者認證方式,如指紋、人臉、PIN碼等 |
SYNC_TYPE(同步型別) | 關鍵資產支援的同步型別,型別為number,取值範圍詳見SyncType | 可選 | 用於控制關鍵資產在多裝置之間的同步行為,例如是否自動同步等 |
IS_PERSISTENT(持久化屬性) | 在應用解除安裝時是否需要保留關鍵資產,型別為bool | 可選 | 決定關鍵資產在應用解除安裝後的留存情況,對於一些需要長期儲存的資料(如使用者重要配置資訊)可設定為保留 |
DATA_LABEL_CRITICAL_1 - 4(關鍵附屬資訊) | 關鍵資產附屬資訊,內容由業務自定義且有完整性保護,型別為Uint8Array,長度為1 - 2048位元組(API12前為1 - 512位元組) | 可選 | 用於儲存與關鍵資產相關的重要附加資訊,且保證資訊的完整性,寫入後不支援更新 |
DATA_LABEL_NORMAL_1 - 4(普通附屬資訊) | 關鍵資產附屬資訊,內容由業務自定義且無完整性保護,型別為Uint8Array,長度為1 - 2048位元組(API12前為1 - 512位元組) | 可選 | 儲存一般的附屬資訊,業務可根據需要自由更新內容 |
DATA_LABEL_NORMAL_LOCAL_1 - 4(本地附屬資訊) | 關鍵資產附屬的本地資訊,內容由業務自定義且無完整性保護,該項資訊不會進行同步,型別為Uint8Array,長度為1 - 2048位元組 | 可選 | 用於儲存僅在本地使用的關鍵資產相關資訊,不會在多裝置間同步,可減少不必要的資料傳輸和儲存 |
RETURN_TYPE(查詢返回型別) | 關鍵資產查詢返回的結果型別,型別為number,取值範圍詳見ReturnType | 可選 | 指定查詢關鍵資產時返回結果的格式和內容型別 |
RETURN_LIMIT(查詢返回數量限制) | 關鍵資產查詢返回的結果數量,型別為number | 可選 | 限制查詢操作返回的關鍵資產數量,可用於控制資料量和提高查詢效率 |
RETURN_OFFSET(查詢返回偏移量) | 指定從第幾個關鍵資產開始返回查詢結果,取值範圍為1 - 65536,型別為number | 可選 | 用於分批查詢場景,可實現對大量關鍵資產的分頁查詢,提高查詢效能和靈活性 |
RETURN_ORDERED_BY(查詢結果排序依據) | 僅支援按照附屬資訊排序,取值範圍為asset.Tag.DATA_LABEL_xxx,型別為number | 可選 | 決定查詢結果的排序方式,方便業務根據特定需求獲取有序的關鍵資產列表 |
- 屬性在資產識別、訪問控制和管理中的作用
- ALIAS屬性在資產識別中起著關鍵作用,透過唯一的別名,開發者可以快速準確地定位和操作特定的關鍵資產。例如,在一個包含多個使用者賬號密碼的應用中,每個賬號密碼都有其對應的別名,開發者可以根據別名查詢和更新特定使用者的密碼。
- ACCESSIBILITY屬性直接影響關鍵資產的訪問控制,不同的訪問控制等級決定了在何種情況下關鍵資產可以被訪問,從而保護關鍵資產免受未經授權的訪問。
- REQUIRE_PASSWORD_SET屬性增強了訪問控制的安全性,確保只有在裝置設定了鎖屏密碼的情況下,關鍵資產才可能被訪問,為關鍵資產提供了額外的保護屏障。
- AUTH_TYPE屬性明確了訪問關鍵資產所需的使用者認證方式,透過指定合適的認證型別,如要求指紋認證或PIN碼認證,進一步提高了關鍵資產的訪問安全性。
- SYNC_TYPE屬性則在多裝置管理關鍵資產時發揮作用,開發者可以根據應用需求設定關鍵資產是否同步以及如何同步,以滿足使用者在不同裝置上使用應用的一致性體驗。
- 其他屬性如IS_PERSISTENT、各種DATA_LABEL屬性等在資產的持久化儲存、附加資訊管理以及查詢結果控制等方面提供了豐富的功能,幫助開發者更好地管理和利用關鍵資產。
(五)示例程式碼演示
- 以下是一段ArkTS程式碼示例,展示如何建立一個具有特定屬性的關鍵資產(假設儲存一個使用者的登入憑據):
import { asset } from '@kit.AssetStoreKit';
import { util } from '@kit.ArkTS';
import { BusinessError } from '@kit.BasicServicesKit';
function stringToArray(str: string): Uint8Array {
let textEncoder = new util.TextEncoder();
return textEncoder.encodeInto(str);
}
// 建立一個關鍵資產,包含使用者名稱、密碼和相關屬性
let attr: asset.AssetMap = new Map();
attr.set(asset.Tag.SECRET, stringToArray('userPassword123')); // 假設密碼為"userPassword123"
attr.set(asset.Tag.ALIAS, stringToArray('loginCredential')); // 設定別名為"loginCredential"
attr.set(asset.Tag.ACCESSIBILITY, asset.Accessibility.FIRST_UNLOCKED); // 設定為首次解鎖後可訪問
attr.set(asset.Tag.DATA_LABEL_NORMAL_1, stringToArray('userLoginInfo')); // 儲存一些普通附屬資訊,如登入相關的其他說明
try {
asset.add(attr).then(() => {
console.info('Key asset created successfully.');
}).catch((err: BusinessError) => {
console.error('Failed to create key asset. Code is ${err.code}, message is ${err.message}');
});
} catch (error) {
let err = error as BusinessError;
console.error('Failed to create key asset. Code is ${err.code}, message is ${err.message}');
}
(六)總結與思考
- 基礎功能要點總結
- Asset Store Kit的基礎功能圍繞關鍵資產的安全儲存、訪問控制和管理展開。透過依賴通用金鑰庫系統進行安全儲存,利用多種訪問控制機制確保資產安全,以及提供豐富的屬性來滿足不同的管理需求。開發者需要理解關鍵資產的儲存原理,掌握各種訪問控制方式的特點和適用場景,熟悉關鍵資產屬性的含義和用法,才能在應用開發中充分發揮Asset Store Kit的優勢。 - 應用需求思考引導
- 對於我們開發來說,在實際應用開發中,需要根據應用的型別、使用者需求和安全要求來合理運用Asset Store Kit的功能。例如,對於金融類應用,應著重考慮高強度的訪問控制(如解鎖時可訪問、基於使用者認證等)和嚴格的密碼策略(如設定密碼長度、複雜度要求等);而對於一些普通的娛樂類應用,可以在保證一定安全性的前提下,更注重使用者體驗,選擇合適的訪問控制等級(如首次解鎖後可訪問)。同時,還需要考慮如何合理設計關鍵資產的屬性,以最佳化資料儲存和查詢效率。在多裝置應用場景下,要充分利用同步功能,確保使用者在不同裝置上的資料一致性和安全性。總之,我們應深入思考如何將Asset Store Kit的功能與應用的具體需求完美結合,為使用者提供既安全又便捷的應用體驗。