首页 > 其他分享 >【密码学】为什么不推荐在对称加密中使用CBC工作模式

【密码学】为什么不推荐在对称加密中使用CBC工作模式

时间:2023-05-23 21:04:36浏览次数:50  
标签:CBC 加密 填充 明文 分组 密文 byte IV 密码学

引言

这篇文章是我在公司内部分享中一部分内容的详细版本,如标题所言,我会通过文字、代码示例、带你完整的搞懂为什么我们不建议你使用cbc加密模式,用了会导致什么安全问题,即使一定要用需要注意哪些方面的内容。

注:本文仅从安全角度出发,未考虑性能与兼容性等因素

工作模式是个啥

分组加密的工作模式与具体的分组加密算法没有关系,所以只要使用了cbc模式,不限于AES、DES、3DES等算法都一样存在问题。

AES-128-CBC为例,可以屏蔽AES算法的内部实现,把AES算法当作一个黑盒,输入明文和密钥返回密文。

image-20230518164048044

因为是分组加密算法,所以对于长的明文,需要按照算法约定的块大小进行分组,AES每一组为16B,不同组之间使用相同的密钥进行计算的话,会产生一些安全问题,所以为了将分组密码应用到不同的实际应用,NIST定义了若干的工作模式,不同模式对分块的加密处理逻辑会不同,常见的工作模式有:

模式 描述
ECB(电码本) 相同的密钥分队明文分组进行加密
CBC(分组链接) 加密算法的输入是上一个密文组和当前明文组的异或
CFB(密文反馈) 一次处理s位,上一块密文作为下一块加密算法输入,产生伪随机数与明文异或或作为下一单元的密文
OFB(输出反馈) 类似CFB,仅加密算法的输入是上一次加密的输出,且使用整个分组
CTR(技数器) 每个明文分组都与一个经过加密的计数器相异或。对每个后续分组计数器递增

ECB模式最为简单,假设存在明文分组a、b、c、d 每个分组分别在相同密钥k进行aes加密后的密文为A、B、C、D,最终明文abcd对应的密文为ABCD,如图所示:

image-20230518165951722

ECB模式很简单可能从性能角度讲非常占优,因为分组之间没有关联,可以独立并行计算。但从安全角度来看这种直接将密文分组进行拼接的方式,很可能会被攻击者猜解出明文特征或替换丢弃部分密文块达到明文的替换与截取效果,以下的图非常清晰:

image-20230302102403380

image-20230523201623883

所以很容易理解ECB也不是推荐使用的工作模式。

CBC

有了ECB的前车之鉴,CBC( Cipher Block Chaining)模式就提出将明文分组先于一个随机值分组IV进行异或且本组的密文又与下一组的明文进行异或的方式,这种方式增加了密文的随机性,避免了ECB的问题,详细过程见图:

加密过程

标签:CBC,加密,填充,明文,分组,密文,byte,IV,密码学
From: https://www.cnblogs.com/9eek/p/17426345.html

相关文章

  • druid 数据库密码加密
    cmd命令:1、切换的druid-0.2.9.jar包所在目录2、在命令行中执行如下命令:java-cpdruid-0.2.9.jarcom.alibaba.druid.filter.config.ConfigToolsyou_password即输出加密后密码3、<!--sql统计功能就不能用<propertyname="filters"value="stat"/>--><propertyname="......
  • 接口加密了该怎么测?接口中有数据要进行加密怎么做??
    对明文编码生成信息摘要,以防止被篡改。比如MD5使用的是Hash算法,无论多长的输入,MD5都会输出长度为128bits的一个串。摘要算法不要秘钥,客户端和服务端采用相同的摘要算法即可针对同一段明文获取一致的密文。对称加密对称加密算法是共享密钥加密算法,在加密解密过程中,使用的密钥只......
  • AKSK加密认证
    AK/SK加密认证AK/SK概述1.什么是AKSKak/sk是一种身份认证方式,常用于系统间接口调用时的身份验证,其中ak为AccessKeyID,sk为SecretAccessKey。客户端和服务端两者会协商保存一份相同的sk,其中sk必须保密。2.AK/SK认证过程客户端在调用的服务端接口时候,会带上ak以及signatu......
  • RSA之低加密指数广播攻击------2023.5.22
    使用条件:模数n,密文C不同,明文m,加密指数e相同。(一般的话e=k,k是题目给出的n和c的组数)例如:e=k=3同余式组:C1≡m^emodn1C2≡m^emodn2C3≡m^emodn3由中国剩余定理:设n1,n2,n3是两两互素的正整数,M=n1∗n2∗n3Mi=M/ni (i=1,2,3)则同余式组: m^e≡Ci mod ni  (i=1,2,3)有唯一解......
  • iOS AES 256加密
    #import<Foundation/Foundation.h>@classNSString;@interfaceNSData(Encryption)-(NSData*)AES256EncryptWithKey:(NSString*)key;//加密-(NSData*)AES256DecryptWithKey:(NSString*)key;//解密@end#import"NSData+AES.h"#import&......
  • 关于MySQL数据库的加密解密问题
    SELECTMD5(‘123456’);结果显示的密文即为:e10adc3949ba59abbe56e057f20f883e解密MySQL中的MD5加密密码,需要使用MySQL中的UNHEX()函数。UNHEX()函数可以接收一个十六进制格式的参数,将其转换为原始字符串格式。例如我们可以这样使用UNHEX()函数解密前面我们生成的初始密文:SELEC......
  • 揭秘神秘的JS混淆加密技术
    在编程的世界里,沉香舞动着一种强大的力量,就像母亲为了救子不惜一切的决心。而在JavaScript的领域中,我们也有一种神秘的技术,它能够将代码变得晦涩难懂,宛如沉香救母一般,守护着程序的安全。今天,我将带你揭开这个神秘的面纱,一窥JS混淆加密技术的奥秘。JavaScript混淆加密是一种将代码进......
  • 揭秘神秘的JS混淆加密技术
    在编程的世界里,沉香舞动着一种强大的力量,就像母亲为了救子不惜一切的决心。而在JavaScript的领域中,我们也有一种神秘的技术,它能够将代码变得晦涩难懂,宛如沉香救母一般,守护着程序的安全。今天,我将带你揭开这个神秘的面纱,一窥JS混淆加密技术的奥秘。JavaScript混淆加密是一种将代码进......
  • rocky Elasticsearch 8.7.1集群 x-spack 安全验证 及 集群内部TLS加密传输 (ca)
    目录简介环境准备安装配置hostname解析安装systemd脚本ca证书配置给所有ES配置相同的用户密码启动查看 简介常规部署Elasticsearch集群时,不管是集群之间的数据传输,或者是Client访问Elasticsearch集群时均不需要相关验证,可通过对外提供的http接口,......
  • JWT 和MD5加密工具类的封装是使用
    jwt1packagecom.atguigu.common.jwt;23importio.jsonwebtoken.*;4importorg.springframework.util.StringUtils;56importjava.util.Date;78//jwt工具类9publicclassJwtHelper{1011privatestaticlongtokenExpiration=......