【实战案列】商用密码算法SM2的加密逆向分析案例

admin 2023年12月22日07:57:02评论13 views字数 1276阅读4分15秒阅读模式

简介

众所周知,为了保障商用密码的安全性,国家商用密码管理办公室制定了一系列密码标准,包括SM1(SCB2)、SM2、SM3、SM4、SM7、SM9、祖冲之密码算法(ZUC)那等等。
SM1、SM4、SM7、祖冲之密码(ZUC)是对称算法;SM2、SM9是非对称算法;SM3是哈希算法。其中SM1、SM7算法不公开,调用该算法时,需要通过加密芯片的接口进行调用;

算法分类

算法名称 算法类别 应用领域 特点
SM1 对称(分组)加密算法 芯片 分组长度、密钥长度均为 128 比特
SM2 非对称(基于椭圆曲线 ECC)加密算法 数据加密 ECC 椭圆曲线密码机制 256 位,相比 RSA 处理速度快,消耗更少
SM3 散列(hash)函数算法 完整性校验 安全性及效率与 SHA-256 相当,压缩函数更复杂
SM4 对称(分组)加密算法 数据加密和局域网产品 分组长度、密钥长度均为 128 比特,计算轮数多
SM7 对称(分组)加密算法 非接触式 IC 卡 分组长度、密钥长度均为 128 比特
SM9 标识加密算法(IBE) 端对端离线安全通讯 加密强度等同于 3072 位密钥的 RSA 加密算法
ZUC 对称(序列)加密算法 移动通信 4G 网络 流密码

SM2算法加密案例

逆向思路一般有搜索加解密函数,或者通过断点进行分析
本次案例比较简单,就直接通过前端登录页面分析
SM2是非对称算法,公私钥是不一样的,拿到公钥只可以用来加密,如果需要解密需要拿到服务端的私钥
而且生成的SM2密文值中加了随机值,对同一个字段加密的密文是不一样的
所以本文章只涉及通过逆向找到加密函数利用

前端分析

开启开发者工具发现系统只对password字段做了加密处理
【实战案列】商用密码算法SM2的加密逆向分析案例
打开应用系统界面,分析登录按钮执行的函数,点击登录按钮会执行checkLogin函数,该函数包含了pubkey和加密所用的函数
【实战案列】商用密码算法SM2的加密逆向分析案例
全局搜索sm2Encrypt,发现在sm2.js文件中,下载该js文件到本地

逆向分析思路

通过node.js直接执行sm2.js文件,可以发现缺少了很多的报错信息,
解决办法:定义一下window,导入CryptoJSnavigator未定义,定义一下navigator
最后一个报错是SM2Utils未定义,在js文件中搜索一共发现两处,
【实战案列】商用密码算法SM2的加密逆向分析案例
window.SM2Utils = {},因为在浏览器中,window对象可以直接使用,而在本地报错,在调用SM2Utils的这里,改一下
【实战案列】商用密码算法SM2的加密逆向分析案例
最后直接执行看是否有报错,有报错就需要继续补环境
【实战案列】商用密码算法SM2的加密逆向分析案例
没有报错说明环境是没有问题了,直接在js中console.log打印加密后的信息,例如:
明文:123
【实战案列】商用密码算法SM2的加密逆向分析案例

Python调用JS文件

直接使用execjs调用js文件
【实战案列】商用密码算法SM2的加密逆向分析案例
调用js时候会有个编码错误,设置`errors='ignore'无视报错信息,不影响脚本执行结果
后续可以用python直接调用该js文件加密,然后暴力破解或者测试登录接口漏洞
自己写了个小脚本测试了下通过结果提交账号口令,通过对前端源代码逻辑分析,回显数据为空调用login函数登录成功!!!!!!!!!!
【实战案列】商用密码算法SM2的加密逆向分析案例
【实战案列】商用密码算法SM2的加密逆向分析案例

本文章只是提供一个小小的思路。


原文始发于微信公众号(小C学安全):【实战案列】商用密码算法SM2的加密逆向分析案例

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年12月22日07:57:02
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【实战案列】商用密码算法SM2的加密逆向分析案例https://cn-sec.com/archives/2325692.html

发表评论

匿名网友 填写信息