一种安全两方比较方法及系统转让专利

申请号 : CN202111344055.0

文献号 : CN113792322B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 石宁姜冲李天莹朱晓罡于中磊

申请人 : 南京可信区块链与算法经济研究院有限公司

摘要 :

本申请提供一种安全两方比较方法及系统。所述比较方法包括:第一方和第二方分别按照各自预设的加密规则对持有数据进行加密,并利用各自生成的随机向量对各自加密后的持有数据进行处理,分别得到第一目标向量和第二目标向量,第一方将第一目标向量发送给第二方,第二方再结合自身的随机向量生成第三目标向量,并发送给第一方,第一方再结合自身的随机向量生成第四目标向量,并发送给第二方,第二方再结合第二目标向量生成差值向量,如果差值向量中存在值为零的元素,则判定第一方持有数据大于第二方持有数据。整个比较方法中不涉及幂模运算,两方只需进行常数次通讯,即可在不暴露自身持有数据大小的情况下进行比较,计算效率和通信效率均较高。

权利要求 :

1.一种安全两方比较方法,其特征在于,包括:第一方按照第一预设加密规则,对第一数据进行加密处理,得到第一加密向量;

所述第一方根据随机生成的第一随机向量,以及所述第一加密向量,生成第一目标向量;

第二方按照第二预设加密规则,对第二数据进行加密处理,得到第二加密向量;

所述第二方根据随机生成的第二随机向量,以及所述第二加密向量,生成第二目标向量;

所述第二方根据所述第一目标向量以及所述第二随机向量,生成第三目标向量;

所述第一方根据所述第三目标向量以及所述第一随机向量,生成第四目标向量;

所述第二方根据所述第四目标向量以及所述第二目标向量,生成差值向量;

所述第二方判断所述差值向量中是否存在值为零的元素,若存在,则判定所述第一数据大于所述第二数据;或者,若不存在,则判定所述第一数据小于或等于所述第二数据;

其中,所述第一方按照第一预设加密规则,对第一数据进行加密处理,得到第一加密向量,包括:

第一方对第一数据进行二进制转换、长度调整和补位操作,得到第一中间数据,所述第一中间数据的二进制长度为补位目标长度,所述补位目标长度比预设的目标长度多一位,所述补位操作为在二进制转换和长度调整后的数据的最高位之前补一;

所述第一方对所述第一中间数据进行1编码,得到第一编码集合;

所述第一方对所述第一编码集合中的每一个元素进行数值转换处理,得到第一加密向量;

所述第一方根据随机生成的第一随机向量,以及所述第一加密向量,生成第一目标向量,包括:

所述第一方对所述第一加密向量进行转置,得到第一转置向量;

所述第一方将所述第一转置向量与随机生成的第一随机向量进行向量点乘运算,生成第一目标向量;

所述第二方根据所述第一目标向量以及所述第二随机向量,生成第三目标向量,包括:所述第二方将所述第一目标向量与所述第二随机向量进行向量点乘运算,生成第三目标向量;

所述第一方根据所述第三目标向量以及所述第一随机向量,生成第四目标向量,包括:所述第一方获取所述第一随机向量的第一逆向量;

所述第一方将所述第一逆向量与所述第三目标向量进行向量点乘运算,生成第四目标向量;

所述第二方按照第二预设加密规则,对第二数据进行加密处理,得到第二加密向量,包括:

第二方对第二数据进行二进制转换、长度调整和所述补位操作,得到第二中间数据,所述第二中间数据的二进制长度为所述补位目标长度;

所述第二方对所述第二中间数据进行0编码,得到第二编码集合;

所述第二方对所述第二编码集合中的每一个元素进行数值转换处理,得到第二加密向量;

所述第二方根据随机生成的第二随机向量,以及所述第二加密向量,生成第二目标向量,包括:

所述第二方对所述第二加密向量进行转置,得到第二转置向量;

所述第二方将所述第二转置向量与随机生成的第二随机向量进行向量点乘运算,生成第二目标向量;

所述第一方对所述第一中间数据进行1编码,得到第一编码集合,包括:所述第一方按照从最高位至最低位的顺序,依次判断所述第一中间数据中除最高位以外的每一位的数据是否为1;

如果任一目标位的数据为1,则所述第一方获取所述第一中间数据中位于目标位之前的所有数据,将其作为编码元素,并继续判断目标位的后一位是否为1;如果任一目标位数据不为1,则所述第一方将极大值数据作为编码元素,并继续判断目标位的后一位是否为1,直至完成所述第一中间数据的最末位的判断,其中,所述极大值数据为所述补位目标长度所能表示的最大二进制数据;

按照获取顺序,所述第一方将各个编码元素共同排列为第一编码集合;

所述第二方对所述第二中间数据进行0编码,得到第二编码集合,包括:所述第二方按照从最高位至最低位的顺序,依次判断所述第二中间数据中除最高位以外的每一位的数据是否为0;

如果任一目标位的数据为0,则所述第二方获取所述第二中间数据中位于目标位之前的所有数据,将其作为编码元素,并继续判断目标位的后一位是否为0;如果任一目标位数据不为0,则所述第二方将极小值数据作为编码元素,并继续判断目标位的后一位是否为0,直至完成所述第二中间数据的最末位的判断,其中,所述极小值数据为所述补位目标长度所能表示的最小非负二进制数据;

按照获取顺序,所述第二方将各个编码元素共同排列为第二编码集合。

