Rabin指纹

Rabin指纹方案是一种在有限域上使用多项式实现指纹的方法。它是由迈克尔·拉宾提出的。 [1]

方案

给定一个n位消息m0,...,mn-1,我们将其视为在有限域GF(2)上的n-1次多项式。

然后,我们随机选择一个在GF(2)上的k次不可约多项式,我们将消息m的指纹定义为在GF(2)上除以的余数,它可以看作是一个k-1次多项式或k位数字。

应用

Rabin–Karp算法的许多实现,在内部是使用的Rabin指纹。 麻省理工学院的低带宽网络文件系统(LBFS)使用Rabin指纹来实现可变大小的抗移位块。[2]

其基本思想是,文件系统计算文件中每个块的加密哈希。为了节省客户端和服务器之间的传输,它们比较其校验和,只传输校验和不同的块。但是这种方案有一个问题,就是如果使用固定大小(例如4KB)的块,那么在文件开头的一次插入将导致每个校验和都发生变化。因此,我们的想法是不基于特定的偏移量,而是根据块内容的某些属性来选择块。LBFS通过在文件上滑动48个字节的窗口并计算每个窗口的Rabin指纹来做到这一点。当指纹的低13位为零时,LBFS将这48个字节称为断点,并结束当前块、开始一个新的。由于Rabin指纹的输出是伪随机的,因此任何给定的48个字节为断点的概率为(8192分之1)。这就有了抗移位可变尺寸块的效果。任何哈希函数都可以用于将一个长文件分成多个块(只要随后使用加密哈希函数查找每个块的校验和即可):但是Rabin指纹是一种高效的旋转哈希,因为当区域AB重叠时,区域B的Rabin指纹的计算可以重复使用区域A的拉宾指纹的部分计算。

请注意,这与rsync面临的问题相似。

参见

参考文献

  1. 迈克尔·拉宾. (PDF). Center for Research in Computing Technology, Harvard University. 1981 [2007-03-22]. Tech Report TR-CSE-03-01. (原始内容存档 (PDF)于2007-02-21) (英语).
  2. Athicha Muthitacharoen, Benjie Chen, and David Mazières "A Low-bandwidth Network File System" 页面存档备份,存于

外部链接

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.