如何选择AES加密模式(CBC ECB CTR OCB CFB)?


478

在哪种情况下首选哪个?

我希望看到各种模式的评估标准的清单,也许还要讨论每个标准的适用性。

例如,我认为准则之一是用于加密和解密的“代码大小”,这对于诸如802.11网络适配器之类的微代码嵌入式系统很重要。如果实现CBC所需的代码比CTR所需的代码小得多(我不知道这是真的,这只是一个例子),那么我可以理解为什么使用较小代码的模式是首选。但是,如果我编写的是在服务器上运行的应用程序,并且我所使用的AES库无论如何都实现CBC和CTR,则此标准无关紧要。

明白我的意思是“评估标准列表和每个标准的适用性”吗?

这实际上与编程无关,但与算法有关。


22
“这实际上与编程无关,但与算法有关。” ∵算法可以用数学来表示。∵计算机编程可以用数学表示。∴您的问题是关于计算机编程的。
泰勒·吉利斯

40
“这实际上与编程无关,但与算法有关。” ∵算法可以用数学表示,而股市可以用数学表示,您的问题是关于股市的。/对不起,这很讽刺,但是尽管结论很显然是正确的,但论点却很明显是错误的
Shien

取决于对所订阅关系的理解。某些事物不一定只与一个或另一个概念相关。
布莱恩·格雷斯

Answers:


323
  • 如果使用同一密钥加密多个数据块,则不应使用ECB。

  • CBC,OFB和CFB相似,但是OFB / CFB更好,因为您只需要加密而不需要解密,这样可以节省代码空间。

  • 如果您想要良好的并行化(即速度),请使用CTR,而不是CBC / OFB / CFB。

  • 如果您正在编码随机可访问的数据(例如硬盘或RAM),则XTS模式是最常见的。

  • 到目前为止,OCB是最好的模式,因为它允许一次通过加密和身份验证。但是,它在美国有专利。

您真正需要知道的唯一一件事是,除非仅加密1个块,否则不使用ECB。如果要加密随机访问的数据而不是流,则应使用XTS。

  • 您每次加密时都应该始终使用唯一的IV,并且它们应该是random。如果您不能保证它们是随机的,请使用OCB,因为它只需要一个随机数,而不是IV,并且会有明显的不同。一个随机数不降的安全性,如果人们可以猜测下一个,一个IV可能会导致此问题。

65
CBC,OFB和CFB并非完全相同。
乔纳森·勒夫勒

22
CTR易于并行化,因为您可以将消息分成多个块,每个块都具有与之关联的一系列计数器值,并分别加密(或解密)每个块。相比之下,CFB依赖于前一个块的输出作为下一个的输入之一,因此它严格地顺序执行并且本质上是不可并行的。对于提到的其他模式也是如此。
乔纳森·莱夫勒

9
即使仅加密一个块,如果要使用同一密钥对一个块进行多次加密(甚至可能多次加密),也不应使用ECB。
yfeldblum

23
...回答“ CBC,OFB和CFB相同”的答案怎么没有一个下注?
Michael Mrozek'2

30
GCM与OCB(性能和其他属性)非常相似,但不受任何专利的限制,因此它是最佳选择。唯一的缺点是实现非常复杂,但是如果您使用库,则不必担心。
ntoskrnl

407

如果您无法解决自己的加密问题,请多加考虑

这件事的丑陋事实是,如果您提出这个问题,您可能将无法设计和实现安全的系统。

让我说明一下我的观点:假设您正在构建Web应用程序,并且需要存储一些会话数据。您可以为每个用户分配一个会话ID,并将会话数据存储在将会话ID映射到会话数据的哈希映射中的服务器上。但是随后您必须处理服务器上的这种令人讨厌的状态,如果在某个时候您需要多个服务器,那么事情将会变得混乱。因此,您可以将会话数据存储在客户端的Cookie中。当然,您将对其进行加密,以使用户无法读取和操纵数据。那么您应该使用哪种模式?来到这里,您会读到最重要的答案(对不起,将您挑出myforwik)。第一个涵盖的内容-ECB-不适用于您,您想要加密多个块,第二个内容-CBC-听起来不错,您不需要CTR的并行性,您不需要随机访问,因此,没有XTS和专利是PITA,因此也没有OCB。使用您的加密库,您意识到您需要一些填充,因为您只能加密块大小的倍数。你选PKCS7,因为它是在一些严格的加密标准中定义的。读到某个地方,如果将CBC 与随机IV和安全的分组密码一起使用,则证明 CBC是安全的,即使您将敏感数据存储在客户端,也可以放心使用。

