Encryption 如何选择AES加密模式(CBC ECB CTR OCB CFB)?
在什么情况下,他们中的哪一个是首选的 我想看看各种模式的评估标准列表,也许还可以讨论每个标准的适用性 比如说,, 我认为其中一个标准是加密和解密的“代码大小”,这对于微代码嵌入式系统(如802.11网络适配器)很重要。如果实现CBC所需的代码比CTR所需的代码小得多(我不知道这是真的,这只是一个示例),那么我可以理解为什么使用较小代码的模式更可取。但是,如果我正在编写一个在服务器上运行的应用程序,并且我使用的AES库实现了CBC和CTR,那么这个标准是不相关的 看到我所说的“评估标准清单和每个标准的适用性”了吗Encryption 如何选择AES加密模式(CBC ECB CTR OCB CFB)?,encryption,aes,Encryption,Aes,在什么情况下,他们中的哪一个是首选的 我想看看各种模式的评估标准列表,也许还可以讨论每个标准的适用性 比如说,, 我认为其中一个标准是加密和解密的“代码大小”,这对于微代码嵌入式系统(如802.11网络适配器)很重要。如果实现CBC所需的代码比CTR所需的代码小得多(我不知道这是真的,这只是一个示例),那么我可以理解为什么使用较小代码的模式更可取。但是,如果我正在编写一个在服务器上运行的应用程序,并且我使用的AES库实现了CBC和CTR,那么这个标准是不相关的 看到我所说的“评估标准清单和每个标
这实际上与编程无关,但与算法有关。您是否已开始阅读维基百科上的相关信息?然后,按照维基百科上的参考链接访问
我知道一个方面:虽然CBC通过更改每个块的IV来提供更好的安全性,但它不适用于随机访问的加密内容(如加密硬盘) 因此,对顺序流使用CBC(和其他顺序模式),对随机访问使用ECB
- 如果使用同一密钥加密多个数据块,则不应使用ECB
- CBC、OFB和CFB类似,但OFB/CFB更好,因为您只需要加密而不需要解密,这可以节省代码空间
- 如果您想要良好的并行化(即速度),则使用CTR,而不是CBC/OFB/CFB
- 如果您正在对随机可访问数据(如硬盘或RAM)进行编码,则XTS模式是最常见的
- OCB是目前为止最好的模式,因为它允许在一次传递中进行加密和身份验证。然而,在美国有专利
- 每次加密时都应该使用unique,而且应该是。如果您不能保证它们是,请使用OCB,因为它只需要a,而不需要a,并且有明显的区别。A不会降低安全性如果人们能够猜到下一个,A可能会导致此问题
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
开源限制
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]
(2)
如果你无法绕过自己的密码,请考虑长期和困难。 事情的丑陋真相是,如果你问这个问题,你可能无法设计和实现一个安全的系统 让我来说明我的观点:假设您正在构建一个web应用程序,并且需要存储一些会话数据。您可以为每个用户分配一个会话ID,并将会话数据存储在服务器上的哈希映射中,将会话ID映射到会话数据。但是你必须在服务器上处理这种令人讨厌的状态,如果在某个时候你需要不止一台服务器,事情就会变得一团糟。因此,您可以将会话数据存储在客户端的cookie中。当然,您将对其进行加密,以便用户无法读取和操作数据。那么你应该使用什么模式呢?来到这里,你读到了最上面的答案(很抱歉把你挑出来)。第一个是ECB,不适合你,你需要加密多个块,下一个是CBC,听起来不错,你不需要CTR的并行性,你不需要随机访问,所以没有XTS和专利是PITA,所以没有OCB。使用加密库,您会意识到需要一些填充,因为您只能加密块大小的倍数。您选择它是因为它是在一些严格的加密标准中定义的。在某个地方读到CBC如果与随机IV和安全分组密码一起使用,即使您将敏感数据存储在客户端,您也可以放心 几年后,在您的服务确实增长到相当大的规模之后,IT安全专家会以负责任的方式与您联系。她告诉你,她可以用密码解密你所有的cookies,因为如果填充被破坏,你的代码会生成一个错误页面 这不是一个假设情况: 问题在于,密码学有很多陷阱,构建一个对外行来说看起来很安全,但对知识渊博的攻击者来说却很容易破解的系统非常容易 如果需要加密数据,该怎么办 对于实时连接,请使用TLS(确保检查证书的主机名和颁发者链)。如果您不能使用TLS,请查找您的系统为您的任务提供的最高级别API,并确保您了解它提供的保证,更重要的是了解它不保证的内容。对于上面的示例,请使用framewor