一种基于安全多方计算的密钥安全管理方法与流程

文档序号:19835688发布日期:2020-02-04 12:59阅读:332来源:国知局
一种基于安全多方计算的密钥安全管理方法与流程

本发明涉及信息安全领域,尤其涉及一种基于安全多方计算的密钥管理方法。



背景技术:

密钥破解技术常用有效手段为侧信道攻击和代码反编译:侧信道攻击是针对加密电子设备在运行过程中的时间消耗、功率消耗或电磁辐射之类的侧信道信息泄露而对加密设备进行攻击的方法,有效性远高于密码分析的数学方法,比较适合功能单一的单子设备,比如上述的可信硬件、tee。代码反编译是通过对他人软件的目标程序(比如可执行程序)进行“逆向分析、研究”工作,以推导出他人的软件产品所使用的思路、原理、结构、算法、处理过程、运行方法等设计要素,某些特定情况下可能推导出源代码,如果密钥管理方式为软件管理,组成密钥的参数和处理过程都在程序内部实现,则反编译大概率能从目标程序萃取出密钥。

传统的密钥管理方案都是将密钥存储在用户本地,对密钥的保护措施包括:(1)将密钥存储在可信硬件上;(2)软件管理密钥,通过代码混淆、密钥碎片化存储等技术保护密钥;(3)存储在可信执行环境(tee),即在inte芯片的sgx或arm芯片的trustzone上部署一套可信执行环境运行加密算法和存储密钥,加密与业务隔离。

上述密钥管理技术存在以下缺陷:

(1)可信硬件安全性高,但缺乏可扩展性、灵活性、不能自动部署、不抗侧信道攻击、升级困难;

(2)软件安全管理密钥易于扩展、升级方便、扩展性好,但易被反编译萃取出密钥,安全程度低;

(3)可信执行环境与业务环境并行运行在本地,两者间会传输数据,易受软件侧信道攻击,且受硬件限制,只有指定型号芯片才能实施。

因此,传统密钥管理方案在易用性和安全性方面不能兼顾。



技术实现要素:

本发明所要解决的技术问题是:提出一种基于安全多方计算的密钥管理方法,解决传统密钥管理方案在易用性和安全性方面不能兼顾的问题。

本发明解决上述技术问题采用的技术方案是:

一种基于安全多方计算的密钥管理方法,包括以下步骤:

步骤一、部署由多台安全多方计算节点组成的安全多方计算系统;

步骤二、密钥管理方生成一批计算函数,将这些函数编译成机器语言,向多方计算系统中的任一节点提交算法增加请求;

步骤三、收到算法增加请求的节点为新增的算法分配算法编号并返回给密钥管理方,同时分发新增的算法,各节点记录分发信息;

步骤四、密钥管理方存储多方计算系统返回的算法编号,随机生成并存储一组算法编号-参数序列;

步骤五、密钥管理方将生成的算法编号-参数序列作为计算任务,随机生成并存储一组非对称算法公私钥对,向多方计算系统的任一节点发起计算请求;

步骤六、计算请求响应节点对计算任务分解成多个单独计算任务,并对每个单独计算任务匹配合适的任务执行节点和备份执行节点,然后将各个单独计算任务分发至对应任务执行节点;

步骤七、任务执行节点收到任务后调用对应算法执行计算任务,将计算结果采用密钥管理方的公钥加密后反馈至计算请求响应节点;

步骤八、计算请求响应节点搜集各执行节点计算结果,搜集完成后封装计算结果反馈至密钥管理方;

步骤九、密钥管理方解密多方计算系统返回的计算结果作为密钥因子,基于密钥因子通过密钥生成算法生成密钥,将该密钥作为主密钥对业务系统的共享初始密钥进行加密,得到业务系统对应的密文共享初始密钥并存储;

步骤十、密钥管理方根据业务需求将加密算法、密钥多方计算生成流程、密文共享初始密钥、多方计算节点信息、密钥管理接口、算法编号-参数列表以及数据加解密接口封装成sdk包提交给业务系统;

步骤十一、业务系统将sdk包嵌入应用程序,在进行具体业务时,调用sdk包加解密接口对业务数据进行加、解密;

