ＦＥＡＬ−ＮＸ仕様書
１序

１．１

ＦＥＡＬ−ＮＸ暗号の概要

ＦＥＡＬ（the Fast Data Encipherment Algorithm，高速データ暗号アルゴリズム）
は，６４ビットブロック暗号アルゴリズムであり，６４ビットの平文を６４ビットの暗号文に暗号化し，また，６４ビットの暗号文を６４ビットの平文に復号化する．
ＦＥＡＬは３つのオプション，鍵の長さ，回転数，鍵パリティ，を持つ．鍵の長さは，６４ビットか，１２８ビットであり，回転数（Ｎ）は，データランダム化のための内部回転数を指定し，鍵パリティオプションは，鍵ブロックにおけるパリティビットを使うか，使わないかを選択する．ここではＦＥＡＬ−Ｎ
Ｘ暗号をＦＥＡＬ暗号の鍵パリティビットなし１２８ビット鍵Ｎ回転限定の版と位置付ける．

１．２

ＦＥＡＬ−ＮＸオプション

ＦＥＡＬ−ＮＸオプションは次のように定義される．
（１）回転数Ｎ
回転数Ｎは，ＦＥＡＬデータランダム化部の回転数(Ｎ)を指定する．Ｎは，Ｎ≧３２，偶数である．
１．３

定義と記法

１．３．１定義

1（１）鍵ブロック：１２８ビットブロックである．
（２）鍵：暗号化／復号化に用いる鍵情報（３）回転数（Ｎ）：ＦＥＡＬデータランダム化部の内部回転数（４）拡大鍵：１６ビットブロック，Ｋｉ，ｉ＝0, 1, 2, ‥,(N+7)．拡大鍵は，鍵が，ＦＥＡＬ鍵処理部によりランダム化されて拡大され生成される．

１．３．２

記法

（１）Ａ，Ａr，…：ブロック（長さは、各所で定義される）（２）（Ａ，Ｂ，……）：（３）Ａ⊕Ｂ：（４）φ ：

この順序の連結（concatenation）

ブロックＡとＢのビット対応の排他的論理和
３２ビット長の零ブロック（５）等号 ＝ ：右辺を左辺に代入する（６）ビット位置：ブロックの最左端ビット（MSB）から右方向に１，２，３，‥，と数える．

２

暗号化手続き２．１

計算ステージ2この暗号化手続きの中で使われる拡大鍵Ｋｉは，４節で記載される鍵処理により生成される．同様に，ここで使われる関数ｆは，５節で定義される．計算ステージは次の通りであり，詳細は２．２節から２．４節により詳細に記載される（図１も参照）．
ａ）前処理（２．２節）
ｂ）反復計算（２．３節）
ｃ）後処理（２．４節）
２．２

前処理

平文ブロックＰは，同じ長さ（３２ビット）のブロック，Ｌ0，Ｒ0 に分けられる．
即ち，（Ｌ0，Ｒ0）＝Ｐ．
初めに，（Ｌ0 ，Ｒ0）＝ （Ｌ0，Ｒ0）⊕（ＫN ，ＫN+1，ＫN+2，ＫN+3）
次に，（Ｌ0 ，Ｒ0）＝ （Ｌ0，Ｒ0）⊕（φ，Ｌ0）
２．３

反復計算

（Ｌ0 ，Ｒ0）を入力し，次の計算を，ｒ＝１〜Ｎについて反復して計算する．
Ｒr ＝ Ｌr-1 ⊕ｆ（Ｒr-1，Ｋr-1）
Ｌr ＝ Ｒr-1
最終ラウンドの出力は，（ＬN，ＲN）である．
２．４

後処理

反復計算の最終出力（ＬN，ＲN）の左右を交換して，（ＲN，ＬN）とする．
次に，

3

（ＲN，ＬN）＝ （ＲN，ＬN）⊕（φ，ＲN）
最後に，（ＲN，ＬN）＝ （ＲN，ＬN）⊕（ＫN+4，ＫN+5，ＫN+6，ＫN+7）
暗号文ブロックは（ＲN，ＬN）で得られる．

３

復号化手続き３．１

計算ステージ

この復号化手続きの中で使われる拡大鍵Ｋｉは，４節で記載される鍵処理により生成される．この手続きで使われる関数ｆは，５節で定義される．計算ステージは次の通りであり（図１も参照），詳細は３．２節から３．４節により詳細に記載される．
ａ）前処理（３．２節）
ｂ）反復計算（３．３節）
ｃ）後処理（３．４節）
３．２

前処理

暗号文ブロック（ＲN，ＬN）は，同じ長さ（３２ビット）のブロック，ＲN，ＬN に分けられる．
初めに，（ＲN，ＬN）＝ （ＲN，ＬN）⊕（ＫN+4，ＫN+5，ＫN+6，ＫN+7）
次に，（ＲN，ＬN）＝ （ＲN，ＬN）⊕（φ，ＲN）

３．３

反復計算

4

（ＲN，ＬN）を入力し，次の計算を，ｒ＝Ｎ〜１について反復して計算する．
Ｌr-1 ＝ Ｒr⊕ｆ（Ｌr，Ｋr-1）
Ｒr-1 ＝ Ｌr
最終ラウンドの出力は，（Ｒ0，Ｌ0）である．

３．４

後処理

反復計算の最終出力（Ｒ0，Ｌ0）の左右を交換して，（Ｌ0，Ｒ0）とする．
次に，（Ｌ0 ，Ｒ0）＝ （Ｌ0，Ｒ0）⊕（φ，Ｌ0）
最後に，（Ｌ0 ，Ｒ0）＝ （Ｌ0，Ｒ0）⊕（ＫN，ＫN+1，ＫN+2，ＫN+3）
平文ブロックは（Ｌ0，Ｒ0）として得られる．

４鍵処理

４．１

ＦＥＡＬ−ＮＸの鍵処理

ＦＥＡＬ−ＮＸの鍵処理を記述する（図２を参照）．ここで利用する関数は，５節で定義する．鍵処理では，１２８ビットの鍵から，拡大鍵Ｋ（i ｉ＝ 0, 1, 2, 3,‥，Ｎ＋7）を生成する．

４．１．１

左鍵ＫL と右鍵ＫR の定義

5入力した１２８ビットの鍵は，同じ長さの６４ビットずつに分ける，ＫL が，６４ビットの左鍵であり，ＫR が６４ビットの右鍵である．即ち，（ＫL，ＫR）が入力した１２８ビット鍵である．
４．１．２

反復計算

（１）右鍵ＫR の処理
右鍵ＫR を３２ビットずつ２等分し，その左３２ビットをＫR1，その右３２ビットをＫR2 とおき（即ち，（ＫR1，ＫR2）＝ＫR），一時変数Ｑr を定義する．
Ｑr = ＫR1 ⊕ ＫR2

for r = 1, 4, 7...,(r = 3i+1; i = 0, 1, ...)

Ｑr = ＫR1

for r = 2, 5, 8...,(r = 3i+2; i = 0, 1, ...)

Ｑr = ＫR2

for r = 3, 6, 9...,(r = 3i+3; i = 0, 1, ...)

但し，1≦ r ≦（Ｎ／2）＋４，（Ｎ≧３２，Ｎ：偶数）（２）左鍵ＫL の処理
左鍵ＫL の左半分をＡ0 ，右半分Ｂ0 とする．即ち，（Ａ0 ，Ｂ0）＝ＫL．
最初に，Ｄ0 ＝ φとする．続いて，ｒ＝１〜（Ｎ／２）＋４について，Ｋi（ｉ＝０〜（Ｎ＋７））を定める．
Ｄr＝ Ａr-1

