简述加密算法

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

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

算法类型

对称加密

  • 数据加密和解密采用的都是同一个密钥,因而其安全性依赖于所持有密钥的安全性。
  • 主要优点是加密和解密速度快,加密强度高,且算法公开。
  • 不足之处是,交易双方都使用同样钥匙,安全性得不到保证。
  • 主要算法: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-1 比 MD5 的 安全性更强。对于长度小于 2 ^ 64 位的消息,SHA-1 会产生一个 160 位的 消息摘要。基于 MD5、SHA-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算法总结