步骤十二、密钥更新时,业务系统根据密钥管理方提供的密钥更新信息,调用sdk包密钥管理接口,根据情况更改已存储的密钥信息。

作为进一步优化,步骤一中,所述多台安全多方计算节点可同时部署于云服务器、外网服务器和内网服务器。

作为进一步优化,步骤一中,各个安全多方计算节点架构一致,均包括:计算请求处理模块、计算任务处理模块和算法更改处理模块;

所述计算请求处理模块用于对用户发起的计算请求进行校验、分解用户提交的计算任务、管理系统多方计算节点信息、计算任务匹配、计算任务分发、计算结果搜集、计算结果校验和将计算结果打包返回至用户;

所述计算任务处理模块用于对收到的计算任务进行校验、对计算任务进行解析、根据计算任务中算法编号选择要调用的算法、将任务中参数带入算法运算得到计算结果、利用用户公钥将计算结果加密、将本节点身份信息、任务内容、任务编号和消息校验数据封装后返回给任务发起节点;

所述算法更改处理模块用于对算法更改请求方进行身份认证、对请求方身份广播、对请求方权限投票以及对算法更改进行决策、执行。

作为进一步优化,步骤五中,所述计算请求的请求内容包括生成的公钥、算法编号-参数序列、用户身份信息和信息完整性校验参数。

作为进一步优化,步骤八中,若计算请求响应节点在规定时间未收到某任务执行节点反馈的任务计算结果,则启用对应备份执行节点重新执行该计算任务。

作为进一步优化,各个安全多方计算节点中均存储有具备算法更改权限的用户列表,某个节点收到算法更改请求后作为算法更改请求响应节点,将算法更改请求广播至所有节点,各个节点根据所述用户列表断该用户是否具备算法更改权限,并将对算法更改权限的判断结果返回给算法更改请求响应节点,算法更改请求响应节点收到超过总节点数2/3以上肯定结果则认可此次算法更改请求,通知对应节点执行算法更改操作:当算法更改请求为增加算法时,用户响应节点将要增加的算法分配符合规则的编号,将算法编号、算法内容随机分发给两个以上节点,并将分发情况进行广播;当算法更改请求为删除算法时,则存储该算法的节点删除对应算法;当算法更改请求为更换算法时,则存储该算法的节点对算法执行更换操作。

作为进一步优化,步骤一中,所述安全多方计算系统中的各个计算节点提供用于实现交互的网络接口,所述网络接口包括:

计算请求接口:用户通过访问该接口提交计算任务和校验信息;节点收到请求后校验请求信息,分解计算任务,任务分配完成后返回给用户计算请求编号和计算任务执行中标识,若不能分配任务则返回请求失败标识;

计算任务状态查询接口:用户通过收到的计算请求编号查询计算任务执行状态,任务执行状态包括执行中、执行失败、执行完成,若处于执行完成状态,则向用户返回计算结果;

计算任务分配请求接口:响应用户请求的节点调用其它节点的该接口,用于分配单个计算任务;

计算结果返回接口:执行计算任务的节点调用计算请求响应节点的该接口,用于返回计算结果,计算结果内容包括计算任务编号、密文结果、校验信息;

算法文件增加接口:密钥管理方或安全多方计算系统管理方调用此接口,用于向多方计算系统中的节点增加算法文件;

算法文件删除接口:密钥管理方或安全多方计算系统管理方调用此接口,用于删除多方计算系统中的节点存储的已有算法文件;

用户权限鉴定请求发起接口:收到算法更改请求的节点调用其它所有节点该接口,更改请求内容包括用户信息、算法文件操作内容、鉴定请求编号、校验信息;

算法更改日志查询接口:安全多方计算系统管理方调用此接口,用于检查算法分配是否合规;

用户权限鉴定结果返回接口:每个节点权限鉴定完毕后调用其它所有节点的该接口,反馈自身鉴定结果。

本发明的有益效果是:

