用于对加密数据进行多字符通配符搜索的系统和方法与流程

文档序号:20875653发布日期:2020-05-26 16:29阅读:220来源:国知局
用于对加密数据进行多字符通配符搜索的系统和方法与流程

交叉引用

在本公开的描述中引用和讨论了一些参考文献,其可以包括专利、专利申请和各种出版物。提供对这些参考文献的引用和/或讨论仅仅是为了阐明本公开的描述,而不是承认任何这种参考文献是本文所述公开内容的“现有技术”。本说明书中引用和讨论的所有参考文献均以引用的方式整体并入本文中,其程度如同通过引用单独并入每篇参考文献。

本公开总体上涉及数据加密和搜索加密数据,更具体地,涉及用于针对加密数据执行多字符通配符搜索以便仅从加密数据检索有关数据的系统和方法。



背景技术:

本文中所提供的背景技术描述是出于大体上呈现本公开的背景的目的。在本背景技术部分所描述范围内,目前署名的发明人的工作,以及在递交时可能无法被另外视为现有技术的描述的各方面,既不明确也不暗含为针对本公开的现有技术。

数据泄漏频繁发生,给公司和客户带来了巨大损失。因此,越来越多的数据以加密格式存储。考虑到效率,通常通过对称加密方案(例如,三重数据加密标准(3des)或高级加密标准(aes))来对数据进行加密。在一些情况下,可以通过非对称加密方案(例如,rsa(rivest-shamir-adleman))对数据进行加密。为了实现可证明的安全性,所有常规加密方案都实现了不可区分性(ind)的安全性。特别地,概率多项式时间(ppt)攻击者无法基于加密的消息来区分两个密文。换句话说,对于没有解密密钥(对称设置的秘密密钥或非对称设置的私钥)的实体,密文是随机值。

因此,如果通过常规加密方案对数据进行加密,则没有解密密钥的服务器将无法再对数据执行搜索。为了对加密数据进行搜索,数据所有者必须下载所有数据,在本地对数据进行解密,然后完全靠自己对明文进行搜索。这带来了以下问题。第一,通信开销较高,尤其是在大数据时代,数据大小可能处于千兆字节(gb)、太字节(tb)级别。第二,客户端侧必须存储下载的密文,这对于资源受限的设备而言是昂贵的。第三,客户端侧必须对所有密文进行解密,并且解密在计算上很繁重,由此给客户端带来了沉重负担,并且对于资源受限的设备而言将非常耗时甚至不切实际。

因此,在本领域中存在如下未解决的需求:在客户端和服务器之间提供轻量级且易于使用的密钥管理。



技术实现要素:

在某些方面,本公开涉及一种用于提供对加密数据进行通配符关键字搜索的方法。在某些实施例中,该方法包括:

由第一计算设备提供数据加密密钥(dek);

由第一计算设备提供用于进行加密的数据,其中数据包括具有m个字符的关键字,字符中的每个字符均选自n个预定字符,m和n为正整数;

由第一计算设备使用数据加密密钥将数据加密为加密数据;

由第一计算设备使用密钥导出函数(kdf),根据数据加密密钥计算索引加密密钥(iek);

提供m×n个素数;

基于索引加密密钥将m×n个素数置乱以形成素数序列;

根据关键字中字符的位置和关键字中字符的值,为关键字中的每个字符计算序列值;

根据序列值,针对关键字中的每个字符从素数序列中选择素数;

计算关键字的索引,索引是针对关键字的字符选择的素数的乘积;以及

将加密数据和索引上传到第二计算设备上,以便第三计算设备可以访问加密数据和索引,

其中,第三计算设备具有数据加密密钥和密钥导出函数,且被配置为:根据数据加密密钥和密钥导出函数生成索引加密密钥;提供通配符搜索关键字,其中,通配符搜索关键字具有m个字符,该m个字符包括至少一个查询字符和至少一个通配符字符,并且至少一个查询字符选自n个预定字符;提供m×n个素数;基于索引加密密钥将m×n个素数置乱以形成素数序列;根据通配符搜索关键字中至少一个查询字符的位置和值,为至少一个查询字符计算查询序列值;根据查询序列值,针对通配符搜索关键字中的至少一个查询字符从素数序列中选择素数;计算通配符搜索关键字的查询索引,该查询索引是针对通配符搜索关键字的至少一个查询字符选择的素数的乘积;以及使用查询索引来查询存储在第二计算设备中的索引,以便获得与查询索引匹配的索引相对应的加密数据。在某些实施例中,搜索关键字包括多个通配符字符。

在某些实施例中,通过以下公式计算关键字中第p位置处的字符的序列值:p×(m-1)+c%n,其中p是从0到n的整数,并且表示关键字中的字符的位置,c是在第p位置处的字符值,c%n是c除以n的余数。在某些实施例中,还可以通过以下公式计算关键字中第p位置处的字符的序列值:p×(m-1)+c,即使用c替代c%n,其提供相同的结果。

在某些实施例中,第一计算设备是数据提供方,第二计算设备是存储服务器,第三计算设备是数据消费方;并且第一计算设备被配置为对第二计算设备执行存储操作,第三计算设备被配置为向第二计算机发送查询索引以及从第二计算设备接收搜索响应。

在某些实施例中,方法还包括:以预定时间间隔更新第一计算设备和第二计算设备上的数据加密密钥。在某些实施例中,当更新数据加密密钥时,m×n素数矩阵的排列(permutation)将被改变。在这种情况下,方法还包括基于旧数据加密密钥和新数据加密密钥两者来恢复矩阵。在某些实施例中,可以用从新数据加密密钥(基于索引加密密钥)导出的新映射来替代计算映射素数的方式。因此,如果在第p位置处的字符c映射到素数p1(新数据加密密钥),则方法使用两个数据加密密钥来构建转换函数,以将第p位置处的c映射到素数p2(原始素数),使得数据加密密钥的更新不改变针对对应的关键字计算的索引。

在某些实施例中,数据加密密钥是高级加密标准(aes)密钥,密钥导出函数是sha-256散列值函数。

在某些实施例中,n个预定字符包括数字0至9、小写字符a至z和大写字符a至z中的至少一个。

在某些实施例中,将m×n个素数置乱的步骤通过使用索引加密密钥作为种子的fisher-yates置乱算法来执行。

在某些实施例中,对索引进行查询的步骤包括:对存储在第二计算设备中的索引执行关于查询索引的模操作;以及当查询索引和存储在第二计算设备中的索引中的一个索引的模为0时,将与索引中的所述一个索引相对应的加密数据从第二计算设备传送到第三计算设备。

