(57)【要約】【課題】入力値が０元であったとしてもサイドチャネル攻撃対策に耐タンパー性を備える暗号演算処理方法を提供する。【解決手段】逆元演算する値ｘの逆元を直接的に使用せずに、値ｘを数式（１）でマスクした値を入力とし、数式（２）で示される値ｙを利用して暗号演算を行うことで、値ｘが「０」であったとしても値ｙは「０」になることはなく、値ｘを「０」としたときのサイドチャネル攻撃に対し耐タンパー性を持たせることができる。【数１】2007235913.tif 000024数式（２）：【数２】2007235913.tif 000025【選択図】なし【特許請求の範囲】
【請求項１】
暗号演算の処理中に逆元演算を行う暗号演算処理方法において、前記暗号演算処理方法は、
逆元演算する値xの逆元を直接的に使用せず、
数式（１）に基づき、前記値xをマスクｍでマスク処理するステップａ）、
ステップａ）でマスク処理した値xから数式（２）で示される値ｙを演算するステップｂ）、
を実行することを特徴とする暗号演算処理方法。
数式（１）：
【数１】
2007235913.tif 000019
数式（２）：
【数２】
2007235913.tif 000020
【請求項２】
請求項１に記載の暗号演算処理方法であって、前記ステップｂ）は、数式（３）で示される共通マスクｍ0と前記マスクｍとから得られ、数式（４）で示される一次元の参照テーブルＴを利用し、前記数式（２）で演算される前記値ｙを数式（５）から求めるステップであることを特徴とする暗号演算処理方法。
数式（３）：
【数３】
2007235913.tif 000021
数式（４）：
【数４】
2007235913.tif 000022
数式（５）：
【数５】
2007235913.tif 000023
【請求項３】
暗号演算の処理中に逆元演算を行う暗号演算処理装置であって、前記暗号演算処理装置は、
逆元演算される値xをマスクｍによって、数式（１）で示されるマスク処理する第１の手段と、第１の手段から得られる前記ｘを前記マスクｍでマスク処理した値から、前記数式（２）で示される値ｙを演算する第２の手段を備えていることを特徴とする暗号演算処理装置。
【請求項４】
請求項３に記載の暗号演算処理装置において、前記第２の手段は、
前記数式（３）で示される共通マスクｍ0と前記マスクｍとから得られ、前記数式（４）で示される一次元の参照テーブルＴとを利用し、前記数式（２）の前記値ｙを前記数式（５）から求める手段であることを特徴とする暗号演算処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、本発明は、データの暗号化／復号化を行う暗号演算処理方法および暗号演算処理装置に関し、更に詳しくは、逆元演算が実行される非線形変換を備えた暗号演算処理方法および暗号演算処理装置に関する。
【背景技術】
【０００２】
ＤＥＳやＡＥＳ（Advanced Encryption Standard）などの暗号演算機能を備えたＩＣカードにおいては、サイドチャネル攻撃と称され、ＩＣカードが暗号演算を実行しているときのサイドチャネル（消費電力波形や、電磁波、タイミング情報など）を解析することで、ＩＣカード内に機密に記憶された暗号鍵が漏洩してしまう可能性があることが知られている。
【０００３】
ＤＥＳの暗号演算においては、暗号演算への入力そのものを、乱数などによって生成されたマスクパターンを用いて加算（ＸＯＲ）マスクするマスク処理が、サイドチャネル攻撃に対し効果的とされている（例えば、特許文献１）。
【０００４】
このマスク処理では、乱数などによって生成されたマスクパターンを用いて暗号演算するデータをマスクし、暗号演算結果を出力するときに、マスクされた暗号演算結果から何らかの数学的手段を組み合わせてマスクパターンの影響を除去し、本来の暗号演算結果を算出する。
【０００５】
しかし、ＡＥＳやＣａｍｅｌｌｉａなど、逆元演算を利用する非線形変換を備えた共通鍵暗号演算においては、逆元演算があるがゆえに、上述したマスク処理をうまく利用できない問題がある。
【０００６】
逆元演算が実行される非線形変換を備えた暗号に主眼を置いたサイドチャネル攻撃対策法としては、逆元演算をも含め非線形変換の入力と出力を一意に定めるＳ−ＢＯＸテーブル（SubBytes Look-up-Table ）をマスクし、一連の非線形変換にこのマスクされたＳ−ＢＯＸテーブルを利用する方法が提案されている。
【０００７】
しかし、Ｓ−ＢＯＸテーブルをマスクする方法では、暗号演算するごとにマスクを生成し、マスクしたＳ−ＢＯＸテーブルを再生成しない限り、暗号演算中に共通のマスクを利用することになってしまい、サイドチャネル攻撃に対して脆弱になってしまう。
【０００８】
暗号演算するごとに、毎回、マスクしたＳ−ＢＯＸテーブルを複数生成し利用する方法も実現可能ではあるが、マスクしたＳ−ＢＯＸテーブルを再生成する時間が問題になるし、また、複数のマスクしたＳ−ＢＯＸテーブルを生成すると、ハードウェアのリソース（例えば、ＲＡＭ）容量が比較的小さいＩＣカードでは、マスクしたＳ−ＢＯＸテーブルを確保することが困難になってしまう。
【０００９】
マスクしたＳ−ＢＯＸテーブルを利用しないサイドチャネル攻撃対策法としては、非線形変換を処理するときのみ、使用するマスクを変更する乗算マスク法が考案されている（非特許文献２）。
【００１０】
この乗算マスク法では、マスクを乗算することで逆元演算の入力値マスク処理し、マスクした入力値の逆元を演算して利用する方法であるが、入力値が「０」の場合、マスクがどうのような値であっても、入力とマスクの乗算結果が「０」になってしまい、入力値が「０」の場合に、特徴的なサイドチャネル情報（消費電流波形など）が外に漏れてしまう問題がある（非特許文献３）。
【特許文献１】特開２０００−６６５８５号公報
【非特許文献１】Cetin K. Koc, David Naccache, Christof Paar (Eds.)              "An Implementation of DES and AES, Secure against Some Attacks"               Cryptographic Hardware and Embedded Systems CHES 2001,              LNCS 2162, pp. 309-318, 2001.              c Springer-Verlag Berlin Heidelberg 2001]
【非特許文献２】B.S. Kaliski Jr. et al. (Eds.)              "Multiplicative Masking and Power Analysis of AES".              Cryptographic Hardware and Embedded Systems CHES 2002,              LNCS 2523, pp. 198-212, 2003.
【発明の開示】
【発明が解決しようとする課題】
【００１１】
そこで、本発明は、ＡＥＳやＣａｍｅｌｌｉａに代表され、逆元演算を実行する非線形変換を備えた暗号演算処理において、入力値が「０」であったとしてもサイドチャネル攻撃対策に対して耐タンパー性を備えることのできる暗号演算処理方法および暗号演算処理装置を提供することを目的とする。
【課題を解決するための手段】
【００１２】
上述した課題を解決する第１の発明は、暗号演算の処理中に逆元演算を行う暗号演算処理方法において、前記暗号演算処理方法は、
逆元演算する値xの逆元を直接的に使用せず、
数式（１）に基づき、前記値xをマスクｍでマスク処理するステップａ）、
ステップａ）でマスク処理した値xから数式（２）で示される値ｙを演算するステップｂ）、
を実行することを特徴とする。
数式（１）：
【数１】
2007235913.tif 000002
数式（２）：
【数２】
2007235913.tif 000003
【００１３】
更に、第２の発明は、第１の発明に記載の暗号演算処理方法であって、前記ステップｂ）は、数式（３）で示される共通マスクｍ0と前記マスクｍとから得られ、数式（４）で示される一次元の参照テーブルＴを利用し、前記数式（２）で演算される前記値ｙを数式（５）から求めるステップであることを特徴とする。
数式（３）：
【数３】
2007235913.tif 000004
数式（４）：
【数４】
2007235913.tif 000005
数式（５）：
【数５】
2007235913.tif 000006
【００１４】
更に、第３の発明は、暗号演算の処理中に逆元演算を行う暗号演算処理装置であって、前記暗号演算処理装置は、
逆元演算される値xをマスクｍによって、数式（１）で示されるマスク処理する第１の手段と、第１の手段から得られる前記ｘを前記マスクｍでマスク処理した値から、前記数式（２）で示される値ｙを演算する第２の手段を備えていることを特徴とする。
【００１５】
更に、第４の発明は、第３の発明に記載の暗号演算処理装置において、前記第２の手段は、前記数式（３）で示される共通マスクｍ0と前記マスクｍとから得られ、前記数式（４）で示される一次元の参照テーブルＴとを利用し、前記数式（２）の前記値ｙを前記数式（５）から求める手段であることを特徴とする。
【発明の効果】
【００１６】
上述した本発明によれば、数式（１）を参照すればわかるように、入力値が「０」であったとしても出力値が「０」になることはなくなり、入力値を「０」としたサイドチャネル攻撃に対して耐タンパー性を備えることができる。
【００１７】
更に、数式（１）の出力を得るために数式（３）から数式（４）を利用するこで、数式（１）の出力するときの分岐条件は無くなり、分岐処理で発生するサイドチャネルの特徴波形が発生するこがなく、更に、サイドチャネル攻撃に対する耐タンパー性を高められる。
【００１８】
なお、本発明において、前記暗号演算装置とは、暗号演算機能を備えたＩＣカードのみならず、暗号演算プログラムがインストールされたパーソナルコンピュータや、あらゆる携帯可能電子機器、ＨＳＭ（Hardware Security Module)などの暗号演算専用装置を意味している。
【発明を実施するための最良の形態】
【００１９】
ここから、本発明の暗号演算処理装置をＩＣカードとしたときの実施の形態について詳細に説明する。図１は、本発明が適用されたＩＣカード１を説明する図で、ＩＣカード１は共通鍵暗号演算として、端末装置から送信されるデータをＡＥＳで暗号化／復号化する暗号演算機能を備え、このＡＥＳの暗号演算機能に本発明が適用されている。
【００２０】
図２は、図１で示したＩＣカード１に実装されるＩＣチップ２の内部構成図である。図２に示したようにＩＣカード１のＩＣチップ２には、演算機能およびＩＣチップ２が具備するデバイスを制御する機能を備えた中央演算装置２０（CPU：Central Processing Unit）、読み出し専用の不揮発性メモリ２３（ROＭ：Read Only Memory、）、電気的に書換え可能な不揮発性メモリとしてＥＥＰＲＯＭ２２（EEPROM：Electrically Erasable Programmable Read-Only Memoryの略）、揮発性メモリとしてランダムアクセスメモリ２１（RAM：Random Access Memory）、および、外部の端末装置とデータ通信するための通信Ｉ／Ｆ回路２４とを少なくとも備なえている。
【００２１】
本発明は、ＩＣカード１に実装されるＩＣチップ２の仕様をなんら限定するものではなく、ＩＣカード１の用途に適した仕様のＩＣチップ２を選択することができる。例えば、ＲＯＭ２３およびＥＥＰＲＯＭ２２の容量については限定しないし、書換え可能な不揮発性メモリはフラッシュメモリ等であっても構わない。またＩＣチップ２は乱数を生成する乱数生成回路等の図示していない他のデバイスを備えていても構わない。
【００２２】
なお、図１においては、ＩＣカード１を接触ＩＣカードとして図示しているが、本発明は何らＩＣカード１の通信方式に依存するものではなく、無線でデータ通信する非接触ＩＣカード、または、接触データ通信と非接触データ通信の２つの通信機能を備えたデュアルインターフェースＩＣカードであってもよい。加えて、ＩＣカード１は、ＩＣチップ２の近辺を短冊状に切り取った形状をしているＵＩＭ（User Identity Module）、ＳＩＭ（Subscriber Identity Module）であってもよい。
【００２３】
図１で示したＩＣカード１には、図２で示したＩＣチップ２のハードウェア資源を利用して、端末装置から送信されたデータを暗号化／復号化するために、ＡＥＳの暗号演算を処理するコンピュータプログラムが実装され、このコンピュータプログラムに、本発明は適用される。
【００２４】
ここから、本発明に係る暗号演算処理方法について詳細に説明する。本発明に係る暗号演算処理方法は、ＡＥＳの非線形変換で実行される逆元演算に適用されている。図３は、ＡＥＳで暗号化するときに非線形変換を行うSubBytes変換と、復号化するときに非線形変換するInvSubBytes変換を説明する図である。
【００２５】
図３（ａ）は、ＡＥＳで暗号化するときに非線形変換を行うSubBytes変換を説明する図で、ＡＥＳのSubBytes変換においては、ＡＥＳの初期化処理で得られる８ビットの値を入力とし、入力をガロア体GF(28)の元と見なして、GF(28)の逆元を演算した後、アファイン変換して出力を得る。
【００２６】
また、図３（ｂ）は、ＡＥＳで復号化するときに非線形変換を行うInvSubBytes変換を説明する図で、ＡＥＳで復号化するときは、ＡＥＳの初期化処理で得られる８ビットの値を入力とし、入力を逆アファイン変換した後、GF(28)の逆元を演算して出力を得る。
【００２７】
図３（ａ）および図３（ｂ）を参照すればわかるように、ＡＥＳにおいては、暗号化および復号化のいずれの場合においても逆元演算は実施され、この逆元演算に本発明を適用することで、暗号化および復号化のいずれの場合においても、ＩＣカード１にサイドチャネル攻撃に対する耐タンパー性をもたせることができる。
【００２８】
ここで、本発明の特徴となる改良型の逆元演算について説明する。まず、改良型の逆元演算を説明する前に、ガロア体GF(28)で定義される四則演算について簡単に説明しておく。
【００２９】
上述しているように、SubBytes変換（または、Inv SubBytes変換）への入力（８ビットの値）はガロア体GF(28)の元とみなされ、入力の四則演算には、一般的に利用される四則演算ではなく、ガロア体GF(28)で定義された四則演算が用いられる。
【００３０】
ＡＥＳで利用されているガロア体GF(28)における２つの値の加算は、値の二進数表現のＸＯＲ演算と定義されているため、今後ガロア体GF(28)における２つの値の加算を数式６のように記述する。同様に、ガロア体GF(28)における２つの値の乗算は、引数の二進数表現の各ビットを多項式の係数とし、多項式の積を別の特定の多項式で除算した時の剰余を「積」と定義されている。今後、ガロア体GF(28)における２つの値の乗算を数式７のように記述する。
【数６】
2007235913.tif 000007
【数７】
2007235913.tif 000008
【００３１】
また、ＡＥＳやＣａｍｅｌｌｉａ暗号で利用する場合に限り、ガロア体GF(28)における値ｘの逆元演算は、数式８で示す様に「０」を特別扱いしている。値ｘが「０」でないとき逆元はｘ-1で、値ｘが「０」のとき逆元は「０」である。
【数８】
2007235913.tif 000009
【００３２】
ここから、本発明の特徴となる改良型の逆元演算を説明する。本発明に係る改良型の逆元演算への入力と出力はそれぞれ数式９に示すとおりである。なお、数式９において、値ｘは逆元演算への本来の入力値で、値ｍは乱数などで生成したマスク値である。
【数９】
2007235913.tif 000010
【００３３】
数式４に示したように本発明に係る改良型の逆元演算では、入力ｘをマスクｍで加算マスク処理した値とマスクｍで、ｘの逆元とｍの逆元を加算した値が出力される。よって、本発明における改良型の逆元演算では、入力ｘが例え「０」であったとしても出力が「０」になることはなくなり、入力ｘを「０」とするサイドチャネル攻撃に対して耐タンパー性を備える。
【００３４】
数式９で示した出力は、入力ｘの逆元とマスクｍの逆元を加算することにより求められることは明らかであるが、数式９で示した出力は、条件付き（ｘ＝０のとき、本来の出力ではなくｍ-1になる）の加算であるため、数式９を直接的にプログラムで表現すると分岐処理が発生するため、サイドチャネル攻撃に対する耐タンパー性が弱くなってしまうことがある。
【００３５】
そこで、本発明では数式９の出力を、分岐処理を利用しない方法で得る事でサイドチャネル攻撃に対する耐タンパー性を高めている。ここから、分岐処理を使わずに数式９の出力を得る手段の内容について簡単に述べる。
【００３６】
数式９の出力は数式１０に置き換えることができる。数式１０の右辺の分母は条件付き乗算で、その条件とは、入力ｘ＝０のときのみ、本来の乗算値ではなくマスクｍの二乗になる条件である。今後、通常のガロア体GF(28)の乗算を示す記号にオーバースコアを付加し、通常のガロア体GF(28)の乗算と区別して、この条件付き乗算を表記している。
【数１０】
2007235913.tif 000011
【００３７】
数式１０における条件付き乗算は数式１１に置き換えることができる。なお、数式１１の右辺は条件付き加算で、その条件は、ｐがｍの二乗である場合のみ、本来の加算値ではなくｍの二乗になる条件である。今後、条件付き加算と通常の加算を区別するために、数式内において条件付き加算を示す記号として、加算を示す記号にオーバースコアを付加した記号を用いている。
【数１１】
2007235913.tif 000012
【００３８】
更に、数式１１は、数式１３および数式１４で定義される一次元の参照テーブルＴを利用することで、数式１２に置き換えることができる。
【数１２】
2007235913.tif 000013
【数１３】
2007235913.tif 000014
【数１４】
2007235913.tif 000015
【００３９】
そして、数式１０と数式１２とから、数式９の出力を得るための演算から分岐処理を無くした数式として、数式１５を得ることができる。数式１５を参照すればわかるように、数式１５の右辺分母は、上述した参照テーブルＴのある一つの要素との加算になるため、分岐処理は無くなり、サイドチャネル攻撃に対する耐タンパー性が高められる。
【数１５】
2007235913.tif 000016
【００４０】
数式１３および数式１４で定義される一次元の参照テーブルＴは、マスクｍを生成するごとに、数式１６で示される初期テーブルＴiniから生成されることが望ましい。初期テーブルＴiniから参照テーブルTを生成することで、マスクｍを変更したときに速やかに参照テーブルを生成できる。なお、初期テーブルＴiniは、最初に暗号演算処理を行うとき（例えば、ＩＣカードが活性化されたとき）に生成されるか、または、予めＩＣカード１のメモリに記憶されている。
【数１６】
2007235913.tif 000017
【００４１】
図４は上述した初期テーブルＴiniを生成する手順を示したフロー図で、図５は、マスクｍを用いて、初期テーブルＴiniから参照テーブルＴを生成する手順を示したフロー図である。
【００４２】
まず、最初に図４を参照しながら初期テーブルＴiniを生成する手順について説明する。この手順の最初のステップＳ１は、初期テーブルＴiniを生成するときに必要となる共通マスクｍ0≠０を乱数などを用いて生成するステップである。
【００４３】
次のステップＳ２は、ステップＳで生成した共通マスクｍ0のGF(28)上の二乗を算出するステップである。そして、次のステップＳ３では、数式１６に従い、初期テーブルＴiniの各要素Ｔ[i](i=0〜255)を演算し記憶するステップである。このステップをもって、初期テーブルＴiniを生成する手順は終了する。
【００４４】
次に、図５を参照しながら、初期テーブルＴiniを利用して参照テーブルＴを生成する手順について説明する。この手順の最初のステップＳ１０は、図４の手順で生成した初期テーブルＴｉｎｉの要素の中で、初期テーブルＴini[m2]の要素の値のみを変更し、数式１４で定義される参照テーブルＴを生成するステップである。このステップをもって、初期テーブルＴiniを利用して参照テーブルＴを生成する手順は終了する。
【００４５】
ここから、数式１５を用いて改良型の逆元演算を行う一連の手順について説明する。図６は、本発明に係る改良型の逆元演算の一連の手順を示したフロー図である。この手順の最初のステップＳ２０は、数式１６で示した初期テーブルＴiniを生成するステップである。初期テーブルＴiniを最初から生成するときは、図４で示されたフローが実行され、ＩＣカード１のＲＡＭ２１に初期テーブルＴiniが生成される。
【００４６】
また、ＩＣカード１のＲＯＭ２３またはＥＥＰＲＯＭ２２に共通マスクｍ0と初期テーブルＴiniが記憶されているときは、このステップでは記憶された共通マスクｍ0と初期テーブルＴiniの内容がＲＡＭ２１にコピーされる。
【００４７】
次のステップＳ２１は、改良型の逆元演算の入力に加算マスク処理されるマスクｍが生成されるステップである。次のステップＳ２２は、ステップＳ２１で生成されたマスクｍ用の参照テーブルＴを生成するステップである。このステップでは、ステップＳ２０でＲＡＭ２１に生成された初期テーブルＴiniからマスクｍ用の参照テーブルＴが、上述した手順で生成される。
次のステップＳ２３は、マスクｍ用の参照テーブルＴを利用して改良型の逆元演算が実行されるステップである。このステップでは、数式９の出力が数式１５によって演算される。
【００４８】
次のステップＳ２４は処理が分岐するステップで、ステップＳ２２で変換した参照テーブルＴを利用して逆元演算するときはステップＳ２３に戻り、マスクｍを再生成するときはステップＳ２５に進み、処理を終了（例えば、ＩＣカード１の非活性化）するときはこの手順を終了する。
【００４９】
マスクｍを再生成するときに実行されるステップＳ２５は、ＲＡＭ２１に記憶された参照テーブルＴを初期テーブルＴiniに戻すステップである。このステップでは、数式１７が実行され、参照テーブルＴを初期テーブルＴiniに戻すことができる。
【数１７】
2007235913.tif 000018
【００５０】
これまでは、ＡＥＳを例に取りながら説明したが、上述しているように本発明は非線形変換で実行される逆元演算に特徴を持たせているため、本発明は、ＡＥＳのみならず、ガロア体GF(28)の逆元演算を行うＣａｍｅｌｌｉａなどの暗号演算にも適用することが可能である。
【図面の簡単な説明】
【００５１】
【図１】本発明が適用されたＩＣカードを説明する図。
【図２】ＩＣカードに実装されるＩＣチップの内部構成図。
【図３】SubBytes変換とInvSubBytes変換を説明する図。
【図４】初期テーブルＴiniを生成する手順を示したフロー図。
【図５】初期テーブルＴiniから参照テーブルＴを生成する手順を示したフロー図。
【図６】改良型の逆元演算の一連の手順を示したフロー図。
【符号の説明】
【００５２】
１  ＩＣカード
２  ＩＣチップ
【図１】
2007235913.tif 000026
【図２】
2007235913.tif 000027
【図３】
2007235913.tif 000028
【図４】
2007235913.tif 000029
【図５】
2007235913.tif 000030
【図６】
2007235913.tif 000031