探讨HTTP中敏感数据的安全性传输方案

Posted aimmiao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了探讨HTTP中敏感数据的安全性传输方案相关的知识,希望对你有一定的参考价值。

通用信息

文档介绍:本文档是为了探讨提高http中的敏感数据如密码等的安全性传输方案。

修订历史:1.0

方案探讨

方案1:应用Base64

方案介绍:发送端在发送敏感数据之前,先用Base64对其进行编码,再将编码后的值传输给接收端。收端接收到该值后,用Base64对其进行解码,便可读到敏感数据的内容。

 

优点:Base64算法复杂度低,所以计算效率会比较高,编码后的长度增加也较少。

 

缺点:为了保证Webpage端的javascript和Webserver端的c代码能够互相编码和解码,就要求Base64的编码和解码接口函数分别在JavaScript和C代码中实现。但是Webpage中的JavaScript是完全透明的,而且Base64中没有key的概念,只要窃听者获取到了传输过程中的密文数据,再调用JavaScript中的Base64解码函数,便能轻易得到原来的明文数据了。所以Base64的最大缺点就是安全性极低。

 

Base64编码解码原理图

技术图片

 

Base64编码解码用的转换表

技术图片

 

备注: Base64原理图来源于https://www.cnblogs.com/qianjinyan/p/9541368.html

 

方案2:应用HTTPs

介绍:在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。

 

优点:HTTPs协议对整个应用层的数据都采用了可靠性高的加密算法,使应用层的所有数据的传输都得到安全性的提升。

 

缺点:

1:HTTPs协议用到的ca证书免费的很少,自制的ca证书又会带来新的安全性问题。

2:HTTPs传输应用层数据之前不仅需要TCP三次握手,还要交换浏览器和服务器端的key等信息,增加了网络延时,使页面的加载时间延长。

3:HTTPs中应用了大量的加密算法、证书签名等,这些算法的复杂度都很高,会加重服务器和浏览器的计算负担,占用服务器的CPU资源,进一步增加了网络延时。

 

方案3:应用混合密码技术

为了同时获得方案1和方案2的优点并克服它们各自的缺点,可以采用混合密码技术,即:用对称加密算法提升加密/解密的速度,用非对称算法来传输对称加密算法用的key。在介绍混合密码技术之前,需要先了解AES256和RSA。

对称加密算法-AES256

技术图片

 

算法AES256属于对称加密算法,其加密密钥和解密密钥是完全相同的,在使用AES256时,使用者需提供一个64位的key,如果采用CBC分组模式,则还需要另外提供一个32位的IV。 

使用openssl中的AES256的命令举例:

openssl enc -aes-256-cbc -e -K 5e884898da28047151d0e56f8dc62927 -iv 6bbda7892ad344e06c31e64564a69a9a -in plainIn.txt -out cipherOu1t.txt

openssl enc -aes-256-cbc -d -K 5e884898da28047151d0e56f8dc62927 -iv 6bbda7892ad344e06c31e64564a69a9a -in cipherIn.txt -out plianOut.txt

参数名 参数解释
enc 后面跟加/解密算法的名字
-e 表示加密
-d 表示解密
-K 后跟64位的key,加密密钥用十六进制形式的字符串表示
-iv 后跟32位的iv,初始向量用十六进制形式的字符串表示
-in 输入文件名,存储待加密(-e)的明文数据或者待解密(-d)的密文数据
-out 输出文件名,保存输出结果。

 

 

 

 

 

 

 

 

 

 

 

算法分析:AES256全称是Advanced Encryption Standard 256,是公认的比较安全的加密算法,它的计算效率比Base64稍低,但远高于HTTPs。使用AES256的难点在于如何实现AES256用到的key的安全传输,为了能安全传输key,可以应用非对称加密算法RSA来传输AES256用到的key。

 

非对称加密算法-RSA

技术图片

 

 

 算法RSA属于非对称加密算法,加密密钥和解密密钥是不相同的,在使用RSA时,使用者需提供一个供RSA加密用的公钥和一个RSA解密用的私钥, 公钥和私钥是成对的,一般私钥长度有512位、1024位和2048位,位数约高,算法的时间复杂度就越高,公钥是从私钥中提取来的,公钥的长度一般低于私钥的长度,也就是说从私钥中可以提取出公钥,但是得到公钥后却不能反推出私钥。公钥作为加密密钥,私有作为解密密钥。

使用openssl中的RSA的命令如下:

openssl genrsa -out private.key 512

openssl rsa -pubout -in private.key -out public.key

openssl rsautl -encrypt -inkey public.key -pubin -out cipherOut.txt -in plainIn.txt

openssl rsautl -decrypt -inkey private.key  -out plianOut.txt -in cipherIn.txt

参数名 参数解释
genrsa 生成RSA私钥文件
-out 输出文件名
512 指定私钥文件的长度为512位,也可以位1024或2048
rsa 从私钥文件中提取公钥
-pubout 表明将从”-in filename”的filename中提取公钥,所以filename应为私钥文件
-pubin 表明将从”-in filename”的filename中读取公钥,所以filename应为公钥文件
-in 输入文件名
-rsautl 使用RSA算法加密/解密数据
-encrypt 表示加密,此时”-inkey file”中的file应该是公钥文件
-decrypt 表示解密,此时”-inkey file”中的file应该是私钥文件

 

 

 

 

 

 

 

 

 

 

 

 

 

 

算法分析: RSA算法的安全性与其私钥的位数有关,位数越高,安全性越高,但RSA算法加密后的密文长度较长,故传输的数据量较大时,不适合使用RSA算法。RSA算法适合用于少量的数据加密。RSA算法最经典的应用场景是用于配送对称加密算法的key。

 

混合密码技术

混合密码技术同时应用了AES256和RSA,用AES256来保护敏感数据,用RSA来保护AES256中的key,将混合密码技术应用于HTTP中的敏感数据传输,其原理图如下:

技术图片

 

 

 

小结

从下面的比较表格可知,Base64不适合敏感数据的传输,RSA加密后的密文长度过长不利于HTTP数据的高效传输。所以,推荐采用方案3来传输HTTP中的敏感数据: 即用RSA传输需要保护的AES256的key,用AES256来加密/解密敏感数据。

算法名称 算法特性 应用场景
Base64

计算负荷极小;

密文长度比明文略大;

不安全;
用于特殊数据如xml、图片等的传输;
HTTPs

计算量大,占用CPU资源;

交互次数较多,增加网络延时;
用于重要的、大型的公告服务网站;
AES256

计算负荷稍大;

密文长度比明文略大;

比较安全;
用于敏感数据的传输;
RSA

计算负荷极大;

密文长度比明文大很多;

比较安全;
用于简短的敏感数据的传输;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

参考资料

  1. 图解密码技术 [日]结城浩 著 周自恒 译

以上是关于探讨HTTP中敏感数据的安全性传输方案的主要内容,如果未能解决你的问题,请参考以下文章

怎样令WordPress全站转换http为https,增强安全性

敏感信息安全传输与传输

开放平台之安全

apache相关实验-2

日志记录/安全注意事项和敏感数据

开放接口/RESTful/Api服务的设计和安全方案