对称加密算法
第四节:对称加密算法
采用单秘钥密码系统的加密方法,同一个密钥用来加密和解密。
常见的对称加密算法有 DES,3DES,AES,Blowfish,RC2,RC4,RC5, SM4、IDEA、ARIA(128,192,256)等。
对称加密算法比较
AES在加解密速度上具有显著优势,而SM4和DES的性能相对较慢,尤其在处理大型文件时,这种差距更为明显。
(快 -- 较快 -- 较慢 -- 慢)
名称 | 密钥长度 | 分组长度 | 加密轮数 | 运行速度 | 安全性 | 资源消耗 | 算法结构 |
---|---|---|---|---|---|---|---|
DES | 56位 | 64位 | 16 | 较快 | 低 | 中 | Feistel |
3DES | 168位 | 64位 | 16 | 慢 | 中 | 高 | Feistel |
AES-128 | 128位 | 128位 | 10 | 快 | 高 | 低 | SPN |
AES-192 | 192位 | 128位 | 12 | 快 | 高 | 低 | SPN |
AES-256 | 256位 | 128位 | 14 | 快 | 高 | 低 | SPN |
SM4 | 固定128位 | 128位 | 32 | 较慢 | 高 | 低 | 非平衡Feistel |
RC2 | |||||||
RC4 | |||||||
RC5 |
名称 | 优点 | 缺点 | 破解方式 | 使用场景 |
---|---|---|---|---|
DES | 算法公开、计算量小、加密速度快、效率高; | 1,如果双方都持有秘钥,安全无法保证;2,秘钥安全保护成本高,管理困难; | 暴力破解、穷举 | 普通数据加密 |
3DES | 算法公开、计算量小、加密速度快、效率高; | 1,如果双方都持有秘钥,安全无法保证;2,秘钥安全保护成本高,管理困难; | 难度大 | 普通数据加密 |
AES | 分组模式选择多,加密安全; | 同DES类似,密码管理都是问题; | 暴漏过线性密码攻击、查封密码攻击,难度大 | 普通数据加密 |
3DES (Triple DES)
3DES是基于原始DES(Data Encryption Standard)的加强版本,为了解决DES的相对较弱的安全性:
分组大小: 3DES也使用64位(8字节)的数据块,但由于内部处理,有效数据密钥长度是112或168位。
密钥大小: 原始DES的密钥是56位,但3DES可以使用两个或三个56位密钥,总共112或168位。
轮数: 3DES执行3次DES加密过程,每次使用不同的密钥(如果使用3个密钥)。
安全性: 3DES的安全性高于DES,但低于AES和SM4,因为存在一些针对3DES的特定攻击。
性能: 3DES的加解密速度较慢,尤其是在软件实现中。硬件加速可以提高性能,但仍然不如AES或SM4。
SM4
SM4是中国国家密码管理局于2006年公布的一种对称加密算法,主要用于商业和政府用途。
它是一种分组密码,其特点如下:
分组大小: SM4的块大小是128位(16字节)。
密钥大小: 128位(16字节)。
轮数: SM4执行32轮非线性变换,每轮包含四个不同的操作:字节替换、行移位、列混淆和轮密钥加。
安全性: 由于SM4的设计和AES类似,它的安全强度被认为与AES相当,可以抵抗已知的密码攻击方法。
性能: SM4的加解密速度通常较快,特别是在硬件加速下,能够达到很高的吞吐量。
AES (Advanced Encryption Standard)
AES是目前最广泛使用的对称加密标准:
分组大小: AES有128位的块大小。
密钥大小: 支持128、192和256位的密钥,提供不同级别的安全性。
轮数: 根据密钥长度,AES执行10、12或14轮迭代。
安全性: AES被认为是目前最安全的分组加密算法之一,尚未发现实际的破解方法。
性能: AES的加解密速度通常快于3DES,特别是在硬件支持下,如AES-NI(AES指令集扩展),性能可显著提升。
工作过程
该方式的隐患很明显,如果密钥被别人知道了,那么数据传输也就不安全了。
优点
通常情况下,在通用计算机中,相比非对称加密算法,对称加密算法效率会明显比较高。
加密计算量小,速度快,适合对大量数据进行加密的场景。比如在https协议中证书的传递用的非对称加密,数据传递用的是对称加密。
缺点
密钥传输问题
由于对称加密的加密和解密使用的是同一个密钥,所以对称加密的安全性就不仅仅取决于加密算法本身的强度,
更取决于密钥是否被安全的保管,因此加密者如何把密钥安全的传递到解密者手里,就成了对称加密面临的关键问题。
密钥管理问题
随着密钥数量的增多,密钥的管理问题会逐渐显现出来。
比如我们在加密用户的信息时,不可能所有用户都用同一个密钥加密解密,这样的话,一旦密钥泄漏,
就相当于泄露了所有用户的信息,因此需要为每一个用户单独的生成一个密钥并且管理,这样密钥管理的代价也会非常大。