在密码学中,块密码,英语:Block cipher ,又被称为分组加密或者叫分块加密,是对称加密的一种常见形式。如果你想理解常见的对称加密算法,例如 AES/DES ,那么首先要理解什么是块密码。
先来做一下块密码的简介。当代的块密码的思路是基于信息论之父香农在1949年提出的密码思想,在1970年代被研发出来的。
块密码是非常常见的加密方法。典型的采用了块密码方式的加密协议,如 DES 和 AES ,都是美国政府核定的标准加密算法,应用领域从电子邮件加密到银行交易转帐,非常广泛。
块密码基本思路是这样。首先,将明文分成多个等长的块( block ),然后用相同的一个密钥,对每个块进行加密,得到密文块。
非对称加密是不适合加密大段数据的,而在对称加密算法中,块密码是最常见的,所以可以认为通常用来加密大段数据的方法就是块密码。除了块密码,另外一种对称加密的方式是流密码,流密码放到专门的文章中去阐述,这里不展开。
下面深入到块密码的技术细节聊一聊。
块密码由两个算法组成,加密算法和解密算法,解密算法是加密算法的逆运算。
先说说加密过程。信息被分割成大小相等的数据块,如果最后一个块数据量不够,就会按照特定的方法进行数据填充,例如先添加一个标注位,然后后面都是零。然后运行加密算法进行迭代,对每个块都进行相同的加密运算。运算过程要保证不会丢失原始的信息,因为未来还要对密文块进行逆运算获得原文的。但是同时运算过程中也要通过秘钥和原文进行复杂一些的运算,保证加密后得到的密文有比较高的抗分析特性。也就是说让试图破解密码的人,很难通过各种分析及其去反推原文,甚至原文的特性。
解密过程是加密过程的逆运算。把秘钥和密文块传递给解密函数,输出就是原文。所以密钥的长度是决定加密安全性的最终要的指标。当然,块的大小选择也是有讲究的。块太大了会影响执行效率。早期的算法,例如 DES ,是64比特一个块,当前使用的 AES 是128比特或者更大。
应该说加密算法本身还是很复杂的,细节很多,需要了解更多细节可以去参考维基百科页面,或者是专业书籍。
下面简单介绍一下采用了块密码的实际加密协议。
一般认为,1970年代 IBM 开发的 Lucifer 是第一个被广泛使用的块密码协议。后来这个协议的改进版被收录到了美国联邦信息处理标准中,被称为 Data Encryption Standard ,简称 DES ,意思是“数据加密标准”。DES 的块大小是64比特,密钥大小是56比特。后来,大家慢慢发现这个密钥太短,不安全了。
1991年发布的 IDEA 算法是用来取代 DES 的,全称是 International Data Encryption Algorithm ,国家数据加密算法,研发团队中包括中国上海交通大学的一位老师。IDEA 的块大小依然是64比特,但是密钥是128比特的。
目前使用最广泛的块密码算法是 AES ,全称 Advanced Encryption Standard ,高级加密标准,听名字就知道,是专门用来替代 DES 的。AES 的块大小是128比特,密钥可以是128,192或者256比特。
其他的算法还包括,Blowfish, RC5 等。
对块密码的介绍就是这些了。理解块密码,就理解了对称加密的基本思路。总结起来,信息被分成了很多大小相等的块,然后用一个密钥对每个块分别进行加密,通常密钥的长度跟每个块的长度差不多甚至更长。目前最为常用的块加密的实际协议是 AES ,同时它也是最著名的对称加密协议,被用于 HTTPS 等各种的常见系统中。
参考: