(57)【要約】【課題】回路規模が小さく、高速処理が可能であって、かつ、電力解析に対する安全性を高めた暗号処理回路等に適用可能なべき乗剰余演算器を提供する。【解決手段】乗剰余演算器１２００は、第１の内部バス１１６に接続され、バイナリ法に従うべき乗剰余演算を実行する際に、破棄されるべき中間演算結果を一旦格納するためのＫレジスタ１３２を備える。このため、破棄されるデータが計算途中に現れた場合でもＫレジスタ１３２への書き込みが行われるので、書き込み時の電流が流れることとなり、電力解析に対する耐性が向上する。【選択図】　　　　図５
2004125891.tif 000002
【特許請求の範囲】
【請求項１】
第１の種類のデータを保持する第１のレジスタ群と、
前記第１のレジスタ群に保持されたデータと並行して参照可能な種類のデータを保持する第２のレジスタ群と、
前記第１のレジスタ群に接続された第１の内部バスと、
前記第２のレジスタ群に接続された第２の内部バスと、
前記第１および第２の内部バスに接続され、前記第１および第２のレジスタ群に保持された値を並行して参照し、モンゴメリ乗算剰余演算を実行するためのモンゴメリ乗算剰余演算実行手段と、
前記第１および第２の内部バス、ならびに前記モンゴメリ乗算剰余演算実行手段に接続され、前記第１および第２のレジスタ群に保持された値を並行して参照し、前記モンゴメリ乗算剰余演算実行手段との間でデータのやり取りを行ない、べき乗剰余演算を実行するためのべき乗剰余演算実行手段と、
前記モンゴメリ乗算剰余演算および前記べき乗剰余演算の各計算結果を得るためには省略可能な中間演算処理を擬似的に実行するための擬似演算実行手段とを備える、べき乗剰余演算器。
【請求項２】
前記擬似演算実行手段は、
前記第１の内部バスに接続され、バイナリ法に従う前記べき乗剰余演算を実行する際に、破棄されるべき中間演算結果を一旦格納するためのダミーレジスタを含む、請求項１記載のべき乗剰余演算器。
【請求項３】
前記第１のレジスタ群は、
バイナリ法に従う前記べき乗剰余演算を実行する際に、前記べき乗剰余演算の中間結果を格納するための中間結果格納レジスタを含み、
前記擬似演算実行手段は、
前記中間結果格納レジスタの初期値を単位元とする代わりに、べき乗を表す２進整数のビット値のうち、最上位ビットから最初に１になった時の前記中間結果を、前記べき乗のべき乗される数の値に置換える置換手段を含む、請求項１記載のべき乗剰余演算器。
【請求項４】
前記置換手段は、前記モンゴメリ乗算剰余の補正演算において、前記中間結果格納レジスタに格納されるべき前記中間結果の演算において、オペランドを０と前記べき乗される数に変更して前記中間結果格納レジスタに格納することにより、前記中間結果を前記べき乗のべき乗される数の値に置換える、請求項３記載のべき乗剰余演算器。
【請求項５】
前記第２のレジスタ群は、
前記モンゴメリ乗算剰余演算において、繰り返し累積加算をしていく途中の値を格納する累積加算レジスタを含み、
前記擬似演算実行手段は、
前記累積加算レジスタの初期値を零元とする代わりに、乗数の各ビット値のうち最下位ビットから最初に１になった時点で、前記累積加算レジスタの値に代えて値０を前記累積加算レジスタの値として読み出す読出し手段を含む、請求項１記載のべき乗剰余演算器。
【請求項６】
前記第２のレジスタ群は、
前記モンゴメリ乗算剰余演算において、繰り返し累積加算をしていく途中の値を格納する累積加算レジスタを含み、
前記モンゴメリ乗算剰余演算実行手段は、
前記モンゴメリ乗算剰余演算と前記モンゴメリ乗算剰余演算における補正演算の双方に共用して使用される累積加算器を含み、
前記擬似演算実行手段は、
前記補正演算の要否とは独立して、前記累積加算レジスタへの書き込み動作を行うためのレジスタ入出力手段を含む、請求項１記載のべき乗剰余演算器。
【請求項７】
前記レジスタ入出力手段は、
前記補正演算の結果に対して右シフト処理を行って前記累積加算レジスタに書込むための右シフト手段と、
前記右シフト処理において、前記補正演算の結果の最下位ビットを保持するための一時保持レジスタと、
前記累積加算レジスタからの読出しにおいて、読み出された値を左シフトし、かつ、左シフト結果に前記一時保持レジスタに保持された値を最下位ビットとして付加するための左シフト手段とを含む、請求項６記載のべき乗剰余演算器。
【請求項８】
前記第２のレジスタ群は、
前記モンゴメリ乗算剰余演算において、繰り返し累積加算をしていく途中の値を格納する累積加算レジスタと、
ダミーレジスタとを含み、
前記モンゴメリ乗算剰余演算実行手段は、
前記モンゴメリ乗算剰余演算と前記モンゴメリ乗算剰余演算における補正演算の双方に共用して使用される累積加算器を含み、
前記擬似演算実行手段は、
前記補正演算が必要な場合は、前記累積加算レジスタへの書き込み動作を行い、前記補正演算が不要な場合は、前記ダミーレジスタへの書込み動作を行なうためのレジスタ入出力手段を含む、請求項１記載のべき乗剰余演算器。
【請求項９】
破棄されるべき中間演算結果を計算する時の演算の入力を与え、前記破棄されるべき中間演算結果を一旦格納するためのダミーレジスタをさらに備える、請求項１記載のべき乗剰余演算器。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、情報通信ネットワーク、交通、金融、医療、流通等の分野において使用される情報の暗号化技術を実現するための乗剰余演算器に関し、特に、モンゴメリ（Ｍｏｎｔｇｏｍｅｒｙ）のアルゴリズムを用いてべき乗剰余演算を行なうべき乗剰余演算器の構成に関する。
【０００２】
【従来の技術】
情報通信技術の発展に伴い、情報ネットワーク上のセキュリティの確保（データの盗用や破壊を防止すること）が重要視されるようになってきている。そのため、情報の暗号化技術および復号化技術が採用されることが多く、その適用分野は単なる情報通信分野に留まらず、交通、金融、医療、流通等の身近な分野にまで広がりつつある。この種の暗号化技術および復号化技術には、高度なセキュリティを単純な原理によって実現できることが要求される。
【０００３】
まず、この種の技術の理解を容易にするため、情報の暗号化・復号化についての概略を説明する。暗号の世界においては、“非対称暗号アルゴリズム”が質的に優れている。非対称暗号アルゴリズムとは、暗号化鍵と復号化鍵とが異なっており、そのいずれか一方から他方が“容易に計算できない”暗号アルゴリズムをいう。この非対称暗号アルゴリズムの代表的なものに、べき乗剰余演算（ある数Ｘを何回も乗算してＮで割った余りをとる計算）を用いるタイプのＲＳＡ（Ｒｉｖｅｓｔ−Ｓｈａｍｉｒ−Ａｄｌｅｍａｎ　ｓｃｈｅｍｅ）暗号がある。
【０００４】
ＲＳＡ暗号を生成するには、次式（１）のべき乗剰余演算の形式が基本として使用される。式（１）は、ＸＹをＮで割ったときの余りを求めることを意味する。また、式（１）において、Ｘは暗号化（復号化）の対象となる平文、ＹおよびＮは暗号化（復号化）のための鍵（キー）である。
【０００５】
ＸＹｍｏｄＮ　　　…（１）
このべき乗剰余演算を用いることにより、情報の暗号化および復号化が容易に実行され、かつＸ、Ｙ、Ｎのオペランドビット長を長くすることで、各鍵の解読を困難にすることができる。
【０００６】
しかし、オペランドビット長を長くすると、べき乗剰余演算に長時間を要することになる。そこで、オペランドビット長が長いべき乗剰余演算をいかに短時間に終了させるかが１つのポイントとなる。
【０００７】
次に、ＲＳＡ暗号を例に取り、べき乗剰余演算を使用した暗号化処理および復号化処理について説明する。
【０００８】
［ＲＳＡ暗号の暗号化および復号化について］
ＲＳＡ暗号の暗号化には、次式（２）が用いられる。
【０００９】
Ｃ＝ＭｅｍｏｄＮ　　　…（２）
復号化には、次式（３）が用いられる。
【００１０】
Ｍ＝ＣｄｍｏｄＮ　　　…（３）
ここで、Ｍは暗号化の対象となる平文、Ｃは暗号化された平文すなわち暗号文である。また、式（２）におけるｅおよびＮは暗号化鍵、式（３）におけるｄおよびＮは復号化鍵である。また、以下の式（４）および式（５）の関係が予め与えられている。
【００１１】
Ｎ＝ｐ・ｑ　　　…（４）
１≡ｅ・ｄｍｏｄ｛ＬＣＭ（ｐ−１，ｑ−１）｝　　　…（５）
ここで、「≡」は、左辺と右辺とが相似であることを意味し、「ＬＣＭ」は、最小公倍数を意味する。またｐとｑとは互いに素な整数である。なお、ｅおよびＮは公開鍵であり、ｄ、ｐおよびｑは秘密鍵である。
【００１２】
式（４）および式（５）は、ともに暗号アルゴリズムにおけるべき乗剰余演算の数値の条件を定義している。式（４）は、Ｎは互いに素な大きな素数ｐおよびｑの積であることを示している。ｐおよびｑはともに奇数なので、当然Ｎは奇数でなければならない。式（５）は、式（４）で示したｐおよびｑからそれぞれ１を減じた値同士の最小公倍数で、ｅおよびｄの積ｅ・ｄを当該最小公倍数で割ったときの余りが１になることを示している。
【００１３】
式（４）および式（５）の条件に基づき、平文Ｍは式（２）を用いて暗号化され、また暗号化された平文Ｍ（暗号文Ｃ）は式（３）を用いて復号化される。
【００１４】
［べき乗剰余演算の演算方法について］
次に暗号化・復号化で使用される、べき乗剰余演算の演算方法を説明する。Ａ＝ＭｅｍｏｄＮのべき乗剰余演算は、整数ｅの２進数展開をｅ＝ｅｋ−１…ｅ１ｅ０として、以下のフロー１に示す反復平方積法を用いることにより実行される。
【００１５】
（フロー１）
2004125891.tif 000003
Ａに格納された値が求めたいべき乗剰余演算の解になる。
【００１６】
以上のように演算の基本は、式（６）および式（７）に示すように乗算と除算（ｍｏｄ算）である。乗算は、初期値を１とするＡの値に対してＡ×ＡまたはＡ×Ｍを行なう部分である。除算は、各々の乗算で得られた値に対してｍｏｄＮ（Ｎで割ったときの余りを求める演算）を行なう部分である。この“乗算と除算”（Ａ×ＡｍｏｄＮ、Ａ×ＭｍｏｄＮ）を１対の演算として、“ｅ”のビット値に従って繰返し演算が行なわれる。すなわち、“ｅ”の最上位ビットから最下位ビットまでの各ビットの内容によって“乗算と除算”が行なわれる。
【００１７】
べき乗剰余演算は、基本となる剰余演算（ｍｏｄ算）を繰返し行なうことで解が得られることを示したが、この繰返し回数自体は、たかだか数百〜数千回であるので、ソフトウェアによる処理でも十分に対応することも可能である。
【００１８】
しかし、この剰余演算自体すなわち除算をハードウェアによって実行するためには、大規模な演算回路と複雑な処理手順とが必要とされる。このため改善が望まれていた。通常、ｅ，ｄ，Ｍ，Ｎなどは１０２４ビット程度の大きな整数が用いられているので、高速指数計算法を使用しても１回のＲＳＡ演算で平均１５００回程度の多重精度乗算と剰余算とを行なわなければならない。特に剰余算は、近似法、剰余テーブル方式、モンゴメリのアルゴリズム等、多くの高速化手法が提案されている。
【００１９】
このような、ＲＳＡ暗号に代表される公開鍵暗号の多くで利用される、べき乗剰余演算を高速に処理するためには、１回当りの剰余算の高速化が要求される。モンゴメリのアルゴリズムは、剰余算を高速処理するアルゴリズムである。特に、乗算剰余演算においては、除算をビットシフトなどで簡略化できるため、公開鍵暗号（ＲＳＡ暗号等）で用いられるべき乗剰余演算を高速処理することができるという特徴がある。
【００２０】
一方、中国人の剰余定理により、合成数を法とする演算は合成数を構成する互いに素な因数を法とする演算から計算できる。これを１０２４ビット長ＲＳＡ暗号処理に適用すると、実際に必要なハードウェアとしては、１０２４ビット長の法Ｎによるべき乗剰余演算器ではなく、５１２ビット長の整数（ここではｐおよびｑに相当する）を法とする演算回路のみでよい。このためハードウェアの小型化に繋がる。
【００２１】
べき乗剰余演算は、基本となる剰余演算（ｍｏｄ算）を実行する手順が非常に複雑であるため、演算回路が大規模化してしまうことを上述した。そこで、モンゴメリは、剰余演算（ｍｏｄ算）を先のような一般的な方法で行なわずに、“乗算”と簡単なビット列処理とで行なうことによって解を得る仕組みを提案している。以下にモンゴメリが提案している手法について簡単に説明する。
【００２２】
［モンゴメリのアルゴリズム］
剰余演算の高速化を実現する一手法であるモンゴメリのアルゴリズムについて説明する。
【００２３】
モンゴメリのアルゴリズムは、剰余の法Ｎ（Ｎ＞１）と、剰余の法Ｎと互いに素である定数Ｒ（Ｒ＞Ｎ）とを用いると、被剰余数をＴとした場合、ＴＲ−１ｍｏｄＮの計算が定数Ｒによる除算のみで行なえる性質を利用している。これにより、Ｎによる除算を用いることなく剰余計算を行なうことができる。
【００２４】
ここで、Ｎ，Ｒ，Ｒ−１およびＴは整数である。被剰余数Ｔは０≦Ｔ＜Ｒ・Ｎを満たす数である。Ｒ−１は剰余の法Ｎの上での定数Ｒの逆数である。またここでさらに、Ｒ・Ｒ−１−Ｎ・Ｎ′＝１（０≦Ｒ−１＜Ｎ、０≦Ｎ′＜Ｒ）の関係を満たす整数Ｎ′を考えることができる。さらに、この定数Ｒに２のべき乗数を使用した場合、定数Ｒによる除算をシフト操作に置き換えることができる。このため、Ｔ→ＴＲ−１ｍｏｄＮ（被剰余数をＴとした場合のＴＲ−１ｍｏｄＮ）の計算の高速処理が可能となる。
【００２５】
次にアルゴリズム１として、Ｔ→ＴＲ−１ｍｏｄＮのアルゴリズムＭＲ（Ｔ）を示す。ただし、アルゴリズム１において（Ｔ＋ｍ・Ｎ）／Ｒは必ず割り切れることが証明されている。
【００２６】
（アルゴリズム１）Ｔ→ＴＲ−１ｍｏｄＮのアルゴリズムＹ＝ＭＲ（Ｔ）は次のように表わされる。
【００２７】
2004125891.tif 000004
１回のＭＲでは、剰余ＴｍｏｄＮではなくＴＲ−１ｍｏｄＮが求められるだけである。よって、剰余ＴｍｏｄＮを求めるためには、次に示すようにＭＲ（Ｔ）と予め求めておいたＲ２ｍｏｄＮとの積で、再びＭＲ演算を行なえばよい。
【００２８】
ＭＲ（ＭＲ（Ｔ）・（Ｒ２ｍｏｄＮ））
＝（ＴＲ−１ｍｏｄＮ）・（Ｒ２ｍｏｄＮ）・Ｒ−１ｍｏｄＮ
＝ＴＲ−１・Ｒ２・Ｒ−１ｍｏｄＮ
＝ＴｍｏｄＮ
このようにして剰余ＴｍｏｄＮを求めることができる。
【００２９】
以上のことにより、モンゴメリ法による乗算剰余演算を使用して、これをべき乗剰余演算の反復平方積法（繰返し２乗法）で実現するアルゴリズムを下記に示す。鍵ｅの上位ビットから検索し、鍵のビットの値が１の場合には、ＭＲ（Ｘ・Ｙ）のモンゴメリ乗算剰余演算を行なう。
【００３０】
2004125891.tif 000005
ここで、ＭＲ（Ｘ・Ｙ）とＭＲ（Ｙ・Ｘ）とは等しく、ｅｊは鍵ｅのｊビット目を表わす。５１２ビット長の整数の場合ｋ＝５１２となり、５１２ビットのべき乗剰余演算は５１４ビットのモンゴメリ乗算剰余演算と５１２ビット剰余演算とにより実現できる。
【００３１】
また、ハードウェアとして実装するのに最適な基数Ｗの逐次計算でモンゴメリ乗算剰余演算結果Ｐ＝ＭＲ（Ｂ・Ａ）を求めると、以下のようになる。
【００３２】
2004125891.tif 000006
ｄは自然数であり、ハードウェアに依存する数である。このようにして、モンゴメリ乗算剰余演算結果Ｐを求めることができる。ｄ＝１の基数２の逐次計算で５１４ビットモンゴメリ乗算剰余演算結果Ｐ＝ＭＲ（Ｂ・Ａ）を求めると、以下のようになる。
【００３３】
2004125891.tif 000007
以上のように、べき乗剰余演算を実現するために、ハードウェアで５１２ビット長のべき乗剰余演算にモンゴメリ法を使用し、ソフトウェアで中国人の剰余定理を利用した処理を使用することが従来採用されている。ハードウェアへの実装方式は複数通りあり、実際に様々な方式が採用されていると思われる。
【００３４】
ＲＳＡ暗号についての従来技術としては、ＲＳＡ暗号の説明、およびモンゴメリ法の説明および補正装置の説明が、たとえば、特許文献１に開示されており、ＲＳＡ暗号の説明およびモンゴメリ法の説明が、たとえば、特許文献２に開示されている。
【００３５】
さらに、ＲＳＡ暗号の説明、楕円暗号の説明およびモンゴメリ法の説明が、たとえば、特許文献３に開示されている。
【００３６】
【特許文献１】
特開平７−２０７７８号公報明細書
【００３７】
【特許文献２】
特開平１１−２１２４５６号公報明細書
【００３８】
【特許文献３】
特許第２９３７９８２号公報明細書
【００３９】
【発明が解決しようとする課題】
ところで、以上のようなアルゴリズムを用いて暗号化を行うハードウェアに対しては、その暗号化の鍵を外部から探索するにあたり、いわゆる「電力解析」と呼ばれる手法が用いられる場合がある。
【００４０】
たとえば、パソコン、携帯電話、ＩＣカードなど暗号を搭載する機器において、暗号するための鍵を探索するために、ＬＳＩの消費電流を見る手法として、単純電力解析（Ｓｉｍｐｌｅ　Ｐｏｗｅｒ　Ａｎａｌｙｓｉｓ：　ＳＰＡ），　電力差分解析（Ｄｉｆｆｅｒｅｎｔｉａｌ　Ｐｏｗｅｒ　Ａｎａｌｙｓｉｓ：ＤＰＡ）等が知られている。
【００４１】
ここで、上述したようなＲＳＡ暗号の暗号化処理を行うためのハードウェアは、電力解析に対する耐性を可能な限り向上させることが望ましい。
【００４２】
このためには、ハードウェアの消費電流パターンに特徴が少なく、内部のアルゴリズムが推定できないことが望ましい。さらに、外部から制御できない秘密データに依存した電流パターンが存在しないことが望ましい。また、外部から制御可能な入力データと消費電流値の相関が少なく、かつ、外部から制御可能な入力データと消費電流値の相関の大小のパターンに特徴が少ないことが望ましい。
【００４３】
上述した、べき乗剰余演算においては、まず第一に、“ｅ”のビット値単位で処理が行われる構成であるため、そのビット値が“１”であるか“０”であるかによって消費電流が変わらないことが望ましい。
【００４４】
本発明は上述の課題を解決するためになされたもので、その目的は、回路規模が小さく、高速処理が可能であって、かつ、電力解析などに対する安全性を高めた暗号処理回路等に適用可能なべき乗剰余演算器を提供することである。
【００４５】
【課題を解決するための手段】
請求項１記載のべき乗剰余演算器は、第１の種類のデータを保持する第１のレジスタ群と、第１のレジスタ群に保持されたデータと並行して参照可能な種類のデータを保持する第２のレジスタ群と、第１のレジスタ群に接続された第１の内部バスと、第２のレジスタ群に接続された第２の内部バスと、第１および第２の内部バスに接続され、第１および第２のレジスタ群に保持された値を並行して参照し、モンゴメリ乗算剰余演算を実行するためのモンゴメリ乗算剰余演算実行手段と、第１および第２の内部バス、ならびにモンゴメリ乗算剰余演算実行手段に接続され、第１および第２のレジスタ群に保持された値を並行して参照し、モンゴメリ乗算剰余演算実行手段との間でデータのやり取りを行ない、べき乗剰余演算を実行するためのべき乗剰余演算実行手段と、モンゴメリ乗算剰余演算およびべき乗剰余演算の各計算結果を得るためには省略可能な中間演算処理を擬似的に実行するための擬似演算実行手段とを備える。
【００４６】
請求項２記載のべき乗剰余演算器は、請求項１記載のべき乗剰余演算器の構成に加えて、擬似演算実行手段は、第１の内部バスに接続され、バイナリ法に従うべき乗剰余演算を実行する際に、破棄されるべき中間演算結果を一旦格納するためのダミーレジスタを含む。
【００４７】
請求項３記載のべき乗剰余演算器は、請求項１記載のべき乗剰余演算器の構成に加えて、第１のレジスタ群は、バイナリ法に従うべき乗剰余演算を実行する際に、べき乗剰余演算の中間結果を格納するための中間結果格納レジスタを含み、擬似演算実行手段は、中間結果格納レジスタの初期値を単位元とする代わりに、べき乗を表す２進整数のビット値のうち、最上位ビットから最初に１になった時の中間結果を、べき乗のべき乗される数の値に置換える置換手段を含む。
【００４８】
請求項４記載のべき乗剰余演算器は、請求項３記載のべき乗剰余演算器の構成に加えて、置換手段は、モンゴメリ乗算剰余の補正演算において、中間結果格納レジスタに格納されるべき中間結果の演算において、オペランドを０とべき乗される数に変更して中間結果格納レジスタに格納することにより、中間結果をべき乗のべき乗される数の値に置換える。
【００４９】
請求項５記載のべき乗剰余演算器は、請求項１記載のべき乗剰余演算器の構成に加えて、第２のレジスタ群は、モンゴメリ乗算剰余演算において、繰り返し累積加算をしていく途中の値を格納する累積加算レジスタを含み、擬似演算実行手段は、累積加算レジスタの初期値を零元とする代わりに、乗数の各ビット値のうち最下位ビットから最初に１になった時点で、累積加算レジスタの値に代えて値０を累積加算レジスタの値として読み出す読出し手段を含む。
【００５０】
請求項６記載のべき乗剰余演算器は、請求項１記載のべき乗剰余演算器の構成に加えて、第２のレジスタ群は、モンゴメリ乗算剰余演算において、繰り返し累積加算をしていく途中の値を格納する累積加算レジスタを含み、モンゴメリ乗算剰余演算実行手段は、モンゴメリ乗算剰余演算とモンゴメリ乗算剰余演算における補正演算の双方に共用して使用される累積加算器を含み、擬似演算実行手段は、補正演算の要否とは独立して、累積加算レジスタへの書き込み動作を行うためのレジスタ入出力手段を含む。
【００５１】
請求項７記載のべき乗剰余演算器は、請求項６記載のべき乗剰余演算器の構成に加えて、レジスタ入出力手段は、補正演算の結果に対して右シフト処理を行って累積加算レジスタに書込むための右シフト手段と、右シフト処理において、補正演算の結果の最下位ビットを保持するための一時保持レジスタと、累積加算レジスタからの読出しにおいて、読み出された値を左シフトし、かつ、左シフト結果に一時保持レジスタに保持された値を最下位ビットとして付加するための左シフト手段とを含む。
【００５２】
請求項８記載のべき乗剰余演算器は、請求項１記載のべき乗剰余演算器の構成に加えて、第２のレジスタ群は、モンゴメリ乗算剰余演算において、繰り返し累積加算をしていく途中の値を格納する累積加算レジスタと、ダミーレジスタとを含み、モンゴメリ乗算剰余演算実行手段は、モンゴメリ乗算剰余演算とモンゴメリ乗算剰余演算における補正演算の双方に共用して使用される累積加算器を含み、擬似演算実行手段は、補正演算が必要な場合は、累積加算レジスタへの書き込み動作を行い、補正演算が不要な場合は、ダミーレジスタへの書込み動作を行うためのレジスタ入出力手段を含む。
【００５３】
請求項９記載のべき乗剰余演算器は、請求項１記載のべき乗剰余演算器の構成に加えて、破棄されるべき中間演算結果を計算する時の演算の入力を与え、前記破棄されるべき中間演算結果を一旦格納するためのダミーレジスタをさらに備える。
【００５４】
【発明の実施の形態】
［実施の形態１］
（演算の高速化を図るための構成）
まず、電力解析の困難な実施の形態１のべき乗剰余演算器の構成を説明する前提として、べき乗剰余演算器の演算を高速化するための第１および第２の構成を説明しておく。
【００５５】
［べき乗剰余演算器の第１のハードウェア構成］
図１を参照して、べき乗剰余演算器の演算を高速化するための第１の構成を有する乗剰余演算器１０００は、外部バスとのインタフェースであるＩ／Ｆ（インタフェース）回路１０１と、鍵ｅを保持するｅレジスタ１０２と、モンゴメリ変換をする乗数Ｙを保持するＹレジスタ１０３と、鍵Ｎを保持するＮレジスタ１０４と、モンゴメリ変換の演算時に行なう２Ｂ＋Ｎの値を保持するＢ２Ｎレジスタ１０５と、平文Ｘを保持するＸレジスタ１０６と、暗号化および復号化のための演算を行なう演算回路１０７と、演算結果Ｐを保持するＰレジスタ１０８と、べき乗剰余演算実行時のステートマシンとしての役割を果たすべき乗剰余制御回路１０９とを含む。
【００５６】
べき乗剰余演算回路１０００は、さらに、モンゴメリ乗算剰余演算と剰余演算との実行時のステートマシンとしての役割を果たすモンゴメリ乗算剰余・剰余制御回路１１０と、加算および減算の演算制御を行なう加算・減算制御回路１１１と、各種モードを保持するモードレジスタ１１２と、コマンドを保持するコマンドレジスタ１１３と、ステータスを保持するステータスレジスタ１１４と、インタフェース回路１０１、ｅレジスタ１０２およびＹレジスタ１０３に接続され、各種レジスタ間でデータのやり取りを行なう内部バス１１５と、Ｎレジスタ１０４、Ｂ２Ｎレジスタ１０５、Ｘレジスタ１０６、演算回路１０７およびＰレジスタ１０８に接続され、各種レジスタと演算回路１０７間でデータのやり取りを行なうための内部バス１１６と、内部バス１１５および１１６に接続され、内部バス１１５および１１６の間でデータの受け渡しの制御を行なうバス分割回路１１７とを含む。
【００５７】
べき乗剰余演算回路１０００は、さらに、内部バス１１５とべき乗剰余制御回路１０９およびモンゴメリ乗算剰余・剰余制御回路１１０との間にＥｊ／Ｙｊ検出部１１８を備える。
【００５８】
［モンゴメリ演算の演算方法］
べき乗剰余演算を行なうにあたり、高速化を実現するためにモンゴメリ法による乗算剰余演算と剰余演算とを使用しているが、そのうち、式（１２）の条件付モンゴメリ演算［ｉｆ　ｅｊ＝＝１　ｔｈｅｎ　Ｙ＝ＭＲ（Ｘ・Ｙ）］の演算方法について説明する。
【００５９】
式（１２）および（１３）のループを実行する際には、ｅレジスタ１０２に保持された鍵ｅが内部バス１１５上に読み出される。それとともに、べき乗剰余制御回路１０９は、自身の有するカウンタの状態に従い、鍵ｅの読み出すべきビットｊをＥｊ／Ｙｊ検出部１１８に指示する。Ｅｊ／Ｙｊ検出部１１８は、内部バス１１５上に読み出された鍵ｅのｊビット目の値ｅｊを読込み、べき乗剰余制御回路１０９に与える。
【００６０】
式（２０）におけるＡｍｏｄ２は、乗数Ａが式（２１）により１ビットずつ右シフトされるため、乗数Ａのｊビット目に値する。すなわち、Ｙレジスタ１０３に保持された乗数Ｙのｊビット目Ｙｊである。よって、式（１９）〜（２１）のループを実行する際には、Ｙレジスタ１０３に保持された乗数Ｙが内部バス１１５に読み出される。それとともに、モンゴメリ乗算剰余・剰余制御回路１１０は、自身の有するカウンタの状態に従い、乗数Ｙの読み出すべきビットｊをＥｊ／Ｙｊ検出部１１８に指示する。Ｅｊ／Ｙｊ検出部１１８は、内部バス１１５上に読み出された乗数Ｙのｊビット目の値Ｙｊを読込み、モンゴメリ乗算剰余・剰余制御回路１１０に与える。
【００６１】
剰余演算を行なう際にも同様の処理が行なわれる。
乗算では、バス分割回路１１７はオフ（ＯＦＦ）となり、乗数Ｙは、Ｅｊ／Ｙｊ検出部１１８に送られる。自乗算で、被乗数Ｙは、バス分割回路１１７をオン（ＯＮ）として演算器１０７に送られ、同時に、乗数としてＥｊ／Ｙｊ検出部１１８にも送られる。
【００６２】
［べき乗剰余演算器の第２のハードウェア構成］
次に、図１に示した乗剰余演算器１０００の構成を変形した乗剰余演算器１１００の構成を説明する。
【００６３】
図２は、べき乗剰余演算器の演算を高速化するための第２の構成である乗剰余演算器１１００の構成を説明する概略ブロック図である。
【００６４】
以下、図２の乗剰余演算器１１００の構成を図１の乗剰余演算器１０００の構成と対比して説明する。
【００６５】
図２の乗剰余演算器１１００において、ｅレジスタ１０２、Ｙレジスタ１０３、Ｘレジスタ１０６、Ｂ２Ｎレジスタ１０５、Ｎレジスタ１０４、Ｐレジスタ１０８およびＥｊ／Ｙｊ検出部１１８は、図１の乗剰余演算器１０００の構成要素と同様である。
【００６６】
また、乗剰余演算器１１００の制御回路１００は、図１の乗剰余演算器１０００の３つの回路、すなわち、べき乗剰余制御回路１０９とモンゴメリ乗算剰余・剰余制御回路１１０と加算・減算制御回路１１１とを含む。
【００６７】
乗剰余演算器１１００の０レジスタ１３０は、値０を保持するレジスタであって、制御回路１００からの信号０ｒｄにより制御されて、Ｘレジスタ１０６、Ｂ２Ｎレジスタ１０５、Ｎレジスタ１０４が選択されないときに、選択されて値が読み出される。なお、自乗算の時は、Ｘレジスタ１０６の代わりに、バス分割回路１１７を介してＹレジスタ１０３が選択される。すなわち、自乗算では、０レジスタ１３０、Ｙレジスタ１０３、Ｂ２Ｎレジスタ１０５、Ｎレジスタ１０４のうちから選択が行われる。以下の説明でも、自乗算の場合は、乗算の場合の処理において、Ｘレジスタ１０６とあるのを、Ｙレジスタ１０３と読みかえる。
【００６８】
乗剰余演算器１１００の３つの回路、すなわち、演算器１０７．１、キャリー処理部１０７．２、右シフト回路１０７．３が、図１の乗剰余演算器１０００の演算回路１０７に相当する。
【００６９】
レジスタ１４０は、値０を保持するレジスタであって、制御回路１００からの信号０ｒｄにより制御されて、Ｐレジスタ１０８が選択されない時、選択されてデータが読み出される。
【００７０】
Ｗｒ禁止処理部１２２は、後に説明するｉｆ文実行中において、条件式で（ｅｊ）が０のとき、Ｙレジスタ１０３へのライト信号Ｙｗｒをマスクすることにより、Ｙレジスタ１０３への書き込みを禁止する。
【００７１】
制御回路１００からＮレジスタ１０４への補正演算信号は、ＯＲゲート１２８を介してＮレジスタ１０４に与えられ、補正演算実行時にＮレジスタ１０４の値を読み出すことを指示する信号である。
【００７２】
Ｗｒ禁止処理部１３４は、後に説明する補正演算時において、補正が必要でない時にはＰレジスタ１０８へのライト信号Ｐｗｒをマスクすることにより、Ｐレジスタ１０８への書き込みを禁止する。
【００７３】
なお、制御回路１００からの信号Ｘｘｗｒは、Ｘｘレジスタ（Ｅレジスタ、Ｙレジスタ、Ｘレジスタ等）に対する書き込み信号（ライト信号）であり、信号Ｘｘｒｄは、Ｘｘレジスタに対する読み出し信号（リード信号）である。
【００７４】
また、図２においては、外部バス、インタフェース１０１、モードレジスタ１１２、コマンドレジスタ１１３、ステータスレジスタ１１４等は図示省略されている。
【００７５】
乗剰余演算器１１００の基本的な動作は、乗剰余演算器１０００の動作と同様である。以下、その動作について説明する。
【００７６】
図２に示した乗剰余演算器１１００の動作は、べき計算は左バイナリ（ｂｉｎａｒｙ）法で処理を行い、乗算剰余計算にはモンゴメリ法を用いている。
【００７７】
まず、Ｙレジスタ１０３に乗法の単位元１をモンゴメリ変換したものを外部、たとえば、ＣＰＵ（Ｃｅｎｔｒａｌ　Ｐｒｏｃｅｓｓｉｎｇ　Ｕｎｉｔ）から設定する（ステップＳ１００）。次に、レジスタＸ１０６に入力文をモンゴメリ変換したものを外部（たとえば、ＣＰＵ）から設定する（ステップＳ１０２）。
【００７８】
さらに、Ｎレジスタ１０４に法を外部（たとえば、ＣＰＵ）から設定する（ステップＳ１０４）。
【００７９】
Ｒをモンゴメリ変換のための定数２１０２４とするとき、次の２行を１０２４回繰り返す（ｊ＝１０２３　ｔｏ　Ｏ）（ステップＳ１０６）。
【００８０】
Ｙ＝Ｙ×Ｙ／Ｒ　ｍｏｄ　Ｎ　　　…自乗算
Ｉｆ　ｅｊ＝１　　ｔｈｅｎ　Ｙ＝Ｘ×Ｙ／Ｒ　ｍｏｄ　Ｎ　ｅｌｓｅ　ｖｏｉｄ　Ｘ×Ｙ／Ｒ　ｍｏｄ　Ｎ…　乗算
続いて、Ｙの値をモンゴメリ逆変換する（Ｙ＝１×Ｙ／Ｒ　ｍｏｄ　Ｎ）（ステップＳ１０８）。
【００８１】
このＹレジスタ１０３に入ったモンゴメリ逆変換の結果が、べき乗剰余の結果の値となる（ステップＳ１１０）。
【００８２】
このとき、上述したｉｆ文が真か偽かによって、上記乗算結果をＹレジスタ１０３に書くためのライト信号Ｙｗｒがマスクされる。
【００８３】
また、乗剰余演算器１１００の動作では、モンゴメリ乗算剰余の結果Ｙが、Ｎ＞Ｙ≧０の範囲に入るように各モンゴメリ乗算剰余の最後で以下の補正演算
ｉｆ　Ｐ＜０　ｔｈｅｎ　Ｐ＝Ｐ＋Ｎ
を実行する。このため、乗剰余演算器１０００の動作の場合と異なり、結果をこの範囲にいれるための剰余演算（式（１５））は行なわない。
【００８４】
（乗剰余演算器１１００のモンゴメリ乗算剰余計算処理）
次に、乗剰余演算器１１００のモンゴメリ乗算剰余計算処理を説明する。ここで、Ｙ＝Ｘ×Ｙ／Ｒ　ｍｏｄ　Ｎの場合であって、モンゴメリ乗算剰余処理の最初でＢ＝Ｎ−Ｘを実行するの場合について概略説明を行う。
【００８５】
まず、Ｎレジスタ１０４から法を信号Ｎｒｄで読み出し、Ｐレジスタ１０８に信号Ｐｗｒで書き込む（ステップＳ２００）。
【００８６】
次に、Ｘレジスタ１０６を信号Ｘｒｄで、Ｐレジスタ１０８を信号Ｐｒｄで読み出し、演算器１０７．１で減算（Ｐ−Ｎ）を実行し、右シフトはせずに、信号ＰｗｒでＰレジスタ１０８に減算結果を書き込む（ステップＳ２０２）。
【００８７】
さらに、Ｐレジスタ１０８を信号Ｐｒｄで読み出し、制御回路１００からの信号Ｂｗｒ（図示せず）でＢ２Ｎレジスタ１０５に減算結果を書き込む（ステップＳ２０４）。Ｐレジスタ１０８の初期値を０とする（ステップＳ２０６）。
【００８８】
続いて、以下の演算を１０２４回繰り返す（ｊ＝Ｏ　ｔｏｌ０２３）（ステップＳ２０８）。
【００８９】
ｉ）ＹｊとＰ０、Ｘ０で選択したＸレジスタ１０６内の値、Ｎレジスタ１０４内の値、Ｂ２Ｎレジスタ１０５内の値、０レジスタ１３０内の値を信号Ｘｒｄ、信号Ｎｒｄ、信号Ｂｒｄまたは信号０ｒｄで読み出す（ステップＳ２１０）。
【００９０】
ｉｉ）演算器１０７．１で加減算を実行し、右シフト回路１０７．３で１ビット右へシフトした結果を信号ＰｗｒでＰレジスタ１０８に書きこむ（ステップＳ２１２）。
【００９１】
続いて、以下の補正演算を実行する（ステップＳ２１４）。
Ｎレジスタ１０４内の値を読み出す。演算器１０７．１で演算（Ｐ＋Ｎ）を実行する。このとき、右シフトは行わない。一つ前のＰレジスタ１０８の値が負であったときは、信号ＰｗｒでＰレジスタ１０８に演算（Ｐ＋Ｎ）の結果を書きこみ、一方、一つ前のＰレジスタ１０８の値が０または正であった時は、信号Ｐｗｒをマスクして、Ｐレジスタ１０８に演算（Ｐ＋Ｎ）の結果が書きこまれないようにする。
【００９２】
以上で、概略説明を終了する。さらに、より具体的に、乗剰余演算器１１００の動作を説明すると以下のとおりである。
【００９３】
べき乗剰余演算（Ｙ＝Ｘ＾ｅ　ｍｏｄ　　Ｎ）は、例えば、鍵が１０２４ビットの場合、左バイナリ（ｂｉｎａｒｙ）法では、以下の処理となる。
【００９４】
2004125891.tif 000008
ここで、ｅ［ｊ］はｅのｊビット目の値である。この演算結果はＹレジスタ１０３の値とされる。
【００９５】
左バイナリ（ｂｉｎａｒｙ）法で用いる乗算剰余においては被乗数としてＸ、またはＹを選択するのみで、大部分のハードウェアを変更することなく、以下の２つの演算を選択的に行うことができる。
【００９６】
Ｙ＝Ｙ×Ｙ　ｍｏｄ　Ｎ
Ｙ＝Ｘ×Ｙ　ｍｏｄ　Ｎ
また、右バイナリ（ｂｉｎａｒｙ）法では、Ｘ＝Ｙ＾ｅ　ｍｏｄ　　Ｎは、以下の処理により求めることができる。
【００９７】
Ｘ＝１　　　　　　　　　　　　　　　　　　／／初期値設定
ｆｏｒ　　ｊ＝Ｏ，１０２３
ｉｆ　ｅ［ｊ］　ｔｈｅｎ　Ｘ＝Ｘ×Ｙ　ｍｏｄ　Ｎ　　　／／乗算剰余
Ｙ＝Ｙ×Ｙ　ｍｏｄ　Ｎ　　　　　　　　　　／／自乗剰余
Ｅｎｄ　　ｆｏｒ
ここで、演算結果はＸレジスタ１０６の値とされる。
【００９８】
右バイナリ（ｂｉｎａｒｙ）法で用いる乗算剰余においては被乗数の選択に、結果を格納するレジスタの選択する機能を追加するだけで、大部分のハードウェアを変更することなく、以下の２つの演算を選択的に行うことができる。
【００９９】
Ｙ＝Ｙ×Ｙ　ｍｏｄ　　Ｎ
Ｘ＝Ｘ×Ｙ　ｍｏｄ　　Ｎ
一方、上述したモンゴメリ法（Ｙ＝Ｙ・Ｘ／Ｒ　ｍｏｄ　　Ｎ）は、同じくＹが１０２４ビット長の場合、以下のような処理になる。
【０１００】
2004125891.tif 000009
図１に示した乗剰余演算器１０００では、モンゴメリ法を行うハードウェアの実装方法として、累積加算の２項目と３項目をあらかじめ算出しておき、３項の加算を２項の加算に変えることで、加算器のハードウェアを減らす構成であった。すなわち、Ｂ＝２Ｘ＋Ｎを計算している。
【０１０１】
これに対して、上述した式（２２）を含む処理を実装する構成では、
Ｂ＝Ｘ＋Ｎ
をあらかじめ計算して、レジスタに記憶しておき、加算器のハードウェアを減らすことができる。
【０１０２】
すなわち、Ｍ＝Ｐ［０］＾Ｙ［ｊ］・Ｘ［０］であるから、ＭとＹ［ｊ］（Ｙのｊビット目の値）により以下のようにレジスタを選択して累積加算を実行すればよい。
【０１０３】
なお、以下では、Ｐレジスタ１０８に格納される値を「Ｐ」で表し、Ｘレジスタ１０６に格納される値を「Ｘ」で表し、Ｎレジスタ１０４に格納される値を「Ｎ」で表し、Ｂ２Ｎレジスタ１０５に格納される値を「Ｂ」で表す。
【０１０４】
Ｙ［ｊ］　　Ｐ［０］＾Ｙ［ｊ］・Ｘ［０］　　ｒｄ信号　　　　累積加算
０　　　　　　　　　０　　　　　　　　　　０ｒｄ　　（Ｐ＋０）／２
１　　　　　　　　　０　　　　　　　　　　Ｘｒｄ　　（Ｐ＋Ｘ）／２
０　　　　　　　　　１　　　　　　　　　　Ｎｒｄ　　（Ｐ＋Ｎ）／２
１　　　　　　　　　１　　　　　　　　　　Ｂｒｄ　　（Ｐ＋Ｂ）／２
上記モンゴメリ法（Ｙ＝Ｙ・Ｘ／Ｒ　ｍｏｄ　　Ｎ）は、次のように構成して、式（２２）のＰ＝Ｐ−Ｎを省くこともできる。（乗剰余演算器１１００のモンゴメリ乗算剰余計算処理）以後の概略説明の内容は、このような処理の例である。
【０１０５】
2004125891.tif 000010
この場合、加減算の２項目と３項目について、Ｂ＝Ｎ−Ｘをあらかじめ計算しレジスタに記憶しておき、加減算において、以下の計算を行うこととしてもよい。
【０１０６】
Ｐ＝（Ｐ−（Ｎ−Ｘ））／２
あるいは、Ｂ＝Ｘ−Ｎを予めレジスタに記憶しておき、加減算において、以下の計算を行うこととしてもよい。
【０１０７】
Ｐ＝（Ｐ＋（Ｘ−Ｎ））／２
上記いずれの方法によっても、加算器のハードウェア量を減らすことができる。すなわち、Ｍ＝Ｐ［０］＾Ｙ［ｊ］・Ｘ［０］であるから、ＭとＹ［ｊ］により以下のようにレジスタの選択と加算または減算して累積加減算を実行すればよい。
【０１０８】
Ｙ［ｊ］　　　Ｍ　　　　＋／−　　　　　ｒｄ信号　　　　累積加算
０　　　　　０　　　　　＋　　　　　　０ｒｄ　　（Ｐ＋０）／２
１　　　　　０　　　　　＋　　　　　　Ｘｒｄ　　（Ｐ＋Ｘ）／２
０　　　　　１　　　　　−　　　　　　Ｎｒｄ　　（Ｐ−Ｎ）／２
１　　　　　１　　　　　−　　　　　　Ｂｒｄ　　（Ｐ−Ｂ）／２
ここで、Ｂ＝Ｎ−Ｘである。
【０１０９】
モンゴメリ法（Ｙ＝Ｙ・Ｘ／Ｒ　ｍｏｄ　　Ｎ）の実行はＸをＹにおきかえればよい。すなわちＸレジスタ１０６に対するＸｒｄ信号の行き先をＹレジスタ１０３に切り替え、バス分割回路１１７を介して読み出すだけで処理を実行できる。
【０１１０】
また累積加減算中の“／２”は右シフト処理で行う。補正演算についても、バイナリ（ｂｉｎａｒｙ）法と同様に、書き込み信号（ライト信号）をマスクすることで実行時闇を入力データによらず一定にすることが、次のようにすれば可能である。
【０１１１】
ｉｆ　Ｐ＜Ｏ　ｔｈｅｎ　Ｐ＝Ｐ＋Ｎ　ｅｌｓｅ　ｖｏｉｄ　Ｐ＋Ｎ
すなわち、補正演算時はＮレジスタ１０４にＮｒｄ信号を与え、補正要否の信号によりＰレジスタ１０８へのライト信号Ｐｗｒをマスクすればよい。
【０１１２】
なお、図２において、Ｍ、ＹｊによるＸｘｒｄ信号の選択や、初期値Ｐ＝０の設定、Ｂの値を記憶するレジスタへの値の算出と設定等は制御回路１００内で適切な制御信号を発生し、演算器に与えることで処理している。図２において、べき乗剰余の初期値は、たとえば、ＣＰＵから与えられる。
【０１１３】
［実施の形態１の乗剰余演算器１２００の構成］
以上の準備の下に、図２に示した乗剰余演算器１１００の構成を基礎として、さらに電力解析が困難なように構成された乗剰余演算器１２００について、以下に説明する。
【０１１４】
図３は、実施の形態１の乗剰余演算器１２００の構成を説明するための概略ブロックである。
【０１１５】
乗剰余演算器１２００では、以下に説明するように、図２の乗剰余演算器１１００にＫレジスタ１３２を追加して、べき乗剰余演算中の
ｉｆ　ｅｊ＝１　Ｙ＝Ｘ×Ｙ／Ｒ　ｍｏｄ　Ｎ　ｅｌｓｅ　ｖｏｉｄ　Ｘ×Ｙ／Ｒ　ｍｏｄ　Ｎ
との処理の代わりに、
ｉｆ　ｅｊ＝１　Ｙ＝Ｘ×Ｙ／Ｒ　ｍｏｄ　Ｎ　ｅｌｓｅ　Ｋ＝Ｘ×Ｙ／Ｒ　ｍｏｄ　Ｎ
との処理を行う。
【０１１６】
図３では、左バイナリ（ｂｉｎａｒｙ）法の場合の構成を例として示している。
図３を参照して、追加したＫレジスタ１３２の動作についてさらに詳しく説明する。
【０１１７】
べき乗剰余演算のバイナリ法で、上述したｉｆ文の実行において、ｉｆ文内の判断が“偽”の場合に、結果を書き込むレジスタとしてＫレジスタ１３２を用いる。
【０１１８】
なお、ｅ［ｊ］の値は、Ｙの自乗演算中に確認し、ｉｆ文の処理の前にその値を確定しておく。
【０１１９】
ここで、Ｙ＝Ｘ＾ｅ　ｍｏｄ　Ｎの処理を、１０２４ビットのデータに対して行う場合は、以下のとおりとなる。
【０１２０】
2004125891.tif 000011
上述の処理でモンゴメリ法を用いた場合は、以下のようになる。
【０１２１】
2004125891.tif 000012
ここで、Ｙレジスタ１０３への書き込み信号Ｙｗｒをマスクするために、Ｅｊ／Ｙｊ検出部１１８からの信号ｅ［ｊ］を用いる。
【０１２２】
ｉｆ文が実行される際に、信号ｅ［ｊ］に応じてＷｒ禁止処理部１２２から出力される信号（信号ｅ［ｊ］の反転信号）を反転した信号と制御回路１００からのＹレジスタ１０３への書き込み信号Ｙｗｒとの論理積をゲート回路１２４で演算した結果が、Ｙレジスタ１０３に書き込み信号Ｙｗｒ’として与えられる。
【０１２３】
一方、信号ｅ［ｊ］に応じてＷｒ禁止処理部１２２から出力される信号（信号ｅ［ｊ］の反転信号）とＹレジスタ１０３への書き込み信号Ｙｗｒとの論理積をゲート回路１２６で演算した結果が、Ｋレジスタ１３２に書き込み信号Ｋｗｒとして与えられる。
【０１２４】
なお、右バイナリ（ｂｉｎａｒｙ）法でも同様な処理を行うことが可能である。
以上のように乗剰余演算器１２００を構成することによりｉｆ文の条件が“真”であっても、また“偽”であっても同様にレジスタへの書き込み処理が行われることになる。このため、いずれの場合にも、書き込み時の電流が流れることとなり、電力解析に対する耐性が向上する。
【０１２５】
［実施の形態２］
図４は、本発明の実施の形態２の乗剰余演算器１３００の構成を説明するための概略ブロック図である。
【０１２６】
以下に説明するとおり、Ｂ２Ｎレジスタ１０５を、中間データＢを書き込むためのレジスタとして用いて、べき乗剰余演算中の
ｉｆ　ｅｊ＝１　Ｙ＝Ｘ×Ｙ／Ｒ　ｍｏｄ　Ｎ　ｅｌｓｅ　ｖｏｉｄ　Ｘ×Ｙ／Ｒ　ｍｏｄ　Ｎ
との処理の代わりに、
ｉｆ　ｅｊ＝１　Ｙ＝Ｘ×Ｙ／Ｒ　ｍｏｄ　Ｎ　ｅｌｓｅ　Ｂ＝Ｘ×Ｙ／Ｒ　ｍｏｄ　Ｎ
との処理を行う。
【０１２７】
すなわち、ｉｆ文において、その論理が“偽”の場合に、ダミー処理としてデータの書き込みを行うレジスタを別途設けるのではなく、Ｂ２Ｎレジスタ１０５をこのようなダミー処理（中間データＢの書き込み）を行うレジスタとしても共用する。
【０１２８】
なお、図４においては、図３のＷｒ禁止処理部１３４とゲート回路１３８の代わりに、補正演算の要否に基づく信号を出力する補正要否判定部１５０とゲート回路１３８´とを用いている。
【０１２９】
Ｂ２Ｎレジスタ１０５はモンゴメリ乗算剰余を演算する時のテンポラリレジスタであり、ｉｆ文の論理が“偽”の場合に、データを書き込んでも問題はない。
【０１３０】
つまり、Ｙ＝Ｘ＾ｅ　ｍｏｄ　Ｎの処理を、１０２４ビットのデータに対して行う場合は、以下のとおりとなる。なお、Ｂ２Ｎレジスタ１０５のデータの値をＢ２Ｎとする。
【０１３１】
2004125891.tif 000013
上述の処理でモンゴメリ法を用いた場合は、以下のようになる。
【０１３２】
2004125891.tif 000014
ここで、Ｙレジスタ１０３への書き込み信号Ｙｗｒをマスクするために、Ｅｊ／Ｙｊ検出部１１８からの信号ｅ［ｊ］を用いる。
【０１３３】
ｉｆ文が実行される際に、信号ｅ［ｊ］に応じてＷｒ禁止処理部１２２から出力される信号（信号ｅ［ｊ］の反転信号）を反転した信号と制御回路１００からのＹレジスタ１０３への書き込み信号Ｙｗｒとの論理積をゲート回路１２４で演算した結果が、Ｙレジスタ１０３に書き込み信号Ｙｗｒ’として与えられる。
【０１３４】
一方、信号ｅ［ｊ］に応じてＷｒ禁止処理部１２２から出力される信号（信号ｅ［ｊ］の反転信号）とＹレジスタ１０３への書き込み信号Ｙｗｒとの論理積をゲート回路１２６で演算した結果が、Ｂ２Ｎレジスタ１０５に書き込み信号Ｂ２Ｎｗｒとして与えられる。
【０１３５】
なお、右バイナリ（ｂｉｎａｒｙ）法でも同様な処理を行うことが可能である。
以上のように乗剰余演算器１２００を構成することによりｉｆ文の条件が“真”であっても、また“偽”であっても同様にレジスタへの書き込み処理が行われることになる。このため、いずれの場合にも、書き込み時の電流が流れることとなり、電力解析に対する耐性が向上する。
【０１３６】
［実施の形態３］
図５は、本発明の実施の形態３の乗剰余演算器１４００の構成を説明するための概略ブロック図である。
【０１３７】
以下、図５に示した乗剰余演算器１４００の動作を図２に示した乗剰余演算器１１００の動作と対比させて説明する。
【０１３８】
まず、図５に示した乗剰余演算器１４００の動作では、図２に示した乗剰余演算器１１００の動作における、べき乗剰余中の処理のうち、
「Ｙレジスタ１０３に乗法の単位元１をモンゴメリ変換したものを外部、たとえば、ＣＰＵから設定する（ステップＳ１００）。」
との処理を省略する。
【０１３９】
さらに、図２に示した乗剰余演算器１１００の動作における補正演算の動作のうち、ステップＳ２１４の
「Ｎレジスタ１０４内の値を読み出す。演算器１０７．１で演算（Ｐ＋Ｎ）を実行する。このとき、右シフトは行わない。一つ前のＰレジスタ１０８の値が負であったときは、信号ＰｗｒでＰレジスタ１０８に演算（Ｐ＋Ｎ）の結果を書きこみ、一方、一つ前のＰレジスタ１０８の値が０または正であった時は、信号Ｐｗｒをマスクして、Ｐレジスタ１０８に演算（Ｐ＋Ｎ）の結果が書きこまれないようにする。」
との処理に以下の内容を追加する。
【０１４０】
「ただし、初めてｅ［ｊ］＝１となったときは、Ｎレジスタ１０４とＰレジスタ１０８の代わりに、Ｘレジスタ１０６と０レジスタ１４０からデータ読み出す。演算器１０７で演算（０＋Ｘ）を実行する。一つ前のＰレジスタ１０８の値の正負に係らず、書き込み信号ＰｗｒでＰレジスタに演算結果（０＋Ｘ）を書き込む。」すなわち、実施の形態３の乗剰余演算器１４００では、以下の問題を回避することを目的としている。
【０１４１】
つまり、べき乗剰余演算で右バイナリ法を用いた場合、Ｙの初期値は１でありｅ［ｊ］が１になるまで、Ｙレジスタ１０３中の値は変化しない。そして、一旦、ｅ［ｊ］＝１となりＹ＝ＸＹとなった後は、Ｙレジスタ１０３中の値は、入力文Ｘに依存した値となる。したがって、入力文を換えて、どのタイミングで入力文に依存した電流になるかをみれば、ｅ［ｊ］の上位ビットから何ビットまで０が続いているかが外部から判断できてしまうことになる。
【０１４２】
そこで、実施の形態３の乗剰余演算器１４００では、大略、以下のような処理を行う。
【０１４３】
すなわち、初回のｅ［ｊ］＝１との条件が満たされたときは、ＹＸの結果はＸとなる。つまり、それ以前のＹの値にかかわらず、初回にｅ［ｊ］＝１となった時点でＹ＝Ｘとする処理を行いさえすれば、最終的には同じ結果が得られる。このような手法を用いた場合、初回にｅ［ｊ］＝１となる以前のＹの値が無関係となるため、Ｙの初期値を入力文に依存した値に設定できる。このため、Ｙのビットの全期間にわたって、電流を入力文に依存するようにし、０の個数を分からなくすることができる。
【０１４４】
図５に示すとおり、実施の形態３の乗剰余演算器１４００では、初回のｅ［ｊ］＝１を検出するための初回Ｅｊ値検出部１６１が設けられ、検出結果により乗算結果をＸそのものに変更できる乗算回路が用いられている。
【０１４５】
図５では、乗算回路としてモンゴメリ乗算剰余回路を用いた例が示されている。
【０１４６】
ここで、図１に示した乗剰余演算器１０００と乗剰余演算器１４００との相違をまとめると以下のとおりである。
乗剰余演算器１０００では、補正演算を最後にまとめて剰余をとることで行っているのに対し、乗剰余演算器１４００では各モンゴメリ乗算剰余内の最後に行うようにしている。また、Ｂ＝Ｎ−Ｘを各モンゴメリ乗算剰余の最初に計算し、Ｂレジスタ１０５を演算器１０７の入力として選択した時、またはＮレジスタ１０４を選択した時には、演算器１０７で減算を実行する。このことにより補正対象となる結果が、（−Ｎ）から（Ｎ−１）の範囲となるため、補正演算の実行の要否を演算器１０７中のキャリー判定部１０７．２で判定できる。
【０１４７】
実施の形態３の乗剰余演算器１４００の処理をさらに詳しく説明する。
まず、初回Ｅｊ値検出部１６１の動作を中心に説明する。
【０１４８】
乗剰余演算器１４００でのべき乗剰余では、次のようにＳレジスタ１６０を用いる。Ｓレジスタ１６０は初期値を０とし、ループが１回終わる毎に、ＥＪ（＝ｅ［ｊ］）が１であった時、１を記憶する。
【０１４９】
2004125891.tif 000015
上記処理において、モンゴメリ法を用いた場合は、以下のとおりとなる。
【０１５０】
2004125891.tif 000016
上述の処理のとおり、実施の形態３の乗剰余演算器１４００においては、初回のｅ［ｊ］＝１についての検出信号（Ｌ：ＥＪに相当）により乗算結果がＸに設定される。
【０１５１】
モンゴメリ演算の最後の補正演算において、初回のｅ［ｊ］＝１の検出信号Ｌにより、次のように、演算器１０７の入力として、Ｐレジスタ１０８の値の代わりに０レジスタ１３０からの値０を選択し、また、Ｎレジスタ１０４や０レジスタ１３０の値の代わりにＸレジスタ１０６中の値を選択することで、Ｐ＝Ｘとすることが出来る。その後、Ｐレジスタ１０８中の値をＹレジスタ１０３に格納するためのデータの転送を行う。
【０１５２】
2004125891.tif 000017
その後に、Ｙ＝Ｐとする処理を行うことで、正に補正された乗算剰余結果またはＸの値がＹレジスタ１０３に記憶される。
【０１５３】
ここで、Ｙレジスタ１０３に格納される値Ｙの初期値は、最終結果に影響しないためＤＰＡを考慮し、種々の設定方法を取ることができる。たとえば、それ以前の処理で、Ｙレジスタ１０３に残っている値をそのまま使用することも可能である。
【０１５４】
また、例えば、リダクション（ｒｅｄｕｃｔｉｏｎ）後の結果をＹレジスタ１０３に書きこみ、モンゴメリ変換後の結果をＸレジスタ１０６に書きこみ、そのままバイナリ法を実行する。すると、Ｙ＝Ｙ×Ｙは、（Ｍ　ｍｏｄ　Ｎ）×（ＭＲ　ｍｏｄ　Ｎ）／Ｒ　ｍｏｄ　Ｎとなるので、Ｍ×Ｍ　ｍｏｄ　Ｎとなるため、Ｒが抜け落ちており異なる入力となる。このため、バイナリ法で一致するパターンはまれにしか現れない。
【０１５５】
以上のような構成では、最初の１が現れたか否かを示すデータを保持するＳレジスタ１６０を設けられる。それにより、最初の１が現れた際に、モンゴメリ演算の補正演算中に初期値を設定することにより単位元を最初に設定する必要がなくなる。このため、入力データの依存の有無が現れる電流消費のパターンとなって最初に０が連続する個数が見破られることを困難にできる。このような処理は、モンゴメリの補正演算のオペランドを切り替えるだけで実現できるため、電流への影響がほとんどなく、実行サイクルも変わらない。
［実施の形態４］
図６は、本発明の実施の形態４の乗剰余演算器１５００の構成を説明するための概略ブロック図である。
【０１５６】
以下、図６に示した乗剰余演算器１５００の動作を、図２に示した乗剰余演算器１１００の動作と対比させて説明する。
【０１５７】
まず、図６に示した乗剰余演算器１５００の動作では、図２に示した乗剰余演算器１１００の動作における、モンゴメリ乗算剰余中の
「Ｐレジスタ１０８の初期値を０とする（ステップＳ２０６）。」
との処理を省略する。
【０１５８】
また、図２に示した乗剰余演算器１１００のモンゴメリ乗算剰余中の
「続いて、以下の演算を１０２４回繰り返す（ｊ＝Ｏ　ｔｏ　ｌ０２３）（ステップＳ２０８）。
【０１５９】
ｉ）ＹｊとＰ０、Ｘ０で選択したＸレジスタ１０６内の値、Ｎレジスタ１０４内の値、Ｂ２Ｎレジスタ１０５内の値、０レジスタ１３０内の値を信号Ｘｒｄ、信号Ｎｒｄ、信号Ｂｒｄまたは信号０ｒｄで読み出す（ステップＳ２１０）。
【０１６０】
ｉｉ）演算器１０７．１で加減算を実行し、右シフト回路１０７．３で１ビット右へシフトした結果を信号ＰｗｒでＰレジスタ１０８に書きこむ（ステップＳ２１２）。」
との処理では、Ｐレジスタ１０８を読み出し、その値に加減算を行うのに対し、図６に示した乗剰余演算器１５００では、
「１０２４回の中で初めてＹｊ＝１である時に、Ｐレジスタ１０８の代わりに、０レジスタ１４０の値を読み出す。」
ように処理を変更する。
【０１６１】
すなわち、実施の形態４の乗剰余演算器１５００では、以下の問題を回避することを目的としている。
【０１６２】
つまり、モンゴメリ乗算剰余、または乗算の場合、Ｐレジスタ１０８内のデータを右シフトしながら、Ｙ［ｊ］＝１の時Ｘを加算していく。その際、Ｐの初期値は０としている。そのため、Ｙ［ｊ］が１になるまでＰレジスタ１０８内の値は変化しない。一旦、Ｙ［ｊ］＝１となった後は、繰り返しの中に右シフトを含むため、Ｐレジスタ１０８に書きこむ値は繰り返し毎に異なった値となる。したがって、入力文を換えて、どのタイミングで入力文に依存した電流になるかをみれば、それぞれの入力文毎に、Ｙ［ｊ］の下位ビットから何ビット分０が続いているか判断できることになってしまう。
【０１６３】
そこで、実施の形態４の乗剰余演算器１５００では、大略、以下のような処理を行う。
【０１６４】
初回のＹ［ｊ］＝１でＰレジスタに入っている値は０である。すなわち、それ以前のＰの値にかかわらず、その時点で０をＰレジスタ１０８から読み出すようにすれば、最終的には同じ結果が得られる。このような手法を用いた場合、Ｙ［ｊ］＝１となる以前のＰレジスタ１０８内の値が最終的な結果とは無関係となる。このため、Ｐレジスタ１０８の初期値を入力文に依存した値に設定でき、Ｙ［ｊ］のビットの全期間、電流を入力文に依存するようにし、０の個数を外部から電力解析によって分からなくすることができる。
【０１６５】
図６に示すとおり、実施の形態４の乗剰余演算器１５００では、初回のＹ［ｊ］＝１を検出するための初回Ｙ［ｊ］検出部１８０と、検出結果によりＰレジスタ１０８からデータを読み出す代わりに、０レジスタ１４０から０を読み出すよう変更する構成が設けられている。
【０１６６】
図６の実施の形態４の乗剰余演算器１５００は、モンゴメリ乗算剰余回路である。
【０１６７】
図６に示すとおり、乗剰余演算器１５００において、初回Ｙ［ｊ］検出部１８０の出力をＨとする。
【０１６８】
べき乗剰余の処理では、次のようにＴレジスタ１８２を用いる。Ｔレジスタ１８２は初期値を０とし、処理ループが１回終わる毎に、Ｙ［ｊ］が１であった時、１を記憶する。出力Ｈは、（Ｔ＝０）かつ（Ｙ［ｊ］＝１）であるときに“１”となる。
【０１６９】
2004125891.tif 000018
図６に示すように、モンゴメリ演算中において、初回のＹ［ｊ］＝１を検出したことを示す検出信号Ｈをゲート回路１７２およびゲート回路１７４の一方入力に与える。これにより、次のように、演算器１０７の入力として、Ｐレジスタ１０８の値の代わりに０レジスタ１４０の値をを選択し、Ｐ＝Ｘとすることができる。
【０１７０】
／／モンゴメリ演算中
Ｈ　　　　　　　　　　　計算内容
０　　　　　　　　　Ｍ＝（Ｐ＋Ｙ［ｊ］・Ｘ）　ｍｏｄ　２
０　　　　　　　　　Ｐ＝（Ｐ＋Ｙ［ｊ］・Ｘ＋Ｍ・Ｎ）／２
１　　　　　　　　　Ｍ＝（０＋Ｙ［ｊ］・Ｘ）　ｍｏｄ　２
１　　　　　　　　　Ｐ＝（０＋Ｙ［ｊ］・Ｘ＋Ｍ・Ｎ）／２
また、Ｐレジスタ１０８に対する初期値の例としては、例えば、モンゴメリ乗算剰余において、Ｐレジスタ１０８を初期化せず、ひとつ前の演算結果をそのまま用いることが可能である。
【０１７１】
以上のような構成とすれば、乗算、モンゴメリ乗算剰余において、Ｙ［ｊ］をＬＳＢ（Ｌｅａｓｔ　Ｓｉｇｎｉｆｉｃａｎｔ　Ｂｉｔ）から演算する場合、最初の１が現れるまで消費電流の入力文からの依存性が少なくなることを防ぐことができる。これにより、電流変動パターンからＰレジスタ１０８に格納されるべき値Ｐには、ＬＳＢから連続する０が何個あるかが見破られることを困難にすることが可能である。
【０１７２】
［実施の形態５］
図７は、本発明の実施の形態５の乗剰余演算器１６００の構成を説明するための概略ブロック図である。
【０１７３】
以下、図７に示した乗剰余演算器１６００の動作を、図２に示した乗剰余演算器１１００の動作と対比させて説明する。
【０１７４】
まず、図７に示した乗剰余演算器１６００の動作では、図２に示した乗剰余演算器１１００の動作における、補正演算中のステップＳ２１４の
「続いて、以下の補正演算を実行する（ステップＳ２１４）。
【０１７５】
Ｎレジスタ１０４内の値を読み出す。演算器１０７．１で演算（Ｐ＋Ｎ）を実行する。このとき、右シフトは行わない。一つ前のＰレジスタ１０８の値が負であったときは、信号ＰｗｒでＰレジスタ１０８に演算（Ｐ＋Ｎ）の結果を書きこみ、一方、一つ前のＰレジスタ１０８の値が０または正であった時は、信号Ｐｗｒをマスクして、Ｐレジスタ１０８に演算（Ｐ＋Ｎ）の結果が書きこまれないようにする。」
との処理を以下のように変更する。
【０１７６】
「続いて、以下の補正演算を実行する（ステップＳ２１４´）。
ひとつ前のＰが負であった時は、Ｎレジスタ１０４からデータを読み出し、ひとつ前のＰが０または正であった時は、０レジスタ１３０から０を読み出す。演算結果を書き込み信号ＰｗｒをマスクせずにＰレジスタ１０８に書き込む。」
すなわち、実施の形態５の乗剰余演算器１６００では、以下の問題を回避することを目的としている。
【０１７７】
つまり、ハードウェアの追加を抑制して、補正演算を実現するためには、演算器１０７、Ｐレジスタ１０８等を共用することが通例である。この場合、補正前の値がＰレジスタ１０８に入っているため、補正が必要な時にのみ補正演算を実行し、Ｐレジスタ１０８に書きこめばよい。あるいは、補正演算実行の有無による時間変動を避けるため補正の要否にかかわらず補正演算は実行し、補正が不要である時、Ｐレジスタへの書き込み信号をマスクする方法を採用することもできる。しかしながら、このように構成した場合、Ｐレジスタへの書きこみ信号の有無により消費電流に差が生じてしまう。
【０１７８】
図７に示した乗剰余演算器１６００は、実施の形態２の乗剰余演算器１３００の構成を変更して、Ｎレジスタ１０４および０レジスタ１３０の読出しを制御する信号Ｎｒｄおよび信号０ｒｄをそれぞれＯＲゲート１８４および１８６の一方入力に与える。ＯＲゲート１８４および１８６の他方入力には、補正の要否を判定する補正要否判定部１５０からの出力が与えられる。また、乗剰余演算器１６００では、補正の要否に応じて、Ｐレジスタ１０８への書き込みを制御するゲート回路１３８´がない。
【０１７９】
すなわち、補正演算時、Ｐレジスタ１０８中の値Ｐの正負、すなわち加減算を行う演算器１０７．１のキャリーに基づいて、キャリーが負の時は、Ｎレジスタを選択して演算（Ｐ＋Ｎ）を実行する。一方、キャリーが正の時は、０レジスタ１３０を選択して演算（Ｐ＋０）を実行する。これによりいずれの場合でも、演算結果がＰレジスタ１０８に書き込まれる処理が行われることとなり、書き込みの有無による消費電流の差を回避できる。
【０１８０】
そして、Ｐレジスタ１０８から読み出されたデータを、Ｙレジスタ１０３に格納する。
【０１８１】
このような構成とすることで、補正が不要の場合も、結果をレジスタに書き込むという動作が必ず行われるので、レジスタへの書き込みの有無より消費電流に差が生じることを回避できる。このため、電力解析により外部から処理を推定することが困難となる。
【０１８２】
［実施の形態６］
図８は、本発明の実施の形態６の乗剰余演算器１７００の構成を説明するための概略ブロック図である。
【０１８３】
以下、図８に示した乗剰余演算器１７００の動作を、図７に示した乗剰余演算器１６００の動作と対比させて説明する。
【０１８４】
図８に示した乗剰余演算器１７００の動作では、図７に示した乗剰余演算器１６００の動作における、補正演算中のステップＳ２１４´の
「続いて、以下の補正演算を実行する（ステップＳ２１４´）。
【０１８５】
ひとつ前のＰが負であった時は、Ｎレジスタ１０４からデータを読み出し、ひとつ前のＰが０または正であった時は、０レジスタ１３０から０を読み出す。演算結果を書き込み信号ＰｗｒをマスクせずにＰレジスタ１０８に書き込む。」
との処理を以下のように変更する。
【０１８６】
「続いて、以下の補正演算を実行する（ステップＳ２１４”）。
ひとつ前のＰが負であった時は、Ｎレジスタ１０４からデータを読み出し、ひとつ前のＰが０または正であった時は、０レジスタ１３０から０を読み出す。演算結果を右シフトし書き込み信号ＰｗｒをマスクせずにＰレジスタ１０８に書き込む。
【０１８７】
その結果をＰレジスタ１０８から読み出したとき、左シフトして元に戻す。」すなわち、実施の形態６の乗剰余演算器１７００では、以下の問題を回避することを目的としている。
【０１８８】
つまり、実施の形態５の乗剰余演算器１６００では、Ｐレジスタ１０８に、Ｐに格納されていたのと同じ値（Ｐ＋０）、または異なる値（Ｐ＋Ｎ）を書くことになるから電流にわずかに差が残る可能性がある。このため、電力解析の余地が残ってしまう可能性がある。
【０１８９】
このような問題を解消するために、実施の形態６の乗剰余演算器１７００では、補正演算では加減算の後、右シフト処理を行う必要はないものの、あえて右シフト処理を行うことで、補正演算完了後のＰレジスタ１０８に書き込む値を、補正が否であっても異なるようにする。これにより、補正の要否による消費電流の差をさらに少なくする。
【０１９０】
右シフトを行った時にあふれでたＬＳＢは、別途Ｖレジスタ１９０を設けて保存しておき、Ｐレジスタ１０８の値を他のレジスタに転送する場合に、左シフト処理の実行とＶレジスタ１９０に記憶しておいたＬＳＢ値を入れることで、正しい値に戻す。
【０１９１】
図８に示した乗剰余演算器１７００では、実施の形態５の乗剰余演算器１６００の構成に加えて、演算器１０７の処理の後に行われる右シフト処理時のキャリーを記憶し、Ｐレジスタ１０８からのデータの読出しの後に、読み出されたデータに対して行われる左シフト処理に対して記憶したキャリーを与えるＶレジスタ１９０を設ける。右シフト回路１０７．３は、制御回路１００から補正演算が指示された際および右シフト処理が指示された際に、活性状態となる信号を出力するＯＲ回路１８８により制御される。さらに、乗剰余演算器１７００では、上述した左シフト処理を行うための左シフト回路１９２が設けられる。
【０１９２】
補正演算を実行し、ＬＳＢをＶレジスタ１９０に書き込み、右シフト処理を行うことで、Ｐレジスタ１０８には、もともとＰレジスタ１０８に記憶されていたのとは異なる値（右シフトした値）を記憶する。
【０１９３】
補正演算実行後、Ｐレジスタ１０８からデータ読み出す際には、左シフト回路１９２で左シフトを実行し、ＬＳＢにＶレジスタ１９０の値を入力する。その値をＹレジスタ１０３に格納する。
【０１９４】
以上のような構成とすることで、補正演算においてもともとＰレジスタ１０８に格納されていたのと同じ値を再度Ｐレジスタ１０８に書き込むという動作をなくすことができ、Ｐレジスタ１０８への書き込み処理において、補正の有無に応じて電流が増減することを回避できる。
【０１９５】
［実施の形態７］
図９は、本発明の実施の形態７の乗剰余演算器１８００の構成を説明するための概略ブロック図である。
【０１９６】
以下、図９に示した乗剰余演算器１８００の動作を、図２に示した乗剰余演算器１１００の動作と対比させて説明する。
【０１９７】
まず、図９に示した乗剰余演算器１８００の動作では、図２に示した乗剰余演算器１１００の動作における、補正演算中のステップＳ２１４の
「続いて、以下の補正演算を実行する（ステップＳ２１４）。
【０１９８】
Ｎレジスタ１０４内の値を読み出す。演算器１０７．１で演算（Ｐ＋Ｎ）を実行する。このとき、右シフトは行わない。一つ前のＰレジスタ１０８の値が負であったときは、信号ＰｗｒでＰレジスタ１０８に演算（Ｐ＋Ｎ）の結果を書きこみ、一方、一つ前のＰレジスタ１０８の値が０または正であった時は、信号Ｐｗｒをマスクして、Ｐレジスタ１０８に演算（Ｐ＋Ｎ）の結果が書きこまれないようにする。」
との処理を以下のように変更する。
【０１９９】
「続いて、以下の補正演算を実行する（ステップＳ２１４´´´）。
Ｎレジスタ１０４内の値を読み出す。演算器１０７．１で演算（Ｐ＋Ｎ）を実行する。このとき、右シフトは行わない。一つ前のＰレジスタ１０８の値が負であったときは、信号ＰｗｒでＰレジスタ１０８に演算（Ｐ＋Ｎ）の結果を書きこみ、一方、一つ前のＰレジスタ１０８の値が０または正であった時は、別のＱレジスタ１９４に演算（Ｐ＋Ｎ）の結果を書きこむ。」
すなわち、実施の形態７の乗剰余演算器１８００でも、実施の形態６の乗剰余演算器１７００で回避しようとするのと同じ問題を回避することを目的とする。
【０２００】
このような問題を解消するために、実施の形態７の乗剰余演算器１８００では、実施の形態１の乗剰余演算器１２００の構成に加えて、Ｑレジスタ１９４とＷｒ禁止処理部１３４と書き込み信号Ｐｗｒを受けて論理積をとりＱレジスタ１９４への書き込みを制御する信号を生成するゲート回路１９６とが設けられる。
【０２０１】
このような構成では、補正演算の要否にかかわらず補正演算（Ｐ＋Ｎ）そのものは常に実行し、否の時にも結果の書き込みを行うためのＱレジスタ１９４が設けられることになる。Ｑレジスタ１９４へは、補正の要否に応じて、演算結果（Ｐ＋Ｎ）が、Ｐレジスタ１０８に対して相互排他的に書き込まれる。
【０２０２】
以上のような構成において、計算値（Ｐ＋Ｎ）の値は、通常は、Ｑレジスタ１９４にもともと格納されている値ともＰレジスタ１０８にもともと格納されている値とも異なる。このため、Ｐレジスタ１０８に書き込む値が、もともとＰレジスタ１０８に格納されている値と同じか否かによる電流の差を少なくできる。
【０２０３】
［実施の形態８］
図１０は、本発明の実施の形態８の乗剰余演算器１９００の構成を説明するための概略ブロック図である。
【０２０４】
実施の形態８の乗剰余演算器１９００の目的は以下のとおりである。すなわち、左バイナリ（ｂｉｎａｒｙ）の場合、ｅ［ｊ］＝１の乗算と次の自乗算で乗数であるＹの値は異なるが、ｅ［ｊ］＝０の時は同じ値となる。また右バイナリ（ｂｉｎａｒｙ）の場合、ｅ［ｊ］＝１の乗算と次の乗算で被乗数であるＸの値は異なるが、ｅ［ｊ］＝０の時は同じ値となる。このためｅ［ｊ］＝０の時だけ消費電流に同じパターンが含まれ電流解析に弱くなる可能性が残る。実施の形態８の乗剰余演算器１９００は、このようなおそれを解消する。
【０２０５】
図１０に示した実施の形態８の乗剰余演算器１９００は、実施の形態１の乗剰余演算器１２００の構成を上述した右バイナリ（ｂｉｎａｒｙ）法に適応するように変更し、さらに、ｉｆ文の判断が”ｆａｌｓｅ”の時の被乗数をＸでなく、Ｋレジスタ１３２中の値としたものである。
【０２０６】
このために、乗剰余演算器１９００においては、乗剰余演算器１２００と比べて、ゲート回路１２４が省略されて、信号ＹｗｒはそのままＹレジスタ１０３に与えられる。さらに、Ｗｒ禁止処理部１２２からの信号の反転レベルと信号Ｘｗｒの論理積をＸレジスタ１０６に与えるゲート回路２１０と、Ｗｒ禁止処理部１２２からの信号の反転レベルと信号Ｘｒｄの論理積をＸレジスタ１０６に与えるゲート回路２１２とが設けられる。
【０２０７】
さらに、ゲート回路１２６は、信号Ｙｗｒの代わりに信号Ｘｒｄを受ける。
また、乗剰余演算器１９００においては、Ｗｒ禁止処理部１２２からの信号と信号Ｘｒｄの論理積をＫレジスタ１３２に与えるゲート回路２１４が設けられる。
【０２０８】
その他の構成は、実施の形態１の乗剰余演算器１２００の構成と同様であるので、同一部分には、同一符号を付してその説明は繰り返さない。
【０２０９】
この乗剰余演算器１９００の処理では、バイナリ（ｂｉｎａｒｙ）法での繰り返し部分は、次の通りとなる。
【０２１０】
2004125891.tif 000019
乗剰余演算器１９００で信号Ｙｗｒは自乗算の結果をＹレジスタ１０３に書き込むための信号である。また、信号Ｘｗｒは、ｅ［ｊ］＝１の時、乗算結果をＸレジスタ１０６に書き込み、ｅ［ｊ］＝０のときＫレジスタ１３２に書き込むための信号である。さらに、信号Ｘｒｄは、ｅ［ｊ］＝１の時、乗数をＸレジスタ１０６から読み出し、ｅ［ｊ］＝０の時、Ｋレジスタ１３２から読み出すための信号である。
【０２１１】
以上のような構成とすることで、乗剰余演算器１９００の処理では、Ｙレジスタ１０３の値はｅ［ｊ］に関わらず、常に自乗算でのみ変化する。
【０２１２】
ｅ［ｊ］＝１でＸを乗数とする時は、Ｘは必ず変化し、ｅ［ｊ］＝０でＫを乗数とした場合もＫは必ず変化する。
【０２１３】
このため、乗数の値は繰り返し毎に異なることとなり、乗算実行時の消費電流のｅ［ｊ］との相関を一層低く抑えることが可能となる。
【０２１４】
なお、左バイナリ法の場合は以下のとおりとなる。
左バイナリ（ｂｉｎａｒｙ）法の場合には、繰り返し部分は
2004125891.tif 000020
となる。Ｊは被乗数のダミーとして設けたレジスタ中に格納される値である。効果は右バイナリ法の場合と同じである。また、その構成を示す図および説明は図１０に対して、上述のようなダミーレジスタＪを設けることで実現できるので、省略する。
【０２１５】
なお、以上、実施の形態１〜８において、それぞれの目的に対応するための乗剰余演算器の構成をそれぞれ説明したが、これらの実施の形態の構成を組み合わせた構成により、２以上の目的に同時に対処することが可能な乗剰余演算器を実現することができる。また、右バイナリ（Ｂｉｎａｒｙ）法、左バイナリ（Ｂｉｎａｒｙ）法のいずれに対しても適用することが可能である。
【０２１６】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【０２１７】
【発明の効果】
請求項１記載のべき乗剰余演算器では、回路規模が小さく、高速処理が可能なべき乗剰余演算器を提供することが可能となる。しかも、モンゴメリ乗算剰余演算およびべき乗剰余演算の各計算結果を得るためには省略可能な中間演算処理も擬似的に実行されるので、電力解析に対する耐性が向上する。
【０２１８】
請求項２および３記載のべき乗剰余演算器では、破棄されるデータが計算途中に現れた場合でもレジスタへの書き込みが行われるので、書き込み時の電流が流れることとなり、電力解析に対する耐性が向上する。
【０２１９】
請求項４記載のべき乗剰余演算器では、モンゴメリ演算の補正演算中に初期値を設定することにより単位元を最初に設定する必要がなくなる。このため、入力データの依存の有無が現れる電流消費のパターンとなって最初に０が連続する個数が見破られることを困難にできる。
【０２２０】
請求項５記載のべき乗剰余演算器では、電流変動パターンから累積加算レジスタに格納されるべき値には、最下位から連続する０が何個あるかが見破られることを困難にすることが可能である。
【０２２１】
請求項６〜８記載のべき乗剰余演算器では、補正が不要の場合も、結果をレジスタに書き込むという動作が必ず行われるので、レジスタへの書き込みの有無より消費電流に差が生じることを回避できる。このため、電力解析により外部から処理を推定することが困難となる。
【図面の簡単な説明】
【図１】べき乗剰余演算器の演算を高速化するための第１の構成を説明するための概略ブロック図である。
【図２】べき乗剰余演算器の演算を高速化するための第２の構成を説明するための概略ブロック図である。
【図３】実施の形態１の乗剰余演算器１２００の構成を説明するための概略ブロックである。
【図４】本発明の実施の形態２の乗剰余演算器１３００の構成を説明するための概略ブロック図である。
【図５】本発明の実施の形態３の乗剰余演算器１４００の構成を説明するための概略ブロック図である。
【図６】本発明の実施の形態４の乗剰余演算器１５００の構成を説明するための概略ブロック図である。
【図７】本発明の実施の形態５の乗剰余演算器１６００の構成を説明するための概略ブロック図である。
【図８】本発明の実施の形態６の乗剰余演算器１７００の構成を説明するための概略ブロック図である。
【図９】本発明の実施の形態７の乗剰余演算器１８００の構成を説明するための概略ブロック図である。
【図１０】本発明の実施の形態８の乗剰余演算器１９００の構成を説明するための概略ブロック図である。
【符号の説明】
１０１　インタフェース回路、１０２　ｅレジスタ、１０３　Ｙレジスタ、１０４　Ｎレジスタ、１０５　Ｂ２Ｎレジスタ、１０６　Ｘレジスタ、１０７　演算回路、１０８　Ｐレジスタ、１０９　べき乗剰余制御回路、１１０　モンゴメリ乗算剰余・剰余制御回路、１１１　加算・減算制御回路、１１２　モードレジスタ、１１３　コマンドレジスタ、１１４　ステータスレジスタ、１１５，１１６　内部バス、１１７　バス分割回路、１１８　Ｅｊ／Ｙｊ検出部、２０１，２０２，２０３，２０６　Ｄフリップフロップ、２０４，２０７　ＮＡＮＤゲート、２０４，２０５，２０８　インバータ、２０９　ＮＯＲゲート。
【図１】
2004125891.tif 000021
【図２】
2004125891.tif 000022
【図３】
2004125891.tif 000023
【図４】
2004125891.tif 000024
【図５】
2004125891.tif 000025
【図６】
2004125891.tif 000026
【図７】
2004125891.tif 000027
【図８】
2004125891.tif 000028
【図９】
2004125891.tif 000029
【図１０】
2004125891.tif 000030