在某些方面中,本公开涉及一种用于提供对加密数据进行通配符关键字搜索的方法。该方法包括:

通过第一计算设备获得要被加密的数据的关键字,其中该关键字具有固定长度;

生成素数序列;

针对该关键字的每个字符,从素数序列中确定对应的一个素数;以及

将关键字的字符的对应素数的乘积定义为加密数据的索引,其中索引可以使用通配符搜索关键字来搜索。

在某些实施例中,关键字具有m个字符,字符中的每个字符选自n个预定字符,m和n是正整数,并且素数序列包括m×n个素数。

在某些实施例中,方法还包括:

使用数据加密密钥(dek)来对数据进行加密以获得加密数据;

使用密钥导出函数(kdf)来处理数据加密密钥以获得索引加密密钥(iek);

从素数数字1开始获得顺序递增的m×n个素数;以及

使用以索引加密密钥作为种子的随机置乱算法将顺序递增的m×n个素数置乱,以获得素数序列。

在某些实施例中,针对关键字的每个字符,从素数序列中确定对应的一个素数的步骤包括:针对关键字中的每个字符,使用p×(m-1)+c%n来计算序列值,其中p是从0到n的整数,并且表示关键字中的字符的位置,c是第p位置处的字符值,c%n是c除以n的余数;以及针对关键字中的每个字符,在素数序列中选择在序列值的位置处的素数。在某些实施例中,使用p×(m-1)+c来计算序列值。

在某些实施例中,通配符搜索关键字具有m个字符,该m个字符包括至少一个查询字符和至少一个通配符字符,并且至少一个查询字符选自n个预定字符。

在某些实施例中,方法还包括:将索引和加密数据上传到存储服务器上;根据通配符搜索关键字中的至少一个查询字符的位置和值,计算通配符搜索关键字的至少一个查询字符的查询序列值;计算通配符搜索关键字的查询索引,该查询索引是针对通配符搜索关键字的至少一个查询字符选择的素数的乘积;以及使用查询索引在存储服务器上对索引进行查询。

在某些实施例中,方法还包括:当查询索引与存储服务器上的索引匹配时:下载与索引相对应的加密数据。

在某些方面,本公开涉及一种存储计算机可执行代码的非暂时性计算机可读介质,其中,当在计算设备的处理器处执行计算机可执行代码时,计算机可执行代码被配置为执行上述方法。

在某些方面,本公开涉及一种用于对加密数据提供通配符关键字搜索的系统。系统包括第一计算设备。第一计算设备包括处理器和存储计算机可执行代码的存储设备。当在处理器处执行计算机可执行代码时,计算机可执行代码被配置为:

获得针对要被加的密数据的关键字,其中关键字具有固定长度;

生成素数序列;

针对关键字的每个字符,从素数序列中确定对应的一个素数;以及

将关键字的字符的对应素数的乘积定义为加密数据的索引,其中索引可以使用通配符搜索关键字来搜索。

在某些实施例中,关键字具有m个字符,字符中的每个字符选自n个预定字符,m和n是正整数,并且素数序列包括m×n个素数,并且计算机可执行代码还被配置为:

使用数据加密密钥来对数据进行加密以获得加密数据;

使用密钥导出函数(kdf)来处理数据加密密钥以获得索引加密密钥(iek);

获得从1开始顺序递增的m×n个素数;以及

使用以索引加密密钥作为种子的随机置乱算法将顺序递增的m×n个素数置乱,以获得素数序列。

在某些实施例中,计算机可执行代码被配置为通过以下操作来针对关键字的每个字符,从素数序列中确定对应的一个素数:使用p×(m-1)+c%n为关键字中的每个字符计算序列值,其中p是从0到n的整数,并且表示关键字中的字符的位置,c是第p位置处的字符值,c%n是c除以n的余数;以及为关键字中的每个字符选择素数序列中序列值的位置处的素数。

在某些实施例中,通配符搜索关键字具有m个字符,该m个字符包括至少一个查询字符和至少一个通配符字符,并且至少一个查询字符选自n个预定字符,并且其中计算机可执行代码还被配置为:

将索引和加密数据上传到存储服务器上;

根据通配符搜索关键字中的至少一个查询字符的位置和值,计算通配符搜索关键字的至少一个查询字符的查询序列值;

计算通配符搜索关键字的查询索引,查询索引是针对通配符搜索关键字的至少一个查询字符选择的素数的乘积;

使用查询索引在存储服务器上对索引进行查询;以及

当查询索引与存储服务器上的索引匹配时:下载与索引相对应的加密数据。

从以下结合附图及其说明文字对优选实施例的描述中,本公开的这些和其他方面将变得显而易见,在不脱离本发明的新颖构思的精神和范围的情况下,可以影响其中的变化和修改。

附图说明

附图示出了本公开的一个或多个实施例,与书面描述一起用于解释本公开的原理。贯穿附图,尽可能使用相同的附图标记来指代相同或类似的实施例元件。

图1示意性地描绘了根据本公开某些实施例的系统架构。

图2示意性地描绘了根据本公开某些实施例的数据提供方。

图3a示意性地描绘了根据本公开某些实施例的16字节数据加密密钥(dek)。

图3b示意性地描绘了根据本公开某些实施例的16字节索引加密密钥(iek)。

图4a示意性地描绘了根据本公开某些实施例的10×11素数数组。

图4b示意性地描绘了根据本公开某些实施例的10×11置乱的(shuffled)素数数组。

图5示意性地描绘了根据本公开某些实施例的存储在存储服务器上的加密数据及其对应的索引。

图6示意性地描绘了根据本公开某些实施例的存储服务器。

图7示意性地描绘了根据本公开某些实施例的数据消费方。

图8示意性地描绘了根据本公开某些实施例的对数据进行加密和索引的方法。

图9a和图9b示意性地描绘了根据本公开某些实施例的对加密数据进行搜索和解密的方法。

具体实施方式

在以下示例中更具体地描述了本公开,这些示例仅用于说明,因为其中的许多修改和变化对于本领域技术人员来说是显而易见的。现在,详细描述本公开的各种实施例。参考附图,在所有视图中相同的附图标记指示相同的组件。如本文的描述和随后的权利要求中所使用的,“一”、“一个”和“该”的含义包括复数引用,除非上下文另有明确说明。此外,如本文的描述和随后的权利要求中所使用的,“在...中”的含义包括“在...中”和“在...上”,除非上下文另有明确说明。此外,为了方便读者,可以在说明书中使用标题或副标题,这不会影响本公开的范围。附加地,本说明书中使用的一些术语在下面更具体地定义。

