一种数据处理方法和系统与流程

文档序号:20346259发布日期:2020-04-10 22:38阅读:95来源:国知局
一种数据处理方法和系统与流程

本申请涉及计算机技术领域,特别涉及一种数据处理方法和系统。



背景技术:

为了提高通信过程中数据的安全性,通常由数据发送方利用密钥对明文数据进行加密后传输,再由数据接收方利用密钥对加密后的密文进行解密得到原始的明文数据。在不知道密钥的情况下,第三方难以仅通过密文获取其对应的明文数据。因此,密钥的安全保护就尤为重要。

基于此,希望可以提供一种数据处理方法和系统,以降低第三方获取密钥的概率。



技术实现要素:

本申请实施例之一提供一种数据处理方法。所述数据包括第一明文或密文,所述方法包括:获取密钥分片;基于预设运算规则对所述密钥分片和所述数据进行运算,得到中间数据,所述中间数据包括用于合成与所述第一明文对应的签名的第一中间数据,或者,用于合成与所述密文对应的第二明文的第二中间数据;删除至少一个所述中间数据对应的所述密钥分片,以使得任一时刻能从内存获取的所述密钥分片的数量,小于合成完整的密钥所需的所述密钥分片的最小数量;对至少所述第一中间数据进行合成运算,得到所述签名,或者,对至少所述第二中间数据进行合成运算,得到所述第二明文。

在一些实施例中,所述密钥分片是基于线性秘密共享算法对所述密钥进行划分得到的,所述对至少所述第一中间数据进行合成运算,得到所述签名,或者,对至少所述第二中间数据进行合成运算,得到所述第二明文,包括:对至少所述第一中间数据进行线性的合成运算,得到所述签名,或者,对至少所述第二中间数据进行线性的合成运算,得到所述第二明文。

在一些实施例中,所述密钥分片是基于线性秘密共享算法对所述密钥进行划分得到的,包括:在用于对所述第一明文进行签名的签名算法或在用于对所述密文进行解密的解密算法中,若所述密钥相对于该密钥以外的变量为非线性的非线性因子,则将所述密钥转化为相对于该密钥以外的变量为线性的线性因子,然后基于线性秘密共享算法对所述线性因子进行划分得到所述密钥分片;若所述密钥为所述线性因子,则基于线性秘密共享算法对该密钥进行划分得到所述密钥分片。

在一些实施例中,所述密钥为所述非线性因子的所述签名算法包括sm2签名算法,所述密钥为所述线性因子的所述签名算法包括ecdsa签名算法,所述密钥为所述线性因子的所述解密算法包括sm2解密算法。

在一些实施例中,所述签名算法为所述sm2签名算法,基于以下公式将为所述非线性因子的所述密钥转化为线性因子:

d′_sm2_s=(1+d_sm2_s)^{-1}

其中,d′_sm2_s为所述线性因子,d_sm2_s为所述sm2签名算法中的私钥,(1+d_sm2_s)^{-1}是对(1+d_sm2_s)的求逆运算。

在一些实施例中,获取的所述密钥分片是对所述密钥进行基于门限秘密共享算法的运算得到的,所述基于预设运算规则对所述密钥分片和所述数据进行运算之前,所述方法还包括:将获取的所述密钥分片转化为能够基于加法秘密共享算法合成所述密钥的密钥分片。

本申请实施例之一提供一种数据处理系统,所述数据包括第一明文或密文,所述系统包括:获取模块,用于获取密钥分片;运算模块,用于基于预设运算规则对所述密钥分片和所述数据进行运算,得到中间数据,所述中间数据包括用于合成与所述第一明文对应的签名的第一中间数据,或者,用于合成与所述密文对应的第二明文的第二中间数据;删除模块,用于删除至少一个所述中间数据对应的所述密钥分片,以使得任一时刻能从内存获取的所述密钥分片的数量,小于合成完整的密钥所需的所述密钥分片的最小数量;合成模块,用于对至少所述第一中间数据进行合成运算,得到所述签名,或者,对至少所述第二中间数据进行合成运算,得到所述第二明文。

在一些实施例中,所述密钥分片是基于线性秘密共享算法对所述密钥进行划分得到的,所述合成模块用于:对至少所述第一中间数据进行线性的合成运算,得到所述签名,或者,对至少所述第二中间数据进行线性的合成运算,得到所述第二明文。

在一些实施例中,所述密钥分片是基于线性秘密共享算法对所述密钥进行划分得到的,包括:在用于对所述第一明文进行签名的签名算法或在用于对所述密文进行解密的解密算法中,若所述密钥相对于该密钥以外的变量为非线性的非线性因子,则将所述密钥转化为相对于该密钥以外的变量为线性的线性因子,然后基于线性秘密共享算法对所述线性因子进行划分得到所述密钥分片;若所述密钥为所述线性因子,则基于线性秘密共享算法对该密钥进行划分得到所述密钥分片。

