フレッチャーのチェックサム

提供: testwiki
ナビゲーションに移動 検索に移動

フレッチャーのチェックサム(テンプレート:Lang-en-short)は、ジョン・G・フレッチャー(John G. Fletcher)が考案した誤り検出符号の一種である。単純なチェックサムより信頼性が高い。

アルゴリズム

まずデータを値の列di(1<i<n)として用意し、また合同式のmと定義する。チェックサム用の変数Ai,Bi(A0=B0=0)を用意し、数列を以下のように計算する。

Ai=Ai1+di
Bi=Bi1+Ai

この時 Bn(modm)An(modm) の値を並べたものがフレッチャーのチェックサムSである。

バリエーション

フレッチャーのチェックサムには、エンディアン、データの分割幅および変数A,Bの法mごとにいくつかのバリエーションがある。

バリエーション データdの幅 合同式の法m チェックサムのビット数
Fletcher-16 8bit 281 16bit
Fletcher-32 16bit 2161 32bit
Fletcher-64 32bit 2321 64bit

また、剰余演算を避けるため、法を2nの形へと簡略化した独自実装がなされる事がある。 [1]

多次のフレッチャーのチェックサム

フレッチャーのチェックサムを強化したものとして、変数をA,Bの2変数から、3変数以上に自然に拡張したものがある。この場合の計算は下のように行われる。

Ai=Ai1+di
Bi=Bi1+Ai
Ci=Ci1+Bi
Di=Di1+Ci
………

フレッチャーのチェックサムの基本形は二次の形式であり、 単純なチェックサムは一次のフレッチャーチェックサムの一種であるとみなせる。

使用例

ZFSでは、データを64bitごとに分割し、奇数番目と偶数番目のデータを分離してそれぞれ別に Fletcher-128 を計算する fletcher2 と、データ32bit、変数幅64bitの、四次のフレッチャーチェックサムを用いる fletcher4 が使用されている。 また、TCP用のチェックサムのオプションとしても規格化されている。 [2]

脚注

テンプレート:脚注ヘルプ

  1. [1] FreeBSD 9.1R ソースコード zfs_fletcher.c rev243808 2013年7月1日閲覧
  2. [2] J. Zweig, C. Partridge, "TCP Alternate Checksum Options", RFC1146, 1990.

関連項目