本说明书中使用的术语通常在本领域、在本公开的上下文中、以及在使用每个术语的特定上下文中具有其普通含义。用于描述本公开的某些术语在下文或说明书中的其他地方讨论,以向从业者提供关于本公开的描述的附加指导。应当认识到,可以以多于一种的方式说相同的事情。因此,备选的语言和同义词可以用于本文所讨论的任何一个或多个术语,并且对于术语是否在本文中详细阐述或讨论也没有任何特殊意义。提供了某些术语的同义词。一个或多个同义词的叙述不排除其他同义词的使用。本说明书中任何地方的示例(包括本文中讨论的任何术语的示例)的使用仅是说明性的,并且决不限制本公开或任何示例性术语的范围和含义。同样地,本公开不限于本说明书中给出的各种实施例。

除非另外定义,否则本文使用的所有术语(包括技术和科学术语)具有与本公开所属领域的普通技术人员通常所理解的含义相同的含义。还将理解的是,诸如在常用词典中定义的术语应被解释为其含义与在相关技术和本申请的上下文中的含义相同,而不应将其解释为理想的或过于正式的含义,除非本文明确如此定义。

如本文所用,“大约”、“约”、“实质上”或“近似地”通常应表示在给定值或范围的20%(优选10%,更优选5%)的范围内。本文给出的数值是近似的,这意味着如果没有明确说明,可以推断术语“大约”、“约”、“实质上”或“近似地”。

如本文所使用的,“多个”意味着两个或更多个。

如本文所使用的,术语“包含”、“包括”、“携带”、“具有”、“含有”、“涉及”等应理解为开放式的,即,意味着包括但不限于如此。

如本文所使用的,短语“a、b和c中的至少一个”应该被解释为使用非排他逻辑or表示逻辑(a或b或c)。应当理解,方法内的一个或多个步骤可以以不同的顺序(或同时)执行,而不会改变本公开的原理。如本文所使用的,术语“和/或”包括关联列出的项目中的一个或多个项目的任意和所有组合。

如本文所使用的,术语“模块”可以指代如下项、可以是如下项的一部分、或者可以包括如下项:专用集成电路(asic);电子电路;组合逻辑电路;现场可编程门阵列(fpga);执行代码的处理器(共享、专用或组);提供所述功能的其他合适的硬件组件;或者上述各项中的一些或全部的组合(例如,在片上系统中)。术语“模块”可以包括存储由处理器执行的代码的存储器(共享、专用或组)。

如本文所使用的,术语“代码”可以包括软件、固件和/或微代码,并且可以指代程序、例程、函数、类和/或对象。如上所使用的,术语“共享”意味着可以使用单个(共享)处理器来执行来自多个模块的一些或所有代码。此外,来自多个模块的一些或所有代码可以由单个(共享)存储器存储。如上所使用的,术语组意味着可以使用一组处理器来执行来自单个模块的一些或所有代码。此外,可以使用一组存储器来存储来自单个模块的一些或所有代码。

如本文所使用的,术语“接口”通常指代在组件之间交互点处的用于在组件之间执行数据通信的通信工具或装置。通常,接口可以适用于硬件和软件这两个级别,并且可以是单向或双向接口。物理硬件接口的示例可以包括电连接器、总线、端口、电缆、终端和其他i/o设备或组件。与接口通信的组件可以是例如计算机系统的多个组件或外围设备。

本公开涉及计算机系统。如附图中所示,计算机组件可以包括物理硬件组件(其被示为实线块)、以及虚拟软件组件(其被示为虚线块)。除非另有说明,否则本领域普通技术人员将理解,这些计算机组件可以以但不限于软件、固件或硬件组件或其组合的形式来实现。

本文描述的装置、系统和方法可以通过由一个或多个处理器执行的一个或多个计算机程序实现。计算机程序包括存储在非暂时性有形计算机可读介质上的处理器可执行指令。计算机程序还可以包括存储的数据。非暂时性有形计算机可读介质的非限制性示例是非易失性存储器、磁存储设备和光存储设备。

现在参考示出本公开的实施例的附图,在下文中更全面地描述本公开。然而,本公开可以按多种不同形式来实现,并且不应当被解释为受到本文阐述的实施例的限制;更确切地说,提供这些实施例使得本公开将是全面和完整的,并且将本公开的范围充分传达给本领域技术人员。

在某些方面,本公开提供了一种用于对数据进行加密并存储加密数据以及检索和解密数据的系统,其中加密数据是可以使用通配符搜索或通配符关键字搜索来进行搜索的。图1示意性地示出了根据本公开某些实施例的系统架构。如图1所示,系统100包括数据提供方110、存储服务器130和数据消费方150。

数据提供方110被配置为提供明文数据,并且在将明文数据存储在存储服务器130上之前对数据进行加密。数据提供方110还被配置为选择数据的关键字。具体地,数据提供方110被配置为使用数据加密密钥(dek)对明文数据进行加密以获得加密数据,使用索引加密算法对关键字进行加密以获得索引,并将加密数据和加密数据的索引上传到存储服务器130上。在某些实施例中,数据提供方110被配置为执行存储操作,其中存储操作包括添加、删除和修改数据。

存储服务器130被配置为向数据提供方110提供数据存储服务,以及向数据消费方150提供数据访问和数据搜索服务。在某些实施例中,对加密数据执行搜索操作。

数据消费方150是数据提供方110本身,或是具有与数据提供方110共享的秘密密钥的实体。数据消费方150被配置为生成搜索令牌,并向存储服务器130发送搜索查询以在下载加密数据之前过滤掉不相关的数据。在某些实施例中,搜索查询是通配符关键字搜索。

在某些实施例中,数据提供方110、存储服务器130和数据消费方150中的每一个是服务器计算设备、云计算设备或通用计算机。如图1所示,数据提供方110和数据消费方150是分开的服务器。在某些实施例中,数据提供方110和数据消费方150可以是相同的服务器。在某些实施例中,数据提供方110、存储服务器130和数据消费方150中的任何一个位于云中。

在某些实施例中,数据提供方110、存储服务器130和数据消费方150被配置为例如通过网络或其他类型的接口彼此通信。在某些实施例中,上述网络中的每一个可以是有线或无线网络,并且可以为各种形式,例如,公共网络和私有网络。网络的示例可以包括但不限于局域网(lan)或包括互联网的广域网(wan)。在某些实施例中,可以应用两个或更多个不同的网络和/或接口来连接设备110、130和150。在某些实施例中,网络也可以是系统接口或通用串行总线(usb)接口。

