APP下载

采用SGX的云端SM2两方协作签名算法

2022-12-28马莉媛

关键词:数字签名服务端私钥

马莉媛,黄 勃

(上海工程技术大学 电子电气工程学院,上海 201600)

0 引 言

随着移动设备的普及以及互联网的快速发展,信息安全成为日益重要的话题。密码技术作为解决信息安全问题的有效手段,被广泛应用于各种业务场景。为了满足应用对信息安全中消息完整性和真实性的基本需求,SM2椭圆曲线公钥密码算法应运而生。SM2密码算法作为我国公钥密码算法标准,包括了数字签名算法、密钥交换协议和公钥加密算法。SM2数字签名算法要求计算签名时需要完整的私钥信息,因此,私钥安全性是算法安全的基础。由于移动设备易丢失且安全防护等级较低,因此存储在这些设备中的私钥面临巨大的安全风险。

为了增强SM2数字签名算法的私钥安全性,研究人员提出了一些基于两方协作的SM2数字签名算法。基于SM2的协作签名算法将签名私钥拆分成2个部分,分别交由两方来保管,通过采用零知识证明、比特承诺、同态加密等密码学技术保证了只有合法的通信双方才能安全地协作产生完整的SM2签名,任何一方都不能单独恢复出完整的签名私钥[1]。文献[2]在2020年公开了一种SM2协作签名方案,需要通过2轮通信完成签名计算。文献[3]提出一种SM2协作签名协议,并通过零知识证明和比特承诺等技术,保证只有合法的协作双方能够完成协作签名计算。

目前提出的SM2协作签名应用中,服务端通常采用专用密码机等硬件,协助终端设备完成协作签名计算[4]。近年来,随着云计算技术快速发展,云服务逐渐成为各行各业依赖的基础设施。与传统的专用服务器部署方式相比,云服务具备按需部署、动态扩展、降低成本等优势。但SM2协作签名作为密码应用,它要求运行环境必须安全可信且能够保护密钥等机密性数据,进而保证密码算法的安全性。针对云服务中数据的安全性,云厂商们提出了各自的解决方案,如华为云通过《华为云隐私保护白皮书》[5]和《华为云数据安全白皮书》[6]中介绍的方法,构建了一个高安全等级的云服务。尽管云厂商使用一系列措施构建安全可靠的云服务,却仍无法达到密码应用所需的安全运行环境。

面对潜在的恶意云服务,密码应用需要通过其他技术,使它能够在不可信的云服务中构建安全可靠的运行环境,这一需求可以由软件保护扩展(software guard extension, SGX)技术实现[7-8]。文献[9]提出使用SGX技术解决密钥管理服务(key management service ,KMS)中主密钥在可信部署和使用中的问题,提高了KMS主密钥的安全性。文献[10]为了解决联盟链审计需求与用户隐私信息保护之间的矛盾,提出一种使用SGX技术的可追溯匿名方案。文献[11]提出一种基于SGX技术保护Ansible自动化运维工具配置信息的方案,提高工具的安全性。文献[12]设计了一种基于离散对数问题的有序多重数字签名方案,将该方案用于文件的多个用户顺序签名。文献[13]针对污染和重放攻击提出一个新的多源网络编码签名算法,利用同态加密算法构造签名方案来抵御污染攻击,通过引入消息代的序号,防止代间的重放攻击,并且采用线性计算方法来减少节点的验证时间,降低了对节点计算能力的要求,特别适合于无线传感器网络或自组织网络。文献[14]提出将签名私钥拆分成2个部分,通过零知识证明等密码学技术保证只有合法的通信才能安全地协作产生完整的SM2签名,且交互次数少、协作签名效率高。文献[15]提出一种基于SM2的双方共同签名协议,适用于单个服务节点服务大量客户端的场景,如5G环境下的物联网场景。文献[16]提出一种基于密钥分割和国家标准SM2签名算法的可信第三方证明签名方案,来提高数字签名密钥保存安全性和签名效率问题。

本文的目标是提出一种更高效的SM2协作签名算法,并基于SGX技术提出将该算法与云服务结合的应用部署方案。

