国密算法速览在介绍 Yakit 支持之前先了解国密三大核心算法算法类型对标国际标准用途SM2非对称ECCRSA数字签名、密钥交换、身份认证SM3哈希摘要MD5/SHA数字签名、数据完整性验证SM4对称分组加密DES/AES数据加解密分组密码说明SM1 算法不公开仅以 IP 核形式存在于芯片中软件层面无法支持SM9 为标识密码算法非对称将用户标识作为公钥。 Yaklang/CDSL 对国密算法的支持情况算法支持程度说明SM3✅ 完全支持hash 模块内置SM4✅ 完全支持多模式加解密CBC/OFB/CTR/ECBSM2⚠️ 有限支持社区版 RSA 接口未针对 SM2 优化功能待完善SM1❌ 不支持算法不公开软件层无法实现 SM3 使用方法函数codec.Sm3(data)说明对数据生成 SM3 哈希摘要输出十六进制字符串Yaklang 示例data Hello, World! sm3Hash codec.Sm3(data) dump(sm3Hash) // 输出9185dda7c380d3d7ac243c9e39d1d56850cfe5f7a3b2509e65c4e82e8c29bf6a使用场景数据完整性校验替代 MD5/SHA密码存储数据库中存 SM3 摘要而非明文消息认证码MAC生成数字签名中的摘要计算 SM4 使用方法SM4 是 Yaklang 支持最完整的国密算法支持多种加密模式1. SM4-CBC 模式最常用 key 0123456789abcdef // 16字节密钥 iv fedcba9876543210 // 16字节初始化向量 plaintext Hello, SM4! // 加密 ciphertext codec.SM4EncryptCBCWithPKCS7Padding(key, iv, plaintext) // 解密 decrypted codec.SM4DecryptCBCWithPKCS7Padding(key, iv, ciphertext) 2. SM4-OFB 模式 key 0123456789abcdef iv fedcba9876543210 ciphertext codec.SM4EncryptOFBWithPKCSPadding(key, iv, plaintext) decrypted codec.SM4DecryptOFBWithPKCSPadding(key, iv, ciphertext) 3. SM4-ECB 模式简单但安全性较低 key 0123456789abcdef ciphertext codec.SM4EncryptECBWithPKCSPadding(key, plaintext) decrypted codec.SM4DecryptECBWithPKCSPadding(key, ciphertext) 4. SM4-CTR 模式 key 0123456789abcdef nonce fedcba9876543210 // 12字节nonce ciphertext codec.SM4EncryptCTRWithPKCSPadding(key, nonce, plaintext) decrypted codec.SM4DecryptCTRWithPKCSPadding(key, nonce, ciphertext)SM4 密钥格式注意事项密钥长度为 16 字节128位Yakit 支持十六进制Hex格式密钥CBC/OFB 模式需提供 16 字节 IVCTR 模式需提供 12 字节 Nonce⚠️ SM2 支持情况项目说明当前状态社区版功能有限RSA 接口未针对 SM2 优化原因社区版开发优先级考量暂无强烈硬需求对标SM2 对标 RSA数字签名/密钥交换建议如需完整的 SM2 支持可通过 Yaklang 编写插件调用底层密码库 如果需要 SM2 加解密/签名验签可通过 Yaklang 热加载插件扩展调用 sm-crypto 或 gm-crypto 等 JS 库实现。️ 在 Yakit GUI 中使用国密场景一Web Fuzzer 热加载中使用 SM4在测试需要 SM4 加密的接口时通过热加载标签动态生成加密 payload// 热加载函数示例 sm4Encrypt func(p) { key 0123456789abcdef iv fedcba9876543210 // 对 fuzztag 生成的原始数据加密后发送 return codec.SM4EncryptCBCWithPKCS7Padding(key, iv, p) }场景二编解码模块直接使用在 Yakit 的 Codec数据处理 模块中选择编解码类型为 SM4输入密钥和 IV选择加密模式CBC/OFB/CTR/ECB一键加解密场景三CTF / 渗透测试靶场前端 SM4 加密通信分析渗透测试中绕过前端加密如金融类 App配合 Web Fuzzer 爆破带国密保护的接口 核心函数汇总函数模式填充codec.Sm3(data)——codec.SM4EncryptCBCWithPKCS7PaddingCBCPKCS#7codec.SM4DecryptCBCWithPKCS7PaddingCBCPKCS#7codec.SM4EncryptOFBWithPKCSPaddingOFBPKCS#7codec.SM4DecryptOFBWithPKCSPaddingOFBPKCS#7codec.SM4EncryptECBWithPKCSPaddingECBPKCS#7codec.SM4DecryptECBWithPKCSPaddingECBPKCS#7codec.SM4EncryptCTRWithPKCSPaddingCTRPKCS#7codec.SM4DecryptCTRWithPKCSPaddingCTRPKCS#7 典型使用场景场景推荐算法说明测试国密 HTTPS 通信SM4分析 SM4 加密的请求体/响应体绕过前端 SM4 加密SM4-CBC/OFB热加载动态加密 payload数据完整性校验SM3替代 SHA/MD5 验证响应签名金融/政务系统渗透SM4 SM3国密标准系统测试CTF 密码学题目SM4SM4 加解密类题目总结Yaklang 目前对 SM3 和 SM4 支持完整可直接使用 codec 模块进行加解密和摘要计算SM2 支持较为有限SM1 不支持。在实际渗透测试中SM4 是最常用的国密加解密算法主要用于测试采用国密标准金融、政务、移动 App的通信加密系统。
Yakit/Yaklang 国密算法支持详解
国密算法速览在介绍 Yakit 支持之前先了解国密三大核心算法算法类型对标国际标准用途SM2非对称ECCRSA数字签名、密钥交换、身份认证SM3哈希摘要MD5/SHA数字签名、数据完整性验证SM4对称分组加密DES/AES数据加解密分组密码说明SM1 算法不公开仅以 IP 核形式存在于芯片中软件层面无法支持SM9 为标识密码算法非对称将用户标识作为公钥。 Yaklang/CDSL 对国密算法的支持情况算法支持程度说明SM3✅ 完全支持hash 模块内置SM4✅ 完全支持多模式加解密CBC/OFB/CTR/ECBSM2⚠️ 有限支持社区版 RSA 接口未针对 SM2 优化功能待完善SM1❌ 不支持算法不公开软件层无法实现 SM3 使用方法函数codec.Sm3(data)说明对数据生成 SM3 哈希摘要输出十六进制字符串Yaklang 示例data Hello, World! sm3Hash codec.Sm3(data) dump(sm3Hash) // 输出9185dda7c380d3d7ac243c9e39d1d56850cfe5f7a3b2509e65c4e82e8c29bf6a使用场景数据完整性校验替代 MD5/SHA密码存储数据库中存 SM3 摘要而非明文消息认证码MAC生成数字签名中的摘要计算 SM4 使用方法SM4 是 Yaklang 支持最完整的国密算法支持多种加密模式1. SM4-CBC 模式最常用 key 0123456789abcdef // 16字节密钥 iv fedcba9876543210 // 16字节初始化向量 plaintext Hello, SM4! // 加密 ciphertext codec.SM4EncryptCBCWithPKCS7Padding(key, iv, plaintext) // 解密 decrypted codec.SM4DecryptCBCWithPKCS7Padding(key, iv, ciphertext) 2. SM4-OFB 模式 key 0123456789abcdef iv fedcba9876543210 ciphertext codec.SM4EncryptOFBWithPKCSPadding(key, iv, plaintext) decrypted codec.SM4DecryptOFBWithPKCSPadding(key, iv, ciphertext) 3. SM4-ECB 模式简单但安全性较低 key 0123456789abcdef ciphertext codec.SM4EncryptECBWithPKCSPadding(key, plaintext) decrypted codec.SM4DecryptECBWithPKCSPadding(key, ciphertext) 4. SM4-CTR 模式 key 0123456789abcdef nonce fedcba9876543210 // 12字节nonce ciphertext codec.SM4EncryptCTRWithPKCSPadding(key, nonce, plaintext) decrypted codec.SM4DecryptCTRWithPKCSPadding(key, nonce, ciphertext)SM4 密钥格式注意事项密钥长度为 16 字节128位Yakit 支持十六进制Hex格式密钥CBC/OFB 模式需提供 16 字节 IVCTR 模式需提供 12 字节 Nonce⚠️ SM2 支持情况项目说明当前状态社区版功能有限RSA 接口未针对 SM2 优化原因社区版开发优先级考量暂无强烈硬需求对标SM2 对标 RSA数字签名/密钥交换建议如需完整的 SM2 支持可通过 Yaklang 编写插件调用底层密码库 如果需要 SM2 加解密/签名验签可通过 Yaklang 热加载插件扩展调用 sm-crypto 或 gm-crypto 等 JS 库实现。️ 在 Yakit GUI 中使用国密场景一Web Fuzzer 热加载中使用 SM4在测试需要 SM4 加密的接口时通过热加载标签动态生成加密 payload// 热加载函数示例 sm4Encrypt func(p) { key 0123456789abcdef iv fedcba9876543210 // 对 fuzztag 生成的原始数据加密后发送 return codec.SM4EncryptCBCWithPKCS7Padding(key, iv, p) }场景二编解码模块直接使用在 Yakit 的 Codec数据处理 模块中选择编解码类型为 SM4输入密钥和 IV选择加密模式CBC/OFB/CTR/ECB一键加解密场景三CTF / 渗透测试靶场前端 SM4 加密通信分析渗透测试中绕过前端加密如金融类 App配合 Web Fuzzer 爆破带国密保护的接口 核心函数汇总函数模式填充codec.Sm3(data)——codec.SM4EncryptCBCWithPKCS7PaddingCBCPKCS#7codec.SM4DecryptCBCWithPKCS7PaddingCBCPKCS#7codec.SM4EncryptOFBWithPKCSPaddingOFBPKCS#7codec.SM4DecryptOFBWithPKCSPaddingOFBPKCS#7codec.SM4EncryptECBWithPKCSPaddingECBPKCS#7codec.SM4DecryptECBWithPKCSPaddingECBPKCS#7codec.SM4EncryptCTRWithPKCSPaddingCTRPKCS#7codec.SM4DecryptCTRWithPKCSPaddingCTRPKCS#7 典型使用场景场景推荐算法说明测试国密 HTTPS 通信SM4分析 SM4 加密的请求体/响应体绕过前端 SM4 加密SM4-CBC/OFB热加载动态加密 payload数据完整性校验SM3替代 SHA/MD5 验证响应签名金融/政务系统渗透SM4 SM3国密标准系统测试CTF 密码学题目SM4SM4 加解密类题目总结Yaklang 目前对 SM3 和 SM4 支持完整可直接使用 codec 模块进行加解密和摘要计算SM2 支持较为有限SM1 不支持。在实际渗透测试中SM4 是最常用的国密加解密算法主要用于测试采用国密标准金融、政务、移动 App的通信加密系统。