其基本思想是,对于迭代散列函数,能够找到哈希冲突ñ具体的哈希值,可以生成2ñ所有的输入散列到相同的值。这是2ñ考生在第二哈希函数的碰撞,只能寻找工作ñ哈希冲突的第一哈希函数 - 换句话说,一大堆的候选人很少的工作。散列值串联到输入端,重散列,和连接两个输出也检查在本文中,结果为受到相同的攻击。这是更聪明的使用设计成具有比建造一个出的128个或160位的散列256位的散列。
大多数程序员不会试图去创造或修改密码加密算法,但还没有谨慎的同样的意义对于加密散列函数。如果你仍然确定要做到这一点,阅读整个multicollisions纸仔细检查,看看你的方案是应用密码学描述,并试图得到一个密码专家审查你的设计。
总之,密码散列程序员最重要的特点是,他们更昂贵的计算比正常哈希值,并且该碰撞性属性并非一成不变,而是随着时间的推移降低。
什么时候基于内容的处理是正确的选择?
现在,我们有必要的背景,我们可以探索解空间,并计算出当基于内容的寻址是一个优势。总之,CBA有意义时,它提供了一些优势(更简单的代码,更好的性能,更高的安全性),并且无论是从安全的蓄意攻击或可以安全地升级到新的加密散列函数,如果它遭到攻击。
是否使用CBA胙一些优势?
要问的第一个问题是,CBA是否为特定应用程序提供了一些优势——它是降低代码复杂性还是提高性能,还是使事情变得更糟?我读过或听过几个故事实际上一些CBA的使用,由一个系统明显更糟——磁盘缓存慢了下来,只试图写出修改内存磁盘当散列的成本大于I / O,或计算密码散列的数据几乎总是不同的,反正是要转移。值得花些时间进行一些高级检查和粗略计算,以确定基于cba的实现是否有可能获得成功。
减少代码的复杂性
减少代码复杂性通常是CBA的主要好处。使用库提供的加密哈希函数并比较结果通常比编写针对特定用例优化的完整哈希表实现或跟踪数据更改要简单得多。
改进的性能
CBA的基本性能的成本计算所述数据的密码散列,比较所述散列(包括如果需要的话让两组散列的在同一地点),以及转移或存储任何变化的数据。通过CBA获得的好处要超过这些费用,但权衡取决于什么数据的分数发生变化时,IO通道,哈希的大小,以及是否散列可以一次计算和多次重复使用的带宽。请注意,有些应用需要数据的加密哈希反正出于安全原因,如安全的分布式文件存储是不完全信任的存储节点。在这种情况下,散列的计算成本是无关的。
数据的分数值:CBA的表现将在很大程度上取决于哪些数据的比例是不同的。让我们看看一些简单的情况下,第一。最简单的情况是,当数据始终是不同的。在这种情况下,计算散列是不必要的开销,只应包括如果有一些引人注目的安全威胁,它会解决。下一个简单的情况是当数据始终是相同的。在这种情况下,比较纯粹是需要计算,转移,并比较了散列,与需要对数据的整体传输时间的时间之间。如果比较的数据是在本地内存,它肯定快,比较直接,而不是运行80轮计算出每512位为。如果比较的数据是在本地磁盘上,它很可能是一个双赢直接比较,或使用传统的哈希表,这取决于你的磁盘带宽的比率和你的CPU的速度。如果比较的数据是在一个共享低带宽卫星链路的相对侧,CBA是双手向下赢家。从概念上讲,该比较是散列函数的“带宽”之间 - 多少字节每秒能够处理 - 和两片之间的I / O链路(存储器总线,I / O总线,网络链路)的带宽 data being compared. The method with more bandwidth is likely to be better.
对于其中数据被部分地改变,并且散列函数的带宽比I / O链路的带宽更高的复杂(常见)的情况下,折衷点取决于改变数据的百分比和的相对带宽散列值和I / O(并且在较小的程度上,散列输出的大小)。它大多数情况下,会有一个明显的优势,在一个方向或另一只手计算几分钟后 - 只要弄清楚哈希带宽时,I / O带宽,并挑选了几个合理的值更改的数据的百分比。如果你想获得幻想,因素在I / O链路传输散列的成本。
测量带宽:寻找你的哈希函数和I / O链路带宽比以往任何时候都更容易。OpenSSL库已内置基准命令:
$ OpenSSL的速度
从我的笔记本电脑选择的输出:
的选择哈希函数的带宽(KB / s)的 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
哈希 | 16个字节的输入 | 64个字节的输入 | 256级字节的输入 | 1024个字节输入 | 8192字节的输入 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
MD2 | 858.46 | 1789.04 | 2515.67 | 2797.48 | 2927.39 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
MD4 | 7991.10 | 28268.68 | 76263.37 | 141054.08 | 185523.89 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
MD5 | 7002.36 | 23954.07 | 68119.32 | 124396.91 | 168473.60 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
RIPEMD-160 | 5758.02 | 16670.98 | 37134.21 | 52536.75 | 59553.02 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SHA-1 | 6860.21 | 21475.32 | 52002.86 | 81293.41 | 97357.06 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SHA-256 | 4256.00 | 9803.35 | 18622.66 | 23416.18 | 25162.76 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SHA-512 | 2499.55 | 10173.91 | 18949.99 | 28710.90 | 33324.71 |
邦尼++或简单猫文件>的/ dev / null的将找到带宽到你的本地硬盘驱动器,和netperf将报告您的网络带宽。一定要选择正确的块,文件,或分组大小来评价作为带宽根据被处理或传送的数据元素的大小而变化似地。
长期存放哈希:CBA通常用于寻址和用于存储系统去重复数据。在此情况下,散列值计算一次时,数据首先被存储和再使用许多次,所以在计算散列的成本分摊在许多操作。同时,存储的哈希值会增加代码的复杂度,减少了CBA的好处之一。
替代评价:有时更普通的方法,如传统的哈希表,传统的差异,源代码控制系统和压缩,是当他们实际上比CBA表现得更好忽视。计算一个非常便宜的哈希值,然后比较完整的数据与哈希碰撞任何东西可以比计算昂贵的加密哈希更快。在同样,另一种策略是使用一系列逐渐更强散列,如在第一阶段中使用的滚动散列rsync的。跟踪的两个版本之间的差异(而不是完全无状态的方法),并只发送这些差异是另一个传统的选择。除了众所周知的,但有限DIFF工具,xdelta计算任何格式文件之间的有效差异。压缩可以改变等式的两边,取决于压缩的“带宽”和I/O带宽之间的比率。同样,一些手工计算通常会很快确定最快的算法。
示例性实例是rsync的,远程文件同步程序。在本地和远程主机之间同步文件时,rsync的默认使用CBA。但是,当要同步的文件是什么样子的本地文件系统rsync的(如/家庭/ VAL / src目录/),它发送整个文件,而不是寻找和仅发送该文件的改变部分。这种启发式通常是正确的,但偶尔真高带宽网络或非常低带宽的磁盘上当。从该名男子页rsync的:
-W,--whole文件使用此选项不使用增量rsync的算法和整个文件被作为-是代替。如果这个选项被使用时,源和目标计算机之间的带宽比带宽到磁盘(尤其是当盘实际上是一个文件系统联网的)更高的传送可以更快。这是默认的,当源和德 - tination被指定为本地路径。