ラインダールSボックスは、ラインダール暗号で使用される置換ボックス(ルックアップテーブル)であり、高度暗号化標準(AES)暗号化アルゴリズムの基礎となっています。[1]
前方Sボックス
S-box は、8 ビットの入力cを 8 ビットの出力s = S ( c )にマッピングします。入力と出力は両方ともGF(2)上の多項式として解釈されます。まず、入力は、ラインダールの有限体GF(2 8 ) = GF(2) [ x ]/( x 8 + x 4 + x 3 + x + 1)内の逆数にマッピングされます。単位元であるゼロは、それ自身にマッピングされます。この変換は、発明者のKaisa NybergにちなんでNyberg S-boxとして知られています。[2] 次に、逆数は、次のアフィン変換を使用して変換されます。
ここで、[ s 7 , ..., s 0 ]はSボックス出力であり、[ b 7 , ..., b 0 ]はベクトルとしての乗法逆数です。
このアフィン変換は、バイトをベクトルとして複数回回転させた合計であり、加算は XOR 演算です。
ここで、b は乗法逆数、はビット単位の XOR演算子、は左ビット単位の循環シフト、定数63 16 = 01100011 2は16 進数で表されます。
アフィン変換の同等の定式化は
ここで、s、b、cは8ビット配列、cは01100011 2であり、添え字はインデックス付きビットへの参照を示します。[3]
もう一つの同等のものは次のとおりです。
- [4] [5]
ここで、はの多項式乗算であり、ビット配列として取られます。
逆Sボックス
逆 S ボックスは、単純に S ボックスを逆に実行したものです。たとえば、 b8 16の逆 S ボックスは9a 16です。これは、最初に入力値の逆アフィン変換を計算し、次に乗法逆を計算して計算されます。逆アフィン変換は次のとおりです。
逆アフィン変換は、バイトの複数の回転の合計をベクトルとして表します。ここで、加算は XOR 演算です。
ここで、はビット単位の XOR演算子、は左ビット単位の循環シフト、定数5 16 = 00000101 2は16 進数で表されます。
設計基準
Rijndael S-box は、線形および差分暗号解読に耐性を持つように特別に設計されました。これは、入力/出力ビットの線形変換間の相関を最小限に抑え、同時に差分伝播確率を最小限に抑えることによって実現されました。
Rijndael S-box は Rijndael 暗号[1]で置き換えることができるため、静的 S-box を利用する暗号に組み込まれたバックドアの疑いは払拭されます。著者らは、Rijndael 暗号構造は、相関/差分伝播特性が「平均的」な S-box が使用された場合でも、差分および線形暗号解析に対して十分な耐性を提供できると主張しています (Rijndael S-box の「最適な」特性を参照)。
C言語での実装例
次のCコードは S ボックスを計算します。
#include <stdint.h>
#ROTL8(x,shift) を定義します ((uint8_t) ((x) << (shift)) | ((x) >> (8 - (shift))))
void initialize_aes_sbox ( uint8_t sbox [ 256 ]) { uint8_t p = 1 , q = 1 ; /* ループ不変条件: ガロア体で p * q == 1 */ do { /* p を 3 倍にする */ p = p ^ ( p << 1 ) ^ ( p & 0x80 ? 0x1B : 0 );
/* q を 3 で割ります (0xf6 を掛け算するのと同じです) */
q ^= q << 1 ; q ^= q << 2 ; q ^= q << 4 ; q ^= q & 0x80 ? 0x09 : 0 ;
/* アフィン変換を計算します */
uint8_t xformed = q ^ ROTL8 ( q , 1 ) ^ ROTL8 ( q , 2 ) ^ ROTL8 ( q , 3 ) ^ ROTL8 ( q , 4 );
sbox [ p ] = xformed ^ 0x63 ; } while ( p != 1 );
/* 0 は逆がないので特別なケースです */
sbox [ 0 ] = 0x63 ; }
参考文献
- ^ ab 「Rijndaelブロック暗号」(PDF) 。 2013年11月11日閲覧。
- ^ Nyberg K. (1991) 完全非線形 S ボックス。In: Davies DW (eds) Advances in Cryptology – EUROCRYPT '91。EUROCRYPT 1991。Lecture Notes in Computer Science、vol 547。Springer、ベルリン、ハイデルベルク
- ^ 「Advanced Encryption Standard」(PDF)。FIPS PUB 197:公式AES標準。連邦情報処理標準。2001年11月26日。 2010年4月29日閲覧。
- ^ Jörg J. Buchholz (2001-12-19). 「Matlab による Advanced Encryption Standard の実装」(PDF)。
- ^ Jie Cui、Liusheng Huang、Hong Zhong、Chinchen Chang、Wei Yang (2011 年 5 月)。「改良された AES S-box とそのパフォーマンス分析」(PDF)。2016 年 3 月 4 日のオリジナル(PDF)からアーカイブ。
