(57)【特許請求の範囲】
【請求項１】
ソフトウェアの論理演算を秘匿化して実行する論理演算装置であって、
任意のデータ長であって、変数毎に異なるマスク値により、任意データ長の変数のマスク処理を行うマスク処理手段と、
マスク処理された変数のＡＮＤ演算またはＯＲ演算に、数１で表される共通関数とのＸＯＲ演算を施す論理演算手段と、
を備えることを特徴とする論理演算装置。
【数１】
0005951260.tif 000021
【請求項２】
前記マスク処理手段が、前記任意のデータ長であって、変数毎に異なるマスク値を生成し、前記任意のデータ長の変数と生成されたマスク値とのＸＯＲ演算を実行することにより、マスク処理を行うことを特徴とする請求項１に記載の論理演算装置。
【請求項３】
前記論理演算手段が、前記マスク処理された変数のＸＯＲ演算またはＮＯＴ演算を実行することを特徴とする請求項１または２に記載の論理演算装置。
【請求項４】
３つ以上の変数の論理演算を実行する場合に、
前記論理演算手段が、マスク処理された３つ以上の変数の中から２変数を抽出し、抽出した２変数のＡＮＤ演算またはＯＲ演算に、前記共通関数とのＸＯＲ演算を施し、当該ＸＯＲ演算の結果を新たなマスク処理された１変数とし、マスク処理された変数が最後の２つになるまで処理を繰り返し、当該最後の２つの変数のＡＮＤ演算またはＯＲ演算に、前記共通関数とのＸＯＲ演算を施すことを特徴とする請求項１から３のいずれか１項に記載の論理演算装置。
【請求項５】
ハードウェアの論理演算を秘匿化して実行する論理演算装置であって、
任意のデータ長であって、変数毎に異なるマスク値により、任意データ長の変数のマスク処理を行うマスク処理回路と、
マスク処理された変数のＡＮＤ演算またはＯＲ演算に、数２で表される共通関数とのＸＯＲ演算を施す論理演算回路と、
を備えることを特徴とする論理演算装置。
【数２】
0005951260.tif 000022
【請求項６】
前記マスク処理回路が、前記任意のデータ長であって、変数毎に異なるマスク値を生成し、前記任意のデータ長の変数と生成されたマスク値とのＸＯＲ演算を実行することにより、マスク処理を行うことを特徴とする請求項５に記載の論理演算装置。
【請求項７】
前記論理演算回路が、前記マスク処理された変数のＸＯＲ演算またはＮＯＴ演算を実行することを特徴とする請求項５または６に記載の論理演算装置。
【請求項８】
３つ以上の変数の論理演算を実行する場合に、
前記論理演算回路が、マスク処理された３つ以上の変数の中から２変数を抽出し、抽出した２変数のＡＮＤ演算またはＯＲ演算に、前記共通関数とのＸＯＲ演算を施し、当該ＸＯＲ演算の結果を新たなマスク処理された１変数とし、マスク処理された変数が最後の２つになるまで処理を繰り返し、当該最後の２つの変数のＡＮＤ演算またはＯＲ演算に、前記共通関数とのＸＯＲ演算を施すことを特徴とする請求項５から７のいずれか１項に記載の論理演算装置。
【請求項９】
マスク処理回路と、論理演算回路とを備えた、ハードウェアの論理演算を秘匿化して実行する論理演算装置における論理演算方法であって、
前記マスク処理回路が、任意のデータ長であって、変数毎に異なるマスク値により、任意データ長の変数のマスク処理を行う第１のステップと、
前記論理演算回路が、マスク処理された変数のＡＮＤ演算またはＯＲ演算に、数３で表される共通関数とのＸＯＲ演算を施す第２のステップと、
を含むことを特徴とする論理演算方法。
【数３】
0005951260.tif 000023
【請求項１０】
マスク処理回路と、論理演算回路とを備えた、ハードウェアの論理演算を秘匿化して実行する論理演算方法をコンピュータに実行させるためのプログラムであって、
前記マスク処理回路が、任意のデータ長であって、変数毎に異なるマスク値により、任意データ長の変数のマスク処理を行う第１のステップと、
前記論理演算回路が、マスク処理された変数のＡＮＤ演算またはＯＲ演算に、数４で表される共通関数とのＸＯＲ演算を施す第２のステップと、
をコンピュータに実行させるためのプログラム。
【数４】
0005951260.tif 000024
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、変数をマスキングして論理演算を行う論理演算装置、論理演算方法、およびプログラムに関する。
【背景技術】
【０００２】
従来より、暗号化アルゴリズムをソフトウェアまたはハードウェアとして実装する際には、メモリダンプや電力解析等に対するセキュリティを考慮する必要がある。これらの攻撃に対する対策の１つとして、処理されるデータを乱数によりマスキングし、実行毎に異なるデータをメモリまたは回路に出現させる方法がある（例えば、特許文献１、非特許文献１、非特許文献２）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００７−３３４０１６号公報
【非特許文献】
【０００４】
【非特許文献１】Ｊｏａｎ  Ｄａｅｍｅｎ，Ｍｉｃｈａｅｌ  Ｐｅｅｔｅｒｓ，ａｎｄ  Ｇｉｌｌｅｓ  Ｖａｎ  Ａｓｓｃｈｅ，“Ｂｉｔｓｌｉｃｅ  Ｃｉｐｈｅｒｓ  ａｎｄ  Ｐｏｗｅｒ  Ａｎａｌｙｓｉｓ  Ａｔｔａｃｋｓ”，Ｐｒｏｃ．ｏｆ  Ｆａｓｔ  Ｓｏｆｔｗａｒｅ  Ｅｎｃｒｙｐｔｉｏｎ（ＦＳＥ２０００），Ｌｅｃｔｕｒｅ  Ｎｏｔｅｓ  ｉｎ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ  １９７８．ｐｐ．１３４−１４９，２０００
【非特許文献２】Ｊｏｖａｎ  Ｄｊ．Ｇｏｌｉｃ  ａｎｄ  Ｒｅｎａｔｏ  Ｍｅｎｉｃｏｃｃｉ，“Ｕｎｉｖｅｒｓａｌ  Ｍａｓｋｉｎｇ  ｏｎ  Ｌｏｇｉｃ  Ｇａｔｅ  Ｌｅｖｅｌ”，Ｅｌｅｃｔｒｏｎｉｃｓ  Ｌｅｔｔｅｒｓ，２９ｔｈ  Ａｐｒｉｌ  ２００４，Ｖｏｌ．４０，Ｎｏ．９
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、非特許文献１に記載の方式では、マスキングの対象となる変数は、１ビットの変数に限られるという制約があり、また、特許文献１に記載の方式では、ｎ（ｎ≧２）ビットの変数を入力として１ビットの結果を得る論理式に限定されるという問題点があった。一方、非特許文献２に記載の方式では、論理演算を秘匿化するために、ＡＮＤ演算またはＯＲ演算を独立した乱数によりマスキングされた変数により実行し、変数のＡＮＤ演算結果またはＯＲ演算結果をマスキングした値を得る方法を提案している。この方法において、変数のＡＮＤ演算結果またはＯＲ演算結果をマスキングした値を得るために、マスキングされた変数のＡＮＤ演算またはＯＲ演算に所定の関数を用いているが、所定の関数はＡＮＤ演算とＯＲ演算とでは異なり、共通の関数を利用することが困難であるために演算回数（回路規模）が大きくなるという問題点があった。
【０００６】
そこで本発明は、上述した課題に鑑みてされたものであり、任意のデータ長の変数に対してマスキングを施すとともに、変数のＡＮＤ演算結果またはＯＲ演算結果をマスキングした値を得るために、マスキングされた変数のＡＮＤ演算またはＯＲ演算に用いる所定の関数を、共通化することによって演算回数を削減（回路規模を縮小）し、論理演算を安全に実装する論理演算装置、論理演算方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明は、上述した課題を解決するために以下の事項を提案している。なお、理解を容易にするために、本発明の実施形態に対応する符号を付して説明するが、これに限定されるものではない。
【０００８】
（１）  本発明は、ソフトウェアの論理演算を秘匿化して実行する論理演算装置であって、任意のデータ長であって、変数毎に異なるマスク値により、任意データ長の変数のマスク処理を行うマスク処理手段（例えば、図１のマスク処理部１１に相当）と、マスク処理された変数のＡＮＤ演算またはＯＲ演算に、数１で表される共通関数とのＸＯＲ演算を施す論理演算手段（例えば、図１の論理演算部１２に相当）と、を備えることを特徴とする論理演算装置を提案している。
【０００９】
この発明によれば、マスク処理手段は、任意のデータ長であって、変数毎に異なるマスク値により、任意データ長の変数のマスク処理を行う。論理演算手段は、マスク処理された変数のＡＮＤ演算またはＯＲ演算に、数１で表される共通関数とのＸＯＲ演算を施す。したがって、任意のデータ長のソフトウェアの変数に対してマスク処理を施すとともに、変数のＡＮＤ演算結果およびＯＲ演算結果を得るために、マスク処理された変数のＡＮＤ演算およびＯＲ演算に用いる関数を、共通化することによって演算回数を削減し、論理演算を安全に実装することができる。また、変数のＡＮＤ演算結果およびＯＲ演算結果のマスク値の偏りを防止することができる。
【００１０】
（２）  本発明は、（１）の論理演算装置について、前記マスク処理手段が、前記任意のデータ長であって、変数毎に異なるマスク値を生成し、前記任意のデータ長の変数と生成されたマスク値とのＸＯＲ演算を実行することにより、マスク処理を行うことを特徴とする論理演算装置を提案している。
【００１１】
この発明によれば、マスク処理手段が、任意のデータ長であって、変数毎に異なるマスク値を生成し、任意のデータ長の変数と生成されたマスク値とのＸＯＲ演算を実行することにより、マスク処理を行う。したがって、ＸＯＲ演算によりマスク処理を行うため、小さな演算負荷でマスク処理を実行することができる。
【００１２】
（３）  本発明は、（１）または（２）の論理演算装置について、前記論理演算手段が、前記マスク処理された変数のＸＯＲ演算およびＮＯＴ演算を実行することを特徴とする論理演算装置を提案している。
【００１３】
この発明によれば、論理演算手段が、マスク処理された変数のＸＯＲ演算およびＮＯＴ演算を実行する。したがって、マスク処理された変数のＸＯＲ演算およびＮＯＴ演算から、マスク処理された元の変数を得るＸＯＲ演算およびＮＯＴ演算を行うことができる。
【００１４】
（４）  本発明は、（１）から（３）の論理演算装置について、３つ以上の変数の論理演算を実行する場合に、前記論理演算手段が、マスク処理された３つ以上の変数の中から２変数を抽出し、抽出した２変数のＡＮＤ演算およびＯＲ演算に、前記共通関数とのＸＯＲ演算を施し、当該ＸＯＲ演算の結果を新たなマスク処理された１変数とし、マスク処理された変数が最後の２つになるまで処理を繰り返し、当該最後の２つの変数のＡＮＤ演算およびＯＲ演算に、前記共通関数とのＸＯＲ演算を施すことを特徴とする論理演算装置を提案している。
【００１５】
この発明によれば、論理演算手段が、マスク処理された３つ以上の変数の中から２変数を抽出し、抽出した２変数のＡＮＤ演算およびＯＲ演算に、共通関数とのＸＯＲ演算を施し、ＸＯＲ演算の結果を新たなマスク処理された１変数とし、マスク処理された変数が最後の２つになるまで処理を繰り返し、最後の２つの変数のＡＮＤ演算およびＯＲ演算に、共通関数とのＸＯＲ演算を施す。したがって、３つ以上の変数の場合にも共通関数を用いたＡＮＤ演算およびＯＲ演算を実行することができる。
【００１６】
（５）  本発明は、ハードウェアの論理演算を秘匿化して実行する論理演算装置であって、任意のデータ長であって、変数毎に異なるマスク値により、任意データ長の変数のマスク処理を行うマスク処理回路（例えば、図３のマスク処理回路２１に相当）と、マスク処理された変数のＡＮＤ演算またはＯＲ演算に、数２で表される共通関数とのＸＯＲ演算を施す論理演算回路（例えば、図３の論理演算回路２２に相当）と、を備えることを特徴とする論理演算装置を提案している。
【００１７】
この発明によれば、マスク処理手段は、任意のデータ長であって、変数毎に異なるマスク値により、任意データ長のハードウェアの変数のマスク処理を行う。論理演算手段は、マスク処理された変数のＡＮＤ演算またはＯＲ演算に、数２で表される共通関数とのＸＯＲ演算を施す。したがって、任意のデータ長に変数に対してマスク処理を施すとともに、変数のＡＮＤ演算結果およびＯＲ演算結果を得るために、マスク処理された変数のＡＮＤ演算およびＯＲ演算に用いる関数を、共通化することによって回路規模を縮小し、論理演算を安全に実装することができる。また、変数のＡＮＤ演算結果およびＯＲ演算結果のマスク値の偏りを防止することができる。
【００１８】
（６）  本発明は、（５）の論理演算装置について、前記マスク処理回路が、前記任意のデータ長であって、変数毎に異なるマスク値を生成し、前記任意のデータ長の変数と生成されたマスク値とのＸＯＲ演算を実行することにより、マスク処理を行うことを特徴とする論理演算装置を提案している。
【００１９】
この発明によれば、マスク処理回路が、任意のデータ長であって、変数毎に異なるマスク値を生成し、任意のデータ長の変数と生成されたマスク値とのＸＯＲ演算を実行することにより、マスク処理を行う。したがって、ＸＯＲ演算によりマスク処理を行うため、小さな演算負荷でマスク処理を実行することができる。
【００２０】
（７）  本発明は、（５）または（６）の論理演算装置について、前記論理演算回路が、前記マスク処理された変数のＸＯＲ演算およびＮＯＴ演算を実行することを特徴とする論理演算装置を提案している。
【００２１】
この発明によれば、論理演算回路が、マスク処理された変数のＸＯＲ演算およびＮＯＴ演算を実行する。したがって、マスク処理された変数のＸＯＲ演算およびＮＯＴ演算から、マスク処理された元の変数を得るＸＯＲ演算およびＮＯＴ演算を行うことができる。
【００２２】
（８）  本発明は、（５）から（７）の論理演算装置について、３つ以上の変数の論理演算を実行する場合に、前記論理演算回路が、マスク処理された３つ以上の変数の中から２変数を抽出し、抽出した２変数のＡＮＤ演算およびＯＲ演算に、前記共通関数とのＸＯＲ演算を施し、当該ＸＯＲ演算の結果を新たなマスク処理された１変数とし、マスク処理された変数が最後の２つになるまで処理を繰り返し、当該最後の２つの変数のＡＮＤ演算およびＯＲ演算に、前記共通関数とのＸＯＲ演算を施すことを特徴とする論理演算装置を提案している。
【００２３】
この発明によれば、論理演算回路が、マスク処理された３つ以上の変数の中から２変数を抽出し、抽出した２変数のＡＮＤ演算およびＯＲ演算に、共通関数とのＸＯＲ演算を施し、ＸＯＲ演算の結果を新たなマスク処理された１変数とし、マスク処理された変数が最後の２つになるまで処理を繰り返し、最後の２つの変数のＡＮＤ演算およびＯＲ演算に、共通関数とのＸＯＲ演算を施す。したがって、３つ以上の変数の場合にも共通関数を用いたＡＮＤ演算およびＯＲ演算を実行することができる。
【００２４】
（９）  本発明は、マスク処理回路と、論理演算回路とを備えた、ハードウェアの論理演算を秘匿化して実行する論理演算装置における論理演算方法であって、前記マスク処理回路が、任意のデータ長であって、変数毎に異なるマスク値により、任意データ長の変数のマスク処理を行う第１のステップ（例えば、図４のステップＳ１１に相当）と、前記論理演算回路が、マスク処理された変数のＡＮＤ演算またはＯＲ演算に、数３で表される共通関数とのＸＯＲ演算を施す第２のステップ（例えば、図４のステップＳ１３に相当）と、を含むことを特徴とする論理演算方法を提案している。
【００２５】
この発明によれば、マスク処理回路は、任意のデータ長であって、変数毎に異なるマスク値により、任意データ長のハードウェアの変数のマスク処理を行う。論理演算回路は、マスク処理された変数のＡＮＤ演算またはＯＲ演算に、数３で表される共通関数とのＸＯＲ演算を施す。したがって、任意のデータ長に変数に対してマスク処理を施すとともに、変数のＡＮＤ演算結果およびＯＲ演算結果を得るために、マスク処理された変数のＡＮＤ演算およびＯＲ演算に用いる関数を、共通化することによって回路規模を縮小し、論理演算を安全に実装することができる。
【００２６】
（１０）  本発明は、マスク処理回路と、論理演算回路とを備えた、ハードウェアの論理演算を秘匿化して実行する論理演算方法をコンピュータに実行させるためのプログラムであって、前記マスク処理回路が、任意のデータ長であって、変数毎に異なるマスク値により、任意データ長の変数のマスク処理を行う第１のステップ（例えば、図４のステップＳ１１に相当）と、前記論理演算回路が、マスク処理された変数のＡＮＤ演算またはＯＲ演算に、数４で表される共通関数とのＸＯＲ演算を施す第２のステップ（例えば、図４のステップＳ１３に相当）と、をコンピュータに実行させるためのプログラムを提案している。
【００２７】
この発明によれば、マスク処理回路は、任意のデータ長であって、変数毎に異なるマスク値により、任意データ長のハードウェアの変数のマスク処理を行う。論理演算回路は、マスク処理された変数のＡＮＤ演算またはＯＲ演算に、数４で表される共通関数とのＸＯＲ演算を施す。したがって、任意のデータ長に変数に対してマスク処理を施すとともに、変数のＡＮＤ演算結果およびＯＲ演算結果を得るために、マスク処理された変数のＡＮＤ演算およびＯＲ演算に用いる関数を、共通化することによって回路規模を縮小し、論理演算を安全に実装することができる。
【発明の効果】
【００３６】
本発明によれば、任意のデータ長の変数に対してマスク処理を施すとともに、変数のＡＮＤ演算結果またはＯＲ演算結果をマスク処理した値を得るために、マスク処理された変数のＡＮＤ演算またはＯＲ演算に用いる所定の関数を共通化することによって演算回数を削減（回路規模を縮小）することができる。
【図面の簡単な説明】
【００３７】
【図１】第１の実施形態に係る論理演算装置の機能構成を示す図である。
【図２】第１の実施形態に係る論理演算装置の処理フローを示す図である。
【図３】第２の実施形態に係る論理演算装置の機能構成を示す図である。
【図４】第２の実施形態に係る論理演算装置の処理フローを示す図である。
【発明を実施するための形態】
【００３８】
以下、本発明の実施形態について、図面を用いて、詳細に説明する。なお、本実施形態における構成要素は適宜、既存の構成要素等との組み合わせを含む様々なバリエーションが可能である。したがって、本実施形態の記載を持って、特許請求の範囲に記載された発明の内容を限定するものではない。なお、本発明の実施形態の説明において、排他的論理和および論理否定の演算子は数１のように表記する。
【００３９】
【数１】
0005951260.tif 000002
【００４０】
＜第１の実施形態＞
図１および図２を用いて、本発明の第１の実施形態について説明する。なお、本実施形態はソフトウェアにより論理演算処理を行う論理演算装置に関するものである。
【００４１】
＜論理演算装置の機能構成＞
図１は、本発明の第１の実施形態に係る論理演算装置１０の機能構成を示す図である。図１に示すように、論理演算装置１０は、マスク処理部１１、論理演算部１２、および復元部１３から構成されている。
【００４２】
マスク処理部１１は、ソフトウェアの先頭に設けられ、任意のデータ長の乱数を生成し、生成した乱数をマスク値として用いてソフトウェアの各変数のマスク処理（マスキングともいう）を行う。なお、マスク処理は、各変数について、変数にマスク値との排他的論理和演算を施すことにより行われる。例えば、マスク処理部１１は、数２に示すように、変数ｘ、ｙに格納されている値に、マスク値ｍｘ、ｍｙそれぞれとの排他的論理和演算を施し、演算結果を変数Ｘ、Ｙに格納する。
【００４３】
【数２】
0005951260.tif 000003
【００４４】
論理演算部１２は、マスキングされた変数Ｘ、ＹのＡＮＤ演算およびＯＲ演算を数３に示す関数Ｆを用いて実行する。マスキングされた変数を用いてＡＮＤ演算またはＯＲ演算を実行することにより、論理演算を秘匿化することができ、関数Ｆを用いることにより、元の変数ｘ、ｙのＡＮＤ演算結果またはＯＲ演算結果をマスキングした値が得られる。また、関数Ｆを、ＡＮＤ演算およびＯＲ演算のいずれでも使用できる共通の関数とすることにより、演算回数を削減することができる。
【００４５】
【数３】
0005951260.tif 000004
【００４６】
まず、ＡＮＤ演算について具体的に説明する。論理演算部１２は、数４の左辺に示すように変数Ｘ、ＹのＡＮＤ演算に関数Ｆとの排他的論理和演算を施す。演算結果として、数４の右辺に示すように、元の変数ｘ、ｙのＡＮＤ演算に、ＭＡＮＤ１との排他的論理和演算を施した値を得ることができる。なお、ＭＡＮＤ１は、マスク値ｍｘとｍｙとのＡＮＤ演算結果（ｍｘ・ｍｙ）である。
【００４７】
【数４】
0005951260.tif 000005
【００４８】
数５に数４の左辺から数４の右辺が得られるまでの演算過程を示す。まず、数５の１行目に示すように、まず、マスクされている変数Ｘ、Ｙを元の変数ｘ、ｙとマスク値ｍｘ、ｍｙとの式に変換する。次に、小括弧をはずし、結果が０となる排他的論理和の演算式ができるように式を変形することで、数４の右辺が得られる。
【００４９】
【数５】
0005951260.tif 000006
【００５０】
次に、ＯＲ演算について具体的に説明する。論理演算部１２は、数６の左辺に示すように変数Ｘ、ＹのＯＲ演算に関数Ｆとの排他的論理和演算を施す。演算結果として、数６の右辺に示すように、元の変数ｘ、ｙのＯＲ演算に、ＭＯＲ１との排他的論理和演算を施した値を得ることができる。なお、ＭＯＲ１は、マスク値ｍｘとｍｙとのＯＲ演算結果（ｍｘ＋ｍｙ）である。
【００５１】
【数６】
0005951260.tif 000007
【００５２】
数７に数６の左辺から数６の右辺が得られるまでの演算過程を示す。まず、数７の１行目に示すように、まず、マスクされている変数Ｘ、Ｙを元の変数ｘ、ｙとマスク値ｍｘ、ｍｙとの式に変換する。次に、元の変数ｘ、ｙとマスク値ｍｘ、ｍｙとの式に変換された変数Ｘ、ＹのＯＲ演算に２重否定を付け、結果が０または１となる排他的論理和演算式ができるように式を変形することによって、数６の右辺が得られる。
【００５３】
【数７】
0005951260.tif 000008
【００５４】
また、論理演算部１２は、ＸＯＲ演算およびＮＯＴ演算を実行する。数８に示すように変数Ｘ、ＹのＸＯＲ演算を実行すると、元の変数ｘ、ｙのＸＯＲ演算に、ＭＸＯＲ１との排他的論理和演算を施した値を得ることができる。なお、ＭＸＯＲ１は、マスク値ｍｘとｍｙとのＸＯＲ演算結果（ｍｘ［ｘｏｒ］ｍｙ）である。
【００５５】
【数８】
0005951260.tif 000009
【００５６】
同様に、数９に示すように、変数ＸのＮＯＴ演算を実行すると、元の変数ｘのＮＯＴ演算の結果にＭＮＯＴｘとの排他的論理和演算を施した値を得ることができる。なお、ＭＮＯＴｘは、ｍｘである。変数Ｙについても、変数Ｘと同様である。なお、ＭＮＯＴｙは、ｍｙである。
【００５７】
【数９】
0005951260.tif 000010
【００５８】
以上説明したように、論理演算部１２は、論理演算を秘匿化するために、任意のデータ長の変数ｘ、ｙをマスキングした変数Ｘ、Ｙの論理演算を実行することができる。また、論理演算部１２は、ＡＮＤ演算またはＯＲ演算において、元の変数ｘ、ｙのＡＮＤ演算結果またはＯＲ演算結果をマスキングした値を得るための関数として、ＡＮＤ演算とＯＲ演算とで共通の関数Ｆを用いることにより、演算回数を削減することができる。それにより、マスキングされた変数Ｘ、ＹのＡＮＤ演算およびＯＲ演算を効率的に構成することができる。
【００５９】
しかしながら、上述したように、関数Ｆを用いた場合、変数ｘ、ｙのＡＮＤ演算の結果に対するマスク値はマスク値ｍｘ、ｍｙのＡＮＤ演算（ｍｘ・ｍｙ）となるため、マスク値の約３／４のビットが０となり、マスク値のビットパターンに偏りが生じる。また、変数ｘ、ｙのＯＲ演算の結果に対するマスク値はマスク値ｍｘ、ｍｙのＯＲ演算（ｍｘ＋ｍｙ）となるため、マスク値の約３／４のビットが１となり、ＡＮＤ演算と同様にマスク値のビットパターンに偏りが生じる。そこで、次に、関数Ｆに替わって、このマスク値の偏りを防止する関数Ｇを用いたＡＮＤ演算およびＯＲ演算について説明する。
【００６０】
なお、論理演算部１２におけるＸＯＲ演算およびＮＯＴ演算には、関数Ｆを用いていないので、ＡＮＤおよびＯＲ演算に関数Ｇを用いた場合であっても、論理演算部１２で実行される演算は同様であって、上述したとおりである。
【００６１】
論理演算部１２は、マスキングされた変数Ｘ、ＹのＡＮＤ演算およびＯＲ演算を数１０に示す関数Ｇを用いて実行する。それにより、元の変数ｘ、ｙのＡＮＤ演算結果またはＯＲ演算結果をマスキングした値が得られるとともに、変数ｘ、ｙのＡＮＤ演算結果およびＯＲ演算結果のマスク値の偏りを防ぐことができる。また、関数Ｇは関数Ｆと同様にＡＮＤ演算およびＯＲ演算のいずれでも使用できる共通の関数であるので、演算回数を削減することができる。
【００６２】
【数１０】
0005951260.tif 000011
【００６３】
まず、ＡＮＤ演算について具体的に説明する。論理演算部１２は、数１１の左辺に示すように変数Ｘ、ＹのＡＮＤ演算に関数Ｇとの排他的論理和演算を施す。演算結果として、数１１の右辺に示すように、元の変数ｘ、ｙのＡＮＤ演算に、ＭＡＮＤ２との排他的論理和演算を施した値を得ることができる。なお、ＭＡＮＤ２は、マスク値ｍｘとｍｙとの排他的論理和演算結果（ｍｘ［ｘｏｒ］ｍｙ）である。
【００６４】
【数１１】
0005951260.tif 000012
【００６５】
数１２に数１１の左辺から数１１の右辺が得られるまでの演算過程を示す。まず、数１２の１行目に示すように、まず、マスクされている変数Ｘ、Ｙを元の変数ｘ、ｙとマスク値ｍｘ、ｍｙとの式に変換する。次に、小括弧をはずし、結果が０または１となる排他的論理和の演算式ができるように式を変形することで、数１１の右辺が得られる。
【００６６】
【数１２】
0005951260.tif 000013
【００６７】
次に、ＯＲ演算について具体的に説明する。論理演算部１２は、数１３の左辺に示すように変数Ｘ、ＹのＯＲ演算に関数Ｇとの排他的論理和演算を施す。但し、数１４に示すように、ＯＲ演算において、関数Ｇに対する入力のうちＸとＹとを、¬Ｘと¬Ｙに置き換えて用いる。演算結果として、数１３の右辺に示すように、変数ｘ、ｙのＯＲ演算に、ＭＯＲ２との排他的論理和演算を施した値を得ることができる。なお、ＭＯＲ２は、マスク値ｍｘとｍｙとの排他的論理和演算結果（ｍｘ［ｘｏｒ］ｍｙ）である。
【００６８】
【数１３】
0005951260.tif 000014
【００６９】
【数１４】
0005951260.tif 000015
【００７０】
数１５に数１３の左辺から数１３の右辺が得られるまでの演算過程を示す。まず、数１５の１行目に示すように、まず、マスクされている変数Ｘ、Ｙを元の変数ｘ、ｙとマスク値ｍｘ、ｍｙとの式に変換する。次に、元の変数ｘ、ｙとマスク値ｍｘ、ｍｙとの式に変換された変数Ｘ、ＹのＯＲ演算に２重否定を付け、結果が０または１となる排他的論理和演算式ができるように式を変形することによって、数１３の右辺が得られる。
【００７１】
【数１５】
0005951260.tif 000016
【００７２】
数１１の右辺を左辺になるように式を変形し、主要項Ｘ・Ｙを除外すると、ｍｘ・ｍｙ［ｘｏｒ］ｍｘ・¬Ｙ［ｘｏｒ］ｍｙ・¬Ｘとなる。一方、数１３の右辺を左辺になるように式を変形し、主要項Ｘ＋Ｙを除外すると、ｍｘ・ｍｙ［ｘｏｒ］ｍｘ・Ｙ［ｘｏｒ］ｍｙ・Ｘとなる。前者の式においてＸとＹをそれぞれ¬Ｘと¬Ｙに置き換えると，後者の式が得られる。このため，関数Ｇを用いて、前者の式の値をＧ（ｍｘ，ｍｙ，Ｘ，Ｙ），後者の値を前者の式の値をＧ（ｍｘ，ｍｙ，¬Ｘ，¬Ｙ）と表記でき、演算回数を削減することができる。
【００７３】
以上、マスキングされた２つの変数の論理演算について説明した。更に、マスキングされた３つの変数の論理演算について説明する。
【００７４】
論理演算部１２は、変数が３つ以上ある場合には、上述した２つの変数の論理演算を組み合わせて実行する。具体的なＡＮＤ演算、ＯＲ演算、およびＸＯＲ演算それぞれについては、数１６から数１８を用いて説明する。なお、ＮＯＴ演算は変数１つずつに対して実行されるので、数９で説明したので省略する。本実施形態においては、変数が３つ、ｘ、ｙ、ｚの場合について説明する。
【００７５】
まず、ＡＮＤ演算について説明する。ｘ・ｙを変数ｗとして、変数ｗ、ｚの演算として扱う。変数ｗをマスク値ｍｗでマスキングした値を変数Ｗに格納する。ここで、マスク値ｍｗ＝ｍｘ［ｘｏｒ］ｍｙとすると、変数Ｗは数４または数１１の右辺で表すことができ、変数Ｗは、数１６のように表すことができる。なお、Ｇ（ｍｘ，ｍｙ，Ｘ，Ｙ）の替わりにＦ（ｍｘ，ｍｙ，Ｘ，Ｙ）を用いることもできる。
【００７６】
【数１６】
0005951260.tif 000017
【００７７】
同様に、変数ｚをマスク値ｍｚでマスキングした値をＺに格納する。そうすると、論理演算部１２は、数１７に示すように、マスキングされた変数Ｗ、Ｚ、マスク値ｍｗ、ｍｚ、および上述した関数Ｇからなる式を計算し、変数ｗ、ｚのＡＮＤ演算結果をマスキングした値、すなわち、変数ｘ、ｙ、ｚのＡＮＤ演算結果をマスキングした値を得る。なお、関数Ｇの替わりに関数Ｆを用いてもよい。
【数１７】
0005951260.tif 000018
【００７８】
同様に、ＯＲ演算においても、ｘ［ｏｒ］ｙを変数ｗとして、変数ｗ、ｚの演算として扱う。マスキングされた変数Ｗ、Ｚについては上述したとおりである。ＡＮＤ演算と同様に、論理演算部１２は、数１８に示すように、マスキングされた変数Ｗ、Ｚ、マスク値ｍｗ、ｍｚ、および上述した関数Ｇからなる式を計算し、変数ｗ、ｚのＯＲ演算結果をマスキングした値、すなわち、変数ｘ、ｙ、ｚのＯＲ演算結果をマスキングした値を得る。なお、関数Ｇの替わりに関数Ｆを用いてもよい。
【数１８】
0005951260.tif 000019
【００７９】
更に、ＸＯＲ演算においては、下記の数１９に示すように、マスクされた変数Ｘ、Ｙ、Ｚから変数ｘ、ｙ、ｚをマスクした値を計算する。
【数１９】
0005951260.tif 000020
【００８０】
図１に戻って、復元部１３は、ソフトウェアの末尾に設けられ、論理演算部１２による論理演算処理後に、マスキングされた演算結果から元の変数の演算結果を復元する。すなわち、マスキングされた演算結果とマスク値、例えば、ＡＮＤ演算においては、マスキングされた演算結果（ｘ・ｙ［ｘｏｒ］ＭＡＮＤ１）にマスク値ＭＡＮＤ１との排他的論理和を施すことにより、演算結果（ｘ・ｙ）を復元することができる。
【００８１】
＜論理演算装置の処理＞
図２は、本実施形態に係る論理演算装置１０の処理フローを示す図である。
【００８２】
まず、ステップＳ１において、マスク処理部１１は、任意のデータ長の乱数を生成し、生成した乱数をマスク値として用いてソフトウェアの各変数マスキングを行う。
【００８３】
次に、ステップＳ２において、論理演算部１２は、ＡＮＤ演算またはＯＲ演算を実行するか否かを判断する。ＡＮＤ演算またはＯＲ演算を実行する場合には、ステップＳ３に処理を進める。一方、ＡＮＤ演算またはＯＲ演算以外の演算、すなわち、ＸＯＲ演算またはＮＯＴ演算を実行する場合には、ステップＳ４に処理を進める。
【００８４】
次に、ステップＳ３において、論理演算部１２は、関数Ｆまたは関数Ｇを用いて、ステップＳ１でマスキングされた変数のＡＮＤ演算またはＯＲ演算を行う。
【００８５】
次に、ステップＳ４において、論理演算部１２は、ステップＳ１でマスキングされた変数のＸＯＲ演算またはＮＯＴ演算を行う。
【００８６】
次に、ステップＳ５において、復元部１３は、ステップＳ３の結果得られたマスキングされた演算結果から元の変数の演算結果を復元する。
【００８７】
以上、説明したように、本実施形態によれば、任意のデータ長のソフトウェアの変数に対してマスキングを施すとともに、変数のＡＮＤ演算結果またはＯＲ演算結果をマスキングした値を得るために、マスキングされた変数のＡＮＤ演算またはＯＲ演算に用いる所定の関数を共通化することによって演算回数を削減することができる。また、所定の関数に、演算結果のマスク値の偏りを防ぐ関数を用いることにより、セキュリティを向上させることができる。
【００８８】
＜第２の実施形態＞
図３および図４を用いて、本発明の第２の実施形態について説明する。なお、本実施形態は、ハードウェアにより論理演算処理を行う論理演算装置に関するものである。
【００８９】
＜論理演算装置の構成＞
図３に示すように、本実施形態に係る論理演算装置２０は、マスク処理回路２１と、論理演算回路２２と、復元回路２３とから構成されている。
【００９０】
マスク処理回路２１は、ハードウェアの先頭に設けられ、任意のデータ長の乱数を生成し、生成した乱数をマスク値として用いてソフトウェアの各変数のマスク処理（マスキングともいう）を行う。なお、マスク処理は、第１の実施形態のマスク処理部１１におけるマスク処理と同様である。
【００９１】
論理演算回路２２は、マスキングされた変数Ｘ、ＹのＡＮＤ演算およびＯＲ演算を数２に示す関数Ｆを用いて実行する。また、論理演算回路２２は、マスキングされた変数Ｘ、ＹのＸＯＲ演算およびＮＯＴ演算を実行する。なお、論理演算回路２２における各論理演算は、第１の実施形態の論理演算部１２における論理演算と同様である。
【００９２】
復元回路２３は、ハードウェアの末尾に設けられ、論理演算回路２２による論理演算処理後に、マスキングされた演算結果から元の変数の演算結果を復元する。すなわち、マスキングされた演算結果とマスク値、例えば、ＡＮＤ演算においては、マスキングされた演算結果（ｘ・ｙ［ｘｏｒ］ＭＡＮＤ１）にマスク値ＭＡＮＤ１との排他的論理和を施すことにより、演算結果（ｘ・ｙ）を復元することができる。
【００９３】
＜論理演算装置の処理＞
図４は、本実施形態に係る論理演算装置２０の処理フローを示す図である。
【００９４】
まず、ステップＳ１１において、マスク処理回路２１は、任意のデータ長の乱数を生成し、生成した乱数をマスク値として用いてソフトウェアの各変数マスキングを行う。
【００９５】
次に、ステップＳ１２において、論理演算回路２２は、ＡＮＤ演算またはＯＲ演算を実行するか否かを判断する。ＡＮＤ演算またはＯＲ演算を実行する場合には、ステップＳ１３に処理を進める。一方、ＡＮＤ演算またはＯＲ演算以外の演算、すなわち、ＸＯＲ演算またはＮＯＴ演算を実行する場合には、ステップＳ１４に処理を進める。
【００９６】
次に、ステップＳ１３において、論理演算回路２２は、関数Ｆまたは関数Ｇを用いて、ステップＳ１１でマスキングされた変数のＡＮＤ演算またはＯＲ演算を行う。
【００９７】
次に、ステップＳ１４において、論理演算回路２２は、ステップＳ１１でマスキングされた変数のＸＯＲ演算またはＮＯＴ演算を行う。
【００９８】
次に、ステップＳ１５において、復元回路２３は、ステップＳ１３の結果得られたマスキングされた演算結果から元の変数の演算結果を復元する。
【００９９】
以上、説明したように、本実施形態によれば、任意のデータ長のハードウェアの変数に対してマスキングを施すとともに、変数のＡＮＤ演算結果またはＯＲ演算結果をマスキングした値を得るために、マスキングされた変数のＡＮＤ演算またはＯＲ演算に用いる所定の関数を共通化することによって回路規模を縮小することができる。また、所定の関数に、演算結果のマスク値の偏りを防ぐ関数を用いることにより、セキュリティを向上させることができる。
【０１００】
なお、論理演算装置の処理をコンピュータ読み取り可能な記録媒体に記録し、この記録媒体に記録されたプログラムを論理演算装置に読み込ませ、実行することによって本発明の論理演算装置を実現することができる。ここでいうコンピュータシステムとは、ＯＳや周辺装置等のハードウェアを含む。
【０１０１】
また、「コンピュータシステム」は、ＷＷＷ（Ｗｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂ）システムを利用している場合であれば、ホームページ提供環境（あるいは表示環境）も含むものとする。また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように情報を伝送する機能を有する媒体のことをいう。
【０１０２】
また、上記プログラムは、前述した機能の一部を実現するためのものであってもよい。更に、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル（差分プログラム）であってもよい。
【０１０３】
以上、この発明の実施形態につき、図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【符号の説明】
【０１０４】
１０    論理演算装置
１１    マスク処理部
１２    論理演算部
１３    復元部
【図１】
0005951260.tif 000025
【図２】
0005951260.tif 000026
【図３】
0005951260.tif 000027
【図４】
0005951260.tif 000028