图2示意性地描绘了根据本公开某些实施例的数据提供方。在某些实施例中,数据提供方110可以是在存储服务器130上提供存储操作的移动设备、平板电脑、云计算机、通用计算机、无头计算机、可穿戴设备或专用计算机。如图2所示,数据提供方110可以包括但不限于处理器112、存储器114和存储设备116。在某些实施例中,数据提供方110可以包括其他硬件组件和软件组件(未示出)以执行其对应的任务。这些硬件和软件组件的示例可以包括但不限于其他所需的存储器、接口、总线、输入/输出(i/o)模块或设备、网络接口和外围设备。

处理器112可以是被配置为控制数据提供方110的操作的中央处理单元(cpu)。处理器112可以执行数据提供方110的操作系统(os)或其他应用。在一些实施例中,数据提供方110可以具有多于一个的cpu作为处理器,例如2个cpu、4个cpu、8个cpu或任何合适数量的cpu。存储器114可以是易失性存储器(例如,随机存取存储器(ram)),用于在数据提供方110的操作期间存储数据和信息。在某些实施例中,存储器114可以是易失性存储器阵列。在某些实施例中,数据提供方110可以在多于一个的存储器114上运行。存储设备116是用于存储数据提供方110的os(未示出)和其他应用的非易失性数据存储介质。存储设备116的示例可以包括非易失性存储器,例如闪存、存储器卡、usb驱动器、硬盘驱动器、软盘、光盘驱动器、固态驱动器(ssd)或任何其他类型的数据存储设备。在某些实施例中,存储设备116可以是本地存储、远程存储或云存储。在某些实施例中,数据提供方110可以具有多个存储设备116,其可以是相同的存储设备或不同类型的存储设备,并且数据提供方110的应用可以存储在数据提供方110的一个或多个存储设备116中。

如图2所示,存储设备116包括上传应用118和用于加密的数据129。上传应用118被配置为执行存储操作。具体地,上传应用118被配置为获得数据,定义数据的关键字,将数据加密为加密数据,将关键字加密为数据的索引,以及将加密数据和索引上传到存储服务器130。上传应用118还可以包括添加、删除和修改存储服务器130上的数据。除此之外,上传应用118包括数据加密密钥(dek)模块120、索引加密密钥(iek)模块122、数据加密模块124、索引生成模块126和操作模块128。

dek模块120被配置为生成数据加密密钥(dek),并将dek发送给iek模块122和数据加密模块124。在某些实施例中,dek模块120被配置为与数据消费方150共享dek。在某些实施例中,dek模块120被配置为在预定时间间隔内更新dek,并且将更新后的dek传送给数据消费方150。在某些实施例中,dek模块120是高级加密标准(aes)生成器,并且所生成的dek是随机aes密钥。在一个示例中,图3a示出了16字节的dek。

iek模块122被配置为在从dek模块120接收到dek时,生成iek,并且将iek发送给索引生成模块126。在某些实施例中,iek模块122被配置为通过对dek执行密钥导出函数(kdf)来生成iek,即iek=kdf(dek)。在某些实施例中,kdf函数可以是任何安全散列函数,例如sha-256。在一个示例中,在图3a中所示的dek上运行基于散列的消息认证码(hmac),以便获得图3b中所示的16字节的iek。

数据加密模块124被配置为在从dek模块120接收到dek时,对数据129进行加密以形成加密数据,并且将加密数据发送给操作模块128。

索引生成模块126被配置为在从iek模块122接收到iek时,获得数据129的关键字,并将关键字加密为索引。索引生成模块126包括用于生成素数数组的素数生成模块1260、用于将素数置乱(shuffling)的素数置乱模块1262、用于由数据129获得关键字的关键字获得模块1264以及用于使用置乱的素数来计算关键字索引的索引计算模块1266。

素数生成模块1260被配置为生成多个n×m个素数,其中n为关键字中字符的字符大小,m为关键字的长度,并将所生成的n×m个素数发送给素数置乱模块1262。n×m个素数可以布置为n×m的数组,或者简单布置为数字序列。n×m的素数数组包括m行素数数字,每行素数数字均包括n个素数数字。在某些实施例中,关键字是11位数的美国电话号码,电话号码中的每个字符可以是{0,1,…,9}中的任何一个。因此,数字n为10(指示所设置的0至9),并且数字m为11(电话号码的长度)。在某些实施例中,关键字是消费者的姓名,该关键字的n为52(包括大写字母和小写字母a-z),并且m为任意长度(例如,40)。在某些实施例中,关键字可以是社会保险号、vin号。根据本公开某些实施例的使用加密索引方法的要求是具有明确数量的字符和明确数量的关键字长度。在其他实施例中,该方法的变型可以用于索引具有不明确数量的字符和不明确数量的关键字长度的关键字。在n和m可用的情况下,素数生成模块1260被配置为生成前n×m个素数。图4a示出了前10×11=110个素数的示例,其中关键字是字符大小为10并且长度为11位数字的电话号码。110个素数被布置成数组,其中10个素数数字成一行,总共11行。在某些实施例中,素数可以从任意数字而不是第一个素数开始来获得,例如,该110个素数可以从素数数字5而不是素数数字2开始。在某些实施例中,素数可以不是顺序获得的。例如,素数生成模块1260可以每隔一个来选择素数,以获得由2、5、11、17、…组成的110个素数。在某些实施例中,素数生成模块1260可以选择跳过一个素数,然后跳过两个素数,然后跳过三个素数,以获得由2、5、13、29...组成的110个素数。素数生成模块1260可以进行多种修改以选择素数,只要修改与数据消费方150中的对应模块共享即可。

素数置乱模块1262被配置为在从素数生成模块1260接收到n×m个素数时,将n×m个素数置乱以获得置乱的素数,并将置乱的素数发送给索引计算模块1266。在某些实施例中,素数置乱模块1262使用fisher-yates置乱算法来执行置乱。在某些实施例中,素数置乱模块1262被配置为使用iek作为种子(seed)来执行置乱。在某些实施例中,素数置乱模块1262如下所示将n个元素(索引0、…、n-1)的素数数组置乱:

randomrd=securerandom(seeds=iek)

//使用iek作为种子来生成伪随机数

对于i从n-1减小到1,执行

