Vol.3 No.1 2010
64/100

研究論文:暗号モジュールの安全な実装を目指して(佐藤ほか)−61−Synthesiology Vol.3 No.1(2010)れたプロセッサやプロセッサマクロを利用することで、暗号ソフトウエアの評価実験を行うことも可能である。図4の暗号LSIは、Web公開した暗号回路を、90 nmおよび130 nmのCMOSスタンダードセルプロセスで製造したものである。このLSIはSASEBO-Rに搭載して使用する。SASEBO-GIIはXilinx®社のFPGAを用いた最新のボードで、SASEBO-Gに対して4~7倍のロジック容量を有しながら、ボード面積は1/3と大幅な小型化と高集積化を実現している。また、サイドチャネル攻撃実験以外の用途として最先端の部分再構成機能も有し、より高度なハードウエアセキュリティシステムの研究を可能としている。なお、初期のSASEBOボードは、ハードウエアモジュールとして初めてJCMVP®認証を取得しており[24]、その全ての設計情報とソースコードを安全な実装の例として、SASEBOのWebサイトで公開している。そして、SASEBO-GIIも同様にJCMVP®認証の取得を予定している。4.3 RSA暗号回路への単純電力解析ここでは実際のサイドチャネル攻撃の例として、RSA暗号をSASEBOボードのFPGA上に実装し、電力波形から暗号の鍵を直接読み取る単純電力解析(SPA: Simple Power Analysis)の実験結果を示す。RSA暗号の暗号化処理と、その逆変換である復号処理は、それぞれ式(1)と(2)に示したべき乗剰余算で定義される。暗号化前のデータである平文xは公開鍵eとnによって暗号文yに暗号化され、暗号文yは秘密鍵dによって平文xに復号される。ここで、各変数には1,024ビット以上と非常に大きな数が用いられ、公開鍵から秘密鍵を求めることは理論的に不可能ではないが、計算量的に困難とされている。 暗号化 : y = xe mod n (1) 復号 : x = yd mod n (2)RSA暗号のべき乗剰余算では、指数eあるいはdのビットパターンに応じて乗剰余算と自乗剰余算が繰り返される。SPAは、その演算の処理時間[21]やその電力波形の違いを調べて、秘密鍵dを求めようとするものである。図5は指数d=25=11001(2)を左側のビットから調べ、0ならば自乗剰余算を、1ならば自乗剰余算と乗剰余算(×x)を実行する左バイナリ法の例である。このとき自乗算と乗算の電力波形を見分けることができれば、それがそのまま秘密鍵となる。しかし、毎回異なる中間値に対する乗算と自乗算の差が、常に観測できるとは限らない。そこで、入力データを工夫して、電力波形上の演算による違いを強調する手法が研究されている。図6は、SASEBO-R に搭載された130 nmスタンダードセルライブラリによる暗号LSIおよび、SASEBO-G上のFPGAに実装されたRSA暗号回路が発生する電力波形の一部である。この回路は不特定入力に対して乗算と自乗算の波形を見分けることはできないが、回路アーキテクチャとして採用した1.024ビットのモンゴメリ乗算アルゴリズム攻撃に有効なx=2−1024という特殊な値を入力することで、乗算(M)と自乗算(S)をはっきりと見分けることが可能となった。RSAのSPA対策法としては、秘密鍵のビットパターンが0のときにも乗算をダミーとして挿入するのが最も単純かつ基本的なものであるが、入力データを操作することでこのようなダミー乗算を見分ける攻撃法が提案されている。我々は、これらさまざまな攻撃法と対策法の効果をSASEBOの実験を通して明らかにすると同時に、新たな攻撃法と対策法の研究開発も行っている。 4.4 RSA暗号回路への差分電力解析本節では、共通鍵暗号の標準アルゴリズムとして最も普及しているAESのアルゴリズムを示した後、複数の電力波形を用いた攻撃法である差分電力解析(DPA: Differential Power Analysis)について述べる[23]。AESは、128ビットのデータを128~256ビットの鍵を用いて暗号化する。図7は128ビット鍵の場合の暗号化アルゴリズムを示している。128ビットのデータは4×4の16バイトの行列に配置され、SubBytes、ShiftRows、MixColumns、AddRoundKeyの4つの変換を1セットのラウンド関数として、10ラウンドの処理が行われる。128ビットの秘密鍵は鍵スケジューラによって簡単な変換が繰図6 SASEBO-RおよびSASEBO-G上のRSA回路に対するSPA(x=2−1024)図5 左バイナリ法で実装したRSAに対するSPA(a) ASIC (b) FPGA自乗算自乗算自乗算自乗算乗算乗算1100x25 = x11001(2) = (((x2×x)2)2)2×x mod n

元のページ 

10秒後に元のページに移動します

※このページを正しく表示するにはFlashPlayer9以上が必要です