如何选择加密模式

39 篇文章 44 订阅
订阅专栏
4 篇文章 0 订阅
订阅专栏

在设计安全协议或其他使用加解密算法的场景中,经常会用到AES算法。关于在什么样的场景下使用AES可能不是一个值得深入讨论的问题,但是在如何选择加密模式的问题上,笔者认为需要反复思量。

知所先后,则近道矣!

想要区分不同加密模式的适用场景,首先需要对加密模式的原理有一定的了解。而要想了解加密模式,最合适的切入点便是最原始、最简单的ECB模式。

(图片来自维基百科) 

ECB模式全程电子密码本模式,其原理如上图所示。使用ECB模式,首先需要将明文分组,每个分组长度与密钥Key的长度相同,然后每个分组使用相同的密钥进行AES加密。在了解了ECB模式的基本原理之后,我们至少应该提出如下两个问题:

1)明文为什么要分组?

2)何为加密模式?

之所以要对明文进行分组,是因为AES只能加密固定长度的数据,为16个字节,128个比特位。所以我们对明文进行分组,就是将明文数据分割成固定的长度,以满足AES对输入数据的要求。这也引出了我们需要思考的第三个问题:

3)最后一个分组不足16个字节的时候怎么办?

答案是填充,将最后一个分组填充为16个字节长度,关于填充的方式,笔者打算写一篇专题进行讨论,但本文不打算就此展开。(实际上,当最后一个分组长度刚好为16字节时,也会进行填充,即增加一个分组的填充)

在回答完第一个问题和第三个问题之后,我们自然可以推导出第二个问题的答案——加密模式就是在进行加解密计算的过程中,对明文和相关信息进行处理的方式。

现在我们对分组加密模式有了初步的认识,但是这还远远不够,因为分组加密模式多达十几二十种,我们仅仅了解了最原始的ECB模式。话说至此,问题又来了:

4)为什么需要这么多的加密模式?ECB不够香吗?

从前,车马很慢,书信很远,一生只够爱一人。如今,高铁飞快,微信咫尺,一天能约几个妹。车马当然不香了,所有落后了的技术,都将被新的技术以效率、安全和方便的名义取而代之。

ECB被取而代之的重要名目就是不够安全,因为每个分组的加密方式和Key完全相同,在明文相同的情况下,密文将会完全一样,这便是攻击者手里的刀,防御者眼里的沙子,当然需要改进,而CBC就是ECB的改进版本。

(图片来自维基百科)

 CBC全称密文分组链接模式,在CBC模式中,明文分组不会直接进行加密,而是经过一次异或之后再进入加密流程。第一个分组的明文与初始向量(IV)进行异或,然后使用AES加密,加密的结果与下一个明文分组异或,如此向下进行链式传导。因为在算法中引入了IV,相同的明文不再会得到相同的密文,安全性得到了很大的提升,CBC模式也因此成为最常用的分组加密模式。

甘瓜苦蒂,天下物无全美!

CBC也不是万能膏药,哪里痛都能贴。比如如下几个痛点便是CBC也无法解决的:

  • 加解密场景需要密文长度与明文相同
  • 需要并行实现加解密
  • 在保证机密性的同时,还需要保证完整性

看来,CBC不适用的场景还是蛮多的。针对第一个问题,我们可以使用CFB模式:

(图片来自维基百科) 

CBC与ECB模式一脉相承,它们都需要将明文分组成16字节的数据块,然后进行填充,即密文长度始终大于明文。为解决这个问题,CFB模式弃用了直接加密明文的方式,转而将加密作用在IV和Key上,再将结果与明文进行异或,所以这个时候明文不必再满足16字节的要求,因为异或运算的输入可以是任意长度,这就引出同时回答了本文关心的第五个问题:

5)CFB模式是如何将块密码转换成流密码的?

因为明文分组可以是任意长度,所以我们可以将明文分组长度设为1个字节,让加解密过程看起来像是流式运算。而最最重要的,此时明文不再需要填充了,密文长度完全与明文长度一致。

地形有通者、有挂者、有支者、有隘者、有险者、有远者。

AES的运用场景之多决定了加密模式不会仅限于如上三种,当我们使用多处理器实现带硬件加速功能的SE芯片时,便会想到CTR模式,即计数器模式。

