他们是优选的,在哪些情况?

我想看看清单的评估crtieria的各种模式,以及可能讨论的适用性的各项标准。

例如, 我想的标准之一是"大小的代码"进行加密和解密,这是很重要的微型代码嵌入式系统,如802.11网络适配器。如果需要实施CBC小得多,所需要的点击率(我不知道这是真的,这只是一个例子),然后我可以理解为什么模式,与较小的代码将是首选。但是,如果我写的一个运行的应用服务器上,并AES图书馆我使用的是实现两CBC和CTR无论如何,那么这个标准是毫不相关的。

看什么我的意思是通过"列表中的评价标准和适用的每个标准"??

这不是真的编程相关,但它是算法有关。

有帮助吗?

解决方案

  • 欧洲央行不应被使用,如果加多个区块的数据用相同的密钥。

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

  • 中心使用的如果你想的良好行化(即。速度),而不是CBC/OFB/CFB.

  • 境模式是最为常见,如果你是随机编码可访问的数据(如一个硬盘或RAM)。

  • OCB是迄今为止最好的模式,因为它允许加密和认证在一个单一的通过。但有专利,它在美国。

唯一的事情你真的要知道的是,欧洲不要使用的除非你是只有加密1块。境应用如果你加密的随机存取的数据,而不是一个流。

  • 你总是应该使用独一无二的 IV's每次你进行加密,以及它们应该 随机的.如果你不能保证他们 随机的, 使用OCB因为它仅需要一个 现时, 不一 IV, 和有一个明显的差异。一个 现时 不安全如果人们可以猜测下一个, IV 可能会导致这个问题。

其他提示

请考虑漫长而艰难的,如果你不能得到围绕执行自己的密码

丑陋的事实是,如果你是问这个问题将可能不能够设计和执行一个安全的系统。

让我说明我的观点:想象一下,你正在建立一个网络应用程序和需要储存一些会议数据。你可能分配每个用户一届会议ID和储存会议服务器上的数据在哈希映session ID届会议数据。但后来你来处理这个讨厌的国家在服务器上,如果在某一点需要多个服务器的东西将会导致混乱。因此,不是你有这个想法来存储的会议的数据在一个饼干在客户端。你将加密的课程使用户无法阅读和处理数据。所以什么方式应使用?来这里你读的顶部回答(对不起把你myforwik).第一个复盖欧洲-是不是你,你想要加多个区块,下一个-CBC-听起来不错,你不需要的并行的CTR,你不需要随机访问,因此不境和专利是一个饼,所以没有OCB.用你的加密库你意识到你需要一些填充,因为你只能加倍块的大小。你选择 PKCS7 因为它的定义是在一些严重的密码标准。后读书的地方,CBC是 证明安全 如果使用随机四和安全分组密码,你休息,在缓解即使你们存储敏感数据对客户的侧面。

年后你的服务确实已经发展到相当大,它安全专家联系在一个负责任的披露。她告诉你她可以解密的所有使用你的饼干 填充oracle攻击, 因为你的代码产生错误页,如果填充的是以某种方式打破。

这不是一个假设情况: Microsoft不得不这个确切的缺陷ASP.NET 直到几年前.

问题是,有一个很大的缺陷就加密这是非常容易建立一个系统,看起来安全的门外汉,但是琐碎的,打破对于知识攻击者。

怎么做,如果你需要的数据加密

现场连接,使用TLS(一定要检查的主机名的证书和签发人链)。如果你不能使用TLS,寻找最高级别API系统提供的用于你的任务和能确定你明白的保证,它提供以及更重要的是,它并不保证。例如上述一个框架喜欢 提供 客户的侧储存设施, 它不会存储的数据后一些时间,但是,如果你改变的客户端状态,攻击者可以恢复以前的状态,而不你没有注意到。

如果没有高级别的抽象可使用一个高级别的密码图书馆。一个突出的例子是 氯化钠 和一个便携式执行多语言绑定是 .使用这样一个图书馆,你没有关心加密模式等等。但你必须要更加小心的使用情况的详细信息,比较高级的抽象,就像从来没有使用数的两倍。

