对称密码(共享密钥密码)—— 用相同的密钥进行加密和解密

介绍:

对称密码(Symmetric Cryptography),也称对称密码加密或对称密钥算法,是一种加密方法,其中加密和解密过程使用相同的密钥。这种方法非常高效且速度快,适合处理大量数据。

加解密过程
帕蒂将要发给鲍勃的消息用一个密钥结合对称加密算法进行加密生成密文,密文通过传输媒介发给鲍勃,鲍勃拿到密文后采用帕蒂同样的密钥和算法进行解密,然后得到加密前的明文。

对称密码的分类

分组密码
每次只能处理特定长度的一块数据的一类密码算法,这里的"—块” 就称为分组(block)。此外,一个分组的比特数就称为分组长度(block length)。例如,AES 的分组长 度设置为 128 比特,因此 AES —次可加密 128 比特的明文,并生成 128 比特的密文。DESTriple DESAES都属于分组密码。

流密码
是对数据流进行连续处理的一类密码算法。流密码中一般以 1 比特、8 比特或 32 比特等为单位进行加密和解密,但实际应用场景中有时候也会以更长的比特序列进行加解密运算。分组密码处 理完一个分组就结束了, 因此不需要通过内部状态来记录加密的进度; 相对地,流密码是对一串数据流进行连续处理, 因此需要保持内部状态。RabbitRC4属于流密码。

异或
异或本身不属于对称密码的范畴,但由于其可以逆向运算的特点广泛地存在于对称密码运算中,异或本身运算形式也于对称密码较为类似,详情请见:XOR

分组密码的模式

ECB(Electronic CodeBook): 电子密码本模式
将明文分组加密之后的结果直接成为密文分组,当最后一个明文分组的内容小于分组长度时,需要用一些特定的数据进行填充
CBC(Cipher Block Chaining): 密文分组链接模式
首先将明文分组与前一个密文分组进行XOR运算,然后再进行加密。当加密第一个明文分组时,由于不存在“前一个密文分组”,因此需要事先准备一个长度为一个分组的 比特序列来代替“前一个密文分组”,这个比特序列称为初始化向量(Initiazation Vector),也称之为偏移量
OFB(Output FeedBack): 输出反馈模式
在OFB模式中,密码算法的输出会反馈到密码算法的输入中。并不是通过密码算法对明文直接进行加密,而是通过将“明文分组”和“密码算法的输出”进行XOR来产生“密文分组”的。 OFB模式中也需要使用初始化向量(IV)。
CFB(Cipher FeedBack): 密文反馈模式
在CFB模式中,在前一个密文分组会被送到密码算法的输入端。所谓反馈,这里指的就是返回输入端的意思。同样CFB模式中也需要使用初始化向量(IV)
CTR(Counter): 计数器模式
CTR模式是一种通过将逐次累加的计数器进行加密来生成密码流的流密码。也就是说,最终的密文分组时通过将计数器加密得到的比特序列,与明文分组进行XOR而得到的。

对称密码的特点

显而易见,消息的发送者和接收者必须使用相同的密钥,才能对消息进行加密和解密。因此,如何保证通信的双方拥有相同的密钥就成了对称密码的关键要素,假设该密钥是由发送者生成的,如何 将密钥安全地给到接收方就成了最关键的问题,也称之为对称密码的密钥配送问题

为解决该问题,密码学家们又发明了Diffie-Hellman 密钥交换非对称密码(asymmetric cryptography)技术,详细的内容可在左侧侧边栏查找。
+