探讨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 |
计算负荷极大; 密文长度比明文大很多; 比较安全; |
用于简短的敏感数据的传输; |
参考资料
- 图解密码技术 [日]结城浩 著 周自恒 译
以上是关于探讨HTTP中敏感数据的安全性传输方案的主要内容,如果未能解决你的问题,请参考以下文章