在您的服务确实增长到可观的规模之后的数年,IT安全专家会以负责任的方式与您联系。她告诉您可以使用padding oracle攻击来解密所有cookie ,因为如果padding被破坏,您的代码将产生一个错误页面。

这不是一种假设的情况: 直到几年前,Microsoft才在ASP.NET中存在此确切漏洞。

问题在于,密码技术存在很多陷阱,建立一个对外行来说看起来很安全但对知识渊博的攻击者来说却很难破解的系统非常容易。

如果需要加密数据该怎么办

对于实时连接,请使用TLS(请务必检查证书的主机名和颁发者链)。如果您不能使用TLS,请寻找系统必须为任务提供的最高级别的API,并确保您了解它提供的保证,以及更重要的是它不能保证的保证。对于上面的示例,像Play这样的框架提供了客户端存储功能,但是一段时间后它不会使存储的数据无效,并且,如果您更改了客户端状态,攻击者可以在不注意的情况下恢复先前的状态。

如果没有可用的高级抽象,请使用高级密码库。最著名的例子是NaCl,具有许多语言绑定的可移植实现是Sodium。使用这样的库,您不必关心加密模式等,但是与使用更高级别的抽象(例如,从未两次使用随机数)相比,您必须更加小心使用细节。

如果由于某种原因(例如,由于您需要以特定方式与现有系统进行交互)而无法使用高级密码库,则无法彻底地对自己进行教育。我建议阅读Ferguson,Kohno和Schneier撰写的《密码学工程》。请不要自欺欺人地相信您可以在没有必要背景的情况下构建安全的系统。密码学非常微妙,几乎不可能测试系统的安全性。

模式比较

仅加密:

  • 需要填充的模式:与示例中一样,填充通常很危险,因为它增加了填充oracle攻击的可能性。最简单的防御方法是在解密之前对每条消息进行身份验证。见下文。
    • ECB独立地加密每个数据块,并且相同的明文块将产生相同的密文块。在ECB Wikipedia页面上查看ECB加密的Tux图像,以了解为什么这是一个严重的问题。我不知道任何可以接受ECB的用例。
    • CBC具有IV,因此每次对消息进行加密时都需要随机性,更改消息的一部分需要在更改后重新加密所有内容,一个密文块中的传输错误会完全破坏明文并更改下一个块的解密,即解密可以并行化/不能加密,明文在一定程度上具有延展性- 这可能是一个问题
  • 流密码模式:这些模式会生成伪随机数据流,该数据可能会或可能不会依赖于明文。通常与流密码类似,将生成的伪随机流与明文进行XOR运算以生成密文。由于您可以根据需要使用任意数量的随机流,因此根本不需要填充。这种简单性的缺点是加密是完全可延展的,意味着解密者可以以喜欢的任何方式更改解密,例如明文p1,密文c1和伪随机流r,并且攻击者可以选择差异d,使得密文c2 =c1⊕d是p2 =p1⊕d,因为p2 =c2⊕r=(c1⊕d)⊕r = d⊕(c1⊕r)。同样,相同的伪随机流绝不能像两个密文c1 =p1⊕r和c2 =p2⊕r一样使用两次,攻击者可以将两个明文的xor计算为c1⊕c2=p1⊕r⊕p2⊕r= p1⊕p2。这也意味着,如果原始消息可能已被攻击者获取,则更改消息需要完全重新加密。以下所有所有的蒸汽密码模式仅需要块密码的加密操作,因此,在不同的密码环境下,这可能会节省一些(硅或机器代码)空间,具体取决于密码。
    • CTR很简单,它创建了一个独立于明文的伪随机流,通过从不同的nonce / IV进行计数获得不同的伪随机流,将它们乘以最大消息长度,从而避免重叠,使用nonces消息加密是没有消息随机性,解密和加密可并行完成,传输错误仅影响错误的位,仅此而已
    • OFB还创建了一个独立于明文的伪随机流,通过为每个消息以不同的随机数或随机IV开头来获得不同的伪随机流,加密和解密都无法并行化,就像使用CCC使用随机数消息加密是可能的,而无需对每个消息进行加密与CTR传输错误一样,随机性只会影响错误的位,仅此而已
    • CFB的伪随机流取决于明文,每条消息都需要不同的随机数或随机IV,例如CTR和OFB使用随机数消息加密是可能的,而没有每个消息的随机性,解密是可并行化的/加密不是,传输错误完全销毁以下块,但仅影响当前块中的错误位
  • 磁盘加密模式:这些模式专用于加密文件系统抽象之下的数据。出于效率方面的考虑,更改光盘上的某些数据仅要求最多重写一个光盘块(512字节或4kib)。它们超出了此答案的范围,因为它们的使用场景与其他场景截然不同。除块级光盘加密外,请勿将它们用于其他任何用途。一些成员:XEX,XTS,LRW。

