加密算法(待更新)

加密算法

一. 常见加密算法

1.1 什么是对称和非对称加密

加密技术通常包括对称式加密和非对称式加密。

  • 对称性加密算法:
    • 对称式加密就是加密和解密使用同一个密钥
    • 信息接收双方都需事先知道密匙和加解密算法且其密匙是相同的,之后便是对数据进行加解密了。
    • 对称加密算法用来对敏感数据等信息进行加密。
  • 非对称性加密算法:
    • 非对称式加密就是加密和解密所使用的不是同一个密钥,通常有两个密钥,称为”公钥”和”私钥”,它们两个必需配对使用,否则不能打开加密文件。
    • 发送双方A,B事先均生成一堆密匙,然后A将自己的公有密匙发送给B,B将自己的公有密匙发送给A,如果A要给B发送消息,则先需要用B的公有密匙进行消息加密,然后发送给B端,此时B端再用自己的私有密匙进行消息解密,B向A发送消息时为同样的道理。
  • 散列算法:
    • 散列算法,又称哈希函数,是一种单向加密算法。
    • 在信息安全技术中,经常需要验证消息的完整性,散列(Hash)函数提供了这一服务,它对不同长度的输入消息,产生固定长度的输出。这个固定长度的输出称为原输入消息的”散列”或”消息摘要”(Message digest)。
    • 散列算法不算加密算法,因为其结果是不可逆的,既然是不可逆的,那么当然不是用来加密的,而是签名。

1.2 安全相关常见算法

1.2.1 对称加密算法