Ａr＝ Ｂr-1Ｂr＝ ｆK（α，β）＝ ｆK（Ａr-1，(Ｂr-1⊕Ｄr-1)⊕Ｑr）

Ｋ2(r-1) ＝ （Ｂr0，Ｂr1）
Ｋ2(r-1)+1 ＝ （Ｂr2，Ｂr3）
ここで，Ａr，Ｂr，Ｄr，Ｑr は補助変数である．
但し，（Ｂr0，Ｂr1，Ｂr2，Ｂr3）＝Ｂr ，Ｂrj（ｊ＝０〜３）は 1 バイト長ブロック．

6

鍵処理段数は，（Ｎ／２）＋４で与えられる．Ａr，Ｂr，Ｄr は，補助変数である
５関数

２，３，４節で使われる関数を定義する．
５．１関数ｆ（図３参照）

ｆ（α，β）をｆ，αを（α0，α1，α2，α3），βを（β0，β1）と表す．
ｆ （つまりｆ0，ｆ1，ｆ2，ｆ3）は，次の順序により計算する．ここで，αi（ｉ＝０〜３），βi（ｉ＝０〜１）は，１バイト長ブロックである．関数Ｓ0 とＳ1 は５．３節に定義される．
ｆ1 ＝ α1 ⊕ β0
ｆ2 ＝ α2 ⊕ β1
ｆ1 ＝ ｆ1 ⊕ α0
ｆ2 ＝ ｆ2 ⊕ α3
ｆ1 ＝ Ｓ1（ｆ1，ｆ2）
ｆ2 ＝ Ｓ0（ｆ2，ｆ1）
ｆ0 ＝ Ｓ0（α0，ｆ1）
ｆ3 ＝ Ｓ1（α3，ｆ2）
例：入力：α＝ 00 FF FF 00，β＝ FF FF， 出力：ｆ＝ 10 04 10 44５．２

関数ｆK（図４参照）

ｆK（α，β）をｆK，αを（α0，α1，α2，α3），βを（β0，β1，β2，β3）と表す．ここで，αi（ｉ＝０〜３），βi（ｉ＝０〜１） は，１バイト長ブロックである．
ｆK（つまりｆK0，ｆK1，ｆK2，ｆK3）は，次の順序により計算する．関数Ｓ0 とＳ1 は５．３節に定義される．

7

ｆK1 ＝ α1 ⊕α0
ｆK2 ＝ α2 ⊕α3ｆK1 ＝ Ｓ1（ｆK1，（ｆK2 ⊕ β0））
ｆK2 ＝ Ｓ0（ｆK2，（ｆK1 ⊕ β1））
ｆK0 ＝ Ｓ0（α0 ，（ｆK1 ⊕ β2））
ｆK3 ＝ Ｓ1（α3 ，（ｆK2 ⊕ β3））
例：入力：α= 00 00 00 00, β = 00 00 00 00， 出力：ｆK＝ 10 04 10 44
５．３

関数ＳＳ0 とＳ1 は以下の様に定義される．
Ｓ0（Ｘ1，Ｘ2）＝ Rot2（（Ｘ1＋Ｘ2 ）mod 256）
Ｓ1（Ｘ1，Ｘ2）＝ Rot2（（Ｘ1＋Ｘ2＋1） mod 256）
Ｘ1，Ｘ2 は，１バイトブロックである．Rot2（Ｔ）は，１バイトブロックＴを，２ビット左循環シフト（左２ビット回転）して得られる１バイトブロックである．
例：

Ｘ1 ＝ 00010011, Ｘ2 ＝ 11110010のとき，Ｔ ＝（Ｘ1＋Ｘ2＋1） mod 256 ＝ 00000110
Ｓ1（Ｘ1，Ｘ2）＝ Rot2（Ｔ）＝ 00011000

６．

動作例
動作データはビット系列と１６進数により示される．

６．１

ＦＥＡＬ−ＮＸのオプション（１．２節参照）

この例では，次のＦＥＡＬのオプションが選択される．
（１）回転数

