安全收集

常见的几种加密算法

2019-10-22  本文已影响0人  luckyYU

1. 介绍

数字签名、信息加密 是前后端开发都经常需要使用到的技术,应用场景包括了用户登入、交易、信息通讯、oauth 等等,不同的应用场景也会需要使用到不同的签名加密算法,或者需要搭配不一样的 签名加密算法来达到业务目标。这里简单的给大家介绍几种常见的加密算法

2.正文

2.1 数字签名

数字签名,简单来说就是通过提供 可鉴别数字信息 验证 自身身份 的一种方式。一套 数字签名 通常定义两种 互补 的运算,一个用于 签名,另一个用于 验证。分别由 发送者 持有能够 代表自己身份私钥 (私钥不可泄露),由 接受者 持有与私钥对应的 公钥 ,能够在 接受 到来自发送者信息时用于 验证 其身份。

image

注意:签名 最根本的用途是要能够唯一 证明发送方的身份,防止 中间人攻击、CSRF 跨域身份伪造。基于这一点在诸如 设备认证用户认证第三方认证等认证体系中都会使用到 签名算法 (彼此的实现方式可能会有差异)。

示例:

数字签名流程

客户端:
1.将敏感信息进行对称或非对称加密得到加密过得数据报文;
2.将数据报文再进行一下HASH算法加密得到32位的HSAH值;
3.将32位HASH值进行RSA算法加密得到签名;
4.将签名和数据报文打包组合发送给服务端;

服务端:
1.将接收到的签名用私钥解密得到32位的HASH值;
2.将接收到的数据报文按照客户端相同的操作进行HASH算法,得到32位HASH值;
3.判断两个HASH是否相同,如相同则表示数据报文是安全的;
4.将数据报文解密得到需要的原始数据;

2.2 对称加密和非对称加密

加密算法分 对称加密非对称加密,其中对称加密算法的加密与解密 密钥相同,非对称加密算法的加密密钥与解密 密钥不同,此外,还有一类 不需要密钥散列算法

2.2.1 对称加密

对称加密算法 是应用较早的加密算法,又称为 共享密钥加密算法。在 对称加密算法 中,使用的密钥只有一个,发送接收 双方都使用这个密钥对数据进行 加密解密。这就要求加密和解密方事先都必须知道加密的密钥。

image
  1. 数据加密过程:在对称加密算法中,数据发送方明文 (原始数据) 和 加密密钥 一起经过特殊 加密处理,生成复杂的 加密密文 进行发送。

  2. 数据解密过程:数据接收方 收到密文后,若想读取原数据,则需要使用 加密使用的密钥 及相同算法的 逆算法 对加密的密文进行解密,才能使其恢复成 可读明文

2.2.2 非对称加密

非对称加密算法,又称为 公开密钥加密算法。它需要两个密钥,一个称为 公开密钥 (public key),即 公钥,另一个称为 私有密钥(private key),即 私钥

因为 加密解密 使用的是两个不同的密钥,所以这种算法称为 非对称加密算法

image
  1. 如果使用 公钥 对数据 进行加密,只有用对应的 私钥 才能 进行解密。

  2. 如果使用 私钥 对数据 进行加密,只有用对应的 公钥 才能 进行解密。

例子:甲方生成 一对密钥 并将其中的一把作为 公钥 向其它人公开,得到该公钥的 乙方 使用该密钥对机密信息 进行加密 后再发送给甲方,甲方再使用自己保存的另一把 专用密钥(私钥),对 加密 后的信息 进行解密

2.3 常见的加密算法

2.3.1 对称性加密算法:AES、DES、3DES

AES、DES、3DES 都是 对称 的 块加密算法加解密 的过程是 可逆的

2.3.2 非对称性算法:RSA、DSA、ECC

RSA 算法出现的早,现在 SSL 证书普遍使用的是 RSA 算法,由于上述的 RSA 算法存在的缺点,现在使用 ECC 作为公钥算法的数字证书也开始多了起来。

一个例子
随着安全等级的增加,当前加密法的密钥长度也会成指数增加,而 ECC 密钥长度却只是成线性增加。例如,128 位安全加密需要 3,072 位 RSA 密钥,却只需要一 个 256 位 ECC 密钥。增加到 256 位安全加密需要一个 15,360 位 RSA 密钥,却只需要一个 512 位 ECC 密钥。

2.3.3 散列算法(签名算法):MD5、SHA1、HMAC

