客户端与服务端数据加密传输方案

06/11 14:07
阅读数 294

前言
从前一篇网络安全基础要点知识介绍中可以知道,在网络通信中,通信传输数据容易被截取或篡改,如果在传输用户隐私数据过程中,被不法分子截取或篡改,就可能导致用户受到伤害,比如被诈骗,所以对客户端与服务端的传输数据加密,是网络通信中必不可少的。

数据加密方案
首先,客户端与服务端商量好数据加密协议,对传输数据做到安全保护。

安全保护至少需要有下面两点:

采用HTTPS协议
采用公钥密码体制RSA算法对数据加密
现在安全是保证了,但还要考虑到性能问题,由于RSA算法对数据加密时运算速度慢,所以直接把所有传输数据都用RSA加密,会导致网络通信慢,这对用户将是不好的体验。由于对称密钥密码体制中的AES运算速度快且安全性高,所以结合AES对传输数据加密是非常好的方案。

下面是对客户端与服务端通信数据加密比较通用的方案:

客户端生成AES密钥,并保存AES密钥
客户端用AES密钥对请求传输数据进行加密
客户端使用RSA公钥对AES密钥加密,然后把值放到自定义的一个请求头中
客户端向服务端发起请求
服务端拿到自定义的请求头值,然后使用RSA私钥解密,拿到AES密钥
服务端使用AES密钥对请求数据解密
服务端对响应数据使用AES密钥加密
服务端向客户端发出响应
客户端拿到服务端加密数据,并使用之前保存的AES密钥解密
注意:传输数据使用AES密钥加密,RSA公钥对AES密钥加密。RSA公钥和私钥由服务端生成,公钥放在客户端,私钥放在服务端。公钥私钥要私密保护,不能随便给人。

具体流程图如下:

上面网络通信过程是安全的,可以保证通信数据即使被截取了,也无法获得任何有效信息;即使被篡改了,也无法被客户端和服务端验证通过。

数据加密细节
AES加解密
生成AES密钥和使用AES密钥加密、解密,有下面重要的几点:

1.密钥长度的选择:AES能支持的密钥长度可以为128,192,256位(也即16,24,32个字节),这里选择128位。

2.算法/模式/填充的选择:
算法/模式/填充    字节加密后数据长度    不满16字节加密后长度
AES/CBC/NoPadding    16    不支持
AES/CBC/PKCS5Padding    32    16
AES/CBC/ISO10126Paddind    32    16
AES/CFB/NoPadding    16    原始数据长度
AES/CFB/PKCS5Padding    32    16
AES/CFB/ISO10126Padding    32    16
AES/ECB/NoPadding    16    不支持
AES/ECB/PKCS5Padding    32    16
AES/ECB/ISO10126Padding    32    16
AES/ECB/ISO10126Padding    32    16
AES/OFB/NoPadding    16    原始数据长度
AES/OFB/PKCS5Padding    32    16
AES/OFB/ISO10126Padding    32    16
AES/PCBC/NoPadding    16    不支持
AES/PCBC/PKCS5Padding    32    16
AES/PCBC/ISO10126Padding    32    16

这里选择AES/CBC/PKCS5Padding。

3.添加向量 IvParameterSpec:增强算法强度。
4.编码格式选择:UTF-8。

 

 

总结
1.为了保证网络通信中的通信数据安全,首先采用HTTPS协议和公钥密钥体制中的RSA加密。

2.因为是RSA运算速度慢,所以采用运算速度快且安全性高的对称密钥密码体制中的AES对所
有传输数据进行加密,然后再用RSA对AES密钥加密,这样既能保证安全又能保证性能。

3.RSA公钥和私钥由服务端生成,公钥放在客户端,私钥放在服务端。

4.数据加密后采用Base64编码,数据解密前采用Base64解码。

5.编码格式同一采用UTF-8。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部