６．２

Ｎ＝３２

入力データ

8入力ブロックは，鍵ブロックと平文ブロックである．
鍵ブロックＫは：
Ｋ＝ 0000 0001 0010 0011 0100 0101 0110 0111
1000 1001 1010 1011 1100 1101 1110 1111
0000 0001 0010 0011 0100 0101 0110 01111000 1001 1010 1011 1100 1101 1110 1111（ビット系列）
Ｋ＝ 01 23 45 67 89 AB CD EF
01 23 45 67 89 AB CD EF （１６進数）
平文Ｐは：Ｐ＝ 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000（ビット系列）
Ｐ＝ 00 00 00 00 00 00 00 00 （１６進数）

６．３

鍵処理（４節参照）

まず，拡大鍵，Ｋ0，Ｋ1，Ｋ2，‥‥，Ｋ39 の生成を考える．それぞれは，鍵ブロックＫから生成され，１６ビットである．
６．３．１

反復計算（４．１．２節参照）

Ａ0 をＫL の左半分，Ｂ0 をＫL の右半分とする．即ち，ＫL＝(Ａ0，Ｂ0 ) Ｄ0＝φ．

従って，

Ａ0＝ 0000 0001 0010 0011 0100 0101 0110 0111 （ビット系列）＝ 01 23 45 67（１６進数）

Ｂ0＝ 1000 1001 1010 1011 1100 1101 1110 1111 （ビット系列）＝ 89 AB CD EF（１６進数）

Ｄ0＝ 0000 0000 0000 0000 0000 0000 0000 0000 （ビット系列）＝ 00 00 00 00（１６進数）

Ｄ1，Ａ1，Ｂ1，Ｋ0，Ｋ1 を次のように計算する．

9

Ｄ1＝Ａ0＝ 0000 0001 0010 0011 0100 0101 0110 0111
（ビット系列）＝ 01 23 45 67 （１６進数）
Ａ1＝Ｂ0＝ 1000 1001 1010 1011 1100 1101 1110 1111
（ビット系列）＝ 89 AB CD EF （１６進数）
Ｂ1＝ｆK（Ａ0，Ｂ0 ⊕ Ｄ0）＝ 0111 0101 0001 1001 0111 0001 1111 1001
（ビット系列）＝ 75 19 71 F9 （１６進数）
Ｋ0＝ 0111 0101 0001 1001 （ビット系列）＝ 75 19 （１６進数）
Ｋ1＝ 0111 0001 1111 1001 （ビット系列）＝ 71 F9 （１６進数）
この手続きを続け，拡大鍵Ｋi が１６進数で次のように得られる．

６．４

Ｋ０＝ 75 19

Ｋ１＝ 71 F9

Ｋ２＝ 84 E9

Ｋ３＝ 48 86

Ｋ４＝ 88 E5

Ｋ５＝ 52 3B

Ｋ６＝ 4E A4

Ｋ７＝ 7A DE

Ｋ８＝ FE 40

Ｋ９＝ 5E 76

Ｋ10＝ 98 19

Ｋ11＝ EE AC

Ｋ12＝ 1B D4

Ｋ13＝ 24 55

Ｋ14＝ DC A0

Ｋ15＝ 65 3B

Ｋ16＝ 3E 32

Ｋ17＝ 46 52

Ｋ18＝ 1C C1

Ｋ19＝ 34 DF

Ｋ20＝ 77 8B

Ｋ21＝ 77 1DＫ22＝ D3 24

Ｋ23＝ 84 10

Ｋ24＝ 1C A8

Ｋ25＝ BC 64

Ｋ26＝ A0 DBＫ27＝ BD D2

Ｋ28＝ 1F 5F

Ｋ29＝ 8F 1C

Ｋ30＝ 6B 81

Ｋ31＝ B5 60

Ｋ32＝ 19 6A

Ｋ33＝ 9A B1

Ｋ34＝ E0 15

