简述加密算法

因为一次简单的面试题以及要做的一个系统,发现自己对这方面几乎没有整体的了解,所以想要全面的了解一下加密算法这个体系,但是也只是简单了解,毕竟也是一个比较大的领域

前面比较啰嗦,喜欢精简的建议直接跳到总结:)

算法类型

对称加密

  • 数据加密和解密采用的都是同一个密钥,因而其安全性依赖于所持有密钥的安全性。
  • 主要优点是加密和解密速度快,加密强度高,且算法公开。
  • 不足之处是,交易双方都使用同样钥匙,安全性得不到保证。
  • 主要算法:DES,AES。

非对称加密

  • 非对称加密算法使用两把完全不同但又是完全匹配的一对钥匙——公钥和私钥。
  • 加密明文时采用公钥加密,解密密文时使用私钥才能完成,或者相反也是可以的。
  • 基本原理是,如果发信方想发送只有收信方才能解读的加密信息,发信方必须首先知道收信方的公钥,然后利用收信方的公钥来加密原文;收信方收到加密密文后,使用自己的私钥才能解密密文。
  • 广泛应用的非对称加密算法有RSA算法和美国国家标准局提出的DSA。
  • 缺点是加密和解密花费时间长、速度慢。
  • 广泛应用的非对称加密算法有RSA算法和美国国家标准局提出的DSA。

不可逆加密算法

事实上以上两种都是可逆的加密算法

  • 不可逆加密算法的特征是加密过程中不需要使用密钥,输入明文后由系统直接经过加密算法处理成密文,这种加密后的数据是无法被解9999999999的,只有重新输入明文,并再次经过同样不可逆的加密算法处理,得到相同的加密密文并被系统重新识别后,才能真正解密。
  • 在计算机网络中应用较多不可逆加密算法的有RSA公司发明的MD5算法和由美国国家标准局建议的不可逆加密标准SHS(Secure Hash Standard:安全杂乱信息标准)等

常用算法

hash算法

1. Hash是什么,它的作用

散列算法(Hash Algorithm),又称哈希算法,杂凑算法,是一种从任意文件中创造小的数字「指纹」的方法。

此外,作为一种指纹,散列算法最重要的用途在于给证书、文档、密码等高安全系数的内容添加加密保护。这一方面的用途主要是得益于散列算法的不可逆性,这种不可逆性体现在,你不仅不可能根据一段通过散列算法得到的指纹来获得原有的文件,也不可能简单地创造一个文件并让它的指纹与一段目标指纹相一致。

2. 特点

一个优秀的 hash 算法,将能实现:

  • 正向快速:给定明文和 hash 算法,在有限时间和有限资源内能计算出 hash 值。
  • 逆向困难:给定(若干) hash 值,在有限时间内很难(基本不可能)逆推出明文。
  • 输入敏感:原始输入信息修改一点信息,产生的 hash 值看起来应该都有很大不同。
  • 冲突避免:很难找到两段内容不同的明文,使得它们的 hash 值一致(发生冲突)。即对于任意两个不同的数据块,其hash值相同的可能性极小;对于一个给定的数据块,找到和它hash值相同的数据块极为困难。

但在不同的使用场景中,对不同的特点会有所侧重

例如在我们代码中常用的hashmap,hash值(key)存在的目的是加速键值对的查找,key的作用是为了将元素适当地放在各个桶里,对于抗碰撞的要求没有那么高。换句话说,hash出来的key,只要保证value大致均匀的放在不同的桶里就可以了。但整个算法的set性能,直接与hash值产生的速度有关,所以这时候的hash值的产生速度就尤为重要

此外在密码学中,对于抗碰撞和抗篡改能力要求极高,对速度的要求在其次。一个设计良好的hash算法,其抗碰撞能力是很高的。以MD5为例,其输出长度为128位,设计预期碰撞概率为2^128,这是一个极小极小的数字——而即便是在MD5被王小云教授破解之后,其碰撞概率上限也高达,也就是说,至少需要找次才能有1/2的概率来找到一个与目标文件相同的hash值。

