在最近的面试中, 被问到了加密算法,虽然回答了面试官的问题,自己总觉对于概念理解不是特别到位。本篇主要是对加密算法做一个整体的了解,其中所提到每一种算法,如果去深究,都不是一两篇文章能说清楚的,鉴于此,本篇不去谈算法的实现,不去比较算法的性能,只是梳理一些基本概念。
1. 基本术语
在密码学中,加密是指把明文通过密钥,转换为难以理解的数据(密文)的过程。 解密是指把难以理解的数据(密文)转换为明文的过程。
2. 加密算法的分类:加密算法分为对称加密算法和非对称加密算法(公开密钥加密算法)。
(1) 对称加密算法是指加密和解密用的是同一把密钥。优点:加密、解密速度快。 缺点:密钥不好维护。
(2) 非对称加密算法(Asymmetric Cryptograph Algorithm),加密和解密使用不同的密钥,使用公钥(Public key) 加密,使用私钥(Private key)解密。
3. 常见的加密算法
3.1 对称加密算法
(1) DES (Data Encryption Standard)美国数据加密标准算法,是1972年美国IBM公司研制。 明文按64位进行分组,密钥长64位,密钥事实上是56位参与DES运算(第8、16、24、32、40、48、56、64位是校验位, 使得每个密钥都有奇数个1)分组后的明文组和56位的密钥按位替代或交换的方法形成密文组的加密方法。了解更多
(2) 3DES (Triple DES)三重数据加密数据块算法。相当于对每个数据快进行三次DES加密。由于计算机计算能力的提升,DES算法容易被破解,3DES是通过增加数据块密钥的长度,来增加暴力破解的难度,而不是一种全新的加密算法。
(3)AES (Advance Encryption Standard)高级加密标准,在密码学中又称为Rijndael 算法,是美国联邦政府采用的一种区域块加密标准。这个标准为了替代原先的DES标准,2001有NIST发布,并与2002年5月26日成为标准。了解更多
(4) RC2/RC4 ,RC2和RC4由RSA数据安全公司的里维斯特(RonRivest)设计,是两种可变密钥长度的加密算法,而且都是RSA数据安全公司的专有算法。有关两种算法的细节尚未公开披露。
RC2是一种可变密钥长度的对称分组密码,打算作为DES的一种代替物。它以64比特分组加密数据。据公司声称,RC2软件实现的速度为DES的两倍。
Rc4是一种可变密钥长度的对称流密码。据公司声称.其速度为DES的10~100倍。两种算法的编码规模非常紧凑,其速度与密钥长度无关。
3.2 非对称加密算法
(1) RSA 是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。了解更多
(2) ECC (Elliptic Curves Cryptography)椭圆曲线加密算法,最初由Koblitz和Miller两人于1985年提出,其数学基础是利用椭圆曲线上的有理点构成Abel加法群上椭圆离散对数的计算困难性。
(3) DSA (Digital Signature Algorithm) 数字签名算法,是Schnorr和EIGamal 签名算法的变种,被美国NIST称作标准的数字签名标准(DSS, Digital Signature Standard),严格来说不算加密算法。
3.3 RSA和DSA的区别
(1) DSA是基于整数有限域离散对数难题的,其安全性与RSA相比差不多。
(2) DSA 数字签名和认证中,发送者使用自己的私钥对文件或者消息进行签名,接受者收到消息后,使用发送者的公钥来验证签名的真实性,接受者由此可知这条消息确实来在于拥有私钥的发送者,公钥的形式就是数字证书。例如,从网上下载安装程序,一般都带有程序制作者的数字签名,可以证明改程序的确是该作者(公司)发布的而不是第三方伪造的且未被篡改过(身份认证/验证)。
(3) DSA 只是一种算法,和RAS的不同之处在于它能不能用作加密和解密,也不能进行密钥交换,只用于签名,它比RSA要快很多。
4. 哈希算法
4.1 哈希(Hash)和加密(Encrypt)区别
哈希是把目标文本转换为具有相同长度、不可逆的杂凑字符串(消息摘要)。
加密是指把目标文件转换为长度不同、可逆的密文。详细介绍
4.2 常见的哈希算法
(1) MD5 (Message Digest Algorithm5) 消息摘要算法第五版,是RSA公司研发的一种单向散列算法,非可逆,相同的明文产生相同的密文。
特性:
压缩性:任意长度的数据,算出的MD5值长度都是固定的。128位的MD5散列被表示为32位16进制数字;
容易计算:从原数据计算出MD5值很容易;
抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别;
强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
(2) SHA 1(Secure Hash Algorithm) 可以对任意长度的数据运算生成一个160位的数值。主要适用于数字签名标准里定义的DSA算法。对于长度小于2^64位的消息,SHA-1 会产生一个160位的消息摘要。
特性:
不可以从消息摘要中复原信息;
两个不同的消息,产生相同消息摘要的概率10^48 分之1 ,一般认为不会产生相同的消息摘要。