zoukankan      html  css  js  c++  java
  • 探讨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. 图解密码技术 [日]结城浩 著 周自恒 译
  • 相关阅读:
    大家帮忙出几个招聘考试题目吧
    单元测试和设计模式在重构中的应用
    想起去年和女朋友第一次去吃饭的事情
    为什么我们常忘记使用正则表达式
    .NET实用设计模式:观察者模式(Observer)
    一个Outlook宏写的小程序,献给象我一样粗心大意的人
    单元测试应该测什么,不应该测什么?
    .NET实用设计模式:工厂模式(Factory)
    2021 系统架构设计师备考分享
    系统架构设计师论文企业集成
  • 原文地址:https://www.cnblogs.com/aimmiao/p/12566776.html
Copyright © 2011-2022 走看看