1 基于SGX的云端SM2两方协作签名算法

1.1 SM2密码算法[17]

SM2是一种基于椭圆曲线的非对称国产密码算法。通过该算法,签名方使用私钥完成签名计算,验签方使用对应的公钥验证签名的正确性。

1.1.1 公开参数

在使用SM2进行签名和验签之前,参与计算的各方需要设定相同的公开参数。其中包括a、b、n、q、E和G。其中q是有限域Fq的规模,即有限域Fq中元素的数目;a、b是有限域Fq中的2个元素;E表示由a和b定义在有限域Fq上的一条椭圆曲线;G=(xG,yG)是椭圆曲线E的基点;n为基点G的阶。

1.1.2 密钥生成

随机生成私钥dA,且dA∈[1,q-1];

计算公钥PA=dAG。

1.1.3 签名计算

设待签名消息为M,根据以下步骤对M完成签名计算。

1)计算M的摘要值e=Hash(M);

2)从随机数生成器获取随机数k,且k∈[1,n-1];

3)计算R=(x1,y1)=k×G;

4)计算r=(e+x1)modn,r≠0且r+k≠n;

5)计算s=(1+dA)-1(k-rd)modn;

6)获得消息M的签名结果(r,s)。

1.1.4 签名验证

验签方根据收到的消息M′和签名结果(r′,s′),按照以下步骤进行验签计算。

1)计算消息M′的摘要值e′=Hash(M′);

2)计算t=(r′+s′)modn,若t=0,则验签不通过;

1.2 安全性定义

本文基于游戏的2PC(secure two-party computation)安全证明模型[18],针对协作签名算法设计安全性证明框架,并通过密钥生成预言机和签名预言机证明算法的安全性。

定义1给定一个数字签名算法π,如果概率多项式时间敌手Adv在已知安全参数κ的情况下,以签名消息对(M,σ)为输入,在经过多项式次训练后,存在一个可以忽略的概率ε伪造一个有效且新的签名消息对(M*,σ*),那么该签名算法是可证明安全的,即

Pr[SignAdv,π(1κ)=1]≤ε

(1)

定义2给定一个协作签名算法∏,该算法是数字签名算法π通过变换得到的,如果概率多项式时间敌手在至多腐化一个参与方b(b∈{C,S})的情况下,按照协议流程与诚实参与方完成多项式次交互后,存在一个可以忽略的概率ε伪造一个有效且新的签名消息对(M*,σ*),那么该协作签名算法是可证明安全的,即

(2)

1.3 SGX技术

Intel在酷睿六代处理器中首次引入SGX技术。在SGX的威胁模型中,仅当前应用是可信的,其他包括运行在高特权级的应用均不可信。应用程序可以使用SGX扩展指令,创建受保护的私有内存区域,该私有内存区域仅允许应用自身访问,其他应用无法访问,以此保护应用数据的安全性[19]。针对应用数据静态存储时的安全性保护,SGX提供了封装和解封指令。封装指令用于将私有内存中需要持久化存储的应用数据加密,并将密文结果保存在本地。当应用再次使用该数据时,需要通过解封指令重新得到数据的明文信息。

1.4 协作密钥生成

SM2协作密钥生成算法由客户端C与服务端S按照以下流程共同完成。

1)C向S发送Hello请求,开始协作密钥生成流程;

2)S随机生成d2∈[1,q-1],并计算P2=d2×G,将P2发送给C;

3)C随机生成d1∈[1,q-1],并计算P1=d1×G;然后计算公钥PA=d1×P2+P1+P2;

4)协作签名算法允许使用一次协作密钥生成的结果,完成多次协作签名计算,因此C和S分别保存(d1,P2,PA)和d2。

1.5 协作签名生成

设待签名消息为M,参与协作签名生成算法的双方为客户端C和服务端S,签名生成过程如图1所示。

图1 协作签名生成过程图Fig.1 Collaborative signature generation flow diagram

双方完成协作签名具体过程说明如下

