一种数据处理方法、装置和用于数据处理的装置转让专利

申请号 : CN202110783551.X

文献号 : CN113239389B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 武斌

申请人 : 华控清交信息科技(北京)有限公司

摘要 :

本发明实施例提供一种数据处理方法、装置和用于数据处理的装置。其中的方法包括:根据待加密数据的数量级,随机生成第一浮点数,所述第一浮点数的数量级高于或等于所述待加密数据的数量级;确定第二浮点数,所述第一浮点数与所述第二浮点数的和等于所述待加密数据;将所述第一浮点数转换为整数类型的第一编码数组,以及将所述第二浮点数转换为整数类型的第二编码数组;将所述第一编码数组和所述第二编码数组发送至运算方参与运算。本发明实施例可以实现对浮点类型的数据进行秘密分享,使得数据提供方可以将浮点类型的数据编码为秘密分享结果,并发送给运算方参与运算,可以扩展秘密分享算法的应用场景。

权利要求 :

1.一种数据处理方法,其特征在于,应用于数据提供方,所述方法包括:根据待加密数据的数量级,随机生成第一浮点数,所述第一浮点数的数量级高于或等于所述待加密数据的数量级;

确定第二浮点数,所述第一浮点数与所述第二浮点数的和等于所述待加密数据;

将所述第一浮点数转换为整数类型的第一编码数组,以及将所述第二浮点数转换为整数类型的第二编码数组;

将所述第一编码数组和所述第二编码数组发送至运算方参与运算;

所述方法还包括:

对所述第一编码数组和所述第二编码数组求和,得到结果数组;

根据所述结果数组的首位,确定所述待加密数据的符号位;

将所述结果数组中的有效位段转换为预设类型整数并取绝对值,得到目标位段;

根据所述有效位段确定第一下标,以及根据所述目标位段确定第二下标;

根据所述第一下标、所述第二下标、以及所述预设倍数,确定所述待加密数据的指数位;

根据所述有效位段的长度以及所述第二下标确定左移量;

将所述目标位段向左移动所述左移量,得到所述待加密数据的底数位;

对所述待加密数据的符号位、所述待加密数据的指数位、以及所述待加密数据的底数位进行组合,得到所述待加密数据。

2.根据权利要求1所述的方法,其特征在于,所述将所述第一浮点数转换为整数类型的第一编码数组,以及将所述第二浮点数转换为整数类型的第二编码数组,包括:将所述第一浮点数放大预设倍数后转换为整数类型,得到第一编码数组,以及将所述第二浮点数放大预设倍数后转换为整数类型,得到第二编码数组。

3.根据权利要求2所述的方法,其特征在于,所述将所述第一浮点数放大预设倍数后转换为整数类型,得到第一编码数组,包括:获取所述第一浮点数的符号位、所述第一浮点数的指数位、以及所述第一浮点数的底数位;

根据所述预设倍数和所述第一浮点数的指数位,计算所述第一浮点数的底数位的移位方向和移位量;

按照所述移位方向将所述第一浮点数的底数位移动所述移位量,得到第一编码数组。

4.根据权利要求3所述的方法,其特征在于,所述按照所述移位方向将所述第一浮点数的底数位移动所述移位量,得到第一编码数组,包括:将所述移位量进行取模计算,得到余数r和商q;

按照所述移位方向将所述第一浮点数的底数位移动r位,得到对齐数据;

将所述对齐数据转换为字节,得到对齐数组;

将所述对齐数组的高位进行补齐,得到预设长度的中间数组;

按照所述移位方向将所述中间数组整体移动q个字节,得到第一编码数组。

5.根据权利要求1所述的方法,其特征在于,所述对所述第一编码数组和所述第二编码数组求和,得到结果数组,包括:步骤1:初始化进位carry=0,数组指针i=0,结果数组resBytes中的各元素置为0;

步骤2:如果i>=n,则跳转至步骤7,n为所述第一编码数组和所述第二编码数组的长度;

步骤3:获取所述第一编码数组的第i个元素x以及所述第二编码数组的第i个元素y;

步骤4:如果x或y小于0,则将x或y转换为正数;

步骤5:对x、y、以及carry求和,得到sum,并根据sum的值设置resBytes的第i个元素;

步骤6:i自增1,跳转至步骤2;

步骤7:输出结果数组resBytes。

6.一种数据处理装置,其特征在于,应用于数据提供方,所述装置包括:第一浮点数生成模块,用于根据待加密数据的数量级,随机生成第一浮点数,所述第一浮点数的数量级高于或等于所述待加密数据的数量级;

第二浮点数生成模块,用于确定第二浮点数,所述第一浮点数与所述第二浮点数的和等于所述待加密数据;

浮点数编码模块,用于将所述第一浮点数转换为整数类型的第一编码数组,以及将所述第二浮点数转换为整数类型的第二编码数组;

结果发送模块,用于将所述第一编码数组和所述第二编码数组发送至运算方参与运算;

所述装置还包括:

数组求和模块,用于对所述第一编码数组和所述第二编码数组求和,得到结果数组;

数据还原模块,用于将所述结果数组缩小预设倍数后转换为浮点类型,得到所述待加密数据;所述数据还原模块,包括:符号确定子模块,用于根据所述结果数组的首位,确定所述待加密数据的符号位;

目标确定子模块,用于将所述结果数组中的有效位段转换为预设类型整数并取绝对值,得到目标位段;

下标确定子模块,用于根据所述有效位段确定第一下标,以及根据所述目标位段确定第二下标;

指数确定子模块,用于根据所述第一下标、所述第二下标、以及所述预设倍数,确定所述待加密数据的指数位;

左移量确定子模块,用于根据所述有效位段的长度以及所述第二下标确定左移量;

底数确定子模块,用于将所述目标位段向左移动所述左移量,得到所述待加密数据的底数位;

数据拼接子模块,用于对所述待加密数据的符号位、所述待加密数据的指数位、以及所述待加密数据的底数位进行组合,得到所述待加密数据。

7.根据权利要求6所述的装置,其特征在于,所述浮点数编码模块,具体用于将所述第一浮点数放大预设倍数后转换为整数类型,得到第一编码数组,以及将所述第二浮点数放大预设倍数后转换为整数类型,得到第二编码数组。

8.根据权利要求7所述的装置,其特征在于,所述浮点数编码模块,包括:参数获取子模块,用于获取所述第一浮点数的符号位、所述第一浮点数的指数位、以及所述第一浮点数的底数位;

移位确定子模块,用于根据所述预设倍数和所述第一浮点数的指数位,计算所述第一浮点数的底数位的移位方向和移位量;

移位子模块,用于按照所述移位方向将所述第一浮点数的底数位移动所述移位量,得到第一编码数组。

9.根据权利要求8所述的装置,其特征在于,所述移位子模块,包括:模计算单元,用于将所述移位量进行取模计算,得到余数r和商q;

对齐单元,用于按照所述移位方向将所述第一浮点数的底数位移动r位,得到对齐数据;

转换单元,用于将所述对齐数据转换为字节,得到对齐数组;

补齐单元,用于将所述对齐数组的高位进行补齐,得到预设长度的中间数组;

移动单元,用于按照所述移位方向将所述中间数组整体移动q个字节,得到第一编码数组。

10.一种用于数据处理的装置,其特征在于,应用于数据提供方,所述装置包括有存储器,以及一个以上的程序,其中一个以上程序存储于存储器中,且经配置以由一个以上处理器执行所述一个以上程序,所述一个以上程序包含用于进行如权利要求1至5任一所述的数据处理方法的指令。