认证加密:

为了防止填充oracle攻击和对密文的更改,可以在密文上计算消息认证码(MAC),并且只有在未对其进行篡改的情况下才能对其进行解密。这称为crypto-then-mac,应优先于其他任何顺序。除了极少数用例以外,真实性与机密性同样重要(后者是加密的目的)。经过身份验证的加密方案(带有关联数据(AEAD))将加密和身份验证的两部分过程组合到一个块密码模式中,该过程还会在过程中生成身份验证标签。在大多数情况下,这可以提高速度。

  • CCM是CTR模式和CBC-MAC的简单组合。每个块使用两个块密码加密非常慢。
  • OCB速度更快,但是受到专利的限制。但是,对于免费(如自由)或非军事软件,专利持有人已授予了免费许可
  • GCM是CTR模式和GHASH的非常快速但可以说是复杂的组合,GHASH是Galois字段上具有2 ^ 128个元素的MAC。英特尔为加快GHASH计算速度而推出的一条特殊指令反映了它在TLS 1.2等重要网络标准中的广泛使用。

建议:

考虑到身份验证的重要性,我建议在大多数情况下(磁盘加密除外)使用以下两种块密码模式:如果通过非对称签名对数据进行身份验证,请使用CBC,否则请使用GCM。


211
“如果您需要问这个问题,您可能对加密技术的了解还不足以实现一个安全的系统。” -是的,但是您确实意识到,提问是人们的学习方式?所以也许放松一下。
罗伯特·麦克莱恩

69
@RobertMacLean是的,但是与IT中的许多其他领域相反,您不会通过尝试和错误获得正确的安全性。借助Web设计,应用程序可伸缩性等,您可以主动检查您的要求,而测试安全性的范围则从难到不可能。不幸的是,这一课很少讲授。大多数资源告诉您加密技术是如何工作的,而不是告诉您加密技术在实践中失败的无数方式,甚至没有意识到。唯一的出路是对该主题有很多了解。这就是帖子的士气:
英仙座

8
要么投入足够的时间来彻底了解加密技术,要么尽可能避免使用加密技术,并使用强大的抽象技术。在学习密码学如何打破第一段的主题中,比模式的描述更具主题意义。
英仙座

32
负一:起始标题错误;它应该说:“如果您问的是这个问题,您的方向是正确的,那就继续努力,您就会脱颖而出!”
亨里克

11
@FerminSilva:是的,但论点的另一方面是,使用真实且经过测试的解决方案通常比复制粘贴密码更容易。例如,当您要做的只是通过智能手机应用程序与服务器对话时,用一个“让我们加密TLS”证书设置Apache反向代理并https://your.server在应用程序中随处写入,要比发明一些密钥交换协议和让双方的密码学库顺利合作。
英仙座

36

一个正式的分析已经由Phil Rogaway在2011年已经完成,在这里。1.6节提供了一个摘要,我在此处进行了总结,并以粗体显示了自己的重点(如果您不耐烦,则建议使用CTR模式,但建议您阅读以下有关消息完整性与加密的段落)。

请注意,其中大多数要求IV是随机的,这意味着不可预测,因此应使用加密安全性来生成。但是,有些仅要求“立即”,即不要求该属性,而仅要求不重复使用。因此,依赖于随机数的设计比不依赖随机数的设计更不容易出错(并且相信我,我已经看到很多情况下都没有通过适当的IV选择来实现CBC)。因此,您会看到Rogaway说“当IV是随机数时无法实现机密性”之类的东西时,我已经加了粗体,这意味着,如果您选择IV加密安全(无法预测),那么就没问题了。但是,如果不这样做,那么您将失去良好的安全性。 切勿将IV重新用于任何这些模式。

同样,了解消息完整性和加密之间的区别也很重要。加密隐藏数据,但是攻击者可能能够修改加密的数据,并且如果您不检查消息的完整性,则结果可能会被您的软件接受。尽管开发人员会说“但解密后修改后的数据将作为垃圾返回”,但是优秀的安全工程师会发现垃圾在软件中引起不良行为的可能性,然后他将分析变成真正的攻击。我已经看到了许多使用加密的情况,但是真正需要的是消息完整性,而不是加密。了解您的需求。