将伪随机随机整数赋值给j,使得通过rd交换a[j]和a[i]生成的0≤j≤i

(forifromn-1downto1doj←pseudorandomrandomintegersuchthat0≤j≤igeneratedbyrdexchangea[j]anda[i])

其中,securerandom可以提供密码强度高的随机数生成器(rng)。参考图4b,根据本公开的一个实施例,对图4a的素数的置乱操作生成了置乱的10×11个素数。

关键字获得模块1264被配置为从数据129中检索或提取关键字,并将关键字发送给索引计算模块1266。在某些实施例中,数据129是数据库或表的形式,并且要提取的关键字可以是数据129的一种项目类型或一列。例如,数据129可以是消费者信息,所提取的关键字可以是消费者的电话号码、消费者的社会保险号、消费者姓名等。

索引计算模块1266被配置为在从素数置乱模块1262接收到置乱的素数以及从关键字获得模块1264接收到关键字时,基于置乱的素数来计算关键字的索引,并且将所计算的索引发送给操作模块128。在某些实施例中,索引计算模块1266被配置为通过以下两个步骤来计算关键字的索引:确定关键字中的每个字符的素数,然后获得关键字中的每个字符的素数的乘积(product)。乘积是关键字的索引。在某些实施例中,基于位置和值来选择每个字符的素数。更具体地,针对位置p(从0开始)上的数字字符c选择的素数数字是素数[p*(m-1)+c%n]。在电话号码是关键字的示例中,针对关键字“13445457890”,所选择的素数为:

针对位置0上的“1”:素数[0*10+1%10]=素数[1]=457

针对位置3上的“3”:素数[1*10+3%10]=素数[13]=379

针对位置2上的“4”:素数[2*10+4%10]=素数[24]=47

针对位置3上的“4”:素数[3*10+4%10]=素数[34]=13

针对位置4上的“5”:素数[4*10+5%10]=素数[45]=233

针对位置5上的“4”:素数[5*10+4%10]=素数[54]=79

针对位置6上的“5”:素数[6*10+5%10]=素数[65]=223

针对位置7上的“7”:素数[7*10+7%10]=素数[77]=31

针对位置8上的“8”:素数[8*10+8%10]=素数[88]=523

针对位置9上的“9”:素数[9*10+9%10]=素数[99]=37

针对位置0上的“10”:素数[10*10+0%10]=素数[100]=461。

在某些实施例中,如果字符是字母字符,则需要将字母集中的每个元素转换成数值。例如,如果关键字由小写字母a至z组成,则每个字符ch的值将为ch-’a’(例如,如果ch=’c’,则通过评估’c’-’a’=2将ch转换为值2)。然后,如果区分大小写,则所选择的素数将是素数[p*(m-1)+(ch-’a’)%26]或素数[p*(m-1)+(ch-'a')%52]。

在确定了关键字13445457890中的每个字符的素数数字之后,索引计算模块1266还被配置为通过将素数相乘来获得关键字的索引。具体地,索引通过以下公式计算:

product=457*379*47*13*233*79*223*31*523*37*461

=120129737422987999964933

结果是,索引计算模块1266确定关键字13445457890的索引为120129737422987999964933。通过相同的方法,索引计算模块1266确定数据中所有关键字的索引以及与数据129中的所有电话号码相对应的索引。在某些实施例中,索引计算模块1266被配置为生成数据129的不同索引集合。例如,一个索引集合对应于电话号码,另一个索引集合对应于社会保险号,而又一个索引集合对应于姓名。

在某些实施例中,m个最大的素数的值的乘积(由pm表示)大于可以存储在数据库服务器上的整数值的范围。用max表示最大值,则上述情形为pm>max。因此,使得关键字的所有选择的素数的乘积可能超出数据库中存储的整数的范围。例如,以上示例中所有选择的素数的乘积为:

product=457*379*47*13*233*79*223*31*523*37*461

=120129737422987999964933

product大于mysql中的由max=18446744073709551616表示的bigint的最大值,因此product不能作为整数存储在mysql数据库中。

在某些实施例中,本公开提供了两种方法来解决该问题。在一种方法中,索引计算模块1266被配置为将product存储为可变长字符串(varchar),这将需要用户定义的函数以在搜索阶段中执行搜索操作。在另一种方法中,索引计算模块1266被配置为将编码的关键字切割成多段,将对应的索引进行加密并且将加密后的索引作为单独的字段存储在数据库中。单独的字段的数量(由numf表示)取决于字符集的大小和关键字的长度。在某些实施例中,如何计算单独的字段的数量的算法如下所示,使用上述按增加顺序的素数数字集合素数[n*m]来说明:

在使用numf的情况下,加密的索引将是数组,由长度为numf的product_arr表示。以下是计算product_arr的方法。

要对11位数字的电话号码进行加密,最大的7个素数的乘积将大于max。因此,

product_arr[0]=素数[0*10+1%10]*素数[1*10+3%10]*素数[2*10+4%10]*素数[3*10+4%10]*素数[4*10+5%10]*素数[5*10+4%10]=1947958196431。

product_arr[1]=素数[6*10+5%10]*素数[7*10+7%10]*素数[8*10+8%10]*素数[9*10+9%10]*素数[10*10+0%10]=61669566443。

根据应用的情况,numf存在阈值(thr),因为如果numf太大,可能会浪费数据库上的存储。总之,基于本申请,根据某些实施例的确定如何存储索引的处理如下所示。

如果pm≤max,则在数据库中将product存储为整数;

如果pm>max且numf<thr,则计算product_arr并在数据库中将每个元素存储为整数;

否则,如果pm>max且numf≥thr,则在数据库中将product存储为长文本。

(ifpm<=max:storeproductasanintegerinthedatabase;

ifpm>maxandnumf<thr:calculateproduct_arrandstoreeachelementasanintegerinthedatabase;

elseifpm>maxandnumf>=thr:storeproductasalongtextinthedatabase.)

如上所示,可以将product存储为长文本,并且可以将该长文本转换回大整数以供以后计算。

索引计算模块1266被配置为在生成数据129的每个关键字的索引之后,将索引发送给操作模块128。

操作模块128被配置为在从数据加密模块124接收到加密数据以及从索引计算模块1266接收到数据的索引时,将上传请求连同加密数据和数据的索引一起发送到存储服务器130上以用于存储。图5示出了存储在存储服务器130上的数据的形式,其中数据本身被加密,并且数据的关键字被加密为索引,其中索引1、索引2、…、索引n中的每个索引对应于关键字中的一个关键字。在某些实施例中,操作模块128还可以向数据存储服务器130发送添加、删除和修改请求,以便对已经存储在数据存储服务器130中的数据执行这些操作。

