(57)【要約】【課題】データバス幅の限られた汎用ＣＰＵを利用して暗号演算を行う際、演算処理時の消費電力等を解析して秘密情報を抽出する脅威に対抗可能な装置を提供する。【解決手段】分割テーブル作成装置１０００は、複数のアドレス毎にｎビットの出力用データが定義され、データをアドレスとしてデータを出力用データに変換するＬＵＴ１を持つＲＯＭ１０１と、データバス幅がｍビットで、ＬＵＴ１を読み込み、アドレス毎の各ｎビット出力用データを同じビット位置を境界としてｍ／２以下のビット数の各部分ビットに分割し、各部分ビットに付加ビットを付加した全体ビットをデータバス幅のｍビットとし、かつ、ハミング重みが各全体ビットで同一となるべく付加ビット値を決定し、出力用データにおけるビット位置が同じ部分ビットを含む全体ビット同士からなり、かつ、アドレスと部分ビットの対応関係を維持する複数の分割テーブルを作成するＣＰＵ１００とを備えた。【選択図】図１
2008271048.tif 000002
【特許請求の範囲】
【請求項１】
複数のアドレスごとにｎ（ｎは２以上の整数）ビットの出力用データが定義されており、データをアドレスとして、前記データを前記出力用データに変換するために使用される変換テーブルを格納した変換テーブル格納部と、
データバスの幅がｍ（ただし、２≦ｍ≦２ｎ）ビットであるＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）であって、前記変換テーブル格納部から前記変換テーブルを読み込み、読み込んだ前記変換テーブルに基づき前記アドレスごとのｎビットの前記出力用データのそれぞれを同じビット位置を境界としてｍ／２以下のビット数からなる複数の部分ビットに分割し、分割したそれぞれの前記部分ビットに付加ビットを付加することにより前記部分ビットと前記付加ビットとの全体である全体ビットを前記データバスの幅のｍビットとするとともにハミング重みがそれぞれの前記全体ビットにおいて同一となるように前記付加ビットの値を決定し、前記出力用データにおけるビット位置を同じくする前記部分ビットを含む前記全体ビット同士からなるとともに前記アドレスと前記部分ビットとの対応関係を維持している複数の分割テーブルを作成するＣＰＵと
を備えたことを特徴とする分割テーブル作成装置。
【請求項２】
前記ＣＰＵは、
乱数を発生させることができるとともに、発生させた乱数によって前記付加ビットの値を決定することを特徴とする請求項１記載の分割テーブル作成装置。
【請求項３】
前記ＣＰＵは、
それぞれの前記分割テーブルを順次参照して前記アドレスを同じくする前記全体ビットを参照し、前記アドレスを同じくする前記全体ビットの前記部分ビットを結合することにより前記アドレスとされた前記データを変換する合成器を備えたことを特徴とする請求項１または２のいずれかに記載の分割テーブル作成装置。
【請求項４】
前記ＣＰＵは、
前記アドレスごとのｎビットの前記出力用データのそれぞれを同じビット位置を境界としてｍ／２以下のビット数からなる複数の部分ビットに分割する場合には、予め設定された規則に基づいて、境界とするビット位置を決定することを特徴とする請求項１〜３のいずれかに記載の分割テーブル作成装置。
【請求項５】
前記予め設定された規則は、
前記データバスのビット間の相関に基づき作成されていることを特徴とする請求項４記載の分割テーブル作成装置。
【請求項６】
複数のアドレスごとにｎ（ｎは２以上の整数）ビットの出力用データが定義されており、データをアドレスとして、前記データを前記出力用データに変換するために使用される変換テーブルを格納した変換テーブル格納部と、データバスの幅がｍ（ただし、２≦ｍ≦２ｎ）ビットであるＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）とを備えたコンピュータに以下の処理を実行させる分割テーブル作成プログラム
（１）前記変換テーブル格納部から前記変換テーブルを読み込む処理
（２）読み込んだ前記変換テーブルに基づき前記アドレスごとのｎビットの前記出力用データのそれぞれを同じビット位置を境界としてｍ／２以下のビット数からなる複数の部分ビットに分割する処理
（３）分割したそれぞれの前記部分ビットに付加ビットを付加することにより前記部分ビットと前記付加ビットとの全体である全体ビットを前記データバスの幅のｍビットとするとともにハミング重みがそれぞれの前記全体ビットにおいて同一となるように前記付加ビットの値を決定する処理
（４）前記出力用データにおけるビット位置を同じくする前記部分ビットを含む前記全体ビット同士からなるとともに前記アドレスと前記部分ビットとの対応関係を維持している複数の分割テーブルを作成する処理。
【請求項７】
前記ＣＰＵは、
乱数を発生させることができ、
前記分割テーブル作成プログラムは、
前記ＣＰＵに乱数を発生させ、発生させた乱数によって前記付加ビットの値を決定する処理を前記コンピュータに実行させることを特徴とする請求項６記載の分割テーブル作成プログラム。
【請求項８】
前記分割テーブル作成プログラムは、
それぞれの前記分割テーブルを順次参照して前記アドレスを同じくする前記全体ビットを参照し、前記アドレスを同じくする前記全体ビットの前記部分ビットを結合することにより前記アドレスとされた前記データを変換する処理を前記コンピュータに実行させることを特徴とする請求項６または７のいずれかに記載の分割テーブル作成プログラム。
【請求項９】
前記分割テーブル作成プログラムは、
前記アドレスごとのｎビットの前記出力用データのそれぞれを同じビット位置を境界としてｍ／２以下のビット数からなる複数の部分ビットに分割する処理を前記コンピュータに実行させる場合には、予め設定された規則に基づいて境界とするビット位置を決定することを前記コンピュータに実行させることを特徴とする請求項６〜８のいずれかに記載の分割テーブル作成プログラム。
【請求項１０】
前記予め設定された規則は、
前記データバスのビット間の相関に基づき作成されていることを特徴とする請求項９記載の分割テーブル作成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、複数のアドレスごとにｎビットの出力用データが定義されており、データをアドレスとして、前記データを前記出力用データに変換するために使用される変換テーブルを複数の分割テーブルに分割する分割テーブル作成装置及び分割テーブル作成プログラムに関する。
【背景技術】
【０００２】
従来の「情報処理装置」は、暗号処理に用いる鍵データを、その反転データと共にＥ２ＰＲＯＭに記憶しておき、Ｅ２ＰＲＯＭより鍵データとその反転データを読み出し、それらのうちの鍵データをもとに暗号回路で暗号処理を実行し、この実行結果を用いてＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）にて演算プログラムを実行していた（例えば、特許文献１）。
【特許文献１】特開２００３−１８１４３号公報  第１１頁、第１図、第２図
【発明の開示】
【発明が解決しようとする課題】
【０００３】
従来の「情報処理装置」（例えば特許文献１）では、Ｅ２ＰＲＯＭから鍵データとその反転データを読み出し、それらのうちの鍵データをもとに暗号回路で暗号処理を実行していたので、暗号回路で暗号演算を行っていた。そのため、データ処理を実行するＣＰＵだけで暗号処理することができないという課題があった。
【０００４】
また、従来の「情報処理装置」（例えば特許文献１）では、鍵データとその反転データをＥ２ＰＲＯＭに記憶しておくために、鍵データの倍のビット長のＥ２ＰＲＯＭが必要であり、データバス幅が固定化されているＣＰＵでは、鍵データとその反転データを同時に保持できないという課題があった。
【０００５】
さらに、従来の「情報処理装置」（例えば特許文献１）では、鍵データとその反転データをＥ２ＰＲＯＭに記憶しておくので、鍵データの読み出しや暗号回路の動作時の消費電力が、鍵データの値によって変化せず一定となるようになるが、演算データの値に対しては演算データ処理時の消費電力が変化するという課題があった。
【０００６】
本発明は、データバス幅の限られた汎用のＣＰＵを利用して暗号演算を行う際に、演算処理時の消費電力等を解析して秘密情報を抽出する脅威に対抗するために、解析が困難となる消費電力を呈するデータ変換手法およびプログラム手法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
この発明の分割テーブル作成装置は、
複数のアドレスごとにｎビットの出力用データが定義されており、データをアドレスとして、前記データを前記出力用データに変換するために使用される変換テーブルを格納した変換テーブル格納部と、
データバスの幅がｍ（ただし、ｍ≦２ｎ）ビットであるＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）であって、前記変換テーブル格納部から前記変換テーブルを読み込み、読み込んだ前記変換テーブルに基づき前記アドレスごとのｎビットの前記出力用データのそれぞれを同じビット位置を境界としてｍ／２以下のビット数からなる複数の部分ビットに分割し、分割したそれぞれの前記部分ビットに付加ビットを付加することにより前記部分ビットと前記付加ビットとの全体である全体ビットを前記データバスの幅のｍビットとするとともにハミング重みがそれぞれの前記全体ビットにおいて同一となるように前記付加ビットの値を決定し、前記出力用データにおけるビット位置を同じくする前記部分ビットを含む前記全体ビット同士からなるとともに前記アドレスと前記部分ビットとの対応関係を維持している複数の分割テーブルを作成するＣＰＵと
を備えたことを特徴とする。
【発明の効果】
【０００８】
この発明により、データバス幅の限られた汎用のＣＰＵを利用して暗号演算を行う際に、演算処理時の消費電力等を解析して秘密情報を抽出する脅威に対抗することができる。
【発明を実施するための最良の形態】
【０００９】
実施の形態１．
本発明の詳細な実施の形態１について図１を参照し説明する。図１は、コンピュータである分割テーブル作成装置１０００の構成を示す図である。分割テーブル作成装置１０００は、ＣＰＵ１００と、ＲＯＭ１０１（変換テーブル格納部の一例）と、ＲＡＭ１０２とを備える。
【００１０】
ＣＰＵ１００は、算術演算、論理演算、データのストア／ロードができる汎用ＣＰＵである。ＣＰＵ１００は後述する合成器１０４を備える。
【００１１】
ＲＯＭ１０１は、プログラム、固定データが格納される不揮発ＲＯＭである。ＲＯＭ１０１は、後述のＬＵＴ（Ｌｏｏｋ  Ｕｐ  Ｔａｂｌｅ）１（変換テーブル）を格納している。
【００１２】
ＲＡＭ１０２は、ＣＰＵ１００の一時的な作業領域を提供する揮発ＲＡＭである。ＲＡＭ１０２は、後述の分割テーブルであるＬＵＴ（１−１）、ＬＵＴ（１−２）を格納する。ＲＡＭ１０２に代えて、フラッシュメモリなどの不揮発性メモリを用いてＬＵＴ（１−１）、ＬＵＴ（１−２）を格納しても構わない。
【００１３】
データバス１０３は、ＣＰＵ１００、ＲＯＭ１０１、ＲＡＭ１０２を結ぶデータバスである。簡単のため、本実施の形態１では、データバス１０３は８ビット固定とする。
【００１４】
その他に、外部との通信を行うＩ／Ｏ装置なども含むこともあるが、図１では省略している。また、図１ではＣＰＵ１００、ＲＯＭ１０１、ＲＡＭ１０２が別々の素子のイメージで書かれているが、１チップマイコンのように１つのパッケージにこれらの構成要素が組み込まれていても構わない。
【００１５】
（ＣＰＵの一般的処理）
図２は、一般的なＣＰＵを用いたときの、プログラムの進行状況を模式的に表したものである。
（１）ＣＰＵ１００は、ＲＯＭ１０１に書き込まれているプログラムを読出し、解釈する（Ｓ１００）。
（２）プログラムに書かれている内容に沿ってデータを準備する（Ｓ１０１）。「データ準備とは、ＣＰＵ１００内のレジスタ（図示せず）、ＲＡＭ１０２の指定アドレス、ＲＯＭ１０１の指定アドレスのデータを参照することである。さらに、プログラムに直に書かれているデータを参照する場合もある。
（３）ついで、ＣＰＵ１００は準備されたデータの処理を行う（Ｓ１０２）。データ処理には、算術演算、論理演算、データ交換などがある。
（４）最後に、処理されたデータを指定された場所に格納する（Ｓ１０３）。格納先は、ＣＰＵ１００内のレジスタ、ＲＡＭ１０２の指定アドレス、ＲＯＭ１０１の指定アドレスである。これら一連のステップを繰り返し行うことで、ＣＰＵ１００はプログラムに記述された作業を完結する。
【００１６】
プログラムに記述される作業は種々あるが暗号処理の場合、プログラムには次のような処理が記述され、これらを順次処理することで暗号処理を完結する。
「１．入力データ（平文）の参照」、
「２．鍵データの参照」、
「３．データ同士の演算（算術演算、論理演算）」、
「４．ＬＵＴ（Ｓボックス）の参照」、
「５．データ（ビット）の入替え」、
「６．演算結果の出力」
【００１７】
これらの処理のうち、最も電力を消費するのは、「１．入力データ（平文）の参照」と「６．演算結果の出力」である。これは、図１に記載されていない外部Ｉ／Ｏを参照し動作させるため、自然消費電力は大きくなる。しかし、この処理で扱うデータは、平文、演算結果であるため、秘密情報とは無関係である。
【００１８】
次に消費電力が大きいのは、「２．鍵データの参照」と「４．ＬＵＴ（Ｓボックス）の参照」である。鍵データやＳボックスは、ＣＰＵ１００に記録されるのではなく、ＲＯＭ１０１に記録されることが多いためである。ＣＰＵ１００外部のデータを参照するため、「１．入力データ（平文）の参照」と「６．演算結果の出力」ほどではないにしても、電力を消費する。鍵データが秘密情報であるが、鍵データが固定となっているシステムでは、毎回同じ鍵データを参照するために、鍵データを参照する毎に消費電力が異なるということはない。そのため、鍵データを１ビットずつ参照し、かつ、ビットの値（０か１）によって消費電力が大きく異なる場合を除き、「２．鍵データの参照」の処理が攻撃対象になることは少ない。「４．ＬＵＴ（Ｓボックス）の参照」はデータをアドレスとしてＳボックスを参照するため、消費電力は参照ごとに異なる。データは各種演算がなされた結果であるので、鍵データも演算過程で使用されている。そのため、「４．ＬＵＴ（Ｓボックス）の参照」の処理が攻撃対象になることが多く、各種実験でも「４．ＬＵＴ（Ｓボックス）の参照」の処理タイミングにおいて、秘密情報が漏洩している事実を観測することができる。
【００１９】
「３．データ同士の演算（算術演算、論理演算）」と「５．データ（ビット）の入替え」の処理は、ＣＰＵ１００内のレジスタ間で処理されるので、消費電力は最も小さく、これらの処理を攻撃対象にすることは少ない。
【００２０】
以上の「１．入力データ（平文）の参照」〜「６．演算結果の出力」に関する説明から、「４．ＬＵＴ（Ｓボックス）の参照」の処理で漏洩する秘密情報量を低減することが、最も有効な対策となる。
【００２１】
図３に「４．ＬＵＴ（Ｓボックス）の参照」の処理で使われるであろうＬＵＴ１（Ｓボックス）の一例を示す。このＬＵＴ１は、ＲＯＭ１０１に格納されている。図３は、アドレスに対して出力するデータの関係を一覧にしたものである。表の右コラムには出力データのハミング重み（出力データのビットの値が１であるビットの数）を示している。図３からわかるように、出力データの値によりハミング重みは異なる。Ｓボックスは、データをアドレスとして引かれるので、データに対して出力データのハミング重みが異なることを示している。
【００２２】
ここでハミング重みが異なるということは、ＬＵＴ１を参照する電子回路の状態が異なることを意味する。電子回路の状態０と状態１では、当然消費される電力や放射される電磁波が異なる。また状態が変化する、つまり、状態０から状態１に変化する、または、状態１から状態０に変化する場合でも、当然消費される電力や放射される電磁波が異なる。一方、電力や電磁波は電子回路全体もしくはプローブされる電子回路の一部分として観測されるので、ハミング重みが異なると、電力や電磁波が異なることになる。例えば、図３では、アドレス０の状態とアドレス３１の状態では、ハミング重みが０と５であるので、電力や電磁波が異なる。また、アドレス０の状態からアドレス３１の状態に移ると、ハミング重みが０から５に変化するので、この場合も電力、電磁波が変化する。
【００２３】
本実施の形態１では、図１のＲＯＭ１０１に格納されるＬＵＴ１の構成を、図４に示す２つのＬＵＴ（１−１）とＬＵＴ（１−２）とに分割し、かつ、各出力データのハミング重みが一致するようにする。
【００２４】
ここで分割するときのポイントは２つある。一つはハミング重みを同じくすることである。二つ目は、ビット間に相関が表れる場合には、そのビット間の相関を時間的に切断することである。これらを以下に説明する。
【００２５】
図３に示すＬＵＴ１は出力データが５ビットである。一方、図１に示すデータバス１０３は８ビットであるで、分割されたデータ長がデータバス幅の半分の４ビットを超えないように分割する。この場合は、４ビットと１ビット、３ビットと２ビット、２ビットと３ビット、１ビットと４ビットの組合せが考えられる。どの組合せを選んでも良いが、後ほど述べるデータバス１０３のビット間の相関を考慮して、分割を行う。本実施の形態１では、４ビットと１ビットに分割することにする。
【００２６】
実際に電力解析を行うと、データバス１０３のビット間に相関のあると判断されるケースがある。すなわち、例えば、ＬＳＢである０ビット目と１ビット目は同時に秘密情報を漏洩する傾向が高いと言うことである。具合的には、例えば図３のＬＵＴ１において、アドレス０の出力データ「０００００」において、０ビット目と１ビット目とに相関が表れてしまう場合である。このような場合、ＬＵＴ１にアクセスする際、０ビット目と１ビット目にＬＵＴ１のデータが載らないようにすることで、その相関を抑えることが可能である。
【００２７】
（相関の切断）
図４は、このように０ビット目と１ビット目とに相関がある場合に、ＬＵＴ１をＬＵＴ（１−１）とＬＵＴ（１−２）とに分割した例を示している。ＬＵＴ１の出力データの上位４ビットが、ＬＵＴ（１−１）の上位４ビットに相当する。また、ＬＵＴ１の出力データの０ビット目がＬＵＴ（１−２）の出力データの０ビット目に相当する。これは、データバス１０３の０ビット目と１ビット目とに相関があるので、その相関をおさえるために、０ビット目と１ビット目にＬＵＴ１のデータが配置されないように、ＬＵＴ１の出力データを０ビット目と１ビット目とを境界として分割し、ＬＵＴ（１−１）とＬＵＴ（１−２）とを作成した場合である。
【００２８】
（ハミング重みの同一化）
ＬＵＴ（１−１）の下位４ビット、ＬＵＴ（１−２）の上位７ビットは、ＬＵＴ１の出力データとは関係ないビットである。このため、この関係のないビットは、ＣＰＵ１００が乱数を発生し、発生した乱数によりビットの値を決める。この際、出力データのハミング重みを一定とする制約をつける。図４ではハミング重みを４とした場合を示している。
【００２９】
ＬＵＴ１をＬＵＴ（１−１）とＬＵＴ（１−２）とに分割する処理をＣＰＵの処理動作との関係で説明する。図３の説明で述べたようにＲＯＭ１０１は、複数のアドレスごとにｎビット（図３はｎ＝５）の出力用データが定義されており、データをアドレスとして、データを出力用データに変換するために使用されるＬＵＴ１を格納している。またＣＰＵ１００のデータバスの幅は、ｍ（ただし、ｍ≦２ｎ）ビットである。
本実施の形態１ではｍ＝８である。
【００３０】
（ＣＰＵ１００の分割テーブルの作成動作）
（１）ＣＰＵ１００は、まず、ＲＯＭ１０１からＬＵＴ１のデータを読み込む。
（２）次に、ＣＰＵ１００は、読み込んだＬＵＴ１のデータに基づきアドレスごとのｎビット（ここではｎ＝５）の出力用データのそれぞれを同じビット位置を境界としてｍ／２（ここではｍ＝８）以下のビット数からなる複数の部分ビットに分割する。例えば、図３のアドレス０の出力データ「０００００」に対して、０ビット目を境界として（１ビット目を境界とみても構わない）「００００」と「０」とに分割する。「００００」と「０」とが部分ビットである。同様にアドレス１の出力データ「００００１」に対しても、０ビット目を境界として、「００００」と「１」とに分割する。「００００」と「１」とが部分ビットである。その他のアドレスに対応する出力データについても同様に分割する。
（３）ＣＰＵ１００は、分割したそれぞれの部分ビットに付加ビットを付加することにより部分ビットと付加ビットとの全体である全体ビットをデータバスの幅のｍビット（ここではｍ＝８）とするとともにハミング重みがそれぞれの全体ビットにおいて同一となるように前記付加ビットの値を決定する。すなわち、図４に示すようにアドレス０の場合で説明すれば、ＣＰＵ１００は、部分ビット「００００」に付加ビット「１１１１」を付加することにより８ビットである全体ビット「００００  １１１１」を作成する。また、もう一方の部分ビット「０」に付加ビット「１１１００１０」を付加することにより８ビットである全体ビット「１１１００１０  ０」を作成する。他のアドレスに対応する部分ビットについても同様である。
（４）ＣＰＵ１００は、図４に示すように、出力用データにおけるビット位置を同じくする部分ビットを含む全体ビット同士からなるとともにアドレスと部分ビットとの対応関係を維持している分割テーブルであるＬＵＴ（１−１）とＬＵＴ（１−２）とを作成する。例えば、ＬＵＴ（１−１）のアドレス０とアドレス１との出力データは「００００  １１１１」と「００００  １１１１」であるが、アドレス０の部分ビットである「００００」と、アドレス１の部分ビットである「００００」とは、ＬＵＴ１においてビット位置を同じくする部分ビットである。またＬＵＴ（１−１）及びＬＵＴ（１−２）におけるアドレスと部分ビットとの対応関係は、ＬＵＴ１における関係を維持している。ＣＰＵ１００は、作成したＬＵＴ（１−１）とＬＵＴ（１−２）とをＲＡＭ１０２に格納する。
【００３１】
なお、データ変換の動作は図５で説明するが、ＣＰＵ１００の合成器１０４は、ＲＡＭ１０２に格納されたＬＵＴ（１−１）、ＬＵＴ（１−２）を順次参照してアドレスを同じくする全体ビットを参照し、アドレスを同じくする全体ビットの部分ビットを結合することによりアドレスとされたデータを変換する。例えば、合成器１０４は、ＬＵＴ（１−１）、ＬＵＴ（１−２）を順次参照し、ＬＵＴ（１−１）のアドレス０の全体ビットである「００００  １１１１」と、ＬＵＴ（１−２）のアドレス０の全体ビットである「１１１００１０  ０」との部分ビットである「００００」と「０」とを結合して、データ「０」をアドレスとして、データ「０」を「０００００」に変換する。
【００３２】
なお、ＣＰＵ１００は、アドレスごとのｎビットの出力用データのそれぞれを同じビット位置を境界としてｍ／２以下のビット数からなる複数の部分ビットに分割する場合には、予め設定された規則に基づいて、境界とするビット位置を決定する。すなわち、図４の場合は、ＬＵＴ１の出力用データを分割する場合には、０ビットを境界として分割したが、いずれのビット位置を境界として分割するかは、データバス１０３におけるビット間の相関に基づき、予め規則として設定し、ＲＯＭ１０１に記憶させておく。ＣＰＵ１００は、この規則に従って、ＬＵＴ１の出力用データを所定のビット位置を境界として分割する。
【００３３】
図５は、図４で示した分割テーブルであるＬＵＴ（１−１）とＬＵＴ（１−２）とを用いたデータ処理の手順を示す。
【００３４】
まず、ＣＰＵ１００は、ＬＵＴ（１−１）を参照して、ＲＡＭ１０２に格納されたＬＵＴ（１−１）のデータを読出し（Ｓ１０２１）、レジスタ１（図示せず）に格納する（Ｓ１０２２）。
【００３５】
ついで、ＣＰＵ１００は、ＬＵＴ（１−２）を参照して、ＲＡＭ１０２に格納されたＬＵＴ（１−２）のデータを読出し（Ｓ１０２３）、レジスタ２（図示せず）に格納する（Ｓ１０２４）。
【００３６】
ＬＵＴ（１−１）、ＬＵＴ（１−２）の参照は逆にしても良い。その後、ＣＰＵ１００は、合成器１０４により、レジスタ１とレジスタ２とのデータ（全体ビット）のうち有効部分同士（部分ビットどうし）を結合する（Ｓ１０２５）。
【００３７】
この一連の手順により、ひとつの図３のＬＵＴ１を参照した場合と同じ結果を得ることができる。
【００３８】
以上の実施の形態１では装置としての分割テーブル作成装置１０００を説明したが、
分割テーブル作成装置１０００の動作をコンピュータに実行させる分割テーブル作成プログラムとして把握することも可能である。
【００３９】
本実施の形態１では、データバス幅の１／２より大きいデータ長を有するＬＵＴを、データバス幅の１／２以下のデータ長を有する複数のＬＵＴに分割し、分割ＬＵＴの各データのハミング重みが一定となるようにした。このため、ＬＵＴ参照時の状態差が少なくなり、かつ、ＬＵＴ参照時の状態遷移差も少なくなるので、ＬＵＴ参照時の電力等の変化量が小さくなり、処理時の消費電力等を解析して秘密情報を抽出する脅威に対抗できる。
【００４０】
また、データバス幅に応じてＬＵＴの分割を柔軟に対応させたので、データバス幅の限られた汎用のＣＰＵを利用して暗号演算が行えると共に、ＬＵＴ参照時の電力等の変化量が小さくなり、処理時の消費電力等を解析して秘密情報を抽出する脅威に対抗できる。
【００４１】
また、データバスのビット間の相関を時間的に切断するように、分割ＬＵＴの有効データのビット位置を決めるので、データバスのビット間の相関がなくなり、その結果、処理時の消費電力等を解析して秘密情報を抽出する脅威にさらに対抗できるようになる。
【００４２】
なお、本実施の形態１ではＬＵＴを２つに分けたが、データバス幅の１／２以下のデータ長を有する複数のＬＵＴなら、どのような分割を行ってもよい。すなわち、本実施の形態１では５ビットのＬＵＴ、８ビットのデータバス幅であるので、２ビット、２ビット、１ビットの組合せでも、２ビット、１ビット、１ビット、１ビットでもどちらでも構わない。
【図面の簡単な説明】
【００４３】
【図１】実施の形態１における分割テーブル作成装置１０００の構成図。
【図２】実施の形態１におけるＣＰＵの処理手順を示すフローチャート。
【図３】実施の形態１におけるＬＵＴ１の内容を示す図。
【図４】実施の形態１におけるＬＵＴ（１−１）、ＬＵＴ（１−２）の内容を示す図。
【図５】実施の形態１における分割テーブル作成装置のデータ変換のフローチャート。
【符号の説明】
【００４４】
１００  ＣＰＵ、１０１  ＲＯＭ、１０２  ＲＡＭ、１０３  データバス、１０４  合成器、１０００  分割テーブル作成装置。
【図１】
2008271048.tif 000003
【図２】
2008271048.tif 000004
【図３】
2008271048.tif 000005
【図４】
2008271048.tif 000006
【図５】
2008271048.tif 000007