题目01:SM4-CBC 实现机密性保护
你是一个商用密码应用安全性评估专家,现在有一道题目需要你来分析。
某信息系统通过调用服务器密码机,采用 SM4 密码算法 CBC 工作模式实现对系统中服务器 A 到服务器 B 传输数据的机密性保护。
该服务器密码机具有商用密码产品认证证书且密码模块安全等级为二级。
密码应用安全性评估人员在对该功能进行密码应用安全性评估时,获取到以下信息:
(1)加密传输数据使用的密钥为服务器 A 和服务器 B 每次通信前,采用基于数字证书密钥协商获得,一会话一密钥,并在一个通信会话中用于保护多次数据传输:
(2)获取服务器 A 到服务器 B 传输数据加密源代码如下:
// 服务器A加密并发送数据
voidsend_encrypted_data(Server *server, unsignedchar *plaintext, size_t length){
// 设置IV
unsigned char iv[16] = {0xEE, 0xFB, 0x36, 0x79, 0xCD, 0x02, 0x14, 0xAE, 0x41, 0xC4, 0x05, 0x47, 0x2D, 0x40, 0xFD, 0x60};
// 进行明文数据填充(错误处理省略)
unsigned char padding_value = 16 - (length % 16);
unsigned char *padded_text = malloc(length + padding_value);
memcpy(padded_text, plaintext, length);
for (size_t i = length; i < length + padding_value; i++) {
padded_text[i] = padding_value;
}
// 加密数据(错误处理省略)
unsigned char *encrypted_text = malloc(length + padding_value); // 假设加密后的数据长度不变
SM4_encrypt(padded_text, length + padding_value, encrypted_text, iv);
// 发送加密数据(错误处理省略)
send_data(encrypted_text, length + padding_value);
// 释放内存
free(padded_text);
free(encrypted_text);
}
// 服务器B解密数据并处理
voidreceive_encrypted_data(unsignedchar *encrypted_text, size_t encrypted_length, unsignedchar *iv){
// 分配解密数据存储内存
unsigned char *decrypted_text = malloc(encrypted_length);
if (decrypted_text == NULL) {
fprintf(stderr, "Failed to allocate memory for decrypted text");
return;
}
// 采用SM4的CBC工作模式解密数据,该函数内部封装密钥管理功能(错误处理省略)
SM4_decrypt(encrypted_text, encrypted_length, decrypted_text, iv);
// 处理解密后的数据(去除填充,错误处理省略)
size_t padding_value = decrypted_text[encrypted_length - 1];
if (padding_value > 0 && padding_value <= 16) {
// 处理解密后的数据并去除填充
process_data(decrypted_text, encrypted_length - padding_value);
} else {
// 发现填充错误,并将填充错误信息反馈给发送端,以便发送方做异常处理
notice_error("Padding error detected!");
}
// 释放内存
free(decrypted_text);
}
参考
GB/T 39786-2021 《信息安全技术 信息系统密码应用基本要求》
GB/T 43206-2023 《信息安全技术 信息系统密码应用测评要求》
GB/T 17964-2021 《信息安全技术 分组密码算法的工作模式》
【【分组密码的工作模式】|分组密码 | 密码学 | 信息安全 | ECB | CBC | CFB| OF B| CTR|】
https://www.bilibili.com/video/BV1U8411f74f?vd_source=ed7b1c961b1ef8e76187a6a09637d08a
CBC Padding Oracle Attack 填充提示攻击
原文始发于微信公众号(利刃信安):【能力验证】题目01:SM4-CBC 实现机密性保护
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论