我应该说,尽管GCM同时具有加密和消息完整性,但它是一个非常脆弱的设计:如果重新使用IV,您将被搞砸了-攻击者可以恢复您的密钥。其他设计不那么脆弱,因此我个人恐怕会根据我在实践中看到的不良加密代码的数量来推荐GCM。

如果同时需要消息完整性和加密,则可以结合使用两种算法:通常我们看到带有HMAC的CBC,但没有理由将自己束缚于CBC。重要的是要先加密,然后再将加密的内容MAC,而不是相反。此外,IV必须是MAC计算的一部分。

我不了解IP问题。

现在来看看Rogaway教授的好东西:

分组密码模式,加密但不保证消息完整性

ECB:分组密码,该模式通过分别加密每个n位片段来加密n位的倍数的消息。安全性很弱,该方法会在块的位置和时间上泄漏块的相等性。具有相当大的传统价值,并具有作为其他方案的基础的价值,但是该模式本身并不能实现任何普遍希望的安全目标,必须谨慎使用;欧洲央行不应被视为“通用”保密模式

CBC:一种基于IV的加密方案,该模式作为概率加密方案是安全的,假设使用随机IV,则与随机位无法区分。如果IV只是一个随机数,或者它不是该计划使用的相同密钥下加密的随机数(如标准错误地建议这样做),则无法实现机密性。密文具有很高的延展性。没有选择的密文攻击(CCA)安全性。如果存在针对许多填充方法的正确填充预言,则将失去机密性。固有的串行加密效率低下。该模式仅用于隐私的安全属性被广泛使用,导致频繁滥用。可用作CBC-MAC算法的构件。与CTR模式相比,我没有发现任何重要的优势。

CFB:一种基于IV的加密方案,该模式作为概率加密方案是安全的,假定为随机IV,则与随机位无法区分。如果IV是可预测的,则不能实现机密性;或者,如果该IV是由该计划所使用的相同密钥加密的随机数来实现的,则该标准将不正确地建议这样做。密文具有延展性。没有CCA安全性。固有的串行加密效率低下。方案取决于参数s,1≤s≤n,通常为s = 1或s =8。对于需要一个块密码调用仅处理s位的效率较低。该模式实现了一个有趣的“自同步”属性。在密文中插入或删除任意数量的s位字符只会暂时破坏正确的解密。

OFB:基于IV的加密方案,该模式作为概率加密方案是安全的,假设使用随机IV,则与随机位无法区分。如果IV是随机数,则无法实现机密性,尽管IV的固定序列(例如计数器)确实可以正常工作。密文具有很高的延展性。没有CCA安全性。加密和解密由于固有的串行性而效率低下。本机加密任何位长的字符串(无需填充)。与CTR模式相比,我没有发现任何重要的优势。

CTR:一种基于IV的加密方案,该模式与随机数(假定为随机数IV)实现了不可区分性。作为基于安全随机数的方案,该模式还可以用作具有随机IV的概率加密方案。如果随机数被重新用于加密或解密,则隐私完全失败。与其他机密性模式相比,该模式的可并行性通常使它在某些设置中更快一些。身份验证加密方案的重要组成部分。总体而言,通常是实现仅隐私加密的最好和最现代的方式。

XTS:一种基于IV的加密方案,该模式通过对每个n位块应用可调整的分组密码(作为强PRP安全)来工作。对于长度不能被n整除的消息,将特别对待最后两个块。该模式唯一允许的用途是对块结构存储设备上的数据进行加密。底层PRP的宽度较窄,对最终嵌段的处理不善是个问题。比(宽块)PRP安全的分组密码更有效,但较不理想。

MAC(消息完整性,但不加密)

ALG1–6:MAC的集合,所有这些都基于CBC-MAC。太多的计划。某些作为VIL PRF证明是安全的,有些作为FIL PRF证明,有些则没有可证明的安全性。一些计划承认破坏性攻击。有些模式已过时。对于具有分隔符的模式,分隔符处理不足。不应整体采用,但可以有选择地选择“最佳”方案。最好不采用这些模式,而采用CMAC。一些ISO 9797-1 MAC已被广泛标准化和使用,尤其是在银行业中。该标准的修订版(ISO / IEC FDIS 9797-1:2010)即将发布[93]。