在一些实施例中,所述密钥为所述非线性因子的所述签名算法包括sm2签名算法,所述密钥为所述线性因子的所述签名算法包括ecdsa签名算法,所述密钥为所述线性因子的所述解密算法包括sm2解密算法。

在一些实施例中,所述签名算法为所述sm2签名算法,基于以下公式将为所述非线性因子的所述密钥转化为线性因子:

d′_sm2_s=(1+d_sm2_s)^{-1}

其中,d′_sm2_s为所述线性因子,d_sm2_s为所述sm2签名算法中的私钥,(1+d_sm2_s)^{-1}是对(1+d_sm2_s)的求逆运算。

在一些实施例中,获取的所述密钥分片是对所述密钥进行基于门限秘密共享算法的运算得到的,所述系统还包括:转化模块,用于在所述运算模块基于预设运算规则对所述密钥分片和所述数据进行运算之前,将获取的所述密钥分片转化为能够基于加法秘密共享算法合成所述密钥的密钥分片。

本申请实施例之一提供一种数据处理装置,包括处理器,所述处理器用于执行数据处理方法。

本申请实施例之一提供一种计算机可读存储介质,所述存储介质存储计算机指令,当计算机读取存储介质中的计算机指令后,计算机执行数据处理方法。

附图说明

本申请将以示例性实施例的方式进一步说明,这些示例性实施例将通过附图进行详细描述。这些实施例并非限制性的,在这些实施例中,相同的编号表示相同的结构,其中:

图1是根据本申请一些实施例所示的数据处理系统的模块图;

图2是根据本申请一些实施例所示的数据处理方法的示例性流程图;

图3是根据本申请一些实施例所示的数据处理方法中对密钥进行划分得到密钥分片的示例性流程图;

图4是根据本申请一些实施例所示的数据处理方法的另一示例性流程图。

具体实施方式

为了更清楚地说明本申请实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单的介绍。显而易见地,下面描述中的附图仅仅是本申请的一些示例或实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图将本申请应用于其它类似情景。除非从语言环境中显而易见或另做说明,图中相同标号代表相同结构或操作。

应当理解,本文使用的“系统”、“装置”、“单元”和/或“模组”是用于区分不同级别的不同组件、元件、部件、部分或装配的一种方法。然而,如果其他词语可实现相同的目的,则可通过其他表达来替换所述词语。

如本申请和权利要求书中所示,除非上下文明确提示例外情形,“一”、“一个”、“一种”和/或“该”等词并非特指单数,也可包括复数。一般说来,术语“包括”与“包含”仅提示包括已明确标识的步骤和元素,而这些步骤和元素不构成一个排它性的罗列,方法或者设备也可能包含其它的步骤或元素。

本申请中使用了流程图用来说明根据本申请的实施例的系统所执行的操作。应当理解的是,前面或后面操作不一定按照顺序来精确地执行。相反,可以按照倒序或同时处理各个步骤。同时,也可以将其他操作添加到这些过程中,或从这些过程移除某一步或数步操作。

图1是根据本申请一些实施例所示的数据处理系统的模块图。

如图1所示,该数据处理系统100可以包括获取模块110、运算模块120、删除模块130和合成模块140,在一些实施例中,该系统100可以对包括第一明文或密文的数据进行处理。

获取模块110,用于获取密钥分片;

运算模块120,用于基于预设运算规则对所述密钥分片和所述数据进行运算,得到中间数据,所述中间数据包括用于合成与所述第一明文对应的签名的第一中间数据,或者,用于合成与所述密文对应的第二明文的第二中间数据;

删除模块130,用于删除至少一个所述中间数据对应的所述密钥分片,以使得任一时刻能从内存获取的所述密钥分片的数量,小于合成完整的密钥所需的所述密钥分片的最小数量;

合成模块140,用于对至少所述第一中间数据进行合成运算,得到所述签名,或者,对至少所述第二中间数据进行合成运算,得到所述第二明文。

在一些实施例中,所述数据为第一明文时,运算模块120可以基于预设运算规则对所述密钥分片和所述第一明文进行运算,得到用于合成与所述第一明文对应的签名的第一中间数据,删除模块130可以删除至少一个所述第一中间数据对应的所述密钥分片,合成模块140可以对至少所述第一中间数据进行合成运算,得到所述签名。

在一些实施例中,所述数据为密文时,运算模块120可以基于预设运算规则对所述密钥分片和所述密文进行运算,得到用于合成与所述密文对应的第二明文的第二中间数据,删除模块130可以删除至少一个所述第二中间数据对应的所述密钥分片,合成模块140可以对至少所述第二中间数据进行合成运算,得到所述第二明文。

在一些实施例中,所述密钥分片是基于线性秘密共享算法对所述密钥进行划分得到的,所述合成模块140用于:对至少所述第一中间数据进行线性的合成运算,得到所述签名,或者,对至少所述第二中间数据进行线性的合成运算,得到所述第二明文。