2.一种安全两方比较系统,其特征在于,包括第一方和第二方,所述第一方包括依次连接的第一加密向量生成模块、第一目标向量生成模块和第四目标向量生成模块,所述第二方包括依次连接的第二加密向量生成模块、第二目标向量生成模块和第三目标向量生成模块,所述第三目标向量生成模块还分别与所述第一目标向量生成模块和所述第四目标向量生成模块连接;

所述第二方还包括依次连接的差值向量生成模块和判定模块,所述差值向量生成模块还分别与所述第二目标向量生成模块和所述第四目标向量生成模块连接;其中:所述第一加密向量生成模块,用于按照第一预设加密规则,对第一数据进行加密处理,得到第一加密向量;

所述第一目标向量生成模块,用于根据随机生成的第一随机向量,以及所述第一加密向量,生成第一目标向量;

所述第二加密向量生成模块,用于按照第二预设加密规则,对第二数据进行加密处理,得到第二加密向量;

所述第二目标向量生成模块,用于根据随机生成的第二随机向量,以及所述第二加密向量,生成第二目标向量;

所述第三目标向量生成模块,用于根据所述第一目标向量以及所述第二随机向量,生成第三目标向量;

所述第四目标向量生成模块,用于根据所述第三目标向量以及所述第一随机向量,生成第四目标向量;

所述差值向量生成模块,用于根据所述第四目标向量以及所述第二目标向量,生成差值向量;

所述判定模块,用于判断所述差值向量中是否存在值为零的元素,若存在,则判定所述第一数据大于所述第二数据;或者,若不存在,则判定所述第一数据小于或等于所述第二数据;

其中,所述第一加密向量生成模块包括:第一转换子模块,用于对第一数据进行二进制转换、长度调整和补位操作,得到第一中间数据,所述第一中间数据的二进制长度为补位目标长度,所述补位目标长度比预设的目标长度多一位,所述补位操作为在二进制转换和长度调整后的数据的最高位之前补一;

1编码子模块,用于对所述第一中间数据进行1编码,得到第一编码集合;

第一数值转换子模块,用于对所述第一编码集合中的每一个元素进行数值转换处理,得到第一加密向量;

所述第一目标向量生成模块包括:第一转置子模块,用于对所述第一加密向量进行转置,得到第一转置向量;

第一点乘子模块,用于将所述第一转置向量与随机生成的第一随机向量进行向量点乘运算,生成第一目标向量;

所述第三目标向量生成模块包括:第二点乘子模块,用于将所述第一目标向量与所述第二随机向量进行向量点乘运算,生成第三目标向量;

所述第四目标向量生成模块包括:逆向量获取子模块,用于获取所述第一随机向量的第一逆向量;

第三点乘子模块,用于将所述第一逆向量与所述第三目标向量进行向量点乘运算,生成第四目标向量;

所述第二加密向量生成模块包括:第二转换子模块,用于对第二数据进行二进制转换、长度调整和所述补位操作,得到第二中间数据,所述第二中间数据的二进制长度为所述补位目标长度;

0编码子模块,用于对所述第二中间数据进行0编码,得到第二编码集合;

第二数值转换子模块,用于对所述第二编码集合中的每一个元素进行数值转换处理,得到第二加密向量;

所述第二目标向量生成模块包括:第二转置子模块,用于对所述第二加密向量进行转置,得到第二转置向量;

第四点乘子模块,用于将所述第二转置向量与随机生成的第二随机向量进行向量点乘运算,生成第二目标向量;

所述1编码子模块包括:

第一判断单元,用于按照从最高位至最低位的顺序,依次判断所述第一中间数据中除最高位以外每一位的数据是否为1;

第一编码元素获取单元,用于如果任一目标位的数据为1,则获取所述第一中间数据中位于目标位之前的所有数据,将其作为编码元素,并继续判断目标位的后一位是否为1;如果任一目标位数据不为1,则将极大值数据作为编码元素,并继续判断目标位的后一位是否为1,直至完成所述第一中间数据的最末位的判断,其中,所述极大值数据为所述补位目标长度所能表示的最大二进制数据;

第一编码集合生成单元,用于按照获取顺序,将各个编码元素共同排列为第一编码集合;

所述0编码子模块包括:

第二判断单元,用于按照从最高位至最低位的顺序,依次判断所述第二中间数据中除最高位以外每一位的数据是否为0;

第二编码元素获取单元,用于如果任一目标位的数据为0,则获取所述第二中间数据中位于目标位之前的所有数据,将其作为编码元素,并继续判断目标位的后一位是否为0;如果任一目标位数据不为0,则将极小值数据作为编码元素,并继续判断目标位的后一位是否为0,直至完成所述第二中间数据的最末位的判断,其中,所述极小值数据为所述补位目标长度所能表示的最小非负二进制数据;

第二编码集合生成单元,用于按照获取顺序,将各个编码元素共同排列为第二编码集合。

说明书 :

一种安全两方比较方法及系统

技术领域

[0001] 本申请涉及信息安全技术领域,特别涉及一种安全两方比较方法及系统。

背景技术