3. 流行的算法

目前流行的 Hash 算法包括 MD5、SHA-1 和 SHA-2。

  • MD5 (RFC 1321)用的是 哈希函数,它的典型应用是对一段信息产生 信息摘要,以 防止被篡改。严格来说,MD5 不是一种 加密算法 而是 摘要算法。无论是多长的输入,MD5 都会输出长度为 128bits 的一个串 (通常用 16 进制 表示为 32 个字符),并且MD5 已被证明不具备强抗碰撞性
  • SHA(Secure Hash Algorithm)是一个 Hash 函数族,由 NIST(National Institute of Standards and Technology)于 1993 年发布第一个算法。
  • SHA-1 是和 MD5 一样流行的 消息摘要算法,然而 SHA-1MD5安全性更强。对于长度小于 2 ^ 64 位的消息,SHA-1 会产生一个 160 位的 消息摘要。基于 MD5SHA-1 的信息摘要特性以及 不可逆 (一般而言),可以被应用在检查 文件完整性 以及 数字签名 等场景,SHA-1设计时基于和 MD4相同原理,并且模仿了该算法。SHA-1 已被证明不具强抗碰撞性
  • 为了提高安全性,NIST 还设计出了 SHA-224、SHA-256、SHA-384,和 SHA-512 算法(统称为 SHA-2),跟 SHA-1 算法原理类似。SHA-3 相关算法也已被提出。

可以看出,上面这几种流行的算法,它们最重要的一点区别就是强抗碰撞性

对称加密算法

DES算法

DES 加密算法是一种 分组密码,以 64 位为 分组对数据 加密,它的 密钥长度56 位,加密解密同一算法

DES 加密算法是对 密钥 进行保密,而 公开算法,包括加密和解密算法。这样,只有掌握了和发送方 相同密钥 的人才能解读由 DES加密算法加密的密文数据。因此,破译 DES 加密算法实际上就是 搜索密钥的编码。对于 56 位长度的 密钥 来说,如果用 穷举法 来进行搜索的话,其运算次数为 2 ^ 56 次。

DES算法

是基于 DES对称算法,对 一块数据三个不同的密钥 进行 三次加密强度更高

AES算法

AES 加密算法是密码学中的 高级加密标准,该加密算法采用 对称分组密码体制,密钥长度的最少支持为 128 位、 192 位、256 位,分组长度 128 位,算法应易于各种硬件和软件实现。这种加密算法是美国联邦政府采用的 区块加密标准

AES 本身就是为了取代 DES 的,AES 具有更好的 安全性效率灵活性

非对称加密

RSA算法

RSA 加密算法是目前最有影响力的 公钥加密算法,并且被普遍认为是目前 最优秀的公钥方案 之一。RSA 是第一个能同时用于 加密数字签名 的算法,它能够 抵抗 到目前为止已知的 所有密码攻击,已被 ISO 推荐为公钥数据加密标准。

RSA 加密算法 基于一个十分简单的数论事实:将两个大 素数 相乘十分容易,但想要对其乘积进行 因式分解 却极其困难,因此可以将 乘积 公开作为 加密密钥

ECC算法

ECC 也是一种 非对称加密算法,主要优势是在某些情况下,它比其他的方法使用 更小的密钥,比如 RSA 加密算法,提供 相当的或更高等级 的安全级别。不过一个缺点是 加密和解密操作 的实现比其他机制 时间长 (相比 RSA 算法,该算法对 CPU 消耗严重)。

总结

加密类型有三种:对称/非对称加密不可逆加密,其中散列(HASH)算法属于不可加密的一种理论实践

常用加密算法按照用处分为:

  • MD5、SHA-1/2(可靠性、完整性),主用于文件唯一验证、身份验证,比如密码加密保存,文件系统同步
  • RSA(可加解密),主用于小数据量加解密或者数据签名,比如ssl,ssh登陆

参考:

浅谈常见的七种加密算法及实现

Hash算法总结