同样是HMAC初始化,凭什么你可以不传算法标识?

admin 2026-08-08 06:57:52 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文对比了国密SKF与SDF标准HMAC初始化接口的差异。SKF在导入密钥时已将算法标识绑定至句柄,HMACInit无需算法参数;而SDF密钥句柄未绑定算法,必须在初始化时显式传入算法标识。开发者对接这两类密码设备API时需注意此底层设计差异,按规范正确传递参数以避免调用异常。 综合评分: 72 文章分类: 技术标准,安全开发,应用安全


cover_image

同样是HMAC初始化,凭什么你可以不传算法标识?

原创

利刃信安 利刃信安

利刃信安

2026年8月5日 08:00 北京

在小说阅读器读本章

去阅读

同样是HMAC初始化,凭什么你可以不传算法标识?

01

0016 SKF

带密钥的杂凑运算初始化

  • 原型

ULONG DEVAPI SKF_HMACInit(HANDLE hKey,HANDLE *phHMac)

  • 功能描述

三步式带密钥的数据杂凑运算的第一步。

  • 参数

hKey [IN] 密钥句柄。

phHmac [OUT] HMAC对象句柄。

  • 返回值

SAR_OK:成功。

其他:错误码。

02

0018 SDF

带密钥的杂凑运算初始化

  • 原型

LONG SDF_HMACInit(HANDLE hSessionHadle,HANDLE hKeyHandle,ULONF uiAlgID)

  • 功能描述

三步式带密钥的数据杂凑运算第一步。

  • 参数

hSessionHandle [in] 与设备建立的会话句柄

hKeyHandle [in] 指定的密钥句柄

uiAlgID [in] 指定杂凑算法标识

  • 返回值

0 成功

非0 失败,返回错误代码

03

正确调用

0016 SKF

…c

/* 第1步:导入会话密钥(7.6.19),在此用 SGD_SM3_HMAC 标记 HMAC 密钥用途 */

rv = SKF_ImportSessionKey(hContainer, SGD_SM3_HMAC,

                          (ECCCIPHERBLOB *)pbWrapedData, ulWrapedLen, *phKey);

/* 第2步:带密钥的杂凑运算初始化(7.6.36),无需算法参数 */

rv = SKF_HMACInit(hKey, *phHMac);

/* 第3步:带密钥的单包杂凑运算(7.6.37)或带密钥的多包杂凑运算 + 带密钥的杂凑运算结束(7.6.38 + 7.6.39) */

rv = SKF_HMAC(hHMac, *pbData, ulDataLenth, *pbHashData, *pulHashLen);

涉及会话密钥算法标识的函数包括:

…Code

RSA 生成导出会话密钥 SKF_RSAExportSessionKey

ECC 生成并导出会话密钥 SKF_ECCExportSessionKey

ECC 生成密钥协商参数并输出 SKF_GenerateAgreementDataWithECC

ECC 产生协商数据并计算会话密钥 SKF_GenerateAgreementDataAndKeyWithECC

导入会话密钥 SKF_ImportSessionKey

SM9 生成密钥协商参数并输出 SKF_SM9GenerateAgreementData

SM9 产生协商数据并计算会话密钥 SKF_SM9GenerateAgreementDataAndKey

SM9 密钥解封装 SKF_SM9KeyDecapsulate

0018 SDF

…c

/* 第1步:生成会话密钥并用密钥加密密钥加密输出,同时返回密钥句柄。加密模式为ECB模式(SDF 的密钥句柄不绑定用途) */

rv = SDF_GenerateKeyWithKEK(hSessionHandle, uiKeyBits, uiAlgID,

                            uiKEKIndex, *pucKey, *puiKeyLength, *phKeyHandle);

/* 第2步:带密钥的杂凑运算初始化(6.6.2)

 * uiAlgID 指定杂凑算法标识:SGD_SM3 */

rv = SDF_HMACInit(hSessionHandle, hKeyHandle, SGD_SM3);           /* 指定杂凑算法标识 */

rv = SDF_HMACUpdate(hSessionHandle, *pucData, uiDataLenth);       /* 6.6.3 */

rv = SDF_HMACFinal(hSessionHandle, *pucHMac, *puiHMacLength);     /* 6.6.4 */

带外部密钥的杂凑运算初始化(GM/T 0018-2023 §6.8.13):密钥不落设备、没有句柄时,算法标识同样在 init 显式传入:

…c

LONG SDF_ExternalKeyHMACInit(HANDLE hSessionHandle, ULONG uiAlgID,BYTE *pucKey, ULONG uiKeyLength);

我是利刃信安,网络安全和密码安全、数据安全领域的小白。

如果你觉得今天这篇有收获,欢迎点赞、在看、转发三连,我们下篇见

点赞

在看

转发

如有疑问,请联系:Mannix6


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:利刃信安 利刃信安 利刃信安《同样是HMAC初始化,凭什么你可以不传算法标识?》

评论:0   参与:  0