[0002] 随着电子商务的迅速发展,涉及敏感数据的计算通常会在网上进行,比如可以在计算机上完成交易。为了更好地保护用户隐私和自身利益,在电子商务中涉及需要比较数
据大小的情况下,例如投标或者拍卖,用户通常希望可以不泄露自身数据信息,并且不借助
第三方来实现比较数据大小的目的。类似于著名的百万富翁问题,即两个百万富翁都想比
较到底谁更富有,但是又都不想让别人知道自己有多少钱,如此,需要在保密各自信息以及
没有可信的第三方的情况下,比较两方所拥有的数据信息的大小。
[0003] 目前解决百万富翁问题所采用的安全两方比较方法,主要是基于不经意传输技术并结合乘法和减法同态加密计算,提出安全两方计算协议,安全两方计算协议经过乘法和
减法同态加密和解密计算后得到计算结果,最终根据计算结果所在区间,确定两方的数据
大小。采用此种安全两方比较方法,由于主要使用同态加密计算,因此在计算过程中涉及较
多的幂模计算,整个方法的计算效率和通信效率均较低。

发明内容

[0004] 本申请提供了一种安全两方比较方法及系统,可用于解决现有安全两方比较方法的计算效率和通信效率均较低的技术问题。
[0005] 第一方面,本申请实施例提供一种安全两方比较方法,包括:
[0006] 第一方按照第一预设加密规则,对第一数据进行加密处理,得到第一加密向量;
[0007] 所述第一方根据随机生成的第一随机向量,以及所述第一加密向量,生成第一目标向量;
[0008] 第二方按照第二预设加密规则,对第二数据进行加密处理,得到第二加密向量;
[0009] 所述第二方根据随机生成的第二随机向量,以及所述第二加密向量,生成第二目标向量;
[0010] 所述第二方根据所述第一目标向量以及所述第二随机向量,生成第三目标向量;
[0011] 所述第一方根据所述第三目标向量以及所述第一随机向量,生成第四目标向量;
[0012] 所述第二方根据所述第四目标向量以及所述第二目标向量,生成差值向量;
[0013] 所述第二方判断所述差值向量中是否存在值为零的元素,若存在,则判定所述第一数据大于所述第二数据;或者,若不存在,则判定所述第一数据小于或等于所述第二数
据。
[0014] 结合第一方面,在第一方面的一种可实现方式中,所述第一方按照第一预设加密规则,对第一数据进行加密处理,得到第一加密向量,包括:
[0015] 第一方对第一数据进行二进制转换、长度调整和补位操作,得到第一中间数据,所述第一中间数据的二进制长度为补位目标长度,所述补位目标长度比预设的目标长度多一
位,所述补位操作为在二进制转换和长度调整后的数据的最高位之前补一;
[0016] 所述第一方对所述第一中间数据进行1编码,得到第一编码集合;
[0017] 所述第一方对所述第一编码集合中的每一个元素进行数值转换处理,得到第一加密向量。
[0018] 结合第一方面,在第一方面的一种可实现方式中,所述第一方对所述第一中间数据进行1编码,得到第一编码集合,包括:
[0019] 所述第一方按照从最高位至最低位的顺序,依次判断所述第一中间数据中除最高位以外的每一位的数据是否为1;
[0020] 如果任一目标位的数据为1,则所述第一方获取所述第一中间数据中位于目标位之前的所有数据,将其作为编码元素,并继续判断目标位的后一位是否为1;如果任一目标
位数据不为1,则所述第一方将极大值数据作为编码元素,并继续判断目标位的后一位是否
为1,直至完成所述第一中间数据的最末位的判断,其中,所述极大值数据为所述补位目标
长度所能表示的最大二进制数据;
[0021] 按照获取顺序,所述第一方将各个编码元素共同排列为第一编码集合。
[0022] 结合第一方面,在第一方面的一种可实现方式中,所述第一方根据随机生成的第一随机向量,以及所述第一加密向量,生成第一目标向量,包括:
[0023] 所述第一方对所述第一加密向量进行转置,得到第一转置向量;
[0024] 所述第一方将所述第一转置向量与随机生成的第一随机向量进行向量点乘运算,生成第一目标向量。
[0025] 结合第一方面,在第一方面的一种可实现方式中,所述第二方根据所述第一目标向量以及所述第二随机向量,生成第三目标向量,包括:
[0026] 所述第二方将所述第一目标向量与所述第二随机向量进行向量点乘运算,生成第三目标向量。
[0027] 结合第一方面,在第一方面的一种可实现方式中,所述第一方根据所述第三目标向量以及所述第一随机向量,生成第四目标向量,包括:
[0028] 所述第一方获取所述第一随机向量的第一逆向量;
[0029] 所述第一方将所述第一逆向量与所述第三目标向量进行向量点乘运算,生成第四目标向量。
[0030] 结合第一方面,在第一方面的一种可实现方式中,所述第二方按照第二预设加密规则,对第二数据进行加密处理,得到第二加密向量,包括:
[0031] 第二方对第二数据进行二进制转换、长度调整和所述补位操作,得到第二中间数据,所述第二中间数据的二进制长度为所述补位目标长度;
[0032] 所述第二方对所述第二中间数据进行0编码,得到第二编码集合;
[0033] 所述第二方对所述第二编码集合中的每一个元素进行数值转换处理,得到第二加密向量。
[0034] 结合第一方面,在第一方面的一种可实现方式中,所述第二方对所述第二中间数据进行0编码,得到第二编码集合,包括:
[0035] 所述第二方按照从最高位至最低位的顺序,依次判断所述第二中间数据中除最高位以外的每一位的数据是否为0;
[0036] 如果任一目标位的数据为0,则所述第二方获取所述第二中间数据中位于目标位之前的所有数据,将其作为编码元素,并继续判断目标位的后一位是否为0;如果任一目标
位数据不为0,则所述第二方将极小值数据作为编码元素,并继续判断目标位的后一位是否
为0,直至完成所述第二中间数据的最末位的判断,其中,所述极小值数据为所述补位目标
长度所能表示的最小非负二进制数据;
[0037] 按照获取顺序,所述第二方将各个编码元素共同排列为第二编码集合。
[0038] 结合第一方面,在第一方面的一种可实现方式中,所述第二方根据随机生成的第二随机向量,以及所述第二加密向量,生成第二目标向量,包括:
[0039] 所述第二方对所述第二加密向量进行转置,得到第二转置向量;
[0040] 所述第二方将所述第二转置向量与随机生成的第二随机向量进行向量点乘运算,生成第二目标向量。
[0041] 第二方面,本申请实施例提供一种安全两方比较系统,包括第一方和第二方,所述第一方包括依次连接的第一加密向量生成模块、第一目标向量生成模块和第四目标向量生
成模块,所述第二方包括依次连接的第二加密向量生成模块、第二目标向量生成模块和第
三目标向量生成模块,所述第三目标向量生成模块还分别与所述第一目标向量生成模块和
所述第四目标向量生成模块连接;
[0042] 所述第二方还包括依次连接的差值向量生成模块和判定模块,所述差值向量生成模块还分别与所述第二目标向量生成模块和所述第四目标向量生成模块连接;其中:
[0043] 所述第一加密向量生成模块,用于按照第一预设加密规则,对第一数据进行加密处理,得到第一加密向量;
[0044] 所述第一目标向量生成模块,用于根据随机生成的第一随机向量,以及所述第一加密向量,生成第一目标向量;
[0045] 所述第二加密向量生成模块,用于按照第二预设加密规则,对第二数据进行加密处理,得到第二加密向量;
[0046] 所述第二目标向量生成模块,用于根据随机生成的第二随机向量,以及所述第二加密向量,生成第二目标向量;
[0047] 所述第三目标向量生成模块,用于根据所述第一目标向量以及所述第二随机向量,生成第三目标向量;
[0048] 所述第四目标向量生成模块,用于根据所述第三目标向量以及所述第一随机向量,生成第四目标向量;
[0049] 所述差值向量生成模块,用于根据所述第四目标向量以及所述第二目标向量,生成差值向量;
[0050] 所述判定模块,用于判断所述差值向量中是否存在值为零的元素,若存在,则判定所述第一数据大于所述第二数据;或者,若不存在,则判定所述第一数据小于或等于所述第
二数据。
[0051] 结合第二方面,在第二方面的一种可实现方式中,所述第一加密向量生成模块包括:
[0052] 第一转换子模块,用于对第一数据进行二进制转换、长度调整和补位操作,得到第一中间数据,所述第一中间数据的二进制长度为补位目标长度,所述补位目标长度比预设
的目标长度多一位,所述补位操作为在二进制转换和长度调整后的数据的最高位之前补
一;
[0053] 1编码子模块,用于对所述第一中间数据进行1编码,得到第一编码集合;
[0054] 第一数值转换子模块,用于对所述第一编码集合中的每一个元素进行数值转换处理,得到第一加密向量。
[0055] 结合第二方面,在第二方面的一种可实现方式中,所述1编码子模块包括:
[0056] 第一判断单元,用于按照从最高位至最低位的顺序,依次判断所述第一中间数据中除最高位以外每一位的数据是否为1;
[0057] 第一编码元素获取单元,用于如果任一目标位的数据为1,则获取所述第一中间数据中位于目标位之前的所有数据,将其作为编码元素,并继续判断目标位的后一位是否为
1;如果任一目标位数据不为1,则将极大值数据作为编码元素,并继续判断目标位的后一位
是否为1,直至完成所述第一中间数据的最末位的判断,其中,所述极大值数据为所述补位
目标长度所能表示的最大二进制数据;
[0058] 第一编码集合生成单元,用于按照获取顺序,将各个编码元素共同排列为第一编码集合。
[0059] 结合第二方面,在第二方面的一种可实现方式中,所述第一目标向量生成模块包括:
[0060] 第一转置子模块,用于对所述第一加密向量进行转置,得到第一转置向量;
[0061] 第一点乘子模块,用于将所述第一转置向量与随机生成的第一随机向量进行向量点乘运算,生成第一目标向量。
[0062] 结合第二方面,在第二方面的一种可实现方式中,所述第三目标向量生成模块包括:
[0063] 第二点乘子模块,用于将所述第一目标向量与所述第二随机向量进行向量点乘运算,生成第三目标向量。
[0064] 结合第二方面,在第二方面的一种可实现方式中,所述第四目标向量生成模块包括:
[0065] 逆向量获取子模块,用于获取所述第一随机向量的第一逆向量;
[0066] 第三点乘子模块,用于将所述第一逆向量与所述第三目标向量进行向量点乘运算,生成第四目标向量。
[0067] 结合第二方面,在第二方面的一种可实现方式中,所述第二加密向量生成模块包括:
[0068] 第二转换子模块,用于对第二数据进行二进制转换、长度调整和所述补位操作,得到第二中间数据,所述第二中间数据的二进制长度为所述补位目标长度;
[0069] 0编码子模块,用于对所述第二中间数据进行0编码,得到第二编码集合;
[0070] 第二数值转换子模块,用于对所述第二编码集合中的每一个元素进行数值转换处理,得到第二加密向量。
[0071] 结合第二方面,在第二方面的一种可实现方式中,所述0编码子模块包括:
[0072] 第二判断单元,用于按照从最高位至最低位的顺序,依次判断所述第二中间数据中除最高位以外每一位的数据是否为0;
[0073] 第二编码元素获取单元,用于如果任一目标位的数据为0,则获取所述第二中间数据中位于目标位之前的所有数据,将其作为编码元素,并继续判断目标位的后一位是否为
0;如果任一目标位数据不为0,则将极小值数据作为编码元素,并继续判断目标位的后一位
是否为0,直至完成所述第二中间数据的最末位的判断,其中,所述极小值数据为所述补位
目标长度所能表示的最小非负二进制数据;
[0074] 第二编码集合生成单元,用于按照获取顺序,将各个编码元素共同排列为第二编码集合。
[0075] 结合第二方面,在第二方面的一种可实现方式中,所述第二目标向量生成模块包括:
[0076] 第二转置子模块,用于对所述第二加密向量进行转置,得到第二转置向量;
[0077] 第四点乘子模块,用于将所述第二转置向量与随机生成的第二随机向量进行向量点乘运算,生成第二目标向量。
[0078] 本申请实施例公开了一种安全两方比较方法及系统。在安全两方比较方法中,第一方和第二方分别按照各自预设的加密规则对持有数据进行加密,并利用各自生成的随机
向量对各自加密后的持有数据进行处理,分别得到第一目标向量和第二目标向量,第一方
将第一目标向量发送给第二方,第二方再结合自身的随机向量生成第三目标向量,并发送
给第一方,第一方再结合自身的随机向量生成第四目标向量,并发送给第二方,第二方再结
合第二目标向量生成差值向量,如果差值向量中存在值为零的元素,则判定第一方持有数
据大于第二方持有数据。整个比较方法中不涉及幂模运算,两方只需进行常数次通讯,即可
在不暴露自身持有数据大小的情况下进行比较,计算效率和通信效率均较高。