11.一种机器可读介质,其上存储有指令,当所述指令由装置的一个或多个处理器执行时,使得装置执行如权利要求1至5任一所述的数据处理方法。

说明书 :

一种数据处理方法、装置和用于数据处理的装置

技术领域

[0001] 本发明涉及计算机技术领域,尤其涉及一种数据处理方法、装置和用于数据处理的装置。

背景技术

[0002] 秘密分享(Secret Share)是一种分发、保存和恢复秘密的方法,是实现安全多方计算的一种重要手段。目前,基于秘密分享的密文计算系统可以使用基于加法分片的秘密
分享算法,各加法分片相加可得到秘密。
[0003] 对于各种编程语言,最大整数类型为long类型,即int64,对于更长的整数类型,一般有其对应的大数类型,并支持了若干基础运算。然而,对于浮点类型(如float类型或
double类型)的数据,目前还没有实现对浮点类型的数据进行秘密分享的方法。

发明内容

[0004] 本发明实施例提供一种数据处理方法、装置和用于数据处理的装置,可以实现对浮点类型的数据进行秘密分享,使得数据提供方可以将浮点类型的数据编码为秘密分享结
果,并发送给运算方参与运算,可以扩展秘密分享算法的应用场景。
[0005] 为了解决上述问题,本发明实施例公开了一种数据处理方法,应用于数据提供方,所述方法包括:
[0006] 根据待加密数据的数量级,随机生成第一浮点数,所述第一浮点数的数量级高于或等于所述待加密数据的数量级;
[0007] 确定第二浮点数,所述第一浮点数与所述第二浮点数的和等于所述待加密数据;
[0008] 将所述第一浮点数转换为整数类型的第一编码数组,以及将所述第二浮点数转换为整数类型的第二编码数组;
[0009] 将所述第一编码数组和所述第二编码数组发送至运算方参与运算。
[0010] 可选地,所述将所述第一浮点数转换为整数类型的第一编码数组,以及将所述第二浮点数转换为整数类型的第二编码数组,包括:
[0011] 将所述第一浮点数放大预设倍数后转换为整数类型,得到第一编码数组,以及将所述第二浮点数放大预设倍数后转换为整数类型,得到第二编码数组。
[0012] 可选地,所述将所述第一浮点数放大预设倍数后转换为整数类型,得到第一编码数组,包括:
[0013] 获取所述第一浮点数的符号位、所述第一浮点数的指数位、以及所述第一浮点数的底数位;
[0014] 根据所述预设倍数和所述第一浮点数的指数位,计算所述第一浮点数的底数位的移位方向和移位量;
[0015] 按照所述移位方向将所述第一浮点数的底数位移动所述移位量,得到第一编码数组。
[0016] 可选地,所述按照所述移位方向将所述第一浮点数的底数位移动所述移位量,得到第一编码数组,包括:
[0017] 将所述移位量进行取模计算,得到余数r和商q;
[0018] 按照所述移位方向将所述第一浮点数的底数位移动r位,得到对齐数据;
[0019] 将所述对齐数据转换为字节,得到对齐数组;
[0020] 将所述对齐数组的高位进行补齐,得到预设长度的中间数组;
[0021] 按照所述移位方向将所述中间数组整体移动q个字节,得到第一编码数组。
[0022] 可选地,所述方法还包括:
[0023] 对所述第一编码数组和所述第二编码数组求和,得到结果数组;
[0024] 将所述结果数组缩小预设倍数后转换为浮点类型,得到所述待加密数据。
[0025] 可选地,所述将所述结果数组缩小预设倍数后转换为浮点类型,得到所述待加密数据,包括:
[0026] 根据所述结果数组的首位,确定所述待加密数据的符号位;
[0027] 将所述结果数组中的有效位段转换为预设类型整数并取绝对值,得到目标位段;
[0028] 根据所述有效位段确定第一下标,以及根据所述目标位段确定第二下标;
[0029] 根据所述第一下标、所述第二下标、以及所述预设倍数,确定所述待加密数据的指数位;
[0030] 根据所述有效位段的长度以及所述第二下标确定左移量;
[0031] 将所述目标位段向左移动所述左移量,得到所述待加密数据的底数位;
[0032] 对所述待加密数据的符号位、所述待加密数据的指数位、以及所述待加密数据的底数位进行组合,得到所述待加密数据。
[0033] 可选地,所述对所述第一编码数组和所述第二编码数组求和,得到结果数组,包括:
[0034] 步骤1:初始化进位carry=0,数组指针i=0,结果数组resBytes中的各元素置为0;
[0035] 步骤2:如果i>=n,则跳转至步骤7,n为所述第一编码数组和所述第二编码数组的长度;
[0036] 步骤3:获取所述第一编码数组的第i个元素x以及所述第二编码数组的第i个元素y;
[0037] 步骤4:如果x或y小于0,则将x或y转换为正数;
[0038] 步骤5:对x、y、以及carry求和,得到sum,并根据sum的值设置resBytes的第i个元素;
[0039] 步骤6:i自增1,跳转至步骤2;
[0040] 步骤7:输出结果数组resBytes。
[0041] 另一方面,本发明实施例公开了一种数据处理装置,应用于数据提供方,所述装置包括:
[0042] 第一浮点数生成模块,用于根据待加密数据的数量级,随机生成第一浮点数,所述第一浮点数的数量级高于或等于所述待加密数据的数量级;
[0043] 第二浮点数生成模块,用于确定第二浮点数,所述第一浮点数与所述第二浮点数的和等于所述待加密数据;
[0044] 浮点数编码模块,用于将所述第一浮点数转换为整数类型的第一编码数组,以及将所述第二浮点数转换为整数类型的第二编码数组;
[0045] 结果发送模块,用于将所述第一编码数组和所述第二编码数组发送至运算方参与运算。
[0046] 可选地,所述浮点数编码模块,具体用于将所述第一浮点数放大预设倍数后转换为整数类型,得到第一编码数组,以及将所述第二浮点数放大预设倍数后转换为整数类型,
得到第二编码数组。
[0047] 可选地,所述浮点数编码模块,包括:
[0048] 参数获取子模块,用于获取所述第一浮点数的符号位、所述第一浮点数的指数位、以及所述第一浮点数的底数位;
[0049] 移位确定子模块,用于根据所述预设倍数和所述第一浮点数的指数位,计算所述第一浮点数的底数位的移位方向和移位量;
[0050] 移位子模块,用于按照所述移位方向将所述第一浮点数的底数位移动所述移位量,得到第一编码数组。
[0051] 可选地,所述移位子模块,包括:
[0052] 模计算单元,用于将所述移位量进行取模计算,得到余数r和商q;
[0053] 对齐单元,用于按照所述移位方向将所述第一浮点数的底数位移动r位,得到对齐数据;
[0054] 转换单元,用于将所述对齐数据转换为字节,得到对齐数组;
[0055] 补齐单元,用于将所述对齐数组的高位进行补齐,得到预设长度的中间数组;
[0056] 移动单元,用于按照所述移位方向将所述中间数组整体移动q个字节,得到第一编码数组。
[0057] 可选地,所述装置还包括:
[0058] 数组求和模块,用于对所述第一编码数组和所述第二编码数组求和,得到结果数组;
[0059] 数据还原模块,用于将所述结果数组缩小预设倍数后转换为浮点类型,得到所述待加密数据。
[0060] 可选地,所述数据还原模块,包括:
[0061] 符号确定子模块,用于根据所述结果数组的首位,确定所述待加密数据的符号位;
[0062] 目标确定子模块,用于将所述结果数组中的有效位段转换为预设类型整数并取绝对值,得到目标位段;
[0063] 下标确定子模块,用于根据所述有效位段确定第一下标,以及根据所述目标位段确定第二下标;
[0064] 指数确定子模块,用于根据所述第一下标、所述第二下标、以及所述预设倍数,确定所述待加密数据的指数位;
[0065] 左移量确定子模块,用于根据所述有效位段的长度以及所述第二下标确定左移量;
[0066] 底数确定子模块,用于将所述目标位段向左移动所述左移量,得到所述待加密数据的底数位;
[0067] 数据拼接子模块,用于对所述待加密数据的符号位、所述待加密数据的指数位、以及所述待加密数据的底数位进行组合,得到所述待加密数据。
[0068] 再一方面,本发明实施例公开了一种用于数据处理的装置,所述装置包括有存储器,以及一个以上的程序,其中一个以上程序存储于存储器中,且经配置以由一个以上处理
器执行所述一个以上程序,所述一个以上程序包含用于进行如前述一个或多个所述的数据
处理方法的指令。
[0069] 又一方面,本发明实施例公开了一种机器可读介质,其上存储有指令,当所述指令由装置的一个或多个处理器执行时,使得装置执行如前述一个或多个所述的数据处理方
法。
[0070] 本发明实施例包括以下优点:
[0071] 本发明实施例提出了一种对浮点类型的待加密数据进行秘密分享的数据处理方法,该方法可应用于数据提供方。数据提供方根据待加密数据的数量级,随机生成第一浮点
数,根据待加密数据与第一浮点数的差可以得到第二浮点数。将所述第一浮点数转换为整
数类型的第一编码数组,以及将所述第二浮点数转换为整数类型的第二编码数组,得到的
第一编码数组和第二编码数组可以作为待加密数据的秘密分享结果发送给运算方参与运
算。本发明实施例可以扩展秘密分享算法的应用场景。此外,所述第一浮点数的数量级高于
或等于所述待加密数据的数量级,可以保证生成的秘密分享结果的精度。再者,在本发明实
施例中,除了结果输出外,只需申请常数次新内存,可以节省内存占用率,进而可以有效提
升对浮点类型的待加密数据进行编码和解码的效率,可以减轻数据提供方系统的负担,节
约资源与成本。

