针对基于移动Agent的服务复合的脆弱性,今天我给大家一种用于移动Agent复合服务的白盒加密算法。这种加密算法通过引入有限域上的分块矩阵乘法和带输入输出变换的安全加法器,将密钥隐藏在一系列的数据表中,由此来实现基于加密函数的安全数据文件加密,能够应对白盒攻击环境下密钥泄漏的安全风险。这种加密算法代码体积较小,适合于移动Agent在非固定式服务复合时使用。

一、白盒攻击环境下的安全风险分析

白盒攻击环境(white2boxattackcontext,WBAC)是指攻击者拥有适应性选择明文攻击的条件,且对加密软件及其运行环境拥有完全的控制权。例如,对程序运行的二进制追踪、读取内存中的密钥和程序执行的中间结果、对软件进行任意的静态分析,以及通过改变子计算的结果来进行摄动分析,等等。

白盒加密算法在移动Agent的复合服务中的应用

移动Agent由于移动性和自治性,是实现探索式和半固定式的服务复合的有力工具。但是,安全问题却成为目前制约其应用的最大障碍。比如,在很多的实际应用中,由于Agent运行的物理环境受到他人的控制,处于白盒攻击环境之中,用于加密的密钥不能够由Agent来携带。以图1所示的复合服务为例,这是一个典型的存在非信任关系和利益冲突的白盒攻击环境。在询价操作中,每个供应商的报价都应对其他的供应商保密,这就要求进行服务复合的移动Agent能够在白盒攻击环境下安全地加密计算且不泄漏密钥。

针对此类脆弱性,可以将安全需求抽象为对基于加密函数计算的需求:服务A有计算函数f的算法,服务B有数据x且愿意帮助服务A计算出f(x),但A不希望B知道f,而且B在计算时也无须与A交互。

从软件实现的角度,则应针对此类脆弱性引入混淆变换。其实质是提供了一种转换机制,使转换后的程序(或其反编译结果)难以被理解,但具有相同的可观测行为。

基于对安全需求的分析。现提出一种白盒加密算法以控制复合服务的安全风险。该加密算法实现了对加密函数的加密计算,也可视为对加密函数代码混淆变换的产物,具有较小的体积和较快的计算速度。加密算法代码随Agent移动时,占用带宽较小,且可以在瘦客户端上高效运行。

二、白盒加密算法

1、Khazad对称加密算法

Khazad是一个有64位对称块的加密算法,密钥长度为128位,是新欧洲密码标准的候选方案之一。

Khazad是一个迭代对合的块加密算法,由一系列依赖于密钥的轮变换操作组成。这些操作的对象都是64bit(比特)的数据块(可以视为GF(2的8次方)8中的元素),称为加密的“状态”。其轮变换涉及如下三个层:

(1)非线性层

函数γ:GF(28)8→GF(28)8可以看作对自变量中所有字节并行应用非线性置换盒S:GF(28)→GF(28),x|→S[x]所得,即γ(a)=bΖbi=S[ai],0≤i≤7。S的设计原则之一是要求S为对合变换,即∀x∈GF(28),S[S[x]]=x。显然,γ也是对合变换。

(2)线性扩散层

线性扩散层的实质是线性变换,其对应的变换θ定义如下:

白盒加密算法在移动Agent的复合服务中的应用

容易验证,H是对称阵,也是酉阵,所以,θ是对合变换。

(3)密钥作用层

密钥作用层对应的函数为σ[k]:GF(28)8→GF(28)8,σ[k]利用密钥k∈GF(28)8,对输入执行如下操作:

白盒加密算法在移动Agent的复合服务中的应用

将上述三层叠加起来,可得轮函数:

白盒加密算法在移动Agent的复合服务中的应用

令R为加密算法的轮数(标准值R=8),对密钥K即有:

白盒加密算法在移动Agent的复合服务中的应用

三、基于移动Agent的复合服务的白盒加密算法

此处给出一种基于移动Agent的复合服务的白盒加密算法。该加密算法通过引入有限域上的分块矩阵乘法和带输入输出变换的安全加法器,将密钥隐藏在一系列的数据表中,实现了基于加密函数的安全数据文件加密,能够应对白盒攻击环境下密钥泄漏的安全风险。

记H=(hi,j)∈GF(28)8×8,则:

白盒加密算法在移动Agent的复合服务中的应用

对b=aH,设a=(a1,…,a8),b=(b1,…,b8),显然有:

白盒加密算法在移动Agent的复合服务中的应用

其中:

白盒加密算法在移动Agent的复合服务中的应用

由以上的分析,令θi为线性扩散层的一部分。定义如下:

白盒加密算法在移动Agent的复合服务中的应用

显然,将θ1,θ2,…,θ8组合起来,就可以得到线性变换θ。

令第r轮的第i个轮输出变换为τr,i.τr,i在白盒加密算法的实现中被定义为2个4bit置换的组合,这2个置换依次记作τ1r,i和τ2r,i。

令第r轮的第i个轮中间变换为πr,i.πr,i也在白盒加密算法的实现中被定义为16个4bit置换的组合,这16个置换依次记作π1r,i,…,π16r,i。

定义白盒子轮函数如下:

白盒加密算法在移动Agent的复合服务中的应用

在实现中,每个函数ρW[r,i,K]被定义为1张8bit输入64bit输出的表,记此类表为A型表。

为将白盒子轮函数的输出叠加起来得到白盒轮函数,令:

白盒加密算法在移动Agent的复合服务中的应用

如果直接计算GF(28)8上的加法,将导致运算中间结果的泄漏,破坏安全性.所以,ψW应当通过多次应用图2所示的结构来实现加法.其中,相邻的输入置换和输出置换对应互为逆变换.图2所示的运算组件构成一个函数,在实现中定义为1张8bit输入、4bit输出的表。

白盒加密算法在移动Agent的复合服务中的应用

进一步,可以按照图3中所示的方式定义函数φW[r,j]:GF(28)8→GF(28),r=0,1,…,8,j=1,…,8.实际上,φW[r,j]由两个如图3中所示的结构组成.在实现中,每个φW[r,j]按照图3所示的方式被定义为15张8bit输入、4bit输出的表,记此类表为B型表。

白盒加密算法在移动Agent的复合服务中的应用

