邓高宇,龙毅宏
(武汉理工大学信息工程学院,湖北 武汉 430070)
SM2椭圆曲线公钥密码算法于 2010年首次公开发布,2012年成为中国商用密码标准,2016年成为中国国家密码标准。迄今为止与SM2算法相关研究表明,SM2算法的可证安全性达到了公钥密码算法的最高安全级别[1],其实现效率相当于或略优于一些国际标准的同类椭圆曲线密码算法[2-5]。2013年,孙荣燕,蔡昌曙,周洲[6]等人对SM2数字签名算法与 ECDSA算法进行了对比与分析研究,对ECDSA-SM2算法的数字模型进行了正确性证明。2016年,陈泽凯[7]实现了一个基于身份的SM2椭圆曲线数字签名方案SM2-IBS,具有效率高、签名长度短、不依赖PKI等特点。
随着4G、WLAN、传感器等无线网络的普及,使用移动终端逐渐成为用户访问网络处理业务(包括网络通信、电子支付、网上银行等)的重要手段[8]。而在移动终端上使用公钥密码私钥如SM2私钥时,最重要的一点就是保障用户私钥存储、使用的安全。目前在移动终端对用户私钥进行有效保护的手段主要有两种:一种是采用USB密码钥匙(USB key)作为客户端装置来存储私钥[9],此种方式给用户带来了使用成本,而且使用也不方便;另一种方式是使用移动终端内置密码芯片来存储私钥并进行密码运算,然而内置密码芯片的移动终端应用不广,市面上绝大部分手机都不自带密码芯片,且目前不存在支持SM2密码运算的手机密码芯片。由于使用密码硬件存在诸多问题,目前最常用的方法是使用纯软件的密码模块,将用户私钥保存在移动终端本地,并通过PIN(Personal Identification Number)码对私钥进行保护。这种采用纯软件密码模块、将用户私钥保存在移动终端本地的方式存在用户私钥泄露风险[10],如:攻击者通过木马窃取保存在移动终端中的用户私钥,破解用户保护私钥的PIN码,从而获得用户私钥;采用纯软件密码模块方式,用户私钥最终需以明文形式导入到内存中使用,攻击者有可能窃取存放在内存中的用户私钥。
为了在移动终端中安全的使用 SM2私钥进行数字签名,本文提出并实现了一种基于iOS移动终端的SM2移动密码系统方案,采用秘密共享的方式来保障用户SM2私钥使用的安全性。
为满足在iOS移动终端中安全使用SM2私钥进行数字签名的需求,本文提出的解决方案是将用户私钥通过一定的方式分割成多份,每份称为秘密份额[11],然后将其中的一份秘密份额保存在iOS移动终端,其余的保存在密码服务器中;当移动终端中的应用程序需要调用密码模块使用用户 SM2私钥进行数字签名时,多个计算装置分别使用自己的秘密份额进行密码运算,最后将各装置计算的结果合并形成最后的、使用用户私钥进行密码运算的结果,而数字签名验证仍然采用通常的、标准的方式。
基于iOS终端的SM2移动密码系统结构如图1所示,主要包括:
图1 基于iOS端的SM2移动密码系统结构图Fig.1 Structure of SM2 mobile cryptosystem based on iOS terminal
(1)iOS移动终端:用户进行操作的客户端,其中有专门的SM2密码模块,用来进行SM2密码运算,存储分割后的部分秘密份额,与密码服务器交互产生数字签名,并提供验证数字签名的功能。
(2)密码服务器:共有 m-1个密码服务器(m≥2),与移动终端构成m个进行秘密共享的装置;每个密码服务器存储有属于自己的SM2私钥秘密份额,当需要使用用户的SM2私钥进行数字签名时,与 iOS移动终端交互,使用自己的私钥秘密份额进行运算,并将密码运算结果发送给 iOS移动终端。
密码共享是信息安全和数据保密中的一项重要技术,本文在对SM2私钥进行普通秘密共享的基础上,提出在 SM2私钥产生后亦可采用门限秘密共享方法,可以把秘密份额分散在多个装置中,使得合法子集可以联合执行所需密码服务[12],而非法子集不能完成这个密码服务。被攻击时,只要达到门限数目的部件正常,就可以采取措施恢复系统为最初的安全状态[13]。在本论文实现的 SM2移动密码系统中,门限秘密共享可用来增强系统的安全性和容错性。
1.2.1 基于普通秘密共享的SM2数字签名
基于普通秘密共享的SM2数字签名,核心在于将用户 SM2私钥根据普通秘密共享算法分割成 m份私钥秘密份额,一份保存在iOS移动终端,其余m-1份分发到 m-1个密码服务器。当应用程序需要使用 SM2私钥进行数字签名时,移动终端中的密码模块和密码服务器分别使用各自保存的 SM2私钥秘密份额进行密码运算,产生 m份密码运算结果,最后将这m份密码运算的结果组合实现SM2数字签名。少了这 m份私钥秘密份额密码运算结果中的任意一份,密码模块都不能得到最终的数字签名。
在生成数字签名前,针对参与SM2数字签名生成的iOS移动终端和m-1个密码服务器进行如下初始化操作:
(1)iOS移动终端的密码模块产生m份秘密份额di,i=1,2,…,m,其中d1由移动终端保存,d2,…,dm由 m-1个密码服务器保存使用。这 m份秘密份额与用户的 SM2私钥 dA满足关系(1+dA)-1dAmod n=(d1+d2+…+dm) mod n,其中n是SM2密码运算所使用的椭圆曲线点群的阶(也即SM2密码运算所使用的椭圆曲线点群的基点G的阶),(1+dA)-1是(1+dA)的模n乘法逆(即(1+dA)-1与(1+dA)模n乘积为1);
(2)密码模块在区间[1,n-1]内随机选择一个整数b,计算c=(1+dA)-1b mod n(此处b不是椭圆曲线方程的参数b);
(3)计算Gb=[b]G,其中G是SM2椭圆曲线点群的基点;
(4)移动终端将 c、Gb保存一份,并分发给m-1个密码服务器;
当需要使用用户的SM2私钥dA针对消息M进行数字签名时,iOS移动终端、密码服务器按如下方式进行数字签名的生成:
(1)iOS移动终端和m-1个密码服务器在区间[1,n-1]中随机选择一个整数ki,i=1,2,…,m。
(2)iOS移动终端通过与m-1个密码服务器交互,计算得到 Q=[k1+k2+…+ km]Gb,r=(e+x1) mod n,且得到的Q、r满足:r≠0且[r]G+Q不是SM2椭圆曲线点群的零元(无穷远点),x1取自(x1,y1)=Q,e是从用户标识和消息M导出的杂凑值(即散列值)(按SM2算法,e是从用户标识IDA等参数导出的杂凑值ZA同消息M合并后的数据的杂凑值,参见SM2规范);
(3)移动终端的密码模块和 m-1个密码服务器分别计算si=(cki-dir) mod n,其中i=1,2,…,m,si对应si装置i所进行的计算;
(4)iOS移动终端的密码模块计算得到s=(s1+s2+…+sm) mod n;则(r,s)即为使用用户的SM2私钥dA对消息M的数字签名。
在上述数字签名生成过程中,r、e、si,i=1,2,…,m,根据计算的需要在m个装置之间传送。
1.2.2 基于门限秘密共享的SM2数字签名
本文提出的基于门限秘密共享的SM2数字签名方案,采用Shamir门限秘密共享方案。此方案中进行数字签名操作处理的移动终端和 t-1个密码服务器,仅是全部 m个装置(移动终端和 m-1个密码服务器)中的t个(m≥t),即采用(t,m)的门限方案。
方案核心在于将用户SM2私钥秘密(不是私钥本身)根据门限秘密共享算法分割成m份私钥秘密份额,一份保存在iOS移动终端,其余m-1份分发到 m-1个密码服务器。当应用程序需要使用 SM2私钥进行数字签名时,移动终端中的密码模块和m-1个密码服务器中的任意t-1个密码服务器分别使用各自保存的SM2私钥秘密份额进行密码运算,产生t份密码运算结果,最后将这t份密码运算的结果组合实现 SM2数字签名。基于门限秘密共享的SM2数字签名方案概述如下。
(1)在有限域GF(n)上,将私钥秘密(1+dA)-1dAmod n按(t, m)门限秘密共享分割成m份,并将分割得到的秘密分发给iOS移动终端和m-1个密码服务器,这里n是SM2椭圆曲线点群的阶;
(2)当iOS移动终端中的应用程序需要使用用户的SM2私钥对消息进行数字签名时,iOS移动终端以及 t-1个密码服务器根据自己的秘密份额以及当前组合分别计算得到d1, d2,…, dt,计算得到的d1,d2,…, dt满足关系:(1+dA)-1dAmod n=(d1+d2+…+dt)mod n;
(3)之后,iOS移动终端以及t-1个密码服务器依据d1, d2,…, dt按普通秘密共享一样的方式通过协同计算得到针对消息的数字签名。
依据以上门限秘密共享方案,其中任意不少于t份私钥秘密份额均能完成密码运算,而少于t份私钥秘密份额则不能,且少于 t个秘密共享成员也无法重构私钥秘密[14]。
在iOS移动终端的SM2密码功能的实施主要涉及SM2密码模块、以及秘密份额的存储以及与密码服务器的交互。SM2密码模块的主要功能是基于秘密共享方案(包括普通秘密共享和门限秘密共享)进行SM2数字签名的生成以及SM2数字签名验证,相应的功能通过OpenSSL的ECC密码库实现。
秘密份额存储在用户计算装置本地的永久存储介质中(移动终端内的电子盘),并通过 PIN码(Personal Identification Number)对秘密份额加以保护。在SM2数字签名的协同计算过程中iOS移动终端与密码服务器的交互采用自定义的协议,包括对移动终端用户进行身份鉴别,并通过SSL对交互数据进行安全保护。
本系统中的密码服务器运行在Windows平台,用C/C++语言开发,其主要功能是使用用户SM2的私钥秘密份额、基于秘密共享方案(包括普通秘密共享和门限秘密共享)进行SM2数字签名的生成,相应功能同样是基于OpenSSL库的ECC密码功能实现;密码服务器与iOS移动终端之间的交互通过自行定义的协议进行。
测试结果表明当iOS移动终端中的应用程序需要使用用户的SM2私钥进行数字签名时,基于前述移动密码系统,iOS移动终端中的密码模块及相应的密码服务器通过使用各自的用户 SM2私钥的秘密份额,能有效地生成SM2数字签名。
本文针对当前没有密码硬件情况下,安全使用用户SM2私钥进行数字签名的需求,提出了一种基于iOS移动终端的SM2移动密码系统方案。提出的方案具有以下优势:
(1)适用性广,不但适合于两方共享秘密,而且适合于多方共享秘密,不但适合于普通的秘密共享(共享),而且适合于门限秘密共享(共享)。
(2)提高了在没有密码硬件的情况下,用户SM2私钥使用的安全性。除非攻击者能同时获得分布在不同装置中的足够数量的秘密份额,否则,攻击者无法恢复用户私钥。而攻击者要同时获得分布在不同装置中的、足够数量的秘密份额的可能性非常低,几乎不可能。
(3)采用门限秘密共享方案,在产生突发情况,如服务器崩溃或丢失部分秘密份额时依然可以使用密码服务。在不增加风险的情况下,增加了系统的可靠性。
(4)采用纯软件方式,可用来取代专门的密码硬件,如USB Key、SmartCard,携带方便且降低了成本。
[1] 汪朝晖, 张振峰. SM2椭圆曲线公钥密码算法综述[J]. 信息安全研究, 2016, 2(11): 972-982.
[2] Idrees Z. Elliptic Curves Cryptography[J]. School of Computer Science Physics & Mathematics, 2012.
[3] 左石城, 向继, 王平建, 等. 本地提供签名服务系统的设计与实现[J]. 软件, 2017, 38(2): 84-90.
[4] Wang Q. The Application of Elliptic Curves Cryptography in Embedded Systems[C]// International Conference on Embedded Software and Systems. IEEE Computer Society, 2005:527-530.
[5] Zhang B, Liu E, Ding J, et al. Novel Certificate for Authentication Based on Elliptic Curve Cryptography and Vector Space Secret Sharing[J]. Journal of Convergence Information Technology, 2012, 7(13): 420-426.
[6] 孙荣燕, 蔡昌曙, 周洲, 等. 国密SM2数字签名算法与ECDSA算法对比分析研究[J]. 网络安全技术与应用,2013(2): 60-62.
[7] 陈泽凯. 一种基于身份的SM2椭圆曲线数字签名方案及其在离线文档认证中的应用[D]. 厦门大学, 2016.
[8] 马骏, 马建峰, 郭渊博. 可证明安全的智能移动终端私钥保护方案[J]. 通信学报, 2012(12): 108-115.
[9] 王芸, 赵长江. 安全的移动终端数字签名方案.中国科技信息, 2015, (22): 52-54.
[10] 陈小梅. 一种基于ECC的安全移动支付协议[J]. 软件,2013(12): 202-204.
[11] Spaliaras I, Dokouzyannis S. Design and Evaluation of a New Scheme Based on Secret Sharing Mechanisms that Increases the Security of Conditional Access Systems in Satellite Pay-TV[J]. Wireless Personal Communications, 2015,82(3): 1-21.
[12] 荣辉桂, 莫进侠, 常炳国, 等. 基于Shamir秘密共享的密钥分发与恢复算法[J]. 通信学报, 2015(3): 60-69.
[13] 张文娟, 张锦华. 基于ELGamal密码体制的安全密钥托管方案[J]. 软件, 2012, 33(6): 20-22.
[14] Harn L, Hsu C F, Xia Z, et al. How to Share Secret Efficiently over Networks[J]. Security & Communication Networks, 2017, 2017(4): 1-6.