在一些实施例中,所述密钥分片是基于线性秘密共享算法对所述密钥进行划分得到的,包括:在用于对所述第一明文进行签名的签名算法或在用于对所述密文进行解密的解密算法中,若所述密钥相对于该密钥以外的变量为非线性的非线性因子,则将所述密钥转化为相对于该密钥以外的变量为线性的线性因子,然后基于线性秘密共享算法对所述线性因子进行划分得到所述密钥分片;若所述密钥为所述线性因子,则基于线性秘密共享算法对该密钥进行划分得到所述密钥分片。

在一些实施例中,所述密钥为所述非线性因子的所述签名算法包括sm2签名算法,所述密钥为所述线性因子的所述签名算法包括ecdsa签名算法,所述密钥为所述线性因子的所述解密算法包括sm2解密算法。

在一些实施例中,所述签名算法为所述sm2签名算法,可以基于以下公式将为所述非线性因子的所述密钥转化为线性因子:

d′_sm2_s=(1+d_sm2_s)^{-1}

其中,d′_sm2_s为所述线性因子,d_sm2_s为所述sm2签名算法中的私钥,(1+d_sm2_s)^{-1}是对(1+d_sm2_s)的求逆运算。

在一些实施例中,获取的所述密钥分片是对所述密钥进行基于门限秘密共享算法的运算得到的,所述系统100还包括:转化模块,用于在所述运算模块120基于预设运算规则对所述密钥分片和所述数据进行运算之前,将获取的所述密钥分片转化为能够基于加法秘密共享算法合成所述密钥的密钥分片。

应当理解,图1所示的系统及其模块可以利用各种方式来实现。例如,在一些实施例中,系统及其模块可以通过硬件、软件或者软件和硬件的结合来实现。其中,硬件部分可以利用专用逻辑来实现;软件部分则可以存储在存储器中,由适当的指令执行系统,例如微处理器或者专用设计硬件来执行。本领域技术人员可以理解上述的方法和系统可以使用计算机可执行指令和/或包含在处理器控制代码中来实现,例如在诸如磁盘、cd或dvd-rom的载体介质、诸如只读存储器(固件)的可编程的存储器或者诸如光学或电子信号载体的数据载体上提供了这样的代码。本申请的系统及其模块不仅可以有诸如超大规模集成电路或门阵列、诸如逻辑芯片、晶体管等的半导体、或者诸如现场可编程门阵列、可编程逻辑设备等的可编程硬件设备的硬件电路实现,也可以用例如由各种类型的处理器所执行的软件实现,还可以由上述硬件电路和软件的结合(例如,固件)来实现。

需要注意的是,以上对于候选项显示、确定系统及其模块的描述,仅为描述方便,并不能把本申请限制在所举实施例范围之内。可以理解,对于本领域的技术人员来说,在了解该系统的原理后,可能在不背离这一原理的情况下,对各个模块进行任意组合,或者构成子系统与其他模块连接。例如,在一些实施例中,例如,图1中披露的获取模块110、运算模块120、删除模块130和合成模块140可以是一个系统中的不同模块,也可以是一个模块实现上述的两个或两个以上模块的功能。例如,删除模块130、合成模块140可以是两个模块,也可以是一个模块同时具有删除和合成功能。例如,各个模块可以共用一个存储模块,各个模块也可以分别具有各自的存储模块。诸如此类的变形,均在本申请的保护范围之内。

图2是根据本申请一些实施例所示的数据处理方法的示例性流程图,该数据包括第一明文或密文,如图2所示,该方法包括:

步骤202,获取密钥分片。

具体的,步骤202可以由获取模块110执行。

在一些实施例中,密钥分片可以是基于秘密共享算法对密钥进行划分得到的数据分片,若想合成完整的密钥,需要一定数量的密钥分片共同参与合成密钥的运算,任意少于该数量的密钥分片不能合成完整的密钥,需要说明的是,该数量由用于对密钥进行划分的密钥共享算法决定。例如一密钥需要其对应的至少10个密钥分片才能合成完整的该密钥,那么如果密钥分片的数量少于10,例如仅有8个或9个密钥分片,则不能合成完整的密钥。

在一些实施例中,密钥分片可以是基于线性秘密共享算法对密钥进行划分得到的,对于一秘密共享算法,若根据该秘密共享算法对密钥划分得到密钥分片的过程是线性的,那么该秘密共享算法是线性秘密共享算法,通过线性秘密共享算法划分得到的密钥分片,一般也需要通过线性的合成运算才能得到完整的密钥。在一些实施例中,线性秘密共享算法可以为加法秘密共享算法或门限秘密共享算法,其中,加法秘密共享算法需要所有的密钥分片参与合成运算才能得到完整的密钥,门限秘密共享算法例如(t,n)-shamir秘密共享算法是将密钥划分成n个密钥分片,通过其中的任意至少t个分片即可合成完整的密钥,t小于或等于n,且t和n均为正整数。需要说明的是,加法秘密共享算法和门限秘密共享算法均属于现有技术,在此,本说明书对其不做进一步赘述。

图3是根据本申请一些实施例所示的数据处理方法中对密钥进行划分得到密钥分片的示例性流程图,如图3所示,基于线性秘密共享算法对所述密钥进行划分得到密钥分片可以包括以下步骤:

步骤302,判断密钥是否为非线性因子。

具体的,判断在用于对所述第一明文进行签名的签名算法或在用于对所述密文进行解密的解密算法中,所述密钥是否为相对于该密钥以外的变量为非线性的非线性因子。

在一些实施例中,在签名算法或解密算法中,密钥相对于该密钥以外的变量可以为线性的线性因子或非线性的非线性因子。若密钥d与签名算法或解密算法中除密钥d以外的每一变量x的关系符合a*d*x或b*d+c*x的关系式,那么可以认为密钥d相对于变量x为线性的线性因子,其中,a,b,c均为系数,其可以是常数,也可以是在单次签名或解密过程中被视为常数的变量,对于满足上述线性因子的关系的密钥,可以基于线性秘密共享算法对其进行划分得到密钥分片。若密钥d与变量x的关系为非线性的,不满足上述线性因子的关系,则被视为非线性因子,对于非线性因子,不能直接基于线性秘密共享算法对其进行划分,例如密钥d与变量x符合d^{-1}*x,d^2*x的关系式,那么密钥d相对于变量x为非线性因子。

举例来讲,sm2算法是一种国密标准的非对称算法,在sm2签名算法中,密钥d_sm2_s涉及的运算包括:

s_sm2_s=(1+d_sm2_s)^{-1}*(k1+r1)-r1

其中,s_sm_s和r1为sm2签名算法中用于进行签名验证的数值,k1为随机数,(1+d_sm2_s)^{-1}是对(1+d_sm2_s)的求逆运算。

根据密钥d_sm2_s所在的关系式可知,密钥d_sm2_s相对于变量r1为非线性的,故密钥d_sm2_s为非线性因子,密钥为所述非线性因子的所述签名算法包括sm2签名算法。

举例来讲,在ecdsa(ellipticcurvedigitalsignaturealgorithm)签名算法中,密钥d_ecdsa涉及的运算包括:

s_ecdsa=(hash(m2)+d_ecdsa*r2)*k2^{-1}

其中,s_ecdsa和r2是ecdsa签名算法中用于进行签名验证的数值,hash(m2)为第一明文m2的哈希值,k2为随机数,k2^{-1}是对k2的求逆运算。

根据密钥d_ecdsa所在的关系式可知,密钥d_ecdsa相对于除密钥d_ecdsa外的其他变量如r2,k2,hash(m2)均为线性的,故密钥d_ecdsa为线性因子,进而密钥为所述线性因子的签名算法包括ecdsa签名算法。需要说明的是,由于在单次签名过程中,k2被视为一个常数,故密钥d_ecdsa相对于k2^{-1}整体为线性的,可以视为密钥d_ecdsa相对于k2是线性的。

举例来讲,在sm2解密算法中,密钥d_sm2_d涉及的运算包括:

s_sm2_d=[d_sm2_d]*c_1

其中,s_sm2_d为sm2解密算法中用于验证解密得到的明文是否正确的参数,c_1是密文c中用于判断是否满足sm2曲线方程以及[h]c_1是否不等于曲线无穷远点的部分,h为sm2曲线余因子。

根据密钥d_sm2_d所在的关系式可知,密钥d_sm2_d相对于c_1是线性的,故密钥d_sm2_d为线性因子,进而密钥为所述线性因子的解密算法包括sm2解密算法。

步骤304,若所述密钥相对于该密钥以外的变量为非线性的非线性因子,则将所述密钥转化为相对于该密钥以外的变量为线性的线性因子。

在一些实施例中,若密钥为上述非线性因子,可以将密钥所在的因式整体转化为线性的系数,例如密钥所在的签名算法为sm2签名算法时,可以基于以下公式将为所述非线性因子的所述密钥转化为线性因子:

d′_sm2_s=(1+d_sm2_s)^{-1}

其中,d′_sm2_s为所述线性因子,d_sm2_s为所述sm2签名算法中的私钥,(1+d_sm2_s)^{-1}是对(1+d_sm2_s)的求逆运算。

转化后,密钥d_sm2_s所在的运算式变为:

s_sm2_s=d′_sm2_s*(k1+r1)-r1

其中,s_sm2_s和r1为sm2签名算法中用于进行签名验证的数值,k1为随机数。可见,d′_sm2_s相对于k1和r1均为线性的,因此d′_sm2_s可视为线性因子。

步骤306,基于线性秘密共享算法对所述线性因子进行划分得到所述密钥分片。

在一些实施例中,在将为所述非线性因子的密钥转化为线性因子后,可以基于线性秘密共享算法对线性因子进行划分得到密钥分片。沿用上述关于sm2签名算法的例子,可以基于加法秘密共享算法对转化得到的线性因子d′_sm2_s进行划分,具体如下所示:

其中,d′_sm2_s为所述线性因子,d′_sm2_s_i为密钥分片,t1为密钥分片d′_sm2_s_i的数量。