CMAC:基于CBC-MAC的MAC,该模式作为(VIL)PRF被证明是安全的(直至生日)(假设基础分组密码是一个好的PRP)。对于基于CBCMAC的方案,基本上是最小的开销。本质上,串行性质在某些应用程序域中是一个问题,并且与64位分组密码一起使用将需要偶尔重新输入密钥。比ISO 9797-1 MACs清洁。

HMAC:基于加密哈希函数而不是分组密码的MAC(尽管大多数加密哈希函数本身都是基于分组密码的)。该机制享有可证明的安全性界限,尽管并非来自首选假设。文献中的多个密切相关的变体使人们对已知的事物的理解变得复杂。从未提出过破坏性攻击的建议。广泛标准化和使用。

GMAC:基于随机数的MAC,是GCM的特例。继承了GCM的许多优缺点。但是,对于MAC而言,非随机数需求是不必要的,并且在这里它几乎没有收益。如果标签被截断到≤64位并且解密的范围未受到监控和缩减,则会受到实际攻击。随机数重用完全失败。如果采用GCM,则使用是隐式的。不建议用于单独的标准化。

经过身份验证的加密(加密和消息完整性)

CCM:结合了CTR模式加密和原始CBC-MAC的基于现时的AEAD方案。本质上是串行的,在某些情况下限制了速度。假设基础分组密码是一个好的PRP,则可以很好地保证安全且具有良好的边界。笨拙的施工证明可以完成这项工作。比GCM易于实现。可用作基于随机数的MAC。广泛标准化和使用。

GCM:一种基于随机数的AEAD方案,结合了CTR模式加密和基于GF(2128)的通用哈希函数。在某些实施环境中具有良好的效率特征。假设标签截断最少,可证明安全性良好。存在大量标签截断的攻击和可证明的安全性差。可用作基于随机数的MAC,然后称为GMAC。允许使用非96位随机数的可疑选择。建议将随机数限制为96位,标记至少为96位。广泛标准化和使用。


1
GCM模式:鉴于大多数SO都几乎没有加密知识,不会正确使用任何模式,通常不使用身份验证,并且经常使用ECB模式GCM模式可能是这里的最佳选择。不幸的是,目前缺少平台实现,在某些情况下(iOS),没有供应商支持,在许多情况下,不良的审查缺乏硬件支持,这是有问题的。否则,它对于未加密的加密是有好处的,因为它内置了身份验证,并且似乎是未来的加密方法。
zaph

3
CTR模式:我不赞成CTR模式是最佳选择,因为实际上有很多失败,主要是IV重用。甚至微软也至少将其搞砸了两次。
zaph

1
CBC模式:可能是SO,ECB上最常用和最常用的模式(不应使用),但除外。主要的使用缺陷是非随机IV,但我们发现CSPRNG的用法更加正确。填充Oracle是一个问题,只需忽略而不返回填充错误即可轻松修复。一些实现(例如Common Crypto)在API级别上并未以避免它们的实质上成功的方式报告填充错误。
zaph

1
IMO CTR更糟,因为它是一个简单的异或运算,因为CBC与其他几种模式一样在一个块之间传播。看起来似乎很容易,但是大众市场代码存在重大故障。
zaph

1
通过阅读链接的论文,似乎只能获取身份验证密钥,而不能从现时重用获得加密密钥。在此看来,这似乎并不是获得加密密钥的主张。虽然获取身份验证密钥允许篡改消息,但不允许恢复消息。请指出我可能错了。
扎夫

30
  1. 除了欧洲央行以外。
  2. 如果使用CTR,则必须为每条消息使用不同的IV,否则,攻击者最终将能够获取两个密文并获得合并的未加密明文。原因是CTR模式本质上将分组密码转换为流密码,并且流密码的第一个规则是永远不要两次使用相同的Key + IV。
  3. 实施这些模式的难度实际上并没有多大差异。某些模式仅要求块密码在加密方向上运行。但是,包括AES在内的大多数分组密码都不需要花费更多的代码来实现解密。
  4. 对于所有密码模式,如果您的消息的前几个字节可能是相同的,并且您不想让攻击者知道这一点,则对每个消息使用不同的IV至关重要。

为了支持您的Point 1(该顺便说一句为+1):codinghorror.com/blog/archives/001267.html
Michael Stum

1
您不应以随机数开头的点击率,因为这有可能会与上一封邮件的一部分发生冲突,但是增加的机会很小。而是单调递增它(这可能意味着记住您在持久性存储中的位置),并在(如果)计数器用完时重新键入密钥。
caf