图6示意性地描绘了根据本公开某些实施例的存储服务器的结构。如图6所示,存储服务器130包括处理器132、存储器134和存储设备136。处理器132、存储器134和存储设备136的描述与处理器112、存储器114和存储设备116的描述类似。然而,存储设备136可以具有更大的存储空间以用于长时间存储大量数据,并且存储服务器130可以包括特定的管理应用以管理存储设备136中的数据的存储。

参考图6,存储设备136包括存储应用138和加密数据146。存储应用138被配置为与数据提供方110进行通信以从数据提供方110上传数据,并且与数据消费方150进行通信以将数据下载到数据消费方150。加密数据146可以包括大量数据,其可以包括加密数据和可选地包括未加密数据,并且加密数据集合可以具有图5所示的形式。除此之外,存储应用138包括上传模块140、搜索模块142和下载模块144等。

上传模块140被配置为在接收到由操作模块128发送的上传请求、加密数据和数据的索引时,将加密数据和索引存储到存储设备136。在某些实施例中,在操作模块128发送了添加、删除和修改请求的请求时,上传模块140还被配置为对所存储的数据执行这些操作。

搜索模块142被配置为在从数据消费方150接收到具有一个或多个令牌的搜索请求之后,针对加密数据146的索引来搜索令牌以找到匹配的索引,对与匹配的索引相对应的加密数据进行定位,并且将加密数据或对应的加密数据的位置发送给下载模块144。具体地,针对每个索引值a和令牌值b,搜索模块142计算a%b。当所计算的a%b的值为0时,搜索模块142确定令牌与索引匹配,而当所计算的a%b不为0时,搜索模块142确定令牌与索引不匹配。

下载模块144被配置为在接收到对应的加密数据的位置(或对应的加密数据)时,将对应的加密数据发送给数据消费方150。

在某些实施例中,搜索模块142还被配置为将搜索结果发送给下载模块144,并且下载模块144还被配置为将搜索结果发送给数据消费方150,以便数据消费方150可以评估搜索结果以及评估不同的下载的加密数据集合。

图7示意性地描绘了根据本公开某些实施例的数据消费方的结构。如图7所示,数据消费方150包括处理器152、存储器154和存储设备156。处理器152、存储器154和存储设备156的描述与处理器112、存储器114和存储设备116的描述类似。

存储设备156包括下载应用158和解密数据169。下载应用158被配置为与存储服务器130通信以在存储服务器130上搜索加密数据并从存储服务器130下载有关的加密数据,并且对下载的数据进行解密以形成解密数据。除此之外,下载应用158包括数据解密密钥(ddk)模块160、令牌生成密钥(tgk)模块162、令牌生成模块164和数据解密模块166。

ddk模块160被配置为与数据提供方110的dek模块120通信以从dek模块120接收或获得dek。所获得的dek被命名为数据解密密钥(ddk)。用于数据加密的dek和用于数据解密的ddk是对称密钥。ddk模块160还被配置为将ddk发送给tgk模块162和数据解密模块166。此外,数据解密模块166可访问ddk模块160中的ddk以对数据进行解密。

tgk模块162被配置为在从ddk模块160接收到ddk时,生成tgk,并将tgk发送给令牌生成模块164。tgk模块162被配置为通过对ddk执行密钥导出函数(kdf)来生成tgk,即tgk=kdf(ddk)。令牌生成模块164使用的kdf与iek模块122使用的kdf相同,ddk与dek相同,因此,所生成的tgk与数据提供方110的iek相同。换句话说,数据消费方150的ddk和tgk与数据提供方110的dek和iek相同。在某些实施例中,数据提供方110不包括用于生成tgk的tgk模块,相反,数据消费方150从数据提供方110接收或检索ddk和tgk两者。

令牌生成模块164被配置为在从tgk模块162接收到tgk时,获得一个或多个关键字,并将关键字加密为令牌。在某些实施例中,经由数据消费方150提供的接口从用户输入接收关键字。令牌生成模块164包括用于生成素数数组的素数生成模块1640、用于将素数置乱(shuffling)的素数置乱模块1642、用于获得通配符关键字的通配符关键字模块1644以及用于使用置乱的素数来计算通配符关键字的令牌的令牌计算模块1646。

素数生成模块1640与数据提供方110的素数生成模块1260实质上相同,并且素数置乱模块1642与数据提供方110的素数置乱模块1262实质上相同。素数生成模块1640具有预定义的n和m作为字符大小和关键字,或者从用户的输入接收n和m。由素数生成模块1640生成的素数数组与由素数生成模块1260生成的素数数组相同,其可以是从最小素数(数字2)开始的顺序素数。素数置乱模块1642生成的置乱的素数数组与素数置乱模块1262生成的数组相同,其中使用tgk作为种子以用于生成随机数以用于置乱。

通配符关键字模块1644被配置为通过数据消费方150的接口从用户的输入接收通配符关键字,并且将通配符关键字发送给令牌计算模块1646。通常,通配符关键字的长度与要搜索的关键字(例如,用于生成索引的关键字)相同,通配符关键字的某些字符位置具有明确的值,而通配符关键字的其他字符位置具有通配符符号(例如“*”)。例如,电话号码的通配符关键字可以是“134*******0”,其意指电话号码有11位数字,前三位数字是134,最后一位数字是0,另外7位数字未知。通配符关键字中的一个或多个字符可以是未知的,并且可以基于可用的关键字信息用诸如*之类的通配符替代。通配符关键字中的每个通配符符号表示通配符关键字的特定位置处的未知字符。当通配符关键字具有多于一个的未知字符时,该通配符关键字包含多于一个的通配符符号。具有多于一个的通配符符号的通配符关键字被称为“多字符通配符关键字”,基于“多字符通配符关键字”的搜索被称为“多字符通配符搜索”。

令牌计算模块1646被配置为在置乱的素数数组可用并且通配符关键字可用的情况下,基于其位置和值得到搜索查询中每个非通配符字符的特定素数,计算以上选择的素数的乘积(该乘积称为令牌),并且向存储服务器130发送具有一个或多个令牌的下载请求,以便下载与令牌有关的加密数据。

示例如下所示:如果pm<max,则令牌将为整数。例如,如果通配符搜索查询为“134*******0”,则所选择的素数为:

对于位置0上的“1”:素数[0*10+1%10]=素数[1]=457

