(57)【要約】【課題】非線形演算を含む演算回路の回路規模を削減し、かつ、サイドチャネル攻撃への対策を可能にした暗号処理装置を提供すること。【解決手段】SubBytes演算部とInvSubBytes演算部を一体化した演算部において、アフィン変換部５１は、固定マスクｍｆｘ１付きデータを入力し、固定マスクｍｆｘ２付き変換データを出力することを前提とする。ＸＯＲ演算部６１，６２はデータのマスクを一時マスクｍ１から固定マスクｍｆｘ１に付け替える。ここで、固定マスクｍｆｘ１はアフィン変換部５１によって不変であるとする。この結果、復号時にアフィン変換部５１の後で固定マスクｍｆｘ１の付け直しが不要となる。５３逆元演算部の出力データに付けられる固定マスクｍｆｘ２もアフィン変換部５２によって不変であるとする。この結果、暗号時にアフィン変換部５２の後で固定マスクｍｆｘ２の付け替えが不要となる。【選択図】      図５
2010141430.tif 000002
【特許請求の範囲】
【請求項１】
非線形演算と線形演算とを含む暗号演算及び復号演算を行う暗号処理装置であって、
演算対象データを第1の一時マスクデータでマスクした第１のデータを入力し、該第１のデータについて、該第1の一時マスクデータから、第１の線形演算について不変の値である第1の固定マスクデータへの付け替えを行って、該演算対象データを該第1の固定マスクデータでマスクした第２のデータを出力する第1のマスク付替部と、
前記第２のデータを入力し、該第２のデータに前記第1の線形演算を施して、前記演算対象データに対して前記第１の線形演算を施した結果である第1の結果データを前記第1の固定マスクデータでマスクした第３のデータを出力する第１の線形演算部と、
前記第２のデータ及び前記第３のデータを入力し、暗号演算時には該第２のデータを、復号演算時には該第３のデータをそれぞれ選択して出力する第１の選択部と、
暗号演算時には、前記第２のデータを入力し、該第２のデータに非線形演算を施して、前記演算対象データに対して該非線形演算を施した結果を第２の線形演算について不変の値である第２の固定マスクデータでマスクした第４のデータを出力し、復号演算時には、前記第３のデータを入力し、該第３のデータに該非線形演算を施して、前記第１の結果データに対して該非線形演算を施した結果である第２の結果データを前記第２の固定マスクデータでマスクした第５のデータを出力する非線形演算部と、
前記第４のデータ又は前記第５のデータを入力し、該第４のデータ又は該第５のデータに前記第２の線形演算を施して、前記非線形演算の結果である第３の結果データに対して該第２の線形演算を施した結果である第４の結果データを前記第２の固定マスクデータでマスクした第６のデータを出力する第２の線形演算部と、
前記第５のデータ及び前記第６のデータを入力し、暗号演算時には該第６のデータを、復号演算時には該第５のデータをそれぞれ選択して出力する第２の選択部と、
暗号演算時には、前記第６のデータを入力し、該第６のデータについて、前記第２の固定マスクデータから、第２の一時マスクデータへの付け替えを行って、前記第４の結果データを該第２の一時マスクデータでマスクした第７のデータを出力し、復号演算時には、前記第５のデータを入力し、該第５のデータについて、前記第２の固定マスクデータから、該第２の一時マスクデータへの付け替えを行って、前記第２の結果データを該第２の一時マスクデータでマスクした第８のデータを出力する第２のマスク付替部とを備えたことを特徴とする暗号処理装置。
【請求項２】
前記第１のデータを入力し、該第１のデータについて、前記第1の一時マスクデータから、前記第１の線形演算部により前記第１の線形演算を施した場合に前記第1の固定マスクデータを与える第３の固定マスクデータへの付け替えを行って、該演算対象データを該第３の固定マスクデータでマスクした第９のデータを出力する第３のマスク付替部を更に備え、
前記第１の線形演算部は、復号演算時には、前記第９のデータを入力し、該第９のデータに前記第1の線形演算を施して、前記第３のデータを出力することを特徴とする請求項１に記載の暗号処理装置。
【請求項３】
前記第1の固定マスクデータを、前記第１の線形演算部による前記線形演算について不変でない値とし、
前記第１の線形演算部は、前記第２のデータを入力し、該第２のデータに前記第1の線形演算を施して、前記第１の結果データを前記第1の固定マスクデータに対する前記第１の線形演算の結果によるマスクデータでマスクした第１０のデータを出力し、
前記暗号処理装置は、前記第１０のデータを入力し、該第１０のデータについて、前記第1の固定マスクデータに対する前記第１の線形演算の結果によるマスクデータから、前記第1の固定マスクデータへの付け替えを行って、前記第３のデータを出力する第４のマスク付替部を更に備えたことを特徴とする請求項１に記載の暗号処理装置。
【請求項４】
前記第２の固定マスクデータを、前記第２の線形演算部による前記線形演算について不変でない値とし、
前記第２の線形演算部は、前記第４のデータ又は前記第５のデータを入力し、該第４のデータ又は該第５のデータに前記第２の線形演算を施して、前記第４の結果データを前記第２の固定マスクデータに対する前記第２の線形演算の結果によるマスクデータでマスクした第１１のデータとして出力し、
前記暗号処理装置は、前記第１１のデータを入力し、該第１１のデータについて、前記第２の固定マスクデータに対する前記第２の線形演算の結果によるマスクデータから、前記第２の固定マスクデータへの付け替えを行って、前記第６のデータを出力する第５のマスク付替部を更に備えたことを特徴とする請求項１ないし３のいずれか１項に記載の暗号処理装置。
【請求項５】
前記第１の一時マスクデータと前記第２の一時マスクデータとの一方又は両方について、当該一時マスクデータ中における０の個数と１の個数とを同じ又はほぼ同じにしたことを特徴とする請求項１ないし４のいずれか１項に記載の暗号処理装置。
【請求項６】
前記第１の固定マスクデータと前記第２の固定マスクデータとの一方又は両方について、当該固定マスクデータ中における０の個数と１の個数とを同じ又はほぼ同じにしたことを特徴とする請求項１ないし５のいずれか１項に記載の暗号処理装置。
【請求項７】
前記第１の一時マスクデータと、前記第２の一時マスクデータとを独立して生成するマスクデータ生成部を更に備えたことを特徴とする請求項１ないし６のいずれか１項に記載の暗号処理装置。
【請求項８】
前記第２の一時マスクデータを前記第１の一時マスクデータと同一とし、
前記暗号処理装置は、前記第１の一時マスクデータを生成するマスクデータ生成部を更に備えたことを特徴とする請求項１ないし６のいずれか１項に記載の暗号処理装置。
【請求項９】
前記第１の固定マスクデータと、前記第２の固定マスクデータとを独立したものとしたことを特徴とする請求項１ないし８のいずれか１項に記載の暗号処理装置。
【請求項１０】
前記第２の固定マスクデータを前記第１の固定マスクデータと同一としたことを特徴とする請求項１ないし８のいずれか１項に記載の暗号処理装置。
【請求項１１】
前記非線形演算部は、前記第1の固定マスクデータ及び前記第２の固定マスクデータに対応して予め用意されたテーブルを用いて構成されたことを特徴とする請求項１ないし１０のいずれか１項に記載の暗号処理装置。
【請求項１２】
前記線形演算はアフィン変換であり、前記非線形演算はガロア体上の逆元演算であることを特徴とする請求項１ないし１１のいずれか１項に記載の暗号処理装置。
【請求項１３】
前記暗号処理装置は共通鍵暗号方式ＡＥＳに従ったものであることを特徴とする請求項１ないし１２のいずれか１項に記載の暗号処理装置。
【請求項１４】
前記暗号演算は、SubBytes演算であり、前記復号演算は、InvSubBytes演算であることを特徴とする請求項１３に記載の暗号処理装置。
【請求項１５】
前記一時マスクデータを、MixColumns演算及びInvMixColumns演算について不変の値としたことを特徴とする請求項１３または１４に記載の暗号処理装置
【請求項１６】
非線形演算と線形演算とを含む暗号演算及び復号演算を行う暗号処理装置の演算方法であって、
前記暗号処理装置の備える第1のマスク付替部が、演算対象データを第1の一時マスクデータでマスクした第１のデータを入力し、該第１のデータについて、該第1の一時マスクデータから、第１の線形演算について不変の値である第1の固定マスクデータへの付け替えを行って、該演算対象データを該第1の固定マスクデータでマスクした第２のデータを出力するステップと、
前記暗号処理装置の備える第１の線形演算部が、前記第２のデータを入力し、該第２のデータに前記第1の線形演算を施して、前記演算対象データに対して前記第１の線形演算を施した結果である第1の結果データを前記第1の固定マスクデータでマスクした第３のデータを出力するステップと、
前記暗号処理装置の備える第１の選択部が、前記第２のデータ及び前記第３のデータを入力し、暗号演算時には該第２のデータを、復号演算時には該第３のデータをそれぞれ選択して出力するステップと、
前記暗号処理装置の備える非線形演算部が、暗号演算時には、前記第２のデータを入力し、該第２のデータに非線形演算を施して、前記演算対象データに対して該非線形演算を施した結果を第２の線形演算について不変の値である第２の固定マスクデータでマスクした第４のデータを出力し、復号演算時には、前記第３のデータを入力し、該第３のデータに該非線形演算を施して、前記第１の結果データに対して該非線形演算を施した結果である第２の結果データを前記第２の固定マスクデータでマスクした第５のデータを出力するステップと、
前記暗号処理装置の備える第２の線形演算部が、前記第４のデータ又は前記第５のデータを入力し、該第４のデータ又は該第５のデータに前記第２の線形演算を施して、前記非線形演算の結果である第３の結果データに対して該第２の線形演算を施した結果である第４の結果データを前記第２の固定マスクデータでマスクした第６のデータを出力するステップと、
前記暗号処理装置の備える第２の選択部が、前記第５のデータ及び前記第６のデータを入力し、暗号演算時には該第６のデータを、復号演算時には該第５のデータをそれぞれ選択して出力するステップと、
前記暗号処理装置の備える第２のマスク付替部が、暗号演算時には、前記第６のデータを入力し、該第６のデータについて、前記第２の固定マスクデータから、第２の一時マスクデータへの付け替えを行って、前記第４の結果データを該第２の一時マスクデータでマスクした第７のデータを出力し、復号演算時には、前記第５のデータを入力し、該第５のデータについて、前記第２の固定マスクデータから、該第２の一時マスクデータへの付け替えを行って、前記第２の結果データを該第２の一時マスクデータでマスクした第８のデータを出力するステップとを有することを特徴とする演算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号処理装置及び演算方法に関する。
【背景技術】
【０００２】
攻撃対象物の内部に格納されている秘密情報を取得する攻撃手法として、該対象物を破壊せずに攻撃を行う「非破壊攻撃」がある。非破壊攻撃には、攻撃対象物を誤動作させることによって、該攻撃対象物から秘密情報に関するデータを取得する「故障利用攻撃」、暗号演算の実行時の消費電力又は漏えい電磁波を測定し、その測定データと攻撃者により推定された演算データとの間の統計解析を行うことによって、該攻撃対象物の秘密情報を推定する差分電力解析攻撃（ＤＰＡ:Differential Power Analysis）又は差分電磁界解析（ＤＥＭＡ:Differential Electro-Magnetic Analysis）などを含む「サイドチャネル攻撃」などがある。
【０００３】
サイドチャネル攻撃において、攻撃者は、入力データの値及び出力データの値並びに攻撃対象の暗号アルゴリズムの情報を有している必要がある。なぜなら、サイドチャネル攻撃では、その攻撃手順において、演算途中のデータの推定が行われるからである。
【０００４】
具体的には、まず、攻撃者により秘密情報が推定され、次に、その推定された秘密情報を用いて、入力データと暗号アルゴリズムの情報とから、攻撃対象の演算途中のデータが求められる。次に、この推測された演算データと測定された消費電力又は漏曳電磁波との相関を計算し、推定された演算データと消費電力又は漏曳電磁波との間に相関があるかどうかが調べられる。かりに、それらの間に相関が認められた場合は、秘密情報が正しく推定できたことになり、よって、攻撃者が攻撃に成功したことになる。
【０００５】
このようにサイドチャネル攻撃は、攻撃対象の演算途中のデータを正しく推定することができ、かつ、推定された演算データが攻撃対象の測定データとの相関を有する場合に、攻撃に成功する。
【０００６】
そのため、サイドチャネル攻撃に対しては、演算途中のデータを攻撃者が推定できないようにする対策が有効である。このことに着目して、サイドチャネル攻撃への対策方法がいくつか提案されている。その一つにデータマスク法という対策技術がある。データマスク法は、攻撃対象となった装置の暗号演算時のデータを、攻撃者が推定できない値にするために、攻撃者が分らない値（例えば、乱数）を用いて、演算途中のデータをマスクする手法である。データマスク法による対策においては、攻撃対象となる演算途中のデータは乱数などによってマスクされているため、攻撃者は、マスクデータの値が分からないかぎり、その演算途中のデータを正しく推定することができない。そのため、攻撃者が消費電力や漏洩電磁波を測定し、測定データと攻撃者により推定された演算途中のデータとの相関を求めても、攻撃対象の暗号演算時のデータは乱数でマスクされているために、測定されたデータと推定された演算データとの相関はなく、よって、攻撃には成功しない。
【０００７】
ところで、非特許文献１には、ＦＩＰＳ（Federal Information Processing Standards  197）で仕様が定義された共通鍵暗号方式ＡＥＳ（Advanced Encryption Standard）用の演算回路として、暗号演算時に用いるSubBytes（サブバイト）演算回路と復号演算時に用いるInvSubBytes（逆サブバイト）演算回路とを一体化し、切り替え信号によって、SubBytes演算とInvSubBytes演算とを切り替えて使用するようにした演算回路が開示されている。これによって、ハードウェアにより実装したときの回路規模を削減することができる。しかし、非特許文献１に開示された演算回路においては、サイドチャネル攻撃への対策が考慮されていない。
【非特許文献１】http://www.cqpub.co.jp/dwm/contents/0072/dwm007201511.pdf
【発明の開示】
【発明が解決しようとする課題】
【０００８】
従来、非線形演算を含む演算回路で、回路規模の削減と、かつ、サイドチャネル攻撃への対策とを考慮したものは、知られていなかった。
【０００９】
本発明は、上記事情を考慮してなされたもので、非線形演算を含む演算回路の回路規模を削減し、かつ、サイドチャネル攻撃への対策を可能にした暗号処理装置及び演算方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明は、非線形演算と線形演算とを含む暗号演算及び復号演算を行う暗号処理装置であって、演算対象データを第1の一時マスクデータでマスクした第１のデータを入力し、該第１のデータについて、該第1の一時マスクデータから、第１の線形演算について不変の値である第1の固定マスクデータへの付け替えを行って、該演算対象データを該第1の固定マスクデータでマスクした第２のデータを出力する第1のマスク付替部と、前記第２のデータを入力し、該第２のデータに前記第1の線形演算を施して、前記演算対象データに対して前記第１の線形演算を施した結果である第1の結果データを前記第1の固定マスクデータでマスクした第３のデータを出力する第１の線形演算部と、前記第２のデータ及び前記第３のデータを入力し、暗号演算時には該第２のデータを、復号演算時には該第３のデータをそれぞれ選択して出力する第１の選択部と、暗号演算時には、前記第２のデータを入力し、該第２のデータに非線形演算を施して、前記演算対象データに対して該非線形演算を施した結果を第２の線形演算について不変の値である第２の固定マスクデータでマスクした第４のデータを出力し、復号演算時には、前記第３のデータを入力し、該第３のデータに該非線形演算を施して、前記第１の結果データに対して該非線形演算を施した結果である第２の結果データを前記第２の固定マスクデータでマスクした第５のデータを出力する非線形演算部と、前記第４のデータ又は前記第５のデータを入力し、該第４のデータ又は該第５のデータに前記第２の線形演算を施して、前記非線形演算の結果である第３の結果データに対して該第２の線形演算を施した結果である第４の結果データを前記第２の固定マスクデータでマスクした第６のデータを出力する第２の線形演算部と、前記第５のデータ及び前記第６のデータを入力し、暗号演算時には該第６のデータを、復号演算時には該第５のデータをそれぞれ選択して出力する第２の選択部と、暗号演算時には、前記第６のデータを入力し、該第６のデータについて、前記第２の固定マスクデータから、第２の一時マスクデータへの付け替えを行って、前記第４の結果データを該第２の一時マスクデータでマスクした第７のデータを出力し、復号演算時には、前記第５のデータを入力し、該第５のデータについて、前記第２の固定マスクデータから、該第２の一時マスクデータへの付け替えを行って、前記第２の結果データを該第２の一時マスクデータでマスクした第８のデータを出力する第２のマスク付替部とを備えたことを特徴とする。
【発明の効果】
【００１１】
本発明によれば、非線形演算を含む演算回路の回路規模を削減し、かつ、サイドチャネル攻撃への対策を可能にすることができる。
【発明を実施するための最良の形態】
【００１２】
以下、図面を参照しながら本発明の実施形態について説明する。
【００１３】
本実施形態では、暗号方式として、共通鍵暗号方式ＡＥＳを用いる場合を例にとって説明する。
【００１４】
まず、本実施形態に係る暗号処理装置の説明に先立って、従来の暗号処理装置について説明する。
【００１５】
共通鍵暗号方式ＡＥＳでは、暗号演算時に用いられる３つの基本演算、すなわち、ShiftRows（シフトロー）演算、SubBytes（サブバイト）演算、MixColumns（ミックスカラム）演算と、復号演算時に用いられる３つの基本演算、すなわち、InvShiftRows（逆シフトロー）演算、InvSubBytes（逆サブバイト）演算、nvMixColumns（逆ミックスカラム）演算と、暗号演算時及び復号演算時に用いられる基本演算、すなわち、AddRoundKey（加算ラウンド鍵）が定義されている。
【００１６】
ここで、SubBytes演算とInvSubBytes演算は、いずれも、２８のガロア体（GF(2８)）上の逆元を求める逆元演算と、Affine（アフィン）変換とを組み合わせたものである。すなわち、SubBytes演算では、GF(2８)上の逆元演算、アフィン変換の順に演算を行い、InvSubBytes演算では、アフィン変換、GF(2８)上の逆元演算の順に演算を行う。なお、アフィン変換は線形演算であり、GF(2８)上の逆元演算は非線形演算である。
【００１７】
SubBytes演算におけるGF(2８)上の逆元演算と、InvSubBytes演算における逆元演算は同一であることから、SubBytes演算とInvSubBytes演算とで一つの逆元演算部を共用するように実装した演算回路が知られている（非特許文献１参照）。これによって、SubBytes演算とInvSubBytes演算とを別々に実装するよりも、ハードウェアによる実装における回路規模を削減することができる。
【００１８】
図１４に、共通鍵暗号方式ＡＥＳに従う暗号処理装置に用いられるSubBytes演算部とInvSubBytes演算部とを一体化した従来の演算部を示す。
【００１９】
図１４において、１００１は復号演算時のアフィン変換を行うアフィン変換部、１００２は暗号演算時のアフィン変換を行うアフィン変換部、１００３は復号演算時と暗号演算時にGF(2８)上の逆元演算を行う逆元演算部、１００４，１００５は復号演算と暗号演算の切り替えを行うためのセレクタである。
【００２０】
暗号演算時には、セレクタ１００４，１００５はいずれもｅ側に接続し、逆元演算部１００３によるGF(2８)上の逆元演算、アフィン変換部１００２によるアフィン変換の順に、演算が行われる。
【００２１】
一方、復号演算時には、セレクタ１００４，１００５はいずれもｄ側に接続し、アフィン変換部１００１によるアフィン変換、逆元演算部１００３によるGF(2８)上の逆元演算の順に、演算が行われる。
【００２２】
以下、従来の暗号処理装置の問題について説明する。
【００２３】
ここで、サイドチャネル攻撃への対策であるデータマスク法について考える。
【００２４】
前述のようにデータマスク法においては、演算途中のデータは、マスクデータ（例えば、乱数）でマスクされ、マスクデータが付された状態で演算が実行されるので、最終的に正しい演算結果を得るためには、演算データに付されているマスクデータを外す必要がある。
【００２５】
したがって、データマスク法による対策技術を実装するにあたっては、データをマスクしたまま演算を行った後に、容易にマスクデータを取り除くことができるように、回路構成を考慮しなければならない。
【００２６】
そこで重要となるのが、暗号アルゴリズムで用いられている各演算が、線形性と非線形性のいずれを有するかという点である。一般的に暗号アルゴリズムは、線形演算と非線形演算との組み合わせから構成されており、暗号アルゴリズムで定義されている各演算の性質により、データマスク法を実装するときの実装方法が異なってくる。
【００２７】
例えば、線形演算では、データにマスクをかけたまま演算を行ったとしても、その線形性の性質により、演算結果から容易にマスクデータのみ取り除くことができる。
【００２８】
例えば、演算データをd、マスクデータをｒとして、排他的論理和演算（ｘｏｒ）によりdをｒでマスクするものとすると、マスクを付されたデータはd xor ｒで表される。このマスク付きデータd xor ｒを線形演算Ｆに入力すると、その線形演算の結果は、線形性の性質から次のようになる。  
Ｆ（d xor ｒ）＝Ｆ（d） xor Ｆ（ｒ）      …（１）
従って、線形演算については、その演算結果から、容易にマスクデータを取り除くことができる。すなわち、まず、マスクｒに線形演算Ｆを施して、その結果Ｆ（ｒ）を求め、そして、先に求めたＦ（d xor ｒ）＝Ｆ（d） xor Ｆ（ｒ）と、このＦ（ｒ）との排他的論理和を求めることで、次のように正しい演算結果Ｆ（d）を得ることができる。  
（Ｆ（d xor ｒ）） xor Ｆ（ｒ）＝（Ｆ（d） xor Ｆ（ｒ）） xor Ｆ（ｒ）＝Ｆ（d） xor Ｆ（ｒ） xor Ｆ（ｒ）＝Ｆ（d）
このように、線形演算については、入力データにマスクをつけたまま演算を行った場合であっても、その演算結果からマスクによる影響を取り除き、本来求めたい正しい演算結果を、容易に得ることができる。
【００２９】
ところが、非線形演算においては、その非線形性の性質から、上記式（１）に示したような関係が成立しない。
【００３０】
従って、非線形演算については、入力データにマスクデータを付けたまま非線形演算を行った場合、上記のような方法では、その演算結果からマスクデータを取り除くことができない。
【００３１】
共通鍵暗号方式ＡＥＳで用いる演算のうちで、SubBytes演算及びInvSubBytes演算以外の演算は、いずれも、線形演算である。上記のように、線形演算については、演算対象のデータにマスクデータを付けたまま、当該線形演算を行っても、当該線形演算の演算結果から、マスクデータを簡単に外すことが可能である。
【００３２】
一方、共通鍵暗号方式ＡＥＳで用いる演算のうちで、非線形演算を含む演算は、SubBytes演算とInvSubBytes演算である。上記のように、GF(2８)上の逆元演算が、非線形演算である。そのため、図１４のような非線形演算を含む演算回路においては、マスクデータを付けたまま演算を行った場合、正しい演算結果は得られないということになる。しかし、非特許文献１に開示された演算回路においては、サイドチャネル攻撃への対策が考慮されていない（すなわち、サイドチャネル攻撃への対策が実装されていない）。
【００３３】
そこで、本実施形態では、非線形演算について、事前に特定のマスクデータ（後述する固定マスクデータ）に対応した非線形演算を行うための表（テーブル）を作成し、そのテーブルを用いて非線形演算を行う構成を採用するものとする。すなわち、SubBytes演算とInvSubBytes演算に含まれる非線形演算は、GF(2８)上の逆元演算であるので、GF(2８)上の逆元演算について、特定のマスクデータに対応した非線形演算を行うためのテーブルを予め作成し、このテーブルを用いるものとする。なお、この特定のマスクデータは、秘密の情報であるので、安全に保持されるものとする。
【００３４】
さらに、本実施形態では、SubBytes演算及びInvSubBytes演算以外の線形演算の部分では、乱数などのマスクデータを用いるものとしている。これを実現するために、本実施形態では、SubBytes演算及びInvSubBytes演算の前後で、乱数などのマスクデータと特定のマスクデータとの間の付け替えを行うものとしている。
【００３５】
このような非線形演算への対処によって、演算途中では常にマスクデータを用い、かつ、最終的に所望する正しい演算結果が得られるようにして、データマスク法による対策を実装することを可能にしている。
【００３６】
以下、本実施形態に係る暗号処理装置について更に詳しく説明する。
【００３７】
本実施形態では、共通鍵暗号方式ＡＥＳに従う暗号処理装置に用いられるSubBytes演算部とInvSubBytes演算部とを一体化した演算部について、サイドチャネル攻撃への対策を実装するために、GF(2８)逆元演算が、特定のマスクデータでマスクしたデータを演算対象とするように構成する。
【００３８】
特定のマスクデータに対応するGF(2８)逆元演算部は、事前に作成したテーブルで実装することができる。この場合、テーブルは、その作成時に前提とした特定のマスクデータにのみ対応しているため、GF(2８)逆元演算に入力するデータを、その特定のマスクデータにより予めマスクしておかなければ、正しい演算結果を得ることができない。
【００３９】
そこで、本実施形態では、ゲート数の増加を抑えて、乱数などのマスクデータを特定のマスクデータに付け替えることを考える。ここでは、暗号系統と復号系統に分れる分岐の前で付け替えを行う構成例について説明する（図１）。なお、その後で、逆元演算の直前で付け替えを行う構成例について説明する（図４）。
【００４０】
図１に、本実施形態に係る、サイドチャネル対策を実装した、SubBytes演算部とInvSubBytes演算部とを一体化した演算部の構成例を示す。
【００４１】
図１において、１１は復号演算時のアフィン変換を行うアフィン変換部（第１の線形演算部）、１２は暗号演算時のアフィン変換を行うアフィン変換部（第２の線形演算部）、１３は復号演算時及び暗号演算時にGF(2８)上の逆元演算を行う逆元演算部（非線形演算部）、１４，１５は復号演算と暗号演算の切り替えを行うためのセレクタ（第１の選択部、第２の選択部）、２１〜２６は排他的論理輪を行う排他的論理和演算部（ＸＯＲ演算部）（２１，２２：第1のマスク付替部、２３：第４のマスク付替部、２４：第５のマスク付替部、２５，２６：第２のマスク付替部）である。
【００４２】
暗号演算時には、セレクタ１４，１５はいずれもｅ側に接続し、逆元演算部１３によるGF(2８)上の逆元演算、アフィン変換部１０２によるアフィン変換の順に、演算が行われる。
【００４３】
一方、復号演算時には、セレクタ１４，１５はいずれもｄ側に接続し、アフィン変換部１１によるアフィン変換、逆元演算部１３によるGF(2８)上の逆元演算の順に、演算が行われる。
【００４４】
以下の説明で、ｍ１とｍ２は、乱数などを用いた、値が変化するマスクデータ（以下、一時マスクデータと呼ぶ。）である。なお、ここでは、ｍ２は、ｍ１と独立した値として説明しているが、ｍ２をｍ１と同一の値としても良い。この場合には、以下の式で、ｍ２をｍ１に置き換えれば良い。これらの点は、後述する各構成例についても同様である。
【００４５】
また、以下の説明で、ｒｆｘ１とｒｆｘ２は、値が予め定められたマスクデータ（以下、固定マスクデータと呼ぶ。）である。なお、ここでは、ｒｆｘ２は、ｒｆｘ１と独立した値として説明しているが、ｒｆｘ２をｒｆｘ１と同一の値としても良い。この場合には、以下の式で、ｒｆｘ２をｒｆｘ１に置き換えれば良い。これらの点は、後述する各構成例についても同様である。
【００４６】
なお、サイドチャネル攻撃への対策を考えた場合、固定マスクデータ（上記のｒｆｘ１やｒｆｘ２）は、当該マスクデータ中における０の個数と１の個数とが同じ（或いは、ほぼ同じ）であると好ましい。なぜなら、サイドチャネル攻撃においては、演算途中のデータ中の０の個数と１の個数数との間の相違に基づく演算時の消費電力の相違を利用しており、マスクデータ中の０の個数と１の個数とが異なるほど、当該マスクデータでマスクされたデータ中における０，１の数が偏り、攻撃を受けやすくなる可能性があるからである。この点は、一時マスクデータ（上記のｍ１やｍ２）についても同様である。これらは、後述する各構成例についても同様である。
【００４７】
また、以下の説明で、ｘｏｒは、排他的論理和演算を表し、Ａｆｆｉｎｅ（ｘ）は、アフィン変換を表す。また、ＸのGF(2８)上の逆元をＸ−１で表す。
【００４８】
なお、固定マスクデータは、秘密の情報であるので、安全に保持されるものとする。
【００４９】
図２に、図１の演算部の暗号演算時の動作手順の一例を示す。
【００５０】
まず、セレクタ１４，１５を暗号演算側に切り替える（ステップＳ１）。
【００５１】
次に、入力されたマスク付きデータについて、一時マスクデータｍ１から固定マスクデータｒｆｘ１への付け替えを行う（ステップＳ２）。
【００５２】
次に、逆元演算部１３が、マスク付きデータについて、逆元演算を行う（ステップＳ３）。なお、逆元演算の前後で固定マスクデータの付け替えを行う場合には、逆元演算の結果として、固定マスクデータの付け替えが為されたものが、得られる。ここでは、ｒｆｘ２に付け替えられるものとする。
【００５３】
次に、アフィン変換部１２が、アフィン変換を行う（ステップＳ４）。
【００５４】
次に、アフィン変換結果のマスク付きデータについて、アフィン変換された固定マスクデータからもとの固定マスクデータｒｆｘ２へ付け直す（ステップＳ５）。
【００５５】
そして、そのマスク付きデータについて、固定マスクデータｒｆｘ２から一時マスクデータｍ２への付け替えを行って、これを出力する（ステップＳ６）。
【００５６】
図３に、図１の演算部の復号演算時の動作手順の一例を示す。
【００５７】
まず、セレクタ１４，１５を復号演算側に切り替える（ステップＳ１１）。
【００５８】
次に、入力されたマスク付きデータについて、一時マスクデータｍ３から固定マスクデータｒｆｘ１への付け替えを行う（ステップＳ１２）。
【００５９】
次に、アフィン変換部１１が、アフィン変換を行う（ステップＳ１３）。
【００６０】
次に、アフィン変換結果のマスク付きデータについて、アフィン変換された固定マスクデータからもとの固定マスクデータｒｆｘ１へ付け直す（ステップＳ１４）。
【００６１】
次に、逆元演算部１３が、マスク付きデータについて、逆元演算を行う（ステップＳ１５）。なお、上記のように、逆元演算の前後で固定マスクデータの付け替えを行う場合には、逆元演算の結果として、固定マスクデータの付け替えが為されたものが、得られる。ここでは、ｒｆｘ２に付け替えられるものとする。
【００６２】
そして、逆元演算部１３から出力されたマスク付きデータについて、固定マスクデータｒｆｘ２から一時マスクデータｍ４への付け替えを行って、これを出力する（ステップＳ１６）。
【００６３】
次に、暗号演算時の動作について説明する。
【００６４】
図１のSubBytes/InvSubBytes演算部について、SubBytes演算の対象となる本来のデータをｄ１で表す。図１のSubBytes/InvSubBytes演算部に対する入力は、演算対象となるデータｄ１を、一時マスクデータ（ここでの一時マスクデータをｍ１とする。）でマスクした値である。ここで、マスク付加操作には、排他的論理和演算を用いるものとし、マスク削除操作にも、排他的論理和演算を用いるものとする。よって、本例において、図１のSubBytes/InvSubBytes演算部に対する入力は、ｄ１  ｘｏｒ  ｍ１となる。
【００６５】
さて、ＸＯＲ演算部２１は、上記一時マスクデータｍ１と固定マスクデータ（ここでの固定マスクデータをｒｆｘ１とする。）とを入力し、それらの排他的論理和ｍ１  ｘｏｒ  ｒｆｘ１を出力する。
【００６６】
ＸＯＲ演算部２２は、上記入力ｄ１  ｘｏｒ  ｍ１と、ＸＯＲ演算部２１の出力ｍ１  ｘｏｒ  ｒｆｘ１とを入力し、それらの排他的論理和（ｄ１  ｘｏｒ  ｍ１）  ｘｏｒ  （  ｍ１  ｘｏｒ  ｒｆｘ１）＝ｄ１  ｘｏｒ  ｒｆｘ１を出力する。
【００６７】
前述のように、暗号演算時は、ＸＯＲ演算部２２の出力が、セレクタ１４を介して、逆元演算部１３に与えられる。
【００６８】
ここで、逆元演算部１３は、固定マスクデータｒｆｘ１に対応して予め作成されたテーブルにより実装することができる。すなわち、逆元演算部１３は、固定マスクデータｒｆｘ１によりマスクされたデータが入力された場合に、正しい演算結果を与えることができる。
【００６９】
固定マスクデータｒｆｘ１に対応した逆元演算部１３は、ＸＯＲ演算部２２の出力ｄ１  ｘｏｒ  ｒｆｘ１を入力し、GF(2８)上の逆元の演算結果を出力する。ただし、この演算結果は、本来の逆元ｄ１−１ではなく、本来の逆元ｄ１−１を固定マスクデータｒｆｘ２でマスクしたものｄ１−１  ｘｏｒ  ｒｆｘ２とする。
【００７０】
なお、ここでは逆元演算後の固定マスクデータをｒｆｘ２としたが、前述のように、ｒｆｘ２＝ｒｆｘ１としても良い。
【００７１】
アフィン変換部１２は、逆元演算部１３の出力ｄ１−１  ｘｏｒ  ｒｆｘ２を入力し、そのアフィン変換結果Ａｆｆｉｎｅ（ｄ１−１  ｘｏｒ  ｒｆｘ２）＝Ａｆｆｉｎｅ（ｄ１−１）  ｘｏｒ  Ａｆｆｉｎｅ（ｒｆｘ２）を出力する。
【００７２】
なお、ここで、式（１）で説明した線形性の性質を利用している（以下も同様である）。
【００７３】
ＸＯＲ演算部２４は、アフィン変換部１２の出力Ａｆｆｉｎｅ（ｄ１−１）  ｘｏｒ  Ａｆｆｉｎｅ（ｒｆｘ２）と、「固定マスクデータと固定マスクデータのアフィン変換結果との排他的論理和ｒｆｘ２  ｘｏｒ  Ａｆｆｉｎｅ（ｒｆｘ２）」とを入力し、それらの排他的論理和（Ａｆｆｉｎｅ（ｄ１−１）  ｘｏｒ  Ａｆｆｉｎｅ（ｒｆｘ２））  ｘｏｒ  （ｒｆｘ２  ｘｏｒ  Ａｆｆｉｎｅ（ｒｆｘ２））＝Ａｆｆｉｎｅ（ｄ１−１）  ｘｏｒ  ｒｆｘ２を出力する。なお、ｒｆｘ２  ｘｏｒ  Ａｆｆｉｎｅ（ｒｆｘ２）は、予め求めておくことが可能である。
【００７４】
前述のように、暗号演算時は、ＸＯＲ演算部２４の出力が、セレクタ１５を介して、ＸＯＲ演算部２６に与えられる。
【００７５】
ＸＯＲ演算部２５は、固定マスクデータｒｆｘ２と、一時マスクデータ（ここでの一時マスクデータをｍ２とする。）とを入力し、それらの排他的論理和ｒｆｘ２  ｘｏｒ  ｍ２を出力する。
【００７６】
ＸＯＲ演算部２６は、ＸＯＲ演算部２４の出力Ａｆｆｉｎｅ（ｄ１−１）  ｘｏｒ  ｒｆｘ２とＸＯＲ演算部２５の出力ｒｆｘ２  ｘｏｒ  ｍ２とを入力し、それらの排他的論理和（Ａｆｆｉｎｅ（ｄ１−１）  ｘｏｒ  ｒｆｘ２）  ｘｏｒ  （ｒｆｘ２  ｘｏｒ  ｍ２）＝Ａｆｆｉｎｅ（ｄ１−１）  ｘｏｒ  ｍ２を出力する。すなわち、このＡｆｆｉｎｅ（ｄ１−１）  ｘｏｒ  ｍ２が、図１のSubBytes/InvSubBytes演算部の出力となる。すなわち、演算対象となる本来のデータをｄ１に対するSubBytes演算結果を、一時マスクデータｍ２でマスクしたものが、得られる。
【００７７】
なお、前述のように、ｍ２＝ｍ１としても良い。
【００７８】
次に、復号演算時の動作について説明する。
【００７９】
図１のSubBytes/InvSubBytes演算部について、InvSubBytes演算の対象となる本来のデータをｄ２で表す。図１のSubBytes/InvSubBytes演算部に対する入力は、演算対象となるデータｄ２を、一時マスクデータ（ここでの一時マスクデータをｍ３とする。）でマスクした値である。よって、本例において、図１のSubBytes/InvSubBytes演算部に対する入力は、ｄ２  ｘｏｒ  ｍ３となる。
【００８０】
さて、ＸＯＲ演算部２１は、上記一時マスクデータｍ３と固定マスクデータｒｆｘ１とを入力し、それらの排他的論理和ｍ３  ｘｏｒ  ｒｆｘ１を出力する。
【００８１】
ＸＯＲ演算部２２は、上記入力ｄ２  ｘｏｒ  ｍ３と、ＸＯＲ演算部２１の出力ｍ３  ｘｏｒ  ｒｆｘ１とを入力し、それらの排他的論理和（ｄ２  ｘｏｒ  ｍ３）  ｘｏｒ  （  ｍ３  ｘｏｒ  ｒｆｘ１）＝ｄ２  ｘｏｒ  ｒｆｘ１を出力する。
【００８２】
アフィン変換部１１は、ＸＯＲ演算部２２の出力ｄ２  ｘｏｒ  ｒｆｘ１を入力し、そのアフィン変換Ａｆｆｉｎｅ（ｄ２  ｘｏｒ  ｒｆｘ１）＝Ａｆｆｉｎｅ（ｄ２）  ｘｏｒ  Ａｆｆｉｎｅ（ｒｆｘ１）を出力する。
【００８３】
ＸＯＲ演算部２３は、アフィン変換部１１の出力Ａｆｆｉｎｅ（ｄ２）  ｘｏｒ  Ａｆｆｉｎｅ（ｒｆｘ１）と、「固定マスクデータと固定マスクデータのアフィン変換結果との排他的論理和ｒｆｘ１  ｘｏｒ  Ａｆｆｉｎｅ（ｒｆｘ１）」とを入力し、それらの排他的論理和（Ａｆｆｉｎｅ（ｄ２）  ｘｏｒ  Ａｆｆｉｎｅ（ｒｆｘ１））  ｘｏｒ  （ｒｆｘ１  ｘｏｒ  Ａｆｆｉｎｅ（ｒｆｘ１））＝Ａｆｆｉｎｅ（ｄ２）  ｘｏｒ  ｒｆｘ１を出力する。なお、ｒｆｘ１  ｘｏｒ  Ａｆｆｉｎｅ（ｒｆｘ１）は、予め求めておくことが可能である。
【００８４】
前述のように、復号演算時は、ＸＯＲ演算部２３の出力が、セレクタ１４を介して、逆元演算部１３に与えられる。
【００８５】
固定マスクデータｒｆｘ１に対応した逆元演算部１３は、ＸＯＲ演算部２３の出力Ａｆｆｉｎｅ（ｄ２）  ｘｏｒ  ｒｆｘ１を入力し、GF(2８)上の逆元の演算結果を出力する。ただし、この演算結果は、本来の逆元Ａｆｆｉｎｅ（ｄ２）−１ではなく、本来の逆元Ａｆｆｉｎｅ（ｄ２）−１を固定マスクデータｒｆｘ２でマスクしたもの（Ａｆｆｉｎｅ（ｄ２））−１  ｘｏｒ  ｒｆｘ２とする。
【００８６】
前述のように、復号演算時は、逆元演算部１３の出力が、セレクタ１５を介して、ＸＯＲ演算部２６に与えられる。
【００８７】
ＸＯＲ演算部２５は、固定マスクデータｒｆｘ２と、一時マスクデータ（ここでの一時マスクデータをｍ４とする。）とを入力し、それらの排他的論理和ｒｆｘ２  ｘｏｒ  ｍ４を出力する。
【００８８】
ＸＯＲ演算部２６は、逆元演算部１３の出力（Ａｆｆｉｎｅ（ｄ２））−１  ｘｏｒ  ｒｆｘ２とＸＯＲ演算部２５の出力ｒｆｘ２  ｘｏｒ  ｍ４とを入力し、それらの排他的論理和（（Ａｆｆｉｎｅ（ｄ２））−１  ｘｏｒ  ｒｆｘ２）  ｘｏｒ  （ｒｆｘ２  ｘｏｒ  ｍ４）＝（Ａｆｆｉｎｅ（ｄ２））−１  ｘｏｒ  ｍ４を出力する。すなわち、この（Ａｆｆｉｎｅ（ｄ２））−１  ｘｏｒ  ｍ４が、図１のSubBytes/InvSubBytes演算部の出力となる。すなわち、演算対象となる本来のデータをｄ２に対するInvSubBytes演算結果を、一時マスクデータｍ４でマスクしたものが、得られる。
【００８９】
なお、前述のように、ｍ４＝ｍ３としても良い。
【００９０】
続いて、最初のセレクタの後でマスクの付け替えを行うようにした構成例について説明する。
【００９１】
図４に、本実施形態における、サイドチャネル対策を実装した、SubBytes演算部とInvSubBytes演算部を一体化した演算部の他の構成例を示す。なお、図１の構成例と相違する点を中心に説明する。
【００９２】
図４において、３１は復号演算時のアフィン変換（図１のアフィン変換部１１と同じアフィン変換）を行うアフィン変換部、３２は暗号演算時のアフィン変換（図１のアフィン変換部１２と同じアフィン変換）を行うアフィン変換部、３３は復号演算時／暗号演算時の両方でGF(2８)上の逆元演算を行う逆元演算部、３４，３５は復号演算と暗号演算の切り替えを行うためのセレクタ、４１〜４６は排他的論理輪を行うＸＯＲ演算部、４７は復号演算時にマスクデータの演算（アフィン変換部３１と同じアフィン変換）に用いるアフィン変換部、４８は復号演算と暗号演算でのマスクデータの切り替えを行うためのセレクタである。
【００９３】
暗号演算時には、セレクタ１４，１５，４８はいずれもｅ側に接続し、復号演算時には、セレクタ１４，１５，４８はいずれもｄ側に接続する。
【００９４】
まず、暗号演算時の動作について説明する。
【００９５】
図４のSubBytes/InvSubBytes演算部には、図１の例と同様、ｄ１  ｘｏｒ  ｍ１が入力される。
【００９６】
さて、ＸＯＲ演算部４１は、図１のＸＯＲ演算部２１と同様、ｍ１  ｘｏｒ  ｒｆｘ１を出力する。
【００９７】
ＸＯＲ演算部４３は、図１のＸＯＲ演算部と同様、ｄ１  ｘｏｒ  ｒｆｘ１を出力し、これが逆元演算部１３に与えられる。
【００９８】
以降は、図１の例と同じであり、最終的に、図４のSubBytes/InvSubBytes演算部の出力として、演算対象となる本来のデータをｄ１に対するSubBytes演算結果を、一時マスクデータｍ２でマスクしたもの、すなわち、Ａｆｆｉｎｅ（ｄ１−１）  ｘｏｒ  ｍ２が、得られる。
【００９９】
次に、復号演算時の動作について説明する。
【０１００】
図４のSubBytes/InvSubBytes演算部には、図１の例と同様、ｄ２  ｘｏｒ  ｍ３が入力される。
【０１０１】
アフィン変換部１１は、上記のｄ２  ｘｏｒ  ｍ３を入力し、そのアフィン変換Ａｆｆｉｎｅ（ｄ２  ｘｏｒ  ｍ３）＝Ａｆｆｉｎｅ（ｄ２）  ｘｏｒ  Ａｆｆｉｎｅ（ｍ３）を出力する。
【０１０２】
一方、アフィン変換部４７は、一時マスクデータｍ３を入力して、そのアフィン変換結果Ａｆｆｉｎｅ（ｍ３）を出力し、ＸＯＲ演算部４２は、上記アフィン変換結果Ａｆｆｉｎｅ（ｍ３）と固定マスクデータｒｆｘ１とを入力して、それらの排他的論理和Ａｆｆｉｎｅ（ｍ３）  ｘｏｒ  ｒｆｘ１を出力する。
【０１０３】
ＸＯＲ演算部２３は、アフィン変換部１１の出力Ａｆｆｉｎｅ（ｄ２）  ｘｏｒ  Ａｆｆｉｎｅ（ｍ３）と、ＸＯＲ演算部４２の出力Ａｆｆｉｎｅ（ｍ３）  ｘｏｒ  ｒｆｘ１とを入力し、それらの排他的論理和（Ａｆｆｉｎｅ（ｄ２）  ｘｏｒ  Ａｆｆｉｎｅ（ｍ３））  ｘｏｒ  （Ａｆｆｉｎｅ（ｍ３）  ｘｏｒ  ｒｆｘ１）＝Ａｆｆｉｎｅ（ｄ２）  ｘｏｒ  ｒｆｘ１を出力し、これが逆元演算部１３に与えられる。
【０１０４】
以降は、図１の例と同じであり、最終的に、図４のSubBytes/InvSubBytes演算部の出力として、演算対象となる本来のデータをｄ２に対するInvSubBytes演算結果を、一時マスクデータｍ４でマスクしたもの、すなわち、（Ａｆｆｉｎｅ（ｄ２））−１  ｘｏｒ  ｍ４が、得られる。
【０１０５】
次に、マスクデータ付け替えの回数を削減することによって、図１，４に比較して、より素子数を削減した構成例について説明する。なお、図１の構成例と相違する点を中心に説明する。
【０１０６】
図１のようにアフィン変換部１１の前で固定マスクデータへの付替を行う場合は、復号演算時において、固定マスクデータがアフィン変換され、図４のようにセレクタ３４の出力において固定マスクデータへの付け替えを行う場合は、復号演算時において、一時マスクデータがアフィン変換される。よって、いずれの場合でも、復号演算時において、アフィン変換された固定マスクデータ又はアフィン変換された一時マスクデータを、固定マスクデータに付け替える処理が必要になる。また、図４の場合には、アフィン変換部３１とは別に、一時マスクデータをアフィン変換するためのアフィン変換部４７が必要になる。
【０１０７】
また、暗号演算時においても、同様に、アフィン変換部１２，３２で固定マスクデータがアフィン変換されるので、アフィン変換された固定マスクデータを、固定マスクデータに付け替える必要がある。
【０１０８】
そこで、本実施形態では、アフィン変換について不変である値を、図１の二つの固定マスクデータ又は図４の一時マスクデータ及び固定マスクデータとして採用するものとする。これによって、当該マスクデータがアフィン変換部について不変であれば、当該マスクデータ付け替えのための排他的論理和部及びアフィン変換部を省くことができる。それらを省くことによって、最大遅延時間を短くすることができ、回路の処理能力を向上することができる。
【０１０９】
なお、アフィン変換は、暗号アルゴリズムの仕様によって定められているので、事前にアフィン変換について不変となる値を探し出しておくことが可能である。
【０１１０】
ここで、アフィン変換Ａｆｆｉｎｅに、マスクされたデータ（データdとマスクｒとの排他的論理和）d xor ｒを入力すると、アフィン変換の線形性の性質から、式（２）が成立する。  
Affine（ｄ xor ｒ）＝Affine（ｄ） xor Affine（ｒ）      …（２）
ここで、マスクｒが、次式（３）を満たすものとする。  
ｒ＝Affine（ｒ）      …（３）
式（３）により、式（２）を式（４）に書き換えることができる。  
Affine（ｄ xor ｒ）＝Affine（ｄ） xor Affine（ｒ）＝Affine（ｄ） xor ｒ  …（４）
よって、マスクされたデータｄ xor ｒをアフィン変換した結果は、データｄのアフィン変換結果をマスクｒでマスクした値Affine（ｄ） xor ｒになる。これが求めるべき値であるので、アフィン変換の後に、マスク付け替えのための回路が不要となることが分かる。
【０１１１】
以下、上記（３）を満たすマスクデータを用いる場合の構成例について説明する。
【０１１２】
図５に、本実施形態における、サイドチャネル対策を実装した、SubBytes演算部とInvSubBytes演算部を一体化した演算部の更に他の構成例を示す。
【０１１３】
図５において、５１は復号演算時のアフィン変換（図１のアフィン変換部１１と同じアフィン変換）を行うアフィン変換部（第１の線形演算部）、５２は暗号演算時のアフィン変換（図１のアフィン変換部１２と同じアフィン変換）を行うアフィン変換部（第２の線形演算部）、５３は復号演算時／暗号演算時の両方でGF(2８)上の逆元演算を行う逆元演算部（非線形演算部）、５４，５５は復号演算と暗号演算の切り替えを行うためのセレクタ（第１の選択部、第２の選択部）、６１〜６４は排他的論理輪を行うＸＯＲ演算部である（６１，６２：第1のマスク付替部、６３，６４：第２のマスク付替部）。
【０１１４】
なお、暗号演算時には、セレクタ１４，１５はいずれもｅ側に接続し、復号演算時には、セレクタ１４，１５はいずれもｄ側に接続する点は、図１の場合と同様である。
【０１１５】
また、一時マスクデータや固定マスクデータの中における０の個数と１の個数とが同じ（或いは、ほぼ同じ）であると好ましい点は、図１の場合と同様である。
【０１１６】
さて、図１の構成例を見ると、ＸＯＲ演算部２３は、アフィン変換部１１の出力に対して、「固定マスクデータと固定マスクデータのアフィン変換結果との排他的論理和ｒｆｘ１  ｘｏｒ  Ａｆｆｉｎｅ（ｒｆｘ１）」との排他的論理和を取る演算を行っている。これは、アフィン変換部１１の出力において、Ａｆｆｉｎｅ（ｄ２）に付けられているＡｆｆｉｎｅ（ｒｆｘ１）を、ｒｆｘ１に付け替える操作である。
【０１１７】
ここで、ｒｆｘ１として、アフィン変換（アフィン変換部１１，５１のアフィン変換）について不変となる値、すなわち、ｒｆｘ１＝Ａｆｆｉｎｅ（ｒｆｘ１）を満たすような値を採用することを考える。この場合には、アフィン変換部１１の出力は、Ａｆｆｉｎｅ（ｄ２）  ｘｏｒ  Ａｆｆｉｎｅ（ｒｆｘ１）＝Ａｆｆｉｎｅ（ｄ２）  ｘｏｒ  ｒｆｘ１となる。言い換えると、ｒｆｘ１＝Ａｆｆｉｎｅ（ｒｆｘ１）の場合、ｒｆｘ１  ｘｏｒ  Ａｆｆｉｎｅ（ｒｆｘ１）＝０となり、これを一方の入力とするＸＯＲ演算部２３は、他方の入力をそのまま出力することになる。これは、GF(2８)逆元演算の前でのマスクデータ付け替えが不要であり、すなわち、図１のＸＯＲ演算部２３が不要であることを意味する。
【０１１８】
よって、図５の構成例では、固定マスクデータｒｆｘ１として、アフィン変換（アフィン変換部１２，５２のアフィン変換）について不変となる値、すなわち、ｒｆｘ１＝Ａｆｆｉｎｅ（ｒｆｘ１）を満たすような値を必ず採用することとして、図１の構成例から、ＸＯＲ演算部２３を省いている。
【０１１９】
また、ＸＯＲ演算部２４についても同様で、固定マスクデータｒｆｘ２として、ｒｆｘ２＝Ａｆｆｉｎｅ（ｒｆｘ２）を満たすような値を必ず採用することとして、図１の構成例から、ＸＯＲ演算部２４を省いている。
【０１２０】
図６に、図５の演算部の暗号演算時の動作手順の一例を示す。
【０１２１】
まず、セレクタ５４，５５を暗号演算側に切り替える（ステップＳ２１）。
【０１２２】
次に、入力されたマスク付きデータについて、一時マスクデータｍ１から固定マスクデータｒｆｘ１への付け替えを行う（ステップＳ２２）。
【０１２３】
次に、逆元演算部５３が、マスク付きデータについて、逆元演算を行う（ステップＳ２３）。なお、逆元演算の前後で固定マスクデータの付け替えを行う場合には、逆元演算の結果として、固定マスクデータの付け替えが為されたものが、得られる。ここでは、ｒｆｘ２に付け替えられるものとする。
【０１２４】
次に、アフィン変換部５２が、アフィン変換を行う（ステップＳ２４）。なお、ここでは固定マスクデータはアフィン変換によって不変であるので、固定マスクデータの付け替えは不要である。
【０１２５】
そして、アフィン変換部５２から出力されたマスク付きデータについて、固定マスクデータｒｆｘ２から一時マスクデータｍ２への付け替えを行って、これを出力する（ステップＳ２５）。
【０１２６】
図７に、図５の演算部の復号演算時の動作手順の一例を示す。
【０１２７】
まず、セレクタ５４，５５を復号演算側に切り替える（ステップＳ３１）。
【０１２８】
次に、入力されたマスク付きデータについて、一時マスクデータｍ３から固定マスクデータｒｆｘ１への付け替えを行う（ステップＳ３２）。
【０１２９】
次に、アフィン変換部５１が、アフィン変換を行う（ステップＳ３３）。なお、ここでは固定マスクデータはアフィン変換によって不変であるので、固定マスクデータの付け替えは不要である。
【０１３０】
次に、逆元演算部５３が、マスク付きデータについて、逆元演算を行う（ステップＳ３４）。なお、上記のように、逆元演算の前後で固定マスクデータの付け替えを行う場合には、逆元演算の結果として、固定マスクデータの付け替えが為されたものが、得られる。ここでは、ｒｆｘ２に付け替えられるものとする。
【０１３１】
そして、逆元演算部５３から出力されたマスク付きデータについて、固定マスクデータｒｆｘ２から一時マスクデータｍ４への付け替えを行って、これを出力する（ステップＳ３５）。
【０１３２】
次に、暗号演算時の動作について説明する。
【０１３３】
図５のSubBytes/InvSubBytes演算部に対する入力を、ｄ１  ｘｏｒ  ｍ１とする。
【０１３４】
ＸＯＲ演算部６１は、上記一時マスクデータｍ１と固定マスクデータｒｆｘ１とを入力し、それらの排他的論理和ｍ１  ｘｏｒ  ｒｆｘ１を出力する。
【０１３５】
ＸＯＲ演算部６２は、上記入力ｄ１  ｘｏｒ  ｍ１と、ＸＯＲ演算部６１の出力ｍ１  ｘｏｒ  ｒｆｘ１とを入力し、それらの排他的論理和（ｄ１  ｘｏｒ  ｍ１）  ｘｏｒ  （  ｍ１  ｘｏｒ  ｒｆｘ１）＝ｄ１  ｘｏｒ  ｒｆｘ１を出力する。
【０１３６】
暗号演算時は、ＸＯＲ演算部６２の出力が、セレクタ５４を介して、逆元演算部１３に与えられる。
【０１３７】
逆元演算部５３は、ＸＯＲ演算部６２の出力ｄ１  ｘｏｒ  ｒｆｘ１を入力し、逆元演算結果ｄ１−１  ｘｏｒ  ｒｆｘ２を出力する。
【０１３８】
なお、ここでは逆元演算後の固定マスクデータをｒｆｘ２としたが、前述のように、ｒｆｘ２＝ｒｆｘ１としても良い。
【０１３９】
アフィン変換部５２は、逆元演算部５３の出力ｄ１−１  ｘｏｒ  ｒｆｘ２を入力し、そのアフィン変換結果Ａｆｆｉｎｅ（ｄ１−１  ｘｏｒ  ｒｆｘ２）＝Ａｆｆｉｎｅ（ｄ１−１）  ｘｏｒ  Ａｆｆｉｎｅ（ｒｆｘ２）を出力する。
【０１４０】
ここで、Ａｆｆｉｎｅ（ｒｆｘ２）＝ｒｆｘ２であることから、Ａｆｆｉｎｅ（ｄ１−１）  ｘｏｒ  Ａｆｆｉｎｅ（ｒｆｘ２）＝Ａｆｆｉｎｅ（ｄ１−１）  ｘｏｒ  ｒｆｘ２が得られる。
【０１４１】
暗号演算時は、逆元演算部５３の出力が、セレクタ５５を介して、ＸＯＲ演算部６４に与えられる。
【０１４２】
ＸＯＲ演算部６３は、固定マスクデータｒｆｘ２と、一時マスクデータｍ２とを入力し、それらの排他的論理和ｒｆｘ２  ｘｏｒ  ｍ２を出力する。
【０１４３】
ＸＯＲ演算部６４は、ＸＯＲ演算部６３の出力Ａｆｆｉｎｅ（ｄ１−１）  ｘｏｒ  ｒｆｘ２とＸＯＲ演算部２５の出力ｒｆｘ２  ｘｏｒ  ｍ２とを入力し、それらの排他的論理和（Ａｆｆｉｎｅ（ｄ１−１）  ｘｏｒ  ｒｆｘ２）  ｘｏｒ  （ｒｆｘ２  ｘｏｒ  ｍ２）＝Ａｆｆｉｎｅ（ｄ１−１）  ｘｏｒ  ｍ２を出力する。すなわち、このＡｆｆｉｎｅ（ｄ１−１）  ｘｏｒ  ｍ２が、図５のSubBytes/InvSubBytes演算部の出力となる。すなわち、演算対象となる本来のデータをｄ１に対するSubBytes演算結果を、一時マスクデータｍ２でマスクしたものが、得られる。
【０１４４】
なお、前述のように、ｍ２＝ｍ１としても良い。
【０１４５】
次に、復号演算時の動作について説明する。
【０１４６】
図５のSubBytes/InvSubBytes演算部に対する入力を、ｄ２  ｘｏｒ  ｍ３となる。
【０１４７】
ＸＯＲ演算部６１は、上記一時マスクデータｍ３と固定マスクデータｒｆｘ１とを入力し、それらの排他的論理和ｍ３  ｘｏｒ  ｒｆｘ１を出力する。
【０１４８】
ＸＯＲ演算部６２は、上記入力ｄ２  ｘｏｒ  ｍ３と、ＸＯＲ演算部部２２の出力ｍ３  ｘｏｒ  ｒｆｘ１とを入力し、それらの排他的論理和（ｄ２  ｘｏｒ  ｍ３）  ｘｏｒ  （  ｍ３  ｘｏｒ  ｒｆｘ１）＝ｄ２  ｘｏｒ  ｒｆｘ１を出力する。
【０１４９】
アフィン変換部５１は、ＸＯＲ演算部６２の出力ｄ２  ｘｏｒ  ｒｆｘ１を入力し、そのアフィン変換Ａｆｆｉｎｅ（ｄ２  ｘｏｒ  ｒｆｘ１）＝Ａｆｆｉｎｅ（ｄ２）  ｘｏｒ  Ａｆｆｉｎｅ（ｒｆｘ１）を出力する。
【０１５０】
ここで、Ａｆｆｉｎｅ（ｒｆｘ１）＝ｒｆｘ１であることから、Ａｆｆｉｎｅ（ｄ２）  ｘｏｒ  Ａｆｆｉｎｅ（ｒｆｘ１）＝Ａｆｆｉｎｅ（ｄ２）  ｘｏｒ  ｒｆｘ１が得られる。
【０１５１】
復号演算時は、アフィン変換部５１の出力が、セレクタ５４を介して、逆元演算部５３に与えられる。
【０１５２】
逆元演算部５３は、アフィン変換部５１の出力Ａｆｆｉｎｅ（ｄ２）  ｘｏｒ  ｒｆｘ１を入力し、逆元演算結果（Ａｆｆｉｎｅ（ｄ２））−１  ｘｏｒ  ｒｆｘ２を出力する。
【０１５３】
なお、ここでは逆元演算後の固定マスクデータをｒｆｘ２としたが、前述のように、ｒｆｘ２＝ｒｆｘ１としても良い。
【０１５４】
復号演算時は、逆元演算部５３の出力が、セレクタ５５を介して、ＸＯＲ演算部６４に与えられる。
【０１５５】
ＸＯＲ演算部６３は、固定マスクデータｒｆｘ２と、一時マスクデータ（ここでの一時マスクデータをｍ４とする。）とを入力し、それらの排他的論理和ｒｆｘ２  ｘｏｒ  ｍ４を出力する。
【０１５６】
ＸＯＲ演算部６４は、逆元演算部５３の出力（Ａｆｆｉｎｅ（ｄ２））−１  ｘｏｒ  ｒｆｘ２とＸＯＲ演算部６３の出力ｒｆｘ２  ｘｏｒ  ｍ４とを入力し、それらの排他的論理和（（Ａｆｆｉｎｅ（ｄ２））−１  ｘｏｒ  ｒｆｘ２）  ｘｏｒ  （ｒｆｘ２  ｘｏｒ  ｍ４）＝（Ａｆｆｉｎｅ（ｄ２））−１  ｘｏｒ  ｍ４を出力する。すなわち、この（Ａｆｆｉｎｅ（ｄ２））−１  ｘｏｒ  ｍ４が、図５のSubBytes/InvSubBytes演算部の出力となる。すなわち、演算対象となる本来のデータをｄ２に対するInvSubBytes演算結果を、一時マスクデータｍ４でマスクしたものが、得られる。
【０１５７】
なお、前述のように、ｍ４＝ｍ３としても良い。
【０１５８】
図５に示すように、固定マスクデータとしてアフィン変換について不変の値を用いることによって、ゲート数を削減し、最大遅延時間を短くすることが可能となる。
【０１５９】
なお、図５では、第１の固定マスクデータと第２の固定マスクデータの両方についてアフィン変換について不変としたが、第１の固定マスクデータと第２の固定マスクデータのいずれか一方のみをアフィン変換について不変としても良い。この場合には、不変でないとした方について、図１のＸＯＲ演算部２３又はＸＯＲ演算部２４と同じ構成にすれば良い。
【０１６０】
次に、本実施形態に係る暗号演算装置について説明する。
【０１６１】
図８に、本実施形態に係る暗号演算装置の構成例を示す。
【０１６２】
図８において、１２０の部分が、図５で示した本実施形態に係る、SubBytes演算部とInvSubBytes演算部を一体化し、データマスク法を実装したSubBytes／InvSubBytes演算部である。なお、図８において、ＸＯＲ演算部６１及びＸＯＲ演算部６３は省略している。
【０１６３】
すなわち、図８に示された暗号演算装置は、共通鍵暗号方式ＡＥＳに従う一般的な暗号処理装置において、SubBytes演算回路とInvSubBytes演算回路との部分に、図５で示した本実施形態に係るSubBytes／InvSubBytes演算部１２０を適用したものである。よって、図８に示された暗号演算装置は、SubBytes／InvSubBytes演算部１２０以外の部分は、基本的に、従来のものと同じで構わない。
【０１６４】
図８において、１０１は演算途中のデータをマスクするための一時マスクデータを生成するマスクデータ生成部、１０２はＡＥＳのMixColumns演算及びInvMixColumns演算を行うMixColumns／InvMixColumns演算部、１０３は一つ前の一時マスクデータの値を保持するためのレジスタ、１０４は排他的論理和演算部、１０５はセレクタ、１０６は排他的論理和演算部、１０７はＡＥＳのAddRoundKey演算を行うAddRoundKey演算部、１０８はＡＥＳのShiftRows演算及びInvShiftRows演算を行うShiftRows/InvShiftRows演算部、１０９はセレクタ、１１０はAddRoundKey演算部、１１１はMixColumns／InvMixColumns演算部、１１２はセレクタ、１１３は排他的論理和演算部を表す。
【０１６５】
セレクタ１０９，５４，５５，１１２は、いずれも、暗号演算時にはｅ側に接続し、復号演算時にはｄ側に接続する。
【０１６６】
セレクタ１０５は、開始時にｓ１側に接続し、次のラウンド以降はｓ２側に接続し、最終ラウンドではｓ３側に接続する。
【０１６７】
マスクデータ生成部１０１は、例えば、１ラウンド毎に、一時マスクデータを生成する。
【０１６８】
レジスタ１０３の初期値は、“０”である。
【０１６９】
なお、図８の構成例は、図５において、ｍ２＝ｍ１としたものである。ｍ２をｍ１と独立させる場合には、例えば、図８の構成の一部を図９のように修正すればよい。図９において、第１のマスクデータ生成部１０１は、ｍ１の生成に用い、第２のマスクデータ生成部１１４は、ｍ２の生成に用いる。また、レジスタ１０３は第２のマスクデータ生成部１１４に接続される。また、排他的論理和演算部１１３は第２のマスクデータ生成部１１４に接続される。
【０１７０】
次に、図８又は図９に比較して、より素子数を削減した構成例について説明する。なお、ここでは、図８又は図９の構成例と相違する点を中心に説明する。
【０１７１】
ＡＥＳの各演算によるマスクデータへの影響を考えると、図５でのアフィン変換と同じように演算後にマスクの値が変るのは、他の演算では、MixColumns演算及びInvMixColumns演算だけである。なぜなら、AddRoundKey演算は、拡大鍵データとの排他的論理和演算であるので、マスクデータは変らない。また、ShiftRows演算は、バイト単位でのデータの並び換えであるので、マスクデータの並び換えを行うだけで良い。データの並び換えは、回路の実装では配線を並び換えるだけよく、特別な回路は必要せずにShiftRows演算後の値を得ることができるため、この演算によるマスクデータへの影響はないと考えることができる。
【０１７２】
これに対して、MixColumns演算及びInvMixColumns演算は、演算対象のデータ内において、４バイト単位で演算を行うため、マスクデータの値は変化する。しかし、マスクデータとして、同じ値を４バイト並べたものを考えると、そのようなマスクデータは、MixColumns演算とInvMixColumns演算のいずれによっても、変らない。
【０１７３】
すなわち、MixColumns演算においては、演算対象のデータについて、４バイト毎に次式（５）のような計算を行う。  
MixColumns（d0、d1、d2、d3）＝｛02｝・d0  xor  ｛03｝・d1  xor  d2  xor d3  
…（５）
なお、式（５）の・はガロア体の乗算を示す。ここで、d0、d1、d2、d3がすべて同じ値dsであれば、次式（６）のように計算される。ここで、｛03｝・dsを｛02｝・ds  xor  dsと分割できることを利用している。
【０１７４】
MixColumns（ds、ds、ds、ds）  
＝｛02｝・ds  xor  ｛03｝・ds  xor  ds  xor  ds  
＝｛02｝・ds  xor  （｛02｝・ds  xor  ds）  xor  ds  xor  ds  
＝ds                                                                  …（６）
InvMixColumnsの演算も、上記と同様に４バイトのデータが同じであれば、InvMixColumns演算により、演算結果はdsとなる。
【０１７５】
従って、MixColumns/InvMixColumns演算について不変であるようなマスクデータ（一時マスクデータ）を必ず用いることによって、図８又は図９の構成から、MixColumns／InvMixColumns演算部１０２を省くことができる。
【０１７６】
図１０に、図８の構成から、MixColumns／InvMixColumns演算部１０２を省いた暗号演算装置の構成例を示す。また、図１１に、図９の部分からMixColumns／InvMixColumns演算部１０２を省いた構成例を示す。
【０１７７】
以下、図１０の構成例について説明する。
【０１７８】
排他的論理和演算部１０６において、演算対象のデータが、マスクデータ生成部１０１が生成した一時マスクデータによりマスクされる。その後、AddRoundKey演算部１０７とShiftRows/InvShiftRows演算部１０８においては、一時マスクデータは、不変である。次に、SubBytes／InvSubBytes演算部１２０では、前述したように、一時マスクデータから固定マスクデータへ付け替えた上で演算が行われた後に、固定マスクデータから一時マスクデータへ付け替えて出力が行われるので、一時マスクデータへの影響はない。そして、MixColumns／InvMixColumns演算部１１１とAddRoundKey演算部１０７においても、一時マスクデータは、不変である。以上から、図１０の構成によっても、正しい演算結果を得ることができることが分る。もちろん、図１１の構成についても同様である。
【０１７９】
以上のように、４バイト毎に同じマスクデータを用いることで、マスクデータ用のMixColumns/InvMixColumns演算部を削減可能な回路構成とすることができる。
【０１８０】
次に、これまでの構成例を少し修正した構成例について説明する。
【０１８１】
さて、暗号演算装置に高い処理能力が求められる場合、最大遅延時間は短い方が望ましい。つまり、最大遅延時間を決定するクリティカルパス上にある素子や回路などは少ない方が良く、例えば、データの選択を行うセレクタは、できる限り少なくした方が望ましい。
【０１８２】
そこで、ＡＥＳのShiftRows/InvShiftRows演算とSubBytes／InvSubBytes演算について考える。
【０１８３】
ShiftRows演算とInvShiftRows演算では、データの並べ替えの順序が異るため、図１０又は図１１の構成例では、セレクタ１０９によって暗号演算時と復号演算時のデータの切り替えを行っている。
【０１８４】
そこで、図８〜図１１の各構成例それぞれについて、ShiftRows/InvShiftRows演算を、ShiftRows演算とInvShiftRows演算とに分離し、かつ、ShiftRows演算及びInvSubBytes演算を、それぞれ、後段のSubBytes演算用入力及びInvSubBytes演算用入力に接続することで、セレクタ１０９を削減することができる。
【０１８５】
図１２に、この場合に利用可能な、サイドチャネル対策を実装した、SubBytes演算部とInvSubBytes演算部を一体化した演算部の構成例を示す。なお、ここでは、図５の構成例と相違する点を中心に説明する。
【０１８６】
図１２において、７１は復号演算時のアフィン変換を行うアフィン変換部（第１の線形演算部）、７２は暗号演算時のアフィン変換を行うアフィン変換部（第２の線形演算部）、７３は復号演算時／暗号演算時の両方でGF(2８)上の逆元演算を行う逆元演算部（非線形演算部）、７４，７５は復号演算と暗号演算の切り替えを行うためのセレクタ（第１の選択部、第２の選択部）、８１〜８６は排他的論理輪を行うＸＯＲ演算部である（８１，８２：第1のマスク付替部、８３，８４：第３のマスク付替部、８５，８６：第２のマスク付替部）。
【０１８７】
図１２の構成例は、図５に比較して、入力側が、SubBytes演算用入力（暗号演算時の入力）とInvSubBytes演算用入力（復号演算時の入力）とが、別系統になっている。
【０１８８】
図１２の演算部の暗号演算時の動作手順の一例は、基本的には、図６と同じである。
【０１８９】
まず、セレクタ７４，７５を暗号演算側に切り替える（ステップＳ２１）。
【０１９０】
次に、入力されたマスク付きデータについて、一時マスクデータｍ１から固定マスクデータｒｆｘ２への付け替えを行う（ステップＳ２２）。
【０１９１】
次に、逆元演算部７３が、マスク付きデータについて、逆元演算を行う（ステップＳ２３）。なお、逆元演算の前後で固定マスクデータの付け替えを行う場合には、逆元演算の結果として、固定マスクデータの付け替えが為されたものが、得られる。ここでは、ｒｆｘ２に付け替えられるものとする。
【０１９２】
次に、アフィン変換部７２が、アフィン変換を行う（ステップＳ２４）。なお、ここでは固定マスクデータはアフィン変換によって不変であるので、固定マスクデータの付け替えは不要である。
【０１９３】
そして、アフィン変換部７２から出力されたマスク付きデータについて、固定マスクデータｒｆｘ２から一時マスクデータｍ２への付け替えを行って、これを出力する（ステップＳ２５）。
【０１９４】
図１２の演算部の復号演算時の動作手順の一例は、基本的には、図７と同じである。
【０１９５】
まず、セレクタ７４，７５を復号演算側に切り替える（ステップＳ３１）。
【０１９６】
次に、入力されたマスク付きデータについて、一時マスクデータｍ３から固定マスクデータｒｆｘ１への付け替えを行う（ステップＳ３２）。ただし、ここでは、ｒｆｘ１の代わりに、後述するｒｆｘ´への付け替えを行う。
【０１９７】
次に、アフィン変換部７１が、アフィン変換を行う（ステップＳ３３）。なお、ここでは固定マスクデータｒｆｘ´はアフィン変換によって、暗号演算時の固定マスクデータｒｆｘ１と同じ値に変換されるので、固定マスクデータの付け替えは不要である。
【０１９８】
次に、逆元演算部７３が、マスク付きデータについて、逆元演算を行う（ステップＳ３４）。なお、上記のように、逆元演算の前後で固定マスクデータの付け替えを行う場合には、逆元演算の結果として、固定マスクデータの付け替えが為されたものが、得られる。ここでは、ｒｆｘ２に付け替えられるものとする。
【０１９９】
そして、逆元演算部７３から出力されたマスク付きデータについて、固定マスクデータｒｆｘ２から一時マスクデータｍ４への付け替えを行って、これを出力する（ステップＳ３５）。
【０２００】
次に、暗号演算時の動作について説明する。
【０２０１】
図１２のSubBytes演算用入力には、他の例と同様、ｄ１  ｘｏｒ  ｍ１が入力される。
【０２０２】
ＸＯＲ演算部８１は、他の例と同様、ｍ１  ｘｏｒ  ｒｆｘ１を出力する。
【０２０３】
ＸＯＲ演算部８２は、他の例と同様、ｄ１  ｘｏｒ  ｒｆｘ１を出力し、これが逆元演算部７３に与えられる。
【０２０４】
以降は、図５の例と同じであり、最終的に、Ａｆｆｉｎｅ（ｄ１−１）  ｘｏｒ  ｍ２が出力される。
【０２０５】
次に、復号演算時の動作について説明する。
【０２０６】
図１２のInvSubBytes演算用入力には、他の例と同様、ｄ２  ｘｏｒ  ｍ３が入力される。
【０２０７】
ＸＯＲ演算部８３は、一時マスクデータｍ３と固定マスクデータ（ここではｒｆｘ´とする。）とを入力し、それらの排他的論理和ｍ３  ｘｏｒ  ｒｆｘ´を出力する。ｒｆｘ´については後述する。
【０２０８】
ＸＯＲ演算部８４は、上記入力ｄ２  ｘｏｒ  ｍ３と、ＸＯＲ演算部部８３の出力ｍ１  ｘｏｒ  ｒｆｘ´とを入力し、それらの排他的論理和（ｄ２  ｘｏｒ  ｍ３）  ｘｏｒ  （ｍ３  ｘｏｒ  ｒｆｘ´）＝ｄ２  ｘｏｒ  ｒｆｘ´を出力する。
【０２０９】
アフィン変換部１１は、ＸＯＲ演算部８４の出力ｄ２  ｘｏｒ  ｒｆｘ´を入力し、そのアフィン変換Ａｆｆｉｎｅ（ｄ２  ｘｏｒ  ｒｆｘ´）＝Ａｆｆｉｎｅ（ｄ２）  ｘｏｒ  Ａｆｆｉｎｅ（ｒｆｘ´）を出力し、これが逆元演算部７３に与えられる。ここで、後述するように、Ａｆｆｉｎｅ（ｄ２）  ｘｏｒ  Ａｆｆｉｎｅ（ｒｆｘ´）＝Ａｆｆｉｎｅ（ｄ２）  ｘｏｒ  ｒｆｘ１となる。
【０２１０】
以降は、図５の例と同じであり、最終的に、（Ａｆｆｉｎｅ（ｄ２））−１  ｘｏｒ  ｍ４が出力される。
【０２１１】
ここで、上記のｒｆｘ´について説明する。
【０２１２】
図１２の暗号演算系統では、図５の例の場合と同様に、ｒｆｘ１として、アフィン変換（アフィン変換部１１，５１，７１のアフィン変換）について不変となる値、すなわち、ｒｆｘ１＝Ａｆｆｉｎｅ（ｒｆｘ１）を満たすような値を採用するものとしている。
【０２１３】
これに対して、図１２の復号演算系統では、次式（７）が成立する値を用いて実装することができる。すなわち、ｒｆｘ´は、そのアフィン変換（アフィン変換部１１，５１，７１のアフィン変換）が、暗号変換時のｒｆｘ１を与えるような値である。なお、このとき、ｒｆｘ´のハミング重みとｒｆｘ１のハミング重みとが変わらないことが、サイドチャネル攻撃の対策としては重要である。  
ｒｆｘ１＝Ａｆｆｉｎｅ（ｒｆｘ´）      …（７）
したがって、この場合、上記のように、アフィン変換部１１の出力は、Ａｆｆｉｎｅ（ｄ２）  ｘｏｒ  Ａｆｆｉｎｅ（ｒｆｘ´）＝Ａｆｆｉｎｅ（ｄ２）  ｘｏｒ  ｒｆｘ１となる。
【０２１４】
なお、この場合に、暗号演算時のｒｆｘ１は、アフィン変換部１１のアフィン変換について、不変でなくても良い（ただし、不変であっても構わない）。
【０２１５】
また、暗号演算時のｒｆｘ１が、アフィン変換部１１のアフィン変換について不変である場合に、ｒｆｘ´として、ｒｆｘ１と同じ値を用いても構わない。
【０２１６】
なお、図１２において、第２の固定マスクデータを、アフィン変換について不変でないとしても良い。この場合には、図１のＸＯＲ演算部２４と同じ構成を採用すれば良い。
【０２１７】
図１３に、図１２のSubBytes/InvSubBytes演算部を適用した暗号演算装置の構成例を示す。
【０２１８】
図１３において、２２０の部分が、図１２で示したSubBytes/InvSubBytes演算部である。なお、図１３において、ＸＯＲ演算部８１、ＸＯＲ演算部８３及びＸＯＲ演算部８５は省略している。
【０２１９】
また、図８と比較して、ShiftRows/InvShiftRows演算部１０８が、ShiftRows演算部２０８及びInvShiftRows演算部２０９に置き換えられ、セレクタ１０９が削除されている。なお、それら以外の部分は、基本的に、従来のものと同じで構わない。
【０２２０】
図１３においては、排他的論理和演算部８４が復号データパスに入るために回路規模は少し増えるが、図８と比較して通過するセレクタの数が減ることにより、クリティカルパスは短くなる。なぜなら、図８では、SubBytes／InvSubBytes演算部１２０において必ず排他的論理和演算部６２を用いてマスクデータの付け替えを行うので、図１２のSubBytes／InvSubBytes演算部２２０において、復号データパスに排他的論理和演算部８４が追加されたとしても、そのために最大遅延時間が変わることはなく、全体としては、セレクタの数が減った分、最大遅延時間が短くなるからである。よって、図８に比較して、暗号演算回路の処理能力が高くなる。
【０２２１】
なお、図１３の構成例は、図８で説明した構成例に修正を施したものであるが、図９〜図１の各構成例それぞれについて同様に修正を施すことが可能である。
【０２２２】
なお、この場合にも、４バイト毎に同じマスクデータを用いることで、マスクデータ用のMixColumns/InvMixColumns演算部を削減しても良い。
【０２２３】
また、マスクデータ中における０の個数と１の個数とが同じ（或いは、ほぼ同じ）にしても良い。
【０２２４】
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【図面の簡単な説明】
【０２２５】
【図１】本発明の一実施形態に係る演算部の構成例を示す図
【図２】同実施形態に係る演算部の暗号演算時の動作手順の一例を示すフローチャート
【図３】同号施形態に係る演算部の復号演算時の動作手順の一例を示すフローチャート
【図４】同実施形態に係る演算部の構成例を示す図
【図５】同実施形態に係る演算部の更に構成例を示す図
【図６】同実施形態に係る演算部の暗号演算時の動作手順の他の例を示すフローチャート
【図７】同号施形態に係る演算部の復号演算時の動作手順の他の例を示すフローチャート
【図８】同実施形態に係る暗号演算装置の構成例を示す図
【図９】同実施形態に係る暗号演算装置の他の構成例を示す図
【図１０】同実施形態に係る暗号演算装置の更に他の構成例を示す図
【図１１】同実施形態に係る暗号演算装置の更に他の構成例を示す図
【図１２】同実施形態に係る演算部の更に構成例を示す図
【図１３】同実施形態に係る暗号演算装置の更に他の構成例を示す図
【図１４】従来の演算部を示す図
【符号の説明】
【０２２６】
１１，１２，３１，３２，４７，５１，５２，７１，７２…アフィン変換部、１３，３３，５３，７３…逆元演算部、１４，１５，３４，３５，４８，５４，５５，７４，７５，１０５，１０９…セレクタ、２１〜２６，４１〜４６，６１〜６４，８１〜８６，１０４，１０６，１１３…排他的論理和演算部、１０１，１１４…マスクデータ生成部、１０２，１１１…MixColumns／InvMixColumns演算部、１０３…レジスタ、１０７，１１０…AddRoundKey演算部、１０８…ShiftRows/InvShiftRows演算部、２０８…ShiftRows演算部、２０９…InvShiftRows演算部、１２０，２２０…SubBytes／InvSubBytes演算部
【図１】
2010141430.tif 000003
【図２】
2010141430.tif 000004
【図３】
2010141430.tif 000005
【図４】
2010141430.tif 000006
【図５】
2010141430.tif 000007
【図６】
2010141430.tif 000008
【図７】
2010141430.tif 000009
【図８】
2010141430.tif 000010
【図９】
2010141430.tif 000011
【図１０】
2010141430.tif 000012
【図１１】
2010141430.tif 000013
【図１２】
2010141430.tif 000014
【図１３】
2010141430.tif 000015
【図１４】
2010141430.tif 000016