用主密钥对加密业务用密钥进行加密,用户本地存储密文密钥,运行加密业务时用主密钥解密密文密钥。主密钥由密钥因子计算得到,密钥因子通过多方计算系统得到。安全多方计算系统执行计算任务时各节点将计算结果加密,加密后内容仅用户自身能识别,执行计算任务的节点不能理解用户计算结果意义,用户请求节点不能识别汇总的计算结果内容,用户不知道每个算法内容,可以在各方互不信任情况下不泄露彼此关键信息。因此,本发明的方案在保证密钥安全性的基础上同时具备高易用性。

附图说明

图1为本发明的用户密钥管理模式示意图;

图2为多方计算系统结构示意图;

图3为本发明中的密钥生成流程图。

具体实施方式

本发明旨在提出一种基于安全多方计算的密钥管理方法,解决传统密钥管理方案在易用性和安全性方面不能兼顾的问题。

若密钥管理从硬件上入手改进,则总是存在硬件依赖性,很难达到高易用性,因此需要考虑软件方面改进密钥管理方案。软件管理密钥主要缺陷是生成密钥的参数和过程都在程序内部实现,只要做到密钥因子生成过程不在本地实现且保证数据传输安全(密钥不被本身外的第三方知悉),即可使攻击方无法通过反编译手段从用户本地得到密钥,有效提高软件管理密钥的安全性,且具备软件管理密钥的高易用性,而安全多方计算协议可以有效做到构造密钥的参数远程生成,且从理论上保证了不安全环境信息的安全传输,因此本发明基于安全多方计算协议实现。

安全多方计算(mpc)协议是一种分布式协议,允许各参与方在不泄露自身隐私信息的前提下,通过既定逻辑共同计算出一个结果,该协议可以做到远程协同生成密钥,同时能做到密钥(隐私信息)只有自身知晓,因此可以解决软件管理密钥的主要不安全因素。mpc在管理密钥场景中,对于业务系统来说,其隐私信息是密钥因子,对与其它多方计算参与方来说,其隐私信息是计算过程。因此本发明以保证业务系统密钥因子不被其它计算参与方知悉、其它计算参与方的计算过程不被业务系统知悉为前提。

mpc一次计算交互生成一个计算结果,若要得到多个计算结果则需要多次计算交互。而业务系统可能用到多种加密算法,一个加密算法至少有一个密钥,如果所有密钥构造参数均由多方安全计算得出,则在效率上会有所影响。因此本发明为尽量减少多方计算交互次数,将业务系统密钥分成了三类:主密钥、明文密钥、密文密钥,其中明文密钥是业务系统执行加解密操作时用到的密钥,无加密业务时不在系统(缓存、程序文件)中出现;密文密钥存储在业务系统,用于被解密转换成明文密钥;主密钥用于明文密钥和密文密钥之间转换。从三类密钥关系可知,只要保护好主密钥,即可保证业务密钥的安全,因此只需主密钥通过安全多方计算即可。

在此基础上,本发明设计了一种任务处理模式,计算发起方一次可以提出多个计算任务,经过中间处理,将计算内容拆解成多个单独计算任务,从而达到一次交互得到所有密钥因子的效果,提高了计算效率。由于中间处理方知悉所有计算任务,如果中间执行所有计算任务的话便可知悉所有计算结果,因此流程上中间处理方不参与计算任务执行,同时为避免中间处理方处理所有计算任务而不被计算发起方知悉情况,应协同计算任务设计和计算执行单元(算法文件)分布,单个计算参与方无法完成所有计算任务,此项工作由密钥管理方(计算请求、算法文件设计方)和mpc管理方协同完成。密钥管理方设计的计算请求应包含所有针对计算请求设计的算法文件,算法文件提交到mpc后会随机将每个算法文件分配到两个计算节点,mpc管理方通过日志检查、每个节点算法库内容检查确保所有算法文件没有被同时分配到一个节点上。

为使密钥不被计算发起方之外第三方知晓,所有计算任务执行方需将计算结果通过计算发起方的公钥加密,使得单个计算任务结果只被计算执行方和计算发起方知晓,而计算执行方只知晓所有计算结果中一部分结果,不能理解这部分计算结果意义(通过结果得到用户主密钥)。计算发起方的计算任务除了得到所有密钥因子外,还需随机增加一些得到无关参数的计算任务,这样即使被其它方知晓所有计算结果也难以提取出正确的密钥因子。