随着暴力破解网站的出现,现在的MD5已不再是绝对安全,因此可以对MD5稍作改进,以增加解密的难度。MD5公认被破解不代表其可逆,而是一段字符串加密后的密文,可以通过强大运算计算出字符串加密后的密文对应的原始字符串,但也不是绝对的被破解。MD5解密网站

几种提升加密安全方案:

  1. 传统方法是加盐(Salt):在明文的固定位置插入位数足够多、足够复杂的随机串,然后再进行MD5。
NSString *salt = @"fdsfjf)*&*JRhuhew7HUH^&udn&&86&*";

NSString *str = @"123456"; 

str = [str stringByAppendingString:salt];

str = [str md5String];

缺点:盐是固定不变的,一旦泄露后果不堪设想;使用加盐通过MD5解密之后,很容易发现规律从而破解。

  1. 在此基础上升级:

a. 先加密+后乱序:先对明文进行MD5,然后对加密得到的MD5串的字符进行乱序.

b. 乱序+加盐+多次MD5加密等.

c. 使用消息认证机制HMAC:给定一个"秘钥",对明文进行加密,并且做"两次散列"!-> 得到的结果,还是 32 个字符,相对安全

再次提高安全性:添加时间戳

第一步:客户端将HMAC得到的数据拼接当前服务器时间,再用MD5加密。
(HMAC+201910201633).md5String,将加密后的数据post到服务器。

第二步:服务器开始验证:根据账号在数据库中读取HMAC,将当前服务器时间拼接后,再用MD5加密,得到32位字符与客户端提交的32位字符进行比较。这里会有两种情况,1.服务器拼接的时间与客户端拼接的时间一致,得到相同的密文,则通过验证;2.服务器拼接的时间与客户端拼接的时间不一致,得到的密文不相同。这是服务器就拼接上一个时间,即:客服端密文是:(HMAC+201910201633).md5String,服务器第一次拼接时间密文是:(HMAC+201910201634).md5String。两者不一致,服务器第二次拼接上一个时间段密文:(HMAC+201910201633).md5String,一致则通过。

进行这样的操作就是让客户端发出的请求的时间有效性只维持1分钟,如果还觉得不安全可以再拼接时间的时候添加秒,进一步缩短时间的有效性,以提高安全性。

2.3.4 其他常用算法:Base64、HTTPS、钥匙串加密(iOS)

HTTPS和HTTP区别:
(1).https协议需要到ca申请证书,一般免费证书很少,需要交费。
(2).http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
(3).http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
(4).http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

3.总结

  1. 加密算法是可逆的,用来对敏感数据进行保护。散列算法(签名算法、哈希算法)是不可逆的,主要用于身份验证。
  2. 对称加密算法使用同一个密匙加密和解密,速度快,适合给大量数据加密。对称加密客户端和服务端使用同一个密匙,存在被抓包破解的风险。
  3. 非对称加密算法使用公钥加密,私钥解密,私钥签名,公钥验签。安全性比对称加密高,但速度较慢。非对称加密使用两个密匙,服务端和客户端密匙不一样,私钥放在服务端,黑客一般是拿不到的,安全性高。
  4. Base64不是安全领域下的加解密算法,只是一个编码算法,通常用于把二进制数据编码为可写的字符形式的数据,特别适合在http,mime协议下的网络快速传输数据。UTF-8和GBK中文的Base64编码结果是不同的。采用Base64编码不仅比较简短,同时也具有不可读性,即所编码的数据不会被人用肉眼所直接看到,但这种方式很初级,很简单。Base64可以对图片文件进行编码传输。
  5. https协议广泛用于万维网上安全敏感的通讯,例如交易支付方面。它的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。
  6. 大量数据加密建议采用对称加密算法,提高加解密速度;小量的机密数据,可以采用非对称加密算法。在实际的操作过程中,我们通常采用的方式是:采用非对称加密算法管理对称算法的密钥,然后用对称加密算法加密数据,这样我们就集成了两类加密算法的优点,既实现了加密速度快的优点,又实现了安全方便管理密钥的优点。
  7. MD5标准密钥长度128位(128位是指二进制位。二进制太长,所以一般都改写成16进制,每一位16进制数可以代替4位二进制数,所以128位二进制数写成16进制就变成了128/4=32位。16位加密就是从32位MD5散列中把中间16位提取出来);sha1标准密钥长度160位(比MD5摘要长32位),Base64转换后的字符串理论上将要比原来的长1/3。
上一篇下一篇

猜你喜欢

热点阅读