如果由于某种原因不能使用一个高级别的加密库,例如因为需要与现有的系统在一个特定的方式,也没有周围的方式教育自己。我推荐读 密码术工程,由弗格森,Kaudel和Schneier.请不要欺骗自己相信你可以建立一个安全的系统,没有必要的背景。密码是极为微妙和这几乎是不可能的测试安全系统。

比较模式

加密,只有:

  • 模式,需要填充:如在例如填料一般可以是危险的,因为它开辟了可能性填充oracle的攻击。最简单的防卫是为了验证身份的每一消息之前解密。见下文。
    • 欧洲央行 加密每个区块的数据,独立地以及同明文块将导致在同一个密文块。看看欧洲央行加密的晚礼服上的图像 欧洲央行维基百科页 来看看为什么这是一个严重的问题。我不知道有任何使用的情况下,欧洲央行将是可以接受的。
    • CBC 有一个四因而需要随机性的,每次一个加密的消息是,改变消息的一部分,需要重新加密的一切改变之后,传输错误。在一个文块完全摧毁的明文以及更改的解密的下一个方框,可以解密并行/加密不可能,明文是可延展到一定程度的 这可能是一个问题.
  • 流密码模式:这些模式产生伪随机流的数据可能或不可能取决于明文。同样地流密码通常,产生的伪随机的流异或明文产生的密文。你可以使用尽可能多的位的随意流作为你喜欢你不需要填补的。缺点是这是简单,是完全加密的 延展性的, ,这意味着解密可以改变通过一个攻击者以任何方式,他喜欢作为一个明文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,攻击者可以计算的异或这两个plaintexts为c1⊕c2=p1⊕r⊕p2⊕r=p1⊕p2。这也意味着改变消息的要求完全重新加密,如果原来的消息可能已经获得通过攻击者。以下所有的蒸汽密的模式只需要密操作的框密,所以根据密码这可能会节省一些(硅或机器码)空间,在极为狭窄的环境。
    • CTR 很简单,它创建了一个伪随机流,是独立的纯文本,不同的伪随机的流是通过获得计数从不同的现时/IVs其乘以一个最大的信息的长度,以便重叠是防止使用现时的信息加密是可能的,而不是每消息随机性,解密和加密,是完成并行,发送错误仅影响的错误的位并没有什么更多
    • OFB 还创建了一个伪随机的流独立的纯文本,不同的伪随机的流获得通过启动一个不同现时或随机IV为每一个消息,既不加密,也没有解密并行,作为与中心使用的现时信息加密是可能的,而不是每消息随机性,因为与中心传输错误的唯一影响是错误的位并没有什么更多
    • CFB's pseudo random流取决于明文的,不同的现时或随机四是需要每一个消息,如与中心和OFB使用现时的信息加密是可能的,而不是每消息随机性,解密并行/加密不,传输错误完全摧毁以下方框,但只是效应的错误的位在目前的块
  • 磁盘的加密模式:这些模式是专门的加密数据如下文件系统的抽象概念。由于效率原因改变的一些光盘上的数据仅仅必须要求改写的至多一个光盘块(512字节或4kib).它们的范围的这个答案,因为他们有很大的不同使用情况比其他。 不要使用他们的任何东西除了块级盘密.一些成员:XEX,境索具世界.

认证的加密:

防止padding oracle攻击,并改变文,一个可计算一个 信息验证码 (MAC)在密和仅进行解密,如果它没有被篡改。这就是所谓密-然后-mac 应当优先于任何其他了.除了非常少的使用情况的真实性是重要的,因为保密(后者的目标是加密的).经认证的加密方案(与相关的数据(AEAD))结合起来的两个部分组成的过程的加密和认证进入一个分组密码模式,也产生一种认证标记的过程。在大多数情况下,这种结果的速度改善。

  • CCM 是一个简单的组合中心模式和一个CBC-MAC。使用两个分组密码加密的每块这是非常缓慢。
  • OCB 快但是,担保通过专利。为自由(如自由)或者非军事软件的专利持有人 已经给予的免费许可证, 虽然。
  • GCM 是一个非常快,但可以说是复杂的组合中心模式和GHASH、MAC在伽罗瓦域2^128要素。其广泛使用重要的网络标准,如TLS1.2反映了一个 特别指令 英特尔已经引入的速度计算的GHASH.

