0x00 完整思路
大家都知道,在客户端与服务器数据传输的过程中,采用明文进行传输,是不安全的。那么如何建立安全的传输通道进行传输数据呢?
1.添加时间戳 => 防止重放 √
2.用对称加密传输数据内容 => 通道加密 √
3.用非对称加密传输对称加密的密钥 => 加密传输密钥 √
4.用数字证书传输非对称加密的公钥 => 防伪造 √
0x01 时间戳:防止重放攻击
重放攻击是计算机世界黑客常用的攻击方式之一,所谓重放攻击就是攻击者发送一个目的主机已接收过的包,来达到欺骗系统的目的,主要用于身份认证过程。为了确保每次请求都是一次性的,可采用timestamp + nonce
的模式。
实现方法:
-
timestamp:一次正常的请求,从发出到接收一般不会超过30秒。通过将时间戳与明文加密后一起传输,接收方解出时间戳后判断是否超过30秒,超过则认为非法。
- 优点:无需储存;
- 缺点:无法抵御短时间内的重放攻击,即无法确保短时间内的每次请求都是一次性的。
-
nonce:一次有效的随机字符串,要求每次请求时,将
时间戳
+ip地址
+mac地址
等信息生成哈希值,作为nonce参数。接收方会存储每次的nonce参数,若识别到nonce参数已存在,则认为非法。- 优点:真正实现每次请求都是一次性的;
- 缺点:存储空间会越来越大,即无法确保长时间的一次性校验。
-
nonce+timestamp:nonce可以解决timestamp短时间内的一次性问题,timestamp可以解决nonce的存储越来越大的问题(即只存储短时间内的nonce参数)。
- nonce存储的清理:
- 每次校验前判断nonce存储最后修改时间,超过阈值则清理。(适用低并发)
- 每隔固定时间,清理一次。
- 若接口每秒最多并发1000次,时间限制30秒,则可在校验后判断nonce数量是否超过1000*30=30000个,超过则清理。(适用高并发)
- 优点:短时间由nonce确保一次性,长时间由timestamp确保一次性
- nonce存储的清理:
安全风险:传输的内容易被窃取或篡改。
0x02 对称加密:加密传输的数据
通过对传输的数据内容进行加密,使得中间人无法解析数据内容,就可以提升数据传输的安全性。
加密的方法:
-
DES:一种对称密钥加密块密码算法,以64位为分组对数据加密,它的密钥长度是56位,加密解密用同一算法;DES现在已经不是一种安全的加密方法,主要因为它使用的56位密钥过短。
-
AES:高级加密标准,是美国联邦政府采用的一种区块加密标准。AES的区块长度固定为128比特,密钥长度则可以是128,192或256比特。AES是一种分组加密算法,其模式又分为:
-
ECB(ElectronicCodebook,电子密码本)
方法:将整个明文分成若干段相同的小段,然后对每一小段进行加密。
优点:简单、可并行计算、误差不传递
缺点:不能隐藏明文模式(比如图像加密轮廓仍在)、可能对明文进行主动攻击(改明文,后续内容不影响) -
CBC(Cipher Block Chaining,密码分组链接)
方法:先将明文切分成若干小段,然后每一小段与初始块或者上一段的密文段进行异或运算后,再与密钥进行加密。
优点:不容易主动攻击(误差传递)、适合长报文传输
缺点:无法并行、误差传递、初始化向量IV的选取比较复杂
初始化IV的选取方式:固定IV,计数器IV,随机IV(只能得到伪随机数,用的最多),瞬时IV(难以得到瞬时值)
用途:长报文传输,是SSL、IPSec标准 -
CFB(CipherFeedback,密码反馈)
方法:首先通过加密器加密iv生成密钥流(key stream);然后将密钥流和明文异或得到密文。第二次,将第一次得到的密文通过加密器加密得到新的密钥流,然后把第二次要加密的明文和密钥流进行异或生成密文......如此类推,最终得到密文。
优点:不容易主动攻击(误差传递),隐藏了明文模式,分组转变为流模式,可加密小于分组数据
缺点:无法并行、误差传递,唯一的IV -
OFB(OutputFeedback,输出反馈)
方法:先用块加密器生成密钥流(Keystream),然后再将密钥流与明文流异或得到密文流;解密是先用块加密器生成密钥流,再将密钥流与密文流异或得到明文。由于异或操作的对称性所以加密和解密的流程是完全一样的。
优点:隐藏了明文模式,分组转为流模式、可加密小于分组数据
缺点:无法并行,可能对明文进行主动攻击
用途:通信信道质量不高时使用,比如卫星通信 -
CTR(Counter,计数器模式)
方法:完全的流模式。将瞬时值与计数器连接起来,然后对此进行加密产生密钥流的一个密钥块,再进行XOR操作 。
优点:不泄露明文,并行、一次一密、仅需实现加密函数,无需填充
缺点:可能对明文进行主动攻击,使用重复瞬时值会泄露所有信息。
-
安全风险:初次交互需要交换密钥,若交换过程中无保护措施,可能会泄露密钥。
0x03 非对称加密:传输对称加密的密钥
非对称加密存在公钥和密钥,用公钥加密的数据,只有对应的私钥才能解密;用私钥加密的数据,只有对应的公钥才能解密。因此,A传输密钥给B的过程中,A先用B的公钥加密密钥,B收到后再用自己的私钥解密得到密钥。反之亦然,这样双方可安全地传输密钥。
加密方法:
- RSA:RSA算法基于一个十分简单的数论事实:将两个大质数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。RSA是目前最有影响力和最常用的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。RSA算法理论可以参考:RSA算法理论
为何不用RSA直接传输数据:RSA的解密速度太慢
- AES加密1M数据,需要0.16秒;密文体积是明文的2倍;解密时间是加密时间的两倍0.33秒;
- RSA加密1M数据,需要5秒;密文体积与明文相同;解密时间需要325秒;
- AES加密1G数据,需要4分钟;密文体积是明文的2倍;解密时间是加密时间的两倍;
- RSA加密1G数据,需要1分钟;密文体积与明文相同;解密时间需要65小时;
安全风险:公钥不可信,无法保证公钥就是对方发送的。
0x04 数字证书:传输可信公钥
数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。
加密方法:
1.把公钥和识别信息用Hash算法生成消息摘要;
2.为防止冒充,用认证中心(CA)提供的私钥加密消息摘要,生成数字签名;
3.将公钥、识别信息、数字签名合在一起形成数字证书;
验证方法:
1.用认证中心(CA)提供的公钥解密数字证书中的数字签名,得到消息摘要A;
2.用Hash算法,生成数字证书中公钥和识别信息的消息摘要B;
3.校验消息摘要A和消息摘要B是否一致;
流程图如下:
网友评论