本文旨在深入探討華為鴻蒙HarmonyOS Next系統(截止目前API12)的技術細節,基於實際開發實踐進行總結。
主要作為技術分享與交流載體,難免錯漏,歡迎各位同仁提出寶貴意見和問題,以便共同進步。
本文為原創內容,任何形式的轉載必須註明出處及原作者。
一、引言
在現代密碼學領域,橢圓曲線密碼學(Elliptic Curve Cryptography,ECC)已成為一種備受矚目的加密技術。它憑藉著獨特的數學原理和卓越的效能優勢,在眾多密碼體系中脫穎而出。相較於傳統的加密演算法,如 RSA,ECC 能夠在更短的金鑰長度下提供同等甚至更高的安全性。這意味著在保障資料安全的同時,ECC 可以顯著減少計算資源的消耗,提高加密和解密的效率,尤其適用於資源受限的裝置,如移動終端和物聯網裝置。在數字簽名、金鑰交換以及資料加密等關鍵密碼學應用中,ECC 都發揮著至關重要的作用。例如,在移動支付場景中,ECC 演算法確保了交易資訊的安全傳輸和數字簽名的有效性,保護使用者的資金安全和隱私。HarmonyOS Next 充分利用了橢圓曲線密碼學的優勢,其中 ECC 和我國自主研發的 SM2 演算法是其重要組成部分。接下來,我們將深入探討 ECC 和 SM2 演算法在 HarmonyOS Next 中的應用,包括相關操作及其特性。
二、ECC 演算法相關操作
(一)壓縮/非壓縮點格式轉換(程式碼示例與解釋)
- 程式碼示例
import { cryptoFramework } from '@kit.CryptoArchitectureKit';
function eccPointUncompressedToCompressed() {
let pkData = new Uint8Array([4, 143, 39, 57, 249, 145, 50, 63, 222, 35, 70, 178, 121, 202, 154, 21, 146, 129, 75, 76, 63, 8, 195, 157, 111, 40, 217, 215, 148, 120, 224, 205, 82, 83, 92, 185, 21, 211, 184, 5, 19, 114, 33, 86, 85, 228, 123, 242, 206, 200, 98, 178, 184, 130, 35, 232, 45, 5, 202, 189, 11, 46, 163, 156, 152]);
let returnPoint = cryptoFramework.ECCKeyUtil.convertPoint('NID_brainpoolP256r1', pkData);
console.info('convertPoint success');
let returnData = cryptoFramework.ECCKeyUtil.getEncodedPoint('NID_brainpoolP256r1', returnPoint, 'COMPRESSED');
console.info('returnData: ' + returnData);
}
- 解釋
- 首先,定義了一個包含非壓縮點資料的Uint8Array
,這裡的資料表示一個橢圓曲線上的點。然後,使用cryptoFramework.ECCKeyUtil.convertPoint
函式,傳入曲線名NID_brainpoolP256r1
和點資料pkData
,將非壓縮點資料轉換為Point
物件。如果轉換成功,會輸出convertPoint success
。接著,使用cryptoFramework.ECCKeyUtil.getEncodedPoint
函式,傳入曲線名和轉換後的Point
物件以及格式引數'COMPRESSED'
,將Point
物件轉換為壓縮格式的點資料,並輸出結果。透過這個過程,實現了從非壓縮點格式到壓縮點格式的轉換。
(二)壓縮/非壓縮公鑰格式轉換(程式碼示例與解釋)
- 程式碼示例
import { cryptoFramework } from '@kit.CryptoArchitectureKit';
async function eccPubUncompressedToCompressed() {
let pkData = new Uint8Array([48, 90, 48, 20, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 9, 43, 36, 3, 3, 2, 8, 1, 1, 7, 3, 66, 0, 4, 143, 39, 57, 249, 145, 50, 63, 222, 35, 70, 178, 121, 202, 154, 21, 146, 129, 75, 76, 63, 8, 195, 157, 111, 40, 217, 215, 148, 120, 224, 205, 82, 83, 92, 185, 21, 211, 184, 5, 19, 114, 33, 86, 85, 228, 123, 242, 206, 200, 98, 178, 184, 130, 35, 232, 45, 5, 202, 189, 11, 46, 163, 156, 152]);
let pubKeyBlob: cryptoFramework.DataBlob = { data: pkData };
let generator = cryptoFramework.createAsyKeyGenerator('ECC_BrainPoolP256r1');
let keyPair = await generator.convertKey(pubKeyBlob, null);
let returnBlob = keyPair.pubKey.getEncodedDer('X509|COMPRESSED');
console.info('returnBlob data:' + returnBlob.data);
}
- 解釋
- 首先,建立了一個包含非壓縮公鑰資料的Uint8Array
,並將其封裝成DataBlob
物件。接著,建立了一個金鑰演算法為ECC
、特定曲線的非對稱金鑰生成器。然後,呼叫convertKey
方法,傳入公鑰的DataBlob
物件(私鑰部分傳入null
,因為這裡只進行公鑰轉換),將非壓縮公鑰資料轉換為非對稱金鑰物件。最後,使用getEncodedDer
方法,傳入格式引數'X509|COMPRESSED'
,獲取壓縮格式的公鑰資料位元組流並輸出。這個過程實現了從非壓縮公鑰格式到壓縮公鑰格式的轉換,並且遵循了 X509 規範。
三、SM2 演算法相關操作
(一)與 ECC 演算法的異同點分析
- 相同點
- 數學基礎:SM2 演算法與 ECC 演算法都基於橢圓曲線數學理論。它們利用橢圓曲線上的點運算來實現加密、解密、簽名和驗籤等功能。在橢圓曲線的數學模型下,透過定義在有限域上的點和運算規則,構建了安全的密碼學體系。
- 安全性優勢:兩者都在相對較短的金鑰長度下能夠提供較高的安全性。相比傳統的基於大整數分解或離散對數問題的加密演算法(如 RSA),ECC 和 SM2 能夠以更小的金鑰長度達到相當甚至更高的安全級別,從而減少計算資源的消耗和金鑰管理的複雜性。
- 應用場景相似性:在實際應用中,ECC 和 SM2 都廣泛應用於數字簽名、金鑰交換和資料加密等領域。例如,在保障網路通訊安全、保護使用者資料隱私以及確保電子交易的真實性和完整性等方面,它們都發揮著重要作用。 - 不同點
- 演算法標準和來源:ECC 是一種廣泛應用的國際標準演算法,在全球範圍內得到了廣泛的研究和應用。而 SM2 是我國自主研發的橢圓曲線公鑰密碼演算法,具有自主智慧財產權,是我國密碼體系中的重要組成部分,主要應用於國內的資訊保安領域,如政府、金融、電信等行業,以保障國家關鍵資訊基礎設施的安全。
- 引數和曲線選擇:雖然都基於橢圓曲線,但在具體的引數和曲線選擇上可能存在差異。不同的曲線引數會影響演算法的效能、安全性和相容性等方面。例如,ECC 演算法在實現中可能會根據不同的應用場景和安全需求選擇不同的標準橢圓曲線,如NID_secp224r1
、NID_X9_62_prime256v1
等;而 SM2 演算法則使用特定的橢圓曲線引數,這些引數是根據我國的密碼標準和安全要求確定的。
- 應用側重:由於 SM2 是針對國內資訊保安需求定製的演算法,在一些特定的國內應用場景中可能具有更好的適應性和最佳化。例如,在一些對國產化和自主可控要求較高的領域,SM2 演算法能夠更好地滿足安全政策和法規的要求,確保資訊系統的安全性和可控性。
四、總結
在 HarmonyOS Next 的加密體系中,ECC 和 SM2 演算法都具有不可替代的重要性。ECC 演算法憑藉其高效的效能和廣泛的國際應用基礎,為 HarmonyOS Next 提供了強大的加密能力,尤其適用於資源受限的裝置和對效能要求較高的場景。透過其壓縮/非壓縮點格式轉換和公鑰格式轉換等操作,展示了其在金鑰管理和資料加密方面的靈活性。而 SM2 演算法作為我國自主研發的密碼學成果,在保障國家資訊保安方面發揮著關鍵作用。它與 ECC 演算法既有共同的優勢,又在演算法標準、引數選擇和應用側重等方面有所不同,為 HarmonyOS Next 在國內的廣泛應用提供了堅實的安全保障,確保了資料在各種應用場景下的保密性、完整性和真實性。