建议:

考虑到重要性的认证,我会推荐以下两个分组密码模式对大多数使用情况(除了加密磁盘的目的):如果数据进行身份验证一个不对称的签字使用CBC,否则使用GCM.

有一个正式的分析已经由Phil Rogaway在2011年已经完成,这里。 1.6节给出了我抄录在这里,加入粗体我自己的重点摘要(如果你是急性子,那么他的建议是使用CTR模式,但是我建议你阅读消息的完整性与下面加密我的段落)。

请注意,大多数的这些要求的IV是随机的,这意味着不可预测的,因此应具有加密安全产生。然而,一些只需要一个“随机数”,不要求性能,而是只要求它不能重新使用。因此,依赖于现时的设计更小的误差比那些不容易设计(相信我,我见过很多情况下,CBC是不是适当IV选择实现)。所以你会看到,我已添加大胆当Rogaway说像“没有实现保密时IV是一个随机数”,这意味着如果你选择你的IV加密的安全(不可预测的),那就没问题。但是,如果你不这样做,那么你就失去了良好的安全性能。的决不重复使用的IV 作为任何这些模式的。

此外,理解消息的完整性和加密之间的差异是很重要的。加密隐藏数据,但攻击者可能能够修改加密的数据,其结果有可能通过你的软件被接受,如果你不检查消息的完整性。虽然开发商会说“但修改后的数据会回来的解密后的垃圾”,一个良好的安全工程师将发现的概率垃圾引起软件不良行为,那么他就会把这种分析成为一个真正的攻击。我见过很多情况下,使用了加密,但真的需要消息的完整性比加密的更多。了解你需要什么。

我应该说,虽然GCM具有加密和消息完整性,这是一个非常脆弱的设计:如果重新使用IV,你拧 - 攻击者可以恢复密钥。其他的设计是那么脆弱,所以我个人恐怕基于我在实践中所看到的加密代码差量推荐GCM。

如果您需要同时,消息完整性和加密,你可以结合两种算法:通常我们看到CBC与HMAC,但没有理由给自己绑在CBC。要知道,重要的是加密,然后再在MAC加密内容,而不是周围的其他方式。另外,IV需要是MAC计算的一部分。

我不知道的知识产权问题。

现在从Rogaway教授的好东西:

块密码方式,加密,但不消息完整性

<强> ECB :一个块密码,模式通过单独加密每一个n位片
加密是n比特的多个消息。的的安全性能是弱下,该方法泄漏跨两个块位置和时间块的平等。可观的遗产价值和价值的构建块的其他方案,但该模式不会在自己的权利取得任何通常需要的安全目标,必须具有相当的谨慎使用;的 ECB不应该被看作是“通用的”机密性模式

<强> CBC :一个基于IV-加密方案中,模式是安全的,因为概率加密方案,实现了从随机位不可分辨,假设随机IV。如果IV仅仅是一个随机数下,也不如果它是一个随机数由所述方案中使用的相同的密钥加密下,作为标准错误地暗示做没有实现的保密。密文是可塑性极强。没有选择密文攻击(CCA)的安全性。机密性在存在丧失有正确的补甲骨文对很多的填充方法。加密被固有的串行低效。广泛应用,模式的唯一的隐私安全特性导致频繁的误用。可以用作一个构建块CBC-MAC的算法。的我可以识别在CTR模式下没有重要的优点。

<强> CFB :一个基于IV-加密方案中,模式是安全的,因为概率加密方案,实现了从随机位不可分辨,假设随机IV。如果IV是可预测的未实现的保密下,也不如果它是由随机数由通过该方案中使用的相同的密钥加密下,作为标准错误地暗示做。密文是可塑性。无CCA的安全性。加密被固有的串行低效。方案取决于参数s,1≤小号≤N,通常S = 1或S = 8。低效于需要一个块密码呼叫仅处理s比特。该模式实现了一个有趣的“自动同步”属性;插入或任何数量的s位字符的缺失成密文唯一暂时破坏正确的解密。