如图1所示,本发明中的主密钥由多方计算系统得到,主密钥控制加密算法需要用到的密钥明文、密文状态转换。用户无加密业务时,主密钥处于不可知状态,业务密钥处于密文状态;有加密业务时通过多方计算系统得到主密钥计算因子,将密钥因子带入密钥生成算法得到主密钥。

在具体实现上,本发明中的基于安全多方计算的密钥管理方法包括以下步骤:

(1)部署安全多方计算系统:

部署多台安全多方计算节点,在计算请求响应节点不执行计算任务的情况下防止单个节点执行所有计算任务,从而知晓完整计算结果,因此安全多方计算节点不少于3个。各节点通过网络通信,相互调用对应接口协作完成用户发起的计算请求,组成安全多方计算系统。

如图2所示,若干(不少于3个)多方计算节点通过网络通信,每个节点架构一致,均能执行计算请求响应、计算任务执行、算法更改请求响应。单个节点存储了系统节点信息,存储了若干可执行的机器语言算法,每个算法均有编号,且相同的算法编号一样,每个算法至少存储在两个节点中。

(2)密钥管理方生成一批计算函数,将这些函数编译成机器语言,向多方计算系统任一节点提交算法增加请求;

(3)收到算法增加请求的节点为新提交的算法分配算法编号并返回给密钥管理方,同时分发算法,广播分发信息,各节点记录分发信息;

(4)密钥管理方存储多方计算系统返回的算法编号,随机生成、存储一组算法编号-参数序列;

(5)密钥管理方发起计算任务,通过多方计算系统获取密钥因子,然后依据密钥因子生成密钥:

具体如图3所示,密钥管理方将生成的算法编号-参数序列作为计算任务,随机生成并存储一组非对称算法公私钥对,向多方计算系统任一节点发起计算请求,请求内容包括计算任务、临时公钥、校验数据等。收到请求的节点对信息完整性校验,校验通过后解析计算任务,将计算任务拆解成多个单独计算任务,根据存储的多方计算存储节点信息,对每个计算任务匹配合适的任务执行节点和备份执行节点。匹配好任务后将各任务分发至对应执行节点,执行节点收到任务后调用对应计算文件执行计算任务,将计算结果用请求用户公钥加密,返回至计算请求响应节点。计算请求响应节点搜集各执行节点计算结果,搜集完成后封装计算结果返回至密钥管理方。密钥管理方解密多方计算系统返回的计算结果作为密钥因子,引入密钥生成算法得到一个密钥,将该密钥作为主密钥对业务系统共享初始密钥加密,得到密文共享初始密钥,存储密文共享初始密钥;

(6)密钥管理方根据业务需求将加密算法、密钥多方计算生成流程、密文密钥、多方计算节点信息、密钥管理接口、算法编号-参数序列、数据加解密接口封装成sdk包。

(7)密钥管理方将封装好的sdk包、sdk包使用文档、用例提供给业务系统。

(8)业务系统将sdk包嵌入应用程序,调用sdk包加解密接口对业务数据进行加、解密,业务加解密前先加密初始化,加密初始化时sdk包内置程序会根据存储的算法编号-参数序列向安全多方计算系统发起计算请求得到还原主密钥的密钥因子,将密钥因子带入密钥生成函数得到主密钥,利用主密钥将存储的密文密钥还原成明文密钥供加解密用。

(9)密钥更新时,业务系统根据密钥管理方提供的密钥更新信息,调用sdk包密钥管理接口,根据情况更改已存储的密钥信息,包括算法编号-参数序列、密文密钥。

上述步骤(1)中多方计算节点可同时部署于云服务器、外网服务器、内网服务器,以达到各节点间物理隔离效果。

上述步骤(1)中,多方计算节点主要包含三个模块:用户计算请求处理模块、计算任务处理模块、算法更改处理模块。各模块主要功能如下:

①用户计算请求处理模块:对用户发起的计算请求进行校验、分解用户提交的计算任务、管理系统多方计算节点信息、计算任务匹配、计算任务分发、计算结果搜集、计算结果校验、计算结果打包返回至用户。