步骤308,若所述密钥为所述线性因子,则基于线性秘密共享算法对该密钥进行划分得到所述密钥分片。

在一些实施例中,若密钥为上述线性因子,则无需对密钥进行转化,而可以直接对密钥进行划分。例如对于ecdsa签名算法和sm2解密算法,均可以直接基于加法秘密共享算法对其中的密钥进行划分,具体如下所示:

其中,d_ecdsa为ecdsa签名算法中的私钥,d_ecdsa_i为密钥分片,t2为密钥分片d_ecdsa_i的数量。

其中,d_sm2_d为sm2解密算法中的私钥,d_sm2_d_i为所述密钥分片,t3为密钥分片d_sm2_d_i的数量。

通过将上述非线性因子转化为线性因子,使得两种形式的密钥均可以通过线性秘密共享算法进行密钥分片的划分,进而在后续的处理过程中,可以基于相同或相近的方式通过密钥分片得到第二明文或签名,无需对两种形式的密钥分别设计不同的处理过程,使得整个过程更加简化。

在一些实施例中,密钥分片可以分多次获取,为了确保单次获取的密钥分片被窃取后,不能通过这些密钥分片得到完整的密钥,可以让每一次获取所述密钥分片的数量,小于合成完整的所述密钥所需的所述密钥分片的所述最小数量。例如合成一完整的密钥所需的密钥分片的最小数量为10,那么单次获取密钥分片的数量可以为1-9中的任意一个整数。

在一些实施例中,密钥分片可以存放在同一终端中,例如存放在同一终端的硬存中,在获取密钥分片时,将硬存中的密钥分片提取至该终端的内存中参与运算。密钥分片也可以存放在不同终端中,不同终端彼此通信连接,进而在获取密钥分片时,将不同终端中的密钥分片提取至同一终端的内存中参与运算。密钥分片也可以存放在服务器中,在获取密钥分片时,将密钥分片提取至服务器的同一内存中,或将密钥分片提取至与该服务器通信连接的终端的内存中参与运算。

在一些实施例中,可以将密钥分片加密后存储,以提高每一个密钥分片存储时的安全性,例如可以基于口令加密,白盒加密等加密方式中的至少一种加密方式对密钥分片进行加密。

步骤204,基于预设运算规则对所述密钥分片和所述数据进行运算,得到中间数据,所述中间数据包括用于合成与所述第一明文对应的签名的第一中间数据,或者,用于合成与所述密文对应的第二明文的第二中间数据。

具体的,步骤204可以由运算模块120执行。所述数据为第一明文时,可以基于预设运算规则对所述密钥分片和所述第一明文进行运算,得到用于合成与所述第一明文对应的签名的第一中间数据。所述数据为密文时,可以基于预设运算规则对所述密钥分片和所述密文进行运算,得到用于合成与所述密文对应的第二明文的第二中间数据。

沿用上述例子,在sm2签名算法中,中间数据可以基于以下运算规则计算得到:

s_sm2_s_i=k′*d′_sm2_s_i(modn1)

k′=k1+r1(modn1)

r1=(hash(m1)+x_sm2_s)(modn1)

(x_sm2_s,y_sm2_s)=[k1]g1

其中,s_sm2_s_i为与sm2签名算法对应的中间数据,d′_sm2_s_i为所述密钥分片,k1为随机数,n1为sm2签名算法中椭圆曲线循环群的阶,hash(m1)为第一明文m1的哈希值,x_sm2_s和y_sm2_s分别为[k1]g1对应的点的横坐标与纵坐标,g1为sm2签名算法中椭圆曲线对应的基点。

沿用上述例子,在ecdsa签名算法中,中间数据可以基于以下运算规则计算得到:

s_ecdsa_i=z′+r′*d_ecdsa_i

z′=k2^{-1}*hash(m2)/t2(modn2)

r′=k2^{-1}*r2(modn2)

r2=x_ecdsa(modn2)

(x_ecdsa,y_ecdsa)=[k2]g2

其中,s_ecdsa_i为与ecdsa签名算法对应的中间数据,d_ecdsa_i为所述密钥分片,k2为随机数,hash(m2)为第一明文m2的哈希值,t2为密钥分片d_ecdsa_i的数量,n2为ecdsa签名算法中椭圆曲线循环群的阶,x_ecdsa和y_ecdsa分别为[k2]g2对应的点的横坐标与纵坐标,g2为ecdsa签名算法中椭圆曲线对应的基点,k2^{-1}是对k2的求逆运算。

沿用上述例子,在sm2解密算法中,中间数据可以基于以下运算规则计算得到:

s_sm2_d_i=[d_sm2_d_i]c_1

其中,s_sm2_d_i为所述中间数据,d_sm2_d_i为所述密钥分片,c_1为密文c中用于判断是否满足sm2曲线方程以及[h]c_1是否不等于曲线无穷远点的部分,h为sm2曲线余因子。

需要说明的是,对于采用何种的预设运算规则,得到何种的中间数据,本说明书不作限制,只要通过该种预设运算规则得到的第一中间数据能够被用于合成与所述第一明文对应的签名,得到的第二中间数据能够被用于合成与所述密文对应的第二明文。