Ｋ35＝ 81 90

Ｋ36＝ 9F 72

Ｋ37＝ 66 43

Ｋ38＝ AD 32

Ｋ39＝ 68 3A

暗号化アルゴリズム（２節参照）

６．４．１

前処理（２．２節参照）

10

Ｐ＝ 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000 （ビット系列）
Ｐ＝ 00 00 00 00 00 00 00 00 （１６進数）
Ｐは，３２ビット長の，Ｌ0 とＲ0 とに分けられる．
（Ｌ0，Ｒ0）＝（Ｌ0，Ｒ0）⊕（Ｋ32，Ｋ33，Ｋ34，Ｋ35）＝ 0001 1001 0110 1010 1001 1010 1011 0001
1110 0000 0001 0101 1000 0001 1001 0000
（ビット系列）＝ 19 6A 9A B1 E0 15 81 90 （１６進数）
次に，（Ｌ0，Ｒ0）＝（Ｌ0，Ｒ0）⊕（φ，Ｌ0）＝ 0001 1001 0110 1010 1001 1010 1011 0001
1111 1001 0111 1111 0001 1011 0010 0001
（ビット系列）＝ 19 6A 9A B1 F9 7F 1B 21 （１６進数）
Ｌ0 ＝ 0001 1001 0110 1010 1001 1010 1011 0001 （ビット系列）＝ 19 6A 9A B1 （１６進数）
Ｒ0 ＝ 1111 1001 0111 1111 0001 1011 0010 0001 （ビット系列）＝ F9 7F 1B 21 （１６進数）
６．４．２

反復計算（２．３節参照）

６．４．２．１

第１ステージにおけるＲ0 とＬ0 の計算

最初に，ｆ（Ｒ0，Ｋ0）を計算する．
ｆ（Ｒ0，Ｋ0）＝ 0101 0101 0101 1100 1111 1101 0111 1100 （ビット系列）＝ 55 5C FD 7C （１６進数）
ここで詳細は，６．４．２．２で記述される．
Ｌ0⊕ｆ（Ｒ0，Ｋ0）＝ 4C 36 67 CD （１６進数）

11

反復計算のステージの出力は，
Ｌ1＝Ｒ0 ＝ 1111 1001 0111 1111 0001 1011 0010 0001
（ビット系列）＝ F9 7F 1B 21（１６進数）

Ｒ1＝ 0100 1100 0011 0110 0110 0111 1100 1101
＝ 4C 36 67 CD
６．４．２．２（ビット系列）（１６進数）

第１ステージの計算

次のｆ（Ｒ0，Ｋ0）の計算において，ｆ（Ｒ0，Ｋ0）は短縮してｆとし，αとβは，次のように定義する．
α＝（α0，α1，α2，α3）＝Ｒ0＝ 1111 1001 0111 1111 0001 1011 0010 0001＝ F9 7F 1B 21（ビット系列）（16 進数）β＝（β0，β1）＝Ｋ0＝ 0111 0101 0001 1001
＝ 75 19（ビット系列）（１６進数）

α0＝1111 1001＝ F9 （１６進数），

α1＝0111 1111＝ 7F （１６進数）

α2＝0001 1011＝ 1B （１６進数），

α3＝0010 0001＝ 21 （１６進数）

β0＝0111 0101＝ 75 （１６進数），

β1＝0001 1001＝ 19 （１６進数）

ｆ（つまりｆ0，ｆ1，ｆ2，ｆ3）は逐次計算する．
ｆ1＝α1⊕β0＝ 0000 1010 ＝ 0A

（１６進数）

ｆ2＝α2⊕β1＝ 0000 0010 ＝ 02（１６進数）

ｆ1＝ｆ1⊕α0＝ 1111 0011 ＝ F3（１６進数）

ｆ2＝ｆ2⊕α3＝ 0010 0011 ＝ 23（１６進数）

ｆ1＝Ｓ1（ｆ1，ｆ2）＝ 0101 1100 ＝ 5C（１６進数）

