加密算法简介

开放网络中数据传输的安全性一直是一个热门的话题,特别是电子商务兴起的今天,各种攻击欺骗手段更是层出不穷,安全的网络传输需求愈显重要。

对称加密

也就是 symmetric-key encryption,其中常见的算法包括了 AES、DES、3DES 等。

对称加密指的是可以使用同一个密钥对内容进行加密和解密,相比非对称加密,它的特点是加/解密速度快,并且加密的内容长度几乎没有限制。

DES 是一种分组数据加密技术,也即先将数据分成固定长度的小数据块,然后进行加密,速度较快,适用于大量数据加密。3DES 是一种基于 DES 的加密算法,使用 3 个不同密匙对同一个分组数据块进行 3 次加密,从而使得密文强度更高。

相较于 DES/3DES 而言,AES 算法有着更高的速度和资源使用效率,安全级别也较之更高了,被称为下一代加密标准。

非对称加密/公钥加密

也就是 asymmetric/public-key encryption,常见的加密算法有 RSA、DSA、ECC 等。

非对称加密有两个密钥,分别为公钥和私钥,其中公钥公开给所有人,私钥永远只能自己知道。

使用公钥加密的信息只能使用私钥解密,使用私钥加密只能使用公钥解密。前者用来传输需要保密的信息,因为全世界只有知道对应私钥的人才可以解密;后者用来作数字签名,因为公钥对所有人公开的,可以用来确认这个信息是否是从私钥的拥有者发出的。

RSA 和 DSA 的安全性及其它各方面性能相似,而 ECC 较之则有很多性能优越,包括处理速度、带宽要求、存储空间等。

PS. 理论上来说,无法通过公钥算出私钥,或者说以现在的计算能力需要几亿万年才能算出来。

安全散列算法

也就是 Secure Hash Algorithm,常见的算法包括了 MD5、SHA1、HMAC 等。

将任意长度的二进制值映射为较短的固定长度的二进制值,这个短的二进制值称为哈希值,这个算法具有不可逆、碰撞低等特性。同时该类算法可以用作数字签名,用来证实某个信息确实是由某个人发出的,同时可以保证信息没有被修改。

实际上,简单来说,这种算法有两个特性:
A) 不同的输入一定得出不同的 hash 值;
B) 无法从 hash 值倒推出原来的输入。

数字签名通常先使用一个 Hash 函数或者消息摘要算法,获得可以唯一对应原信息的摘要信息,然后通过私钥加密。这样其它人就可以通过公钥解密摘要信息,然后使用同样的算法对接收到的信息计算摘要,如果两者获得的摘要信息相同即可。

在数据传输前,使用 MD5 和 SHA1 算法需要发送和接收方在数据传送之前就知道密匙生成算法,而 HMAC 需要生成一个密匙,发送方用此密匙对数据进行摘要处理,接收方再利用此密匙对接收到的数据进行摘要处理,再判断生成的密文是否相同。

MD5 的全称是 Message-Digest Algorithm 5 (信息-摘要算法),128 位长度,目前 MD5 是一种不可逆算法,具有很高的安全性,它对应任何字符串都可以加密成一段唯一的固定长度的代码。

SHA1 的全称是 Secure Hash Algorithm (安全哈希算法) ,SHA1 基于 MD5,加密后的数据长度更长,它对长度小于 264 的输入,产生长度为 160bit 的散列值。

选择密钥长度

如果在选定了加密算法后,那采用多少位的密钥呢?

一般来说,密钥越长,运行的速度就越慢,应该根据的我们实际需要的安全级别来选择,一般来说,RSA 建议采用 1024 位的数字,ECC 建议采用 160 位,AES 采用 128 位即可。

如果只是加密一段信息,也不是经常需要,那可以用最强的加密算法,甚至也可以用不同的算法加密两次。如果想要加密速度快点,那就用 AES 。

原文地址:https://www.sunansheng.com/blog/20180526/encryption.html