(图片来自维基百科)

计数器模式通过递增一个加密计数器以产生连续的密钥流。其中,计数器即可实现为递增的函数,也可实现为随机函数。由于加密和解密过程中,计数器序列可以预生成,因此均可以进行并行处理,特别适合运用于多处理器的硬件上。CTR的另一个优点是密文中的错误位不会传播,解密时仅影响对应的明文位。

如果需要进一步保证密文的完整性,单纯只是用加密就不能解决问题了,而GCM模式就是用来满足这种需求的:

GCM可以理解为在CTR模式的基础上增加了一个GMAC算法,因此在生成的密文后将会附加一个Auth Tag,用来保证传输过程中的完整性。

到此为止我们一共介绍了五种常用的加密模式,最后我们将介绍的几乎是一个专用的加密模式——XTS,XTS基本专为存储加密设计,在磁盘加密的实现中运用广泛,比如linux上赫赫有名的dm-crypt机制,便是使用XTS实现。

关于XTS的原理我们将不再深入探讨,介绍它是因为加密磁盘的应用场景十分普遍,我们需要了解,但是却很少存在直接使用的场景。

道阻且长,行则降至。

关于原理的介绍且告一段落,笔者结合自己实际运用的经验和业内人士的分享,整理了一份最常用加密模式的对照表:

如上表格高度概括了ECB、CBC、CFB、CTR、XTS和GCM六种主流加密模式的原理、优缺点和应用范围,作为原理的总结。

相信绝大多数读者学习加解密算法的目的都是为了最终能够运用,也只有在实际运用中才能够真正领悟每种加密模式的特点,对其适用场景有更加深刻的理解。为了帮助大家进行选择,笔者作了一张加密模式选择的参考图:

该选择方案仅供参考,至于如何选择最佳的加密模式,还需要根据具体的场景和要求进一步判断。

纸上得来终觉浅,绝知此事要躬行

