文章总结: 本文对比了国密SKF与SDF标准HMAC初始化接口的差异。SKF在导入密钥时已将算法标识绑定至句柄,HMACInit无需算法参数;而SDF密钥句柄未绑定算法,必须在初始化时显式传入算法标识。开发者对接这两类密码设备API时需注意此底层设计差异,按规范正确传递参数以避免调用异常。 综合评分: 72 文章分类: 技术标准,安全开发,应用安全
同样是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初始化,凭什么你可以不传算法标识?》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论