LFSR計算機 - 線形帰還シフトレジスタ

カスタムのシードとフィードバックタップを使って、線形帰還シフトレジスタで疑似乱数ビット列を生成します。

レジスタ長、初期シード、フィードバックタップ位置、LFSR の種類、反復回数を入力し、[シーケンスを生成]をクリックします。

LFSR計算機 - 線形帰還シフトレジスタ
カスタムのシードとフィードバックタップを使って、線形帰還シフトレジスタで疑似乱数ビット列を生成します。

初期状態を表す 0 と 1 のみの二進文字列

1 から数えるタップ位置をカンマ区切りで入力

実行するシフト操作の回数

生成されたシーケンス
出力ビット: 000100110101111
シーケンス周期: 15
最大長: はい
レジスタ状態:
0: 1000
1: 0100
2: 0010
3: 1001
4: 1100
5: 0110
6: 1011
7: 0101
8: 1010
9: 1101
10: 1110
11: 1111
12: 0111
13: 0011
14: 0001
15: 1000

LFSR計算機について

線形帰還シフトレジスタ(LFSR)は、入力ビットが過去の状態ビットの一部に対する線形関数(XOR)で決まるシフトレジスタです。各クロックサイクルでレジスタは 1 つずつシフトされ、新しい入力ビットはフィードバックタップと呼ばれる特定位置のビットを XOR して計算され、出力はシフトアウトされたビットになります。結果の二進シーケンスはランダムに見えますが、完全に決定論的であり、周期はレジスタ長とタップの選び方によって決まります。 LFSR は、デジタル通信、暗号、BIST(組み込み自己テスト)回路、スペクトラム拡散システム、疑似乱数生成などで広く使われています。n 段の LFSR は、繰り返す前に最大で 2ⁿ − 1 ビットの系列を生成できます(全ゼロ状態は除外)。適切に選ばれた原始多項式タップを使えばこの最大長系列を実現できるため、LFSR は疑似乱数を効率よくハードウェア実装できます。 LFSR の代表的なアーキテクチャは 2 つあります。Fibonacci(外部帰還)LFSR では、帰還ビットは固定されたタップ位置から計算され、左端の段に入力され、他の段は右へシフトします。出力は右端の段から取ります。Galois(内部帰還)LFSR では、帰還ビットは入力に戻すだけでなく、複数の中間段へ直接 XOR されます。XOR 演算が直列ではなく並列に行われるため、Galois LFSR の方がハードウェアでは高速です。 最大長 LFSR、つまり繰り返す前に 2ⁿ − 1 個の非ゼロ状態をすべて巡回する LFSR には、原始多項式を帰還多項式として使う必要があります。タップ位置はその多項式の非ゼロ係数に対応します。4 ビット LFSR でタップが 4 と 3 の場合、原始多項式は x⁴ + x³ + 1 となり、LFSR は 15 個すべての非ゼロ状態を巡回します。 この計算機では、レジスタ長、シード、タップ位置、LFSR の種類を自由に組み合わせて試せます。結果の周期を見れば、選んだタップが最大長系列を作るか確認できます。周期が 2ⁿ − 1 なら、そのタップは原始多項式を構成します。用意した例で、よく知られた最大長構成を確認できます。 LFSR の応用範囲は広く、Wi‑Fi や Bluetooth では周波数ホッピングや直接拡散スペクトラムの拡散符号に使われます。ストレージや通信では CRC(巡回冗長検査)回路が LFSR として実装されます。暗号ストリーム暗号では、LFSR が中核原語になります(ただし現代の暗号は線形暗号解析への耐性を高めるため、複数の LFSR と非線形要素を組み合わせます)。チップテストでは、LFSR ベースのシグネチャ解析がテスト応答データを小さなシグネチャに圧縮します。

LFSR の例

最大長系列とさまざまなレジスタサイズを示す代表的な LFSR 構成です。

構成周期説明
4-bit, seed=1000, taps=[4,3], Fibonacci15(最大長)原始多項式 x⁴+x³+1。15 個の非ゼロ 4 ビット状態をすべて巡回します。
8-bit, seed=10110001, taps=[8,6,5,4], Fibonacci255(最大長)暗号用途で使われる標準的な 8 ビット Fibonacci LFSR です。
5-bit, seed=10101, taps=[5,3], Galois31(最大長)内部帰還の Galois LFSR で、並列 XOR 演算が高速です。
3-bit, seed=110, taps=[3,2], Fibonacci7(最大長)シンプルな 3 ビット LFSR で、概念学習に最適です。

LFSR 計算機の使い方

  1. レジスタ長を、必要なビット数に設定します(例: 4 ビット LFSR なら 4)。
  2. 初期シードを、レジスタ長と同じ長さの二進文字列で入力します(例: 1000)。全ゼロ状態は使わないでください。LFSR が停止します。
  3. フィードバックタップを、カンマ区切りの位置で入力します(例: 4, 3)。タップ位置は左端の段を 1 として数えます。
  4. LFSR の種類を選びます: Fibonacci(外部帰還)または Galois(内部帰還)。
  5. 反復回数を設定し、[シーケンスを生成]をクリックすると、各ステップの出力ビット列とレジスタ状態を確認できます。

LFSR 計算機 FAQ

最大長 LFSR とは何ですか?
最大長 LFSR は、繰り返す前に 2ⁿ − 1 個の可能な非ゼロ状態をすべて巡回します。これには、タップ位置で定義される帰還多項式が GF(2) 上で原始多項式である必要があります。4 ビット LFSR の最大周期は 15、8 ビット LFSR では 255 です。最大長系列(m-sequence)は優れた疑似乱数特性を持ちます。
なぜ全ゼロ状態は除外されるのですか?
レジスタのすべてのビットが 0 だと、XOR 帰還は常に 0 になり、レジスタは永久に全ゼロのままです。そのため初期シードを全ゼロにしてはいけません。同じ理由で、最大周期は 2ⁿ ではなく 2ⁿ − 1 になります。
Fibonacci と Galois LFSR の違いは何ですか?
Fibonacci LFSR では、帰還ビットはすべてのタップ位置の XOR で求められ、最初の段に入力されます。ほかの段は単純にシフトするだけです。Galois LFSR では、帰還ビットが複数の中間段へ直接並列 XOR されます。対応する多項式が同じなら両者は同じ系列を生成しますが、XOR が並列なので Galois の方がハードウェアでは高速です。
適切なタップ位置はどう選べばよいですか?
最大長系列を得るには、タップ位置が GF(2) 上の原始多項式に対応している必要があります。一般的なレジスタ長の原始多項式表は広く公開されています。たとえば n=4 では、原始多項式 x⁴+x³+1 がタップ [4,3] に対応し、n=8 では、多項式 x⁸+x⁶+x⁵+x⁴+1 がタップ [8,6,5,4] に対応します。
LFSR の系列は本当にランダムですか?
いいえ。LFSR の系列は決定論的で、シードとタップ位置が分かれば完全に予測できます。疑似乱数と呼ばれるのは、多くの統計的な乱数テストに合格し、設定を知らない観測者にはランダムに見えるからです。暗号用途では、線形解析に耐えるために非線形要素と組み合わせる必要があります。
CRC とは何ですか?LFSR とどう関係しますか?
CRC(巡回冗長検査)は、メッセージ多項式を GF(2) 上の生成多項式で割り、その余りを付加することで計算される誤り検出符号です。この割り算の処理は、生成多項式で定義された LFSR にメッセージビットを通すのと等価です。標準の CRC-32 は特定の 32 ビット原始多項式を使い、そのハードウェア実装は 32 段の LFSR です。