a.用户计算请求校验用于判断请求内容是否有更改,常采用hash散列签名校验方式,可对请求内容特定字段及约定的其他不在信道传输的参数(时间戳、共享字符串等)进行hash散列签名校验,请求方和接收方签名一致则通过校验,以下内容校验均为此方式;

b.用户计算请求为一个算法编号-参数序列,每个算法编号-参数即为一个独立计算任务,如(a1112:23)表示编号为执行算法编号为a1112,算法参数为23的计算任务,响应用户请求的多方计算节点将算法编号-参数序列拆分为一个个单独计算任务;

c.多方计算系统节点信息包括组成系统的各个节点的mac值、搭载的算法编号列表、mac值、证书、ip地址、设备名称等;

d.计算任务匹配是节点对通过对比系统其它节点搭载的算法与计算任务相比较,计算出每个计算任务的执行节点,并设置一个备用节点和结果返回时间阈值;

e.计算任务分发是节点为匹配好计算任务分配任务编号,将任务发送至对应节点执行,发送任务的报文可用目标节点公钥进行加密,同时包含节点的身份、计算请求用户公钥、消息校验数据、任务编号等;

f.计算结果校验是节点收到计算任务执行节点返回结果后,对节点身份和报文内容进行校验,同时判断返回时间是否在设定阈值内,若校验通过则判定此项计算任务合格,若校验不通过则将计算任务发送至备用节点,由备用节点重新执行此任务。在此基础上可增加节点信任管理,执行计算任务合格的节点增加信任权值,不合格则降低信任权值,任务分配时优先考虑信任权值高的节点;

g.计算结果打包返回是将搜集好的计算结果按顺序整理封装、生成校验信息返回给用户。

②计算任务处理模块:对收到的计算任务进行校验、对计算任务进行解析、根据计算任务中算法编号选择要调用的算法、将任务中参数带入算法运算得到计算结果、利用用户公钥将计算结果加密、将本节点身份信息、任务内容、任务编号、消息校验数据等封装返回给任务发起节点。

③算法更改处理模块:请求方身份认证、请求方身份广播、请求方权限投票、算法更改决策、执行。

a.请求方身份认证:能进行操作的用户只能是密钥管理方或系统管理员等特权用户,多方计算系统每个节点均存有特权用户信息、证书,节点收到用户算法更改请求后首先通过自身存储的特权用户信息判断请求方用户是否有权限,若有则执行后续操作;

b.请求方身份广播:节点判断请求用户权限合规后将请求方身份信息、算法更改内容广播至系统每个节点;

c.请求方权限投票:各节点通过各自存储的特权用户信息判断请求方是否有权限进行对应算法更改操作,并将结果返回给多方计算系统其它节点;

d.若超过2/3以上节点认可请求方权限,则执行此次算法更改请求。算法更改为增加算法时,用户响应节点将要增加的算法分配符合规则的编号,将算法编号、算法内容(机器语言)随机分发给两个以上节点,并将分发情况广播。算法更改为删除时,存储该算法的节点删除对应算法。系统各节点更新自身维护的系统节点信息中算法相关部分。

上述步骤(1)中将用户请求响应节点作为计算管理节点,将一次计算请求拆解成多个计算任务,由多个节点并发执行,提高了计算效率。计算节点利用请求用户公钥加密计算结果,保证了单个计算结果只有计算发起方(用户)和计算执行方(计算执行节点)知晓,系统其它节点不知晓计算结果的不经意传输原则。同时用户只有算法编号而无算法内容,且不知道算法在多方计算系统哪个节点,计算执行节点只知道部分计算内容,不知道用户所有计算请求内容和计算结果,从而保证安全性。

上述步骤(1)中各多方计算节点包含的网络请求接口主要包括:

计算请求接口:用户通过访问该接口提交计算任务和校验信息;节点收到请求后校验请求信息,分解计算任务,任务分配完成后返回给用户计算请求编号和计算任务执行中标识,若不能分配任务则返回请求失败标识;

