探讨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. 图解密码技术 [日]结城浩 著 周自恒 译

原文地址:https://www.cnblogs.com/aimmiao/p/12566776.html

时间: 2024-08-03 12:09:41

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

代码审计:安全性测试方案

安全性测试方案 一.静态代码测试 主要通过对源代码进行安全扫描,根据程序中数据流.控制流.语义等信息与其特有软件安全规则库进行匹对,从中找出代码中潜在的安全漏洞.   代码审计工具RIPS:   介绍:RIPS是一个用php编写的源代码分析工具,它使用了静态分析技术,能够自动化地挖掘PHP源代码潜在的安全漏洞.渗透测试人员可以直接容易的审阅分析结果,而不用审阅整个程序代码.由于静态源代码分析的限制,漏洞是否真正存在,仍然需要代码审阅者确认.RIPS能够检测XSS, SQL注入, 文件泄露,Hea

代码审核:安全性测试方案

安全性测试方案 一.静态代码测试 主要通过对源代码进行安全扫描,根据程序中数据流.控制流.语义等信息与其特有软件安全规则库进行匹对,从中找出代码中潜在的安全漏洞.   代码审计工具RIPS:   介绍:RIPS是一个用php编写的源代码分析工具,它使用了静态分析技术,能够自动化地挖掘PHP源代码潜在的安全漏洞.渗透测试人员可以直接容易的审阅分析结果,而不用审阅整个程序代码.由于静态源代码分析的限制,漏洞是否真正存在,仍然需要代码审阅者确认.RIPS能够检测XSS, SQL注入, 文件泄露,Hea

Oracle MFT 12c 快速、灵活的企业文件传输方案

已有文件传输方案的问题 因为丢失或者更糟的情况,暴露了合作伙伴的敏感文件,对企业的业务造成影响? 大文件阻塞了系统,使关键业务流程运行缓慢? 现有的文件传输解决方案经常会造成文件的丢失或损坏? 能否追踪到哪一个部门.合作伙伴或者员工使用了最多的资源? 现有的工具是否难于诊断文件传输的问题? 在构建.监控和维护文件传输时,是否受制于现有的资源? 产品概览 即使在当今动态的.面向事件的业务环境当中,对各类文件进行没有大小限制的高效传输都是任何集成策略的核心内容.通过一个统一的.可靠的受管文件传输解决

Jeecg-Boot前后端分离,针对敏感数据,加密传递方案

# 针对敏感数据,加密传递方案 第一步: 在vue页面引入aesEncrypt.js encryption方法.示例代码: import { encryption } from '@/utils/encryption/aesEncrypt' 第二步: 请求后台获取 /sys/getEncryptedString 接口,以此获取加密所需要的key和iv 第三步: 使用引入的 encryption方法进行对敏感数据进行加密.方法第一个参数是所需要加密的字符串 第二个参数和第三个参数是第二步从后台获取

【转】android实时视频网络传输方案总结(一共有五套)

最近研究了Android的实时视频网络传输问题,在视频处理方面花费了大量精力进行研究,总结出以下五套方案,并加以比较 以320×240大小的视频传输为例 方案 压缩率 压缩/传输方式 实时性 平均流量消耗  传输距离 用camera的回调函数发送原始的yuv420数据 0 无压缩,按帧传输 高(20~30 fps) 很高(6.5 Mbps)太恐怖了O_O  近距离有线或无线 用MediaRecorder对yuv420进行H264硬编码后发送 高(95%) 帧间压缩,视频流传输 高(20 fps)

web.config中sessionState节点的配置方案

web.config中sessionState节点的配置方案 web.config关于sessionState节点的配置方案,sessionState有五种模式:Custom,off,inProc,StateServer,SqlServer. 1.Custom模式  会话状态将使用自定义数据存储区来存储会话状态信息. 2.off模式 从字面上就可以看出这个是关闭模式,如果当前页面不需要session的值,为了减少服务器资源,你可以去掉Session的开销. <sessionState mode=

【Java编码准则】の #01限制内存中敏感数据的生命周期

当竞争对手的应用程序与我们的应用程序执行在同一个系统上时,我们的应用程序在内存中的敏感数据是非常easy被竞争对手获取的.假设我们的应用程序符合以下几种情况之中的一个,那么竞争对手能够获取到我们应用的敏感数据: 1)应用程序使用对象来存储敏感数据,并且在对象使用完后.对象的内容没有被清除或者对象没有被垃圾回收: 2)在操作系统执行内存管理任务或者执行休眠等功能时.应用程序的内存分页将被置换到磁盘上保存: 3)持有存储了操作系统缓存或者内存中敏感数据的buffer对象(比如BufferedRead

探讨C++中的Map映射机制

概述 从MFC到ATL,充斥着Map映射机制,似乎没有了这个Map机制,就玩不转啦.在WebBrower控件中,也存在着事件映射:在COM中,在IDispatch中也存在着自定义的函数映射. 以前,只要一谈到映射机制,总是让我闻风丧胆,退而求自保,暂且如此而已,记住就可以啦.现在想来,只要是跨不去过的坎,若没有认真面对和解决,那就永远无法逾越,成为心中永远的痛.最终,只能作茧自缚而唯唯诺诺.既然老天爷,又给了我一次机会,那我就好好抓住这次机会啦. 轰轰烈烈的开场白讲完了,让我们回归主题:"映射机

1.Relationship in Entity Framework Using Code First Approach With Fluent API【使用EF Code-First方式和Fluent API来探讨EF中的关系】

In this article, you will learn about relationships in Entity Framework using the Code First Approach with Fluent API. 在这篇文章中,你将会学习到使用EF Code-First方式和Fluent API来探讨EF中的关系(一对一,一对多,多对多). Introduction[介绍] A relationship, in the context of databases, is a