HarmonyOS鸿蒙Next Ecc
HarmonyOS鸿蒙Next Ecc
1、在生产公私钥秘钥对时,官方文档中的哪些数据都是固定的吗?我们开发者只需要直接调用就行了吗?官方给出的函数如下:
function genEccCommonSpec(): cryptoFramework.ECCCommonParamsSpec {
let fieldFp: cryptoFramework.ECFieldFp = {
fieldType: 'Fp',
p: BigInt('0xffffffffffffffffffffffffffffffff000000000000000000000001')
}
let G: cryptoFramework.Point = {
x: BigInt('0xb70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21'),
y: BigInt('0xbd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34')
}
let eccCommonSpec: cryptoFramework.ECCCommonParamsSpec = {
algName: 'ECC',
specType: cryptoFramework.AsyKeySpecType.COMMON_PARAMS_SPEC,
field: fieldFp,
a: BigInt('0xfffffffffffffffffffffffffffffffefffffffffffffffffffffffe'),
b: BigInt('0xb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4'),
g: G,
n: BigInt('0xffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d'),
h: 1
}
return eccCommonSpec;
}
更多关于HarmonyOS鸿蒙Next Ecc的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这个是需要补充eccCommonSpec 生成 ecc 公司密钥的方法 x y 为 公钥的密钥去掉开头的04 然后从中一分为二 x 为前半部分加x0x y为后半部分加0x
x y 构成的G 为eccCommonSpec 的g
a b n 为 生成的其他需要参数
Fp域下的ECC密钥参数,定义如下:
- p:素数,用于确定Fp
- a, b:确定椭圆曲线的方程
- g:椭圆曲线的一个基点(base point),可由gx,gy表示
- n:基点g的阶(order)
- h:余因子(cofactor)
- sk:私钥,是一个随机整数,小于n
- pk:公钥,是椭圆曲线上的一个点, pk = sk * g
详情可参考demo:
import cryptoFramework from '@ohos.security.cryptoFramework';
import { BusinessError } from '@ohos.base';
// 打印bigint信息
function showBigIntInfo(bnName: string, bnValue: bigint | string | number) {
if (typeof bnValue === 'string') {
console.error('type is string');
return;
}
if (typeof bnValue === 'number') {
console.error('type is number');
return;
}
console.info(bnName + ':');
console.info('. Decimal: ' + bnValue.toString());
console.info('. Hexadecimal: ' + bnValue.toString(16));
console.info('. Length (bits): ' + bnValue.toString(2).length);
}
// 根据关键规范构造EccCommonSpec结构体。EccCommonSpec结构体定义了ECC私钥和公钥的公共参数
function genEccCommonSpec(): cryptoFramework.ECCCommonParamsSpec {
let fieldFp: cryptoFramework.ECFieldFp = {
fieldType: 'Fp',
p: BigInt('0xffffffffffffffffffffffffffffffff000000000000000000000001')
}
let G: cryptoFramework.Point = {
x: BigInt('0xb70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21'),
y: BigInt('0xbd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34')
}
let eccCommonSpec: cryptoFramework.ECCCommonParamsSpec = {
algName: 'ECC',
specType: cryptoFramework.AsyKeySpecType.COMMON_PARAMS_SPEC,
field: fieldFp,
a: BigInt('0xfffffffffffffffffffffffffffffffefffffffffffffffffffffffe'),
b: BigInt('0xb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4'),
g: G,
n: BigInt('0xffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d'),
h: 1
}
return eccCommonSpec;
}
// 打印ECC密钥规格
function showEccSpecDetailInfo(key: cryptoFramework.PubKey | cryptoFramework.PriKey, keyType: string) {
console.info('show detail of ' + keyType + ':');
try {
let p = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_FP_P_BN);
showBigIntInfo('--- p', p); // length is 224, hex : ffffffffffffffffffffffffffffffff000000000000000000000001
let a = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_A_BN);
showBigIntInfo('--- a', a); // length is 224, hex : fffffffffffffffffffffffffffffffefffffffffffffffffffffffe
let b = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_B_BN);
showBigIntInfo('--- b', b); // length is 224, hex : b4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4
let gX = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_G_X_BN);
showBigIntInfo('--- gX', gX); // length is 224, hex : b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21
let gY = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_G_Y_BN);
showBigIntInfo('--- gY', gY); // length is 224, hex : bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34
let n = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_N_BN);
showBigIntInfo('--- n', n); // length is 224, hex : ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d
let h = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_H_NUM);
console.warn('--- h: ' + h); // key h: 1
let fieldType = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_FIELD_TYPE_STR);
console.warn('--- field type: ' + fieldType); // key field type: Fp
let fieldSize = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_FIELD_SIZE_NUM);
console.warn('--- field size: ' + fieldSize); // key field size: 224
let curveName = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_CURVE_NAME_STR);
console.warn('--- curve name: ' + curveName); // key curve name: NID_secp224r1
if (keyType == 'priKey') {
let sk = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_SK_BN);
showBigIntInfo('--- sk', sk);
} else if (keyType == 'pubKey') {
let pkX = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_PK_X_BN);
showBigIntInfo('--- pkX', pkX);
let pkY = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_PK_Y_BN);
showBigIntInfo('--- pkY', pkY);
}
} catch (error) {
console.error('getAsyKeySpec error');
let e: BusinessError = error as BusinessError;
console.error(`getAsyKeySpec failed, ${e.code}, ${e.message}`);
}
}
// 根据EccCommonSpec实例生成ECC密钥对,获取密钥规格
function testEccUseCommKeySpecGet() {
try {
let commKeySpec = genEccCommonSpec(); // 使用参数属性,构造ECC公私钥公共密钥参数对象
let generatorBySpec = cryptoFramework.createAsyKeyGeneratorBySpec(commKeySpec); // 使用密钥参数对象创建生成器
let keyPairPromise = generatorBySpec.generateKeyPair(); // Generate an ECC key pair.
keyPairPromise.then(keyPair => { // 使用生成器创建ECC密钥对
showEccSpecDetailInfo(keyPair.priKey, 'priKey'); // 对私钥获取相关密钥参数属性
showEccSpecDetailInfo(keyPair.pubKey, 'pubKey'); // 对公钥获取相关密钥参数属性
}).catch((error: BusinessError) => {
// 逻辑错误等异步异常在此捕获
console.error('generateComm error');
console.error('error code: ' + error.code + ', message is: ' + error.message);
})
} catch (error) {
// 参数错误等同步异常在此捕获
console.error('testEccUseCommSpec error');
let e: BusinessError = error as BusinessError;
console.error(`ecc comm spec failed, ${e.code}, ${e.message}`);
}
}
需要使用私钥的公共参数 生成私钥的公钥
更多关于HarmonyOS鸿蒙Next Ecc的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
HarmonyOS鸿蒙Next Ecc是华为推出的下一代鸿蒙操作系统版本,专注于提升系统的安全性、性能和用户体验。Ecc代表椭圆曲线加密(Elliptic Curve Cryptography),是一种现代加密技术,用于增强系统的数据安全性。鸿蒙Next Ecc通过集成Ecc加密算法,提供了更高级别的数据保护和隐私安全,适用于各种智能设备,包括手机、平板、智能家居和物联网设备。
鸿蒙Next Ecc在系统架构上进行了优化,支持更高效的资源管理和任务调度,提升了设备的运行速度和响应能力。此外,它还引入了新的开发工具和API,方便开发者快速构建和部署应用程序。系统还支持多设备协同,用户可以在不同设备之间无缝切换和共享数据,提升了整体使用体验。
鸿蒙Next Ecc的发布标志着华为在操作系统领域的技术进步,特别是在数据安全和隐私保护方面的创新。通过采用先进的加密技术和优化系统性能,鸿蒙Next Ecc为用户提供了一个更加安全、高效和便捷的操作环境。
HarmonyOS NEXT ECC 是华为最新推出的操作系统版本,专为智能终端设备设计。它采用了微内核架构,具备高安全性和高效能,支持多设备协同和分布式能力。ECC(Error Correction Code)技术则增强了系统的稳定性和数据可靠性,适用于对数据完整性要求极高的应用场景。该版本进一步优化了性能,提升了用户体验,是华为在操作系统领域的重要创新。