拉宾指纹

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

方案 

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

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

应用 

拉宾-卡普算法的许多实现，在内部是使用的拉宾指纹。

麻省理工学院的低带宽网络文件系统（LBFS）使用拉宾指纹来实现可变大小的抗移位块。

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

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

参见 

 
 旋转哈希

参考文献

外部链接 

 
 
 Ross N. Williams (1993). "A painless guide to CRC Error detection algorithms".
密码学理论
指纹算法