设τr为τr,1,…,τr,8的组合,πr为πr,1,…,πr,8的组合,可得白盒Khazad加密函数KK,W[K]=τ8.θ。KK[K].τ0-1;可得白盒Khazad加密函数的逆运算为白盒Khazad解密函数K-1K,W[K]=τ0.KK[K]-1.θ.τ-18。显然,I=K-1K,W[K].KK,W[K。

白盒AES(advancedencryptionstandard,高级加密标准)加密器可以看作对AES加密器混淆变换的结果,符合混淆变换的定义。这里给出的白盒加密算法虽然不能严格符合混淆变换的定义,但并不影响应用;给出的白盒Khazad加密算法的输出与原始的Khazad加密算法的输出是不同的,但是通过原始的Khazad解密算法,容易得到本加密算法对应的解密算法。

如果移动Agent复合的某个服务需要使用其他服务加密计算的结果,则可以选用以下两种方法之一:

(1)事先对密钥协商使用密钥交换技术,密钥交换的具体算法可根据需要选用。

(2)调用公共的可信任的安全服务中有关解密的方法。公共安全服务的解密方法所使用的密钥由生成白盒加密器的服务提供,而公共安全服务是否提供解密结果,则可由加密者提供的安全策略来决定。

四、加密算法分析和比较

1、加密算法的安全性

Chow,Eisen和Johnson等人给出了白盒多样性和白盒模糊性的概念,对白盒密码术的安全性进行初步分析。密钥空间为密码学算法的安全性评估提供了一个上界。类似地,如果编码“加密”了实现的步骤,统计可能的编码步骤也可以用于度量白盒密码的安全性。这称之为白盒多样性。某一类型的表的多样性即指其对应的可能的不同构造的数量。这一度量体现了实现的可变性。另一个更为重要的度量则是白盒模糊性。某一类型的表的白盒模糊性即指其中确定的某个表的可能的不同构造的数量。这一度量体现了某个表的具体解释的多样性。遗憾的是,白盒模糊性自提出以来,尚未发现有效的计算方法。

对于A型表,轮输出变换有(24!)×(24!)种构造方法,轮中间变换有(24!)16种构造方法,轮密钥有264种可能,其白盒多样性为(24!)2×(24!)16×264=(16!)18×264。

对于B型表,2个输入置换各有(24!)种构造方法,1个输出置换有(24!)种构造方法,其白盒多样性为(24!)2×(24!)=(16!)3>2130。

根据上述计算,加密算法的白盒多样性小于白盒AES加密算法,但其数值仍足以提供较好的安全性。

Billet,Gilbert和Ech2Chatbi给出了一种从白盒AES的实现中提取密钥的方法,但SyncroSoft已经改进了设计并能够抵抗这种攻击。Jacob,Boneh和Felten提出了一种通过注入故障来对白盒AES(dataencryptionstandard,数据加密标准)攻击的方法,但他们在同一篇论文中给出了相应的对策,且该方法不适用于对本加密算法攻击。Wyseur,Michiels和Gorissen等通过对一个混淆后的轮进行差分分析,从白盒DES的实现中提取密钥。但是,因为白盒DES引入了两个额外的变换,这一方法并不能破解白盒DES加密的结果,同时,由于对T变换做了一些限制,不具有广泛应用的价值,也不能实现对本算法的攻击.Goubin,Masereel和Quisquater最近提出了一种新的攻击方法,能够攻击现有的各种白盒DES实现方法,包括Link和Neumann提供的改进后的实现方法。

这一方法使用C语言编程实现后,进行了攻击测试,取得了较好的攻击效果.由于DES和AES在设计上有相当大的差异,白盒DES的实现方法与白盒AES的实现方法也有明显的不同,该方法不适合于攻击白盒AES,也不适合于攻击本加密算法。

将白盒Khazad加密器用于保护移动Agent的有限时间黑盒,看来是可行的,至少目前没有发现可以在较短时间内对其有效攻击的方法,且其中两种表的白盒多样性数值相当大。

2、代码体积和时间复杂度及比较

白盒AES加密算法的输出与原始的AES算法的输出是相同的。这是本加密算法和白盒AES的不同之处。本做法有利于减小加密器的体积。给出的白盒加密算法的实现体积分析如下:每一轮需要8个A型表,总共需要8×8个A型表。每个A型表需要28×64bit=28×8byte(字节)=211byte,总共为8×8×211byte=217byte=128kb。每一轮需要8个φW[r,j]函数,每个φW[r,j]函数需要15个B型表,总共需要8×8×15个B型表。每个B型表需要28×4bit=27byte,总共为120kb。总体积为248kb,即253952byte,仅为白盒AES所需的770048byte的33%,更适用于移动Agent。

根据上面的分析,还可以求出每次加密运算需要的查表操作次数。由于白盒加密算法唯一的计算就是查表,比较表1和表2中给出的查表次数数据,使用白盒AES(1次)加密128bit数据,较之使用本算法(2次,每次64bit)加密128bit所要的查表计算次数多50%以上,由此即可估计出本算法的运算速度较白盒AES方法快。在查表时,耗费的时间与最终查出的具体内容无关,所以,只需针对每一种表格的所有可能输入进行实验即可。下面两个表格给出的实测耗时,就是对所有可能输入消耗的时间计算的算术平均值。从实测数据也可以看出,本加密算法的使用对实际系统影响较小。由于Web服务和移动Agent平台大多使用Java语言开发,故使用Java编写测试程序,运行环境为JDK1.5,测试所用计算机的CPU为奔腾1.73G。

白盒加密算法在移动Agent的复合服务中的应用

根据实验结果可知,在如前所述的实验环境中使用白盒AES加密算法,每加密128bit数据,约需17.5ns,而本加密算法只需约10.7ns。

本加密算法的解密算法与Khazad的解密算法非常相似,使用时不会对系统的性能带来显著影响。

3、其他相关工作比较

目前,关于混淆变换的研究成果,均未给出对于对称加密方法的安全混淆;而基于加密函数计算的研究均未给出加密“对称加密算法”的方法。

小知识之瘦客户端

瘦客户端(Thin Client)指的是在客户端-服务器网络体系中的一个基本无需应用程序的计算机终端。 它通过一些协议和服务器通信,进而接入局域网。作为应用程序平台的Internet的到来为企业应用程序提供了一个全新的领域:一个基于Internet/intranet的应用程序运用一个只包含一个浏览器的瘦客户端。这个浏览器负责解释、显示和处理应用程序的图形用户界面(GUI)和它的数据。这样的一个应用程序只需要被安装在一个Web服务器上,用户可以自动接收升级。一个解决方案只需要部署一次,甚至对成千的用户也是如此,这种想法的确很吸引人,尤其是Internet技术帮我们缓解了一些传统的应用程序的障碍,比如防火墙和对多平台的支持。