1)C计算待签名消息M的摘要值e=Hash(M),然后随机生成k1,计算Q1=k1×(G+P2),并将e和Q1发送给S;

2)S随机生成k2,并计算(x1,y1)=k2×G+Q1,然后计算r=(e+x1)modn,s2=(1+d2)-1(k2+s2-rd1)modn,并将r和s2发送给C;

3)C计算s=(1+d1)-1(k1+s2-rd1)modn,得到签名结果(r,s)。

1.6 算法正确性分析

根据协作密钥生成算法,公钥PA为

PA=d1×P2+P1+P2

(3)

C和S分别随机产生的子私钥d1、d2和私钥dA满足关系

dA=d1+d2+d1d2

(4)

根据协作签名生成算法,点(x1,y1)为

(x1,y1)=k1G+k1d2G+k2G

(5)

C和S分别产生的随机数k1、k2和k,满足关系

k=k1+k2+k1d2

(6)

SM2签名计算公式可以进行如下变换

(x1,y1)=kG=k1G+k1d2G+k2G

r=(e+x1)modn

s=(1+d1+d2+d1d2)-1

(k1+k2+k1k2-rd1-rd2-rd1d2)=

(1+d1)-1[k1+(1+d2)-1(k2-rd2)-rd1]=

(1+d1)-1[k1+s2-rd1]

(7)

上述变换过程验证了本文提出的SM2协作签名算法的正确性。

2 实验设计

目前已有的协作签名应用,通常使用专用密码机等硬件部署于服务端。基于SM2协作签名算法,本文设计一种与云计算技术结合的应用部署方案。为了能够在云服务中部署SM2协作签名应用的服务端,本方案使用SGX技术在不可信的云服务中构建可信执行环境,并在可信环境中运行与服务端密码计算相关的程序,以此保护机密数据不被云服务中的恶意攻击窃取或破坏。这些恶意攻击包括恶意的操作系统直接访问应用内存数据、管理员物理方式读取数据等。由客户端对服务端进行远程鉴别,使得客户端能够确定服务端身份,服务端密码计算部分由SGX平台保护。同时,在远程鉴别过程中,基于SM2和SM4密码算法进行安全逻辑信道建立,最终客户端和服务端会共享一份SM4密钥,该密钥可以用来保护后续协作签名过程中的通信数据。本文假设客户端为可信设备,由数据所有者持有,因此客户端数据保护不在本文讨论范围内。基于SGX云端SM2协作签名框架如图2所示。图2中,虚线标明的是本应用需要实现的模块。整个协作签名主要由3部分组成,说明如下。

图2 基于SGX云端SM2协作签名应用框架图Fig.2 SM2 collaboration signature system frame diagram based on SGX in cloud

1)客户端。客户端通过访问部署在云中的服务端,完成远程鉴别、安全信道建立、协作签名初始化和协作签名计算,并将需要存储的数据通过存储模块以文件或数据库等方式保存在本地。其中远程鉴别模块完成对服务端的远程鉴别,协作签名模块完成协作签名相关计算,安全信道模块基于SM2、SM4密码算法提供安全通信的功能,网络模块提供与服务端网络通信功能。

2)服务端不可信部分(简称为不可信部分)。不可信部分完成所有除密码计算之外的服务端工作,如接收和发送网络数据、数据持久化存储等。其中Ocall接口模块中定义了可信部分依赖的外部函数,本应用中可信部分需要依赖不可信部分提供的存储功能。

3)服务端可信部分(简称为可信部分)。可信部分完成所有密码计算相关的工作,如密钥生成、协作签名计算、数据封装等。其中协作签名模块是可信部分的核心模块,该模块实现了SM2协作签名算法;远程鉴别模块用来生成提供给客户端的身份报告quote,客户端可以通过quote鉴别服务端身份;安全信道模块提供与客户端的安全通信功能;Ecall接口模块中定义了可信部分提供给外部的入口函数,不可信部分只能通过定义的接口进入可信部分,完成相应的操作,并在操作完成后回到不可信部分。