ｆ2＝Ｓ0（ｆ2，ｆ1）＝ 1111 1101 ＝ FD

（１６進数）

ｆ0＝Ｓ0（α0，ｆ1）＝ 0101 0101 ＝ 55

（１６進数）

ｆ3＝Ｓ1（α3，ｆ2）＝ 0111 1100 ＝ 7C

（１６進数）

12

６．４．２．３

続く計算

上記の計算を継続すると，ＬｉとＲｉが次のように与えられる（１６進数表示、ただしｉは１０進数表示）．

処理ステージ---------------------------------------------------------------------------------------------------------iLi

Ri

Ki-1

f(Ri-1，Ki-1)---------------------------------------------------------------------------------------------------------019 6A 9A B1

F9 7F 1B 211

F9 7F 1B 214C 36 67 CD75 1955 5C FD 7C24C 36 67 CD

DE 02 58 65

71 F927 7D 43 44

3DE 02 58 65

06 82 45 EF84 E94A B4 22 22406 82 45 EF

69 E5 14 9548 86

B7 E7 4C F0569 E5 14 95

3E 27 61 05

88 E538 A5 24 EA

63E 27 61 05

DA 4B 20 7D52 3B

B3 AE 34 E87DA 4B 20 7D

3B 40 E0 FA

4E A405 67 81 FF

83B 40 E0 FA

83 50 5F 94

7A DE

59 1B 7F E9983 50 5F 94

9E A6 25 93

FE 40

A5 E6 C5 69

109E A6 25 93

6B CC 2E 80

5E 76

E8 9C 71 14116B CC 2E 80

B7 79 7F FC

98 1929 DF 5A 6F

12B7 79 7F FC88 8D EF 7A

EE AC

E3 41 C1 FA

1388 8D EF 7A

93 F8 74 E6

1B D4

24 81 0B 1A

1493 F8 74 E6

37 D1 63 B724 55

BF 5C 8C CD

1537 D1 63 B7

44 46 BC E4

DC A0

D7 BE C8 02

1644 46 BC E4

FA FE 29 0B

65 3B

CD 2F 4A BC

17FA FE 29 0B

D8 6B 48 E4

3E 32

9C 2D F4 00

18

D8 6B 48 E4

54 2D 6E BB

46 52

AE D3 47 B01954 2D 6E BB

2C 82 BF 2A

1C C1F4 E9 F7 CE

202C 82 BF 2A

5B BA E9 71

34 DF

0F 97 87 CA215B BA E9 71

38 28 49 8B

77 8B

14 AA F6 A1

2238 28 49 8B

0E A7 1A 8C

77 1D

55 1D F3 FD

13

230E A7 1A 8C

33 9C D0 13

D3 24

0B B4 99 98

2433 9C D0 13

C6 58 51 F184 10

C8 FF 4B 7D

25

C6 58 51 F1

E0 B2 08 38

1C A8

D3 2E D8 2B

26

E0 B2 08 38

71 55 D4 0B

BC 64

D7 0D 85 FA

2771 55 D4 0B

BE 94 A0 EA

A0 DB

5E 26 A8 D228BE 94 A0 EA

88 95 B5 3A

BD D2

F9 C0 61 31

2988 95 B5 3AE1 DB DC 34

1F 5F

5F 4F 7C DE30

E1 DB DC 34

A6 3F CF 84

8F 1C

2E AA 7A BE31

A6 3F CF 84

93 2D DF 16

6B 81

72 F6 03 2232

93 2D DF 16

03 E9 32 D4

B5 60

A5 D6 FD 50---------------------------------------------------------------------------------------------------------６．４．３

後処理（２．４節参照）

