针对云计算中敏感数据存在的安全问题,在B/S的使用场景下,提出了一个基于http代理的数据加密上传服务设计方案。在http协议层架设一个对用户透明的代理,实现对用户上传的本地数据进行加密,然后再传送到云端,这样在云端保存的将是加密后的数据,如果无法正确解密,这些密文即使泄露出去也不会泄露太多的信息量,降低了云计算数据存储服务中的数据安全风险。
一、云中数据存储的安全风险
把数据存储在云端,并由此衍生的服务可以有很多形式,不过都要遭受同样的风险,数据泄露。由于用户的数据都保存在云端,所以云服务提供商就拥有了对数据的优先访问权,以下几种原因可能导致用户的数据被泄露出去:
(1)云服务提供商或者数据维护人员恶意出卖用户数据。
(2)数据中心遭到攻击,导致用户数据泄露。
(3)由于数据隔离措施的不完善,我们的数据可能被我们在云端的“邻居”非法访问。
(4)由于云计算本身的安全机制,用户的数据在云端会有多个备份,这也增加了数据泄露的风险。
无论哪种原因,只要用户数据泄露出去,都可能对用户造成重大的人身财产损失,但是用户一旦把数据上传到了云端,就失去了对数据的维护和有效控制,难以找到有效措施去防范数据的泄露。所以,用户不得不面临以下几个难题:
(1)本地可能并没有数据的备份,数据都在云端。
(2)本地没有足够的计算和存储能力完成对数据的加密操作或者不方便安装数据加密程序。
(3)云应用服务不足以信任,也无法向我们证明我们的数据已经被安全的存储并且被正确的使用。
这些安全风险的存在对各种云应用服务的发展将造成不小的障碍和制约。现有的安全机制多是从虚拟化或者资源池层面使用技术手段来保障数据的完整性、隔离性和机密性,而且安全机制的性能也是各个云服务提供商自己宣称的。难以给用户一个切身的数据安全得到了保障的体验。
二、HTTP加密代理部署架构
为了提升用户的“安全感”,本文提出了一个在应用层面解决数据存储安全问题的方案,即由可信第三方部署实施一个基于HTTP代理的数据加密上传服务。该服务在用户数据上传到其他云应用服务之前对其进行加密。加密代理的部署架构如图2-1所示:
HTTP加密代理部署在客户端和云应用服务端之间,对用户通过瘦客户端中的浏览器发出的http请求进行过滤和拦截,把用户要上传的文件进行加密操作,然后再以客户端的身份通过http请求把密文上传到目标云服务。
三、加密上传服务流程
1、上传处理总体流程
数据加密上传服务主要包括两个实体,客户端(Chent)和代理端(Proxy)。具体流程如图3-1所示:
主要处理步骤如下:
(1)用户在上传附件之前,要先选择是否使用加密代理。
(2)若不使用加密代理,则按照原本的服务流程进行,代理端不会截获客户端的HTTP请求。
(3)若使用加密代理,则客户端会把HTTP请求发送到代理端。
(4)代理端通过网络技术接收到HTTP数据包,根据HTTP数据包格式对其进行解析,分析该请求是否用来上传附件。
(5)若没有上传附件,则不改变请求的内容,转发给云应用服务端。
(6)若有上传附件,则把附件内容提取出来,并进行加密,生成密文文件。
(7)用密文文件代替明文文件,重新生成一个httpRequest,发送到云应用服务端。
(8)接收云应用发回的httpResponse,判断附件是否上传成功。
(9)若上传成功,则把此消息封装成新的httpResponse数据包,发给客户端。
(10)若上传不成功,则可以考虑重发,或者把解析出的原因(比如服务中断)重新封装成httpResponse,发给客户端。
由以上流程可以看出,加密上传服务是一个可选的服务,用户可根据需求选择是否使用。选择了则可以使用服务提供的加密上传的功能,不选择则跟原本的云应用服务场景没有差别。
2、核心功能模块
代理服务要跟两个实体进行交互,一个是客户端,由它发起上传附件的请求,代理最终也要把服务器的响应反馈给客户端;另一个是云应用服务器,代理需要把客户端发来的明文转化成密文后,再以云应用客户端的身份把上传附件的请求发送到云应用服务器,然后等待服务器的响应消息。
在此过程中,为了保证代理的“中间层”的特点及有效的与客户端和云应用服务进行交互,并且使模型及各部分功能更加清晰,代理服务可以分成三个模块:分别是HTTP数据包的接收模块、加密模块和发送模块。
(1)接收模块
接收模块负责接收HTTP数据包,包括两种情况:
(a)接收模块接收客户端提交表单时发来的httpRequest,解析这个数据包并判断是否上传了附件,若上传了附件,则进入加密模块;否则直接进入发送模块,把请求转发给云应用服务器。
(b)接收模块接收云应用服务器的响应httpResponse,解析该数据包并判断附件是否上传成功。若上传成功,进入发送模块,把该响应转发给客户端;如果上传不成功,可选择进入发送模块重发上传附件的请求,也可直接把该上传不成功的响应转发给客户端。
(2)加密模块
加密模块是该加密服务最主要的部分,它的功能就是完成对上传数据的加密工作。其工作流程如图3-2所示:当客户端提交了一个包含上传附件的HTTP请求时,接收模块会把解析出的附件内容以参数的形式传递给加密模块。加密模块要使用合适的加密方法对数据进行加密,然后把密文传递给发送模块。
(3)发送模块
发送模块负责发送HTTP消息,包括httpRequest和httpResponse。发送模块有三种接入情况:
(a)当客户端的请求消息中不需要上传附件的时候,则从接收模块直接进入发送模块,参数包括目标云应用服务器的url等,把请求消息发送到云应用服务端。
(b)接收模块接收到来自云应用服务器的httpResponse,并且分析出附件已经成功上传后,发送模块要先获得对应的客户端url,然后生成一个新的httpResponse,包含此成功上传消息,发送到客户端。
(c)加密模块对明文数据加密并生成密文后,流程进入发送模块。发送模块从加密模块获得密文,从接收模块获得目标云应用服务器的url,构造httpRequest,发送到云应用服务器,上传密文附件。
三、加密技术设计
1、加密算法的选择
现代密码学主要包括对称密钥密码学和非对称密钥密码学,两者的不同点如下表所示:
从安全性能、加密效率及密钥管理等方面考虑,加密代理使用对称加密中的经典加密算法AES。根据安全领域内的研究成果看,AES已基本可以抵御现有的常用攻击手段,包括强力攻击、渗透攻击、XSL攻击、差分分析及线性密码分析等;并且加密效率和密钥管理也要明显优于非对称加密算法,所以使用AES作为加密代理的加密算法比较合适。
2、包含身份信息的密钥
数据加密上传服务使用的加密密钥跟传统的随机产生密钥的方法略有不同。不同之处在于本设计在随机产生密钥的时候要包含用户身份信息。采用基于身份的密钥的原因主要考虑以下几点:
(1)数据加密上传服务的使用场景中用户多是使用瘦客户端访问云服务,由于瘦客户端对安装程序的限制,我们很难把密钥存储在外设中,使用的时候再由外设导入。所以本服务要为用户提供密钥的存储。
(2)由于云计算多租户的特性和资源池的使用,使得用户并没有一个纯粹的自己的用户空间,所以数据隔离是云安全的一个难题。如果数据隔离的力度不够,用户的隐私数据,比如密钥,就有可能被他的“邻居”访问。为了保证密钥能够被身份正确的用户合法的使用,可以在密钥中加入身份的信息。这样在密钥在被使用或者提取之前,可以先对用户身份进行验证。
(3)基于身份的认证虽然不是因云计算而产生,却是云计算中非常重要的认证技术。所以我们在这种认证技术保证了用户合法身份的前提下,把其身份信息加入到密钥的生成方法中,可以最大限度的保证密钥的唯一合法性。
基于身份的密钥的生成算法可以有多种不同的实现方式,不过要保证两个基本要求:
(1)基于身份的密钥要支持对用户身份的验证,以确保有且仅有一个用户可以合法的使用该密钥。
(2)密钥中的身份信息不能被轻易破译出来。因为存储在数据中心的密钥比存储在外设中的密钥泄露的风险大,所以要保证即使加密密钥泄露了,也不能从密钥本身破译出用户身份。因为前文提到密钥在使用之前需要对用户身份进行验证,所以即使攻击者非法取得了密钥,但是他没有密钥对应的身份信息,依然无法使用该密钥。
四、方案分析
本节从安全性、适用性和扩展性三方面来对加密上传服务进行分析:
(1)安全性
加密服务最重要的目标就是保证安全,从应用功能层面,本服务得使用户的数据在进入云应用服务之前完成了加密操作,使用户数据在云中的流转完全以密文的形式,抵御了云端数据泄露带来的安全隐患。从技术层面,AES加密算法的安全性能从目前的密码学发展程度上看还是很强的。即使密文泄露了,用户也基本不用担心隐私信息的泄露。
(2)适用性
加密代理位于云应用服务和客户端之间,以HTTP代理的形式提供加密服务。客户端和云应用服务的对外通信依然通过原始的HTTP协议,不用做出任何改变,所以加密代理保证了对客户端和云应用服务的透明性。也使得加密上传服务变成了一种可选择购买和使用的服务,增加了服务使用的灵活性。
(3)扩展性
应用层面上,由于加密代理是针对http请求中的上传附件做加密操作,并没有其他特殊规定,所以只要是提供了上传附件功能的云应用,都可以使用加密上传服务来加密上传的附件。这使得它的应用不会局限于某一种web服务。技术层面上,加密代理使用的是AES算法,但是随着密码学的发展,可能会研究出更适合加密代理的算法,或者为了实现更高的安全性,需要把多种加密算法结合使用,那么只要把加密模块中的算法实现部分替换成新算法即可。对加密算法的使用实现了弹性的扩展。
小知识之瘦客户端
瘦客户端(Thin Client)指的是在客户端-服务器网络体系中的一个基本无需应用程序的计算机终端。 它通过一些协议和服务器通信,进而接入局域网。作为应用程序平台的Internet的到来为企业应用程序提供了一个全新的领域:一个基于Internet/intranet的应用程序运用一个只包含一个浏览器的瘦客户端。这个浏览器负责解释、显示和处理应用程序的图形用户界面(GUI)和它的数据。这样的一个应用程序只需要被安装在一个Web服务器上,用户可以自动接收升级。一个解决方案只需要部署一次,甚至对成千的用户也是如此,这种想法的确很吸引人,尤其是Internet技术帮我们缓解了一些传统的应用程序的障碍,比如防火墙和对多平台的支持。