基于协同签名的电网移动GIS签名系统的设计与实现
2022-04-19苏簪铀马振华王志洋
苏簪铀,马振华,王志洋
(1.国网思极神往位置服务(北京)有限公司,福建 厦门 350200;2.国网宁夏电力有限公司石嘴山供电公司,宁夏 石嘴山 753000)
随着移动互联网的快速发展和智能手机的大量普及,越来越多的传统业务迁移到移动终端上。移动终端作为开放的轻量级设备,在使用过程中所面临的安全威胁更为严峻。因此,如何保证在移动终端上进行安全的身份认证和数据传输成为移动应用的关键。
国际上通用的RSA、DES/3DES、MD5、SHA1等安全算法,随着计算能力的提升也存在被破译的风险。相较于其他公钥密码体制,椭圆曲线密码算法(ECC)是一种基于椭圆曲线的公钥密码算法,其数学基础是基于椭圆曲线的离散对数问题,相较于基于模运算的RSA算法而言,ECC算法的求解更为困难,安全性能更高,同时具有密钥长度更短、计算量更小、处理速度更快、带宽要求更低等优势,更适用于资源受限的移动设备。我国密码管理部门2010年已发布了以ECC算法为基础的SM2椭圆曲线公钥密码算法[1],该算法已被国内外学者广泛应用[2-3]。为了解决移动终端丢失或被劫持导致签名密钥泄露等安全隐患问题,国内外学者提出了基于门限理论的协同签名算法[4-6],文献[7-10]基于门限签名方案,对SM2签名算法进行门限化,验证了完整的安全性和实用性证明。
本文基于前人提出的多方协同签名协议基础上,提出一种适用于移动终端场景的协同签名实现方案,并应用于电网领域的移动GⅠS 数据安全防护,以解决电网移动应用终端用户身份认证和电网矢量切片加密传输的安全问题。
1 数字签名简介
数字签名技术是互联网信息安全机制中非常重要的一种信息加密技术,广泛应用于电子商务、电子政务、信息通信等领域。
数字签名算法一般采用非对称密钥体制来实现,常见的数字签名算法有RSA、DSA、ECDSA、SM2等算法,不同算法的密钥强度和安全性与其数学原理有关,RSA算法是基于大数分解问题,DSA算法是基于整数有限域离散对数难题,安全性DSA 与RSA 相当,而ECDSA、SM2 算法是基于椭圆曲线离散对数问题,从数学基础原理上决定了比RSA算法更具安全性。
SM2 数字签名算法是我国自主研制的基于椭圆曲线公钥密码体系的商用密码算法。SM2算法的椭圆曲线系统参数定义为:E(FΡ)为有限素数域FΡ上满足y2=x3+ax+b,a,b∈FΡ且 (4a3+27b2)modp≠ 0的椭圆曲线,G=(xG,yG)是E(FΡ)G上阶为n的基点。算法的详细定义及签名验签计算过程可参考文献[1]。
在数字签名中,除了算法安全外,更重要的是密钥的存储安全,传统做法是将密钥存储于U盾中,存在丢失、被盗等风险,难以应用到移动终端上。在移动终端场景中更多是基于协同签名的方案。本文选取的是基于SM2的两方协同签名算法,假定协同签名参与方分别为A 和B,协同签名的形式化描述为:由参与方A、B 各自计算私钥分量dA、dB,并计算出各自公钥PA、PB,然后合成计算出协同公钥p,参与双方分别持有私钥,假定待签名消息为M,根据SM2 算法原理特性交互协同计算出协同签名值σ=(r,s),签名验签阶段与标准的SM数字签名验签过程一致。
2 系统设计与实现
2.1 系统架构
基于协同签名的电网移动GⅠS 签名系统的核心思路是将SM2密钥进行分布式构建,并通过分段存储、协同运算来完成签名验签、加密解密等密码服务,即移动端、服务端各自生成私钥分量,任何一端在任何时间均无完整的SM2密钥,须要根据协同协议进行联合计算才能获取到完整密钥,从而大大提升密钥管理的安全性。
整个系统包括移动端的电网移动GⅠS 和服务端的电网GⅠS 服务器、协同签名服务器以及安全网关等核心组成部分,总体架构如图1所示。
图1 总体架构图
充分考虑到电网应用系统的可靠性、安全性和可扩展性需求,在技术选型上,采用组件化、微服务化的分层架构,其中服务端的协同签名核心服务和移动端的安全密码模块采用C++语言进行实现。
2.1 核心模块设计与实现
基于协同签名的电网移动GⅠS 签名系统的核心功能在于协同算法实现和交互上,包括协同密钥、协同签名计算以及身份认证环节,故将核心模块划分为密钥生成模块、协同签名模块、身份认证模块。
2.2.1 密钥生成模块
协同密钥生成由移动端发起,安全密码模块随机生成私钥分量d1并计算出对应公钥p1,发送给服务端协同签名服务,服务端随机生成密钥分量d2,联合移动端公钥进行协同运算得出协同公钥p,然后利用协同公钥及终端用户信息为该移动端签发SM2数字证书。具体流程及伪代码如下图2所示。
图2 协同密钥生成流程图
2.2.2 协同签名模块
协同签名同样是移动端发起,移动端安全密码模块根据密钥分量计算对待签名消息M做Hash计算和部分签名运算,将部分签名和待签名信息及Hash值作为参数提交给服务端;服务端根据自身的密钥分量,联合移动端的部分签名进行复杂的协同运算得到另一部分签名信息;最后合成输出协同签名值,该签名值可利用协同公钥对协同签名值进行标准的SM2 验签。具体运算流程及伪代码如下图3 所示。
图3 协同签名生成流程图
2.2.3 身份认证模块
移动终端的身份认证模块依赖于密钥生成模块输出的协同公钥所签发的SM2数字证书,签发请求时绑定了移动终端的唯一标识、App 包名、用户手机号、企业组织信息等信息。移动客户端的用户激活、证书签发及变更须要通过短信进行验证并设置证书PⅠN 码,验证完成后客户端每次启动App 输入PⅠN 码进行校验,最后进行数字证书与终端、应用的匹配校验,具体交互流程及伪代码如图4所示。
图4 身份认证流程图
3 安全分析与应用案例
3.1 安全分析
本文实现的基于SM2算法的协同签名协议原理已经过形式化证明[1],从原理上可以保证协议的安全性。两方协同签名的密钥分量分别存储于移动端和服务端,其中服务端的私钥分量存储于配备PCⅠ-E加密卡的协同签名服务器中,由于加密卡特性服务端的私钥分量被窃取的可能性趋于零,移动端的私钥分量采用SQLite数据库进行加密存储,使得攻击者无法获得完整密钥,保证了密钥的安全性。
3.2 应用案例
本文所实现的签名方案可应用于各种移动终端的身份认证与签名验签等安全应用场景,旨在解决在移动互联网环境下的身份认证和安全传输等防护需求。
本文所实现的协同签名方案,在国网宁夏阳光业扩报装应用案例上,通过集成电网移动GⅠS SDK,实现基础地图、可视化、定位、检索、导航等基础功能,以及电网资源渲染、位置采集、拓扑分析、电源点分析等电网业务功能,取得非常好的应用效果(如图5所示),为业扩报装业务的配电网架可视化、电源接入点分析、供电方案编制等功能提供了安全技术保障,同时,也为各类移动作业类应用的快速构建提供了一个模版,提升应用开发效率。
图5 应用案例效果图
4 结束语
本文基于国产SM2算法和门限签名算法实现了一套协同签名系统方案,通过密钥分割、协同运算、签名验签等密码技术,实现移动互联网环境下的可信身份认证和网络安全传输的安全防护需求。以软件SDK组件形式广泛应用于各类专业移动作业应用场景,无需额外的安全介质,兼顾安全和用户体验,为移动应用提供一道安全可靠的防护锁。