首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何选择流密码

如何选择流密码
EN

Security用户
提问于 2011-06-15 22:26:00
回答 1查看 6.5K关注 0票数 11

在不牺牲安全性的情况下,是否有为诸如互联网流之类的东西设计的高速密码?在流模式下操作的选项太多了。如何选择密码?

EN

回答 1

Security用户

回答已采纳

发布于 2011-06-16 12:46:04

默认情况下使用AES。AES是块密码,即给定密钥的函数将块值(在AES情况下为128位)映射到相同大小的其他块值。要加密消息,必须在链式中使用分组密码,它告诉输入数据应该如何分割、加密和重新组装。几乎所有的模式都允许流(在运行中加密一条巨大的消息,而不必将其完全存储在RAM或磁盘中)。好的模式结合加密和完整性检查,参见EAXGCM。在传统的仅加密模式中,当前的模式是CBC,较新的模式是CTR;CTR的优点是不需要填充,因为它将x字节序列加密为所有x字节,而CBC需要一个长度为块大小倍数的输入。

我的个人电脑上有一个2.4 GHz Core2英特尔处理器。这远远不是最好的,并将很快“过时”,至少在商业上。不过,当我运行OpenSSL基准测试工具时:

代码语言:javascript
复制
$ openssl speed aes-128-cbc
(...)
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
aes-128 cbc     108028.29k   147211.99k   161986.82k   166308.90k   167286.10k

因此处理器可以以每秒167 MB的速度加密数据,这是使用一个核。我的个人电脑有四个核心,所以即使是在最大带宽下加密数据(可以通过千兆位以太网),也只需要15%的CPU资源。实际上,需要一个非常特殊的应用程序才能使加密成为瓶颈。

在一个更新的x86处理器上,事情会更快一个数量级,其中一个处理器带有AES-NI指令。这些指令允许以每个数据字节少于2个时钟周期的速度加密数据;如果您愿意的话,它将超过每秒千兆字节。请注意,这大约比一个典型硬盘的速度快10倍。AES-NI指令还包括pclmulqdq操作码,这在处理GCM模式时非常有帮助。

尽管如此,在一些可以想象的特殊情况下,AES的原始速度是不够的(当然,涉及到没有AES-NI指令的机器)。对于这些,人们可能会注意到,分组密码是一种多功能的原语,也许一种专门为加密长流而设计的算法,但不能做任何其他事情,可能会更快地处理数据。这些叫做流密码。一个古老的,众所周知的,略弱的,实际上不那么快的流密码是RC4.从2004年到2008年,eSTREAM项目作为一种公开竞争进行,有流密码候选人、公开评论和研讨会,并产生了一组从安全性和性能角度来看“看上去不错”的流密码(它们没有受到严格的审查,但仍然得到了公平的份额)。有四个密码优化为软件平台,三个为硬件设计。它们都没有专利,任何用途都是免费的(兔子正在申请专利,但在2008年10月,它被发布到公共领域)。

流密码比分组密码提供优势的应用实例实际上与安全性无关:这是大量的数值模拟,需要稳定的高质量随机值流。流密码产生高质量的随机性(它们的设计是为了不存在偏见,即使是故意寻找它们,而自定义的非加密随机数生成器往往依赖运气--手头的问题不会碰到已知的RNG偏见之一)。为此,我成功地使用了Sosemanuk,eSTREAM组合流密码之一。

无论哪种方式,块密码和流密码都需要适当的IV管理。IV是一个不需要保密的参数,但它必须具有某些特定的属性。对于一些密码来说,没有两条消息被用相同的密钥和相同的IV加密就足够了。其他一些消息(包括CBC模式)则需要更多的信息,即在可能的IV空间中为每条消息选择一致概率的IV。无论如何,IV必须由接收方知道,所以通常在加密消息的标题中发送它。RC4流密码没有IV:给定的密钥绝不能用于多个消息。IV管理是您会遇到安全问题的地方,因为它经常被忽略,而且不那么容易纠正。

摘要:使用AES和适当的加密模式;您还需要完整性检查,所以组合模式(如GCM )是个好主意。注意你的IV。只有当你发现AES是一个不可避免的瓶颈时,你才会想到其他的东西,因为很有可能这不会是真的。

票数 14
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/4583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档