@Theran-第2点-每个邮件的随机数不同?不,我认为这是不正确的。我的印象是始终将计数器从零开始就很好。@caf,我认为当Theran说“消息”时,他的意思不是“阻止”。当然,对于通过密码运行的特定消息的每个块,计数器都会递增。Theran似乎在说,每个消息必须以不同的计数器初始值开头。我认为这是不正确的。
Cheeso

1
回复:第3点-我读过一些论文,例如CTR模式的实现较小,因为解密与加密是相同的变换。因此一半的代码。但是正如我所说,与服务器级计算机无关。
Cheeso

是的,我误会了。对于CTR模式,应该更改IV / nonce,但是在加密之前将其与计数器结合,因此我倾向于将其视为计数器的随机起点。至于只需要在加密方向节省空间中使用密码,对于许多密码,您只需要反转子密钥即可解密。AES对于解密来说有点笨重,但是您还是不能在具有128字节RAM的uC上实现它。子项需要更多的RAM!
Theran

13

您是否已从Wikipedia上的相关信息开始阅读- 分组密码操作模式?然后,按照Wikipedia上的参考链接到达NIST:分组密码操作模式建议


6
该答案不符合Stackoverflow的质量标准:请假定您的所有外部链接都已失效,并汇总(如果不是完全复制的话)相关信息,最好以最佳方式回答原始问题。
mirabilos 2014年

5
@mirabilos即将过去5年后,提到当时还不存在的规范和标准,真的吗?我特别喜欢谈论死链接,但实际上这两个站点仍然都非常活跃,并且考虑到该站点可能还会再保留5年。那好吧。
KTC

3
@mirabilos您可能对了,但是您对5年前似乎已经做出的,规范不同的答案的投诉并不适用。您应该刚刚承认自己的错误。即使不是这种情况,而您只是暗示应该对其进行更新或更改,但这仍然不是必须的。答案足够了。
konsolebox 2015年

@KTC,除非政府关闭并且站点处于脱机状态。您的答案本来可以是有用的信息,但是目前完全不见了。因此,这个问题及其答案的读者仍然想知道2014年更新的内容(由于答案不完整)和当前状态(由于NIST网站的政府关闭)。我很想补充缺少的信息,但是……
G DeMasters

11

您可能要根据广泛使用的内容进行选择。我有同样的问题,这是我有限的研究结果。

硬件限制

STM32L (low energy ARM cores) from ST Micro support ECB, CBC,CTR GCM
CC2541 (Bluetooth Low Energy) from TI supports ECB, CBC, CFB, OFB, CTR, and CBC-MAC

开源限制

Original rijndael-api source  - ECB, CBC, CFB1
OpenSSL - command line CBC, CFB, CFB1, CFB8, ECB, OFB
OpenSSL - C/C++ API    CBC, CFB, CFB1, CFB8, ECB, OFB and CTR
EFAES lib [1] - ECB, CBC, PCBC, OFB, CFB, CRT ([sic] CTR mispelled)  
OpenAES [2] - ECB, CBC 

[1] http://www.codeproject.com/Articles/57478/A-Fast-and-Easy-to-Use-AES-Library

[2] https://openaes.googlecode.com/files/OpenAES-0.8.0.zip


1
ST Micro:EBC应该是欧洲央行;仅供参考:例如STM32L4A6支持128位和256位AES,以及ECB,CBC,CTR,GCM以及Galois消息认证码(GMAC)或密码消息认证码模式,硬件也支持CMAC链接算法。
Tom Kuschel

-3

我知道一个方面:尽管CBC通过更改每个块的IV可以提供更好的安全性,但它不适用于随机访问的加密内容(如加密硬盘)。

因此,对顺序流使用CBC(和其他顺序模式),对随机访问使用ECB。


啊,对,当然。在加密之前,CBC将先前的密文块与明文块进行异或。第一块使用IV。因此,要解密任何块,您必须成功解密所有先前的块。好的,这是一个很好的见解。
Cheeso

6
不,您只需要访问先前的密文,而无需解密任何先前的块。
caf

嗯,这意味着CBC可以随机访问,不是吗?
Cheeso

4
@Cheeso:CBC适用于随机读取访问,但不适用于随机写入访问。在那里使用点击率。
圣保罗Ebermann

3
@PaŭloEbermann对于随机访问而言,CTR不是一个好主意,因为如果攻击者观察到两个版本的密文,它将允许严重攻击。请改用XTS或可调整的分组密码。
CodesInChaos
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.