最初に，Ｌ32 とＲ32 を交換する．
(R32, L32 ) ＝ 0000 0011 1110 1001 0011 0010 1101 0100
1001 0011 0010 1101 1101 1111 0001 0110
（ビット系列）＝ 03 E9 32 D4 93 2D DF 16 （１６進数）
次に，(R32, L32 ) ＝ (R32, L32 ) ⊕ (φ，R32)(R32, L32 ) ＝ 0000 0011 1110 1001 0011 0010 1101 0100
1001 0000 1100 0100 1110 1101 1100 0010
（ビット系列）＝ 03 E9 32 D4 90 C4 ED C2 （１６進数）
最後に，(R32, L32 ) ＝ (R32, L32) ⊕ (K36, K37, K38, K39 )＝ 1001 1100 1001 1011 0101 0100 1001 0111
0011 1101 1111 0110 1000 0101 1111 100014（ビット系列）＝ 9C 9B 54 97 3D F6 85 F8（１６進数）

暗号文ブロックは（Ｒ32，Ｌ32）で得られる．
最終結果（暗号文ブロック）は：C ＝ 1001 1100 1001 1011 0101 0100 1001 0111
0011 1101 1111 0110 1000 0101 1111 1000
（ビット系列）＝ 9C 9B 54 97 3D F6 85 F815（１６進数）

Plaintext {Ciphertext block }(64 bits)⊕(64 bits)(KN , KN+1, KN+2 , KN+3){(KN+4, KN+5 , KN+6, KN+7 )}(32 bits)(32 bits)⊕ R0{L N}

L 0{RN}

K0{KN-1}

L 0{RN }⊕L1{RN-1}

f

R0{LN}
K 1{KN-2}⊕

R1{LN-1}f

K2{K N-3}

L2{RN-2}⊕

R2{LN-2}f

KN-1{K 0}

L N-1{R1}⊕f

RN-1{L1}⊕ L N{R0}

RN{L 0}⊕(KN+4 , KN+5 , KN+6 , KN+7){(KN, K N+1, K N+2, K N+3)}

Ciphertext {Plaintext} block{ } : Deciphering

図 1 FEAL-NX のデータランダム(暗号化／復号化アルゴリズムのデータランダム 暗号化／復号化アルゴリズム)
暗号化／復号化アルゴリズム

16Key block (KL,KR) : 128bits

KLKR32 bits

A0

B0

⊕
Q1

⊕

fK

32 bits
32 bits(K0,K1)

D1

A1

B1
Q2

⊕ ⊕fK
(K2,K3)A2
fK⊕

AN/2+3

DN/2+3

D2

B2
Q3

⊕

(K4,K5)⊕fK

BN/2+3⊕

QN/2+4
KR1 ⊕ KR2 KR1(32 bits)(KN+6,KN+7)
K2(r-1): Left half of Br (16bits): Right half of Br (16bits)K2(r-1)+1
Number of iterations is (N/2)+4.

Qr=KR1 ⊕ KR2
Qr=KR1
Qr=KR2
KR=(KR1,KR2)

図 2 FEAL-NX の鍵処理

17KR2r = 1,4,7,…
r = 2,5,8,…
r = 3,6,9,…

β(16 bits)
β0

β1

S0α0S11S⊕⊕
α1f ( α,β)(32 bits)α(32 bits)

S0

⊕

⊕
α2

X2
Y

S1

X1α3

Y = S0 (X1, X2) = Rot2 ((X1+X2) mod 256)
Y = S1 (X1, X2) = Rot2 ((X1+X2+ 1) mod 256)
Y : output (8 bits), X1/ X2 : inputs (8 bits),Rot2 (Y) : a 2-bit left rotation on 8-bit data Y
図 3 FEAL-NX の関数ｆ18

αi, βi : 8 bits

α(32 bits)

α1α0

⊕

α2S1

⊕⊕S0α3

⊕

β0
β1βS0

⊕

β2 (32 bits)⊕S1β3αi,βi : 8 bits

(32 bits)fK (α, β)Note : S0/S1 are the same as S0/S1 in f-function.
図 4 FEAL-NX の関数ｆK19