【商密测评】采用 SM3 密码算法为应用和数据层的数据传输提供完整性保护和消息鉴别功能

admin 2025年2月19日14:14:00评论20 views字数 2214阅读7分22秒阅读模式

采用 SM3 密码算法为应用和数据层的数据传输提供完整性保护和消息鉴别功能

某政务信息系统使用服务器密码机,并采用 SM3 密码算法为应用和数据层的数据传输提供完整性保护和消息鉴别功能。
该服务器密码机具有商用密码产品认证证书且密码模块安全等级为二级。
该系统在进行密码应用安全性评估时,密码应用安全性评估人员获取了该系统数据传输完整性保护功能的源代码,其内容如下:
// 服务器密码机已定义 SM3 密码算法带密钥的杂凑运算函数int SDF_HMACInit(void *hSessionHandle, unsigned int uiAlgID, HANDLE hKeyHandle);int SDF_HMACUpdate(void *hSessionHandle, unsigned char *pucData, unsigned int uiDataLength);int SDF_HMACFinal(void *hSessionHandle, unsigned char *pucHMAC, unsigned int *puiHMACLength);// 用于数据传输完整性保护void protect_data_integrity(unsigned char *data, size_t data_len, unsigned char *wrap_key, size_t wrap_key_len, int kek_index, unsigned char *hmac) {    int result = 0;    HANDLE hDeviceHandle = NULL;    HANDLE hSessionHandle = NULL;    HANDLE hKeyHandle = NULL;    unsigned char full_hmac[SM3_MAC_LEN]; // SM3算法默认输出长度    // 打开设备(异常处理省略)    result = SDF_OpenDevice(&hDeviceHandle);    // 开启一个会话(异常处理省略)    result = SDF_OpenSession(hDeviceHandle, &hSessionHandle);    // 导入 KEK 保护的密文密钥(异常处理省略)    result = SDF_ImportKeyWithKEK(hSessionHandle, SGD_SM4_ECB, kek_index, wrap_key, wrap_key_len, &hKeyHandle);    // 使用带密钥的杂凑计算(异常处理省略)    result = SDF_HMACInit(hSessionHandle, SGD_SM3, hKeyHandle);    // 假定单次 SDF_HMACUpdate 调用满足应用需求(异常处理省略)    result = SDF_HMACUpdate(hSessionHandle, data, data_len);    // 输出杂凑值(异常处理省略)    result = SDF_HMACFinal(hSessionHandle, full_hmac, &full_hmac_len);    // 截取杂凑值的 2 个字节    memcpy(hmac, full_hmac, 2);    // 将明文数据和截取后的杂凑值发送给接收方(异常处理省略)    result = send_encrypted_data(data, hmac, data_len + 2);    // 关闭会话和设备,其他处理省略    SDF_DestroyKey(hSessionHandle, hKeyHandle);    SDF_CloseSession(hSessionHandle);    SDF_CloseDevice(hDeviceHandle);}
请分析以上源代码,回答以下问题:
(1)基于 SM3 的 HMAC 算法输入数据应不大于多少比特?
(2)SDF_ HMACFinal 函数调用后,其输出参数 full_hmac_len 的值应为多少?
(3)请依据以上信息分析其完整性保护和消息鉴别功能的实现存在的问题,并从密码安全威胁的角度分析原因。
解析
本题共 3 分,共 3 个问题,基本按照每个问题 1 分作答。
答案

【商密测评】采用 SM3 密码算法为应用和数据层的数据传输提供完整性保护和消息鉴别功能

【商密测评】采用 SM3 密码算法为应用和数据层的数据传输提供完整性保护和消息鉴别功能

(1) 基于 SM3 的 HMAC 算法输入数据应不大于 2^64 比特。
SM3 哈希算法的输入数据最大长度为 2^64 比特。因此,基于 SM3 的 HMAC 算法的输入数据也应不大于 2^64 比特。
(2) SDF_HMACFinal 函数调用后,其输出参数 full_hmac_len 的值应为 32。
SM3 算法的输出哈希值为 256 比特(32 字节)。因此,full_hmac_len 的值应为 32(字节)。
256 比特 = 32 字节,由于 full_hmac_len 单位是字节,所以 full_hmac_len 的值是 32。
(3) 存在的问题:
截取 HMAC 输出的 2 个字节:
问题:
直接截取 HMAC 的前 2 个字节(而非完整的 32 字节哈希值)会显著降低消息鉴别码的强度。截取后的 HMAC 易于被攻击者伪造,从而破坏消息的完整性验证。
原因:
攻击者只需找到一个满足部分哈希值匹配的伪造消息,而不需要满足完整的哈希值。这降低了攻击难度,增加了安全风险。
知识点
GM_T 0018-2023 密码设备应用接口规范
GB_T 36322-2018 信息安全技术 密码设备应用接口规范

【商密测评】采用 SM3 密码算法为应用和数据层的数据传输提供完整性保护和消息鉴别功能

GB_T 32905-2016 信息安全技术 SM3 密码杂凑算法
SM3 密码杂凑算法的输入为长度为 l (l < 2^64 ) 比特的消息 m , 经过填充、 迭代压缩, 生成杂凑值, 杂凑值输出长度为 256 比特。

【商密测评】采用 SM3 密码算法为应用和数据层的数据传输提供完整性保护和消息鉴别功能

原文始发于微信公众号(利刃信安):【商密测评】采用 SM3 密码算法为应用和数据层的数据传输提供完整性保护和消息鉴别功能

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月19日14:14:00
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【商密测评】采用 SM3 密码算法为应用和数据层的数据传输提供完整性保护和消息鉴别功能http://cn-sec.com/archives/3760109.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息