べき乗剰余算は通常,バイナリ法を用いて剰余乗算の繰り返しで実現されている.
さらに剰余乗算の高速化手法として知られる Montgomery の方法(Montgomery乗算
と呼ぶ)を用いていると仮定する.図III.14にMontgomery乗算
の,図III.15にMontgomery乗算を用いたべき乗剰余算のアルゴリズム
を示す.この節では図III.15の
,
をそれぞれ単に2乗算,乗算と呼ぶことにする.
図III.14から分かるとおり,Montgomery乗算には条件分岐があり,
減算
が1回多く行われる場合がある.
したがってMontgomery乗算はデータによって処理時間が異なるため,
タイミング解析の対象となる.
以後この減算を減算Aと呼ぶことにする.
秘密情報
の推定はMSB (Most Significant Bit, 最上位ビット) から
順に1ビットずつ進めていく.
から
までの
ビットを知っているときに
の値を推定する方法を述べる.
まず,メッセージ
を入力して最初の
回のループを行い,
に
よる乗算の手前まで計算が進んだ状況を考える.そのときの
の値を
とする.
から
までの値を知っていると仮定しているので,
攻撃者は
の値を知ることができる.
次にメッセージ全体の集合を,
の値と,Montgomery乗算での
減算Aの有無により4つに分ける.
のとき.次に行われる演算は乗算と2乗算である.
2乗算で減算Aが行われるメッセージ
の集合を
,行われないメッセージの
集合を
とする.
のとき.乗算は行われずに2乗算
のみが行われる.この2乗算で減算Aが
行われるメッセージ
の集合を
,行われないメッセージの集合を
とする.
このとき,
と
の間の処理時間の差が大きければ
であり,
と
の間の処理時間の差が大きければ
であると推定できる.
この方法を実際に適用した結果,128ビットべき乗剰余算では約10,000個の
メッセージで,512ビットべき乗剰余算は約350,000個のメッセージで
秘密鍵
が完全に復元でき,その復元の速度は,前者が4ビット/秒,後者が
1ビット/分であったと報告されている [DK+98].
Rijndaelの暗号化アルゴリズムの概要を図III.16に示す [DR98].
暗号化は1番目の拡大鍵と加算を行った後にラウンド関数に入る.
ラウンド関数は,ByteSub, ShiftRow, MixColumn,
AddRoundKey と呼ばれる4つの変換部からなる.
それぞれバイト単位での変換であり,ByteSubはS-boxによる置換,
ShiftRowはある定数によるシフト,AddRoundKeyは
拡大鍵との加算を行うもので,処理時間はデータによらず一定となる.
残りのMixColumnでは,処理の中にGF
上での'02'倍算がある.(ここで,
GF
の元を'02'のように表している.) Rijndaelでは,
GF
を定義する多項式を
としているため,'02'倍算を
次のように行うことができる.
このように実装したとき,キャリーが発生したかどうかでXORが行われるので, 処理時間にデータに依存した差が生じる.これは'02'倍算される バイトの最上位ビットの値に依存している.
タイミング解析により1番目の拡大鍵(
とする,最初のAddRoundKey
で平文に加算される拡大鍵)を推定する方法を述べる.
平文を入力し,第1ラウンドのMixColumnでの'02'倍算の手前まで計算が
進んだ状況を考える
('02'倍算は平文のすべてのバイトに対して
行われるが,任意に選んだある1つのバイトに注目する).
ByteSub,ShiftRow
での変換は暗号化鍵に依存していないので,
'02'倍算されるバイトの値は
が分かれば攻撃者は知ることができる.
逆に'02'倍算されたバイトの値が分かれば
を知ることができる.
平文のうち,第1ラウンドの'02'倍算に影響するバイトの値が
,その他の
バイトはランダムであるようなものの集合を
とする.
に含まれる平文を多数入力して暗号化時間を計測することで,
'02'倍算において'1B'とのXORが行われたかどうか推定できる.
つまり'02'倍算されるバイトのMSB,したがって
のある1ビットの
値を推定できる.
なる
に対して同じことを行い,
の別の1ビットを推定できる.これを繰り返すことで
を
完全に推定できる.
以外の拡大鍵についても同様であり,すべての拡大鍵を推定する
ことができる.
128ビットブロック,128ビット鍵の場合にこの攻撃を適用した結果, 鍵1バイトあたり約3000個の平文で鍵を完全に復元できた,と報告されている [KQ99].
中国剰余定理を用いたRSAの処理でもべき乗剰余算があるが,今回は法が 秘密鍵で攻撃者にとって未知のため,III.3.2.2.1節で述べた方法は使えない.
注目するステップは最初の2ステップである.
という
除算の処理時間は
か
かで処理時間が異なる.
前者のほうが後者より処理時間が大きい.そのため,その処理時間を計ることで
の大きさをある程度絞り込むことができる.
についても同様である.
秘密鍵データ
を推定するために注目するステップは
の計算である.
の計算は通常,
と
との剰余乗算で
行われるが,
の処理時間のほうに注目する.
ここで
は
のハッシュ値であり,攻撃者はその処理時間を計算する
ことができる.また,この値は
程度であるため,
の
処理時間はほとんど
とみなせる.
は署名の一部であり攻撃者に
とって既知である.したがって,
の処理時間から,
の値を
ある程度絞ることができる.すると
の上位ビットを推定することができる.
の上位ビットが分かると
の上位ビットも分かるため,
さらに
の次の上位ビットの値を推定していくことが可能である.
このように繰り返していくことで,
を推定することが可能となる.