步骤206,删除至少一个所述中间数据对应的所述密钥分片,以使得任一时刻能从内存获取的所述密钥分片的数量,小于合成完整的密钥所需的所述密钥分片的最小数量。

具体的,步骤206可以由删除模块130执行。所述数据为第一明文时,删除至少一个所述第一中间数据对应的所述密钥分片。所述数据为密文时,删除至少一个所述第二中间数据对应的所述密钥分片。

在一些实施例中,由于使用密钥进行签名或解密时,需要将密钥整体提取至内存中,故第三方可以通过攻击内存获取密钥,为了降低第三方攻击内存获取其中的密钥的可能性,对于已经计算出中间数据的密钥分片,可以将该密钥分片进行删除,并且在任一时刻,都要确保内存中的密钥分片的数量,小于合成完整的密钥所需的密钥分片的最小数量,如此,在任一时刻能够从内存中获取的密钥分片的数量均有限,不能够合成完整的密钥,进而降低了内存被攻击时,攻击者从内存中恢复出完整的密钥的概率。

举例来讲,合成一完整的密钥所需的密钥分片的最小数量为10,那么可以对内存中的密钥分片数量进行监测,若在某一时刻发现内存中同时存在的密钥分片的数量达到10,其中有4个密钥分片已经计算出对应的中间数据,删除这4个密钥分片中的1个,删除后,内存中同时存在的密钥分片的数量为9,不能通过这9个密钥分片合成完整的密钥,进而提高了其安全性。

在一些实施例中,可以在每计算出一个中间数据后,就删除该中间数据对应的密钥分片,也可以在计算出的中间数据的数量每达到一定阈值时,删除这些中间数据对应的密钥分片,例如每当计算出3个中间数据,就一次性删除这3个中间数据对应的密钥分片,当然,这个阈值小于合成完整的密钥所需的所述密钥分片的最小数量。

在一些实施例中,对于存放在同一终端中的密钥分片,拥有相应权限的用户可以一次性获取该终端中的所有密钥分片,但是在提取密钥分片用于计算中间数据时,可以每次仅提取一个密钥分片到内存中,并在利用该密钥分片计算出中间数据后,立即删除该密钥分片,之后重复前述提取密钥分片到内存中的步骤至删除该密钥分片的步骤,直至得到的中间数据能够用于计算下述的签名或第二明文。

步骤208,对至少所述第一中间数据进行合成运算,得到所述签名,或者,对至少所述第二中间数据进行合成运算,得到所述第二明文。

具体的,步骤208可以由合成模块140执行。所述数据为第一明文时,对至少所述第一中间数据进行合成运算,得到所述签名。所述数据为密文时,对至少所述第二中间数据进行合成运算,得到所述第二明文。

在一些实施例中,在进行合成运算时,至少需要用到中间数据,可能仅需要利用中间数据进行合成运算,也可能需要利用中间数据和其他数据进行合成运算。

在一些实施例中,密钥是基于线性秘密共享算法对密钥进行划分得到的,对至少所述第一中间数据进行合成运算,得到所述签名,或者,对至少所述第二中间数据进行合成运算,得到所述第二明文,可以包括:对至少所述第一中间数据进行线性的合成运算,得到所述签名,或者,对至少所述第二中间数据进行线性的合成运算,得到所述第二明文。

沿用上述例子,对于sm2签名算法对应的中间数据s_sm2_s_i,可以通过以下方式进行合成运算:

其中,s_sm2_s和r1为sm2签名算法中用于进行签名验证的数值,t1为中间数据s_sm2_s_i的数量。该合成运算除用到中间数据s_sm2_s_i外,还用到了其他数据r1,计算出s_sm2_s后,将s_sm2_s与r1组合得到最终的用于供信息接收方进行签名验证的签名数据(s_sm2_s,r1),需要说明的是,通过上述方法得到的签名数据与通过传统的sm2签名算法得到的签名数据是相同的,故对于通过上述方法得到的签名数据,可以参照与传统的sm2签名算法对应的签名验证算法进行验证。

沿用上述例子,对于ecdsa签名算法对应的中间数据s_ecdsa_i,可以通过以下方式进行合成运算:

其中,s_ecdsa和r2是ecdsa签名算法中用于进行签名验证的数值,t2是中间数据s_ecdsa_i的数量。计算出s_ecdsa后,将s_ecdsa与r2(r2可参见前述公式)组合得到最终的用于供信息接收方进行签名验证的签名数据(s_ecdsa,r2),需要说明的是,通过上述方法得到的签名数据与通过传统的ecdsa签名算法得到的签名数据是相同的,故对于通过上述方法得到的签名数据,可以参照与传统的ecdsa签名算法对应的签名验证算法进行验证。

沿用上述例子,对于sm2解密算法对应的中间数据s_sm2_d_i,可以通过以下方式进行合成运算:

其中,s_sm2_d为sm2解密算法中用于验证解密得到的明文是否正确的参数,t3是中间数据s_sm2_d_i的数量。根据sm2算法标准,密文c由3个部分组成,c=c_1||c_2||c_3,参照传统的sm2解密算法过程,首先从密文c中取出c_1,判断c_1是否满足sm2曲线方程以及[h]c_1是否不等于曲线无穷远点,其中,h为sm2曲线余因子,如果c_1满足sm2曲线方程,且[h]c_1不等于曲线无穷远点,则计算t=kdf(x_2||y_2,klen),其中,x_2和y_2分别为计算得到的s_sm2_d对应的点的横坐标和纵坐标,klen是密文c对应的明文的长度,kdf是密钥派生函数。之后验证c_3是否等于hash(x_2||m||y_2),如果相等,则输出明文m,需要说明的是,通过上述方法得到的用于验证明文是否正确的参数s_sm2_d与通过传统sm2解密算法得到的该参数是相同的。

图4是根据本申请一些实施例所示的数据处理方法的另一示例性流程图。如图4所示,该方法包括:

步骤402,获取密钥分片;该密钥分片是对所述密钥进行基于门限秘密共享算法的运算得到的。

具体的,步骤402可以参见步骤302。

步骤404,将获取的所述密钥分片转化为能够基于加法秘密共享算法合成所述密钥的密钥分片。

在一些实施方式中,基于门限秘密共享算法得到的密钥分片进行上述转化后,转化得到的密钥分片可以直接应用于与基于加法秘密共享算法得到的密钥分片所对应的预设运算规则以及合成运算的规则,无需单独对门限秘密共享算法设计预设运算规则以及合成运算的规则,简化了整个运算过程。

举例来讲,基于门限秘密共享算法得到3个密钥分片f(2)=5,f(3)=4,f(5)=6,其中,f(2),f(3),f(5)是根据多项式f(x)得到的,f(x)如下所示:

其中,ai为常数,x为自变量,k为密钥分片的数量。可以根据以下公式将对密钥分片f(2),f(3),f(5)进行转化:

其中,dj为转化后的密钥分片,x为自变量,k为多项式f(x)的项数。进一步,f(2),f(3),f(5)转化后的密钥分片分别为:

基于线加法密钥共享算法将d1,d2,d3相加即可得到完整的密钥,该密钥与f(2),f(3),f(5)基于门限秘密共享算法得到的密钥相同。且密钥分片d1,d2,d3可以直接应用于前述的sm2签名算法、ecdsa签名算法以及sm2解密算法对应的数据处理方法中。

步骤406,基于预设运算规则对所述密钥分片和所述数据进行运算,得到中间数据,所述中间数据包括用于合成与所述第一明文对应的签名的第一中间数据,或者,用于合成与所述密文对应的第二明文的第二中间数据。

步骤408,删除至少一个所述中间数据对应的所述密钥分片,以使得任一时刻能从内存获取的所述密钥分片的数量,小于合成完整的密钥所需的所述密钥分片的最小数量。

步骤410,对至少所述第一中间数据进行合成运算,得到所述签名,或者,对至少所述第二中间数据进行合成运算,得到所述第二明文。

具体的,步骤404-410可以参见步骤304-308。

应当注意的是,上述有关流程200,流程300和流程400的描述仅仅是为了示例和说明,而不限定本申请的适用范围。对于本领域技术人员来说,在本申请的指导下可以对流程200,流程300或流程400进行各种修正和改变。然而,这些修正和改变仍在本申请的范围之内。

本申请实施例可能带来的有益效果包括但不限于:

(1)本说明书一个或多个实施例将密钥分片而非密钥整体用于签名或解密,且在计算出密钥分片对应的中间数据后,删除该中间数据对应的密钥分片,避免了能够合成密钥整体的多个密钥分片同时出现在内存中,使得第三方不能通过内存中的密钥分片恢复出密钥,密钥的安全性更高。

(2)本说明书一个或多个实施例不仅能用于根据加法共享秘密算法得到的密钥分片,也可以用于根据加法共享秘密算法得到的密钥分片,拓宽了该数据处理方法的应用范围。

(3)本说明书一个或多个实施例将算法中为上述非线性因子的密钥转化为线性因子,使得该数据处理方法可以同时应用于两种类型的密钥对应的签名算法或解密算法,扩宽了该数据处理方法的应用范围,同时也简化了其运算过程。

(4)本说明书一个或多个实施例将密钥分片加密存储,降低了密钥分片被第三方获取的概率,提高了其存储时的安全性。

需要说明的是,不同实施例可能产生的有益效果不同,在不同的实施例里,可能产生的有益效果可以是以上任意一种或几种的组合,也可以是其他任何可能获得的有益效果。

上文已对基本概念做了描述,显然,对于本领域技术人员来说,上述详细披露仅仅作为示例,而并不构成对本申请的限定。虽然此处并没有明确说明,本领域技术人员可能会对本申请进行各种修改、改进和修正。该类修改、改进和修正在本申请中被建议,所以该类修改、改进、修正仍属于本申请示范实施例的精神和范围。