计算任务状态查询接口:用户通过收到的计算请求编号查询计算任务执行状态,任务执行状态包括执行中、执行失败、执行完成,若处于执行完成状态,则向用户返回计算结果;

计算任务分配请求接口:响应用户请求的节点调用其它节点的该接口,用于分配单个计算任务;

计算结果返回接口:执行计算任务的节点调用计算请求响应节点的该接口,用于返回计算结果,计算结果内容包括计算任务编号、密文结果、校验信息;

算法文件增加接口:密钥管理方或安全多方计算系统管理方调用此接口,用于向多方计算系统中的节点增加算法文件;

算法文件删除接口:密钥管理方或安全多方计算系统管理方调用此接口,用于删除多方计算系统中的节点存储的已有算法文件;

用户权限鉴定请求发起接口:收到算法更改请求的节点调用其它所有节点该接口,更改请求内容包括用户信息、算法文件操作内容、鉴定请求编号、校验信息;

算法更改日志查询接口:安全多方计算系统管理方调用此接口,用于检查算法分配是否合规;

用户权限鉴定结果返回接口:每个节点权限鉴定完毕后调用其它所有节点的该接口,反馈自身鉴定结果。

实施例:

(1)在云服务器a、外网服务器b、c、d部署多方计算系统,各服务器作为多方计算节点(以下简称节点a、b、c、d);

(2)将节点a、b、c、d的mac地址、ip地址、域名、身份签名等信息存储至各多方计算系统节点、密钥管理方;

(3)将密钥管理方、多方系统管理员作为特权用户,将其身份id存入各节点;

(4)密钥管理方制作一系列计算函数:y1=f1(x),y1=f1(x)...yn=fn(x);

(5)密钥管理方将计算函数编译成机器语言,将编译结果保存至文件file1、file2...filen,随机选择多方计算节点,此处以节点a为例,调用节点a的算法增加接口,上传文件file1、file2...filen;

(6)节点a校验收到算法增加请求后,校验密钥管理方身份和内容完整性,校验通过后将密钥管理方身份传递给节点b、c、d,节点b、c、d校验收到的身份信息是否具备权限,并将校验结果传给其它节点;

(7)节点b、c、d均认同密钥管理方具备算法增加权限,算法增加操作继续执行,节点a为算法文件file1、file2...filen分布编号m0001、m0002...m000n,每个算法文件及编号随机发放至节点a、b、c、d中3个,收到算法文件的节点存储算法及编号以备调用;

(8)节点a将算法文件编号发放情况广播给节点b、c、d,节点a、b、c、d更新各自存储的节点-算法信息。

(9)节点a将算法编号返回至密钥管理方;

(10)密钥管理方根据算法编号生成一组算法编号-参数序列l1:{m0001:42,m0001:4...m000n:22};

(11)密钥管理方随机选择一节点,以节点b为例,将l1发送至节点b作为计算请求;

(12)节点b处理计算请求,将算法请求分解成计算任务t1,t2...tn,将任务分发给符合要求的节点;

(13)收到任务节点处理收到的计算任务,选择匹配的算法,将参数带入算法文件执行计算任务,用任务中的公钥加密计算结果得到密文结果rn,将rn返回给节点b;

(14)节点b搜集、校验计算执行节点计算结果,结果搜集完后将计算结果按顺序打包成:{r1,r2...rn},返回给密钥管理方;

(15)密钥管理方利用自身私钥解密计算结果,得到一组密钥因子:{r1,r2...rn},将密钥因子带入密钥生成函数y=f(r1,r2...rn),得到主密钥key,将key带入加密算法将业务系统共享初始密钥key1,key2...keyn分别加密成dkey1,dkey2...dkeyn;

(16)密钥管理方将加密算法接口(aes、des、rsa、tea等)、密文密钥(dkey1,dkey2...dkeyn)、算法编号-参数序列({m0001:42,m0001:4...m000n:22})、多方计算节点信息(a、b、c、d)封装成sdk包,将sdk包提交给业务系统;

(17)业务系统将sdk包嵌入到业务程序。

(18)业务系统调用sdk包加解密初始化接口时sdk包内部执行多方计算请求流程。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1