附图说明

[0079] 图1为本申请实施例提供的一种安全两方比较方法所对应的整体流程示意图;
[0080] 图2为本申请实施例提供的一种安全两方比较系统的结构示意图。

具体实施方式

[0081] 为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
[0082] 为了解决现有安全两方比较方法的计算效率和通信效率均较低的技术问题,本申请通过以下实施例公开了一种安全两方比较方法。本申请实施例提供的安全两方比较方法
用于比较两个参与方的持有数据的大小,图1示例性示出了本申请实施例提供的一种安全
两方比较方法所对应的整体流程示意图,如图1所示,具体包括如下步骤:
[0083] 101:第一方按照第一预设加密规则,对第一数据进行加密处理,得到第一加密向量。
[0084] 具体地,可以通过以下步骤得到第一加密向量:
[0085] 第一步,第一方对第一数据进行二进制转换、长度调整和补位操作,得到第一中间数据。
[0086] 其中,第一中间数据的二进制长度为补位目标长度,补位目标长度比预设的目标长度多一位,补位操作为在二进制转换和长度调整后的数据的最高位之前补一。
[0087] 需要说明的是,预设的目标长度应为一个固定的较大值,即应尽可能的设置的大一些,以确保可以完全覆盖第一数据和第二数据的二进制长度。
[0088] 在进行二进制转换后,再进行长度调整,长度调整时,如果二进制转换后的第一数据的位数小于预设的目标长度,则可以在二进制转换后的第一数据最高位的前面补零,以
使得位数可以达到预设的目标长度。长度调整后再进行补位操作,即在长度调整以后得到
的数据的最高位之前补“1”。
[0089] 第二步,第一方对第一中间数据进行1编码,得到第一编码集合。
[0090] 进一步地,可以通过以下方式得到第一编码集合:
[0091] 首先,第一方按照从最高位至最低位的顺序,依次判断第一中间数据中除最高位以外每一位的数据是否为1。
[0092] 然后,如果任一目标位的数据为1,则第一方获取第一中间数据中位于目标位之前的所有数据,将其作为编码元素,并继续判断目标位的后一位是否为1。如果任一目标位数
据不为1,则第一方将极大值数据作为编码元素,并继续判断目标位的后一位是否为1,直至
完成第一中间数据的最末位的判断。
[0093] 其中,极大值数据为补位目标长度所能表示的最大二进制数据。例如,补位目标长度为5,则极大值数据为11111。
[0094] 最后,按照获取顺序,第一方将各个编码元素共同排列为第一编码集合。
[0095] 示例性地,假设第一数据a为15,预设的目标长度为4位,补位目标长度为5位,则二进制转换和长度调整后得到的数据为1111,再在最高位前面补“1”,得到第一中间数据为
11111,共5位,1编码时,按照从最高位至最低位的顺序,依次判断第一中间数据中除最高位
以外每一位的数据是否为1,从第二位开始,第二位为1,则将第一位数据1作为编码元素,继
续判断第三位依然为1,则将前两位数据11作为编码元素,继续判断第四位为1,则将前三位
数据111作为编码元素,继续判断第五位为1,则将前四位数据1111作为编码元素,最终按照
获取顺序得到的第一编码集合为A={1,11,111,1111}。
[0096] 第三步,第一方对第一编码集合中的每一个元素进行数值转换处理,得到第一加密向量。
[0097] 具体地,可以采用以下方式进行数值转换处理:
[0098] 对于第一编码集合中的每一项进行十进制转换,再对每一项十进制转换后的数据进行哈希加密。
[0099] 示例性地,如果第一编码集合为A={1,11,111,1111},则十进制转换并且哈希加密后得到的第一加密向量为(H(1),H(3),H(7),H(15))。其中,H表示哈希加密。
[0100] 如此,采用上述加密方式,较为简单易行,且效率较高。
[0101] 在其他可能的示例中,对第一编码集合中的每一个元素进行数值转换处理,也可以采用直接对每一项进行哈希加密的方式,具体不作限定。
[0102] 102:第一方根据随机生成的第一随机向量,以及第一加密向量,生成第一目标向量。
[0103] 具体地,可以通过以下方式生成第一目标向量:
[0104] 第一方对第一加密向量进行转置,得到第一转置向量。
[0105] 第一方将第一转置向量与随机生成的第一随机向量进行向量点乘运算,生成第一目标向量。
[0106] 示例性地,假设第一随机向量r=(r1,r2,r3,r4),第一加密向量a为(H(1),H(3),HT
(7),H(15)),则第一转置向量a 与第一随机向量r进行向量点乘运算,得到第一目标向量=
T
a·r=(H(1)×r1,H(3)×r2,H(7)×r3,H(15)×r4)。
[0107] 需要说明的是,如果第一转置向量的维度与第一随机向量的维度不同,则进行向量点乘时,应选择维度相同的前n项进行点乘,其他多余项舍弃。
[0108] 示例性地,假设第一随机向量r=(r1,r2,r3,r4),第一加密向量a为(H(1),H(3)),T T
则第一转置向量a与第一随机向量r进行向量点乘运算,得到第一目标向量=a·r=(H(1)×
r1,H(3)×r2)。
[0109] 103:第二方按照第二预设加密规则,对第二数据进行加密处理,得到第二加密向量。
[0110] 具体地,可以通过以下步骤得到第二加密向量:
[0111] 第一步,第二方对第二数据进行二进制转换、长度调整和补位操作,得到第二中间数据。
[0112] 其中,第二中间数据的二进制长度为补位目标长度。
[0113] 需要说明的是,补位目标长度与步骤101中所述的补位目标长度相同,补位操作与步骤101中所述的补位操作相同,即为在二进制转换和长度调整后的数据的最高位之前补
一,此处不再赘述。
[0114] 在进行二进制转换后,再进行长度调整,长度调整时,如果二进制转换后的第二数据的位数小于预设的目标长度,则可以在二进制转换后的第二数据最高位的前面补零,以
使得位数可以达到预设的目标长度。长度调整后再进行补位操作,即在长度调整后的数据
的最高位之前补“1”。
[0115] 第二步,第二方对第二中间数据进行0编码,得到第二编码集合。
[0116] 进一步地,可以通过以下方式得到第二编码集合:
[0117] 首先,第二方按照从最高位至最低位的顺序,依次判断第二中间数据中除最高位以外每一位的数据是否为0。
[0118] 然后,如果任一目标位的数据为0,则第二方获取第二中间数据中位于目标位之前的所有数据,将其作为编码元素,并继续判断目标位的后一位是否为0,如果任一目标位数
据不为0,则第二方将极小值数据作为编码元素,并继续判断目标位的后一位是否为0,直至
完成第二中间数据的最末位的判断。
[0119] 其中,极小值数据为补位目标长度所能表示的最小非负二进制数据。也就是说,极小值数据为零。
[0120] 最后,按照获取顺序,第二方将各个编码元素共同排列为第二编码集合。
[0121] 示例性地,假设第二数据b为9,预设的目标长度为4位,补位目标长度为5位,则二进制转换和长度调整后得到的数据为1001,再在最高位前面补“1”,得到第二中间数据为
11001,共5位,0编码时,按照从最高位至最低位的顺序,依次判断第二中间数据中除最高位
以外每一位的数据是否为0,从第二位开始,第二位为1,则将极小值数据0作为编码元素,继
续判断第三位为0,则将前两位数据11作为编码元素,继续判断第四位为0,则将前三位数据
110作为编码元素,继续判断第五位为1,则将极小值数据0作为编码元素,最终按照获取顺
序得到的第二编码集合为B={0,11,110,0}。
[0122] 第三步,第二方对第二编码集合中的每一个元素进行数值转换处理,得到第二加密向量。
[0123] 具体地,可以采用以下方式进行数值转换处理:
[0124] 对于第二编码集合中的每一项进行十进制转换,再对每一项十进制转换后的数据进行哈希加密。
[0125] 示例性地,如果第二编码集合为B={0,11,110,0},则十进制转换并且哈希加密后得到的第二加密向量为(H(0),H(3),H(6),H(0))。其中,H表示哈希加密。
[0126] 如此,采用上述加密方式,较为简单易行,且效率较高。
[0127] 在其他可能的示例中,对第一编码集合中的每一个元素进行数值转换处理,也可以采用直接对每一项进行哈希加密的方式,具体不作限定。
[0128] 需要说明的是,第二方对第二编码集合中的每一个元素进行数值转换处理的方式,应与第一方对第一编码集合中的每一个元素进行数值转换处理的方式相同。
[0129] 104:第二方根据随机生成的第二随机向量,以及第二加密向量,生成第二目标向量。
[0130] 具体地,可以通过以下方式生成第二目标向量:
[0131] 第二方对第二加密向量进行转置,得到第二转置向量。
[0132] 第二方将第二转置向量与随机生成的第二随机向量进行向量点乘运算,生成第二目标向量。
[0133] 示例性地,假设第二随机向量k=(k1,k2,k3,k4),第二加密向量b为(H(0),H(3),HT
(6),H(0)),则第二转置向量b 与第二随机向量k进行向量点乘运算,得到第二目标向量=
T
b·k=(H(0)×k1,H(3)×k2,H(6)×k3,H(0)×k4)。
[0134] 需要说明的是,如果第二转置向量的维度与第二随机向量的维度不同,则进行向量点乘时,应选择维度相同的前n项进行点乘,其他多余项舍弃。
[0135] 105:第一方将第一目标向量发送给第二方。
[0136] 106:第二方根据第一目标向量以及第二随机向量,生成第三目标向量。
[0137] 具体地,可以通过以下方式生成第三目标向量:
[0138] 第二方将第一目标向量与第二随机向量进行向量点乘运算,生成第三目标向量。
[0139] 示例性地,假设第一目标向量=aT·r=(H(1)×r1,H(3)×r2,H(7)×r3,H(15)×T
r4),第二随机向量为k=(k1,k2,k3,k4),则第三目标向量=a·r·k=(H(1)×r1×k1,H(3)
×r2×k2,H(7)×r3×k3,H(15)×r4×k4)。
[0140] 107:第二方将第三目标向量发送给第一方。
[0141] 108:第一方根据第三目标向量以及第一随机向量,生成第四目标向量。
[0142] 具体地,可以通过以下方式生成第四目标向量:
[0143] 第一方获取第一随机向量的第一逆向量。
[0144] 第一方将第一逆向量与第三目标向量进行向量点乘运算,生成第四目标向量。
[0145] 示例性地,假设第一随机向量r=(r1,r2,r3,r4),第三目标向量=aT·r·k=(H(1)‑1 T
×r1×k1,H(3)×r2×k2,H(7)×r3×k3,H(15)×r4×k4),则第四目标向量=r ·a·r·k
T
=a·k=(H(1)×k1,H(3)×k2,H(7)×k3,H(15)×k4)。
[0146] 109:第一方将第四目标向量发送给第二方。
[0147] 110:第二方根据第四目标向量以及第二目标向量,生成差值向量。
[0148] 具体地,第二方利用第四目标向量减去第二目标向量,得到差值向量。
[0149] 示例性地,假设第四目标向量=aT·k=(H(1)×k1,H(3)×k2,H(7)×k3,H(15)×T T
k4),第二目标向量=b·k=(H(0)×k1,H(3)×k2,H(6)×k3,H(0)×k4),则差值向量T=a·
T
k‑b·k=(H(1)×k1‑H(0)×k1,H(3)×k2‑H(3)×k2,H(7)×k3‑H(6)×k3,H(15)×k4‑H(0)
×k4)=(H(1)×k1‑H(0)×k1,0,H(7)×k3‑H(6)×k3,H(15)×k4‑H(0)×k4)。
[0150] 111:第二方判断差值向量中是否存在值为零的元素,若存在,则执行步骤112,若不存在,则执行步骤113。
[0151] 112:第二方判定第一数据大于第二数据。
[0152] 113:第二方判定第一数据小于或等于第二数据。
[0153] 具体地,如果步骤110的执行结果中有0元素,则差值向量中存在值为零的元素,则第一编码集合与第二编码集合存在交集,即可得第一数据大于第二数据,如果差值向量中
不存在值为零的元素,则第一编码集合与第二编码集合交集为空,即可得第一数据小于或
等于第二数据。
[0154] 采用上述方式,两方利用加密后的数据以及随机生成的向量,只需进行常数次通讯,即可在不暴露自身持有数据大小的情况下进行比较,计算效率和通信效率均较高。
[0155] 如此,采用本申请实施例公开的一种安全两方比较方法,第一方和第二方分别按照各自预设的加密规则对持有数据进行加密,并利用各自生成的随机向量对各自加密后的
持有数据进行处理,分别得到第一目标向量和第二目标向量,第一方将第一目标向量发送
给第二方,第二方再结合自身的随机向量生成第三目标向量,并发送给第一方,第一方再结
合自身的随机向量生成第四目标向量,并发送给第二方,第二方再结合第二目标向量生成
差值向量,如果差值向量中存在值为零的元素,则判定第一方持有数据大于第二方持有数
据。整个比较方法中不涉及幂模运算,两方只需进行常数次通讯,即可在不暴露自身持有数
据大小的情况下进行比较,计算效率和通信效率均较高。
[0156] 下述为本申请系统实施例,可以用于执行本申请方法实施例。对于本申请系统实施例中未披露的细节,请参照本申请方法实施例。
[0157] 图2示例性示出了本申请实施例提供的一种安全两方比较系统的结构示意图。如图2所示,该系统具有实现上述安全两方比较方法的功能,所述功能可以由硬件实现,也可
以由硬件执行相应的软件实现。该系统可以包括第一方201和第二方202,第一方201包括依
次连接的第一加密向量生成模块2011、第一目标向量生成模块2012和第四目标向量生成模
块2013,第二方202包括依次连接的第二加密向量生成模块2021、第二目标向量生成模块
2022和第三目标向量生成模块2023,第三目标向量生成模块2023还分别与第一目标向量生
成模块2012和第四目标向量生成模块2013连接。第二方202还包括依次连接的差值向量生
成模块2024和判定模块2025,差值向量生成模块2024还分别与第二目标向量生成模块2022
和第四目标向量生成模块2013连接。其中:
[0158] 第一加密向量生成模块2011,用于按照第一预设加密规则,对第一数据进行加密处理,得到第一加密向量。
[0159] 第一目标向量生成模块2012,用于根据随机生成的第一随机向量,以及第一加密向量,生成第一目标向量。
[0160] 第二加密向量生成模块2021,用于按照第二预设加密规则,对第二数据进行加密处理,得到第二加密向量。
[0161] 第二目标向量生成模块2022,用于根据随机生成的第二随机向量,以及第二加密向量,生成第二目标向量。
[0162] 第三目标向量生成模块2023,用于根据第一目标向量以及第二随机向量,生成第三目标向量。
[0163] 第四目标向量生成模块2013,用于根据第三目标向量以及第一随机向量,生成第四目标向量。
[0164] 差值向量生成模块2024,用于根据第四目标向量以及第二目标向量,生成差值向量。
[0165] 判定模块2025,用于判断差值向量中是否存在值为零的元素,若存在,则判定第一数据大于第二数据。或者,若不存在,则判定第一数据小于或等于第二数据。
[0166] 在一种可实现方式中,第一加密向量生成模块2011包括:
[0167] 第一转换子模块,用于对第一数据进行二进制转换、长度调整和补位操作,得到第一中间数据,第一中间数据的二进制长度为补位目标长度,补位目标长度比预设的目标长
度多一位,补位操作为在二进制转换和长度调整后的数据的最高位之前补一。
[0168] 1编码子模块,用于对第一中间数据进行1编码,得到第一编码集合。
[0169] 第一数值转换子模块,用于对第一编码集合中的每一个元素进行数值转换处理,得到第一加密向量。
[0170] 在一种可实现方式中,1编码子模块包括:
[0171] 第一判断单元,用于按照从最高位至最低位的顺序,依次判断第一中间数据中除最高位以外的每一位的数据是否为1。
[0172] 第一编码元素获取单元,用于如果任一目标位的数据为1,则获取第一中间数据中位于目标位之前的所有数据,将其作为编码元素,并继续判断目标位的后一位是否为1,如
果任一目标位数据不为1,则将极大值数据作为编码元素,并继续判断目标位的后一位是否
为1,直至完成所述第一中间数据的最末位的判断,其中,所述极大值数据为所述补位目标
长度所能表示的最大二进制数据。
[0173] 第一编码集合生成单元,用于按照获取顺序,将各个编码元素共同排列为第一编码集合。
[0174] 在一种可实现方式中,第一目标向量生成模块2012包括:
[0175] 第一转置子模块,用于对第一加密向量进行转置,得到第一转置向量。
[0176] 第一点乘子模块,用于将第一转置向量与随机生成的第一随机向量进行向量点乘运算,生成第一目标向量。
[0177] 在一种可实现方式中,第三目标向量生成模块2023包括:
[0178] 第二点乘子模块,用于将第一目标向量与第二随机向量进行向量点乘运算,生成第三目标向量。
[0179] 在一种可实现方式中,第四目标向量生成模块2013包括:
[0180] 逆向量获取子模块,用于获取第一随机向量的第一逆向量。
[0181] 第三点乘子模块,用于将第一逆向量与第三目标向量进行向量点乘运算,生成第四目标向量。
[0182] 在一种可实现方式中,第二加密向量生成模块2021包括:
[0183] 第二转换子模块,用于对第二数据进行二进制转换、长度调整和补位操作,得到第二中间数据,第二中间数据的二进制长度为补位目标长度。
[0184] 0编码子模块,用于对第二中间数据进行0编码,得到第二编码集合。
[0185] 第二数值转换子模块,用于对第二编码集合中的每一个元素进行数值转换处理,得到第二加密向量。
[0186] 在一种可实现方式中,0编码子模块包括:
[0187] 第二判断单元,用于按照从最高位至最低位的顺序,依次判断第二中间数据中除最高位以外的每一位的数据是否为0。
[0188] 第二编码元素获取单元,用于如果任一目标位的数据为0,则获取第二中间数据中位于目标位之前的所有数据,将其作为编码元素,并继续判断目标位的后一位是否为0,如
果任一目标位数据不为0,则将极小值数据作为编码元素,并继续判断目标位的后一位是否
为0,直至完成第二中间数据的最末位的判断,其中,极小值数据为补位目标长度所能表示
的最小非负二进制数据。
[0189] 第二编码集合生成单元,用于按照获取顺序,将各个编码元素共同排列为第二编码集合。
[0190] 在一种可实现方式中,第二目标向量生成模块2022包括:
[0191] 第二转置子模块,用于对第二加密向量进行转置,得到第二转置向量。
[0192] 第四点乘子模块,用于将第二转置向量与随机生成的第二随机向量进行向量点乘运算,生成第二目标向量。
[0193] 如此,采用本申请实施例公开的一种安全两方比较系统,第一方和第二方分别按照各自预设的加密规则对持有数据进行加密,并利用各自生成的随机向量对各自加密后的
持有数据进行处理,分别得到第一目标向量和第二目标向量,第一方将第一目标向量发送
给第二方,第二方再结合自身的随机向量生成第三目标向量,并发送给第一方,第一方再结
合自身的随机向量生成第四目标向量,并发送给第二方,第二方再结合第二目标向量生成
差值向量,如果差值向量中存在值为零的元素,则判定第一方持有数据大于第二方持有数
据。整个比较方法中不涉及幂模运算,两方只需进行常数次通讯,即可在不暴露自身持有数
据大小的情况下进行比较,计算效率和通信效率均较高。
[0194] 以上结合具体实施方式和范例性实例对本申请进行了详细说明,不过这些说明并不能理解为对本申请的限制。本领域技术人员理解,在不偏离本申请精神和范围的情况下,
可以对本申请技术方案及其实施方式进行多种等价替换、修饰或改进,这些均落入本申请
的范围内。本申请的保护范围以所附权利要求为准。