<强> OFB :一个基于IV-加密方案中,模式是安全的,因为概率加密方案,实现了从随机位不可分辨,假设随机IV。如果IV是随机数,虽然IV型的固定序列(例如,计数器)不工作细没有实现机密性。密文是可塑性极强。没有CCA安全。加密和解密被固有的串行低效。本身加密任何位长(不需要填充)的字符串。我可以识别在CTR模式下没有重要的优点。

<强> CTR :一个基于IV-加密方案中,模式从假定随机数IV随机位达到不可分辨。作为一个安全的,基于随机数的方案中,模式也可被用作一个概率加密方案,使用随机IV。隐私完全失效,如果一个随机数被加密或解密重用。该模式的并行性往往使得它更快,在某些设置得特别快,比其他保密方式。一个重要组成部分的认证加密方案。 总体而言,通常是最好的,最现代化的方式来实现只隐私加密。

<强> XTS :一个基于IV-加密方案,该模式下工作通过施加tweakable块密码(安全的,因为具有强PRP),以每n比特块。对于具有长度不被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集合MAC的清洁器。

<强> HMAC :根据密码散列函数而不是块密码(虽然大部分加密散列函数本身是基于块密码)甲MAC。机构享有很强的可证明安全边界,虽然不是从首选的假设。在文献中多密切相关的变异足够复杂获得对什么是已知的理解。没有受到伤害曾经被提出。广泛标准化和使用。

<强> GMAC :基于随机数-MAC是GCM的一种特殊情况。继承了许多的GCM的好的和坏的特性。但现时,要求是不必要的MAC,并在这里购买什么好处。实际的攻击如果标签被截断为≤64位和解密的程度不被监控和限制。在现时重用彻底失败。使用隐含无论如何,如果GCM被采用。不建议用于单独的标准化。

认证加密(加密和消息完整性)

<强> CCM :结合CTR模式加密和原始基于随机数-AEAD方案 CBC-MAC。固有串口,转速限制在某些情况下。可证明安全,具有良好的界限,假设底层分组密码是一个很好的PRP。笨拙的建设是demonstrably做这项工作。更简单的实现比GCM。可以用作基于随机数-MAC。广泛标准化和使用。

<强> GCM :结合CTR模式加密和一个GF(2128)基于随机数-AEAD方案为基础的通用散列函数。良好的效率特性为某些执行环境。良好的可证明安全的结果假设最小的标签截断。攻击和贫困证明的安全边界在大量的标签截断的存在。可以用作基于随机数-MAC,然后将其称为GMAC。可疑的选择是允许大于96位的随机数等。建议限制随机数到96位和标签至少96位。广泛标准化和使用。

  1. 任何东西,但欧洲央行。
  2. 如果使用CTR,就必须使用不同的四,对每个信息,否则你结束了攻击者能够采取两个密文和得出合并的未加明文。其原因是,中心模式基本上变成一块密码进入流密码,以及第一条规则的流密码是永远不会使用相同的密钥+四的两倍。
  3. 真的没有太大的区别在如何困难的模式来实施。一些模式只需要分组密码在加密方向。然而,最块密码,其中包括AES,不要采取更多的代码来执行解密。
  4. 对于所有加密模式,重要的是使用不同的IVs为每个消息如果你的消息可能同在第一数字的,你不想攻击者知道这一点。

您通过阅读这个维基百科上的信息开始 - 操作的分组密码模式?然后按照维基百科的 NIST参考链接:建议的分组密码模式操作

您可能要基于什么是广泛提供给选择。我有同样的问题,这里是我有限的研究结果。

硬件限制

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

我知道一个方面:虽然CBC通过改变IV对每个块提供了更好的安全性,这是不适用于随机访问的加密的内容(如加密硬盘)

因此,使用CBC(以及其它顺序模式)用于随机接入的顺序流和ECB。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top