附图说明

[0072] 为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施
例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图
获得其他的附图。
[0073] 图1是本发明的一种数据处理方法实施例的步骤流程图;
[0074] 图2是本发明的一种float类型和double类型的编码规则示意图;
[0075] 图3是本发明的一种数据处理装置实施例的结构框图;
[0076] 图4是本发明的一种用于数据处理的装置800的框图;
[0077] 图5是本发明的一些实施例中服务器的结构示意图。

具体实施方式

[0078] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发
明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施
例,都属于本发明保护的范围。
[0079] 本发明的说明书和权利要求书中的术语“第一”、“第二”等是用于区别类似的对象,而不用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互
换,以便本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施,且“第一”、
“第二”等所区分的对象通常为一类,并不限定对象的个数,例如第一对象可以是一个,也可
以是多个。此外,说明书以及权利要求中的术语“和/或”用于描述关联对象的关联关系,表
示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三
种情况。字符“/”一般表示前后关联对象是一种“或”的关系。本发明实施例中术语“多个”是
指两个或两个以上,其它量词与之类似。
[0080] 方法实施例
[0081] 参照图1,示出了本发明的一种数据处理方法实施例的步骤流程图,所述方法可应用于数据提供方,所述方法具体可以包括如下步骤:
[0082] 步骤101、根据待加密数据的数量级,随机生成第一浮点数,所述第一浮点数的数量级高于或等于所述待加密数据的数量级;
[0083] 步骤102、确定第二浮点数,所述第一浮点数与所述第二浮点数的和等于所述待加密数据;
[0084] 步骤103、将所述第一浮点数转换为整数类型的第一编码数组,以及将所述第二浮点数转换为整数类型的第二编码数组;
[0085] 步骤104、将所述第一编码数组和所述第二编码数组发送至运算方参与运算。
[0086] 本发明实施例提供的数据处理方法可应用于数据提供方,可以对浮点类型的待加密数据进行编码,得到秘密分享结果。所述数据提供方可以为多方安全计算系统中的数据
提供方。
[0087] 所述多方安全计算系统是一种保护数据隐私安全的计算系统。本发明实施例对所述多方安全计算系统采用的安全计算协议不做限制,例如,所述多方安全计算系统可以基
于MPC(Secure Muti‑Party Computation,多方安全计算)协议,在基于MPC协议的多方安全
计算系统中,多个参与方可以在不泄漏自身数据的前提下,使用多方安全计算技术进行协
同计算得到计算结果,参与计算的数据、中间结果、以及最终结果可以为密文。当然,所述多
方安全计算系统还可以基于秘密分享、半同态、不经意传输等技术实现的多方安全计算协
议。
[0088] 所述数据提供方可以对浮点类型(如float类型或double类型)的待加密数据进行编码,得到第一编码数组和第二编码数组,将所述第一编码数组和第二编码数组作为所述
待加密数据的秘密分享结果发送给相应的运算方参与运算。所述运算方可以为所述多方安
全计算系统中的计算节点,参与的运算可以为安全计算任务中的运算。
[0089] 所述安全计算任务包括但不限于如下任意一项或多项:基于隐私保护的计算操作、基于隐私保护的模型训练及预测、基于隐私保护的数据库查询操作等等。其中,计算操
作包括但不限于:加、乘、比较等数字计算,以及与、或、非等逻辑计算等。可以理解,本发明
实施例对安全计算任务的具体类型不加以限制。
[0090] 在本发明实施例中,所述待加密数据可以为所述数据提供方持有的浮点类型的明文数据。
[0091] 具体地,对于待加密数据d,d为浮点类型的明文数据,首先,随机生成数量级相当于或高于d的数量级的第一浮点数x。然后,计算y=d‑x,得到第二浮点数y,使得x+y=d。最后,
将第一浮点数x转换为整数类型的第一编码数组,假设记为xBytes,以及将第二浮点数y转
换为整数类型的第二编码数组,假设记为yBytes。数据提供方可以将xBytes和yBytes作为d
的秘密分享结果发送给运算方。例如,将第一编码数组xBytes发送给运算方s1,将第二编码
数组yBytes发送给运算方s2。s1和s2可以基于各自持有的第一编码数组或者第二编码数组
进行协同计算,且s1和s2任意一方均不能利用自己持有的第一编码数组或者第二编码数组
恢复得到数据d的明文,可以保证运算的隐私安全。
[0092] 为保证秘密分享结果的精度,本发明实施例生成相当于或高于所述待加密数据的数量级的第一浮点数。进一步地,可以生成相当于或高于所述待加密数据4个数量级以内的
第一浮点数。其中,4个数量级仅作为一种示例,选择的数量级与秘密分享结果的精度相关,
数量级越高,精度越高,而且可以防止对原数据的还原或估计。但数量级越高,运算量也越
大。由于double类型的精度是52位,假如生成了比原数据大3个数量级的第一浮点数,做差
得到第二浮点数之后,第二浮点数的有效位数变为了(52‑lg1000/lg2),约为42,可以根据
需要取舍。
[0093] 在本发明的一种可选实施例中,所述将所述第一浮点数转换为整数类型的第一编码数组,以及将所述第二浮点数转换为整数类型的第二编码数组,可以包括:
[0094] 将所述第一浮点数放大预设倍数后转换为整数类型,得到第一编码数组,以及将所述第二浮点数放大预设倍数后转换为整数类型,得到第二编码数组。
[0095] 其中,所述整数类型指大整数(BigInteger)类型,如可以将第一浮点数和第二浮点数转换为128位的大整数。再将该大整数按照指定字节序转化为16个字节的数组,则第一
浮点数和第二浮点数分别对应16个字节的字节数组,即为秘密分享结果。其中,第一浮点数
转换后得到的16个字节的字节数组称为第一编码数组,第二浮点数转换后得到的16个字节
的字节数组称为第二编码数组。每个字节是8位,因此,第一编码数组和第二编码数组的长
度均为128位。当然,在实际应用中,并不限制第一编码数组和第二编码数组的长度。
[0096] 需要说明的是,本发明实施例对所述预设倍数的大小以及编码数组的长度不做限制。本发明实施例中主要以预设倍数为2^40,编码数组为128位的带符号整数(也即16个字
节的字节数组)为例。
[0097] 其中,预设倍数可以根据实际需求确定,只要能保证出现较少或不出现低位溢出即可。本发明实施例设置预设倍数为2^40是因为double有效位数是52位,int128有效位数
是128位,想要让这52位有效数据正好处于中间位置,那么应该左移(128‑52)/2=38位,但由
于40更便于直观理解与计算,并且是8的倍数,因此选择2^40为预设倍数。当然,该预设倍数
可以根据实际待加密数据的大小进行调整。如,也可以选择2^38等。
[0098] 在本发明的一种可选实施例中,所述将所述第一浮点数放大预设倍数后转换为整数类型,得到第一编码数组,包括:
[0099] 步骤S11、获取所述第一浮点数的符号位、所述第一浮点数的指数位、以及所述第一浮点数的底数位;
[0100] 步骤S12、根据所述预设倍数和所述第一浮点数的指数位,计算所述第一浮点数的底数位的移位方向和移位量;
[0101] 步骤S13、按照所述移位方向将所述第一浮点数的底数位移动所述移位量,得到第一编码数组。
[0102] 假设第一浮点数记为f,以及f的字节表示为fBytes,需要将f放大预设倍数(a倍)后转换为大整数。首先,获取f的符号位sign、指数位index、以及底数位base。然后,根据预
设倍数a和指数位index,计算出base的移位方向和移位量。移位方向包括左移或右移。最
后,将base左移(或右移)所述移位量,即可得到第一编码数组。
[0103] 将第二浮点数转换为第二编码数组的过程相类似。具体地,获取所述第二浮点数的符号位、所述第二浮点数的指数位、以及所述第二浮点数的底数位;根据所述预设倍数和
所述第二浮点数的指数位,计算所述第二浮点数的底数位的移位方向和移位量;按照所述
移位方向将所述第二浮点数的底数位移动所述移位量,得到第二编码数组。
[0104] float类型与double类型对应于不同长度的浮点数据,float类型为32位,double类型为64位。参照图2,示出了一种float类型和double类型的编码规则示意图。以double类
型为例,如图2所示,double类型的浮点数为64bit(位),最高位(第63位)为符号位,第0位到
第51位为底数位,第52位至第62位为指数位。
[0105] 一个示例中,以java编程语言中的double类型为例,假设预设倍数为2^40,需要将double类型的第一浮点数和第二浮点数转换为128位的带符号整数。需要说明的是,本发明
实施例并不限于java编程语言,本发明的数据处理方法可以适用于任意的编程语言,只要
浮点数的定义满足IEEE(Institute of Electrical and Electronics Engineers,电气与
电子工程师协会)二进制浮点数算术标准(IEEE 754)即可。
[0106] 如图2所示的double类型的浮点数,最高位是符号位,随后的11位是指数位,该指数是无符号数,该指数的大小为实际指数加上1023(如果是float类型,则加上128)。加上
1023目的是转化为正数。第52位是底数位,底数也是无符号数。
[0107] 需要说明的是,通过执行步骤S11至步骤S13,可以将任意的浮点数放大预设倍数并转换为大整数(BigInteger)类型的字节数组(如128位的编码数组)。
[0108] 以浮点数‑123.625为例,该浮点数是一个double类型的负数。负数的符号位为1,因此浮点数‑123.625的符号位(最高位)是1,将浮点数‑123.625转化为二进制表示为:
1111011.101,转化为科学记数法表示为:1.111011101*2^6。浮点数二进制的指数位为实际
的指数位加上1023。对于浮点数‑123.625,实际的指数位为6,需要加上1023,得到二进制的
指数位为1029。将1029表示为二进制为:10000000101。由于整数位始终为1,因此可以省略
不写。底数位的二进制表示为:111011101,其余补0,则浮点数‑123.625在内存中的存储形
式为:1 10000000101 1110111010000000000000000000000000000000000000000000。
[0109] 在具体实施中,可以利用0x8000000000000000、0x7ff0000000000000、以及0x000fffffffffffffL这三个掩码获取某个浮点数的符号位、指数位、以及底数位。
[0110] 对于浮点数‑123.625,可以利用0x8000000000000000、0x7ff0000000000000、以及0x000fffffffffffffL这三个掩码获取‑123.625的符号位sign为1,指数位index为
10000000101,以及底数位base为111011101000000000000000000000000000000000000000
0000。需要说明的是,对于double类型的浮点数,需要将符号位右移63位,指数位右移52位,
并将移位后的指数位减去1023可以得到实际的指数位。其中,将符号位右移63位,将指数位
右移52位,是因为符号位在最左边,为了使得符号位能被直观理解成0或1,所以要让符号位
最低位移到最右边。指数位同理。
[0111] 在获取浮点数‑123.625的符号位、指数位、以及底数位之后,根据所述预设倍数(如2^40倍)和所述浮点数‑123.625的指数位(如10000000101),计算所述浮点数‑123.625
的底数位base的移位方向和移位量。
[0112] 由于double类型浮点数的底数位指的是科学记数法下的小数部分,因此实际上需要在最高位前补1,并根据待加密数据的正负性取补码,随后将底数右移52位才能得到实际
的底数位,因此可以结合指数位index与预设倍数2^40,得到浮点数‑123.625的底数位base
的移位量为40+index‑52。如果该移位量是正数则移位方向为左移,如果该移位量是负数则
移位方向为右移。由于移位量为40+index‑52=40+6‑52=‑6,是负数,因此移位方向为右移,
移位量为6位。
[0113] 最后按照所述移位方向将所述浮点数‑123.625的底数位移动所述移位量,可以得到浮点数‑123.625的编码数组。
[0114] 对于浮点类型的待加密数据,在确定该待加密数据对应的第一浮点数和第二浮点数之后,可以采用上述方法将第一浮点数放大预设倍数并转换为大整数(BigInteger)类型
的字节数组(如128位的第一编码数组),以及将第二浮点数放大预设倍数并转换为大整数
(BigInteger)类型的字节数组(如128位的第二编码数组)。
[0115] 在本发明实施例中,对于浮点类型的待加密数据d,首先随机生成数量级与d相当(或高于)的第一浮点数x;然后计算y=d‑x,得到第二浮点数y;接下来分别将第一浮点数x和
第二浮点数y按照上述方法转换为大整数类型的字节编码数组(第一编码数组和第二编码
数组);最后将第一浮点数x转换得到的第一编码数组和第二浮点数y转换得到的第二编码
数组分别发送给运算方,即可实现浮点类型的待加密数据d的秘密分享,并将误差控制在可
控范围内。
[0116] 可以理解的是,d、x、y可以表示任意的浮点数,本发明对此不做限制。
[0117] 在本发明的一种可选实施例中,所述按照所述移位方向将所述第一浮点数的底数位移动所述移位量,得到第一编码数组,可以包括:
[0118] 步骤S21、将所述移位量进行取模计算,得到余数r和商q;
[0119] 步骤S22、按照所述移位方向将所述第一浮点数的底数位移动r位,得到对齐数据;
[0120] 步骤S23、将所述对齐数据转换为字节,得到对齐数组;
[0121] 步骤S24、将所述对齐数组的高位进行补齐,得到预设长度的中间数组;
[0122] 步骤S25、按照所述移位方向将所述中间数组整体移动q个字节,得到第一编码数组。
[0123] 在计算得到第一浮点数的底数位base的移位方向和移位量之后,可以执行步骤S21至步骤S25对第一浮点数的底数位base进行移位。需要说明的是,通过执行步骤S21至步
骤S25,可以将任意浮点数的底数位按照移位方向和移位量进行移位。
[0124] 首先将所述移位量进行取模计算,得到余数和商,其中,余数用r表示,商用q表示。具体地,将所述移位量进行模8计算,取余数r和商q。然后先将第一浮点数的底数位base按
照所述移位方向移动r位得到对齐数据base_align,这一步是为了将底数进行字节对齐,可
以通过字节数组整体移动r位实现字节对齐。由于对齐数据base_align是int64类型,需要
转换得到的第一编码数组为int128位的字节数组,因此,将所述对齐数据转换为字节,得到
对齐数组,并将所述对齐数组的高位进行补齐,得到预设长度(128位)的中间数组。最后按
照所述移位方向将所述中间数组整体移动q个字节,可以得到第一编码数组。将上述int128
位的中间数组的字节整体左移q个字节,如果数组高位越界,则抛出越界异常(右移低位越
界则不需要,直接舍弃即可)。移位后的数组即为编码数组。
[0125] 仍以浮点数‑123.625为例,计算得到浮点数‑123.625的底数位base的移位量为40+index‑52=‑6,也即需要右移6位。将该移位量进行模8计算,得到余数r=6,商q=0。首先将浮
点数‑123.625的底数位右移r位,得到对齐数据,表示为11111111100001000110000000000
000000000000000000000000000。将该对齐数据转化为字节,得到对齐数组,表示为[0, 0, 
0, 0, 96, ‑124, ‑1](前面是低位,后面是高位)。接下来将该对齐数组的高位进行补齐,
拼接为128位的中间数组,表示为[0, 0, 0, 0, 96, ‑124, ‑1, ‑1, ‑1, ‑1, ‑1, ‑1, ‑
1, ‑1, ‑1, ‑1]。最后将该中间数组整体右移q个字节,即可得到浮点数‑123.625的编码数
组,表示为[0, 0, 0, 0, 96, ‑124, ‑1, ‑1, ‑1, ‑1, ‑1, ‑1, ‑1, ‑1, ‑1, ‑1]。
[0126] 采用上述方法,对于待加密数据对应的第一浮点数和第二浮点数,可以将第一浮点数编码为第一编码数组,将第二浮点数编码为第二编码数组。
[0127] 在本发明的一种可选实施例中,所述方法还可以包括:
[0128] 步骤S31、对所述第一编码数组和所述第二编码数组求和,得到结果数组;
[0129] 步骤S32、将所述结果数组缩小预设倍数后转换为浮点类型,得到所述待加密数据。
[0130] 在本发明实施例中,将待加密数据(浮点数d)编码为第一编码数组和第二编码数组的过程称为编码过程,也可以称为加密过程,第一编码数组和第二编码数组为浮点数d的
秘密分享结果。此外,本发明实施例还可以将第一编码数组和第二编码数组恢复得到浮点
数d的明文,将该过程称为解码过程,也可以称为解密过程。
[0131] 假设将第一编码数组记为xBytes,将第二编码数组记为yBytes。如果将第一编码数组和第二编码数组分别缩小预设倍数后转换为浮点类型,再求和得到待加密数据的明
文,不仅需要分别执行两次重复的运算导致运算量较大,而且该过程可能会导致最终恢复
得到的待加密数据的明文精度有所损失。
[0132] 为了减少运算量并且避免精度损失,本发明实施例先对所述第一编码数组和所述第二编码数组求和,得到结果数组,该结果数组的精度没有损失。然后将所述结果数组缩小
预设倍数后转换为浮点类型,即可得到待加密数据的明文。该过程只需进行一次缩小预设
倍数以及转换为浮点类型的操作,可以极大减少运算量。
[0133] 在本发明的一种可选实施例中,所述对所述第一编码数组和所述第二编码数组求和,得到结果数组,可以包括:
[0134] 步骤S41:初始化进位carry=0,数组指针i=0,结果数组resBytes中的各元素置为0;
[0135] 步骤S42:如果i>=n,则跳转至步骤S47,n为所述第一编码数组和所述第二编码数组的长度;
[0136] 步骤S43:获取所述第一编码数组的第i个元素x以及所述第二编码数组的第i个元素y;
[0137] 步骤S44:如果x或y小于0,则将x或y转换为正数;
[0138] 步骤S45:对x、y、以及carry求和,得到sum,并根据sum的值设置resBytes的第i个元素;
[0139] 步骤S46:i自增1,跳转至步骤S42;
[0140] 步骤S47:输出结果数组resBytes。
[0141] 在本发明实施例中,第一编码数组和第二编码数组的长度相等,例如都是128位。
[0142] 以浮点类型的待加密数据为‑123.625为例,假设编码得到第一编码数组xBytes为[0, ‑61, 46, 79, ‑61, ‑102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],第二编码数组yBytes
为[‑1, 60, ‑47, ‑80, ‑100, ‑23, ‑2, ‑1, ‑1, ‑1, ‑1, ‑1, ‑1, ‑1, ‑1, ‑1]。
[0143] 首先初始化进位carry=0,初始化数组指针i=0,以及初始化结果数组resBytes中的各元素为0。
[0144] 第一轮循环中,获取第一编码数组xBytes的第i(i=1)个元素x以及所述第二编码数组yBytes的第i个元素y,则x=0,y=‑1。由于y小于0,则将y转换为正数,得到x=0,y=255。对
x、y、以及carry求和,得到sum=0+255+0=255。根据sum的值设置resBytes的第i个元素。由于
carry是sum与256的商,即进位数,因此如果此时sum大于或等于128,则将sum减256(因为
java内将byte数据类型视作有符号数),并将resBytes的第i个元素置为当前sum。在该示例
中,sum=x+y+carry=0+255+0=255,此时sum大于128,因此将sum减256得到sum=255‑256=‑1,
则将resBytes的第i(i=1)个元素置为当前sum,也即将resBytes的第1个元素置为‑1。在第
一轮循环中得到resBytes = [‑1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]。
[0145] 第二轮循环中,获取第一编码数组xBytes的第2个元素x以及所述第二编码数组yBytes的第2个元素y,则x=‑61,y=60。由于x小于0,则将x转换为正数,得到x =195,y=60。进
而得到sum=195+60+0‑256=‑1,carry=0。在第二轮循环中得到resBytes = [‑1, ‑1, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]。
[0146] 依次类推,直到i=16,可以得到最终的resBytes为[‑1, ‑1, ‑1, ‑1, 95, ‑124, ‑1, ‑1, ‑1, ‑1, ‑1, ‑1, ‑1, ‑1, ‑1, ‑1]。
[0147] 在对第一编码数组xBytes和第二编码数组yBytes求和,得到结果数组resBytes之后,将所述结果数组resBytes缩小预设倍数后转换为浮点类型,可以得到浮点类型的待加
密数据的明文。
[0148] 在本发明的一种可选实施例中,所述将所述结果数组缩小预设倍数后转换为浮点类型,得到所述待加密数据,可以包括:
[0149] 步骤S41、根据所述结果数组的首位,确定所述待加密数据的符号位;
[0150] 步骤S42、将所述结果数组中的有效位段转换为预设类型整数并取绝对值,得到目标位段;
[0151] 步骤S43、根据所述有效位段确定第一下标,以及根据所述目标位段确定第二下标;
[0152] 步骤S44、根据所述第一下标、所述第二下标、以及所述预设倍数,确定所述待加密数据的指数位;
[0153] 步骤S45、根据所述有效位段的长度以及所述第二下标确定左移量;
[0154] 步骤S46、将所述目标位段向左移动所述左移量,得到所述待加密数据的底数位;
[0155] 步骤S47、对所述待加密数据的符号位、所述待加密数据的指数位、以及所述待加密数据的底数位进行组合,得到所述待加密数据。
[0156] 具体地,根据所述结果数组resBytes的首位,判断正负性,可以确定需要恢复得到的待加密数据的符号位。
[0157] 由于结果数组resBytes是较高位整数,精确度一般高于float或double,因此需要对resBytes的精度进行修正,舍弃低位,保留高位,得到所述结果数组中的有效位段。具体
地,可以从结果数组resBytes的最低位开始,找到非零的最低有效位,并从最高位开始,找
到非0(负数为‑1)的最高有效位,得到有效位段,以及获取有效位段的长度baselen。将有效
位段转换为预设类型整数并取绝对值,得到目标位段。一个示例中,所述预设类型为long类
型。
[0158] 以结果数组resBytes为 [‑1, ‑1, ‑1, ‑1, 95, ‑124, ‑1, ‑1, ‑1, ‑1, ‑1, ‑1, ‑1, ‑1, ‑1, ‑1]为例,该结果数组的有效位段是[‑1, ‑1, ‑1, ‑1, 95, ‑124]。又如,
对于另一个结果数组[0, ‑61, 46, 79, ‑61, ‑102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
有效位段是[‑61, 46, 79, ‑61, ‑102]。
[0159] 以结果数组 [‑1, ‑1, ‑1, ‑1, 95, ‑124, ‑1, ‑1, ‑1, ‑1, ‑1, ‑1, ‑1, ‑1, ‑1, ‑1]为例,有效位段是[‑1, ‑1, ‑1, ‑1, 95, ‑124]。将该有效位段转换为long类型整
数并取绝对值,得到目标位段。具体地,将有效位段[‑1, ‑1, ‑1, ‑1, 95, ‑124]转换为
long类型整数为[‑1, ‑1, ‑1, ‑1, 95, ‑124, ‑1, ‑1],对该long类型整数取绝对值得到
目标位段为[1, 0, 0, 0, ‑96, 123, 0, 0]。该目标位段为该long类型整数在内存中的存
储形式。
[0160] 接下来根据所述有效位段确定第一下标,以及根据所述目标位段确定第二下标。其中,第一下标(记为i)为有效位段的最高位下标。在本示例中,有效位段[‑1, ‑1, ‑1, ‑
1, 95, ‑124]的最高位为‑124,因此,第一下标i(最高位下标)为5。
[0161] 进一步地,所述根据所述目标位段确定第二下标,可以包括:获取所述目标位段的有效最高位的字节;将所述字节循环右移,直到右移后的值为0,得到此时的右移次数;将所
述右移次数减1得到第二下标。
[0162] 例如,在本示例中,目标位段为[1, 0, 0, 0, ‑96, 123, 0, 0],获取该目标位段的有效最高位的字节为123。将该字节循环右移7次使得123的值变为0,因此,可以确定第二
下标(记为k)为k=7‑1=6。
[0163] 根据所述第一下标、所述第二下标、以及所述预设倍数,可以确定所述待加密数据的指数位。
[0164] 具体地,待加密数据的指数位=8⨉i+k‑40+1023。在本示例中,i=5,k=6,因此,待加密数据的指数位=8⨉5+6‑40+1023=1029。
[0165] 根据所述有效位段的长度baselen以及所述第二下标k可以确定左移量。具体地,左移量=(8‑k)+8⨉ (8‑baselen)‑12。在本示例中,baselen=6,k=6,因此,左移量=(8‑6)+8
⨉ (8‑6)‑12=6。其中,减12是因为double类型的底数最高位相对于其长度64存在12位的差
值。
[0166] 将所述目标位段向左移动所述左移量,可以得到所述待加密数据的底数位。在本示例中,将目标位段[1, 0, 0, 0, ‑96, 123, 0, 0]左移6位,可以得到底数位为
8699335998963776。
[0167] 在确定待加密数据的符号位、指数位、以及底数位之后,对所述待加密数据的符号位、指数位、以及底数位进行组合,即可得到所述待加密数据的明文。
[0168] 在本示例中,结果数组 [‑1, ‑1, ‑1, ‑1, 95, ‑124, ‑1, ‑1, ‑1, ‑1, ‑1, ‑1, ‑1, ‑1, ‑1, ‑1]的首位是负,因此,待加密数据为负数,可以确定待加密数据的符号位
为1。上述已经确定待加密数据的指数位为1029,转换为二进制是10000000101;已经确定待
加密数据的底数位为8699335998963776,转换为二进制是111101110100000000000000000
00000000000000000001000000。将符号位、指数位、底数位拼接可以得到待加密数据的二进
制表示,转换为double类型为‑123.62500000000091,该数值即为待加密数据的明文,误差
在允许范围内。
[0169] 本发明实施例中主要以double类型的浮点数为例进行说明,float类型的浮点数的处理过程类似,相互参照即可。
[0170] 综上,本发明实施例提出了一种对浮点类型的待加密数据进行秘密分享的数据处理方法,该方法可应用于数据提供方。数据提供方根据待加密数据的数量级,随机生成第一
浮点数,根据待加密数据与第一浮点数的差可以得到第二浮点数。将所述第一浮点数转换
为整数类型的第一编码数组,以及将所述第二浮点数转换为整数类型的第二编码数组,得
到的第一编码数组和第二编码数组可以作为待加密数据的秘密分享结果发送给运算方参
与运算。本发明实施例可以扩展秘密分享算法的应用场景。此外,所述第一浮点数的数量级
高于或等于所述待加密数据的数量级,可以保证生成的秘密分享结果的精度。再者,在本发
明实施例中,除了结果输出外,只需申请常数次新内存,可以节省内存占用率,进而可以有
效提升对浮点类型的待加密数据进行编码和解码的效率,可以减轻数据提供方系统的负
担,节约资源与成本。
[0171] 需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依
据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该
知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施
例所必须的。
[0172] 装置实施例
[0173] 参照图3,示出了本发明的一种数据处理装置实施例的结构框图,所述装置可应用于数据提供方,所述装置具体可以包括:
[0174] 第一浮点数生成模块301,用于根据待加密数据的数量级,随机生成第一浮点数,所述第一浮点数的数量级高于或等于所述待加密数据的数量级;
[0175] 第二浮点数生成模块302,用于确定第二浮点数,所述第一浮点数与所述第二浮点数的和等于所述待加密数据;
[0176] 浮点数编码模块303,用于将所述第一浮点数转换为整数类型的第一编码数组,以及将所述第二浮点数转换为整数类型的第二编码数组;
[0177] 结果发送模块304,用于将所述第一编码数组和所述第二编码数组发送至运算方参与运算。
[0178] 可选地,所述浮点数编码模块,具体用于将所述第一浮点数放大预设倍数后转换为整数类型,得到第一编码数组,以及将所述第二浮点数放大预设倍数后转换为整数类型,
得到第二编码数组。
[0179] 可选地,所述浮点数编码模块,包括:
[0180] 参数获取子模块,用于获取所述第一浮点数的符号位、所述第一浮点数的指数位、以及所述第一浮点数的底数位;
[0181] 移位确定子模块,用于根据所述预设倍数和所述第一浮点数的指数位,计算所述第一浮点数的底数位的移位方向和移位量;
[0182] 移位子模块,用于按照所述移位方向将所述第一浮点数的底数位移动所述移位量,得到第一编码数组。
[0183] 可选地,所述移位子模块,包括:
[0184] 模计算单元,用于将所述移位量进行取模计算,得到余数r和商q;
[0185] 对齐单元,用于按照所述移位方向将所述第一浮点数的底数位移动r位,得到对齐数据;
[0186] 转换单元,用于将所述对齐数据转换为字节,得到对齐数组;
[0187] 补齐单元,用于将所述对齐数组的高位进行补齐,得到预设长度的中间数组;
[0188] 移动单元,用于按照所述移位方向将所述中间数组整体移动q个字节,得到第一编码数组。
[0189] 可选地,所述装置还包括:
[0190] 数组求和模块,用于对所述第一编码数组和所述第二编码数组求和,得到结果数组;
[0191] 数据还原模块,用于将所述结果数组缩小预设倍数后转换为浮点类型,得到所述待加密数据。
[0192] 可选地,所述数据还原模块,包括:
[0193] 符号确定子模块,用于根据所述结果数组的首位,确定所述待加密数据的符号位;
[0194] 目标确定子模块,用于将所述结果数组中的有效位段转换为预设类型整数并取绝对值,得到目标位段;
[0195] 下标确定子模块,用于根据所述有效位段确定第一下标,以及根据所述目标位段确定第二下标;
[0196] 指数确定子模块,用于根据所述第一下标、所述第二下标、以及所述预设倍数,确定所述待加密数据的指数位;
[0197] 左移量确定子模块,用于根据所述有效位段的长度以及所述第二下标确定左移量;
[0198] 底数确定子模块,用于将所述目标位段向左移动所述左移量,得到所述待加密数据的底数位;
[0199] 数据拼接子模块,用于对所述待加密数据的符号位、所述待加密数据的指数位、以及所述待加密数据的底数位进行组合,得到所述待加密数据。
[0200] 可选地,所述数组求和模块,具体用于执行如下步骤:
[0201] 步骤1:初始化进位carry=0,数组指针i=0,结果数组resBytes中的各元素置为0;
[0202] 步骤2:如果i>=n,则跳转至步骤7,n为所述第一编码数组和所述第二编码数组的长度;
[0203] 步骤3:获取所述第一编码数组的第i个元素x以及所述第二编码数组的第i个元素y;
[0204] 步骤4:如果x或y小于0,则将x或y转换为正数;
[0205] 步骤5:对x、y、以及carry求和,得到sum,并根据sum的值设置resBytes的第i个元素;
[0206] 步骤6:i自增1,跳转至步骤2;
[0207] 步骤7:输出结果数组resBytes。
[0208] 本发明实施例提出了一种对浮点类型的待加密数据进行秘密分享的数据处理方法,该方法可应用于数据提供方。数据提供方根据待加密数据的数量级,随机生成第一浮点
数,根据待加密数据与第一浮点数的差可以得到第二浮点数。将所述第一浮点数转换为整
数类型的第一编码数组,以及将所述第二浮点数转换为整数类型的第二编码数组,得到的
第一编码数组和第二编码数组可以作为待加密数据的秘密分享结果发送给运算方参与运
算。本发明实施例可以扩展秘密分享算法的应用场景。此外,所述第一浮点数的数量级高于
或等于所述待加密数据的数量级,可以保证生成的秘密分享结果的精度。再者,在本发明实
施例中,除了结果输出外,只需申请常数次新内存,可以节省内存占用率,进而可以有效提
升对浮点类型的待加密数据进行编码和解码的效率,可以减轻数据提供方系统的负担,节
约资源与成本。
[0209] 对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0210] 本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
[0211] 关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
[0212] 本发明实施例提供了一种用于数据处理的装置,应用于数据提供方,所述装置包括有存储器,以及一个以上的程序,其中一个以上程序存储于存储器中,且经配置以由一个
以上处理器执行所述一个以上程序包含用于进行以下操作的指令:
[0213] 根据待加密数据的数量级,随机生成第一浮点数,所述第一浮点数的数量级高于或等于所述待加密数据的数量级;
[0214] 确定第二浮点数,所述第一浮点数与所述第二浮点数的和等于所述待加密数据;
[0215] 将所述第一浮点数转换为整数类型的第一编码数组,以及将所述第二浮点数转换为整数类型的第二编码数组;
[0216] 将所述第一编码数组和所述第二编码数组发送至运算方参与运算。
[0217] 可选地,所述将所述第一浮点数转换为整数类型的第一编码数组,以及将所述第二浮点数转换为整数类型的第二编码数组,包括:
[0218] 将所述第一浮点数放大预设倍数后转换为整数类型,得到第一编码数组,以及将所述第二浮点数放大预设倍数后转换为整数类型,得到第二编码数组。
[0219] 可选地,所述将所述第一浮点数放大预设倍数后转换为整数类型,得到第一编码数组,包括:
[0220] 获取所述第一浮点数的符号位、所述第一浮点数的指数位、以及所述第一浮点数的底数位;
[0221] 根据所述预设倍数和所述第一浮点数的指数位,计算所述第一浮点数的底数位的移位方向和移位量;
[0222] 按照所述移位方向将所述第一浮点数的底数位移动所述移位量,得到第一编码数组。
[0223] 可选地,所述按照所述移位方向将所述第一浮点数的底数位移动所述移位量,得到第一编码数组,包括:
[0224] 将所述移位量进行取模计算,得到余数r和商q;
[0225] 按照所述移位方向将所述第一浮点数的底数位移动r位,得到对齐数据;
[0226] 将所述对齐数据转换为字节,得到对齐数组;
[0227] 将所述对齐数组的高位进行补齐,得到预设长度的中间数组;
[0228] 按照所述移位方向将所述中间数组整体移动q个字节,得到第一编码数组。
[0229] 可选地,所述装置还经配置以由一个以上处理器执行所述一个以上程序包含用于进行以下操作的指令:
[0230] 对所述第一编码数组和所述第二编码数组求和,得到结果数组;
[0231] 将所述结果数组缩小预设倍数后转换为浮点类型,得到所述待加密数据。
[0232] 可选地,所述将所述结果数组缩小预设倍数后转换为浮点类型,得到所述待加密数据,包括:
[0233] 根据所述结果数组的首位,确定所述待加密数据的符号位;
[0234] 将所述结果数组中的有效位段转换为预设类型整数并取绝对值,得到目标位段;
[0235] 根据所述有效位段确定第一下标,以及根据所述目标位段确定第二下标;
[0236] 根据所述第一下标、所述第二下标、以及所述预设倍数,确定所述待加密数据的指数位;
[0237] 根据所述有效位段的长度以及所述第二下标确定左移量;
[0238] 将所述目标位段向左移动所述左移量,得到所述待加密数据的底数位;
[0239] 对所述待加密数据的符号位、所述待加密数据的指数位、以及所述待加密数据的底数位进行组合,得到所述待加密数据。
[0240] 可选地,所述对所述第一编码数组和所述第二编码数组求和,得到结果数组,包括:
[0241] 步骤1:初始化进位carry=0,数组指针i=0,结果数组resBytes中的各元素置为0;
[0242] 步骤2:如果i>=n,则跳转至步骤7,n为所述第一编码数组和所述第二编码数组的长度;
[0243] 步骤3:获取所述第一编码数组的第i个元素x以及所述第二编码数组的第i个元素y;
[0244] 步骤4:如果x或y小于0,则将x或y转换为正数;
[0245] 步骤5:对x、y、以及carry求和,得到sum,并根据sum的值设置resBytes的第i个元素;
[0246] 步骤6:i自增1,跳转至步骤2;
[0247] 步骤7:输出结果数组resBytes。
[0248] 图4是根据一示例性实施例示出的一种用于数据处理的装置800的框图。例如,装置800可以是移动电话,计算机,数字广播终端,消息收发设备,游戏控制台,平板设备,医疗
设备,健身设备,个人数字助理等。
[0249] 参照图4,装置800可以包括以下一个或多个组件:处理组件802,存储器804,电源组件806,多媒体组件808,音频组件810,输入/输出(I/ O)的接口812,传感器组件814,以及
通信组件816。
[0250] 处理组件802通常控制装置800的整体操作,诸如与显示,电话呼叫,数据通信,相机操作和记录操作相关联的操作。处理元件802可以包括一个或多个处理器820来执行指
令,以完成上述的方法的全部或部分步骤。此外,处理组件802可以包括一个或多个模块,便
于处理组件802和其他组件之间的交互。例如,处理组件802可以包括多媒体模块,以方便多
媒体组件808和处理组件802之间的交互。
[0251] 存储器804被配置为存储各种类型的数据以支持在设备800的操作。这些数据的示例包括用于在装置800上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消
息,图片,视频等。存储器804可以由任何类型的易失性或非易失性存储设备或者它们的组
合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编
程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储
器,磁盘或光盘。
[0252] 电源组件806为装置800的各种组件提供电力。电源组件806可以包括电源管理系统,一个或多个电源,及其他与为装置800生成、管理和分配电力相关联的组件。
[0253] 多媒体组件808包括在所述装置800和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏
幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感
器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作
的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。在一些实施例中,多媒
体组件808包括一个前置摄像头和/或后置摄像头。当设备800处于操作模式,如拍摄模式或
视频模式时,前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置摄像头和
后置摄像头可以是一个固定的光学透镜系统或具有焦距和光学变焦能力。
[0254] 音频组件810被配置为输出和/或输入音频信号。例如,音频组件810包括一个麦克风(MIC),当装置800处于操作模式,如呼叫模式、记录模式和语音信息处理模式时,麦克风
被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器804或经由通
信组件816发送。在一些实施例中,音频组件810还包括一个扬声器,用于输出音频信号。
[0255] I/ O接口812为处理组件802和外围接口模块之间提供接口,上述外围接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、启动按钮和锁
定按钮。
[0256] 传感器组件814包括一个或多个传感器,用于为装置800提供各个方面的状态评估。例如,传感器组件814可以检测到设备800的打开/关闭状态,组件的相对定位,例如所述
组件为装置800的显示器和小键盘,传感器组件814还可以检测装置800或装置800一个组件
的位置改变,用户与装置800接触的存在或不存在,装置800方位或加速/减速和装置800的
温度变化。传感器组件814可以包括接近传感器,被配置用来在没有任何的物理接触时检测
附近物体的存在。传感器组件814还可以包括光传感器,如CMOS或CCD图像传感器,用于在成
像应用中使用。在一些实施例中,该传感器组件814还可以包括加速度传感器,陀螺仪传感
器,磁传感器,压力传感器或温度传感器。
[0257] 通信组件816被配置为便于装置800和其他设备之间有线或无线方式的通信。装置800可以接入基于通信标准的无线网络,如WiFi,2G或3G,或它们的组合。在一个示例性实施
例中,通信组件816经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。
在一个示例性实施例中,所述通信组件816还包括近场通信(NFC)模块,以促进短程通信。例
如,在NFC模块可基于射频信息处理(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技
术,蓝牙(BT)技术和其他技术来实现。
[0258] 在示例性实施例中,装置800可以被一个或多个应用专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑器件(PLD)、现场可编程门阵列
(FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述方法。
[0259] 在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器804,上述指令可由装置800的处理器820执行以完成上述方法。例如,
所述非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD‑ROM、磁带、软盘
和光数据存储设备等。
[0260] 图5是本发明的一些实施例中服务器的结构示意图。该服务器1900可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上中央处理器(central processing 
units,CPU)1922(例如,一个或一个以上处理器)和存储器1932,一个或一个以上存储应用
程序1942或数据1944的存储介质1930(例如一个或一个以上海量存储设备)。其中,存储器
1932和存储介质1930可以是短暂存储或持久存储。存储在存储介质1930的程序可以包括一
个或一个以上模块(图示没标出),每个模块可以包括对服务器中的一系列指令操作。更进
一步地,中央处理器1922可以设置为与存储介质1930通信,在服务器1900上执行存储介质
1930中的一系列指令操作。
[0261] 服务器1900还可以包括一个或一个以上电源1926,一个或一个以上有线或无线网络接口1950,一个或一个以上输入输出接口1958,一个或一个以上键盘1956,和/或,一个或
一个以上操作系统1941,例如Windows ServerTM,Mac OS XTM,UnixTM, LinuxTM,
FreeBSDTM等等。
[0262] 一种非临时性计算机可读存储介质,当所述存储介质中的指令由装置(服务器或者终端)的处理器执行时,使得装置能够执行图1所示的数据处理方法。
[0263] 一种非临时性计算机可读存储介质,当所述存储介质中的指令由装置(服务器或者终端)的处理器执行时,使得装置能够执行一种数据处理方法,所述方法包括:根据待加
密数据的数量级,随机生成第一浮点数,所述第一浮点数的数量级高于或等于所述待加密
数据的数量级;确定第二浮点数,所述第一浮点数与所述第二浮点数的和等于所述待加密
数据;将所述第一浮点数转换为整数类型的第一编码数组,以及将所述第二浮点数转换为
整数类型的第二编码数组;将所述第一编码数组和所述第二编码数组发送至运算方参与运
算。
[0264] 本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本发明旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或
者适应性变化遵循本发明的一般性原理并包括本公开未公开的本技术领域中的公知常识
或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的
权利要求指出。
[0265] 应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。
[0266] 以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
[0267] 以上对本发明所提供的一种数据处理方法、一种数据处理装置和一种用于数据处理的装置,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐
述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的
一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所
述,本说明书内容不应理解为对本发明的限制。