(57)【特許請求の範囲】
【請求項１】
第１の秘密情報と第１の乱数情報とを排他的論理和により加算することによって前記第１の秘密情報をマスクし、第１のマスクされた秘密情報を算出する手段と、
第２の秘密情報と第２の乱数情報とを排他的論理和により加算することによって前記第２の秘密情報をマスクし、第２のマスクされた秘密情報を算出する手段と、
前記第１のマスクされた秘密情報と前記第２の乱数情報とを用いて、前記マスクされた秘密情報のマスクを除去するための第１の中間値を算出する手段と、
前記第２のマスクされた秘密情報と前記第１の乱数情報とを用いて、前記マスクされた秘密情報のマスクを除去するための第２の中間値を算出する手段と、
前記第１の乱数情報と前記第２の乱数情報とを用いて、前記マスクされた秘密情報のマスクを除去するための第３の中間値を算出する手段と、
前記第１のマスクされた秘密情報と、前記第２のマスクされた秘密情報と、前記第１の中間値と、前記第２の中間値と、前記第３の中間値とを用いて、前記第１の秘密情報と前記第２の秘密情報との論理積の値を算出する手段と、
を備える暗号処理装置。
【請求項２】
請求項１に記載の暗号処理装置において、
前記第１の秘密情報をａとし、
前記第２の秘密情報をｂとし、
前記第１の乱数情報をｍ１とし、
前記第２の乱数情報をｍ２とし、
前記第１のマスクされた秘密情報をＡとし、
前記第２のマスクされた秘密情報をＢとし、
前記第１の中間値をＴｅｍｐ１とし、
前記第２の中間値をＴｅｍｐ２とし、
前記第３の中間値をＴｅｍｐ３とし、
前記第１の秘密情報と前記第２の秘密情報との論理積の値をｒｅｓｕｌｔとした場合に、
以下の式（１．２）〜式（１．８）を用いて、式（１．１）の演算処理を行うこと、
【数１】
0004962165.tif 000034
を特徴とする暗号処理装置。
【請求項３】
請求項２に記載の暗号処理装置において、
第３の乱数情報をｍ３とし、
前記式（１．７）を以下の式（１．１３）とし、前記式（１．８）を以下の式（１．１４）とすること、
【数２】
0004962165.tif 000035
を特徴とする暗号処理装置。
【請求項４】
第１の秘密情報と第１の乱数情報とを排他的論理和により加算することによって前記第１の秘密情報をマスクし、第１のマスクされた秘密情報を算出する手段と、
第２の秘密情報と第２の乱数情報とを排他的論理和により加算することによって前記第２の秘密情報をマスクし、第２のマスクされた秘密情報を算出する手段と、
前記第１のマスクされた秘密情報と前記第２の乱数情報とを用いて、前記マスクされた秘密情報のマスクを除去するための第１の中間値を算出する手段と、
前記第２のマスクされた秘密情報と前記第１の乱数情報とを用いて、前記マスクされた秘密情報のマスクを除去するための第２の中間値を算出する手段と、
前記第１の乱数情報と前記第２の乱数情報とを用いて、前記マスクされた秘密情報のマスクを除去するための第３の中間値を算出する手段と、
前記第１のマスクされた秘密情報と、前記第２のマスクされた秘密情報と、前記第１の中間値と、前記第２の中間値と、前記第３の中間値とを用いて、前記第１の秘密情報と前記第２の秘密情報との論理和の値を算出する手段と、
を備える暗号処理装置。
【請求項５】
請求項４に記載の暗号処理装置において、
前記第１のマスクされた秘密情報及び前記第２のマスクされた秘密情報には、最初に否定処理を施して、その後の演算を行うこと、
を特徴とする暗号処理装置。
【請求項６】
請求項５に記載の暗号処理装置において、
前記第１の秘密情報をａとし、
前記第２の秘密情報をｂとし、
前記第１の乱数情報をｍ１とし、
前記第２の乱数情報をｍ２とし、
前記第１のマスクされた秘密情報をＡとし、
前記第２のマスクされた秘密情報をＢとし、
前記第１の中間値をＴｅｍｐ１とし、
前記第２の中間値をＴｅｍｐ２とし、
前記第３の中間値をＴｅｍｐ３とし、
前記第１の秘密情報と前記第２の秘密情報との論理和の値をｒｅｓｕｌｔとした場合に、
以下の式（２．２）〜式（２．１１）を用いて、式（２．１）の演算処理を行うこと、
【数３】
0004962165.tif 000036
を特徴とする暗号処理装置。
【請求項７】
請求項６に記載の暗号処理装置において、
第３の乱数情報をｍ３とし、
前記式（２．９）を以下の式（２．１２）とし、前記式（２．１０）を以下の式（２．１３）とすること、
【数４】
0004962165.tif 000037
を特徴とする暗号処理装置。
【請求項８】
請求項１から請求項７までのいずれか１項に記載の暗号処理装置において、
前記第１の秘密情報と前記第２の秘密情報との論理積又は論理和の算出は、ハッシュ関数，ストリーム暗号及びブロック暗号のうち少なくとも１つの処理の一部又は全部に用いられること、
を特徴とする暗号処理装置。
【請求項９】
コンピュータを、
第１の秘密情報と第１の乱数情報とを排他的論理和により加算することによって前記第１の秘密情報をマスクし、第１のマスクされた秘密情報を算出する手段と、
第２の秘密情報と第２の乱数情報とを排他的論理和により加算することによって前記第２の秘密情報をマスクし、第２のマスクされた秘密情報を算出する手段と、
前記第１のマスクされた秘密情報と前記第２の乱数情報とを用いて、前記マスクされた秘密情報のマスクを除去するための第１の中間値を算出する手段と、
前記第２のマスクされた秘密情報と前記第１の乱数情報とを用いて、前記マスクされた秘密情報のマスクを除去するための第２の中間値を算出する手段と、
前記第１の乱数情報と前記第２の乱数情報とを用いて、前記マスクされた秘密情報のマスクを除去するための第３の中間値を算出する手段と、
前記第１のマスクされた秘密情報と、前記第２のマスクされた秘密情報と、前記第１の中間値と、前記第２の中間値と、前記第３の中間値とを用いて、前記第１の秘密情報と前記第２の秘密情報との論理積の値を算出する手段と、
として機能させるための暗号処理プログラム。
【請求項１０】
コンピュータを、
第１の秘密情報と第１の乱数情報とを排他的論理和により加算することによって前記第１の秘密情報をマスクし、第１のマスクされた秘密情報を算出する手段と、
第２の秘密情報と第２の乱数情報とを排他的論理和により加算することによって前記第２の秘密情報をマスクし、第２のマスクされた秘密情報を算出する手段と、
前記第１のマスクされた秘密情報と前記第２の乱数情報とを用いて、前記マスクされた秘密情報のマスクを除去するための第１の中間値を算出する手段と、
前記第２のマスクされた秘密情報と前記第１の乱数情報とを用いて、前記マスクされた秘密情報のマスクを除去するための第２の中間値を算出する手段と、
前記第１の乱数情報と前記第２の乱数情報とを用いて、前記マスクされた秘密情報のマスクを除去するための第３の中間値を算出する手段と、
前記第１のマスクされた秘密情報と、前記第２のマスクされた秘密情報と、前記第１の中間値と、前記第２の中間値と、前記第３の中間値とを用いて、前記第１の秘密情報と前記第２の秘密情報との論理和の値を算出する手段と、
として機能させるための暗号処理プログラム。
【請求項１１】
記憶部及び制御部を備える暗号処理装置が、第１の秘密情報と第１の乱数情報とを排他的論理和により加算することによって前記第１の秘密情報をマスクし、第１のマスクされた秘密情報を算出する工程と、
前記暗号処理装置が、第２の秘密情報と第２の乱数情報とを排他的論理和により加算することによって前記第２の秘密情報をマスクし、第２のマスクされた秘密情報を算出する工程と、
前記暗号処理装置が、前記第１のマスクされた秘密情報と前記第２の乱数情報とを用いて、前記マスクされた秘密情報のマスクを除去するための第１の中間値を算出する工程と、
前記暗号処理装置が、前記第２のマスクされた秘密情報と前記第１の乱数情報とを用いて、前記マスクされた秘密情報のマスクを除去するための第２の中間値を算出する工程と、
前記暗号処理装置が、前記第１の乱数情報と前記第２の乱数情報とを用いて、前記マスクされた秘密情報のマスクを除去するための第３の中間値を算出する工程と、
前記暗号処理装置が、前記第１のマスクされた秘密情報と、前記第２のマスクされた秘密情報と、前記第１の中間値と、前記第２の中間値と、前記第３の中間値とを用いて、前記第１の秘密情報と前記第２の秘密情報との論理積の値を算出する工程と、
を備える暗号処理方法。
【請求項１２】
記憶部及び制御部を備える暗号処理装置が、第１の秘密情報と第１の乱数情報とを排他的論理和により加算することによって前記第１の秘密情報をマスクし、第１のマスクされた秘密情報を算出する工程と、
前記暗号処理装置が、第２の秘密情報と第２の乱数情報とを排他的論理和により加算することによって前記第２の秘密情報をマスクし、第２のマスクされた秘密情報を算出する工程と、
前記暗号処理装置が、前記第１のマスクされた秘密情報と前記第２の乱数情報とを用いて、前記マスクされた秘密情報のマスクを除去するための第１の中間値を算出する工程と、
前記暗号処理装置が、前記第２のマスクされた秘密情報と前記第１の乱数情報とを用いて、前記マスクされた秘密情報のマスクを除去するための第２の中間値を算出する工程と、
前記暗号処理装置が、前記第１の乱数情報と前記第２の乱数情報とを用いて、前記マスクされた秘密情報のマスクを除去するための第３の中間値を算出する工程と、
前記暗号処理装置が、前記第１のマスクされた秘密情報と、前記第２のマスクされた秘密情報と、前記第１の中間値と、前記第２の中間値と、前記第３の中間値とを用いて、前記第１の秘密情報と前記第２の秘密情報との論理和の値を算出する工程と、
を備える暗号処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、秘密の鍵を用いて情報を暗号化する暗号処理装置，暗号処理プログラム及び暗号処理方法に関するものである。
【背景技術】
【０００２】
秘密情報（秘匿情報）を扱う暗号演算などの演算は、ＩＣカード上で行う場合、サイドチャネル攻撃に注意する必要がある。ここで、サイドチャネル攻撃とは、消費電力や実行時間など演算の副作用として出力され、秘密情報の漏洩の原因となる情報、通称「サイドチャネル情報」を計測することにより、秘密鍵などの秘密情報を取得しようとする攻撃である。
【０００３】
サイドチャネル攻撃の１つとしてＤＰＡ（差分電力解析攻撃）が挙げられる。ＤＰＡでは、まず多くの異なる入力で暗号演算を実行し、その際の消費電力を測定する。秘密情報の値の一部を仮定し、その仮定に基づき一定のルールで上記測定した消費電力情報を二つのグループに分類し、各々のグループごとに平均を取る。最後に二つの平均値の差分をとり、一部に大きな差分が発生すれば、仮定が正しいことが分かる。このＤＰＡによる攻撃の対策として、秘密情報にマスク（ｍａｓｋ）処理（値に乱数をＸＯＲ演算して情報を隠す処理）を施して演算を行い、秘密情報と途中の処理との依存関係を消滅させることで、暗号解析を防ぐことができるとされている（例えば、特許文献１）。
【０００４】
しかし、演算の途中に非線形演算が挟まる場合（存在する場合）、マスク処理をしたまま演算を行うと、正しい演算結果を得ることはできないという問題があった。
【特許文献１】特表２００２−５１９７２２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
本発明の課題は、マスク処理をしたまま非線形演算を行っても正しい演算結果を得ることができる暗号処理装置，暗号処理プログラム及び暗号処理方法を提供することである。
【課題を解決するための手段】
【０００６】
本発明は、以下のような解決手段により、前記課題を解決する。なお、理解を容易にするために、本発明の実施形態に対応する符号を付して説明するが、これに限定されるものではない。
【０００９】
請求項１の発明は、第１の秘密情報（ａ）と第１の乱数情報（ｍ１）とを排他的論理和により加算することによって前記第１の秘密情報（ａ）をマスクし、第１のマスクされた秘密情報（Ａ）を算出する手段（１２）と、第２の秘密情報（ｂ）と第２の乱数情報（ｍ２）とを排他的論理和により加算することによって前記第２の秘密情報（ｂ）をマスクし、第２のマスクされた秘密情報（Ｂ）を算出する手段（１２）と、前記第１のマスクされた秘密情報（Ａ）と前記第２の乱数情報（ｍ２）とを用いて、前記マスクされた秘密情報（Ａ，Ｂ）のマスクを除去するための第１の中間値（Ｔｅｍｐ１）を算出する手段（１２）と、前記第２のマスクされた秘密情報（Ｂ）と前記第１の乱数情報（ｍ１）とを用いて、前記マスクされた秘密情報（Ａ，Ｂ）のマスクを除去するための第２の中間値（Ｔｅｍｐ２）を算出する手段（１２）と、前記第１の乱数情報（ｍ１）と前記第２の乱数情報（ｍ２）とを用いて、前記マスクされた秘密情報（Ａ，Ｂ）のマスクを除去するための第３の中間値（Ｔｅｍｐ３）を算出する手段（１２）と、前記第１のマスクされた秘密情報（Ａ）と、前記第２のマスクされた秘密情報（Ｂ）と、前記第１の中間値（Ｔｅｍｐ１）と、前記第２の中間値（Ｔｅｍｐ２）と、前記第３の中間値（Ｔｅｍｐ３）とを用いて、前記第１の秘密情報（ａ）と前記第２の秘密情報（ｂ）との論理積の値を算出する手段と、を備える暗号処理装置（１０）である。
【００１０】
請求項２の発明は、請求項１に記載の暗号処理装置（１０）において、前記第１の秘密情報をａとし、前記第２の秘密情報をｂとし、前記第１の乱数情報をｍ１とし、前記第２の乱数情報をｍ２とし、前記第１のマスクされた秘密情報をＡとし、前記第２のマスクされた秘密情報をＢとし、前記第１の中間値をＴｅｍｐ１とし、前記第２の中間値をＴｅｍｐ２とし、前記第３の中間値をＴｅｍｐ３とし、前記第１の秘密情報（ａ）と前記第２の秘密情報（ｂ）との論理積の値をｒｅｓｕｌｔとした場合に、以下の式（１．２）〜式（１．８）を用いて、式（１．１）の演算処理を行うこと、
【数１】
0004962165.tif 000002
を特徴とする暗号処理装置（１０）である。
【００１１】
請求項３の発明は、請求項２に記載の暗号処理装置（１０）において、第３の乱数情報をｍ３とし、前記式（１．７）を以下の式（１．１３）とし、前記式（１．８）を以下の式（１．１４）とすること、
【数２】
0004962165.tif 000003
を特徴とする暗号処理装置（１０）である。
【００１２】
請求項４の発明は、第１の秘密情報（ａ）と第１の乱数情報（ｍ１）とを排他的論理和により加算することによって前記第１の秘密情報（ａ）をマスクし、第１のマスクされた秘密情報（Ａ）を算出する手段（１２）と、第２の秘密情報（ｂ）と第２の乱数情報（ｍ２）とを排他的論理和により加算することによって前記第２の秘密情報（ｂ）をマスクし、第２のマスクされた秘密情報（Ｂ）を算出する手段（１２）と、前記第１のマスクされた秘密情報（Ａ）と前記第２の乱数情報（ｍ２）とを用いて、前記マスクされた秘密情報（Ａ，Ｂ）のマスクを除去するための第１の中間値（Ｔｅｍｐ１）を算出する手段（１２）と、前記第２のマスクされた秘密情報（Ｂ）と前記第１の乱数情報（ｍ１）とを用いて、前記マスクされた秘密情報（Ａ，Ｂ）のマスクを除去するための第２の中間値（Ｔｅｍｐ２）を算出する手段（１２）と、前記第１の乱数情報（ｍ１）と前記第２の乱数情報（ｍ２）とを用いて、前記マスクされた秘密情報（Ａ，Ｂ）のマスクを除去するための第３の中間値（Ｔｅｍｐ３）を算出する手段（１２）と、前記第１のマスクされた秘密情報（Ａ）と、前記第２のマスクされた秘密情報（Ｂ）と、前記第１の中間値（Ｔｅｍｐ１）と、前記第２の中間値（Ｔｅｍｐ２）と、前記第３の中間値（Ｔｅｍｐ３）とを用いて、前記第１の秘密情報（ａ）と前記第２の秘密情報（ｂ）との論理和の値を算出する手段（１２）と、を備える暗号処理装置（１０）である。
【００１３】
請求項５の発明は、請求項４に記載の暗号処理装置（１０）において、前記第１のマスクされた秘密情報（Ａ）及び前記第２のマスクされた秘密情報（Ｂ）には、最初に否定処理を施して、その後の演算を行うこと、を特徴とする暗号処理装置（１０）である。
【００１４】
請求項６の発明は、請求項５に記載の暗号処理装置（１０）において、前記第１の秘密情報をａとし、前記第２の秘密情報をｂとし、前記第１の乱数情報をｍ１とし、前記第２の乱数情報をｍ２とし、前記第１のマスクされた秘密情報をＡとし、前記第２のマスクされた秘密情報をＢとし、前記第１の中間値をＴｅｍｐ１とし、前記第２の中間値をＴｅｍｐ２とし、前記第３の中間値をＴｅｍｐ３とし、前記第１の秘密情報（ａ）と前記第２の秘密情報（ｂ）との論理和の値をｒｅｓｕｌｔとした場合に、以下の式（２．２）〜式（２．１１）を用いて、式（２．１）の演算処理を行うこと、
【数３】
0004962165.tif 000004
を特徴とする暗号処理装置（１０）である。
【００１５】
請求項７の発明は、請求項６に記載の暗号処理装置（１０）において、第３の乱数情報をｍ３とし、前記式（２．９）を以下の式（２．１２）とし、前記式（２．１０）を以下の式（２．１３）とすること、
【数４】
0004962165.tif 000005
を特徴とする暗号処理装置（１０）である。
【００１６】
請求項８の発明は、請求項１から請求項７までのいずれか１項に記載の暗号処理装置（１０）において、前記第１の秘密情報（ａ）と前記第２の秘密情報（ｂ）との論理積又は論理和の算出は、ハッシュ関数，ストリーム暗号及びブロック暗号のうち少なくとも１つの処理の一部又は全部に用いられること、を特徴とする暗号処理装置（１０）である。
【００１７】
請求項９の発明は、コンピュータを、第１の秘密情報と第１の乱数情報とを排他的論理和により加算することによって前記第１の秘密情報をマスクし、第１のマスクされた秘密情報を算出する手段と、第２の秘密情報と第２の乱数情報とを排他的論理和により加算することによって前記第２の秘密情報をマスクし、第２のマスクされた秘密情報を算出する手段と、前記第１のマスクされた秘密情報と前記第２の乱数情報とを用いて、前記マスクされた秘密情報のマスクを除去するための第１の中間値を算出する手段と、前記第２のマスクされた秘密情報と前記第１の乱数情報とを用いて、前記マスクされた秘密情報のマスクを除去するための第２の中間値を算出する手段と、前記第１の乱数情報と前記第２の乱数情報とを用いて、前記マスクされた秘密情報のマスクを除去するための第３の中間値を算出する手段と、前記第１のマスクされた秘密情報と、前記第２のマスクされた秘密情報と、前記第１の中間値と、前記第２の中間値と、前記第３の中間値とを用いて、前記第１の秘密情報と前記第２の秘密情報との論理積の値を算出する手段と、として機能させるための暗号処理プログラムである。
請求項１０の発明は、コンピュータを、第１の秘密情報と第１の乱数情報とを排他的論理和により加算することによって前記第１の秘密情報をマスクし、第１のマスクされた秘密情報を算出する手段と、第２の秘密情報と第２の乱数情報とを排他的論理和により加算することによって前記第２の秘密情報をマスクし、第２のマスクされた秘密情報を算出する手段と、前記第１のマスクされた秘密情報と前記第２の乱数情報とを用いて、前記マスクされた秘密情報のマスクを除去するための第１の中間値を算出する手段と、前記第２のマスクされた秘密情報と前記第１の乱数情報とを用いて、前記マスクされた秘密情報のマスクを除去するための第２の中間値を算出する手段と、前記第１の乱数情報と前記第２の乱数情報とを用いて、前記マスクされた秘密情報のマスクを除去するための第３の中間値を算出する手段と、前記第１のマスクされた秘密情報と、前記第２のマスクされた秘密情報と、前記第１の中間値と、前記第２の中間値と、前記第３の中間値とを用いて、前記第１の秘密情報と前記第２の秘密情報との論理和の値を算出する手段と、として機能させるための暗号処理プログラムである。
【００１８】
請求項１１の発明は、記憶部及び制御部を備える暗号処理装置が、第１の秘密情報と第１の乱数情報とを排他的論理和により加算することによって前記第１の秘密情報をマスクし、第１のマスクされた秘密情報を算出する工程と、前記暗号処理装置が、第２の秘密情報と第２の乱数情報とを排他的論理和により加算することによって前記第２の秘密情報をマスクし、第２のマスクされた秘密情報を算出する工程と、前記暗号処理装置が、前記第１のマスクされた秘密情報と前記第２の乱数情報とを用いて、前記マスクされた秘密情報のマスクを除去するための第１の中間値を算出する工程と、前記暗号処理装置が、前記第２のマスクされた秘密情報と前記第１の乱数情報とを用いて、前記マスクされた秘密情報のマスクを除去するための第２の中間値を算出する工程と、前記暗号処理装置が、前記第１の乱数情報と前記第２の乱数情報とを用いて、前記マスクされた秘密情報のマスクを除去するための第３の中間値を算出する工程と、前記暗号処理装置が、前記第１のマスクされた秘密情報と、前記第２のマスクされた秘密情報と、前記第１の中間値と、前記第２の中間値と、前記第３の中間値とを用いて、前記第１の秘密情報と前記第２の秘密情報との論理積の値を算出する工程と、を備える暗号処理方法である。
請求項１２の発明は、記憶部及び制御部を備える暗号処理装置が、第１の秘密情報と第１の乱数情報とを排他的論理和により加算することによって前記第１の秘密情報をマスクし、第１のマスクされた秘密情報を算出する工程と、前記暗号処理装置が、第２の秘密情報と第２の乱数情報とを排他的論理和により加算することによって前記第２の秘密情報をマスクし、第２のマスクされた秘密情報を算出する工程と、前記暗号処理装置が、前記第１のマスクされた秘密情報と前記第２の乱数情報とを用いて、前記マスクされた秘密情報のマスクを除去するための第１の中間値を算出する工程と、前記暗号処理装置が、前記第２のマスクされた秘密情報と前記第１の乱数情報とを用いて、前記マスクされた秘密情報のマスクを除去するための第２の中間値を算出する工程と、前記暗号処理装置が、前記第１の乱数情報と前記第２の乱数情報とを用いて、前記マスクされた秘密情報のマスクを除去するための第３の中間値を算出する工程と、前記暗号処理装置が、前記第１のマスクされた秘密情報と、前記第２のマスクされた秘密情報と、前記第１の中間値と、前記第２の中間値と、前記第３の中間値とを用いて、前記第１の秘密情報と前記第２の秘密情報との論理和の値を算出する工程と、を備える暗号処理方法である。
【発明の効果】
【００１９】
本発明によれば、以下のような効果がある。
（１）マスクされた秘密情報及び／又は中間値を用いて、秘密情報の論理積及び／又は論理和に関する演算を行うので、演算中に秘密情報を用いる必要がなく、秘密情報が漏洩することがない。また、最終的には、中間値によってマスクを除去することができるので、秘密情報にマスク処理をしたまま非線形演算を行っても正しい演算結果を得ることができる。
（２）中間値やマスクされた秘密情報から予測される秘密情報の出現率が等しくなるような演算式を用いて演算を行うので、秘密情報が予測されることがない。
（３）各秘密情報（ａ，ｂ）を入れ替えても、マスクされた秘密情報を持つ変数（Ａ，Ｂ）に各秘密情報（ａ，ｂ）の変化を反映させれば、演算結果が変わらないような対称な演算式を用いて演算処理を行うので、秘密情報が予測されることがない。
【００２０】
（４）論理和の値を算出する場合、第１のマスクされた秘密情報及び第２のマスクされた秘密情報には、最初に否定処理を施して、その後の演算を行うので、最終的な演算結果を効率よく得ることができる。
（５）秘密情報の論理積及び／又は論理和に関する演算は、ハッシュ関数，ストリーム暗号及びブロック暗号のうち少なくとも１つの処理の一部又は全部に用いられるので、これらの処理をより安全に行うことができる。
【発明を実施するための最良の形態】
【００２１】
以下、図面等を参照して、本発明の実施形態について、さらに詳しく説明する。
（実施形態）
図１は、本発明による暗号処理装置の実施形態を示す図である。
本実施形態のＩＣカード（暗号処理装置）１０は、通信部１１と、ＣＰＵ１２と、ＲＯＭ１３と、ＲＡＭ１４と、ＥＥＰＲＯＭ１５と、乱数生成部１６などとを備え、非線形演算処理におけるサイドチャネル攻撃に対応可能なＩＣカードである。
【００２２】
通信部１１は、外部装置としてのリーダライタ２０とコマンドやデータを送受信するための入出力インターフェースであり、例えば、接触式の接触端子や、非接触式のアンテナなどを備える。
ＣＰＵ１２は、通信部１１を介してリーダライタ２０と交信し、ＲＯＭ１３に記憶されているプログラム（制御プログラム，暗号処理プログラムなど）に基づいてＩＣカード１０を統括制御する部分である。また、ＣＰＵ１２は、後述する秘密情報、乱数情報、マスクされた秘密情報、中間値などを用いて、秘密情報の論理積や論理和を、秘密情報を漏洩せずに、安全かつ間接的に求める演算を行う。
【００２３】
ＲＯＭ１３は、不揮発性のメモリであり、ＣＰＵ１２によって実行されるプログラムが記憶されている。
ＲＡＭ１４は、揮発性のメモリであり、ＣＰＵ１２が制御を行う上で作業領域として使用される。
ＥＥＰＲＯＭ１５は、書き換え可能な不揮発性のメモリであり、ＩＣカード１０に記録されるデータを格納する。
乱数生成部１６は、ＣＰＵ１２の指示により、所定の乱数を発生する部分である。
【００２４】
図２は、ＲＡＭ１４に展開されるデータの様子を示す図である。
暗号処理時には、ＣＰＵ１２の指示により、演算用のデータとして、ＲＡＭ１４に秘密情報ａ，ｂ、乱数情報ｍ1，ｍ2，マスクされた秘密情報Ａ，Ｂなどが展開される。なお、図２では、秘密情報はａ〜ｚ、マスクされた秘密情報はＡ〜Ｚの例で示しているが、以下の説明では、２つの秘密情報ａ，ｂと、２つのマスクされた秘密情報Ａ，Ｂの例で説明する。
【００２５】
図３は、ＩＣカード１０の動作を説明する図である。図３の括弧内の番号は、以下の各式の番号と対応している。
ここでは、秘密情報ａと秘密情報ｂとのＡＮＤ演算（論理積）について説明する。なお、以下の演算処理は、ＩＣカード１０のＣＰＵ１２が処理を行わせている。
サイドチャネル攻撃の対策として、秘密情報に乱数をＸＯＲ演算（排他的論理和）し、その状態のまま演算を行う必要があるが、非線形処理であるＡＮＤ演算において、秘密情報に乱数をＸＯＲ演算した状態のまま演算を行うと、正しい演算結果を得ることができない。
そこで、マスク処理を保持した状態で、秘密情報ａと秘密情報ｂとのＡＮＤ演算を行うための方法を提案する。ここでは、以下の式（１．１）の演算結果を求める状況を想定する。なお、以下の説明中、「・」はＡＮＤ演算（論理積）を示し、「＋」はＯＲ演算（論理和）を示し、丸の中に加算の記号は、ＸＯＲ演算（排他的論理和）を示している。
【００２６】
【数５】
0004962165.tif 000006
【００２７】
また、ここでは、
秘密情報ａ；第１の秘密情報
秘密情報ｂ；第２の秘密情報
乱数情報ｍ1；第１の乱数情報
乱数情報ｍ2；第２の乱数情報
マスクされた秘密情報Ａ；第１のマスクされた秘密情報
マスクされた秘密情報Ｂ；第２のマスクされた秘密情報
中間値Ｔｅｍｐ１；第１の中間値
中間値Ｔｅｍｐ２；第２の中間値
中間値Ｔｅｍｐ３；第３の中間値
ｒｅｓｕｌｔ；第１の秘密情報と第２の秘密情報との論理積の値
としている。
【００２８】
秘密情報ａ，ｂは、秘密とすべき情報であり、乱数情報ｍ1，ｍ2は、乱数生成部１６で生成される乱数であり、マスクされた秘密情報Ａ，Ｂは、秘密情報ａ，ｂと乱数情報ｍ1
，ｍ2とを排他的論理和により加算することによって得られた値であり、中間値Ｔｅｍｐ
１〜Ｔｅｍｐ３は、マスクされた秘密情報Ａ，Ｂのマスクを除去するための値である。
【００２９】
式（１．１）において、秘密情報ａ，ｂは、秘密にされるべき要素であるが、この演算を直接行うと、ＤＰＡなどにより、秘密情報ａ，ｂの値を推測されてしまう可能性がある。
演算結果を読み取られても問題がないようにするため、式（１．２），式（１．３）に示すように、あらかじめそれぞれの秘密情報ａ，ｂに乱数情報ｍ1，ｍ2をＸＯＲ演算してマスクしておく。これにより、すべての演算の入力値に、異なる乱数情報がＸＯＲ演算されることになる。
【００３０】
【数６】
0004962165.tif 000007
【数７】
0004962165.tif 000008
【００３１】
ここで、乱数情報ｍ1，ｍ2は、乱数生成部１６で生成された任意の乱数である。この乱数情報ｍ1，ｍ2と秘密情報ａ，ｂとをＸＯＲ演算したマスクされた秘密情報Ａ，Ｂの値で計算を行うことにより、サイドチャネル攻撃で値を読み取られたとしても、読み取られた値から秘密情報ａ，ｂを推測することが不可能になる。
マスクされた秘密情報Ａ，Ｂを使用してＡＮＤ演算を行うと、式（１．４）のようになる。
【００３２】
【数８】
0004962165.tif 000009
【００３３】
この演算より、秘密情報ａ，ｂ同士の論理積であるａ・ｂを求めるためには、（ａ・ｍ2），（ｂ・ｍ1），（ｍ1・ｍ2）をそれぞれ求め、式（１．４）に対してそれぞれＸＯＲ演算する必要がある。ただし、これらの値を求める際に、秘密情報ａ，ｂを直接使用してはならない。そのため、マスクされた秘密情報Ａ，Ｂ、乱数情報ｍ1，ｍ2のみを利用して、以下の３つの式（１．５）（１．６）（１．７）を用いて演算を行う。
【００３４】
【数９】
0004962165.tif 000010
【数１０】
0004962165.tif 000011
【数１１】
0004962165.tif 000012
【００３５】
式（１．５），式（１．６），式（１．７）より、それぞれの結果を利用して演算を行うと、以下の式（１．８）となり、秘密情報ａ，ｂを直接演算に利用せずに、目的とする式（１．１）の演算結果を得ることが可能となる。
【００３６】
【数１２】
0004962165.tif 000013
【００３７】
また、式（１．４），式（１．５），式（１．６）は、マスクされた秘密情報Ａ，Ｂを含んだ中間値Ｔｅｍｐ１〜Ｔｅｍｐ３とマスクされた秘密情報Ａ，Ｂとから予測される秘密情報ａ，ｂの出現率が等しくなるような演算式である（出現率の詳細は後述）。
さらに、式（１．４），式（１．５），式（１．６），式（１．７）は、２つの秘密情報ａ，ｂのうちａとｂとを入れ替えても演算結果が変わらないような対称な演算式である。
【００３８】
次に、上述したアルゴリズムの安全性について検討する。
上述したアルゴリズムによって、サイドチャネル攻撃の対策により秘密情報ａ，ｂを乱数情報ｍ1，ｍ2でマスク処理したまま演算を行うことが可能となり、ＤＰＡ攻撃などによる秘密情報ａ，ｂの推測を防ぐことが可能となる。
しかし、秘密情報ａ，ｂを演算に直接利用していなくとも，途中演算において、秘密情報ａ，ｂをマスク処理したデータ同士の演算結果により、秘密情報ａ，ｂの推測又は絞り込みが行える可能性もある。
２項間（複数の式）で演算を行うこととした場合、上述したアルゴリズムで実際に計算を行う必要があるのは以下の演算である。
【００３９】
【数１３】
0004962165.tif 000014
【数１４】
0004962165.tif 000015
【数１５】
0004962165.tif 000016
【数１６】
0004962165.tif 000017
【００４０】
上記以外の演算は、上記演算から発生したデータを用いて演算を行うため、これらの演算において秘密情報ａ，ｂが推測できなければ、それ以降の演算においても秘密情報ａ，ｂを推測することはできない。
そのため、上記演算から秘密情報ａ，ｂが推測できなければ途中演算からの推測はできないと考えられる。
式（１．９）〜式（１．１１）のそれぞれの演算について真理値表を作成すると、以下の表１〜表３のようになる。
【００４１】
【表１】
0004962165.tif 000018
【表２】
0004962165.tif 000019
【表３】
0004962165.tif 000020
【００４２】
表１は、式（１．９）の真理値表を示す表であり、表２は、式（１．１０）の真理値表を示す表であり、表３は、式（１．１１）の真理値表を示す表である。
表１より、マスクされた秘密情報同士の論理積であるＡ・Ｂでは、Ａ・Ｂ＝０の状況下において、秘密情報ａ，ｂがそれぞれ０，１になる確率（０，１の出現率）は等しくなることがわかる。
具体的には、Ａ・Ｂ＝０の場合は、ａ＝０の場合が６通り、ａ＝１の場合が６通り、ｂ＝０の場合が６通り、ｂ＝１の場合が６通りである。
【００４３】
同様に、Ａ・Ｂ＝１の状況下においても、秘密情報ａ，ｂがそれぞれ０，１になる確率は等しい。
具体的には、Ａ・Ｂ＝１の場合は、ａ＝０の場合が２通り、ａ＝１の場合が２通り、ｂ＝０の場合が２通り、ｂ＝１の場合が２通りである。
このことから、例え、Ａ・Ｂの値が外部に漏洩したとしても、そのＡ・Ｂの値より秘密情報ａ，ｂを推測することは不可能であることがわかる。
【００４４】
また、表２より、マスクされた秘密情報と乱数情報との論理積であるＡ・ｍ2では、Ａ
・ｍ2＝０，１の状況下において、秘密情報ａ＝０，１となる確率はそれぞれ等しい。そ
のため、Ａ・ｍ2より秘密情報ａを推測することはできない。
同様に、表３より、マスクされた秘密情報と乱数情報との論理積であるＢ・ｍ1では、
Ｂ・ｍ1＝０，１の状況下において、秘密情報ｂ＝０，１となる確率はそれぞれ等しいた
め、Ｂ・ｍ1から秘密情報ｂを推測することは不可能である。
【００４５】
さらに、上述した式（１．１２）では、秘密情報ａ，ｂの論理積に関する演算を行うので、秘密情報ａ，ｂは一切利用しておらず、この演算から秘密情報ａ，ｂを推測される可能性はない。
【００４６】
次に、ＯＲ演算について説明する。
ＯＲ演算も、基本的には、ＡＮＤ演算と同様であり、サイドチャネル攻撃の対策として、マスク処理を保持した状態で演算を行う必要がある。ここでは、以下の式（２．１）の演算結果を求める状況を想定する。
【００４７】
【数１７】
0004962165.tif 000021
【００４８】
式（２．１）において、秘密情報ａ，ｂは、秘密にされるべき要素であるが、この演算を直接行うと、ＤＰＡなどにより、秘密情報ａ，ｂの値を推測されてしまう可能性がある。
演算結果を読み取られても問題がないようにするため、式（２．２），式（２．３）に示すように、あらかじめそれぞれの秘密情報ａ，ｂに乱数情報ｍ1，ｍ2をＸＯＲ演算してマスクしておく。
【００４９】
【数１８】
0004962165.tif 000022
【数１９】
0004962165.tif 000023
【００５０】
後ほどド・モルガンの定理を用いるために、マスクされた秘密情報Ａ，ＢにはあらかじめＮＯＴ演算（否定処理）を施しておく。演算としては、秘密情報ａ，ｂにＮＯＴ処理を行うことと同じ意味であるが、秘密情報ａ，ｂを用いて直接演算すると演算結果を読み取
られる危険があるため、式（２．４），式（２．５）に示すように、マスク処理後のマスクされた秘密情報Ａ，ＢについてＮＯＴ処理を施す。
【００５１】
【数２０】
0004962165.tif 000024
【数２１】
0004962165.tif 000025
【００５２】
ここで、乱数情報ｍ1，ｍ2は、乱数生成部１６で生成された任意の乱数である。マスクされた秘密情報Ａ，Ｂを使用してＡＮＤ演算を行うと、式（２．６）のようになる。
【００５３】
【数２２】
0004962165.tif 000026
【００５４】
この式（２．６）の演算より、秘密情報同士の論理積であるａ＋ｂを求めるために、あらかじめ以下の式（２．７），式（２．８），式（２．９）演算結果を算出しておく。
【００５５】
【数２３】
0004962165.tif 000027
【数２４】
0004962165.tif 000028
【数２５】
0004962165.tif 000029
【００５６】
そして、ＡＮＤ演算時と同様に、式（２．７），式（２．８），式（２．９）より，それぞれの結果を利用して演算を行うと、式（２．１０）のようになる。
【００５７】
【数２６】
0004962165.tif 000030
【００５８】
式（２．１０）の結果より、ド・モルガンの定理を用いて以下の式（２．１１）ように変換を行う。
【００５９】
【数２７】
0004962165.tif 000031
【００６０】
式（２．１１）の演算より、秘密情報ａ，ｂを直接演算に利用せず、目的とする式（２．１）の演算結果を得ることができる。
なお、上述したアルゴリズムの安全性に関して、途中演算からの秘密情報ａ，ｂの推測については、上述した表１〜表３と同様であり、安全性は確保されている。
【００６１】
ここで、上述したアルゴリズムをより安全に実行する方法について説明する。
上述した各式の通りに、ＤＰＡ対策を行えば、基本的には問題はないが、所定の場合には、表１〜表３の真理値表が成り立たず、秘密情報ａ，ｂを推測することができる可能性がある。
具体的には、式（１．１２）〜式（１．１４）個別では、秘密情報ａ，ｂが漏洩することはないが、それらをＸＯＲ演算で加算すると、情報漏えいにつながる可能性がある。
そこで、この解決策として、第３の乱数情報ｍ3を導入し、式（１．７）を以下の式（
１．１３）とし、式（１．８）を以下の式（１．１４）として演算を行う。
なお、上述した真理値表（表１〜表３）は、必ず成り立つものである。問題は、第３の乱数情報ｍ3をＸＯＲ演算で加算しておかないと、中間値Ｔｅｍｐ１と中間値Ｔｅｍｐ２
とをＸＯＲ処理するなど中間値同士をＸＯＲ処理した更なる中間値が秘密情報の漏洩につながる偏りを見せてしまう、ということである。ただ、中間値単独で考えれば情報漏えいの問題はないので、「問題ない値（Ｔｅｍｐ１，Ｔｅｍｐ２）を２つＸＯＲ演算してなぜ問題がある値になってしまうのか」という点で疑問が生じるが、これは実際コンピュータで計算して確認した結果なので問題ない。これを細かく説明すると、漏洩につながる偏りを見せてしまう原因は、第３の乱数情報ｍ3を使わない場合、中間値Ｔｅｍｐ１，Ｔｅｍ
ｐ２，Ｔｅｍｐ３のうち２つをＸＯＲ処理したときの値は、第１の乱数情報ｍ1と第２の
乱数情報ｍ2の要素が相殺されてしまうためであり、結果として、値に偏りが生じること
になる。このような問題点に対して、第３の乱数情報ｍ3を導入することで、値に偏りが
生じなくなる。
【００６２】
【数２８】
0004962165.tif 000032
【００６３】
このようにすれば、秘密情報ａ，ｂを推測することが完全にできなくなり、安全性がよ
り高まる。
【００６４】
これと同様に、第３の乱数情報をｍ3とし、式（２．９）を以下の式（２．１２）とし
、式（２．１０）を以下の式（２．１３）としても、安全性を高めることができる。
【００６５】
【数２９】
0004962165.tif 000033
【００６６】
このように、本実施形態によれば、以下のような効果がある。
（１）マスクされた秘密情報Ａ，Ｂと、中間値Ｔｅｍｐ１〜Ｔｅｍｐ３を用いて、秘密情報ａ，ｂのＡＮＤ演算やＯＲ演算に関する演算を行うので、演算中に秘密情報ａ，ｂを用いる必要がなく、秘密情報ａ，ｂが漏洩することがない。また、最終的には、中間値Ｔｅｍｐ１〜Ｔｅｍｐ３によってマスクを除去することができるので、秘密情報ａ，ｂにマスク処理をしたまま非線形演算を行っても正しい演算結果を得ることができる。さらに、暗号演算内のＡＮＤ演算とＯＲ演算とを、サイドチャネル攻撃などの脅威から守ることができる。
【００６７】
（２）マスク演算の最終出力全てを参照テーブルとしてプログラムに組み込む方法に比べ、本願発明のようにブール代数の基本演算（ＡＮＤ，ＯＲ，ＮＯＴ，ＸＯＲ）を組み合わせる手法の方が、処理速度を向上させることができる。
（３）テーブルを使用していないので、メモリ使用量も減らせ、演算のリソース（ハードウェアやソフトウェアの資源）の負担が軽減でき、また、データを保護するマスク用の乱数情報ｍ1，ｍ2を定期的に変えられるため、セキュリティが向上する。
【００６８】
（４）中間値Ｔｅｍｐ１〜Ｔｅｍｐ３やマスクされた秘密情報Ａ，Ｂから予測される秘密情報ａ，ｂの出現率が等しくなるような演算式を用いて演算を行うので、秘密情報ａ，ｂが予測されることがない。
（５）各秘密情報ａ，ｂを入れ替えても、マスクされた秘密情報を持つ変数Ａ，Ｂに各秘密情報ａ，ｂの変化を反映させれば、演算結果が変わらないような対称な演算式を用いて演算処理を行うので、秘密情報ａ，ｂが予測されることがない。
【００６９】
（６）論理和の値を算出する場合、秘密情報ａ，ｂには、最初にＮＯＴ演算を施して、その後の演算を行うので、最終的な演算結果を効率よく得ることができる。
（７）秘密情報ａ，ｂの論理積や論理和に関する演算は、ハッシュ関数やストリーム暗号、ブロック暗号の処理の一部として用いられるので、これらの処理をより安全に行うことができる。
【００７０】
（８）提案した非線形演算におけるサイドチャネル攻撃の対策アルゴリズムは、実際にＡＮＤ演算又はＯＲ演算を利用する暗号や、認証用のアルゴリズムにおいて秘密鍵を守る目的で利用することが考えられ、特に、ＨＭＡＣ−ＳＨＡ１のアルゴリズムに好適に適用することができる。
【００７１】
ＨＭＡＣ−ＳＨＡ１とは、認証やデジタル署名などに使用されるハッシュ関数（厳密に言えば、ハッシュ関数より上位の関数）である。ＨＭＡＣ−ＳＨＡ１は、秘密情報と公開情報を混合して認証のためのデータを生成する手法であり、演算に使用する情報を秘密にすることができる。サイドチャネル攻撃の対策を行う際、乱数をＸＯＲ演算してマスクをかけた状態で演算することが考えられるが、ＨＭＡＣ−ＳＨＡ１のアルゴリズムでは、ＡＮＤ演算を利用するため、マスクをかけた状態で演算を行うと、正しい演算結果を得ることができない。
この問題を防ぐために、ＡＮＤ演算部分に上述の手法を適用することにより、サイドチャネル攻撃を防ぐことができる。なお、ＨＭＡＣ−ＳＨＡ１の他にも、ＨＭＡＣの下位層にあたるＨＭＡＣ−ＲＩＰＥＭＤ１６０などといったハッシュ関数にも適用することができる。
【００７２】
（変形形態）
以上説明した実施形態に限定されることなく、種々の変形や変更が可能であって、それらも本発明の範囲内である。
（１）実施形態では、暗号処理装置は、ＩＣカードの例で説明したが、セキュアートークン（代用硬貨）、携帯可能演算装置、ハードウェア、セキュリティ・モジュール、携帯電話機、ＵＩＭカード、ＳＩＭカード、ＩＣカードの暗号ソフト、ＰＣ用のセキュリティチップなどであってもよい。
（２）ＩＣカード用の暗号プログラムとしては、Ｋｅｙｅｄ・Ｈａｓｈ暗号（ＨＭＡＣ−ＳＨＡ１，ＨＭＡＣ−ＲＩＰＥＭＤ１６０など）に使用することもできる。
【００７３】
（３）上述したような手順によって制御を行う暗号処理プログラムを配信するようにしてもよい。なお、本発明でいうコンピュータとは、記憶手段、制御手段などを備えた情報処理装置をいい、パーソナルコンピュータも、携帯電話機も、本発明のコンピュータの概念に含まれる。
（４）上述したような工程を備える暗号化方法によって暗号処理を行ってもよい。
【図面の簡単な説明】
【００７４】
【図１】本発明による暗号処理装置の実施形態を示す図である。
【図２】ＲＡＭ１４に展開されるデータの様子を示す図である。
【図３】ＩＣカード１０の動作を説明する図である。
【符号の説明】
【００７５】
１０  ＩＣカード（暗号処理装置）
１１  通信部
１２  ＣＰＵ
１３  ＲＯＭ
１４  ＲＡＭ
１５  ＥＥＰＲＯＭ
１６  乱数生成部
２０  リーダライタ
ａ，ｂ  秘密情報
Ａ，Ｂ  マスクされた秘密情報
ｍ1，ｍ2  乱数情報
Ｔｅｍｐ１〜Ｔｅｍｐ３  中間値
【図１】
0004962165.tif 000038
【図２】
0004962165.tif 000039
【図３】
0004962165.tif 000040