フレッチャーのチェックサム
フレッチャーのチェックサム (Fletcher's checksum)は、ジョン・G・フレッチャー (John G. Fletcher)が考案した誤り検出符号の一種である。単純なチェックサムより信頼性が高い。
アルゴリズム[編集]
まずデータを値の列 (i は 1 から n) として、また合同式の法を m と定義する。チェックサム用の変数 , () を用意し、数列を以下のように計算する。
この時 と の値を並べたものがフレッチャーのチェックサム S である。
バリエーション[編集]
フレッチャーのチェックサムには、エンディアン、データの分割幅および変数 A, B の法 m ごとにいくつかのバリエーションがある。
バリエーション | データ d の幅 | 合同式の法 m | チェックサムのビット数 |
---|---|---|---|
Fletcher-16 | 8bit | 16bit | |
Fletcher-32 | 16bit | 32bit | |
Fletcher-64 | 32bit | 64bit |
また、剰余演算を避けるため、法を の形へと簡略化した独自実装がなされる事がある。[1]
多次のフレッチャーのチェックサム[編集]
フレッチャーのチェックサムを強化したものとして、変数をA,Bの2変数から、3変数以上に自然に拡張したものがある。この場合の計算は下のように行われる。
- ………
フレッチャーのチェックサムの基本形は二次の形式であり、 単純なチェックサムは一次のフレッチャーチェックサムの一種であるとみなせる。
使用例[編集]
ZFS では、データを 64bit ごとに分割し、奇数番目と偶数番目のデータを分離してそれぞれ別に Fletcher-128 を計算する fletcher2 と、データ 32bit、変数幅64bitの、四次のフレッチャーチェックサムを用いる fletcher4 が使用されている。 また、TCP 用のチェックサムのオプションとしても規格化されている。[2]
脚注[編集]
- ^ [1] FreeBSD 9.1R ソースコード zfs_fletcher.c rev243808 2013年7月1日閲覧
- ^ [2] J. Zweig, C. Partridge, "TCP Alternate Checksum Options", RFC1146, 1990.