CN109614774B - 一种基于sgx的程序控制流混淆方法及系统 - Google Patents
一种基于sgx的程序控制流混淆方法及系统 Download PDFInfo
- Publication number
- CN109614774B CN109614774B CN201811405757.3A CN201811405757A CN109614774B CN 109614774 B CN109614774 B CN 109614774B CN 201811405757 A CN201811405757 A CN 201811405757A CN 109614774 B CN109614774 B CN 109614774B
- Authority
- CN
- China
- Prior art keywords
- program
- control flow
- variables
- variable
- hidden
- 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
- 238000000034 method Methods 0.000 title claims abstract description 56
- 239000011159 matrix material Substances 0.000 claims abstract description 73
- 230000009466 transformation Effects 0.000 claims abstract description 16
- 230000006870 function Effects 0.000 claims description 84
- 238000006243 chemical reaction Methods 0.000 claims description 19
- 230000008569 process Effects 0.000 claims description 11
- 230000001131 transforming effect Effects 0.000 claims 2
- 238000011156 evaluation Methods 0.000 abstract description 5
- 238000005516 engineering process Methods 0.000 abstract description 4
- 238000012986 modification Methods 0.000 description 5
- 230000004048 modification Effects 0.000 description 5
- 238000012795 verification Methods 0.000 description 5
- 238000004364 calculation method Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 230000004075 alteration Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 238000010561 standard procedure Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
- 238000010200 validation analysis Methods 0.000 description 1
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/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- General Health & Medical Sciences (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于SGX的程序控制流混淆方法及系统,方法包括:将原程序中所有分支语句条件中变量的定义进行隐藏,所述变量称为隐藏变量;对包括所述隐藏变量的所有程序语句进行转换以隐藏所述隐藏变量,获得转换程序和控制流矩阵;将所述转换程序和控制流矩阵发送至远程计算单元,所述转换程序存储在所述远程计算单元的不可信环境中,所述控制流矩阵存储在所述远程计算单元的可信环境SGX Enclave中;基于所述控制流矩阵,在所述远程计算单元中执行所述转换程序。本发明结合程序变换技术和英特尔软件保护扩展技术,通过转换每个分支语句的条件,并将其评估移动到不透明且可信的硬件执行环境中,从而保证高控制流机密性。
Description
技术领域
本发明涉及控制流混淆技术领域,特别是一种程序控制流混淆方法及系统、一种基于SGX的程序控制流混淆方法及系统,能够隐藏每个分支语句条件的变量,保护了远程执行环境场景下应用程序逻辑的机密性,避免了应用程序逻辑被外部攻击者恶意获取和利用。
背景技术
SGX是英特尔自第六代CPU以来推出的硬件功能,是一组x86-64ISA扩展,它可以设置受保护的执行环境(称为enclave),使得用户只需要信任处理器和代码用户放置在其enclave内的代码。Enclave受到处理器的保护:处理器控制对enclave内存的访问,阻止试图从enclave外部读取或写入正在运行的enclave的存储器的非法指令。用户可以通过类似于callgate的机制(ecall)从不受信任的代码调用enclave内部代码,该机制将控制转移到安全区内的用户定义的入口点。SGX支持远程证明,它使远程系统能够以加密方式验证特定软件是否已在安全区encalve内加载,并建立端到端的加密通道共享机密。
云计算使用户能够按需租用计算资源并远程执行他们的程序。然而,当远程环境不可信时,保护程序逻辑的机密性成为重要的安全要求。
程序控制流决定要执行的指令序列,直接反映了程序的逻辑。控制流混淆将程序的控制流转换为无法理解的形式,可以有效保护程序逻辑的机密性。控制流混淆是保护程序逻辑机密性的直接方法,然而,现有的控制流混淆工作主要集中在基于软件的转换上,存在在安全性方面有局限性和高性能开销的问题。
发明内容
本发明的主要目的在于克服现有技术中的上述缺陷,提出一种程序控制流混淆方法、一种程序控制流混淆系统、一种基于SGX的程序控制流混淆方法及一种基于SGX的程序控制流混淆系统,结合程序变换技术和英特尔软件保护扩展(SGX)技术,通过转换每个分支语句的条件,并将其评估移动到不透明且可信的硬件执行环境中(称为CF Enclave),从而保证高控制流机密性。
本发明采用如下技术方案:
一方面,本发明一种程序控制流混淆方法,包括:
变量定义隐藏,将原程序中所有分支语句条件中变量的定义进行隐藏;所述变量称为隐藏变量;
变量隐藏,对包括所述隐藏变量的所有程序语句进行转换以隐藏所述隐藏变量,获得转换程序和控制流矩阵;所述控制流矩阵包括转换的程序语句在原程序中的唯一标识、右操作数的标识、计算的操作符、被赋值的隐藏变量中的一个或多个。
优选的,所述变量定义隐藏,具体包括:
将原程序中所有分支语句条件中变量的声明语句转换成第一自定义函数;所述第一自定义函数的一参数表示所述隐藏变量名字的列表;所述第一自定义函数的另一参数表示所述隐藏变量对应的变量类型列表。
优选的,所述变量隐藏中,进行转换的程序语句包括隐藏变量的赋值语句、隐藏变量作为右操作数的语句和分支语句。
优选的,对隐藏变量的赋值语句进行转换,具体包括:
将原程序中隐藏变量的赋值语句转换成第二自定义函数,并生成对应的控制流矩阵及随机列表;所述第二自定义函数的一参数表示当前转换的赋值语句的随机列表;所述第二自定义函数的另一参数表示当前转换的赋值语句在原程序中的唯一标识;
所述随机列表表示原程序中除隐藏变量之外的所有变量形成的随机列表;所述随机列表中的变量包括右操作数;所述控制流矩阵中右操作数的标识指向所述随机列表中的右操作数。
优选的,当所述赋值语句右操作数为过程调用时,转换时先将右操作数赋值给一新定义变量,再以新变量作为右操作数转换成第二自定义函数。
优选的,对隐藏变量作为右操作数的语句进行转换,具体包括:
将隐藏变量转换成第三自定义函数,并生成对应的控制流矩阵及随机列表;所述第三自定义函数的一参数表示当前转换的赋值语句的随机列表;所述第三自定义函数的另一参数表示当前转换的赋值语句在原程序中的唯一标识;
所述随机列表表示原程序中除隐藏变量之外的所有变量形成的随机列表;所述控制流矩阵中右操作数的标识用右操作数中的隐藏变量表示。
优选的,当右操作数中的隐藏变量为过程调用的参数时,转换时先将隐藏变量转换成第三自定义函数并赋值给一新定义变量,再将新变量作为过程调用的参数进行赋值。
优选的,将原程序中分支语句条件转换成第四自定义函数,并生成对应的控制流矩阵;所述第四自定义函数的一参数表示当前转换的赋值语句在原程序中的唯一标识。
优选的,转换的程序语句在原程序中的唯一标识用转换的程序语句在原程序中的行号表示。
优选的,转换的程序语句在原程序中的右操作数的标识用右操作数在所述随机列表中的索引或隐藏变量名表示。
第二方面,本发明一种程序控制流混淆系统,包括:
变量定义隐藏模块,用于将原程序中所有分支语句条件中变量的定义进行隐藏;所述变量称为隐藏变量;
变量隐藏模块,用于对包括所述隐藏变量的所有程序语句进行转换以隐藏所述隐藏变量,获得转换程序和控制流矩阵;所述控制流矩阵包括转换的程序语句在原程序中的唯一标识、右操作数的标识、计算的操作符、被赋值的隐藏变量中的一个或多个。
第三方面,本发明一种基于SGX的程序控制流混淆方法,包括所述的程序控制流混淆方法,还包括:
将所述转换程序和控制流矩阵发送至远程计算单元;所述转换程序存储在所述远程计算单元的不可信环境中,所述控制流矩阵存储在所述远程计算单元的可信环境SGXEnclave中;
基于所述控制流矩阵,在所述远程计算单元中执行所述转换程序。
优选的,发送至远程计算单元的控制流矩阵为加密控制流矩阵;所述加密控制流矩阵存储在所述远程计算单元的不可信环境中;在SGX Enclave证明执行环境正确后,对所述加密控制流矩阵进行解密后存储在所述远程计算单元的可信环境SGX Enclave中。
第四方面,本发明一种基于SGX的程序控制流混淆系统,包括所述的程序控制流混淆系统,还包括:
程序发送模块,将所述转换程序和控制流矩阵发送至远程计算单元;所述转换程序存储在所述远程计算单元的不可信环境中,所述控制流矩阵存储在所述远程计算单元的可信环境SGX Enclave中;
程序执行模块,基于所述控制流矩阵,在所述远程计算单元中执行所述转换程序。
由上述对本发明的描述可知,与现有技术相比,本发明具有如下有益效果:
(1)本发明一种程序控制流混淆方法及系统,能够隐藏每个分支语句条件的变量,避免了应用程序逻辑被外部攻击者恶意获取和利用;
(2)本发明一种基于SGX的程序控制流混淆方法及系统,基于所述一种程序控制流混淆方法及系统,结合程序变换技术和英特尔软件保护扩展(SGX)技术,通过转换每个分支语句的条件,并将其评估移动到不透明且可信的硬件执行环境中(称为CF Enclave),从而保证高控制流机密性。
上述说明仅是本发明技术方案的概述,为了能够更清楚地了解本发明的技术手段,从而可依照说明书的内容予以实施,并且为了让本发明的上述和其他目的、特征和优点能够更明显易懂,以下列举本发明的具体实施方式。
根据下文结合附图对本发明具体实施例的详细描述,本领域技术人员将会更加明了本发明的上述及其他目的、优点和特征。
附图说明
图1为本发明实施例的程序控制流混淆方法流程图;
图2为本发明实施例的程序变换示例;其中图2(a)表示原程序,图2(b)表示转换后的程序;
图3为本发明实施例的程序对应的控制流矩阵和随机列表;
图4为本发明实施例的程序控制流混淆系统结构图;
图5为本发明实施例的基于SGX的程序控制流混淆方法流程图;
图6为本发明实施例的基于SGX的程序控制流混淆方法的体系结构图;
图7为本发明实施例的基于SGX的程序控制流混淆方法的CF Enclave的设置过程;
图8为本发明实施例的基于SGX的程序控制流混淆系统结构图。
具体实施方式
以下通过具体实施方式对本发明作进一步的描述。
需要说明的是,本发明具体实施方式中涉及到的步骤标识,仅是为了使文件看起来更加清晰,具体实施时,步骤的顺序可以相应调整。
参见图1所示,本发明一种程序控制流混淆方法,包括:
S101,变量定义隐藏,将原程序中所有分支语句条件中变量的定义进行隐藏;所述变量称为隐藏变量;
S102,变量隐藏,对包括所述隐藏变量的所有程序语句进行转换以隐藏所述隐藏变量,获得转换程序和控制流矩阵;所述控制流矩阵包括转换的程序语句在原程序中的唯一标识、右操作数的标识、计算的操作符、被赋值的隐藏变量中的一个或多个。
上述的程序控制流混淆方法可以在用户主机上实现,所述的原程序可以是基于三地址码的程序。
所述的控制流矩阵M可以以多元组的形式表示如下:
M={i(s),iop1,iop2,op,paraname}
其中,i(s)表示转换的程序语句在原程序中的唯一标识,iop1和iop2表示转换的程序语句在原程序中的右操作数的标识,op表示转换的程序语句在原程序中的计算的操作符,paraname表示转换的程序语句在原程序中的被赋值的隐藏变量。本实施例中,转换的程序语句在原程序中的唯一标识用转换的程序语句在原程序中的行号表示。
本实施例中,所述变量定义隐藏,具体包括:
将原程序中所有分支语句条件中变量的声明语句转换成第一自定义函数;所述第一自定义函数的一参数表示所述隐藏变量名字的列表;所述第一自定义函数的另一参数表示所述隐藏变量对应的变量类型列表。
具体的,所述第一自定义函数可以表示如下:
readin(paraname[],paratype[])
其中,paraname[]表示当前函数中所有隐藏变量名字的列表,paratype[]表示所述隐藏变量对应的变量类型列表。需要说明的是所述函数名readin只代表一个实例,具体实现时可以是其他函数名。
本实施例中,所述变量隐藏中,进行转换的程序语句包括隐藏变量的赋值语句、隐藏变量作为右操作数的语句和分支语句。
参见图2和图3所示,如下以原程序中包括分支语句if(x op y)then{goto L}进行具体说明。其中,x和y表示分支语句条件中变量。
对隐藏变量的赋值语句(x:=op1 op op2)进行转换,具体包括:
将原程序中隐藏变量的赋值语句转换成第二自定义函数,并生成对应的控制流矩阵及随机列表;所述第二自定义函数的一参数表示当前转换的赋值语句的随机列表;所述第二自定义函数的另一参数表示当前转换的赋值语句在原程序中的唯一标识;
所述随机列表表示原程序中除隐藏变量之外的所有变量形成的随机列表;所述随机列表中的变量包括右操作数;所述控制流矩阵中右操作数的标识指向所述随机列表中的右操作数。
具体的,所述第二自定义函数可以表示如下:
update(L(s),i(s))
其中,L(s)表示当前函数中除了隐藏变量之外的所有变量形成的随机列表,i(s)表示当前转换的赋值语句在原程序中的唯一标识。需要说明的是所述函数名update只代表一个实例,具体实现时可以是其他函数名。
相应的,多元组中的iop1和iop2为右操作数在L(s)中的索引或者隐藏变量名,基于多元组中的iop1和iop2,可以从L(s)中找出相应的右操作数,如果右操作数为隐藏变量,iopi将为相应的隐藏变量名。
进一步的,当所述赋值语句右操作数为过程调用时,转换时先将右操作数赋值给一新定义变量,再以新变量作为右操作数转换成第二自定义函数。
如有如下赋值语句:
x:=op1.invoke1(op2)
转换时需要将赋值语句变换为如下格式,以便将过程调用转换为一般隐藏变量的赋值语句问题。
temp1:=op1.invoke1(op2)
x:=temp1
其中,temp1表示新定义的变量。
对隐藏变量作为右操作数的语句(re:=x op op1)进行转换,具体包括:
将隐藏变量转换成第三自定义函数,并生成对应的控制流矩阵及随机列表;所述第三自定义函数的一参数表示当前转换的赋值语句的随机列表;所述第三自定义函数的另一参数表示当前转换的赋值语句在原程序中的唯一标识;
所述随机列表表示原程序中除隐藏变量之外的所有变量形成的随机列表;所述控制流矩阵中右操作数的标识用右操作数中的隐藏变量表示。
具体的,所述第三自定义函数可以表示如下:
get(L(s),i(s))
转换后的程序语句可以表示如下:
re:=get(L(s),i(s))
其中,L(s)表示当前函数中除了隐藏变量之外的所有变量形成的随机列表,i(s)表示当前转换的赋值语句在原程序中的唯一标识。需要说明的是所述函数名get只代表一个实例,具体实现时可以是其他函数名。
相应的,多元组中的iop1和iop2为右操作数在L(s)中的索引或者隐藏变量名,基于多元组中的iop1和iop2,可以从L(s)中找出相应的右操作数,如果右操作数为隐藏变量,iopi将为相应的隐藏变量名。
进一步的,当右操作数中的隐藏变量为过程调用的参数时,转换时先将隐藏变量转换成第三自定义函数并赋值给一新定义变量,再将新变量作为过程调用的参数进行赋值。
如有如下赋值语句:
re:=op1.invoke2(x,op2)
转换时需要将赋值语句变换为如下格式,以便将过程调用转换为一般隐藏变量作为右操作数的语句问题。
temp2:=x
re:=op1.invoke2(temp2,op2)
其中,temp2表示新定义的变量。
将原程序中分支语句(if(x op y)then{goto L})条件转换成第四自定义函数,并生成对应的控制流矩阵;所述第四自定义函数的一参数表示当前转换的赋值语句在原程序中的唯一标识。
具体的,所述第四自定义函数可以表示如下:
evaluate(i(s))
分支语句可以转换如下:
if(evaluate(i(s)))then{goto L}
其中,i(s)表示当前转换的赋值语句在原程序中的唯一标识。需要说明的是所述函数名evaluate只代表一个实例,具体实现时可以是其他函数名。
相应的,多元组中的para_name为空,可根据iop1,iop2,op恢复条件。
参见图4所示,第二方面,本发明一种程序控制流混淆系统,包括:
变量定义隐藏模块401,用于将原程序中所有分支语句条件中变量的定义进行隐藏;所述变量称为隐藏变量;
变量隐藏模块402,用于对包括所述隐藏变量的所有程序语句进行转换以隐藏所述隐藏变量,获得转换程序和控制流矩阵;所述控制流矩阵包括转换的程序语句在原程序中的唯一标识、右操作数的标识、计算的操作符、被赋值的隐藏变量中的一个或多个。
参见图5所示,第三方面,一种基于SGX的程序控制流混淆方法,包括:
步骤501,变量定义隐藏,将原程序中所有分支语句条件中变量的定义进行隐藏;所述变量称为隐藏变量;
步骤502,变量隐藏,对包括所述隐藏变量的所有程序语句进行转换以隐藏所述隐藏变量,获得转换程序和控制流矩阵;所述控制流矩阵包括转换的程序语句在原程序中的唯一标识、右操作数的标识、计算的操作符、被赋值的隐藏变量中的一个或多个;
步骤503,将所述转换程序和控制流矩阵发送至远程计算单元;所述转换程序存储在所述远程计算单元的不可信环境中,所述控制流矩阵存储在所述远程计算单元的可信环境SGX Enclave中;
步骤504,基于所述控制流矩阵,在所述远程计算单元中执行所述转换程序。
上述的步骤501至503可以在用户主机上实现,所述的步骤504在远程计算单元(公有云)上实现,所述的原程序可以是基于三地址码的程序。
所述的控制流矩阵M可以以多元组的形式表示如下:
M={i(s),iop1,iop2,op,paraname}
其中,i(s)表示转换的程序语句在原程序中的唯一标识,iop1和iop2表示转换的程序语句在原程序中的右操作数的标识,op表示转换的程序语句在原程序中的计算的操作符,paraname表示转换的程序语句在原程序中的被赋值的隐藏变量。本实施例中,转换的程序语句在原程序中的唯一标识用转换的程序语句在原程序中的行号表示。
参见图6所示,对于用户想要在公有云上执行的原始程序P,首先在用户环境将其转换为转换程序P'和控制流矩阵M。P'与P的不同之处在于每个分支语句的条件逻辑被移动到M中。转换后,P'将被上传到公有云上的云主机,并将在不受信任的区域中执行。M将被上传到SGX Enclave中,在这些主机上称为CF Enclave。用户需要将加密后的控制流矩阵(标记为E(M))发送到公共云。在CF Enclave证明执行环境的正确性后,CF Enclave将能够解密矩阵。在执行P'期间,每个分支语句中的条件将基于M在CF Enclave中进行评估。
本实施例中,所述变量定义隐藏,具体包括:
将原程序中所有分支语句条件中变量的声明语句转换成第一自定义函数;所述第一自定义函数的一参数表示所述隐藏变量名字的列表;所述第一自定义函数的另一参数表示所述隐藏变量对应的变量类型列表。
具体的,所述第一自定义函数可以表示如下:
readin(paraname[],paratype[])
其中,paraname[]表示当前函数中所有隐藏变量名字的列表,paratype[]表示所述隐藏变量对应的变量类型列表。需要说明的是所述函数名readin只代表一个实例,具体实现时可以是其他函数名。
上述readin方法在CF Enclave中的实现逻辑如下:基于传递的参数paraname[]和paratype[],在Enclave中依次按照变量类型paratype[i]在Enclave中定义所有隐藏变量paraname[i]。
本实施例中,所述变量隐藏中,进行转换的程序语句包括隐藏变量的赋值语句、隐藏变量作为右操作数的语句和分支语句。
参见图2和图3所示,如下以原程序中包括分支语句if(x op y)then{goto L}进行具体说明。其中,x和y表示分支语句条件中变量。
对隐藏变量的赋值语句(x:=op1 op op2)进行转换,具体包括:
将原程序中隐藏变量的赋值语句转换成第二自定义函数,并生成对应的控制流矩阵及随机列表;所述第二自定义函数的一参数表示当前转换的赋值语句的随机列表;所述第二自定义函数的另一参数表示当前转换的赋值语句在原程序中的唯一标识;
所述随机列表表示原程序中除隐藏变量之外的所有变量形成的随机列表;所述随机列表中的变量包括右操作数;所述控制流矩阵中右操作数的标识指向所述随机列表中的右操作数。
具体的,所述第二自定义函数可以表示如下:
update(L(s),i(s))
其中,L(s)表示当前函数中除了隐藏变量之外的所有变量形成的随机列表,i(s)表示当前转换的赋值语句在原程序中的唯一标识。需要说明的是所述函数名update只代表一个实例,具体实现时可以是其他函数名。
相应的,多元组中的iop1和iop2为右操作数在L(s)中的索引或者隐藏变量名,基于多元组中的iop1和iop2,可以从L(s)中找出相应的右操作数,如果右操作数为隐藏变量,iopi将为相应的隐藏变量名。
上述赋值语句逻辑在CF Enclave中的实现为CFQ查询函数,过程如下:基于传递的赋值语句标识i(s),可以在控制流矩阵中查找到对应的多元组;多元组中的iop1和iop2为右操作数在L(s)中的索引或者隐藏变量名,基于多元组中的iop1和iop2,可以从L(s)中找出相应的右操作数,如果右操作数为隐藏变量,iopi将为相应的隐藏变量名;同时根据计算的操作符op,可以恢复原赋值语句,将计算结果赋值给para_name。para_name为Enclave中被赋值的变量。
进一步的,当所述赋值语句右操作数为过程调用时,转换时先将右操作数赋值给一新定义变量,再以新变量作为右操作数转换成第二自定义函数。
如有如下赋值语句:
x:=op1.invoke1(op2)
转换时需要将赋值语句变换为如下格式,以便将过程调用转换为一般隐藏变量的赋值语句问题。
temp1:=op1.invoke1(op2)
x:=temp1
其中,temp1表示新定义的变量。
对隐藏变量作为右操作数的语句(re:=x op op1)进行转换,具体包括:
将隐藏变量转换成第三自定义函数,并生成对应的控制流矩阵及随机列表;所述第三自定义函数的一参数表示当前转换的赋值语句的随机列表;所述第三自定义函数的另一参数表示当前转换的赋值语句在原程序中的唯一标识;
所述随机列表表示原程序中除隐藏变量之外的所有变量形成的随机列表;所述控制流矩阵中右操作数的标识用右操作数中的隐藏变量表示。
具体的,所述第三自定义函数可以表示如下:
get(L(s),i(s))
转换后的程序语句可以表示如下:
re:=get(L(s),i(s))
其中,L(s)表示当前函数中除了隐藏变量之外的所有变量形成的随机列表,i(s)表示当前转换的赋值语句在原程序中的唯一标识。需要说明的是所述函数名get只代表一个实例,具体实现时可以是其他函数名。
相应的,多元组中的iop1和iop2为右操作数在L(s)中的索引或者隐藏变量名,基于多元组中的iop1和iop2,可以从L(s)中找出相应的右操作数,如果右操作数为隐藏变量,iopi将为相应的隐藏变量名。
对应上述情况,当前多元组中的para_name项为空。上述赋值语句逻辑在CFEnclave中的实现为CFQ查询函数,过程如下:基于传递的赋值语句标识i(s),可以在控制流矩阵中查找到对应的多元组;多元组中的iop1和iop2为右操作数在L(s)中的索引或者隐藏变量名,基于多元组中的iop1和iop2,可以从L(s)中找出相应的右操作数,如果右操作数为隐藏变量,iopi将为相应的隐藏变量名,根据iop1、iop2和op可恢复出计算语句,返回语句的计算结果。计算结果将被传至Enclave外赋值给re。
进一步的,当右操作数中的隐藏变量为过程调用的参数时,转换时先将隐藏变量转换成第三自定义函数并赋值给一新定义变量,再将新变量作为过程调用的参数进行赋值。
如有如下赋值语句:
re:=op1.invoke2(x,op2)
转换时需要将赋值语句变换为如下格式,以便将过程调用转换为一般隐藏变量作为右操作数的语句问题。
temp2:=x
re:=op1.invoke2(temp2,op2)
其中,temp2表示新定义的变量。
将原程序中分支语句(if(x op y)then{goto L})条件转换成第四自定义函数,并生成对应的控制流矩阵;所述第四自定义函数的一参数表示当前转换的赋值语句在原程序中的唯一标识。
具体的,所述第四自定义函数可以表示如下:
evaluate(i(s))
分支语句可以转换如下:
if(evaluate(i(s)))then{goto L}
其中,i(s)表示当前转换的赋值语句在原程序中的唯一标识。需要说明的是所述函数名evaluate只代表一个实例,具体实现时可以是其他函数名。
相应的,多元组中的para_name为空。上述赋值语句逻辑在CF Enclave中的实现过程如下:可根据iop1、iop2和op恢复条件,并返回条件的评估结果{true|false}。
进一步的,参见图7所示,在执行CFQ查询函数之前设置CF Enclave。加载CFEnclave后,将执行远程验证(步骤(1))。远程验证遵循SGX设计文档中描述的标准程序。在远程验证期间,将生成CF Enclave的评价并将其发送到认证服务器。由于远程验证之后控制流矩阵M会被读入CF Enclave,因此在远程验证期间,只能评价代码部分(包括CFEnclave设置逻辑和CFQ函数实现)。通过在认证服务器上检查评价内容与预期的哈希值,认证服务器验证CF Enclave的完整性。由于本发明中CF Enclave中的实现条件判断逻辑的代码量足够小,因此有效减少了可信基础的大小,从而避免了实现可能引起的安全性错误。
一旦CF Enclave通过远程验证,远程认证服务器将把控制流矩阵的解密密钥kM传递给CF Enclave(在步骤2中)。解密密钥在远程验证期间生成的安全信道中传输。收到kM后,CF Enclave将从不可信区域(在步骤3中)读入E(M)并用kM解密(在步骤4中)。最后,CFEnclave将矩阵加载到其Enclave内存(即处理器保留存储器)中,CFQ函数可以从中获取条件信息并提供控制流查询服务。
参见图8所示,第四方面,本发明一种基于SGX的程序控制流混淆系统,包括:
变量定义隐藏模块801,用于将原程序中所有分支语句条件中变量的定义进行隐藏;所述变量称为隐藏变量;
变量隐藏模块802,用于对包括所述隐藏变量的所有程序语句进行转换以隐藏所述隐藏变量,获得转换程序和控制流矩阵;所述控制流矩阵包括转换的程序语句在原程序中的唯一标识、右操作数的标识、计算的操作符、被赋值的隐藏变量中的一个或多个;
程序发送模块803,将所述转换程序和控制流矩阵发送至远程计算单元;所述转换程序存储在所述远程计算单元的不可信环境中,所述控制流矩阵存储在所述远程计算单元的可信环境SGX Enclave中;
程序执行模块804,基于所述控制流矩阵,在所述远程计算单元中执行所述转换程序。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (12)
1.一种程序控制流混淆方法,其特征在于,包括:
变量定义隐藏,将原程序中所有分支语句条件中变量的定义进行隐藏;所述变量称为隐藏变量;
变量隐藏,对包括所述隐藏变量的所有程序语句进行转换以隐藏所述隐藏变量,获得转换程序和控制流矩阵;所述控制流矩阵包括转换的程序语句在原程序中的唯一标识、右操作数的标识、计算的操作符、被赋值的隐藏变量中的一个或多个;
所述变量隐藏中,进行转换的程序语句包括隐藏变量的赋值语句、隐藏变量作为右操作数的语句和分支语句。
2.根据权利要求1所述的程序控制流混淆方法,其特征在于,所述变量定义隐藏,具体包括:
将原程序中所有分支语句条件中变量的声明语句转换成第一自定义函数;所述第一自定义函数的一参数表示所述隐藏变量名字的列表;所述第一自定义函数的另一参数表示所述隐藏变量对应的变量类型列表。
3.根据权利要求1所述的程序控制流混淆方法,其特征在于,对隐藏变量的赋值语句进行转换,具体包括:
将原程序中隐藏变量的赋值语句转换成第二自定义函数,并生成对应的控制流矩阵及随机列表;所述第二自定义函数的一参数表示当前转换的赋值语句的随机列表;所述第二自定义函数的另一参数表示当前转换的赋值语句在原程序中的唯一标识;
所述随机列表表示原程序中除隐藏变量之外的所有变量形成的随机列表;所述随机列表中的变量包括右操作数;所述控制流矩阵中右操作数的标识指向所述随机列表中的右操作数。
4.根据权利要求3所述的程序控制流混淆方法,其特征在于,当所述赋值语句右操作数为过程调用时,转换时先将右操作数赋值给一新定义变量,再以新变量作为右操作数转换成第二自定义函数。
5.根据权利要求1所述的程序控制流混淆方法,其特征在于,对隐藏变量作为右操作数的语句进行转换,具体包括:
将隐藏变量转换成第三自定义函数,并生成对应的控制流矩阵及随机列表;所述第三自定义函数的一参数表示当前转换的赋值语句的随机列表;所述第三自定义函数的另一参数表示当前转换的赋值语句在原程序中的唯一标识;
所述随机列表表示原程序中除隐藏变量之外的所有变量形成的随机列表;所述控制流矩阵中右操作数的标识用右操作数中的隐藏变量表示。
6.根据权利要求5所述的程序控制流混淆方法,其特征在于,当右操作数中的隐藏变量为过程调用的参数时,转换时先将隐藏变量转换成第三自定义函数并赋值给一新定义变量,再将新变量作为过程调用的参数进行赋值。
7.根据权利要求1所述的程序控制流混淆方法,其特征在于,将原程序中分支语句条件转换成第四自定义函数,并生成对应的控制流矩阵;所述第四自定义函数的一参数表示当前转换的赋值语句在原程序中的唯一标识。
8.根据权利要求1所述的程序控制流混淆方法,其特征在于,转换的程序语句在原程序中的唯一标识用转换的程序语句在原程序中的行号表示。
9.根据权利要求3或5所述的程序控制流混淆方法,其特征在于,转换的程序语句在原程序中的右操作数的标识用右操作数在所述随机列表中的索引或隐藏变量名表示。
10.一种程序控制流混淆系统,其特征在于,包括:
变量定义隐藏模块,用于将原程序中所有分支语句条件中变量的定义进行隐藏;所述变量称为隐藏变量;
变量隐藏模块,用于对包括所述隐藏变量的所有程序语句进行转换以隐藏所述隐藏变量,获得转换程序和控制流矩阵;所述控制流矩阵包括转换的程序语句在原程序中的唯一标识、右操作数的标识、计算的操作符、被赋值的隐藏变量中的一个或多个;
变量隐藏模块中,进行转换的程序语句包括隐藏变量的赋值语句、隐藏变量作为右操作数的语句和分支语句。
11.一种基于SGX的程序控制流混淆方法,其特征在于,包括如权利要求1至9中任意一项权利要求所述的方法,还包括:
将所述转换程序和控制流矩阵发送至远程计算单元;所述转换程序存储在所述远程计算单元的不可信环境中,所述控制流矩阵存储在所述远程计算单元的可信环境SGXEnclave中;
基于所述控制流矩阵,在所述远程计算单元中执行所述转换程序。
12.一种基于SGX的程序控制流混淆系统,其特征在于,包括如权利要求10所述的系统,还包括:
程序发送模块,将所述转换程序和控制流矩阵发送至远程计算单元;所述转换程序存储在所述远程计算单元的不可信环境中,所述控制流矩阵存储在所述远程计算单元的可信环境SGX Enclave中;
程序执行模块,基于所述控制流矩阵,在所述远程计算单元中执行所述转换程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811405757.3A CN109614774B (zh) | 2018-11-23 | 2018-11-23 | 一种基于sgx的程序控制流混淆方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811405757.3A CN109614774B (zh) | 2018-11-23 | 2018-11-23 | 一种基于sgx的程序控制流混淆方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109614774A CN109614774A (zh) | 2019-04-12 |
CN109614774B true CN109614774B (zh) | 2021-05-07 |
Family
ID=66004625
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811405757.3A Active CN109614774B (zh) | 2018-11-23 | 2018-11-23 | 一种基于sgx的程序控制流混淆方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109614774B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111506313B (zh) * | 2020-03-04 | 2024-01-23 | 西安电子科技大学 | 一种基于神经网络的程序控制流混淆方法及系统 |
CN111538962A (zh) * | 2020-03-18 | 2020-08-14 | 西安电子科技大学 | 程序控制流混淆方法、系统、存储介质、云服务器及应用 |
CN112527307B (zh) * | 2020-11-18 | 2023-06-20 | 西安电子科技大学 | 程序控制流隐藏方法、系统及应用 |
CN112287380B (zh) * | 2020-12-24 | 2021-03-23 | 华控清交信息科技(北京)有限公司 | 一种数据处理方法、装置和用于数据处理的装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8909967B1 (en) * | 2012-12-31 | 2014-12-09 | Emc Corporation | Technique for secure computation |
CN106845168A (zh) * | 2016-12-20 | 2017-06-13 | 西安电子科技大学 | 一种面向远程计算的控制流隐藏方法 |
CN108763877A (zh) * | 2018-06-13 | 2018-11-06 | 北京理工大学 | 一种基于数据混淆的代码保护方法 |
-
2018
- 2018-11-23 CN CN201811405757.3A patent/CN109614774B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8909967B1 (en) * | 2012-12-31 | 2014-12-09 | Emc Corporation | Technique for secure computation |
CN106845168A (zh) * | 2016-12-20 | 2017-06-13 | 西安电子科技大学 | 一种面向远程计算的控制流隐藏方法 |
CN108763877A (zh) * | 2018-06-13 | 2018-11-06 | 北京理工大学 | 一种基于数据混淆的代码保护方法 |
Non-Patent Citations (1)
Title |
---|
Poster: Obfuscating Program Control Flow with Intel SGX;Yongzhi Wang,et al;《2018 ACM/IEEE 40th International Conference on Software Engineering: Companion Proceedings》;20180830;321–322 * |
Also Published As
Publication number | Publication date |
---|---|
CN109614774A (zh) | 2019-04-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10284372B2 (en) | Method and system for secure management of computer applications | |
CN109614774B (zh) | 一种基于sgx的程序控制流混淆方法及系统 | |
CN110414268B (zh) | 访问控制方法、装置、设备及存储介质 | |
CN111783075B (zh) | 基于密钥的权限管理方法、装置、介质及电子设备 | |
US8375224B2 (en) | Data masking with an encrypted seed | |
US9515832B2 (en) | Process authentication and resource permissions | |
CN107948152B (zh) | 信息存储方法、获取方法、装置及设备 | |
US20140223580A1 (en) | Method of and apparatus for processing software using hash function to secure software, and computer-readable medium storing executable instructions for performing the method | |
CN109344631B (zh) | 区块链的数据修改及区块验证方法、装置、设备和介质 | |
US9769654B2 (en) | Method of implementing a right over a content | |
CN101199159A (zh) | 安全引导 | |
KR20030082484A (ko) | 공개 키 암호화에 기초한 데이터의 저장 및 검색 | |
KR20030082485A (ko) | 대칭 키 암호화에 기초한 데이터의 저장 및 검색 | |
US20240031129A1 (en) | Data encryption method, data decryption method, terminal, and storage medium | |
CN115580413B (zh) | 一种零信任的多方数据融合计算方法和装置 | |
CN108319822B (zh) | 一种保护网页代码的方法、存储介质、电子设备和系统 | |
US20190166123A1 (en) | User terminal using cloud service, integrated security management server for user terminal, and integrated security management method for user terminal | |
CN111865869B (zh) | 基于随机映射的注册、认证方法及装置、介质及电子设备 | |
KR101203722B1 (ko) | 데이터 보호장치 및 그 방법 | |
JP7331714B2 (ja) | 情報処理装置、情報処理方法及びプログラム | |
CN112527307B (zh) | 程序控制流隐藏方法、系统及应用 | |
US11841970B1 (en) | Systems and methods for preventing information leakage | |
US11568070B2 (en) | Secure access control processes | |
US20240004986A1 (en) | Cla certificateless authentication of executable programs | |
CN113360859B (zh) | 基于Python解释器的加密文件安全控制方法和装置 |
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 |