CN113254971B - 一种基于揭序加密的多数据类型密文比较方法 - Google Patents
一种基于揭序加密的多数据类型密文比较方法 Download PDFInfo
- Publication number
- CN113254971B CN113254971B CN202110644822.3A CN202110644822A CN113254971B CN 113254971 B CN113254971 B CN 113254971B CN 202110644822 A CN202110644822 A CN 202110644822A CN 113254971 B CN113254971 B CN 113254971B
- Authority
- CN
- China
- Prior art keywords
- data
- ore
- plaintext
- algorithm
- bit
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/602—Providing cryptographic facilities or services
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6209—Protecting access to data via a platform, e.g. using keys or access control rules to a single file or object, e.g. in a secure envelope, encrypted and accessed using a key, or with access control rules appended to the object itself
Abstract
本发明提供一种基于揭序加密的多数据类型密文比较方法,包括系统建立算法ORE.Setup、加密算法ORE.Encrypt、解密算法ORE.Decrypt、比较算法ORE.Compare、以及多种数据类型的密文比较方法;其中,运用了伪随机函数F和对称加密算法,由于函数F是伪随机安全的,这使得本发明能够达到IND‑OCPA安全,即有序的选择明文攻击不可区分安全。并进一步针对不同数据结构,为多种数据类型的消息设计了不同的编码和解码方式,实现了整数、字符串、浮点数的密文比较。
Description
技术领域
本发明涉及加密技术领域,具体而言,涉及一种基于揭序加密的多数据类型密文比较方法。
背景技术
人工智能技术的兴起,将大数据与计算机技术相结合,从海量数据中获得有价值的信息,充分提升了数据的利用价值,但是明文状态下的数据挖掘是造成数据隐私泄露的直接原因,给个人或者组织带来不可预料的损失。研究学者们尝试利用新型密码技术来保护挖掘运算中的数据的隐私安全,包括同态加密技术、安全多方计算、保形加密、保序加密、揭序加密等。
保序加密(Order Preserving Encryption,OPE)是指密文保留原有明文顺序的加密技术,能够对密文执行比较运算,来判断相应明文的大小关系。能够在密文信息情况下,实现对数据的比较、排序。可以应用于数据库加密、密态统计等场景下范围查询、近邻检索等。
2004年,Agrawal等人首次提出了保序加密的概念,是指密文保留原有明顺序的加密方案。同时,Agrawal等人并构造了第一个完整的保序加密体制,但是未给出保序加密的安全性定义和方案的可证明安全。2009年,Boldyreva等人深入研究了保序加密的可证明安全,并构造了第一个可证明安全的保序加密方案(BCLO方案)。随后,Boldyreva等人在美密会上分析了保序加密的单向安全性、随机保序函数安全性,并指出如果保序加密为了只泄露顺序信息和等值信息,算法必须产生足够大的密文。也即,密文空间必须相对明文空间扩张一定的大小,以保障安全性。2013年,Dongxi Liu等人提出了一种非线性的保序加密体系,能够提升对密文数据库顺序搜索请求的响应。之后,Teranishi等人提出了另一种非线性的OPE算法,他们在密文中插入了随机大小的区间,并且证明了这种方法相较部分明文不可分辨的随机保序函数来说具有很强的安全性。
在保序加密基础上进一步发展,揭序加密(Order Revealing Encryption,ORE)被提出。采用该密码技术,可以通过专门的比较函数来从密文判断出明文的大小,但是密文不一定保序。2015年,美国斯坦福大学的Boneh等人首次提出了揭序加密,类似与保序加密,是一种支持在密文间运算以比较对应明文大小的加密方法,他们给出了基于多线性映射的揭序加密方案,并证明达到了IND-OCPA安全。2016年,美国斯坦福大学Nathan Chenette等人在著名国际会议Fast Software Encryption上所提出CLWW揭序加密方案,是第一个基于伪随机函数的高效保序加密方案。
保序加密和揭序加密作为能够执行对密文比较和排序的新型加密技术,国内对该技术的研究较少,主要涉及保序加密算法设计与分析、数据库加密应用、云存储安全的应用。
发明内容
本发明旨在提供一种基于揭序加密的多数据类型密文比较方法,以解决上述技术问题。
本发明提供的一种基于揭序加密的多数据类型密文比较方法,包括:
步骤1,系统建立算法ORE.Setup(k)→(PP,sk):
输入安全参数k,选择一个参数M≥3,令明文比特长度为n;
选择一个带密钥的伪随机函数 表示密钥空间,表示剩余类环;一个对称加密算法symmetricAlg=(symmetricAlg.Encrypt,symmetricAlg.Decrypt,),令公共参数PP=(n,M,F,symmetricAlg)并随机选择一个私钥sk;
步骤2,加密算法ORE.Encrypt(PP,sk,m)→c:
cdata=symmetricAlg.Encrypt(k,m);
uore,i=F(sk,(i,b0b1b2…bi-1||0n-i))+bimod M,i=0,1,…,n-1;
输出密文c=(cdata,(uore,0,uore,1,...,uore,n-1));
步骤3,解密算法ORE.Decrypt(PP,sk,c)→m:
输入公共参数PP、密文c=(cdata,(uore,0,uore,1,...,uore,n-1))和私钥sk,计算输出明文m=symmetricAlg.Decrypt(sk,cdata);
步骤4,比较算法ORE.Compare(PP,c,c′)→b:
输入公共参数PP以及两个密文c=(cdata,(uore,0,uore,1,...,uore,n-1))和c′=(c′data,(u′ore,0,u′ore,1,...,u′ore,n-1)),令与两个密文对应的明文分别为m、m′,则:
如果对于所有的i=0,1,...,n-1,uore,i=u′ore,i,则输出b=0,说明m=m′;
如果找到最小的i∈{0,1,...,31},使得uore,i≠u′ore,i,那么当u′ore,i=uore,i+1modM,则输出b=1,说明m>m′;
如果找到最小的i∈{0,1,...,31},使得uore,i≠u′ore,i,那么当u′ore,i≠uore,i+1modM,则输出b=2,说明m<m′。
进一步的,采用分组密码算法AES128来实例化所述基于揭序加密的多数据类型密文比较方法中的伪随机函数F和对称加密算法;该分组密码算法AES128包括密钥扩展算法AES128.KeySchedule(key)→keyexp、加密算法AES128.Encrypt(keyexp,m)→c、解密算法AES128.Decrypt(keyexp,c)→m;其中,密钥key的比特长度为128;keyexp由10个128比特的轮子密钥组成,共计1280比特;明文m的比特长度n为128。
进一步的,步骤1系统建立算法ORE.Setup(k)→(PP,sk)具体包括:
(1-1)输入安全参数k,即128比特的密钥key;
(1-2)运行AES128.KeySchedule(key)→keyexp;
(1-3)根据用户所需要的数据类型,可以选取n=1,2,...,128;在此我们假设使用C语言的unsigned int类型,支持32位整型的比较运算,即明文的比特长度n=32;
(1-4)令M=4;
(1-5)选择AES128.Encrypt({0,1}1280,{0,1}8||{0,1}31||089)作为伪随机函数F;
(1-6)选择(AES128.Encrypt,AES128.Decrypt)作为对称加密算法symmetricAlg;
(1-7)输出密钥sk=keyexp,公共参数PP={n,M,F,symmetricAlg}。
进一步的,可以通过预先设置公共参数PP={n,M,F,symmetricAlg},系统建立算法只运行分组密码算法AES128中的密钥扩展算法AES128.KeySchedule(key)→keyexp,将系统建立算法简化为ORE.Setup(key)→sk。
进一步的,步骤2加密算法ORE.Encrypt(PP,sk,m)→c具体包括:
(2-1)输入公共参数PP=(n,M,F,symmetricAlg)、1280比特的私钥sk和明文m;
(2-2)在明文m右边填96个0,得到一个128比特的数据m128=m||096;
(2-3)运行分组密码算法AES128中的加密算法得到128比特数据密文cdata=AES128.Encrypt(sk,m128);
(2-5)从i=0,1,2,...,31,依次执行操作①、②:
①如果i=0,则令128比特数据tmp=0128;如果1≤i≤31,将i表示成1个8比特数据,则令tmp=i||b0b1b2…bi-1||0120-i;
②计算uore,i=(AES128.Encrypt(sk,tmp)+bi)mod M;
(2-6)令揭序密文为uore=(uore,0,uore,1,...,uore,n-1);
(2-7)输出192比特密文c=(cdata,uore)。
进一步的,步骤3解密算法ORE.Decrypt(PP,sk,c)→m具体包括:
(3-1)输入公共参数PP=(n,M,F,symmetricAlg)、1280比特的私钥sk、密文c=(cdata,uore);
(3-2)运行分组密码算法AES128中的解密算法得到128比特数据m~=AES128.Decrypt(sk,cdata);
(3-3)截取128比特数据m~最左边32比特数据,作为明文m;
(3-4)输出32比特明文m。
进一步的,步骤4比较算法ORE.Compare(PP,c,c′)→b具体包括:
(4-1)输入公共参数PP={n,M,F,symmetricAlg},两个192比特密文c=(cdata,uore)、c′=(c′data,u′ore),则有:
如果对于所有的i=0,1,...,n-1,使得uore,i=u′ore,i,则输出b=0;
如果找到最小的i∈{0,1,...,31},使得uore,i≠u′ore,i:那么当u′ore,i=uore,i+1modM,则输出b=1;
如果找到最小的i∈{0,1,...,31},使得uore,i≠u′ore,i,那么当u′ore,i≠uore,i+1modM,则输出b=2;
(4-2)输入2比特的结果数据b∈{0,1,2};令与两个密文对应的明文分别为m、m′,当b=0,则m=m′;当b=1,则m>m′;当b=2,则m<m′。
在一个实施例中,当明文m是无符号位数据类型,则执行步骤2加密算法时不需要对明文m进行编码,直接将明文m输入到加密算法中;执行步骤3解密算法后,不需要对解密得到的明文m进行解码,直接将解密得到的明文m从高位到低位依次存放在消息存储空间中。
在一个实施例中,当对类型为字符型或整型数据的明文m执行步骤2加密算法前,采用以下方法进行编码:
①提取明文m的符号位、有效数值位分别为sign、data;
②如果符号为0,则把该数据编码为1,即msign=1;如果符号位为1,则把数据编码为0,即msign=0;
③令mdata=data||0127-len;如果明文m为字符型数据,则len=7;如果明文m为整型数据,则len=31;
④)编码mcode=msign||mdata;
⑤输出编码后的明文mcode;
将编码后的明文mcode经过步骤2加密算法和步骤3解密算法后,采用以下方法进行解码:
①根据数据类型设置的明文mcode符号位、有效数值位分别为sign、data;
②如果明文mcode最左边比特值为1,则符号位sign=0;如果明文mcode最左边比特值为0,则符号位sign=1;
③如果明文mcode为字符型数据,则data为mcode从左边到右边第2至8比特,data=mdata[1:8];如果明文mcode为整型数据,则data为mcode从左边到右边第2至32比特,data=mdata[2:32];
④解码m=sign||data;
⑤输出解码后的明文m。
在一个实施例中,当对类型为浮点数类型数据的明文m执行步骤2加密算法前,采用以下方法进行编码:
①提取明文m的符号位、指数位、有效数值位分别为sign、exp、data;
②如果符号位sign=0,则把该明文m编码为1,即msign=1;datanew=data;如果符号位sign=1,则把该明文m编码为0,即msign=0;并将data取补码,即datanew=补码(data);
③令mexp=exp,mdata=datanew;
④编码mcode=msign||mexp||mdata||0128-x,当明文m为float类型时,x=32;当明文m为double类型时,x=64;
⑤输出编码后的mcode;
将编码后的mcode经过步骤2加密算法和步骤3解密算法后,采用所述编码方法的逆运算进行解码,得到明文m。
综上所述,由于采用了上述技术方案,本发明的有益效果是:
1、本发明具有较高的安全性:由于函数是伪随机安全的条件下,使得本发明能够达到IND-OCPA安全,即有序的选择明文攻击不可区分安全。再进一步,本发明选择了全轮的分组密码算法AES128作为伪随机函数来实例化,并且分组密码算法AES128被证明是具有伪随机安全的,因此本发明给出的实例化方案能够满足IND-OCPA安全。在IND-OCPA模型下,敌手攻击的计算复杂度不低于2128。
2、本发明针对不同数据结构,为多种数据类型的消息设计了不同的编码和解码方式,能够在数据加密状态下,支持对字符型、无符号字符型、整型、无符号整型、单精度浮点数、双精度浮点数等多种数据类型的密文数据的比较、排序,可以应用于数据库加密、密态统计等场景下范围查询、近邻检索等。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本发明实施例技术原理的明文比较大小过程示意图。
图2为本发明实施例技术原理的密文比较大小过程示意图。
图3为本发明实施例的基于揭序加密的多数据类型密文比较方法的整体流程图。
图4为本发明实施例的加密算法流程图。
图5为本发明实施例的解密算法流程图。
图6为本发明实施例的比较算法流程图。
图7为本发明实施例的字符型和整型数据的存储模式示意图。
图8为本发明实施例的浮点数类型数据的存储模式示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。
因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明是在揭序加密方案的基础上,提供一种基于揭序加密的多数据类型密文比较方法,从而为多种数据类型在密文域的密文比较和排序提供方法,可以应用于数据库加密、密态统计等场景下的范围查询、临近搜索等。首先介绍本发明基于揭序加密的多数据类型密文比较方法的技术原理:
如图1所示,在明文情况下比较B和B′的大小,可以将两个数按照从高位到低位进行同位置逐比特比较。如果在某个位置首次发生不同,那么该位置比特值较大的数据,是大的数;反之,是小的数。
为了在不泄露明文的情况下,密文比较两个数的大小也采用如图1所示的原理,只是用当前位置所有前序高位来生成一个随机掩码来隐藏当前位置的信息。令U、U′分别为B、B′的加密结果。假设在明文比较时,在第7个位置首次发生同位置比特值不同。假设b7=0,b′7=1,则可以判断B<B′。如图2所示,在加密状态下,由于从0至6个位置都是相同的,则X′7=X7。则肯定满足U′7=U7+1mod M。那么根据明文的情况,可以判断出B<B′。
基于上述原理,本发明提出一种基于揭序加密的多数据类型密文比较方法,如图3所示,包括系统建立算法ORE.Setup、加密算法ORE.Encrypt、解密算法ORE.Decrypt、比较算法ORE.Compare,具体地:
步骤1,系统建立算法ORE.Setup(k)→(PP,sk):
输入安全参数k,选择一个参数M≥3,令明文比特长度为n;
选择一个带密钥的伪随机函数 表示密钥空间,表示剩余类环;一个对称加密算法symmetricAlg=(symmetricAlg.Encrypt,symmetricAlg.Decrypt,),令公共参数PP=(n,M,F,symmetricAlg)并随机选择一个私钥sk;
步骤2,加密算法ORE.Encrypt(PP,sk,m)→c:
cdata=symmetricAlg.Encrypt(k,m);
uore,i=F(sk,(i,b0b1b2…bi-1||0n-i))+bimod M,i=0,1,…,n-1;
输出密文c=(cdata,(uore,0,uore,1,...,uore,n-1));
步骤3,解密算法ORE.Decrypt(PP,sk,c)→m:
输入公共参数PP、密文c=(cdata,(uore,0,uore,1,...,uore,n-1))和私钥sk,计算输出明文m=symmetricAlg.Decrypt(sk,cdata);
步骤4,比较算法ORE.Compare(PP,c,c′)→b:
输入公共参数PP以及两个密文c=(cdata,(uore,0,uore,1,...,uore,n-1))和c′=(c′data,(u′ore,0,u′ore,1,...,u′ore,n-1)),令与两个密文对应的明文分别为m、m′,则:
如果对于所有的i=0,1,...,n-1,使得uore,i=u′ore,i,则输出b=0,说明m=m′;
如果找到最小的i∈{0,1,...,31},使得uore,i≠u′ore,i:那么当u′ore,i=uore,i+1modM,则输出b=1,说明m>m′;
如果找到最小的i∈{0,1,...,31},使得uore,i≠u′ore,i,那么当u′ore,i≠uore,i+1modM,则输出b=2,说明m<m′。
实施例
本实施例采用分组密码算法AES128来实例化上述基于揭序加密的多数据类型密文比较方法中的伪随机函数F和对称加密算法;该分组密码算法AES128包括密钥扩展算法AES128.KeySchedule(key)→keyexp、加密算法AES128.Encrypt(keyexp,m)→c、解密算法AES128.Decrypt(keyexp,c)→m;其中,密钥key的比特长度为128;keyexp由10个128比特的轮子密钥组成,共计1280比特;明文m的比特长度n为128。由此,本实施例的基于揭序加密的多数据类型密文比较方法包括:
步骤1,系统建立算法ORE.Setup(k)→(PP,sk):
(1-1)输入安全参数k,即128比特的密钥key;
(1-2)运行AES128.KeySchedule(key)→keyexp;
(1-3)根据用户所需要的数据类型,可以选取n=1,2,...,128;在此我们假设使用C语言的unsigned int类型,支持32位整型的比较运算,即明文的比特长度n=32;
(1-4)令M=4;
(1-5)选择AES128.Encrypt({0,1}1280,{0,1}8||{0,1}31||089)作为伪随机函数F;
(1-6)选择(AES128.Encrypt,AES128.Decrypt)作为对称加密算法symmetricAlg;
(1-7)输出密钥sk=keyexp,公共参数PP={n,M,F,symmetricAlg}。
需要注意的是,在一些实施例中,为了实现方便可以预先设置公共参数PP={n,M,F,symmetricAlg},系统建立算法只需要运行分组密码算法AES128中的密钥扩展算法AES128.KeySchedule(key)→keyexp,此时可将系统建立算法简化为ORE.Setup(key)→sk。
步骤2,如图4所示,加密算法ORE.Encrypt(PP,sk,m)→c:
(2-1)输入公共参数PP=(n,M,F,symmetricAlg)、1280比特的私钥sk和明文m;
(2-2)在明文m右边填96个0,得到一个128比特的数据m128=m||096;
(2-3)运行分组密码算法AES128中的加密算法得到128比特数据密文cdata=AES128.Encrypt(sk,m128);
(2-5)从i=0,1,2,...,31,依次执行操作①、②:
①如果i=0,则令128比特数据tmp=0128;如果1≤i≤31,将i表示成1个8比特数据,则令tmp=i||b0b1b2…bi-1||0120-i;
②计算uore,i=(AES128.Encrypt(sk,tmp)+bi)mod M;
(2-6)令揭序密文为uore=(uore,0,uore,1,...,uore,n-1);
(2-7)输出192比特密文c=(cdata,uore)。
步骤3,如图5所示,解密算法ORE.Decrypt(PP,sk,c)→m:
(3-1)输入公共参数PP=(n,M,F,symmetricAlg)、1280比特的私钥sk、密文c=(cdata,uore);
(3-2)运行分组密码算法AES128中的解密算法得到128比特数据m~=AES128.Decrypt(sk,cdata);
(3-3)截取128比特数据m~最左边32比特数据,作为明文m;
(3-4)输出32比特明文m。
步骤4,如图6所示,比较算法ORE.Compare(PP,c,c′)→b:
(4-1)输入公共参数PP={n,M,F,symmetricAlg},两个192比特密文c=(cdata,uore)、c′=(c′data,u′ore),则有:
如果对于所有的i=0,1,...,n-1,使得uore,i=u′ore,i,则输出b=0;
如果找到最小的i∈{0,1,...,31},使得uore,i≠u′ore,i:那么当u′ore,i=uore,i+1modM,则输出b=1;
如果找到最小的i∈{0,1,...,31},使得uore,i≠u′ore,i,那么当u′ore,i≠uore,i+1modM,则输出b=2;
(4-2)输入2比特的结果数据b∈{0,1,2};令与两个密文对应的明文分别为m、m′,当b=0,则m=m′;当b=1,则m>m′;当b=2,则m<m′。
上述步骤2加密算法和步骤3解密算法中,会涉及对数据的编码和解码,用途是:编码时,根据消息数据类型(包括无符号整型、有符号整型、单精度浮点数、单精度浮点数、字符类型等)进行编码为明文。解码时,将解密的明文结果解码为消息数据类型。编码用于加密之前,解码用于解密之后。
在实际应用时,需要将数据类型保持一致,或者采用IEEE754国际标准实现数据类型之间的转换。
(1)数据类型的编码与解码
支持的数据类型:字符型char、无符号字符型unsigned char、整型int、无符号整型unsigned int、单精度浮点数float、双精度浮点数double。
需要根据编译器对数据类型的存储模式进行解析。一般可以采用两种方法进行编码与解码:①将需要比较的数据集转换到同一个正整数空间中,并在正整数空间可以保持数据的偏序关系;②将需要比较的数据集分段为{符号位,指数位,数据位},然后将每个分段的数据转换到各个分段位上的同一个正整数空间中,并在各个分段位的正整数空间可以保持数据的偏序关系。
1)无符号位数据类型编码与解码
主要包括无符号字符型unsigned char、无符号整型unsigned int等类型。一般情况,编译器直接存储其数据二进制表达,无需编码和解码过程,或者说编码和解码是一个恒等变换。因此当明文m是无符号位数据类型,则执行步骤2加密算法时不需要对明文m进行编码,可以直接将明文m输入到加密算法中;执行步骤3解密算法后,不需要对解密得到的明文m进行解码,直接将解密得到的明文m从高位到低位依次存放在消息存储空间中。
2)字符型与整型数据的编码与解码
符号位:最左边1比特位符号位,0表示正数,1表示负数。
有效数值位:当符号位为0时,7位或31比特数据位直接存储有效数据的二进制形式;当符号为1时,7位或者31比特数据位存储的是有效数据的补码,如图7所示。
由此,当对为字符型或整型数据的明文m执行步骤2加密算法前,采用以下方法进行编码:
①提取明文m的符号位、有效数值位分别为sign、data;
②如果符号为0,则把该数据编码为1,即msign=1;如果符号位为1,则把数据编码为0,即msign=0;
③令mdata=data||0127-len;如果明文m为字符型数据,则len=7;如果明文m为整型数据,则len=31;
④)编码mcode=msign||mdata;
⑤输出编码后的明文mcode。
则当对为字符型或整型数据的明文m编码后得到的明文mcode经过步骤2加密算法和步骤3解密算法后,采用以下方法进行解码:
①根据数据类型设置的明文mcode符号位、有效数值位分别为sign、data;
②如果明文mcode最左边比特值为1,则符号位sign=0;如果明文mcode最左边比特值为0,则符号位sign=1;
③如果明文mcode为字符型数据,则data为mcode从左边到右边第2至8比特,data=mdata[1:8];如果明文mcode为整型数据,则data为mcode从左边到右边第2至32比特,data=mdata[2:32];
④解码m=sign||data;
⑤输出解码后的明文m。
3)浮点数类型数据的编码与解码
符号位:最左边1比特位符号位,0表示正数,1表示负数。
指数位:从左到右,紧接着符号位的数据是指数位。float类型的指数位共8位,偏移量为127;double类型类型的指数位共11位,偏移量为1023。
数值位:从左到右,紧接着指数位的数据是数值位,float类型的数值位共23位,double类型类型的指数位共52位,如图8所示。
由此,当对为浮点数类型数据的明文m执行步骤2加密算法前,采用以下方法进行编码:
①提取明文m的符号位、指数位、有效数值位分别为sign、exp、data;
②如果符号位sign=0,则把该明文m编码为1,即msign=1;datanew=data;如果符号位sign=1,则把该明文m编码为0,即msign=0;并将data取补码,即datanew=补码(data);
③令mexp=exp,mdata=datanew;
④编码mcode=msign||mexp||mdata||0128-x,当明文m为float类型时,x=32;当明文m为double类型时,x=64;
⑤输出编码后的mcode。
当对为浮点数类型数据的明文m编码后得到的明文mcode经过步骤2加密算法和步骤3解密算法后,进行解码的方法为上述编码方法的逆运算,在此不再赘述。
至此,本实施例实现了一种,基于揭序加密的多数据类型密文比较方法,其具有如下有益效果:
1、本发明具有较高的安全性:由于函数是伪随机安全的条件下,使得本发明能够达到IND-OCPA安全,即有序的选择明文攻击不可区分安全。再进一步,本发明选择了全轮的分组密码算法AES128作为伪随机函数来实例化,并且分组密码算法AES128被证明是具有伪随机安全的,因此本发明给出的实例化方案能够满足IND-OCPA安全。在IND-0CPA模型下,敌手攻击的计算复杂度不低于2128。
2、本发明针对不同数据结构,为多种数据类型的消息设计了不同的编码和解码方式,能够在密文下,支持对字符型、无符号字符型、整型、无符号整型、单精度浮点数、双精度浮点数等多种数据类型的密文数据的比较、排序,可以应用于数据库加密、密态统计等场景下范围查询、近邻检索等。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (7)
1.一种基于揭序加密的多数据类型密文比较方法,其特征在于,包括:
步骤1,系统建立算法ORE.Setup(k)→(PP,sk):
输入安全参数k,选择一个参数M≥3,令明文比特长度为n;
选择一个带密钥的伪随机函数 表示密钥空间,表示剩余类环;一个对称加密算法symmetricAlg=(symmetricAlg.Encrypt,symmetricAlg.Decrypt),令公共参数PP=(n,M,F,symmetricAlg),并随机选择一个私钥sk;
步骤2,加密算法ORE.Encrypt(PP,sk,m)→c:
cdata=symmetricAlg.Encrypt(k,m);
uore,i=F(sk,(i,b0b1b2...bi-1||0n-i))+bimod M,i=0,1,...,n-1;
输出密文c=(cdata,(uore,0,uore,1,...,uore,n-1));
步骤3,解密算法ORE.Decrypt(PP,sk,c)→m:
输入公共参数PP、密文c=(cdata,(uore,0,uore,1,...,uore,n-1))和私钥sk,计算输出明文m=symmetricAlg.Decrypt(sk,cdata);
步骤4,比较算法ORE.Compare(PP,c,c′)→b:
输入公共参数PP以及两个密文c=(cdata,(uore,0,uore,1,...,uore,n-1))和c′=(c′data,(u′ore,0,u′ore,1,...,u′ore,n-1)),令与两个密文对应的明文分别为m、m′,则:
如果对于所有的i=0,1,...,n-1,uore,i=u′ore,i,则输出b=0,说明m=m′;
如果找到最小的i∈{0,1,...,31},使得uore,i≠u′ore,i,那么当u′ore,i=uore,i+1 mod M,则输出b=1,说明m>m′;
如果找到最小的i∈{0,1,...,31},使得uore,i≠u′ore,i,那么当u′ore,i≠uore,i+1 mod M,则输出b=2,说明m<m′;
当明文m是无符号位数据类型,则执行步骤2加密算法时不需要对明文m进行编码,直接将明文m输入到加密算法中;执行步骤3解密算法后,不需要对解密得到的明文m进行解码,直接将解密得到的明文m从高位到低位依次存放在消息存储空间中;
当对为字符型或整型数据的明文m执行步骤2加密算法前,采用以下方法进行编码:
①提取明文m的符号位、有效数值位分别为sign、data;
②如果符号为0,则把该数据编码为1,即msign=1;如果符号位为1,则把数据编码为0,即msign=0;
③令mdata=data||0127-len;如果明文m为字符型数据,则len=7;如果明文m为整型数据,则len=31;
④编码mcode=msign||mdata;
⑤输出编码后的明文mcode;
将编码后的明文mcode经过步骤2加密算法和步骤3解密算法后,采用以下方法进行解码:
①根据数据类型设置明文mcode的符号位、有效数值位分别为sign、data;
②如果明文mcode最左边比特值为1,则符号位sign=0;如果明文mcode最左边比特值为0,则符号位sign=1;
③如果明文mcode为字符型数据,则data为mcode从左边到右边第2至8比特,data=mdata[1:8];如果明文mcode为整型数据,则data为mcode从左边到右边第2至32比特,data=mdata[2:32];
④解码m=sign||data;
⑤输出解码后的明文m;
当对为浮点数类型数据的明文m执行步骤2加密算法前,采用以下方法进行编码:
①提取明文m的符号位、指数位、有效数值位分别为sign、exp、data;
②如果符号位sign=0,则把该明文m编码为1,即msign=1;datanew=data;如果符号位sign=1,则把该明文m编码为0,即msign=0;并将data取补码,即datanew=补码(data);
③令mexp=exp,mdata=datanew;
④编码mcode=msign||mexp||mdata||0128-x,当明文m为float类型时,x=32;当明文m为double类型时,x=64;
⑤输出编码后的mcode;
将编码后的mcode经过步骤2加密算法和步骤3解密算法后,采用所述编码方法的逆运算进行解码,得到明文m。
2.根据权利要求1所述的基于揭序加密的多数据类型密文比较方法,其特征在于,采用分组密码算法AES128来实例化所述基于揭序加密的多数据类型密文比较方法中的伪随机函数F和对称加密算法;该分组密码算法AES128包括密钥扩展算法AES128.KeySchedule(key)→keyexp、加密算法AES128.Encrypt(keyexp,m)→c、解密算法AES128.Decrypt(keyexp,c)→m;其中,密钥key的比特长度为128;keyexp由10个128比特的轮子密钥组成,共计1280比特;明文m的比特长度n为128。
3.根据权利要求2所述的基于揭序加密的多数据类型密文比较方法,其特征在于,步骤1系统建立算法ORE.Setup(k)→(PP,sk)具体包括:
(1-1)输入安全参数k,即128比特的密钥key;
(1-2)运行AES128.KeySchedule(key)→keyexp;
(1-3)根据用户所需要的数据类型,选取n=1,2,...,128;使用C语言的unsigned int类型,支持32位整型的比较运算,即明文的比特长度n=32;
(1-4)令M=4;
(1-5)选择AES128.Encrypt({0,1}1280,{0,1}8||{0,1}31||089)作为伪随机函数F;
(1-6)选择(AES128.Encrypt,AES128.Decrypt)作为对称加密算法symmetricAlg;
(1-7)输出密钥sk=keyexp,公共参数PP={n,M,F,symmetricAlg}。
4.根据权利要求3所述的基于揭序加密的多数据类型密文比较方法,其特征在于,通过预先设置公共参数PP={n,M,F,symmetricAlg},系统建立算法只运行分组密码算法AES128中的密钥扩展算法AES128.KeySchedule(key)→keyexp,将系统建立算法简化为ORE.Setup(key)→sk。
5.根据权利要求3所述的基于揭序加密的多数据类型密文比较方法,其特征在于,步骤2加密算法ORE.Encrypt(PP,sk,m)→c具体包括:
(2-1)输入公共参数PP=(n,M,F,symmetricAlg)、1280比特的私钥sk和明文m;
(2-2)在明文m右边填96个0,得到一个128比特的数据m128=m||096;
(2-3)运行分组密码算法AES128中的加密算法得到128比特数据密文cdata=AES128.Encrypt(sk,m128);
(2-5)从i=0,1,2,...,31,依次执行操作①、②:
①如果i=0,则令128比特数据tmp=0128;如果1≤i≤31,将i表示成1个8比特数据,则令tmp=i||b0b1b2...bi-1||0120-i;
②计算uore,i=(AES128.Encrypt(sk,tmp)+bi)mod M;
(2-6)令揭序密文为uore=(uore,0,uore,1,...,uore,n-1);
(2-7)输出192比特密文c=(cdata,uore)。
6.根据权利要求5所述的基于揭序加密的多数据类型密文比较方法,其特征在于,步骤3解密算法ORE.Decrypt(PP,sk,c)→m具体包括:
(3-1)输入公共参数PP=(n,M,F,symmetricAlg)、1280比特的私钥sk、密文c=(cdata,uore);
(3-2)运行分组密码算法AES128中的解密算法得到128比特数据m~=AES128.Decrypt(sk,cdata);
(3-3)截取128比特数据m~最左边32比特数据,作为明文m;
(3-4)输出32比特明文m。
7.根据权利要求6所述的基于揭序加密的多数据类型密文比较方法,其特征在于,步骤4比较算法ORE.Compare(PP,c,c′)→b具体包括:
(4-1)输入公共参数PP={n,M,F,symmetricAlg},两个192比特密文c=(cdata,uore)、c′=(c′data,u′ore),则有:
如果对于所有的i=0,1,...,n-1,使得uore,i=u′ore,i,则输出b=0;
如果找到最小的i∈{0,1,...,31},使得uore,i≠u′ore,i:那么当u′ore,i=uore,i+1 mod M,则输出b=1;
如果找到最小的i∈{0,1,...,31},使得uore,i≠u′ore,i,那么当u′ore,i≠uore,i+1 mod M,则输出b=2;
(4-2)输入2比特的结果数据b∈{0,1,2};令与两个密文对应的明文分别为m、m′,当b=0,则m=m′;当b=1,则m>m′;当b=2,则m<m′。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110644822.3A CN113254971B (zh) | 2021-06-09 | 2021-06-09 | 一种基于揭序加密的多数据类型密文比较方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110644822.3A CN113254971B (zh) | 2021-06-09 | 2021-06-09 | 一种基于揭序加密的多数据类型密文比较方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113254971A CN113254971A (zh) | 2021-08-13 |
CN113254971B true CN113254971B (zh) | 2022-07-05 |
Family
ID=77187271
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110644822.3A Active CN113254971B (zh) | 2021-06-09 | 2021-06-09 | 一种基于揭序加密的多数据类型密文比较方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113254971B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114221766B (zh) * | 2022-02-18 | 2022-05-20 | 阿里云计算有限公司 | 数据加密方法、解密方法及装置 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1588366A (zh) * | 2004-08-02 | 2005-03-02 | 中国科学院计算机网络信息中心 | 密文数据库检索技术 |
CN106788962B (zh) * | 2016-12-13 | 2020-04-14 | 电子科技大学 | 隐私保护下的向量相似性判断方法 |
US10476662B2 (en) * | 2017-04-10 | 2019-11-12 | City University Of Hong Kong | Method for operating a distributed key-value store |
CN109495430A (zh) * | 2017-09-13 | 2019-03-19 | 杭州弗兰科信息安全科技有限公司 | 一种基于泄序加密的解密算法 |
CN108234108B (zh) * | 2017-12-15 | 2021-06-22 | 复旦大学 | 弱泄露的高效揭序加密方法 |
CN108039944B (zh) * | 2017-12-15 | 2020-09-01 | 复旦大学 | 具有前向安全性的揭序加密框架算法 |
CN108512840A (zh) * | 2018-03-21 | 2018-09-07 | 杭州弗兰科信息安全科技有限公司 | 一种基于泄序加密的密文检索方法 |
CN109088721B (zh) * | 2018-10-02 | 2022-01-28 | 复旦大学 | 一种可委托揭序加密方法 |
US11101980B2 (en) * | 2019-05-01 | 2021-08-24 | Baffle, Inc. | System and method for adding and comparing integers encrypted with quasigroup operations in AES counter mode encryption |
US11190339B2 (en) * | 2019-05-14 | 2021-11-30 | Baffle, Inc. | System and method for performing equality and less than operations on encrypted data with quasigroup operations |
-
2021
- 2021-06-09 CN CN202110644822.3A patent/CN113254971B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN113254971A (zh) | 2021-08-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Chen et al. | Cryptanalysis and improvement of medical image encryption using high-speed scrambling and pixel adaptive diffusion | |
US7860241B2 (en) | Simple universal hash for plaintext aware encryption | |
EP3178190B1 (en) | Encoder, decoder and method | |
EP2920908A2 (en) | Method for secure substring search | |
JP2003023421A (ja) | 暗号方法、そのプログラム、そのプログラムを記録した記録媒体および暗号装置並びに復号方法および復号装置 | |
CN113297606A (zh) | 基于多混沌与dna运算的彩色量子图像加密及解密方法 | |
CN110795762B (zh) | 基于流密码的保留格式加密方法 | |
Kumar et al. | A cryptographic model based on logistic map and a 3-D matrix | |
Aung et al. | A complex transformation of monoalphabetic cipher to polyalphabetic cipher:(Vigenère-Affine cipher) | |
CN110543778A (zh) | 一种字符数据线性随机加密和解密算法 | |
CN113254971B (zh) | 一种基于揭序加密的多数据类型密文比较方法 | |
Paragas et al. | Hill cipher modification: A simplified approach | |
CN116070276A (zh) | 基于同态加密与Simhash的密文查重与存储方法 | |
CN109088721B (zh) | 一种可委托揭序加密方法 | |
CN108234108B (zh) | 弱泄露的高效揭序加密方法 | |
US20020136400A1 (en) | R-conversion encryption method and system | |
CN111682932B (zh) | 一种基于混合混沌映射的单轮图像加密方法 | |
JP2003535362A (ja) | 暗号多項式の解読 | |
Ping et al. | RSA encryption and digital signature | |
US20030165242A1 (en) | Confusion encryption | |
Wu et al. | A compound chaos-based encryption algorithm for vector geographic data under network circumstance | |
CN110061832B (zh) | 以汉字作为密码的对称密码算法的实现方法 | |
Haithem et al. | Intelligent TRIPLE DES with N Round Based on Genetic Algorithm | |
Rachmawati et al. | New approach toward data hiding by using affine cipher and least significant bit algorithm | |
Popli | DNA Cryptography: A Novel Approach for Data Security Using Genetic Algorithm |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |