一、密评简介
商用密码应用安全性评估(简称“密评”),是指在采用商用密码技术、产品和服务集成建设的网络和信息系统中,对其密码应用的合规性、正确性、有效性进行评估。
1、法律法规
国家主席习近平2019年10月26日签署了第35号主席令。
第35号主席令说,《中华人民共和国密码法》已由中华人民共和国第十三届全国人民代表大会常务委员会第十四次会议于2019年10月26日通过,现予公布,自2020年1月1日起施行。
《密码法》第二十七条
法律、行政法规和国家有关规定要求使用商用密码进行保护的关键信息基础设施,其运营者应当使用商用密码进行保护,自行或者委托商用密码检测机构开展商用密码应用安全性评估。商用密码应用安全性评估应当与关键信息基础设施安全检测评估、网络安全等级测评制度相衔接,避免重复评估、测评。
关键信息基础设施的运营者采购涉及商用密码的网络产品和服务,可能影响国家安全的,应当按照《中华人民共和国网络安全法》的规定,通过国家网信部门会同国家密码管理部门等有关部门组织的国家安全审查。
为规范密评工作,国家密码管理局制定印发了《商用密码应用安全性评估管理办法(试行)》、《商用密码应用安全性测评机构管理办法(试行)》、《商用密码应用安全性测评机构能力评审实施细则(试行)》等管理文件。
《商用密码应用安全性评估管理办法(试行)》第十条
重要领域网络与信息系统投入运行后,责任单位应当委托测评机构定期开展商用密码应用安全性评估,评估未通过,责任单位应当限期整改并重新组织评估。
关键信息基础设施、网络安全等级保护第三级及以上信息系统,每年至少评估一次,测评机构可将商用密码应用安全性评估与关键信息基础设施网络安全测评、网络安全等级保护测评同步进行。对其他信息系统定期开展检查和抽查。
同时,在《网络安全等级保护条例(征求意见稿)》第四十七条、《国家政务信息化项目建设管理办法》第十五条及第二十五条、《商用密码管理条例(修订草案征求意见稿)》第三十八条中均有提及对密评的要求。
2、参考标准
《中华人民共和国密码法》
《商用密码应用安全性评估管理办法(试行)》
《信息安全等级保护商用密码管理办法》
《信息安全等级保护商用密码技术实施要求》
《信息安全等级保护商用密码技术要求》
《信息系统密码测评要求》
《信息系统密码应用基本要求》GM/T 0054-2018
二、 什么是商用密码
商用密码工作是密码工作的重要组成部分。商用密码主要用于保护不属于国家秘密的信息,广泛用于通信、金融、税控、社保、能源等重要领域,在维护国家安全、促进经济发展、保护人民群众利益中发挥不可替代的作用。1996年7月,中央政治局常委会专题研究商用密码,做出在我国大力发展商用密码和加强对商用密码管理的决定,“商用密码”从此成为专有名词。
根据1999年10月7日国务院发布实施的《商用密码管理条例》第一章第二条规定:“本条例所称商用密码,是指对不涉及国家秘密内容的信息进行加密保护或者安全认证所使用的密码技术和密码产品”。
如何来理解《条例》中对商用密码的定义呢?第一,它明确了商用密码是用于“不涉及国家秘密内容的信息”领域,即非涉密信息领域。商用密码所涉及的范围很广,凡是不涉及国家秘密内容的信息,又需要用密码加以保护的,均可以使用商用密码。第二,它指明了商用密码的作用,是实现非涉密信息的加密保护和安全认证等具体应用。加密是密码的传统应用。采用密码技术实现信息的安全认证,是现代密码的主要应用之一。第三,定义将商用密码归结为商用密码技术和商用密码产品,也就是说,商用密码是商用密码技术和商用密码产品的总称。
三、金融行业常见国密算法简介
1、SM2
SM2椭圆曲线公钥密码算法(简称SM2算法)是基于椭圆曲线离散对数问题。由于基于椭圆曲线上离散对数问题的困难性要高于一般乘法群上的离散对数问题的困难性,且椭圆曲线所基于的域的运算位数要远小于传统离散对数的运算位数,因此,椭圆曲线密码体制比原有的密码体制(如RSA)更具优越性。
SM2算法于2010年年底由国家密码管理局发布,于2012年成为密码行业标准,于2016年转化为国家标准。SM2数字签名算法于2017年被ISO采纳,成为国际标准ISO/IEC14888-3的一部分。
与RSA算法相比,SM2算法具有以下优势:
a、 安全性更高。256比特的SM2算法密码强度已超过RSA-2048(私钥长度为2048比特的RSA算法),与RSA-3072相当。
b、 密钥短。SM2算法的使用私钥长度为256比特,而RSA算法通常至少需要2048比特,甚至更长(如3072比特)。
c、 私钥产生简单。RSA私钥产生时需要用到两个随机产生的大素数,除了需要保证随机性外,还需要用到素数判定算法,产生过程复杂且速度较慢;而SM2私钥的产生只需要生成一个一定范围内的256比特的随机数即可,因此产生过程简单,存在的安全风险也相对较小。
d、 签名速度快。同等安全强度下,SM2算法在用私钥签名时,速度远超RSA算法。
2、SM3
SM3密码杂凑算法,国家密码管理局2010年公布的中国商用密码杂凑算法标准。适用于商用密码应用中的数字签名和验证消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。SM3中输入消息经过填充、扩展、迭代压缩后,生成长度为256比特的杂凑值,SM3算法在结构上和SHA-256相似,消息分组大小、迭代轮数、输出长度均与SHA-256相同。但相比于SHA-256,SM3算法增加了多种新设计技术,从而在安全性和效率上具有优势。在保障安全性的前提下,SM3算法的综合性能指标与SHA-256在同条件下相当。
3、SM4
SM4算法全称为SM4分组密码算法,是国家密码管理局2012年3月发布的第23号公告中公布的密码行业标准。SM4算法是一个分组对称密钥算法,明文、密钥、密文都是128比特,加密和解密密钥相同,在安全性上,与AES-128是相当的。加密算法与密钥扩展算法都采用32轮非线性迭代结构。解密过程与加密过程的结构相似,只是轮密钥的使用顺序相反。SM4算法的优点是软件和硬件实现容易,运算速度快。
四、密评实践中可以派上用场的“小刀”
在密评实践中,为了验证系统是否按照预定的密码应用方案工作,需要通过工具测评的方式对系统关键点进行验证。“工欲善其事,必先利其器”,这时一些工具是必备的,如抓包工具,密码算法分析工具等等,当然还需要一些分析技巧。
1、 GmSSL
GmSSL的官方介绍:
GmSSL是一个开源的密码工具箱,支持SM2/SM3/SM4/SM9/ZUC等国密(国家商用密码)算法、SM2国密数字证书及基于SM2证书的SSL/TLS安全通信协议,支持国密硬件密码设备,提供符合国密规范的编程接口与命令行工具,可以用于构建PKI/CA、安全通信、数据加密等符合国密标准的安全应用。GmSSL项目是OpenSSL项目的分支,并与OpenSSL保持接口兼容。因此GmSSL可以替代应用中的OpenSSL组件,并使应用自动具备基于国密的安全能力。GmSSL项目采用对商业应用友好的类BSD开源许可证,开源且可以用于闭源的商业应用。
GmSSL项目由北京大学关志副研究员的密码学研究组开发维护,项目源码托管于GitHub。自2014年发布以来,GmSSL已经在多个项目和产品中获得部署与应用,并获得2015年度“一铭杯”中国Linux软件大赛二等奖(年度最高奖项)与开源中国密码类推荐项目。GmSSL项目的核心目标是通过开源的密码技术推动国内网络空间安全建设。
关键特性:
✦ 支持SM2/SM3/SM4/SM9/ZUC等全部已公开国密算法
✦ 支持国密SM2双证书SSL套件和国密SM9标识密码套件
✦ 高效实现在主流处理器上可完成4.5万次SM2签名
✦ 支持动态接入具备SKF/SDF接口的硬件密码模块
✦ 支持门限签名、秘密共享和白盒密码等高级安全特性
✦ 支持Java、Go、PHP等多语言接口绑定和REST服务接口
a、编译
笔者在编译GmSSL时遇到个两处小坑如下:
1、./config时报错提示“This system is not supported.”
解决办法:
修改Configure、test/build.info、test/run_tests.pl中的
useif $^One"VMS","File::Glob" =>qw/glob/;
改为
useif $^One"VMS","File::Glob" =>qw/:glob/;
2、编译成功后运行时,继续报错:
解决办法:
然后执行:
cd /opt/gmssl/lib //我的编译目录是在/opt/gmssl
cp libssl.so.1.1 /lib/x86_64-linux-gnu/libssl.so.1.1
cp libcrypto.so.1.1 /lib/x86_64-linux-gnu/libcrypto.so.1.1
可以正常使用gmssl:
b、简单使用
1、使用SM3计算杂凑值
2、使用SM4进行加解密
加密:
解密:
3、SM2生成私钥
gmssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:sm2p256v1 -out key.pem
4、SM2签名
echo"helloworld" | gmssl pkeyutl -sign -pkeyopt ec_scheme:sm2 -inkey key.pem | base64
5、SM2从私钥中导出公钥
gmssl pkey -in key.pem -pubout
6、SM2公钥验签
使用私钥签名生成签名文件:
使用公钥对签名文件进行验签:
7、SM2命令生成私钥
gmssl sm2 -genkey -sms4
8、导出公钥
gmssl sm2 -in sm2.pem -pubout
9、公钥加密
10、私钥解密
2、 抓包分析
工具测评中,抓包分析是非常必要的,需根据具体的网络拓扑和商用密码应用方案来选定合适的网络节点来抓包并对报文进行分析。
3、 从报文中提取证书
通过分析报文找到传输证书的报文,导出分组字节流,保存:
得到证书文件:
4、 根据证书可获取的信息
a、识别算法:
根据《密码应用标识规范》识别具体使用的算法:
b、根据证书还可判断证书用途配置是否正确,校验证书有效性等情况。
双证书体系中的密钥用法扩展示例,具有keyEncipherment加密功能的证书:
不可用于加密,只可用于数字签名的证书:
5、 单向认证和双向认证的判断
单向认证:只有通信一方向另一方发送证书。
双向认证:通信双方均会向对方发送证书。
6、 根据算法输出长度特征判断算法
SM2签名输出:512比特(编码前的原始签名长度);
SM2加密输出:明文长度 + 96字节(768比特);
SM3输出长度:256比特;
SM4输出长度:128比特的整数倍。
7、 其他测评方式
密评的工具测评远远不止这些,还有诸如配置检查、日志分析、数据库表数据抽查、报文分析等等,测评人员应结合实际场景从多个维度进行考量,以判断系统密码方案应用的合规性、正确性、有效性。
五、TIPS:
位、比特、字节、字
位(bit,b):
计算机最小数据单位,每个0或1就是一个位。1位 = 1比特。
字节(Byte,B):
是计算机信息技术用于计量存储容量的一种计量单位。
1 字节(Byte) = 8 位(bit) = 8 比特
字(Word):
1 字 = 2 字节
十六进制数长度判断:
8位二进制的数字可以转换为2个十六进制的数字,如下:
因此,十六进制的两个数字即表示 1 字节(8位二进制的数字)。
加密密文或杂凑值的输出经常使用16进制输出。
判断十六进制数据长度举例如下:
979dc10e592d940c //十六进制,十六进制的16个数字,实际表示(16/2)= 8个字节,共有(8 * 8) = 64比特。
参考文献:
《商用密码应用与安全性评估》
参考链接:
http://www.oscca.gov.cn/【国家密码管理局官网】
https://github.com/guanzhi/GmSSL
https://blog.csdn.net/weixin_40512690/article/details/103171885
邓宁,信息安全工程师,CISSP,8年信息安全相关工作经验,专注于金融行业信息系统渗透测试、移动金融APP安全检测工作。作者邮箱:dengning@cfca.com.cn。欢迎大家提出宝贵的建议!
声明:本文来自网安前哨,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。