对于位置1上的“3”:素数[1*10+3%10]=素数[13]=379

对于位置2上的“4”:素数[2*10+4%10]=素数[24]=47

对于位置10上的“0”:素数[10*10+0%10]=素数[100]=461。

所生成的令牌为:token=457*379*47*461=3752789401

例如,如果通配符搜索查询为“134*******1”,则所选择的素数为:

对于位置0上的“1”:素数[0*10+1%10]=素数[1]=457

对于位置1上的“3”:素数[1*10+3%10]=素数[13]=379

对于位置2上的“4”:素数[2*10+4%10]=素数[24]=47

对于位置10上的“1”:素数[10*101%10]=素数[101]=307。

所生成的令牌为:token=457*379*47*307=2499146087

如果pm>max并且numf<thr,则将token作为可变长字符串存储在数据库中。

或者如果pm>max并且numf<thr,则计算token_arr并将每个元素作为整数存储在数据库中。

以“134*******0”为例

token[0]=素数[0*10+1%10]*素数[1*10+3%10]*素数[2*10+4%10]=8140541

token[1]=素数[10*10+0%10]=461

以“134*******1”为例

token[0]=素数[0*10+1%10]*素数[1*10+3%10]*素数[2*10+4%10]=8140541

token[1]=素数[10*10+1%10]=307

在某些实施例中,当可以存储在存储服务器130上的整数值足够大时,不需要判断是否pm>max和/或numf<thr。

在某些实施例中,可以提供其他类型的ow通配符搜索,例如,通配符关键字?134?指示电话号码在顺序的三元组134之前至少具有一个数字并且在顺序的三元组134之后至少具有一个数字,并且关键字的长度被定义为11个数字,令牌计算模块1646被配置为将通配符关键字?134?定义为7个通配符关键字:*134*******、**134******、***134*****、****134****、*****134***、******134**、*******134*,并计算该7个通配符关键字中的每个通配符关键字的令牌。

数据解密模块166被配置为在从存储服务器130接收到加密数据时,使用从ddk模块160接收到的ddk来对下载的数据进行解密。解密的文档可以被存储为解密数据169。

图8、图9a和图9b示意性地示出了根据本公开某些实施例的用于使用通配符关键字来搜索加密数据的系统的操作,其中图8示出了对数据进行加密、对数据进行索引以及从数据提供方110向存储服务器130上传数据和索引,图9a和图9b示出了准备令牌、使用令牌和索引搜索加密数据以及基于搜索结果将加密数据从存储服务器130下载到数据消费方150。在某些实施例中,图8、图9a和图9b中的方法由图1中所示的系统实现。应特别注意,除非在本公开中另有说明,否则该方法的步骤可以以不同的顺序来布置,因此不限于如图8、图9a和图9b所示的顺序。

图8示出了将加密数据从数据提供方110上传到存储服务器130上。如图8所示,在过程802处,dek模块120生成dek,在过程804处,将dek发送给数据加密模块124,并且将dek发送给iek模块122。在某些实施例中,dke模块120使用对称加密或非对称加密。在某些实施例中,dke模块120使用选自aes、rc4、des、rc5和rc6中的任何一种的算法。在某些实施例中,dke模块120使用aes来生成aes作为dek,并且aes可以是aes-128、aes-192和aes-256中的任何一种。

在过程804处,dek模块120将dek发送给数据加密模块124。在过程806处,在从dek模块120接收到dek时,数据加密模块124对数据129进行加密以获得加密数据。然后,在过程808处,数据加密模块124将加密数据或加密数据的标识或位置发送给操作模块128。

在过程810处,dek模块120将dek发送给iek模块122。

在过程812处,在接收到dek时,iek模块122通过使用kdf函数处理dek来生成iek,即iek=kdf(dek)。在某些实施例中,kdf是安全散列函数,例如sha-256。

在过程814处,在生成iek之后,iek模块122将iek发送给素数生成模块1260。

在过程816处,在接收到iek时,素数生成模块1260生成n×m个素数,其中n是关键字中字符的字符大小,m是关键字的长度。在某些实施例中,所生成的素数是n×m数组或简单的素数序列的形式。在某些实施例中,素数为从2开始的增加的顺序而不跳过任何素数数字。在其他实施例中,可以使用特定规则从数学上可用的素数中选择素数。在某些实施例中,在素数生成模块1260中预先定义n和m。备选地,素数生成模块1260可以从用户输入接收正整数n和m,或者根据对数据129进行分析来提取正整数n和m。例如,可以通过对数据129的列项目的值和长度进行分析来确定n和m。

在过程818处,素数生成模块1260将n×m个素数发送给素数置乱模块1262。

在过程820处,在接收到n×m个素数时,素数置乱模块1262将素数置乱以获得置乱的素数。在某些实施例中,素数置乱模块1262使用iek作为种子来执行置乱操作。因此,在相同的iek和相同的置乱函数的情况下,所获得的置乱的素数相同。换句话说,所生成的用于置乱的随机数是伪随机数。

在过程822处,在获得了置乱的素数之后,素数置乱模块1262将置乱的素数发送给索引计算模块1266。

在某些实施例中,可以预先执行生成置乱的素数的过程,使得在必要时,对数据和关键字进行加密以及上传数据的过程可以使用置乱的素数。在其他实施例中,当需要加密和上传数据时,顺序执行生成置乱的素数以及对数据和关键字进行加密以获得加密数据和索引的过程。

在过程824处,关键字获得模块1264从数据129中提取关键字。在某些实施例中,数据129是数据库,关键字获得模块1264是sql查询,其检索与一个属性(例如,消费者的电话号码)相对应的数据库的列。

在过程826处,在获得了关键字之后,关键字获得模块1264将所获得的关键字发送给索引计算模块1266。

在过程828处,在接收到置乱的素数和关键字时,索引计算模块1266使用置乱的素数来计算每个关键字的索引。在某些实施例中,关键字中的每个字符选自n个项目,n个项目例如是从0至9的10个数字、从a到z的26个字母字符、包括小写字母a到z和大写字母a到z在内的52个字母字符;每个关键字的长度为m,例如11位数的电话号码、9位数的社会保险号或包含消费者姓名的固定长度文本。索引计算模块1266首先通过素数[p*(m-1)+c%n](其为对应的素数在n×m素数数组中的位置)确定关键字中每个字符对应的素数数字。然后,索引计算模块1266计算关键字中的字符的对应素数的乘积,乘积即为关键字的索引。所提取的关键字中的每个关键字均被计算为具有通过该方式得到的特定索引。

