加密算法分类
常用的加密算法分为:对称加密、非对称加密、秘钥交换和消息摘要四种类别的算法。
对称加密算法
对于对称加密算法,加密和解密使用同一把秘钥。常见的对称加密算法有以下几种:
- DES:Data Encryption Standard,1998年已被破译,一般计算机24小时内即可破译;
- 3DES:三重DES,基于DES算法进行了三重迭代,增加了算法安全性,但效率非常低下;
- AES:Advanced Encryption Standard,秘钥长度支持(128、192、256、384、512)bits;
- IDEA:International Data Encryption Algorithm,国际数据加密算法,秘钥长度128bits,数据块大小64bits,安全性极高,目前还没有被破译,以目前算力破译需要10的13次方年;
- PBE:Password Based Encryption,基于口令的加密,秘钥(口令+盐) + DES/AES + 迭代次数,盐可以采用约定算法生成,也可以存储于某种介质中例如专用USB设备;
- Blowfish:
- Twofish:
- RC6:
- CASTS:
对称加密算法特性:
- 加密和解密使用同一把秘钥;
- 分组加密;
对称加密算法缺陷:
- 秘钥过多,每一个客户端都需要一个不同的秘钥;
- 秘钥的分发很难兼具安全性和便利性;
密钥交换算法
常见的密钥交换算法有以下几种:
- DH:全称Diffie Hellman,秘钥交换算法,基于有限域上的离散对数难题;
- ECDH:基于椭圆曲线加密算法的秘钥交换算法,秘钥更短但安全性更强;
非对称加密算法
对于非对称加密算法,加密和解密使用不同的秘钥。常见的非对称加密算法有以下几种:
- RSA:基于因子分解难题,既可用于加解密,又可用于数字签名。命名来源于三位作者的姓氏首字母;
- ELGamal:基于离散对数难题,同样既可用于加解密,又可用于数字签名;
- ECC:椭圆曲线加密算法,通过椭圆曲线方程式产生秘钥,可以做到更快、更小且更有效;
非对称加密算法特性:
- 秘钥成对儿出现:公钥和私钥,且两者不同;
- 公钥公开、私钥留存;
- 用公钥加密的数据,只能用私钥解密,反之亦然;
非对称加密算法缺陷:
- 加解密数据效率低下;
- 需要引入第三方来保证公钥的合法性;
消息摘要算法
消息摘要算法又分为:带秘钥的消息摘要算法和不带秘钥的消息摘要算法。
不带秘钥的消息摘要算法
不带秘钥的消息摘要算法通常被用来验证数据的完整性,常用算法如下:
- MD算法家族:MD2、MD4、MD5,安全性依次增强,但产生的消息摘要都是128bits,MD全称是Message Digest;
- SHA算法家族:SHA-1(摘要长度160)、SHA-2(SHA-256、SHA-384、SHA-512、SHA-224),SHA算法基于MD4算法发展而来,不同之处在于摘要长度,SHA算法摘要长度更长、安全性更高。SHA全称是Secure Hash Algorithm-安全哈希算法;
- MAC算法家族:全称Message Authentication Code-消息认证码算法,又称HMAC:Keyed-Hash Message Authentication Code。MAC结合了MD系列和SHA系列算法的优势,并加入了秘钥的支持,是一种更为安全的消息摘要算法,常用HMAC算法有:HmacMD2、HmacMD4、HmacMD5、HmacSHA1、HmacSHA224、HmacSHA256、HmacSHA384、HmacSHA512,各算法产生的消息摘要长度与对应的MD/SHA算法一致;
- 其他消息摘要算法:RipeMD128、RipeMD160、RipeMD256、RipeMD320、Tiger、Whirpool(最安全的,512bits摘要)、GOST3411;
- 循环冗余校验算法:CRC-1(奇偶校验)、CRC-32、CRC-32-Adler;
带秘钥的消息摘要算法
带秘钥的消息摘要算法通常被用来实现数字签名,所以又叫做数字签名算法。数字签名算法是非对称加密算法和消息摘要算法的合体,它能做到验证数据完整性、认证数据来源,并起到抗否认的作用。数字签名算法原则是:“私钥签名,公钥验证”。签名过程是(1)先使用消息摘要算法对原始消息做摘要处理,(2)然后在使用私钥对消息摘要做签名处理。验证签名时则使用公钥、签名值、消息摘要原值对签名值进行验证。常用算法如下:
- RSA:基于整数因子分解难题,是经典的数字签名算法,即支持数字签名,又支持加密解密,秘钥长度512~65536区间内的64的整数倍,最终签名长度与秘钥长度一致。RSA数字签名算法列表:
- DSA:基于离散对数难题,仅支持数字签名算法,秘钥长度512~1024区间内64的整数倍,默认秘钥长度1024,签名长度与秘钥无关,且长度不唯一,DSA仅支持SHA系列的消息摘要算法:
- ECDSA:是ECC和DSA的结合,相对于传统签名算法,它具有速度快、强度高、签名短等优点;
常用加解密算法开源工具集
OpenSSL
GPG:GNU Privacy Guard,官网
以上两者都同时包括对称加解密、非对称加解密、数字摘要、数字签名等算法的类库和命令行工具的支持。
附录
查看rsautl帮助:whatis rsautl, man rsautl