RSA加密模式
u014773226的博客
01-16 2853
1,把dict转换成jsonStr 2,随机生成一个8位的字符串 3,用这个8位的字符串和后台提供的public_key.pem(公钥)加密 #pragma mark -  RequestArgs 做加密 -(NSDictionary*)dataEntray {     NSString *jsonString = [JsonDealUtil toJsonW
加密模式/填充模式
qq_45679015的博客
09-03 786
加密模式 ECB[Electronic codebook, 电子密码本] 需要加密的消息按照块密码的块大小被分为数个块,并对每个块进行独立加密 优点:可以并行处理数据 缺点:安全性差,同样的原文生成同样的密文, 不能很好的保护数据 CBC[Cipher-block chaining, 密码块链接] 每个明文块先与前一个密文块进行异或后,再进行key加密。在这种方法中,每个密文块都依赖于它前面的所有明文块. 优点:同样的原文生成密文不一样,安全性较强 缺点:执行速度慢,串行处理数据 填充模式 当需
加密模式CBC、ECB、CTR、OCF和CFB
天行健,君子以自强不息;地势坤,君子以厚德载物。
09-29 1026
阅读文本大概需要3分钟。 在开发中如果有接触到加密,就一定遇到过MD5、DES、Triple DES、AES、RSA等加密方式(这些都叫加密算法);在深入了解...
加密安全_常见的分组密码 ECB、CBC、CFB、OFB模式介绍
最新发布
小工匠
07-07 2749
介绍分组密码基本概念。讲解ECB模式的工作原理、优缺点及应用场景。详细介绍CBC模式的工作原理、优缺点及应用场景。说明CFB模式的工作原理、优缺点及应用场景。解释OFB模式的工作原理、优缺点及应用场景。总结并给出模式选择的建议。模式是分组密码的迭代算法比如我们常使用的 DES 算法中的 ECB 模式。ECB 模式就是将明文分割成多个分组并逐个加密的方法。ECB 算法计算量小,加解密速度快,但现在已经证实 ECB 是不可靠的模式了。所以正式场合中不要使用 ECB 模式
JAVA上加密算法的例子(1基础知识)
guohui_fz
10-14 163
第1章基础知识 1.1. 单钥密码体制 单钥密码体制是一种传统的加密算法,是指信息的发送方和接收方共同使用同一把密钥进行加解密。 通常,使用的加密算法比较简便高效,密钥简短,加解密速度快,破译极其困难。但是加密安全性依靠密钥保管的安全性,在公开的计算机网络上安全地传送和保管密钥是一个严峻的问题,并且如果在多用户的情况下密钥的保管安全性也是一个问题。 单钥密码体制的代表是美...
加密模式
aibaqian0241的博客
10-15 160
转自http://www.blogjava.net/wayne/archive/2011/05/23/350879.html 电子密码本模式ECB: 最古老,最简单的模式,将加密的数据分成若干组,每组的大小跟加密密钥长度相同; 然后每组都用相同的密钥加密, 比如DES算法, 如果最后一个分组长度不够64位,要补齐64位; 定义: Enc(X,Y)是加密函数 ...
两种JavaScript的AES加密方式(可与Java相互加解密)
10-21
一般情况下,推荐在服务端选择加密模式和填充模式,并在客户端相应地进行配置。这样,无论是在客户端加密后再发送给服务端,还是服务端加密后传输给客户端,双方都能够正确地进行加解密操作。 在实际应用中,密钥的...
aix密码加密方式
02-28
AIX通过配置文件来管理密码加密方式的选择和设置,主要涉及到以下两个配置文件: - `/etc/security/login.cfg`: 用于指定默认的密码加密算法。 - `/etc/security/pwdalg.cfg`: 用于定义可用的密码哈希模块及其配置。...
STM32加密库_stm32加密库_STM32加密_
10-03
文档通常会详细介绍如何初始化库、设置密钥、选择加密模式、处理数据以及如何处理可能的错误。通过遵循文档的指导,开发人员可以将STM32加密库集成到他们的项目中,确保数据在STM32平台上得到妥善保护。 总之,STM...
常见加密算法方式(对称加密和非对称加密)
03-26
在实际操作中,经常采用混合加密模式:利用非对称加密算法交换对称加密算法的密钥,再利用对称加密算法加密实际数据,从而结合两种加密算法的优点。 总之,加密算法是信息安全领域的基石,合理选择和使用加密算法...
国密SM4的5种加密模式(ECB CBC CFB OFB CTR XTS)源码及其参考文档.rar
11-13
包含内容:SM4国密加密算法C语言实现 包括 Spec,C代码,测试用例和分组密码有五种工作体制: 1.电码本模式(Electronic Codebook Book (ECB)); 2.密码分组链接模式(Cipher Block Chaining (CBC)); 3.计算器模式(Counter (CTR)); 4.密码反馈模式(Cipher FeedBack (CFB)); 5.输出反馈模式(Output FeedBack (OFB))
浅谈常见的七种加密算法及实现
矢的飞跃的专栏
11-16 1040
原文链接 https://juejin.im/post/5b48b0d7e51d4519962ea383 前言 数字签名、信息加密 是前后端开发都经常需要使用到的技术,应用场景包括了用户登入、交易、信息通讯、oauth 等等,不同的应用场景也会需要使用到不同的签名加密算法,或者需要搭配不一样的 签名加密算法 来达到业务目标。这里简单的给大家介绍几种常见的签名加密算法和一些典型场景下的应用。 正文 ...
加密模式介绍(ECB、CBC、PCBC、CFB、OFB、CTR)
热门推荐
weixin_42272869的博客
04-19 2万+
加密模式介绍(ECB、CBC、PCBC、CFB、OFB、CTR) 加密与解密的加密模式有很多种,在玩Cipher的时候,其中创建Cipher对象的时候需要指定加密模式,去学习了一下各种加密模式,在这里整理记录一下 在加密的类型中,一般分为 对称加密、非对称加密、散列算法。针对 对称加密,一般又有 **分组加密 **和 序列密码 分组加密(或 块加密):以 块 为单位进行一次加密,将明文按一定的位长分组成块,明文块加密后得到密文组。解密雷同,密文组解密还原成明文组。常见的有 DES,AES,3DES等。 序
加密算法及加密模式
weixin_44816919的博客
07-30 1047
原文地址:http://www.cnblogs.com/happyhippy/archive/2006/12/23/601353.html 一. AES对称加密:                      &n...
几种加密模式
weixin_34043301的博客
04-18 158
2019独角兽企业重金招聘Python工程师标准>>> ...
加密模式全解析
weixin_33810302的博客
06-19 130
2019独角兽企业重金招聘Python工程师标准>>> ...
AES加密模式总结
Dokin
04-16 1万+
目录 1. ECB模式(Electronic Code Book Mode) 2. CBC模式(Cipher Block Chaining Mode) 3. CFB模式(Cipher Feedback Mode) 4. OFB模式(Output Feedback Mode) 5. CTR模式(Counter Mode) 6. PCBC模式(Propagating Cipher Block Chaining Mode) AES,即Advanced Encryption Standard,高级加密
AES 五种加密模式及原理
ken2232的博客
07-28 1016
AES五种加密模式(CBC、ECB、CTR、OCF、CFB)
用户可以动态地选择加密方式。假设用DataOperation 充当环境类角色,要求绘制相应的类图并写出环境类角色的代码。
04-12
为实现动态选择加密方式,可以使用策略模式。具体实现如下: 首先定义一个加密策略接口: ``` public interface EncryptionStrategy { String encrypt(String data); } ``` 然后定义多个具体的加密策略实现: ```...
写文章

热门文章

  • 安全视角下的CAN协议分析 9641
  • 关于证书的几个小问题 9525
  • 遥控车钥匙算法之KeeLoq 9440
  • ECU存储安全之深入理解Flash 8155
  • 零成本入门车联网安全研究 6896

分类专栏

  • 系统安全 47篇
  • 车联网安全 39篇
  • SELinux若干问题 1篇
  • 密码学应用 4篇
  • 安全启动 2篇

最新评论

  • 安全视角下的CAN协议分析

    普通网友: 佬,请问针对这些攻击有什么解决方法吗?

  • 零成本入门车联网安全研究(二)

    lzhzhzhzh: 博主您好 请问还有后续更新吗 想看您的文章

  • 零成本入门车联网安全研究(二)

    不生产代码,只是代码搬运工: 想试着学习一下,但是修改应该是差了一个parse_fake_msg没有贴上吧

  • arm64 kaslr 开启配置就能用?

    车联网安全杂货铺: 需要实现一个TA生成随机数

  • arm64 kaslr 开启配置就能用?

    淡定的小Y: 为了开启KASLR,后续怎么操作的?

大家在看

  • 布草洗涤必备4张表-———未来之窗行业应用跨平台架构
  • 第二章 网页制作的排版方法 550
  • 许少辉加工中心《乡村振兴战略下传统村落文化旅游设计》南门方向辉少许
  • 深度学习:神经网络--手写数字识别 915
  • 学习STM32的定时器和中断 595

最新文章

  • Linux内核实现AES加密
  • Linux内核密钥环
  • ARM SMMU简介
2023年62篇
2022年7篇
2021年15篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

车联网安全杂货铺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家卡通玻璃钢雕塑摆件哪里有洛阳镜面玻璃钢卡通雕塑公司下城区玻璃钢雕塑企业市政玻璃钢雕塑价格如何计算玻璃钢罗马柱造型雕塑哪家有安徽公园玻璃钢雕塑制作酒瓶玻璃钢卡通雕塑价格朝阳区商场美陈泥塑玻璃钢雕塑制作重庆城市几何玻璃钢雕塑商场楼体美陈广告东莞玻璃钢卡通公仔雕塑厂家成都雕塑用玻璃钢浙江商场主题创意商业美陈制作北京玻璃钢雕塑报价武威人物玻璃钢雕塑安装商场创意商业美陈作品武威抽象人物玻璃钢雕塑价格兰州景区玻璃钢雕塑定做时尚的玻璃钢花盆玻璃钢新年虎雕塑上海玻璃钢雕塑生产永康玻璃钢雕塑定制商场花街造型美陈商场美陈垃圾分类红色玻璃钢雕塑商家浙江商业商场美陈市场报价金华玻璃钢家具雕塑邵阳玻璃钢雕塑厂家池州大型玻璃钢雕塑制作香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化