在过程830处,索引计算模块1266将所有关键字的索引发送给操作模块128。

在过程832处,在接收到加密数据(或加密数据的标识或位置)和索引时,操作模块128将加密数据和索引进行组合,并且在过程834处,将组合后的加密数据及其索引发送给存储服务器130。存储服务器130(特别是上传模块140)随后存储加密数据和加密数据的索引,其中,加密数据及其对应的索引通过加密数据的标识链接,或者使用预定布置存储在一起。

图9a和图9b示出了当加密数据和索引在存储服务器130上可用时,使用通配符搜索来对索引进行搜索,并且从存储服务器130将具有匹配的索引的对应的加密数据下载到数据消费方150。

如图9a和图9b所示,在过程902处,数据提供方110的dek模块120与数据消费方150的ddk模块160共享dek,其中ddk与dek相同。

在过程904处,在接收到ddk时,ddk模块160将ddk发送给tgk模块162。

在过程906处,在接收到ddk时,tgk模块162使用密钥导出函数(kdf)来生成tgk。tgk模块162使用的kdf与iek模块122使用的kdf相同,并且tgk模块162生成的tgk与iek模块122生成的iek相同。

在过程908处,tgk模块162将tgk发送给素数生成模块1640。

在过程910处,在接收到tgk时,素数生成模块1640生成n×m素数数组。由素数生成模块1640生成的素数数组与由素数生成模块1260生成的素数数组相同。

在过程912处,在获得了n×m素数数组和tgk之后,素数生成模块1640将n×m素数数组和tgk发送给素数置乱模块1642。

在过程914处,在接收到n×m素数数组和tgk时,素数置乱模块1642使用tgk作为种子来生成随机数,并如上所述地将n×m素数数组置乱。

在过程916处,在获得了置乱的n×m素数数组之后,素数置乱模块1642将置乱的n×m素数数组发送给令牌计算模块1646。在某些实施例中,预先执行过程902至过程916,并且令牌计算模块1646在需要时检索置乱的n×m素数数组。

在过程918处,通配符关键字模块1644从用户输入接收通配符关键字。在某些实施例中,用户可以使用接口(例如,图形用户界面(gui))将通配符关键字输入到数据消费方150的通配符关键字模块1644。然后在过程920处,通配符关键字模块1644将通配符关键字发送给令牌计算模块1646。

在过程922处,在接收到通配符关键字和置乱的n×m素数数组时,令牌计算模块1646使用置乱的n×m素数数组来计算通配符关键字的令牌。在某些实施例中,令牌计算模块1646可以在接收到通配符关键字之后检索置乱的n×m素数数组。在某些实施例中,令牌计算模块1646可以无需完全检索置乱的n×m素数数组。相反,其在令牌计算期间对置乱的n×m素数数组进行检查,其中n×m素数数组存储在存储设备156中的预定位置。如上所述,令牌计算模块1646计算公式[p*(m-1)+c%n]的值,在置乱的n×m素数数组中检查通配符关键字中每个非通配符字符的对应素数,并且使用非通配符字符的素数的乘积作为通配符关键字的令牌。如上所述,当通配符关键字中的多于一个的字符未知且由通配符符号表示时,通配符关键字被称为“多字符通配符关键字”。

在过程924处,在获得了一个或多个令牌(每个令牌对应于通配符关键字)之后,令牌计算模块1646准备具有一个或多个令牌的下载请求,并且向存储服务器130的搜索模块142发送该下载请求。

在过程926处,在接收到下载请求时,搜索模块142从下载请求中提取令牌,针对加密数据146的索引来搜索每个令牌。当索引除以令牌而没有余数时,搜索模块142确定在令牌和索引之间存在匹配,结果是,将具有该索引的加密数据确定为令牌的搜索结果。当令牌对应于具有多于一个的通配符字符(未知字符)的通配符关键字时,该搜索被称为“多字符通配符搜索”。

然后在过程928处,搜索模块142将加密数据的位置或路径以及可选的令牌与索引之间的匹配发送给下载模块144。

在过程930处,在接收到与匹配的索引相对应的加密数据的路径时,下载模块144对这些加密数据进行检索,然后在过程932处,向数据解密模块166发送加密数据。在某些实施例中,下载模块144还可以向数据解密模块166发送令牌和索引之间的匹配结果,使得用户也可以访问这些信息以对下载的数据进行进一步分析。

在过程934处,在接收到加密数据时,数据解密模块166从ddk模块160检索与加密数据相对应的ddk,在过程936处,使用检索到的ddk对加密数据进行解密,并且在过程938处,发送并存储解密结果,作为解密数据169。在某些实施例中,ddk和对应的加密数据具有某些标识(例如,时间戳),以匹配用于特定加密数据的正确的ddk。

在某些方面,本发明涉及存储计算机可执行代码的非暂时性计算机可读介质。在某些实施例中,计算机可执行代码可以是存储在如上所述的存储设备116、136或156中的软件。在计算机可执行代码被执行时,可以执行上述方法或方法的一部分。在某些实施例中,非暂时性计算机可读介质可以包括但不限于如上所述的存储设备116、136或156,或者数据提供方110、存储服务器130或数据消费方150的任何其他存储介质。

在某些方面,本公开提供了一种新方法,以支持对由固定长度的任何编码关键字索引的加密数据进行通配符搜索。除此之外,在某些实施例中,本公开具有以下优点等:1)数据消费方能够在不对所有密文数据解密的情况下对加密数据进行搜索;2)在将数据上传到存储服务器时,索引加密在数据提供方侧在计算上是高效的;3)在对加密数据进行搜索时,令牌生成在数据消费方侧在计算上是高效的;4)服务器仅需要针对每个加密的索引执行模运算,这在服务器侧是轻量级的;5)根据应用场景,搜索算法可以直接转换为sql查询,因此比必须在数据库服务器端实现用户定义函数的其他技术更易于部署。

仅出于说明和描述的目的呈现了本公开的示例性实施例的前述描述,并且不旨在穷举或将本公开限制于所公开的精确形式。鉴于上述教导,许多修改和变化是可能的。

选择和描述实施例是为了说明本公开的原理及其实际应用,以使得本领域其他技术人员能够利用本公开和各种实施例以及适合于预期的特定用途的各种修改。在不脱离本发明的精神和范围的情况下,备选实施例对于本公开所属领域的技术人员将变得显而易见。因此,本公开的范围由随附权利要求、而不是以上实施例和本文描述的示例性实施例来限定。

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