跳到主要内容

国家商用加密方法

国密即国家密码局认定的国产加密算法,爬虫工程师在做 JS 逆向的时候,会遇到各种各样的加密算法,其中 RSA、AES、SHA 等算法是最常见的,这些算法都是国外的。

主要在这个网址里面。把科普园地看一下,基本对国内的一些网站的加密方案基本就熟悉很多了。

https://www.oscca.gov.cn/sca/zxfw/kpyd.shtml

SM1、SM2、SM3 、SM4、SM7、SM9、ZUC(祖冲之加密算法)等,SM 代表商密,即商业密码,是指用于商业的、不涉及国家秘密的密码技术。SM1 和 SM7 的算法不公开,其余算法都已成为 ISO/IEC 国际标准。 SM2、SM3、SM4 三种加密算法是比较常见的,在爬取部分 gov 网站时,很大几率会遇到这些算法,所以作为爬虫工程师是有必要了解一下这些算法的。

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

SM1

分组加密算法,对称加密,分组长度和密钥长度都为 128 位,故对消息进行加解密时,若消息长度过长,需要进行分组,要消息长度不足,则要进行填充。算法安全保密强度及相关软硬件实现性能与 AES 相当,该算法不公开,仅以 IP 核的形式存在于芯片中,调用该算法时,需要通过加密芯片的接口进行调用,采用该算法已经研制了系列芯片、智能 IC 卡、智能密码钥匙、加密卡、加密机等安全产品,广泛应用于电子政务、电子商务及国民经济的各个应用领域(包括国家政务通、警务通等重要领域),一般了解的人比较少,爬虫工程师也不会遇到这种加密算法。

SM2

椭圆曲线(ECC)公钥加密算法,一般在区块链web3中最常见,如比特币就是用的ECC变体,非对称加密,SM2 算法和 RSA 算法都是公钥加密算法,SM2 算法是一种更先进安全的算法,在我们国家商用密码体系中被用来替换 RSA 算法,在不少 gov 网站会见到此类加密算法。我国学者对椭圆曲线密码的研究从 20 世纪 80 年代开始,目前已取得不少成果,SM2 椭圆曲线公钥密码算法比 RSA 算法有以下优势:

SM2RSA
安全性256 位 SM2 强度已超过 RSA-2048一般
算法结构基本椭圆曲线(ECC)基于特殊的可逆模幂运算
计算复杂度完全指数级亚指数级
存储空间(密钥长度)192-256 bit2048-4096 bit
秘钥生成速度较 RSA 算法快百倍以上
解密加密速度较快一般

SM3

密码杂凑算法,用于替代 MD5/SHA-1/SHA-2 等国际算法,是在 SHA-256 基础上改进实现的,消息分组长度为 512 位,摘要值长度为 256 位,其中使用了异或、模、模加、移位、与、或、非运算,由填充、迭代过程、消息扩展和压缩函数所构成。在商用密码体系中,SM3 主要用于数字签名及验证、消息认证码生成及验证、随机数生成等。据国家密码管理局表示,其安全性及效率要高于 MD5 算法和 SHA-1 算法,与 SHA-256 相当。 一般不常用,如果用SM3的时候,会首先考虑SHA-256和SHA-512

SM4

无线局域网标准的分组加密算法,对称加密,用于替代 DES/AES 等国际算法,SM4 算法与 AES 算法具有相同的密钥长度和分组长度,均为 128 位,故对消息进行加解密时,若消息长度过长,需要进行分组,要消息长度不足,则要进行填充。加密算法与密钥扩展算法都采用 32 轮非线性迭代结构,解密算法与加密算法的结构相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。 (不必了解)

SM4DES
计算轮数3216(3DES 为 16*3)
密码部件S 盒、非线性变换、线性变换、合成变换标准算术和逻辑运算、先替换后置换,不含线性变换

SM7

分组加密算法,对称加密,该算法不公开,包括身份识别类应用(非接触式 IC 卡、门禁卡、工作证、参赛证等),票务类应用(大型赛事门票、展会门票等),支付与通卡类应用(积分消费卡、校园一卡通、企业一卡通等)。爬虫工程师基本上不会遇到此类算法。 真的想用得去申请,同时需要备案用途等等。

SM9

标识加密算法,非对称加密,标识加密将用户的标识(如微信号、邮件地址、手机号码、QQ 号等)作为公钥,省略了交换数字证书和公钥过程,使得安全系统变得易于部署和管理,适用于互联网应用的各种新兴应用的安全保障,如基于云技术的密码服务、电子邮件安全、智能终端保护、物联网安全、云存储安全等等。这些安全应用可采用手机号码或邮件地址作为公钥,实现数据加密、身份认证、通话加密、通道加密等。在商用密码体系中,SM9 主要用于用户的身份认证,据新华网公开报道,SM9 的加密强度等同于 3072 位密钥的 RSA 加密算法。 可以理解为就是一种零知识证明的一种解决思路。

零知识证明参考百科链接。

https://baike.baidu.com/item/%E9%9B%B6%E7%9F%A5%E8%AF%86%E8%AF%81%E6%98%8E/8804311?fr=ge_ala

ZUC

祖冲之算法, 流密码算法,对称加密,适用于 3GPP LTE 通信中的加密和解密,不必理会。

Python实现

国密算法均没有官方的库实现,因为一些算法是不公开的,是申请制使用,因此资料里面只有一些SM2,SM3,SM4这类,逆向真的遇到了这些算法,真的不要想着破解了。直接用自动化方案进行获取资源即可。

GmSSL是一个开源的加密包的python实现,支持SM2/SM3/SM4等国密(国家商用密码)算法、项目采用对商业应用友好的类BSD开源许可证,开源且可以用于闭源的商业应用。

https://github.com/duanhongyi/gmssl