由于服务端可信部分运行在SGX构建的可信环境中,所以云服务中包括操作系统在内的其他应用,均无法直接访问可信部分的任何信息,进而保护了可信部分中应用数据的机密性和完整性。

3 测试与分析

本节针对基于SGX云端SM2协作签名方案进行测试评估,测试对象为服务端,包括功能和性能测试,以及安全性分析。

3.1 功能测试

功能测试使用SM2协作签名应用客户端导出的公钥,验证协作签名结果(r,s),以此判断方案的正确性。

为了完成功能测试,需要实现标准SM2数字签名算法,并按照文献[11]提供的示例数据,测试该算法签名和验证功能的正确性,然后将标准SM2数字签名算法中的公共参数设置为SM2协作签名算法中的参数值,执行SM2协作签名计算。标准SM2数字签名算法使用客户端导出公钥,对协作签名结果进行验证,若验证通过,则本方案功能正确,否则错误。本方案针对功能正确性测试了1 000次,验证签名通过1 000次,不通过0次,通过率为100%,表明本方案能够计算得到正确的SM2数字签名结果。

3.2 性能测试

SM2协作签名的服务端利用SGX技术在不可信的云服务中创建可信运行环境,进而保护了应用数据的安全性,但也因此引入了额外的性能开销。为了能够得到性能损耗情况,首先实现一个标准的SM2协作签名算法,该算法流程尽量与本方案保持一致,减小实验误差,然后在相同的环境中,分别运行2个程序若干次,统计程序的运行时间,通过比较得到本方案的性能开销。本文方案测试结果如图3所示,横坐标表示运行的次数,纵坐标表示运行的时间,实线为基于SGX云端SM2协作签名程序后,执行时间,虚线为标准的SM2协作签名程序执行时间。通过测试发现,引入SGX的SM2协作签名程序执行时间大约增加了15%—25%,相较于应用安全性的显著提高,该性能开销在可接受的范围。

图3 性能测试结果Fig.3 Performance test results

3.3 安全性分析

本文假设云服务是恶意的,它可以直接访问系统中任意设备中的应用数据。同时,假设Intel SGX是安全的,无法通过软件或硬件的方式被破坏。

基于SGX的SM2协作签名服务端由不可信和可信2部分组成。不可信部分的程序和数据位于普通内存中,用于完成网络、文件操作等处理,所有数据均为非机密数据,直接暴露在恶意云服务中对应用不会产生安全威胁;可信部分位于使用SGX扩展指令创建的安全内存中,用于处理所有涉及机密数据的密码计算,恶意云服务无法直接访问这块内存空间,故程序运行时的数据安全性得以保证。应用中部分机密数据需要持久化存储在云服务中,所有机密数据在从可信部分传递至不可信部分前,都需要执行SGX提供的封装操作。对于封装数据只有在可信部分执行SGX解封操作,才能恢复出原始数据,恶意云服务无法通过读取静态存储设备获得机密数据,因此保护了应用静态数据的安全性。

以上分析表明,基于SGX云端SM2协作签名方案可以有效避免应用数据遭到恶意云服务的窃取和破坏,密码应用安全性得到增强。

4 结束语

本文基于SGX技术,提出了一种将SM2协作签名算法与云计算结合的应用实施方案,有效地解决了密码应用部署在不可信云服务中面临的数据安全问题。测试和分析表明,本方案在性能开销可接受的范围内,增强了应用数据在云服务中动态运行和静态存储时的安全性,为密码应用迁移上云提出了一个安全有效的解决方案。

猜你喜欢

数字签名服务端私钥
清扫机器人避障系统区块链私钥分片存储方法
比特币的安全性到底有多高
Spatially defined single-cell transcriptional profiling characterizes diverse chondrocyte subtypes and nucleus pulposus progenitors in human intervertebral discs
交通运输行业数字签名系统的设计与实现分析
浅析计算机安全防护中数字签名技术的应用
数字签名技术在计算机安全防护中的应用
一种基于虚拟私钥的OpenSSL与CSP交互方案
新时期《移动Web服务端开发》课程教学改革的研究
掌握方法用好数字签名
摸清黑客套路防范木马侵入