同时,本申请使用了特定词语来描述本申请的实施例。如“一个实施例”、“一实施例”、和/或“一些实施例”意指与本申请至少一个实施例相关的某一特征、结构或特点。因此,应强调并注意的是,本说明书中在不同位置两次或多次提及的“一实施例”或“一个实施例”或“一个替代性实施例”并不一定是指同一实施例。此外,本申请的一个或多个实施例中的某些特征、结构或特点可以进行适当的组合。

此外,本领域技术人员可以理解,本申请的各方面可以通过若干具有可专利性的种类或情况进行说明和描述,包括任何新的和有用的工序、机器、产品或物质的组合,或对他们的任何新的和有用的改进。相应地,本申请的各个方面可以完全由硬件执行、可以完全由软件(包括固件、常驻软件、微码等)执行、也可以由硬件和软件组合执行。以上硬件或软件均可被称为“数据块”、“模块”、“引擎”、“单元”、“组件”或“系统”。此外,本申请的各方面可能表现为位于一个或多个计算机可读介质中的计算机产品,该产品包括计算机可读程序编码。

计算机存储介质可能包含一个内含有计算机程序编码的传播数据信号,例如在基带上或作为载波的一部分。该传播信号可能有多种表现形式,包括电磁形式、光形式等,或合适的组合形式。计算机存储介质可以是除计算机可读存储介质之外的任何计算机可读介质,该介质可以通过连接至一个指令执行系统、装置或设备以实现通讯、传播或传输供使用的程序。位于计算机存储介质上的程序编码可以通过任何合适的介质进行传播,包括无线电、电缆、光纤电缆、rf、或类似介质,或任何上述介质的组合。

本申请各部分操作所需的计算机程序编码可以用任意一种或多种程序语言编写,包括面向对象编程语言如java、scala、smalltalk、eiffel、jade、emerald、c++、c#、vb.net、python等,常规程序化编程语言如c语言、visualbasic、fortran2003、perl、cobol2002、php、abap,动态编程语言如python、ruby和groovy,或其他编程语言等。该程序编码可以完全在用户计算机上运行、或作为独立的软件包在用户计算机上运行、或部分在用户计算机上运行部分在远程计算机运行、或完全在远程计算机或服务器上运行。在后种情况下,远程计算机可以通过任何网络形式与用户计算机连接,比如局域网(lan)或广域网(wan),或连接至外部计算机(例如通过因特网),或在云计算环境中,或作为服务使用如软件即服务(saas)。

此外,除非权利要求中明确说明,本申请所述处理元素和序列的顺序、数字字母的使用、或其他名称的使用,并非用于限定本申请流程和方法的顺序。尽管上述披露中通过各种示例讨论了一些目前认为有用的发明实施例,但应当理解的是,该类细节仅起到说明的目的,附加的权利要求并不仅限于披露的实施例,相反,权利要求旨在覆盖所有符合本申请实施例实质和范围的修正和等价组合。例如,虽然以上所描述的系统组件可以通过硬件设备实现,但是也可以只通过软件的解决方案得以实现,如在现有的服务器或移动设备上安装所描述的系统。

同理,应当注意的是,为了简化本申请披露的表述,从而帮助对一个或多个发明实施例的理解,前文对本申请实施例的描述中,有时会将多种特征归并至一个实施例、附图或对其的描述中。但是,这种披露方法并不意味着本申请对象所需要的特征比权利要求中提及的特征多。实际上,实施例的特征要少于上述披露的单个实施例的全部特征。

一些实施例中使用了描述成分、属性数量的数字,应当理解的是,此类用于实施例描述的数字,在一些示例中使用了修饰词“大约”、“近似”或“大体上”来修饰。除非另外说明,“大约”、“近似”或“大体上”表明所述数字允许有±20%的变化。相应地,在一些实施例中,说明书和权利要求中使用的数值参数均为近似值,该近似值根据个别实施例所需特点可以发生改变。在一些实施例中,数值参数应考虑规定的有效数位并采用一般位数保留的方法。尽管本申请一些实施例中用于确认其范围广度的数值域和参数为近似值,在具体实施例中,此类数值的设定在可行范围内尽可能精确。

针对本申请引用的每个专利、专利申请、专利申请公开物和其他材料,如文章、书籍、说明书、出版物、文档等,特此将其全部内容并入本申请作为参考。与本申请内容不一致或产生冲突的申请历史文件除外,对本申请权利要求最广范围有限制的文件(当前或之后附加于本申请中的)也除外。需要说明的是,如果本申请附属材料中的描述、定义、和/或术语的使用与本申请所述内容有不一致或冲突的地方,以本申请的描述、定义和/或术语的使用为准。

最后,应当理解的是,本申请中所述实施例仅用以说明本申请实施例的原则。其他的变形也可能属于本申请的范围。因此,作为示例而非限制,本申请实施例的替代配置可视为与本申请的教导一致。相应地,本申请的实施例不仅限于本申请明确介绍和描述的实施例。

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