对称性加密算法主要用来对敏感数据等信息进行加密:

  • DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合。
  • 3DES(Triple DES):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高。
  • AES(Advanced Encryption Standard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高;AES是一个使用128为分组块的分组加密算法,分组块和128、192或256位的密钥一起作为输入,对4×4的字节数组上进行操作。众所周之AES是种十分高效的算法,尤其在8位架构中,这源于它面向字节的设计。AES 适用于8位的小型单片机或者普通的32位微处理器,并且适合用专门的硬件实现,硬件实现能够使其吞吐量(每秒可以到达的加密/解密bit数)达到十亿量级。同样,其也适用于RFID系统。

1.2.2 非对称加密算法

非对称性算法:

  • RSA:由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的。RSA在国外早已进入实用阶段,已研制出多种高速的RSA的专用芯片。

  • DSA(Digital Signature Algorithm):数字签名算法,是一种标准的 DSS(数字签名标准),严格来说不算加密算法。

  • ECC(Elliptic Curves Cryptography):椭圆曲线密码编码学。

    ECC和RSA相比,具有多方面的绝对优势,主要有:

    • 抗攻击性强。相同的密钥长度,其抗攻击性要强很多倍。
    • 计算量小,处理速度快。ECC总的速度比RSA、DSA要快得多。
    • 存储空间占用小。ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多,意味着它所占的存贮空间要小得多。这对于加密算法在IC卡上的应用具有特别重要的意义。
    • 带宽要求低。当对长消息进行加解密时,三类密码系统有相同的带宽要求,但应用于短消息时ECC带宽要求却低得多。带宽要求低使ECC在无线网络领域具有广泛的应用前景。

1.2.3 散列算法

散列算法(签名算法)主要用于验证,防止信息被修。具体用途如:文件校验、数字签名、鉴权协议

  • MD5:MD5是一种不可逆的加密算法,目前是最牢靠的加密算法之一,尚没有能够逆运算的程序被开发出来,它对应任何字符串都可以加密成一段唯一的固定长度的代码。
  • SHA1:是由NISTNSA设计为同DSA一起使用的,它对长度小于264的输入,产生长度为160bit的散列值,因此抗穷举(brute-force)性更好。SHA-1设计时基于和MD4相同原理,并且模仿了该算法。SHA-1是由美国标准技术局(NIST)颁布的国家标准,是一种应用最为广泛的Hash函数算法,也是目前最先进的加密技术,被政府部门和私营业主用来处理敏感的信息。而SHA-1基于MD5,MD5又基于MD4。
  • HMAC:是密钥相关的哈希运算消息认证码(Hash-based Message Authentication Code),HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。也就是说HMAC是需要一个密钥的。所以,HMAC_SHA1也是需要一个密钥的,而SHA1不需要。

1.2.4 其他常用算法

Base64编码

1.2.5 总结

  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。

第二节 哈希加密

2.1 介绍

防止密码泄露,通过散列的方法对口令进行一次性的加密,加密过程不可逆,从哈希值无法直接还原到原密码。但哈希加密很快就被破解了,可以通过如字典破解暴力破解等效率很低的破解方法,也可以通过查表法反向查表法彩虹表等方式来高效破解。

2.2 原理

单向散列算法,通过算法H将较大集合P映射到一个较小集合Q,即 Q=H(P) 。P集合中任意元素p都有唯一q与其对应,但q可以对应多个p。H(P)可以快速计算,且难以通过q反推出p,给出一个p1,难以推出p2使 H(p1)=H(p2)

因为这些特性,哈希算法常用来存储密码。

2.3 低效破解

暴力破解,即尝试密码长度允许的所有排列组合,只要密码长度足够,就会因为无法达到一定的算力而无法破解,所以会建议一定的安全长度来保证安全性。

字典破解,即通过创建一个小型数据库,存储单词、短语、常用密码等,进行哈希换算,再和要破解的密码进行比照。

2.4 高效破解

  • 查表法:即先计算一些常用密码的哈希值,然后存储到Table中,在破解时进行比对,内存时间平衡法通过大量的内存来减少破解时间。
  • 反向查表法:即先通过暴力破解获取一些哈希值,构造一个哈希表,获取已知数据,计算对应哈希值,并查询对应的数据。
  • 彩虹表:结合暴力法和查表法,对于Q=H(P),通过算法R使P=R(Q),然后计算H(p0)->R(q1)->H(p1)->R(q2)…->R(qn)->pn反复调用HR算法计算得到pn,存储p0和pn组合,代入不同的p0得到多组结果并存储。破解时根据获取的散列值q,进行一次R(q)得到c1,把c1和所存pn进行比较,若找到相等pn,则其对应的qn很有可能就是获取的散列值q,再进行一次HR计算,得到qn并比对,若相等则p(n-1)一定是想要的密令p,若不相等就继续直到遍历完所以存储组合。再对q进行R(q)->H(c1)->R(c2),对比c2和qn,若相等,则对应的p(n-2)就很可能是所求密令,继续计算c3、c4直到c(n-1)。总体来讲就是通过0-n对存储了p0到pn链的所有数据,可以很大的节约空间,但就是需要进行n次比对,所以相比查表法在时间上是会有更多的牺牲。

三. 加盐

3.1 介绍

加盐即将口令通过和一个随机数Salt关联,只要口令改变随机数即改变。随机数以未加密的形式放入口令文件中,将口令和随机数一起加密。

后台开发时常用Hash值的形式来存储用户密码,当后台被攻击时,哈希值泄露,黑客仍可以通过如彩虹表等方式破解用户密码。通过加盐可以提高密码的破解难度。

3.2 原理

由哈希加密的H(P)变为 H(P+Salt) ,每次哈希计算所选用的盐值都是随机数。因为H发生变化,所以已有的彩虹表数据就会失效,需要根据新的H重新生成,所以破解难度就提高了。

3.3 实现

未完待续。


四. 散列算法-MD5

Message Algorithm,散列函数(哈希算法),不可逆,压缩性。becrypt加盐。


五. 对称加密算法-DES

Data Encrytion Standard(数据加密标准),对应算法是DEA。

特点:

  1. 对称加密
  2. 同一个SK

详细内容:DES加密


六. 对称加密算法-AES

AES:Advanced Encrytion Standard(高级加密标准)

特点:

  1. 对称加密
  2. 一个SK扩展成多个子SK,轮加密

详细内容:AES加密


七. 非对称加密算法-RSA

RSA,特点:

  1. 非对称加密,即:PK与SK不是同一个
  2. PK用于加密,SK用于解密
  3. PK决定SK,但是PK很难算出SK(数学原理:两个大质数相乘,积很难因式分解)
  4. 速度慢,只对少量数据加密

参考:

🔗 java MD5/AES/DES加解密汇总

🔗 【密码学】轻松理解“加盐”的原理与java实现