加密算法分类

常用的加密算法分为:对称加密、非对称加密、秘钥交换和消息摘要四种类别的算法。

对称加密算法

对于对称加密算法,加密和解密使用同一把秘钥。常见的对称加密算法有以下几种:

  • 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