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

简介

众所周知,为了保障商用密码的安全性,国家商用密码管理办公室制定了一系列密码标准,包括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字段做了加密处理
打开应用系统界面,分析登录按钮执行的函数,点击登录按钮会执行checkLogin函数,该函数包含了pubkey和加密所用的函数
全局搜索sm2Encrypt,发现在sm2.js文件中,下载该js文件到本地

逆向分析思路

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

Python调用JS文件

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

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

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值