简述加密算法
因为一次简单的面试题以及要做的一个系统,发现自己对这方面几乎没有整体的了解,所以想要全面的了解一下加密算法这个体系,但是也只是简单了解,毕竟也是一个比较大的领域
前面比较啰嗦,喜欢精简的建议直接跳到总结:)
算法类型
对称加密
- 数据加密和解密采用的都是同一个密钥,因而其安全性依赖于所持有密钥的安全性。
- 主要优点是加密和解密速度快,加密强度高,且算法公开。
- 不足之处是,交易双方都使用同样钥匙,安全性得不到保证。
- 主要算法: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登陆
参考: