(57)【要約】【課題】  簡易な構成で、電力解析による秘匿データの傍受を防止することのできる、暗号回路に用いられる演算回路、論理回路、読出し専用メモリ、レジスタ、および複数個のロジックを含む半導体回路を提供する。【解決手段】  乗算回路１００が備える正負論理混在データバス１０２，１０８は、ビットの論理が正論理と負論理とが混在しているｎ（ｎ≧２）ビットのデータを伝送する。加算部１０００は、正負論理混在データバス１０２，１０８で伝送されたデータを受けて、正負論理混在データバス１０２，１０８の論理に適合した加算を行なう。【選択図】        図４
2005346373.tif 000002
【特許請求の範囲】
【請求項１】
ｎ（ｎ≧２）ビットのデータを伝送し、ビットの論理が正論理と負論理とが混在しているｎビットのデータバスと、
前記データバスで伝送されるデータを受けて、前記データバスの論理に適合した加算を行なう加算部とを備えた演算回路。
【請求項２】
前記演算回路は、さらに、
被演算数を記憶し、ｎビットのデータを伝送し、ビットの論理が正論理と負論理とが混在しているｎビットの第１のデータバスと接続する第１のレジスタと、
零元を記憶し、ｎビットのデータを伝送し、ビットの論理が正論理と負論理とが混在しているｎ（ｎ≧２）ビットの第１のデータバスと接続する第２のレジスタと、
前記第１のレジスタから前記被演算数を前記第１のデータバスの各ビットの論理に適合させて前記第１のデータバスに出力させるか、前記第２のレジスタから前記零元を前記第１のデータバスの各ビットの論理に適合させて前記第１のデータバスに出力されるかを選択する選択回路と、
演算の途中結果のデータを記憶し、前記第１のデータバスと同一の論理の第２のデータバスと接続し、前記演算の途中結果のデータを前記第２のデータバスに出力する第３のレジスタと、
前記加算部から加算結果のデータを受けて、前記加算結果のデータを構成するビットのシフトを行ない、シフト結果のデータを前記演算の途中結果のデータとして前記第３のレジスタに出力するシフト回路とを備え、
前記加算部は、前記第１のデータバスから前記被演算数または前記零元を受け、前記第２のデータバスから前記演算の途中結果のデータを受けて、前記第１のデータバスおよび前記第２のデータバスの論理に適合した加算を行ない、加算結果のデータを前記シフト回路に出力する、請求項１記載の演算回路。
【請求項３】
前記第１のデータバスをＮ個（Ｎ≧２）備え、
前記第１のレジスタおよび前記第２のレジスタは、前記Ｎ個の第１のデータバスに接続し、
前記選択回路は、各前記第１のデータバスに、前記第１のレジスタから前記被演算数を出力させるか、前記第２のレジスタから前記零元を出力させるかを選択し、
前記加算部は、前記Ｎ個の第１のデータバスから前記被演算数または前記零元を受け、前記第２のデ−タバスから前記演算の途中結果のデータとを受けて、前記第１のデータバスおよび前記第２のデータバスの論理に適合した加算を行ない、加算結果のデータを前記シフト回路に出力し、
前記シフト回路は、前記加算結果のデータを受けて、前記加算結果のデータのＮビットシフトを行なって、シフト結果のデータを前記演算の途中結果のデータとして前記第３のレジスタに出力する、請求項２記載の演算回路。
【請求項４】
前記加算部は、前記被乗数のビット数がｎのときに、各段につきｎ個の加算回路をＮ段含み、
第１段目の各加算回路は、対応するビットの論理に合せたキャリー入力と、（Ｎ＋１）個の入力のうちの２個の入力とを受けて、対応するビットの論理に適合した加算結果のデータを次段の対応するビットの加算回路に出力し、対応するビットの１つ上のビットの論理に適合したキャリーを次段の対応するビットの１つ上のビットの加算回路に出力し、
Ｎ≧３の場合に、第２段目〜第（Ｎ−１）段目の各加算回路は、前段の対応するビットの加算回路から対応するビットの論理に適合した加算結果のデータと、前段の対応するビットの１つ下のビットの加算回路から対応するビットの論理に適合したキャリーと、前記（Ｎ＋１）個の入力のうちの未加算の１個の入力とを受けて、対応するビットの論理に適合した加算結果のデータを次段の対応するビットの加算回路に出力し、対応するビットの１つ上のビットの論理に適合したキャリーを次段の対応するビットの１つ上のビットの加算回路に出力し、
第Ｎ段目の各加算回路は、前段の対応するビットの加算回路から対応するビットの論理に適合した加算結果のデータと、前段の対応するビットの１つ下のビットの加算回路から対応するビットの論理に適合したキャリーと、第Ｎ段の１つ下のビットの加算回路から対応するビットの論理に適合したキャリーとを受けて、対応するビットの論理に適合した加算結果のデータを前記シフト回路に出力し、対応するビットの１つ上のビットの論理に適合したキャリーを第Ｎ段の対応するビットの１つ上のビットの加算回路に出力する、請求項３記載の演算回路。
【請求項５】
前記演算回路は、さらに、
零元を記憶し、前記第２のデータバスの各ビットの論理に合せて前記第２のデータバスに前記零元を出力する第５のレジスタと、
前記加算部が、演算の途中結果のデータの初期値と前記被演算数または前記零元とを加算するときには、前記第３のレジスタからの前記演算の途中結果のデータの出力に代えて、前記第５のレジスタから前記零元を出力させる選択回路とを備えた請求項２記載の演算回路。
【請求項６】
乗数と被乗数との乗算を行なう演算回路であって、
乗数を記憶する第１のレジスタと、
被乗数を記憶する第２のレジスタと、
乗算の途中結果のデータを記憶する第３のレジスタおよび第４のレジスタと、
前記第３のレジスタの出力と前記第４のレジスタの出力のいずれかを選択する選択回路と、
前記第２のレジスタから出力される被乗数と、前記第３のレジスタまたは前記第４のレジスタから出力される前記乗算の途中結果のデータとを受けて、これらを加算して、加算結果のデータを出力する加算部と、
加算結果のデータを構成するビットをシフトし、シフト結果のデータを出力する第１のシフト回路と、
前記乗算の途中結果のデータを受けて、前記乗算の途中結果のデータを構成するビットをシフトし、シフト結果のデータを出力する第２のシフト回路とを備え、
前記第３のレジスタは、前記第１のシフト回路から出力されたシフト結果のデータを受けて、前記乗算の途中結果のデータとして記憶し、
前記第４のレジスタは、前記第２のシフト回路から出力されたシフト結果のデータを受けて、前記乗算の途中結果のデータとして記憶し、
前記選択回路は、前記第１のレジスタから出力される前記乗数を構成するビットの値に基づき、前記第３のレジスタと前記第４のレジスタのうちのいずれかを選択し、選択したレジスタが記憶している前記乗算の途中結果のデータを前記加算部および前記第２のシフト回路へ出力させる、演算回路。
【請求項７】
乗数と被乗数との乗算を行なう演算回路であって、
乗数を記憶する第１のレジスタと、
被乗数を記憶する第２のレジスタと、
零元を記憶する第３のレジスタと、
乗算の途中結果のデータを記憶する第４のレジスタおよび第５のレジスタと、
前記第４のレジスタの出力と前記第５のレジスタの出力のいずれかを選択する選択回路と、
前記第２のレジスタから出力される前記被乗数、または前記第３のレジスタから出力される前記零元と、前記第４のレジスタまたは前記第５のレジスタから出力される前記乗算の途中結果のデータとを受けて、これらを加算して、加算結果のデータを出力する加算部と、
加算結果のデータを構成するビットをシフトし、シフト結果のデータを出力するシフト回路と、
前記第４のレジスタは、前記シフト回路から、前記被乗数についての加算結果のデータを構成するビットをシフトしたデータを受けて、前記乗算の途中結果のデータとして記憶し、
前記第５のレジスタは、前記シフト回路から、前記零元についての加算結果のデータを構成するビットをシフトしたデ−タを受けて、前記乗算の途中結果のデータとして記憶し、
前記選択回路は、前記第１のレジスタから出力される前記乗数を構成するビットの値に基づき、前記第４のレジスタと前記第５のレジスタのうちのいずれかを選択し、選択したレジスタが記憶している前記乗算の途中結果のデータを前記加算部へ出力させる、演算回路。
【請求項８】
除数と被除数とによる剰余演算を行なう演算回路であって、
被除数を記憶し、前記被除数を構成するビットを出力する第１のレジスタと、
除数を記憶する第２のレジスタと、
零元を記憶する第３のレジスタと、
剰余演算の途中結果のデータを記憶する第４のレジスタおよび第５のレジスタと、
前記第４のレジスタまたは前記第５のレジスタから出力される前記剰余演算の途中結果のデータと、前記第１のレジスタから出力される前記被除数のビットとを受けて、前記剰余演算の途中結果のデータを構成するビットを１ビットだけシフトするとともに、第０ビット目を前記第１のレジスタから出力される前記被除数を構成するビットの値とするシフト回路と、
前記シフト回路から出力されるデータ、前記第３のレジスタから出力される前記剰余演算の途中結果のデータ、または前記第４レジスタから出力される前記剰余演算の途中結果のデータと、前記第２のレジスタから出力される除数、または前記第３のレジスタから出力される零元とを受けて、加算選択信号が活性化されているときには、これらを加算し、加算選択信号が非活性のときには、これらを減算して、加算結果または減算結果を出力する加減算部と、
前記第４のレジスタまたは前記第５のレジスタから出力される前記剰余演算の途中結果のデータの符号、および／または剰余演算処理の実行段階に基づいて、第１の読出信号、第１の書込信号、第２の読出信号、第２の書込信号、および前記加算選択信号の活性化を制御する選択回路とを備え、
前記第４のレジスタは、前記加減算部から加算結果のデータを受けて、前記第１の書込信号が活性化されているときに、前記加算結果のデータを前記剰余演算の途中結果のデータとして記憶し、前記第１の読出信号が活性化されているときに、前記記憶している前記剰余演算の途中結果のデータを出力し、
前記第５のレジスタは、前記加減算部から減算結果のデータを受けて、前記第２の書込信号が活性化されているときに、前記減算結果のデータを前記剰余演算の途中結果のデータとして記憶し、前記第２の読出信号が活性化されているときに、前記記憶している前記剰余演算の途中結果のデータを出力する、演算回路。
【請求項９】
乗数と被乗数と除数とによるモンゴメリ乗算剰余を計算する演算回路であって、
乗数を記憶し、前記乗数を構成するビットを出力する第１のレジスタと、
被乗数を記憶する第２のレジスタと、
零元を記憶する第３のレジスタと、
除数を記憶する第４のレジスタと、
モンゴメリ乗算剰余の途中結果のデータを記憶する第５のレジスタおよび第６のレジスタと、
前記第２のレジスタから出力される前記被乗数、前記第３のレジスタから出力される前記零元、または前記第４のレジスタから出力される除数と、前記第５のレジスタまたは前記第６のレジスタから出力される前記モンゴメリ乗算剰余演算の途中結果のデータとを受けて、これらを加算して、加算結果のデータを出力する加算部と、
前記加算結果のデータを受けて、シフト選択信号が活性化されているときに、前記加算結果のデータを構成するビットをシフトして、シフト結果のデータを出力し、シフト選択信号が非活性のときに、前記加算結果のデータをそのまま出力するシフト回路と、
前記第１のレジスタから出力される前記乗数を構成するビットの値、前記第５のレジスタまたは前記第６のレジスタから出力される前記モンゴメリ乗算剰余演算の途中結果のデータの第０ビット目の値、前記第５のレジスタまたは前記第６のレジスタから出力される前記モンゴメリ乗算剰余演算の途中結果のデータの符号、および／またはモンゴメリ乗算剰余演算処理の実行段階に基づいて、第１の読出信号、第１の書込信号、第２の読出信号、第２の書込信号、および前記シフト選択信号の活性化を制御する選択回路とを備え、
前記第５のレジスタは、前記シフト回路からシフト結果のデータを受けて、前記第１の書込信号が活性化されているときに、前記シフト結果のデータを前記モンゴメリ乗算剰余演算の途中結果のデータとして記憶し、前記第１の読出信号が活性化されているときに、前記記憶している前記モンゴメリ乗算剰余演算の途中結果のデータを出力し、
前記第６のレジスタは、前記シフト回路からシフト結果のデータを受けて、前記第２の書込信号が活性化されているときに、前記シフト結果のデータを前記モンゴメリ乗算剰余演算の途中結果のデータとして記憶し、前記第２の読出信号が活性化されているときに、前記記憶している前記モンゴメリ乗算剰余演算の途中結果のデータを出力する、演算回路。
【請求項１０】
正論理を出力する第１の出力端子と、
負論理を出力する第２の出力端子と、
制御信号の活性化によって、前記第１の出力端子および前記第２の出力端子のいずれをもハイ状態とする１個以上の第１群に属するトランジスタと、
入力信号または反転入力信号を受けて、前記制御信号が不活性の場合に、前記受けた信号のレベルが所定の論理のときに、前記第１の出力端子をロウ状態とする１個以上の第２群に属するトランジスタと、
入力信号または反転入力信号を受けて、前記制御信号が不活性の場合に、前記受けた信号のレベルが所定の論理のときに、前記第２の出力端子をロウ状態とする１個以上の第３群に属するトランジスタとを備えた論理回路。
【請求項１１】
前記制御信号が活性化されている期間に、前記入力信号のレベルおよび前記反転入力信号のレベルが変化する、請求項１０記載の論理回路。
【請求項１２】
正論理を出力する第１の出力端子と、
負論理を出力する第２の出力端子と、
制御信号の活性化によって、前記第１の出力端子および前記第２の出力端子のいずれをもハイ状態とする１個以上の第１群に属するトランジスタと、
各々が、対応する入力信号を受け、前記第１の出力端子と接続される複数個の第２群に属するトランジスタと、
各々が、対応する入力信号を受け、前記第２の出力端子と接続される複数個の第３群に属するトランジスタと、
前記第２群に属するトランジスタは、前記制御信号が不活性のときに、それぞれに対応する入力信号が活性化されると、前記第１の出力端子をロウ状態にし、
前記第３群に属するトランジスタは、前記制御信号が不活性のときに、対応する入力信号が活性化されると、前記第２の出力端子をロウ状態にする、読出し専用メモリ。
【請求項１３】
前記制御信号が活性化されている期間に、前記活性化する入力信号を変化させる、請求項１２記載の読出し専用メモリ。
【請求項１４】
正論理のデータを記憶する第１のノードと、
負論理のデータを記憶する第２のノードと、
正論理の入力信号を受ける第１の入力端子と、
負論理の反転入力信号を受ける第２の入力端子と、
制御信号の活性化によって、前記第１のノードおよび前記第２のノードのいずれをもハイ状態とする１個以上の第１群のトランジスタと、
書込み信号の活性化によって、前記第１の入力端子と前記第１のノードとの間を導通させる第１のトランジスタと、
前記書込み信号の活性化によって、前記第２の入力端子と前記第２のノードとの間を導通させる第２のトランジスタとを備えたレジスタ。
【請求項１５】
前記制御信号が活性化されている期間に、前記入力信号のレベルおよび前記反転入力信号のレベルが変化する、請求項１４記載のレジスタ。
【請求項１６】
正論理のデータを記憶する第１のノードと、
負論理のデータを記憶する第２のノードと、
正論理の出力信号を出力する第１の出力端子と、
負論理の反転出力信号を出力する第２の出力端子と、
制御信号の活性化によって、前記第１の出力端子と前記第２の出力端子のいずれをもハイ状態とする１個以上の第１群に属するトランジスタと、
読出信号の活性化によって、前記第１の出力端子と前記第１のノードとの間を導通させる第１のトランジスタと、
前記読出し信号の活性化によって、前記第２の出力端子と前記第２のノードとの間を導通させる第２のトランジスタとを備えたレジスタ。
【請求項１７】
シリアルに接続された複数個のロジックと、
対応するロジックに与える制御信号を生成する複数個の制御信号生成回路とを備え、
前記ロジックは、論理回路、またはレジスタを含み、
前記論理回路またはレジスタは、入力信号、反転入力信号、および制御信号とを受けて、出力信号および反転出力信号を出力し、
前記論理回路または前記レジスタは、前記制御信号の活性化により、前記出力信号および前記反転出力信号をともにハイ状態とし、
前記制御信号の非活性化されているときに、前記入力信号および前記反転入力信号のレベルに応じて、前記出力信号および前記反転出力信号の一方をハイ状態とし、他方をロウ状態とし、
前記制御信号生成回路は、前記制御信号を活性化した後、前記対応するロジックに入力される少なくとも１つの入力信号および反転入力信号のペアのうち、ともにハイ状態からいずれかがロウ状態に変化するタイミングが最も遅いペアが変化した後に、前記制御信号を非活性化させる、半導体回路。
【請求項１８】
前記制御信号生成回路は、すべてのブロックに共通の基準信号と、前記対応するロジックに入力される少なくとも１つの入力信号および反転入力信号のペアを受けて、前記制御信号を生成する複数個の論理素子を含む、請求項１７記載の半導体回路。
【請求項１９】
前記制御信号生成回路は、制御入力信号を受ける遅延回路と、
前記遅延回路の出力と、すべてのブロックに共通の基準信号とを受けて、前記制御信号を生成するとともに、後段の制御信号生成回路の制御入力信号を生成する論理回路を含む、請求項１７記載の半導体回路。
【請求項２０】
最後段の制御信号生成回路から出力された信号を反転するインバータをさらに備え、
前記インバータの出力は、前記すべてのブロックに共通の基準信号として、各ブロックの制御信号生成回路に送られるとともに、前記制御入力信号として、最前段の制御信号生成回路に送られる、請求項１９記載の半導体回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算回路、論理回路、読出し専用メモリ、レジスタ、および複数個のロジックを含む半導体回路に関し、特に暗号処理に適した演算回路、論理回路、読出し専用メモリ、レジスタ、および複数個のロジックを含む半導体回路に関する。
【背景技術】
【０００２】
ＩＣカードなどに搭載された暗号回路が暗号化処理を行なっているときの消費電力を観測して解析することにより、秘匿データの特定が可能であることが知られている。
【０００３】
たとえば、特許文献１では、ＳＰＡ(Simple Power Analysis)またはＤＰＡ(Differential Power Analysis)のような電力解析が記載されている。すなわち、ＳＰＡ法では、演算命令の違い、あるいは処理されているデータの違いにより生じる消費電流波形の違いから、暗号鍵や処理されているデータを解析する。また、ＤＰＡ法では、消費電流波形を統計処理して暗号鍵を推定する。このＤＰＡ法では、たとえばＤＥＳのある部分に仮定した暗号鍵をあてはめて、平文を変化させながら消費電流波形を測定して統計する。暗号鍵をさまざまに変化させながらこの作業を繰り返し、正しい鍵のときには電流波形が大きなピークを示す。
【０００４】
このような、電力解析による秘匿データの傍受を防止するために、暗号回路の動作時の消費電力が秘匿データの値によって変化しないようにするための手法が提案されている。
【０００５】
たとえば、特許文献１では、コプロセッサ２０９では、暗号化・復号化共に用いられるべき乗剰余演算ＸＹｍｏｄＮの演算を行なうに当たり撹乱目的のダミー演算が挿入される。つまり、公知のアルゴリズムによって剰余演算Ａ2ｍｏｄＮとＡＢｍｏｄＮの２つの形に分解するにあたり、Ｙ＝ｅnｅn-1ｅ1の値のｅi＝０でも１でもＡ2ｍｏｄＮとＡＢｍｏｄＮの両方の演算を常に行なうようにする。
【０００６】
また、特許文献２では、データ機密保持のための暗号処理に用いる鍵データを、その反転データとともにＥ２ＰＲＯＭ４に記憶しておき、Ｅ２ＰＲＯＭ４より鍵データとその反転データを読出し、それらのうちの鍵データをもとに暗号回路４で暗号処理プログラムを実行し、その実行結果を用いてＣＰＵ１にて演算プログラムを実行する。また、暗号処理手段に、鍵データや処理データなどのデータを伝送するラインと、鍵データや処理データなどの反転データを伝送するラインとを持たせ、各ラインとダミー回路とを接続する。
【０００７】
また、特許文献３では、処理するデータを正常処理のデータとそのビットの値を判定したデータの両方を使用する。そして、同一の命令で、正常処理のデータとビットの値を反転したデータとを処理することにより、データバス上の値などが“０”から“１”、あるいは“１”から“０”なる回数を一定にする。データバスでは、値が反転したときに電流を大きく消費するため、“１”と“０”の反転回数が一定になることにより、電流の消費する回数が一定になる。
【特許文献１】特開２００１−１９５５５５号公報
【特許文献２】特開２００３−１８１４３号公報
【特許文献３】特開２０００−１６５３７５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、特許文献１に記載の方法では、モンゴメリ法による剰余演算の一手法において、Ｙ＝ｅnｅn-1ｅ1の値のｅi＝０のときにＡ2ｍｏｄＮのみの演算が必要で、ｅi＝１のときにＡ2ｍｏｄＮとＡＢｍｏｄＮの両方の演算が必要なところ、ｅi＝０でもＡＢｍｏｄＮの演算をダミー演算として実行したものであって、モンゴメリ法による剰余演算の一手法に特有の方法である。
【０００９】
また、特許文献２および特許文献３に記載の方法では、演算のたびに、正常処理データの反転データを生成または読出して、それを伝送して処理する必要があるので、暗号回路の構成が複雑、かつ大規模化する。
【００１０】
それゆえに、本発明の目的は、簡易な構成で、電力解析による秘匿データの傍受を防止することのできる、暗号回路に用いられる演算回路、論理回路、読出し専用メモリ、レジスタ、および複数個のロジックを含む半導体回路を提供することである。
【課題を解決するための手段】
【００１１】
上記課題を解決するために、本発明のある局面に係る演算回路は、ｎ（ｎ≧２）ビットのデータを伝送し、ビットの論理が正論理と負論理とが混在しているｎビットのデータバスと、データバスで伝送されるデータを受けて、データバスの論理に適合した加算を行なう加算部とを備える。
【００１２】
また、本発明の別の局面に係る演算回路は、乗数と被乗数との乗算を行なう演算回路であって、乗数を記憶する第１のレジスタと、被乗数を記憶する第２のレジスタと、乗算の途中結果のデータを記憶する第３のレジスタおよび第４のレジスタと、第３のレジスタの出力と第４のレジスタの出力のいずれかを選択する選択回路と、第２のレジスタから出力される被乗数と、第３のレジスタまたは第４のレジスタから出力される乗算の途中結果のデータとを受けて、これらを加算して、加算結果のデータを出力する加算部と、加算結果のデータを構成するビットをシフトし、シフト結果のデータを出力する第１のシフト回路と、乗算の途中結果のデータを受けて、乗算の途中結果のデータを構成するビットをシフトし、シフト結果のデータを出力する第２のシフト回路とを備え、第３のレジスタは、第１のシフト回路から出力されたシフト結果のデータを受けて、乗算の途中結果のデータとして記憶し、第４のレジスタは、第２のシフト回路から出力されたシフト結果のデータを受けて、乗算の途中結果のデータとして記憶し、選択回路は、第１のレジスタから出力される乗数を構成するビットの値に基づき、第３のレジスタと第４のレジスタのうちのいずれかを選択し、選択したレジスタが記憶している乗算の途中結果のデータを加算部および第２のシフト回路へ出力させる。
【００１３】
また、本発明のさらに別の局面に係る論理回路は、正論理を出力する第１の出力端子と、負論理を出力する第２の出力端子と、制御信号の活性化によって、第１の出力端子および第２の出力端子のいずれをもハイ状態とする１個以上の第１群に属するトランジスタと、入力信号または反転入力信号を受けて、制御信号が不活性の場合に、受けた信号のレベルが所定の論理のときに、第１の出力端子をロウ状態とする１個以上の第２群に属するトランジスタと、入力信号または反転入力信号を受けて、制御信号が不活性の場合に、受けた信号のレベルが所定の論理のときに、第２の出力端子をロウ状態とする１個以上の第３群に属するトランジスタとを備える。
【００１４】
また、本発明のさらに別の局面に係る読出し専用メモリは、正論理を出力する第１の出力端子と、負論理を出力する第２の出力端子と、制御信号の活性化によって、第１の出力端子および第２の出力端子のいずれをもハイ状態とする１個以上の第１群に属するトランジスタと、各々が、対応する入力信号を受け、第１の出力端子と接続される複数個の第２群に属するトランジスタと、各々が、対応する入力信号を受け、第２の出力端子と接続される複数個の第３群に属するトランジスタと、第２群に属するトランジスタは、制御信号が不活性のときに、それぞれに対応する入力信号が活性化されると、第１の出力端子をロウ状態にし、第３群に属するトランジスタは、制御信号が不活性のときに、対応する入力信号が活性化されると、第２の出力端子をロウ状態にする。
【００１５】
また、本発明のさらに別の局面に係るレジスタは、正論理のデータを記憶する第１のノードと、負論理のデータを記憶する第２のノードと、正論理の入力信号を受ける第１の入力端子と、負論理の反転入力信号を受ける第２の入力端子と、制御信号の活性化によって、第１のノードおよび第２のノードのいずれをもハイ状態とする１個以上の第１群のトランジスタと、書込み信号の活性化によって、第１の入力端子と第１のノードとの間を導通させる第１のトランジスタと、書込み信号の活性化によって、第２の入力端子と第２のノードとの間を導通させる第２のトランジスタとを備える。
【００１６】
また、本発明のさらに別の局面に係る半導体回路は、シリアルに接続された複数個のロジックと、対応するロジックに与える制御信号を生成する複数個の制御信号生成回路とを備え、ロジックは、論理回路、またはレジスタを含み、論理回路またはレジスタは、入力信号、反転入力信号、および制御信号とを受けて、出力信号および反転出力信号を出力し、論理回路またはレジスタは、制御信号の活性化により、出力信号および反転出力信号をともにハイ状態とし、制御信号の非活性化されているときに、入力信号および反転入力信号のレベルに応じて、出力信号および反転出力信号の一方をハイ状態とし、他方をロウ状態とし、制御信号生成回路は、制御信号を活性化した後、対応するロジックに入力される少なくとも１つの入力信号および反転入力信号のペアのうち、ともにハイ状態からいずれかがロウ状態に変化するタイミングが最も遅いペアが変化した後に、制御信号を非活性化させる。
【発明の効果】
【００１７】
本発明に係る演算回路、論理回路、読出し専用メモリ、レジスタ、および複数個のロジックを含む半導体回路によれば、簡易な構成で、電力解析による秘匿データの傍受を防止することができる。
【発明を実施するための最良の形態】
【００１８】
以下、本発明の実施の形態について図面を用いて説明する。
【００１９】
［第１の実施形態］
（従来の演算回路）
図１は、従来の乗算回路の構成を示す。同図を参照して、この乗算回路２０は、レジスタ群２１と、Ｙ［ｉ］判定回路１０９と、加算部１０３と、左シフト回路１０５と、Ｐレジスタ２８とを備える。レジスタ群とＹ［ｉ］判定回路および加算部１０３との間は、データバス１１２で接続される。加算部１０３と左シフト回路１０５との間は、データバス２４で接続される。左シフト回路１０５とＰレジスタ２７との間は、データバス２６で接続される。Ｐレジスタ２７と加算部１０３との間は、データバス２８で接続される。すべてのデータバス１１２，２４，２６，２８は、伝送されるるデータの各ビットの論理は正論理である。
【００２０】
レジスタ群２１は、乗数Ｙを記憶するＹレジスタ１２１と、被乗数Ｘを記憶するＸレジスタ２２と、全ビットが「０」である零元Ｋを記憶するＫレジスタ２３とを含む。また、Ｐレジスタ２７は、演算の途中結果のデータＰを記憶する。
【００２１】
（従来の乗算回路２０の乗算のアルゴリズム）
図２は、従来の乗算回路２０による乗算のアルゴリズム（１０２４ビットの場合）を示す。同図を参照して、このアルゴリズム５１の概要を説明する。
【００２２】
乗数Ｙの第ｉビットであるＹ［ｉ］が１のときには、Ｘレジスタ２２は、被乗数Ｘをデータバス１１２に出力する。また、Ｐレジスタ２７は、記憶しているデータＰをデータバス２８に出力する。
【００２３】
加算部１０３は、データバス１１２を通じて受けた被乗数Ｘと、データバス２８を通じて受けたデータＰとを加算して、加算結果をデータバス２４に出力する。
【００２４】
左シフト回路１０５は、データバス２４を通じて加算結果を受け、加算結果を１ビットだけ右にシフトして、データバス２６を通じてＰレジスタ２７に出力する。
【００２５】
Ｐレジスタ２７は、デ−タバス２６を通じて受けたデータをデータＰとして記憶する。
【００２６】
一方、乗数Ｙの第ｉビットであるＹ［ｉ］が０のときには、Ｋレジスタ２３は、零元Ｋをデータバス１１２に出力する。また、Ｐレジスタ２７は、記憶しているデータＰをデータバス２８に出力する。
【００２７】
加算部１０３は、データバス１１２を通じて受けた零元Ｋと、データバス２８を通じて受けたデータＰとを加算して、加算結果をデータバス２４に出力する。
【００２８】
左シフト回路１０５は、データバス２４を通じて加算結果を受け、加算結果を１ビットだけ右にシフトして、データバス２６を通じてＰレジスタ２７に出力する。
【００２９】
Ｐレジスタ２７は、デ−タバス２６を通じて受けたデータをデータＰとして記憶する。
【００３０】
以上のようなアルゴリズムでは、乗数Ｙ［ｉ］が「０」か「１」かによって、消費電力が相違する。なぜなら、Ｋレジスタ２３が零元Ｋをデータバス１１２に出力するときに消費する電力は、Ｘレジスタ２２が被乗数Ｘをデータバス１１２に出力するときに消費する電力よりも小さい。また、加算部１０３が零元ＫとデータＰとを加算するときに消費する電力は、加算部１０３が被乗数ＸとデータＰとを加算するときに消費する電力よりも小さいからである。それゆえ、ＳＰＡ(Simple Power Analysis)、またはＤＰＡ(Differential Power Analysis)などのような消費電力の解析手段を用いるすことによって、乗数Ｙを特定することが可能となり、それによって、暗号処理に用いられる鍵などの秘匿データを特定することができる。
【００３１】
（本実施の形態に係る暗号回路）
図３は、暗号回路の構成を示す図である。同図を参照して、この暗号回路１１は、制御回路１２と、演算回路１３とを含む。制御回路１２は、外部からの制御信号およびデータに基づき、演算回路１３を制御する。つまり、制御回路１２は、制御バス１１３を通じて制御信号を、データバス１１２を通じて被演算数などのデータを演算回路１３に送り、暗号処理に必要な演算を実行させる。
【００３２】
演算回路１３は、乗算回路、除算回路、剰余演算回路、モンゴメリ乗算剰余演算回路、加算回路、および／または減算回路などを含み、制御バス１１３を通じて送られる制御信号およびデータバス１１２を通じて送られる被演算数などのデータに基づき、暗号処理に必要な乗算、除算、剰余演算、モンゴメリ乗算剰余演算、加算、および／または減算などの演算を行ない、演算結果のデータをデータバス１１２を通じて制御回路１２に出力する。
【００３３】
（乗算回路の構成）
図４は、第１の実施形態に係る乗算回路の構成を示す。同図を参照して、この乗算回路１００は、レジスタ群１０１と、Ｙ［ｉ］判定回路１０９と、加算部１０００と、左シフト回路１０５と、Ｐレジスタ１０７と、バス論理変換回路１５０を備える。また、この乗算回路１００は、ｎ（＝１０２４）ビットのデータを伝送し、偶数ビットが正論理で、奇数ビットが負論理である正負論理混在データバス１０２，１０４，１０６，１０８と、ｎビットのデータを伝送し、全ビットが正論理であるデータバス１１２を含む。このデータバス１１２は、乗算回路１００の外部の制御回路１２と接続する。
【００３４】
レジスタ群１０１は、演算に必要なデータを記憶するもので、Ｙレジスタ１２１と、Ｘレジスタ１２２と、Ｋレジスタ１２３とからなる。
【００３５】
Ｙレジスタ１２１は、１０２４ビットの乗数Ｙを記憶する。Ｙレジスタ１２１は、乗数Ｙをデータバス１１２を通じてＹ［ｉ］判定回路１０９に出力する。
【００３６】
Ｘレジスタ１２２は、１０２４ビットの被乗数Ｘを記憶する。Ｘレジスタ１２２は、Ｙ［ｉ］判定回路１０９からの読出信号に従って、被乗数Ｘを正負論理混在データバス１０２へ出力する。
【００３７】
Ｋレジスタ１２３は、１０２４ビットの零元Ｋを記憶する。Ｋレジスタ１２３は、Ｙ［ｉ］判定回路１０９からの読出信号に従って、零元Ｋを正負論理混在データバス１０２へ出力する。
【００３８】
Ｙ［ｉ］判定回路１０９は、データバス１１２を通じて受けた乗数Ｙのｉビット目（ｉ＝０〜１０２３）の値であるＹ［ｉ］が「１」であるか、「０」であるかを判定し、Ｙ［ｉ］の値が「１」のときには、Ｘレジスタ１２２へ読出信号を送り、Ｙ［ｉ]の値が「０」のときには、Ｋレジスタ１２３に読出信号を送る。
【００３９】
左シフト回路１０５は、正負論理混在データバス１０４を通じて加算結果を受けて、それを下位ビット（０ビット目〜１０２３ビット目）とし、正負論理混在データバス１０８を通じてＰレジスタ１０７内のデータＰの上位ビット（１０２４ビット目〜２０４７ビット目）を受けて、それを上位ビットとし、それら下位ビットと上位ビットとからなる２０４８ビットのデータを１ビットだけ左シフトし、左シフトされたデータを正負論理混在データバス１０６に出力する。
【００４０】
Ｐレジスタ１０７は、乗算の途中結果である２０４８ビットのデータＰを記憶する。Ｐレジスタ１０７は、正負論理データバス１０６を通じて左シフトされた２０４８ビットのデータを受けて、データＰとして記憶する。また、Ｐレジスタ１０７は、記憶しているデータＰの下位ビット（０ビット目〜１０２３ビット目）を正負論理混在データバス１０８を通じて加算部１０００に出力する。また、Ｐレジスタ１０７は、記憶しているデータＰの上位ビット（１０２４ビット目〜２０４７ビット目）は、加算する必要がないので、正負論理混在データバス１０８を通じて左シフト回路１０５の上位ビット側に出力する。Ｐレジスタ１０７は、乗算の開始時に、値が「０」であるデータＰを加算器１０００に与える必要があるので、正負論理混在データバス１０８の論理に適合した初期値、つまり、偶数ビットが「０」で奇数ビットが「１」である２０４８ビットのデータを記憶する。
【００４１】
バス論理変換回路１５０は、正負論理混在データバス１０８から受けたデータの論理をデータバス１１２の論理に変換してデータバス１１２に出力する。また、バス論理変換回路１５０は、データバス１１２から受けたデータの論理を正負論理混在データバス１０８の論理に変換して、正負論理混在データバス１０８に出力する。
【００４２】
（Ｘレジスタ１２２の構成）
図５は、Ｘレジスタ１２２の出力信号の論理を示す図である。同図を参照して、被乗数Ｘの第０ビット目の値であるＸ［０］の正論理が端子Ｑを通じて、正負論理混在データバス１０２の偶数ビットである第０ビット線ＤＢ［０］に出力され、被乗数Ｘの第１ビット目の値であるＸ［１］の負論理が端子／Ｑを通じて、正負論理混在データバス１０２の奇数ビットである第１ビット線ＤＢ［１］に出力され、被乗数Ｘの第２ビット目の値であるＸ［２］の正論理が端子Ｑを通じて、正負論理混在データバス１０２の偶数ビットである第２ビット線ＤＢ［２］に出力され、被乗数Ｘの第３ビット目の値であるＸ［３］の負論理が端子／Ｑを通じて、正負論理混在データバス１０２の奇数ビットである第３ビット線ＤＢ［３］に出力される。Ｋレジスタ１２３についても、同様の構成である。
【００４３】
Ｘレジスタ１２２およびＫレジスタ１２３の出力をこのように構成することによって、Ｋレジスタ１２３から零元Ｋが正負論理混在データバス１０２に出力されたときに、正負論理混在データバス１０２上のすべてのデータが「Ｌ」となることが回避される。したがって、Ｘレジスタ１２２から被乗数Ｘが正負論理混在データバス１０２に出力されたときと、Ｋレジスタ１２３から零元Ｋが正負論理混在データバス１０２に出力されたときとで、消費電力が大きく相違することがないようにすることができる。
【００４４】
（加算部１０００の構成）
加算部１０００は、正負論理混在データバス１０２と接続する入力端子１と、正負論理混在データバス１０８と接続する入力端子２とを備える。入力端子１の第ｉビット目（０≦ｉ）は、正負論理混在データバス１０２の第ｉビット目と接続する。また、入力端子２の第ｉビット目（０≦ｉ）は、正負論理混在データバス１０８の第ｉビット目と接続する。
【００４５】
加算部１０００は、正負論理混在データバス１０２を通じて被乗数Ｘまたは零元Ｋを受け、正負論理混在データバス１０８を通じてＰレジスタ１０７内のデータＰの下位ビット（０ビット目〜１０２３ビット目）を受け、これらを正負論理混在データバス１０２，１０８の論理に適合した加算を行ない、加算結果を正負論理混在データバス１０４に出力する。
【００４６】
図６は、加算部１０００の構成を示す。同図では、代表的に第（ｍ−１）ビット、第ｍビット、および第（ｍ＋１）ビットの加算に関する部分を示している。この加算部１０００は、加算回路（正論理キャリー負論理）１００１、加算回路（負論理キャリー正論理）１００２、および加算回路（正論理キャリー負論理）１００３を含む。
【００４７】
第（ｍ−１）ビット目を処理する加算回路（正論理キャリー負論理）１００１は、正負論理混在データバス１０２の第（ｍ−１）ビット目の正論理の入力ｉｎ１と、正負論理混在データバス１０８の第（ｍ−１）ビット目の正論理の入力ｉｎ２と、図示しない第（ｍ−２）ビット目を処理する加算回路（負論理キャリー正論理）から正論理のキャリーｃｏｕｔを受けて、これらを加算する。加算回路（正論理キャリー負論理）１００１は、正論理の加算結果ｏｕｔを正負論理混在データバス１０４に出力し、負論理のキャリーｃｏｕｔＢを第ｍビット目を処理する加算回路（負論理キャリー正論理）１００２に出力する。
【００４８】
第ｍビット目を処理する加算回路（負論理キャリー正論理）１００２は、正負論理混在データバス１０２の第ｍビット目の正論理の入力ｉｎＢ１と、正負論理混在データバス１０８の第ｍビット目の正論理の入力ｉｎＢ２と、第（ｍ−１）ビット目を処理する加算回路（正論理キャリー負論理）１００１から負論理のキャリーｃｏｕｔＢを受けて、これらを加算する。加算回路（負論理キャリー正論理）１００２は、負論理の加算結果ｏｕｔＢを正負論理混在データバス１０４に出力し、正論理のキャリーｃｏｕｔを第（ｍ＋１）ビット目を処理する加算回路（正論理キャリー負論理）１００３に出力する。
【００４９】
第（ｍ＋１）ビット目を処理する加算回路（正論理キャリー正論理）１００３は、正負論理混在データバス１０２の第（ｍ＋１）ビット目の正論理の入力ｉｎ１と、正負論理混在データバス１０８の第（ｍ＋１）ビット目の正論理の入力ｉｎ２と、第ｍビット目を処理する加算回路（正論理キャリー負論理）１００２から正論理のキャリーｃｏｕｔを受けて、これらを加算する。加算回路（正論理キャリー正論理）１００３は、正論理の加算結果ｏｕｔを正負論理混在データバス１０４に出力し、負論理のキャリーｃｏｕｔＢを図示しない第（ｍ＋２）ビット目を処理する加算回路（負論理キャリー正論理）に出力する。
【００５０】
図７は、加算回路（正論理キャリー負論理）１００１の具体的な構成を示す。加算回路（正論理キャリー負論理）１００３の具体的な構成もこれと同様である。同図を参照して、加算回路（正論理キャリー負論理）１００１には、正論理の入力ｉｎ１と、正論理の入力ｉｎ２と、正論理のキャリーｃｕｔとが入力される。排他的論理和回路ＸＯＲ１５０は、これらの３つの入力を受けて、これらの排他的論理和を正論理の加算結果ｏｕｔとして出力する。論理積回路ＡＮＤ１５０，ＡＮＤ１５１，ＡＮＤ１５２は、それぞれ、３つの入力のうちの互いに異なる２つの入力の組を受けて、それらの論理積を出力する。反転論理和回路ＮＯＲ１５０は、論理積回路ＡＮＤ１５０，ＡＮＤ１５１，ＡＮＤ１５２の出力を受けて、これらの反転論理和を負論理のキャリーｃｏｕｔＢとして出力する。
【００５１】
図８は、加算回路（負論理キャリー正論理）１００２の具体的な構成を示す。同図を参照して、加算回路（負論理キャリー正論理）１００２には、負論理の入力ｉｎＢ１と、負論理の入力ｉｎＢ２と、負論理のキャリーｃｕｔＢとが入力される。排他的論理和回路ＸＯＲ１５１は、これらの３つの入力を受けて、これらの排他的論理和を負論理の加算結果ｏｕｔＢとして出力する。論理和回路ＯＲ１５０，ＯＲ１５１，ＯＲ１５２は、それぞれ、３つの入力のうちの互いに異なる２つの入力の組を受けて、それらの論理和を出力する。反転論理積回路ＮＡＮＤ１５０は、論理和回路ＯＲ１５０，ＯＲ１５１，ＯＲ１５２の出力を受けて、これらの反転論理積を正論理のキャリーｃｏｕｔとして出力する。
【００５２】
（乗算回路１００の乗算のアルゴリズム）
図９は、乗算回路１００による乗算のアルゴリズム（１０２４ビットの場合）を示す。この乗算のアルゴリズム５２に基づいて、乗算回路１００の動作を説明する。Ｙ［ｉ］判定回路１０９は、１０２３から０までのｉについて、乗数Ｙのｉビット目であるＹ［ｉ］の値を判定する。
【００５３】
Ｙ［ｉ］判定回路１０９は、Ｙ［ｉ］＝１のときには、Ｘレジスタ１２２から正負論理混在データバス１０２に被乗数Ｘを出力させる。
【００５４】
Ｐレジスタ１０７は、記憶しているデータＰの上位ビット（１０２４ビット目〜２０４７ビット目）を正負論理混在データバス１０８を通じて左シフト回路１０５の上位側へ出力し、記憶しているデータＰの下位ビット（０ビット目〜１０２３ビット目）を正負論理混在データバス１０８を通じて加算部１０００へ出力する。
【００５５】
加算部１０００は、正負論理混在データバス１０８を通じてデータＰの下位ビット（０ビット目〜１０２３ビット目）と、正負論理混在データバス１０２を通じて被乗数Ｘとを受けて、これらを加算し、加算結果を正負論理混在データバス１０４を通じて左シフト回路１０５の下位側に出力する。
【００５６】
左シフト回路１０５は、加算部１０００およびＰレジスタ１０７から受けたデータ（Ｐ＋Ｘ）を１ビットだけ左にシフトし、左シフトしたデータ（（Ｐ＋Ｘ）≪１）を正負論理混在データバス１０６を通じてＰレジスタ１０７に出力する。
【００５７】
一方、Ｙ［ｉ］判定回路１０９は、Ｙ［ｉ］＝０のときには、Ｋレジスタ１２３から正負論理混在データバス１０２に零元Ｋを出力させる。
【００５８】
Ｐレジスタ１０７は、記憶しているデータＰの上位ビット（１０２４ビット目〜２０４７ビット目）を正負論理混在データバス１０８を通じて左シフト回路１０５の上位側へ出力し、記憶しているデータＰの下位ビット（０ビット目〜１０２３ビット目）を正負論理混在データバス１０８を通じて加算部１０００へ出力する。
【００５９】
加算部１０００は、正負論理混在データバス１０８を通じてデータＰの下位ビット（０ビット目〜１０２３ビット目）と、正負論理混在データバス１０２を通じて零元Ｋとを受けて、これらを加算し、加算結果を正負論理混在データバス１０４を通じて左シフト回路１０５の下位側に出力する。
【００６０】
左シフト回路１０５は、加算部１０００およびＰレジスタ１０７から受けたデータ（Ｐ＋Ｘ）を１ビットだけ左にシフトし、左シフトしたデータ（（Ｐ＋Ｘ）≪１）を正負論理混在データバス１０６を通じてＰレジスタ１０７に出力する。
【００６１】
このような処理をｉ＝１０２３から０まで繰返すことによって、最終的にＰレジスタ１０７に、乗数Ｙと被乗数Ｘとの乗算結果が格納される。
【００６２】
以上のように、本実施の形態に係る乗算回路によれば、零元Ｋの加算時に電力消費量が最小となるのを防止することができるので、暗号処理において秘匿データとなる乗数Ｙが特定されるのを防止することができる。
【００６３】
［第１の実施形態の変形例１］
本変形例は、第１の実施形態の乗算回路のＫレジスタを別の構成要素に置き換えた乗算回路に関する。
【００６４】
（乗算回路の構成）
図１０は、第１の実施形態の変形例１に係る乗算回路の構成を示す。同図において、図４の乗算回路１００の構成要素と同一の構成要素には、図４と同一の符号を付している。同図を参照して、この乗算回路３００が、図４の乗算回路１００と相違する点は、Ｋレジスタ１２３の代わりに零元出力回路３２０を備えた点である。
【００６５】
図１０を参照して、零元出力回路３２０は、２ビット分を代表的に示すもので、インバータＩＶ１と、ＰチャネルＭＯＳトランジスタＰ１と、ＮチャネルＭＯＳトランジスタＮ１とを備える。正負論理混在データバス１０２のビット数がｎのときには、図示した回路を（ｎ／２）個備えればよい。
【００６６】
零元出力回路３２０は、Ｙ［ｉ］判定回路１０９から出力される零元の出力を指示する信号が「Ｈ」レベルにアサ−トされたときに、正負論理混在データバス１０２の第０ビット目に「０」を出力し、正負論理混在データバス１０２の第１ビット目に「１」を出力する。これにより、この零元出力回路３２０は、零元の偶数ビットの正論理「０」を正負論理混在データバス１０２の偶数ビットに出力し、零元の奇数ビットの負論理「１」を正負論理混在データバス１０２の奇数ビットに出力する。これにより、零元の加算時には、正負論理混在バス１０２の各ビット線には、０と１が交互に並んだデータが伝送される。
【００６７】
以上のように、本変形例に係る乗算回路によれば、第１の実施形態と同様に、乗数Ｙのビットが「０」のときに電力消費量が最小となるのを防止することができるので、暗号処理において秘匿データとなる乗数Ｙが特定されるのを防止することができる。また、本変形例に係る乗算回路は、Ｋレジスタに代えて零元出力回路３１０を備えることによって、乗算回路内のレジスタを１つ少なくすることができる。
【００６８】
［第１の実施形態の変形例２］
本変形例は、第１の実施形態の乗算回路の構成要素の処理順序を変形した乗算回路に関する。
【００６９】
（乗算回路の構成）
図１１は、第１の実施形態の変形例２に係る乗算回路の構成を示す。同図において、図４の乗算回路１００の構成要素と同一の構成要素には、図４と同一の符号を付している。同図を参照して、この乗算回路４００が図４の乗算回路１００と相違する点は、左シフト回路１０５とＰレジスタ１０７の処理順序を入れ替えたことである。
【００７０】
（乗算回路４００の乗算のアルゴリズム）
図１２は、乗算回路４００による乗算のアルゴリズム（１０２４ビットの場合）を示す。この乗算のアルゴリズム５３に基づいて、乗算回路４００の動作を説明する。
【００７１】
Ｙ［ｉ］判定回路１０９は、１０２３から０までのｉについて、乗数Ｙのｉビット目であるＹ［ｉ］の値を判定する。
【００７２】
Ｙ［ｉ］判定回路１０９は、Ｙ［ｉ］＝１のときには、Ｘレジスタ１２２から正負論理混在データバス１０２に被乗数Ｘを出力させる。
【００７３】
また、Ｐレジスタ１０７は、記憶しているデータＰを正負論理混在データバス１０６を通じて左シフト回路１０５に出力する。
【００７４】
左シフト回路１０５は、正負論理混在データバス１０６を通じてデータＰを受けて、そのデータＰを１ビットだけ左シフトする。左シフト回路１０５は、左シフトしたデータ（Ｐ≪１）の上位ビット（１０２４ビット目〜２０４７ビット目）を正負論理混在データバス１０８を通じてＰレジスタ１０７の上位側に出力し、左シフトしたデータ（Ｐ≪１）の下位ビット（０ビット目〜１０２３ビット目）を正負論理混在データバス１０８を通じて加算部１０００へ出力する。
【００７５】
加算部１０００は、正負論理混在データバス１０８を通じて左シフトされたデータ（Ｐ≪１）の下位ビット（０ビット目〜１０２３ビット目）と、正負論理混在データバス１０２を通じて被乗数Ｘとを受けて、これらを加算し、加算結果を正負論理混在データバス１０４を通じてＰレジスタ１０７の下位側に出力する。
【００７６】
一方、Ｙ［ｉ］判定回路１０９は、Ｙ［ｉ］＝０のときには、Ｋレジスタ１２２から正負論理混在データバス１０２に零元Ｋを出力させる。
【００７７】
また、Ｐレジスタ１０７は、記憶しているデータＰを正負論理混在データバス１０６を通じて左シフト回路１０５に出力する。
【００７８】
左シフト回路１０５は、正負論理混在データバス１０６を通じてデータＰを受けて、そのデータＰを１ビットだけ左シフトする。左シフト回路１０５は、左シフトしたデータ（Ｐ≪１）の上位ビット（１０２４ビット目〜２０４７ビット目）を正負論理混在データバス１０８を通じてＰレジスタ１０７の上位側に出力し、左シフトしたデータ（Ｐ≪１）の下位ビット（０ビット目〜１０２３ビット目）を正負論理混在データバス１０８を通じて加算部１０００へ出力する。
【００７９】
加算部１０００は、正負論理混在データバス１０８を通じて左シフトされたデータ（Ｐ≪１）の下位ビット（０ビット目〜１０２３ビット目）と、正負論理混在データバス１０２を通じて零元Ｋとを受けて、これらを加算し、加算結果を正負論理混在データバス１０４を通じてＰレジスタ１０７の下位側に出力する。
【００８０】
このような処理をｉ＝１０２３から０まで繰返すことによって、最終的にＰレジスタ１０７に、乗数Ｙと被乗数Ｘとの乗算結果が格納される。
【００８１】
以上のように、本変形例に係る乗算回路によれば、第１の実施形態と同様に、乗数Ｙのビットが「０」のときに電力消費量が最小となるのを防止することができるので、暗号処理において秘匿データとなる乗数Ｙが特定されるのを防止することができる。
【００８２】
［第１の実施形態の変形例３］
本変形例は、第１の実施形態の乗算回路の左シフト回路を右シフト回路に置き換えた乗算回路に関する。
【００８３】
（乗算回路の構成）
図１３は、第１の実施形態の変形例３に係る乗算回路の構成を示す。同図において、図４の乗算回路１００の構成要素と同一の構成要素には、図４と同一の符号を付している。同図を参照して、この乗算回路５００が図４の乗算回路１００と相違する点は、左シフト回路１０５の代わりに右シフト回路５０５を備え、加算部１０００の代りに加算部１０１０を備えた点である。
【００８４】
右シフト回路５０５は、正負論理混在データバス１０４を通じて加算結果を受けて、それを上位ビット（１０２４ビット目〜２０４７ビット目）とし、正負論理混在データバス１０８を通じてＰレジスタ１０７内のデータＰの下位ビット（０ビット目〜１０２３ビット目）を受けて、それを下位ビットとし、それら下位ビットと上位ビットとからなる２０４８ビットのデータを１ビットだけ右シフトし、右シフトされたデータを正負論理混在データバス１０６に出力する。
【００８５】
加算部１０１０は、正負論理混在データバス１０２と接続する入力端子１と、正負論理混在データバス１０８と接続する入力端子２とを備える。入力端子１の第ｉビット目（１≦ｉ）は、正負論理混在データバス１０２の第（ｉ−１）ビット目と接続し、入力端子１の第０ビット目は、「０」に固定される。また、入力端子２の第ｉビット目（０≦ｉ）は、正負論理混在データバス１０８の第ｉビット目と接続する。
【００８６】
加算部１０１０は、正負論理混在データバス１０２を通じて被乗数Ｘまたは零元Ｋが１ビットだけ左シフトしたデータを受け、正負論理混在データバス１０８を通じてＰレジスタ１０７内のデータＰの下位ビット（０ビット目〜１０２３ビット目）を受け、これらを正負論理混在データバス１０２，１０８の論理に適合した加算を行ない、加算結果を正負論理混在データバス１０４に出力する。
【００８７】
（乗算回路５００の乗算のアルゴリズム）
図１４は、乗算回路５００による乗算のアルゴリズム（１０２４ビットの場合）を示す。この乗算のアルゴリズム５４に基づいて、乗算回路５００の動作を説明する。
【００８８】
Ｙ［ｉ］判定回路１０９は、０から１０２３までのｉについて、乗数Ｙのｉビット目であるＹ［ｉ］の値を判定する。
【００８９】
Ｙ［ｉ］判定回路１０９は、Ｙ［ｉ］＝１のときには、Ｘレジスタ１２２から正負論理混在データバス１０２に被乗数Ｘを出力させる。
【００９０】
Ｐレジスタ１０７は、記憶しているデータＰの下位ビット（０ビット目〜１０２３ビット目）を正負論理混在データバス１０８を通じて右シフト回路５０５の下位側へ出力し、記憶しているデータＰの上位ビット（１０２４ビット目〜２０４７ビット目）を正負論理混在データバス１０８を通じて加算部１０１０へ出力する。
【００９１】
加算部１０１０は、正負論理混在データバス１０８を通じてデータＰの上位ビット（１０２４ビット目〜２０４７ビット目）と、正負論理混在データバス１０２を通じて被乗数Ｘが１ビットだけ左にシフトしたデータ（Ｘ≪１）とを受けて、これらを加算し、加算結果を正負論理混在データバス１０４を通じて右シフト回路５０５の上位側に出力する。
【００９２】
右シフト回路５０５は、加算部１０１０およびＰレジスタ１０７から受けたデータ（Ｐ＋（Ｘ≪１））を１ビットだけ右にシフトし、右シフトしたデータ（（Ｐ＋（Ｘ≪１））≫１）を正負論理混在データバス１０６を通じてＰレジスタ１０７に出力する。
【００９３】
一方、Ｙ［ｉ］判定回路１０９は、Ｙ［ｉ］＝１のときには、Ｋレジスタ１２３から正負論理混在データバス１０２に零元Ｋを出力させる。
【００９４】
Ｐレジスタ１０７は、記憶しているデータＰの下位ビット（０ビット目〜１０２３ビット目）を正負論理混在データバス１０８を通じて右シフト回路５０５の下位側へ出力し、記憶しているデータＰの上位ビット（１０２４ビット目〜２０４７ビット目）を正負論理混在データバス１０８を通じて加算部１０１０へ出力する。
【００９５】
加算部１０１０は、正負論理混在データバス１０８を通じてデータＰの上位ビット（１０２４ビット目〜２０４７ビット目）と、正負論理混在データバス１０２を通じて零元Ｋが１ビットだけ左にシフトしたデータ（Ｋ≪１）とを受けて、これらを加算し、加算結果を正負論理混在データバス１０４を通じて右シフト回路５０５の上位側に出力する。
【００９６】
右シフト回路５０５は、加算部１０１０およびＰレジスタ１０７から受けたデータ（Ｐ＋（Ｋ≪１））を１ビットだけ右にシフトし、右シフトしたデータ（（Ｐ＋（Ｋ≪１））≫１）を正負論理混在データバス１０６を通じてＰレジスタ１０７に出力する。
【００９７】
このような処理をｉ＝０から１０２３まで繰返すことによって、最終的にＰレジスタ１０７に、乗数Ｙと被乗数Ｘとの乗算結果が格納される。
【００９８】
以上のように、本実施の形態に係る乗算回路によれば、第１の実施形態と同様に、乗数Ｙのビットが「０」のときに電力消費量が最小となるのを防止することができるので、暗号処理において秘匿データとなる乗数Ｙが特定されるのを防止することができる。
【００９９】
［第１の実施形態の変形例４］
本変形例は、変形例３と同様に右シフト回路を備えるとともに、変形例２と同様に構成要素の処理順序を変形した乗算回路に関する。
【０１００】
（乗算回路の構成）
第１の実施形態の変形例４に係る乗算回路の構成は、変形例３の右シフト回路５０５とＰレジスタ１０７の処理順序を、変形例２のように入れ替えたものであり、ここでは図示は省略する。
【０１０１】
（乗算回路５００の乗算のアルゴリズム）
図１５は、第１の実施形態の変形例４に係る乗算回路の乗算のアルゴリズム（１０２４ビットの場合）を示す。この乗算のアルゴリズム５５に基づいて、本変形例の乗算回路の動作を説明する。
【０１０２】
Ｙ［ｉ］判定回路１０９は、０から１０２３までのｉについて、乗数Ｙのｉビット目であるＹ［ｉ］の値を判定する。
【０１０３】
Ｙ［ｉ］判定回路１０９は、Ｙ［ｉ］＝１のときには、Ｘレジスタ１２２から正負論理混在データバス１０２に被乗数Ｘを出力させる。
【０１０４】
また、Ｐレジスタ１０７は、記憶しているデータＰを正負論理混在データバス１０６を通じて右シフト回路５０５に出力する。
【０１０５】
右シフト回路５０５は、正負論理混在データバス１０６を通じてデータＰを受けて、そのデータＰを１ビットだけ右シフトする。右シフト回路５０５は、右シフトしたデータ（Ｐ≫１）の下位ビット（０ビット目〜１０２３ビット目）を正負論理混在データバス１０８を通じてＰレジスタ１０７の下位側に出力し、右シフトしたデータ（Ｐ≪１）の上位ビット（１０２４ビット目〜２０４７ビット目）を正負論理混在データバス１０８を通じて加算部１０１０へ出力する。
【０１０６】
加算部１０１０は、正負論理混在データバス１０８を通じて右シフトされたデータ（Ｐ≫１）の上位ビット（１０２４ビット目〜２０４７ビット目）と、正負論理混在データバス１０２を通じて被乗数Ｘとを受けて、これらを加算し、加算結果を正負論理混在データバス１０４を通じてＰレジスタ１０７の上位側に出力する。
【０１０７】
一方、Ｙ［ｉ］判定回路１０９は、Ｙ［ｉ］＝０のときには、Ｋレジスタ１２２から正負論理混在データバス１０２に零元Ｋを出力させる。
【０１０８】
また、Ｐレジスタ１０７は、記憶しているデータＰを正負論理混在データバス１０６を通じて右シフト回路５０５に出力する。
【０１０９】
右シフト回路５０５は、正負論理混在データバス１０６を通じてデータＰを受けて、そのデータＰを１ビットだけ右シフトする。右シフト回路５０５は、右シフトしたデータ（Ｐ≫１）の下位ビット（０ビット目〜１０２３ビット目）を正負論理混在データバス１０８を通じてＰレジスタ１０７の下位側に出力し、右シフトしたデータ（Ｐ≪１）の上位ビット（１０２４ビット目〜２０４７ビット目）を正負論理混在データバス１０８を通じて加算部１０１０へ出力する。
【０１１０】
加算部１０１０は、正負論理混在データバス１０８を通じて右シフトされたデータ（Ｐ≫１）の上位ビット（１０２４ビット目〜２０４７ビット目）と、正負論理混在データバス１０２を通じて零元Ｋとを受けて、これらを加算し、加算結果を正負論理混在データバス１０４を通じてＰレジスタ１０７の上位側に出力する。
【０１１１】
このような処理をｉ＝１０２３から０まで繰返すことによって、最終的にＰレジスタ１０７に、乗数Ｙと被乗数Ｘとの乗算結果が格納される。
【０１１２】
以上のように、本実施の形態に係る乗算回路によれば、第１の実施形態と同様に、乗数Ｙのビットが「０」のときに電力消費量が最小となるのを防止することができるので、暗号処理において秘匿データとなる乗数Ｙが特定されるのを防止することができる。
【０１１３】
［第１の実施形態の変形例５］
本変形例は、Ｐレジスタの変形例であるデータ格納レジスタ群に関する。第１の実施形態では、Ｐレジスタ１０７に格納されるデータＰの初期値を、零元Ｋ（全ビットが０）を正負論理混在データバス１０８の正負論理に適合したものにする（偶数ビットが「０」で、奇数ビットが「１」）ことによって、アルゴリズム５２におけるＰ＝０を実現したが、本変形例では、Ｐ＝０を実現するための専用のレジスタを用いる。
【０１１４】
（デ−タ格納レジスタ群の構成）
図１６は、第１の実施形態の変形例５に係るデータ格納レジスタ群の構成を示す。同図を参照して、データ格納レジスタ群１３００は、Ｐレジスタ１０７と、Ｋレジスタ１３０２と、選択回路１３０３とを備える。
【０１１５】
Ｐレジスタ１０７は、第１の実施形態と同様である。ただし、アルゴリズム５２におけるＰ＝０を実現するための初期値が格納されない。
【０１１６】
Ｋレジスタ１３０２は、アルゴリズム５２におけるＰ＝０を実現するための専用のレジスタであり、零元Ｋを記憶する。また、Ｋレジスタ１３０２は、図５に示すＸレジスタと同様に、正負の論理が混在した出力を正負論理混在データバス１０８に出力する。
【０１１７】
選択回路１３０３は、Ｐの初期値の出力時（たとえばアルゴリズム５２におけるＰ＝０）に、Ｋレジスタ１３０２から零元Ｋを出力させ、初期値以外の出力時に、Ｐレジスタ１０７から記憶しているデータＰを出力させる。
【０１１８】
以上のように、本実施の形態に係る乗算回路によれば、第１の実施形態と同様に、乗数Ｙのビットが「０」のときに電力消費量が最小となるのを防止することができるので、暗号処理において秘匿データとなる乗数Ｙが特定されるのを防止することができる。また、Ｐの初期値を与えるための専用のレジスタを備えることで、ＰレジスタにＰの初期値を正負混在論理バス１０２の論理に合せたデータ（０と１が交互に並ぶ）を記憶する処理を省略することができる。
【０１１９】
［第２の実施形態］
本実施の形態は、乗数Ｙの２ビット分について同時に処理することで、乗算処理を高速化した乗算回路に関する。
【０１２０】
（乗算回路の構成）
図１７は、第２の実施形態に関する乗算回路の構成を示す。同図において、図４の乗算回路１００の構成要素と同一の構成要素には、図４と同一の符号を付している。同図を参照して、この乗算回路８００が図４の乗算回路１００と相違する点は、Ｙ［ｉ］判定回路１０９の代わりにＹ［２ｉ，２ｉ＋１］判定回路８０９を備え、１ビットの左シフトを行なう左シフト回路１０５の代わりに２ビットの左シフトを行なう２ビット左シフト回路８０５を備え、２入力の加算部１０００の代りに３入力の加算部１１１０を備え、１本の正負論理混在データバス１０２の代りに２本の正負論理混在データバス１０２ａ，１０２ｂを備え、Ｘレジスタ１２２の代わりにＸレジスタ８２２を備え、Ｋレジスタ１２３の代りにＫレジスタ８２３を備えたことである。
【０１２１】
正負論理混在データバス１０２ａ，１０２ｂは、ｎ（＝１０２４）ビットのデータを伝送し、偶数ビットが正論理で、奇数ビットが負論理である。
【０１２２】
Ｙ［２ｉ＋１，２ｉ］判定回路８０９は、乗数Ｙの（２ｉ＋１）ビット目と、２ｉビット目の値であるＹ［２ｉ＋１，２ｉ］の値を判定し、Ｙ［２ｉ＋１，２ｉ］＝１１のときには、Ｘレジスタ８２２から正負論理混在データバス１０２ａおよび１０２ｂに被乗数Ｘを出力させ、Ｙ［２ｉ＋１，２ｉ］＝１０のときには、Ｘレジスタ８２２から正負論理混在データバス１０２ａに被乗数Ｘを出力させ、Ｋレジスタ８２３から正負論理混在データバス１０２ｂに零元Ｋを出力させ、Ｙ［２ｉ＋１，２ｉ］＝０１のときには、Ｋレジスタ８２３から正負論理混在データバス１０２ａに零元Ｋを出力させ、Ｘレジスタ８２２から正負論理混在データバス１０２ｂに被乗数Ｘを出力させ、Ｙ［２ｉ＋１，２ｉ］＝００のときには、Ｋレジスタ８２３から正負論理混在データバス１０２ａに零元Ｋを出力させ、Ｋレジスタ８２３から正負論理混在データバス１０２ｂに零元Ｋを出力させる。
【０１２３】
Ｘレジスタ８２２は、１０２４ビットの被乗数Ｘを記憶する。Ｘレジスタ８２２は、Ｙ［２ｉ＋１，２ｉ］判定回路８０９からの読出信号により、正負論理混在データバス１０２ａおよび／または１０２ｂに被乗数Ｘを出力する。
【０１２４】
Ｋレジスタ８２３は、１０２４ビットの零元Ｋを記憶する。Ｋレジスタ８２３は、Ｙ［２ｉ＋１，２ｉ］判定回路８０９からの読出信号により、正負論理混在データバス１０２ａおよび／または１０２ｂに零元Ｋを出力する。
【０１２５】
Ｘレジスタ８２２およびＫレジスタ８２３の出力信号の論理は、図５に示すＸレジスタ１２２の出力信号の論理と同様である。
【０１２６】
（加算部１１００）
加算部１１００は、正負論理混在データバス１０２ａと接続する入力端子１と、正負論理混在データバス１０２ｂと接続する入力端子２と、正負論理混在データバス１０８と接続する入力端子３を備える。加算部１１００の入力端子１の第ｉビット目（０≦ｉ）は、正負論理混在データバス１０２ａの第ｉビット目と接続する。また、加算部１１００の入力端子２の第ｉビット目（１≦ｉ）は、正負論理混在データバス１０２ｂの第（ｉ−１）ビット目と接続し、入力端子２の第０ビット目は、「０」に固定される。また、加算部１１００の入力端子３の第ｉビット目（０≦ｉ）は、正負論理混在データバス１０８の第ｉビット目と接続する。
【０１２７】
加算部１１００は、正負論理混在データバス１０２ａを通じて被乗数Ｘまたは零元Ｋを受け、正負論理混在データバス１０２ｂを通じて被乗数Ｘまたは零元Ｋを１ビットだけ左にシフトされたデータを受け、正負論理混在データバス１０８を通じてＰレジスタ１０７内のデータＰの下位ビット（０ビット目〜１０２３ビット目）を受け、これらを正負論理混在データバス１０２ａ，１０２ｂ，１０８の論理に適合した加算を行ない、加算結果を正負論理混在データバス１０４に出力する。
【０１２８】
図１８は、加算部１１００の構成を示す。同図では、代表的に第（ｍ−１）ビット、第ｍビット、および第（ｍ＋１）ビットの加算に関する部分を示している。この加算部１１００は、前段に加算回路（正論理キャリー負論理）１１０１、加算回路（負論理キャリー正論理）１１０２、および加算回路（正論理キャリー負論理）１１０３を含み、後段に加算回路（正論理キャリー負論理）１１０４、加算回路（負論理キャリー正論理）１１０５、および加算回路（正論理キャリー負論理）１１０６を含む。
【０１２９】
前段の第（ｍ−１）ビット目を処理する加算回路（正論理キャリー負論理）１１０１は、正負論理混在データバス１０２ａの第（ｍ−１）ビット目の正論理の入力ｉｎ１と、正負論理混在データバス１０２ｂの第（ｍ−１）ビット目の正論理の入力ｉｎ２と、正負論理混在データバス１０８の第（ｍ−１）ビット目の正論理の入力ｉｎ３とを受けて、これらを加算する。加算回路（正論理キャリー負論理）１１０１は、正論理の加算結果ｏｕｔを後段の第（ｍ−１）ビット目を処理する加算回路（正論理キャリー負論理）１１０４に出力し、負論理のキャリーｃｏｕｔＢを後段の第ｍビット目を処理する加算回路（負論理キャリー正論理）１１０５に出力する。
【０１３０】
前段の第ｍビット目を処理する加算回路（負論理キャリー正論理）１１０２は、正負論理混在データバス１０２ａの第ｍビット目の負論理の入力ｉｎＢ１と、正負論理混在データバス１０２ｂの第ｍビット目の負論理の入力ｉｎＢ２と、正負論理混在データバス１０８の第ｍビット目の負論理の入力ｉｎＢ３とを受けて、これらを加算する。加算回路（負論理キャリー正論理）１１０２は、負論理の加算結果ｏｕｔＢを後段の第ｍビット目を処理する加算回路（負論理キャリー正論理）１１０５に出力し、正論理のキャリーｃｏｕｔを後段の第（ｍ＋１）ビット目を処理する加算回路（正論理キャリー負論理）１１０６に出力する。
【０１３１】
前段の第（ｍ＋１）ビット目を処理する加算回路（正論理キャリー負論理）１１０３は、正負論理混在データバス１０２ａの第（ｍ＋１）ビット目の正論理の入力ｉｎ１と、正負論理混在データバス１０２ｂの第（ｍ＋１）ビット目の正論理の入力ｉｎ２と、正負論理混在データバス１０８の第（ｍ＋１）ビット目の正論理の入力ｉｎ３とを受けて、これらを加算する。加算回路（正論理キャリー負論理）１１０３は、正論理の加算結果ｏｕｔを後段の第（ｍ＋１）ビット目を処理する加算回路（正論理キャリー負論理）１１０６に出力し、負論理のキャリーｃｏｕｔＢを、図示しない後段の第（ｍ＋２）ビット目を処理する加算回路（負論理キャリー正論理）に出力する。
【０１３２】
後段の第（ｍ−１）ビット目を処理する加算回路（正論理キャリー負論理）１１０４は、前段の第（ｍ−１）ビット目を処理する加算回路（正論理キャリー負論理）１１０１から正論理の加算結果ｏｕｔを受け、図示しない前段の第（ｍ−２）ビット目を処理する加算回路（負論理キャリー正論理）から正論理のキャリーｃｏｕｔを受け、図示しない後段の第（ｍ−２）ビット目を処理する加算回路（負論理キャリー正論理）から正論理のキャリーｃｏｕｔを受けて、これらを加算する。加算回路（正論理キャリー負論理）１１０４は、正論理の加算結果ｏｕｔを正負論理混在データバス１０４に出力し、負論理のキャリーｃｏｕｔＢを後段の第ｍビット目を処理する加算回路（負論理キャリー正論理）１１０５に出力する。
【０１３３】
後段の第ｍビット目を処理する加算回路（負論理キャリー正論理）１１０５は、前段の第ｍビット目を処理する加算回路（負論理キャリー正論理）１１０２から負論理の加算結果ｏｕｔＢを受け、前段の第（ｍ−１）ビット目を処理する加算回路（正論理キャリー負論理）１１０１から負論理のキャリーｃｏｕｔＢを受け、後段の第（ｍ−１）ビット目を処理する加算回路（正論理キャリー負論理）１１０４から負論理のキャリーｃｏｕｔＢを受けて、これらを加算する。加算回路（負論理キャリー正論理）１１０５は、負論理の加算結果ｏｕｔＢを正負論理混在データバス１０４に出力し、正論理のキャリーｃｏｕｔを後段の第（ｍ＋１）ビット目を処理する加算回路（正論理キャリー負論理）１１０６に出力する。
【０１３４】
後段の第（ｍ＋１）ビット目を処理する加算回路（正論理キャリー負論理）１１０６は、前段の第（ｍ＋１）ビット目を処理する加算回路（正論理キャリー負論理）１１０３から正論理の加算結果ｏｕｔを受け、前段の第ｍビット目を処理する加算回路（負論理キャリー正論理）１１０２から正論理のキャリーｃｏｕｔを受け、後段の第ｍビット目を処理する加算回路（負論理キャリー正論理）１１０５から正論理のキャリーｃｏｕｔを受けて、これらを加算する。加算回路（正論理キャリー負論理）１１０６は、正論理の加算結果ｏｕｔを正負論理混在データバス１０４に出力し、負論理のキャリーｃｏｕｔＢを図示しない後段の第（ｍ＋２）ビット目を処理する加算回路（負論理キャリー正論理）に出力する。
【０１３５】
加算回路（正論理キャリー負論理）１１０１，１１０３，１１０４，１１０６の具体的な構成は、図７の加算回路（正論理キャリー負論理）１００１と同一なので、ここでは説明を繰返さない。また、加算回路（負論理キャリー正論理）１１０２，１１０５の具体的な構成は、図８の加算回路（負論理キャリー正論理）１００２と同一なので、ここでは説明を繰返さない。
【０１３６】
２ビット左シフト回路８０５は、加算部１１００およびＰレジスタ１０７から受けたデータを２ビットだけ左にシフトし、２ビットだけ左シフトしたデータを正負論理混在データバス１０６を通じてＰレジスタ１０７に出力する。
【０１３７】
（乗算回路８００の乗算のアルゴリズム）
図１９は、乗算回路８００による乗算のアルゴリズム（１０２４ビットの場合）を示す。この乗算のアルゴリズム５６に基づいて、乗算回路８００の動作を説明する。
【０１３８】
Ｙ［２ｉ＋１，２ｉ］判定回路８０９は、５１１から０までのｉについて、乗数Ｙの（２ｉ＋１）ビット目と、２ｉビット目の値であるＹ［２ｉ＋１，２ｉ］の値を判定する。
【０１３９】
Ｙ［２ｉ＋１，２ｉ］判定回路８０９は、Ｙ［２ｉ＋１，２ｉ］＝１１のときには、Ｘレジスタ８２２に読出信号を送り、Ｘレジスタ８２２から正負論理混在データバス１０２ａおよび１０２ｂに被乗数Ｘを出力させる。
【０１４０】
Ｐレジスタ１０７は、記憶しているデータＰの上位ビット（１０２４ビット目〜２０４７ビット目）を正負論理混在データバス１０８を通じて２ビット左シフト回路１０５の上位側へ出力し、記憶しているデータＰの下位ビット（０ビット目〜１０２３ビット目）を正負論理混在データバス１０８を通じて加算部１１００へ出力する。
【０１４１】
加算部１１００は、正負論理混在データバス１０８を通じてデータＰの下位ビット（０ビット目〜１０２３ビット目）を受け、正負論理混在データバス１０２ａを通じて被乗数Ｘを受け、正負論理混在データバス１０２ｂを通じて被乗数Ｘが１ビットだけ左にシフトしたデータ（Ｘ≪１）を受けて、これらを加算し、加算結果を正負論理混在データバス１０４を通じて２ビット左シフト回路８０５の下位側に出力する。
【０１４２】
２ビット左シフト回路８０５は、加算部１１００およびＰレジスタ１０７から受けたデータ（Ｐ＋Ｘ＋（Ｘ≪１））を２ビットだけ左にシフトし、２ビットだけ左シフトしたデータ（（Ｐ＋Ｘ＋（Ｘ≪１））≪２））を正負論理混在データバス１０６を通じてＰレジスタ１０７に出力する。
【０１４３】
また、Ｙ［２ｉ＋１，２ｉ］判定回路８０９は、Ｙ［２ｉ＋１，２ｉ］＝１０のときには、Ｘレジスタ８２２に読出信号を送り、Ｘレジスタ８２２から正負論理混在データバス１０２ａに被乗数Ｘを出力させ、Ｋレジスタ８２３に読出信号を送り、Ｋレジスタ８２３から正負論理混在データバス１０２ｂに零元Ｋを出力させる。
【０１４４】
Ｐレジスタ１０７は、記憶しているデータＰの上位ビット（１０２４ビット目〜２０４７ビット目）を正負論理混在データバス１０８を通じて２ビット左シフト回路８０５の上位側へ出力し、記憶しているデータＰの下位ビット（０ビット目〜１０２３ビット目）を正負論理混在データバス１０８を通じて加算部１１００へ出力する。
【０１４５】
加算部１１１０は、正負論理混在データバス１０８を通じてデータＰの下位ビット（０ビット目〜１０２３ビット目）を受け、正負論理混在データバス１０２ａを通じて被乗数Ｘを受け、正負論理混在データバス１０２ｂを通じて零元Ｋが１ビットだけ左にシフトしたデータ（Ｋ≪１）を受けて、これらを加算し、加算結果を正負論理混在データバス１０４を通じて２ビット左シフト回路８０５の下位側に出力する。
【０１４６】
２ビット左シフト回路８０５は、加算部１１００およびＰレジスタ１０７から受けたデータ（Ｐ＋Ｘ＋（Ｋ≪１））を２ビットだけ左にシフトし、２ビットだけ左シフトしたデータ（（Ｐ＋Ｘ＋（Ｋ≪１））≪２））を正負論理混在データバス１０６を通じてＰレジスタ１０７に出力する。
【０１４７】
また、Ｙ［２ｉ＋１，２ｉ］判定回路８０９は、Ｙ［２ｉ＋１，２ｉ］＝０１のときには、Ｋレジスタ８２３に読出信号を送り、Ｋレジスタ８２３から正負論理混在データバス１０２ａに零元Ｋを出力させ、Ｘレジスタ８２２に読出信号を送り、Ｘレジスタ８２２から正負論理混在データバス１０２ｂに被乗数Ｘを出力させる。
【０１４８】
Ｐレジスタ１０７は、記憶しているデータＰの上位ビット（１０２４ビット目〜２０４７ビット目）を正負論理混在データバス１０８を通じて２ビット左シフト回路８０５の上位側へ出力し、記憶しているデータＰの下位ビット（０ビット目〜１０２３ビット目）を正負論理混在データバス１０８を通じて加算部１１００へ出力する。
【０１４９】
加算部１１１０は、正負論理混在データバス１０８を通じてデータＰの下位ビット（０ビット目〜１０２３ビット目）を受け、正負論理混在データバス１０２ａを通じて零元Ｋを受け、正負論理混在データバス１０２ｂを通じて被乗数Ｘが１ビットだけ左にシフトしたデータ（Ｘ≪１）を受けて、これらを加算し、加算結果を正負論理混在データバス１０４を通じて２ビット左シフト回路８０５の下位側に出力する。
【０１５０】
２ビット左シフト回路８０５は、加算部１１００およびＰレジスタ１０７から受けたデータ（Ｐ＋Ｋ＋（Ｘ≪１））を２ビットだけ左にシフトし、２ビットだけ左シフトしたデータ（（Ｐ＋Ｋ＋（Ｘ≪１））≪２））を正負論理混在データバス１０６を通じてＰレジスタ１０７に出力する。
【０１５１】
また、Ｙ［２ｉ＋１，２ｉ］判定回路８０９は、Ｙ［２ｉ＋１，２ｉ］＝００のときには、Ｋレジスタ８２３に読出信号を送り、Ｋレジスタ８２３から正負論理混在データバス１０２ａおよび１０２ｂに零元Ｋを出力させる。
【０１５２】
Ｐレジスタ１０７は、記憶しているデータＰの上位ビット（１０２４ビット目〜２０４７ビット目）を正負論理混在データバス１０８を通じて２ビット左シフト回路８０５の上位側へ出力し、記憶しているデータＰの下位ビット（０ビット目〜１０２３ビット目）を正負論理混在データバス１０８を通じて加算部１１００へ出力する。
【０１５３】
加算部１１００は、正負論理混在データバス１０８を通じてデータＰの下位ビット（０ビット目〜１０２３ビット目）を受け、正負論理混在データバス１０２ａを通じて零元Ｋを受け、正負論理混在データバス１０２ｂを通じて零元Ｋが１ビットだけ左にシフトしたデータ（Ｋ≪１）を受けて、これらを加算し、加算結果を正負論理混在データバス１０４を通じて２ビット左シフト回路８０５の下位側に出力する。
【０１５４】
２ビット左シフト回路８０５は、加算部１１００およびＰレジスタ１０７から受けたデータ（Ｐ＋Ｋ＋（Ｋ≪１））を２ビットだけ左にシフトし、２ビットだけ左シフトしたデータ（（Ｐ＋Ｋ＋（Ｋ≪１））≪２））を正負論理混在データバス１０６を通じてＰレジスタ１０７に出力する。
【０１５５】
このような処理をｉ＝５１１から０まで繰返すことによって、最終的にＰレジスタ１０７に、乗数Ｙと被乗数Ｘとの乗算結果が格納される。
【０１５６】
以上のように、本実施の形態に係る乗算回路によれば、第１の実施形態と同様に、乗数Ｙのビットが「０」のときに電力消費量が最小となるのを防止することができるので、暗号処理において秘匿データとなる乗数Ｙが特定されるのを防止することができる。また、乗数Ｙの２ビット分について、同時に加算処理を行なうので、乗算処理を高速化することができる。
【０１５７】
なお、本実施の形態に係る乗算回路においても、第１の実施形態の変形例のように、左シフト回路の代わりに右シフト回路を備えるように変形してもよく、Ｐレジスタの代りにデータ格納レジスタ群を備えるように変形してもよく、左または右シフトとＰレジスタへの格納の順序を逆になるように変形してもよく、Ｋレジスタの代わりに零元出力回路を備えるように変形するものとしてもよい。
【０１５８】
［第３の実施形態］
本実施の形態は、被乗数Ｘおよび零元Ｋのいずれについても演算を同時に行ない、乗数Ｙに応じて、いずれかの加算結果を選択する乗算回路に関する。
【０１５９】
（乗算回路１５００の構成）
図２０は、第３の実施形態に係る乗算回路の構成を示す。同図を参照して、この乗算回路１５００は、レジスタ群１５０１と、Ｙ［ｉ］選択回路１５１０と、加算部１５０３と、右シフト回路５０５ａと、Ｐレジスタ１０７と、右シフト回路５０５ｂと、Ｑレジスタ１５１７と、選択回路１５１２とを備える。また、この乗算回路１５０は、ｎ（＝１０２４）ビットのデータを伝送し、全ビットが正論理であるデータバス１１２，１５０４，１５０６，１５０７，１５０８Ｕ，１５０８Ｌを含む。データバス１１２は、乗算回路１５０の外部の制御回路１２と接続する。
【０１６０】
また、レジスタ群１５０１は、Ｙレジスタ１５２１と、Ｘレジスタ１５２２と、Ａレジスタ１５２３とを含む。
【０１６１】
Ｙレジスタ１５２１は、１０２４ビットの乗数Ｙを記憶する。Ｙレジスタ１５２１は、乗数Ｙをデータバス１１２を通じてＹ［ｉ］選択回路１５１０に出力する。
【０１６２】
Ｘレジスタ１５２２は、１０２４ビットの被乗数Ｘを記憶する。Ｘレジスタ１５２３は、被乗数Ｘをデータバス１１２を通じて加算部１５０３に出力する。
【０１６３】
Ａレジスタ１５２３は、乗算処理の終了後に、乗数Ｙと被乗数Ｘとの乗算結果Ａ（２０４８ビット）を記憶する。
【０１６４】
Ｙ［ｉ］選択回路１５１０は、乗数Ｙのｉビット目であるＹ［ｉ］の値に応じた選択信号Ｓをデータバス１５１１を通じて選択回路１５１２に出力する。Ｙ［ｉ］が１のときに選択信号Ｓ（＝１）が出力され、Ｙ［ｉ］が０のときに選択信号Ｓ（＝０）が出力される。
【０１６５】
加算部１５０３は、データバス１５０８Ｕと接続する入力端子１と、データバス１１２と接続する入力端子２とを備える。加算部１５０３の入力端子１の第ｉビット目（０≦ｉ）は、データバス１５０８の第ｉビット目と接続する。加算部１５０３の入力端子２の第ｉビット目（１≦ｉ）は、データバス１１２の第（ｉ−１）ビット目と接続し、入力端子２の第０ビット目は、「０」に固定される。加算部１５０３は、入力端子１からデータＡの上位ビット（１０２４ビット目〜２０４７ビット目）を受け、入力端子２から被乗数Ｘが１ビットだけ左にシフトしたデータ（Ｘ≪１）とを受けて、これらを加算する。加算部１５０３は、加算結果（Ａ＋（Ｘ≪１））をデータバス１５０４を通じて右シフト回路５０５ａの上位側に出力する。
【０１６６】
右シフト回路５０５ａは、上位側にデータバス１５０４を通じて加算結果（Ａ＋（Ｘ≪１）を受けて、下位側にデータバス１５０８Ｌを通じてデータＡの下位ビット（０ビット目〜１０２３ビット目）を受けて、これらを１ビットだけ右にシフトし、右シフトしたデータ（（Ａ＋（Ｘ≪１））≫１）をデータバス１５０６を通じてＰレジスタ１０７に出力する。
【０１６７】
右シフト回路５０５ｂは、上位側にデータバス１５０８Ｕを通じてデータＡの上位ビット（１０２４ビット目〜２０４７ビット目）を受けて、下位側にデータバス１５０８Ｌを通じてデータＡの下位ビット（０ビット目〜１０２３ビット目）を受けて、これらを１ビットだけ右にシフトし、右シフトしたデータ（Ａ≫１）をデータバス１５０６を通じてＱレジスタ１５１７に出力する。
【０１６８】
加算部１５０３および右シフト回路５０５ａによる処理と、右シフト回路５０５ｂによる処理とは、同時に並行して実行される。
【０１６９】
Ｐレジスタ１０７は、乗算の途中結果である２０４８ビットのデータＰを記憶する。Ｐレジスタ１０７は、データバス１５０６を通じて右シフト回路５０５ａから出力されたデータ（（Ａ＋（Ｘ≪１）））≫１）を受けて、これをデータＰとして記憶する。
【０１７０】
Ｑレジスタ１５１７は、乗算の途中結果である２０４８ビットのデータＱを記憶する。Ｑレジスタ１５１７は、データバス１５０６を通じて右シフト回路５０５ｂから出力されたデータ（Ａ≫１）を受けて、これをデータＱとして記憶する。
【０１７１】
選択回路１５１２は、選択信号Ｓの初期値「１」を記憶する。また、選択回路１５１２は、Ｙ［ｉ］選択回路１５１０から選択信号Ｓを受ける。選択回路１５１２は、選択信号Ｓが「１」のときには、Ｐレジスタ１０７から出力されたデータＰをデータＡとして、データＡの上位ビットをデータバス１５０８Ｕに出力し、データＡの下位ビットをデータバス１５０８Ｌに出力する。選択回路１５１２は、選択信号Ｓが「０」のときには、Ｑレジスタ１５１７から出力されたデータＱをデータＡとして、データＡの上位ビットをデータバス１５０８Ｕに出力し、データＡの下位ビットをデータバス１５０８Ｌに出力する。
【０１７２】
（乗算回路１５００の乗算のアルゴリズム）
図２１は、乗算回路１５００による乗算のアルゴリズム（１０２４ビットの場合）を示す。この乗算のアルゴリズム５７に基づいて、乗算回路１５００の動作を説明する。
【０１７３】
ｉ＝０〜１０２３までについて、以下の処理が実行される。
【０１７４】
選択信号Ｓの初期値が「１」とする。
【０１７５】
選択回路１５１２は、Ｐレジスタ１０７からデータバス１５０７を通じてデータＰを受け、Ｑレジスタ１５１７からデータバス１５０７を通じてデータＱを受ける。
【０１７６】
選択回路１５１２は、データバス１５１１を通じて受けた選択信号Ｓが「１」のときには、データＰを選択してデータＡとし、データバス１５１１を通じて受けた選択信号Ｓが「０」のときには、データＱを選択してデータＡとする。選択回路１５１２は、データバス１５０８Ｕを通じて加算部１５０３および右シフト回路５０５ｂの上位側にデータＡの上位ビット（１０２４ビット目〜２０４７ビット目）を出力し、データバス１５０８Ｌを通じて右シフト回路５０５ａの下位側および右シフト回路５０５ｂの下位側にデータＡの下位ビット（０ビット目〜１０２３ビット目）を出力する。
【０１７７】
Ｘレジスタ１５２２は、データバス１２２に被乗数Ｘを出力する。
【０１７８】
加算部１５０３は、データバス１５０８Ｕを通じてデータＡの上位ビット（１０２４ビット目〜２０４７ビット目）と、データバス１１２を通じて被乗数Ｘが１ビットだけ左にシフトしたデータ（Ｘ≪１）とを受けて、これらを加算し、加算結果をデータバス１５０４を通じて右シフト回路５０５ａの上位側に出力する。
【０１７９】
右シフト回路５０５ａは、加算部１５０３および選択回路１５１２から受けたデータ（Ａ＋（Ｘ≪１））を１ビットだけ右にシフトし、右シフトしたデータ（（Ａ＋（Ｘ≪１））≫１）をデータバス１５０６を通じてＰレジスタ１０７に出力する。
【０１８０】
また、上述の加算部１５０３および右シフト回路５０５ａの処理と同時並行して、右シフト回路５０５ａは、データバス１５０８Ｕを通じてデータＡの上位ビット（１０２４ビット目〜２０４７ビット目）と、データバス１５０８Ｌを通じてデータＡの下位ビット（０ビット目〜１０２３ビット目）とを受けて、データＡを１ビットだけ右にシフトし、右シフトしたデータＡ≫１をデータバス１５０６を通じてＱレジスタ１５１７に出力する。
【０１８１】
Ｙ［ｉ］選択回路１５１０は、乗数Ｙのｉビット目であるＹ［ｉ］の値に応じた選択信号Ｓをデータバス１５１１を通じて選択回路１５１２に出力する。Ｙ［ｉ］が「１」のときに選択信号Ｓ（＝１）が出力され、Ｙ［ｉ］が「０」のときに選択信号Ｓ（＝０）が出力される。
【０１８２】
このような処理をｉ＝０から１０２３まで繰返した後、選択回路１５１２は、選択信号Ｓの値、つまりＹ「１０２３］の値が「１」のときには、データＰを選択してデータＡとし、選択信号Ｓが「０」のときには、データＱを選択してデータＡとする。選択回路１５１２は、データバス１５０８Ｕおよびデータバス１１２を通じて、データＡの上位ビット（１０２４ビット目〜２０４７ビット目）をＡレジスタ１５２３に出力し、データバス１５０８Ｌおよびデータバス１１２を通じてデータＡの下位ビット（０ビット目〜１０２３ビット目）をＡレジスタ１５２３に出力する。
【０１８３】
以上のような処理によって、最終的にＡレジスタ１５２３に乗数Ｙと被乗数Ｘとの乗算結果が格納される。
【０１８４】
以上のように、本実施の形態に係る乗算回路によれば、乗数Ｙのビットが「０」のときに電力消費量が最小となるのを防止することができるので、暗号処理において秘匿データとなる乗数Ｙが特定されるのを防止することができる。
【０１８５】
なお、本実施の形態に係る乗算回路においても、第１の実施形態またはその変形例のように、右シフト回路の代わりに左シフト回路を備えるように変形してもよく、左または右シフトとＰレジスタおよびＱレジスタへの格納の順序を逆になるように変形してもよく、正論理のデータバスの代りに正負論理混在データバスを備えるように変形するものとしてもよい。
【０１８６】
また、本実施の形態では、Ａレジスタ１５２３に乗算結果が格納されるものとしたが、これに限定するものではなく、Ｘレジスタ１５２２とＹレジスタ１５２１のいずれかに乗算結果を格納するものとしてもよく、この場合、Ａレジスタ１５２３は不要となる。
【０１８７】
［第３の実施形態の変形例］
本変形例は、第３の実施形態と同様に、被乗数Ｘおよび零元Ｋのいずれについても演算を行なうが、同時に演算を行なうのではなく、片方ずつ順番に演算を行なうような乗算回路に関する。
【０１８８】
（乗算回路の構成）
図２２は、第３の実施形態の変形例に係る乗算回路の構成を示す。同図において、図２０の乗算回路１５００の構成要素と同一の構成要素には、図２０と同一の符号を付している。同図を参照して、この乗算回路１６００が図２０の乗算回路１５００と相違する点は、Ｋレジスタ１６２３とレジスタ選択回路１６０９とを備えた点と、２個の右シフト回路５０５ａ，５０５ｂの代わりに１個の右シフト回路５０５を備え、加算部１５０３の代わりに加算部１６０３を備えた点である。
【０１８９】
Ｋレジスタ１６２３は、１０２４ビットの零元Ｋを記憶する。Ｋレジスタ１６２３は、零元Ｋをデータバス１１２を通じて加算部１６０３に出力する。
【０１９０】
レジスタ選択回路１６０９は、Ｘレジスタ１５２２およびＫレジスタ１６２３に交互に制御バス１５３１，１５３２を通じて読出信号を送り、データバス１１２に被乗数Ｘまたは零元Ｋを出力させる。
【０１９１】
加算部１６０３は、データバス１５０８Ｕと接続する入力端子１と、データバス１１２と接続する入力端子２とを備える。加算部１６０３の入力端子１の第ｉビット目（０≦ｉ）は、データバス１５０８の第ｉビット目と接続する。加算部１６０３の入力端子２の第ｉビット目（１≦ｉ）は、データバス１１２の第（ｉ−１）ビット目と接続し、入力端子２の第０ビット目は、「０」に固定される。
【０１９２】
加算部１６０３は、入力端子１からデータＡの上位ビット（１０２４ビット目〜２０４７ビット目）を受け、入力端子２から被乗数Ｘが１ビットだけ左にシフトしたデータ（Ｘ≪１）を受けて、これらを加算する。加算部１６０３は、加算結果（Ａ＋（Ｘ≪１））をデータバス１５０４を通じて右シフト回路５０５の上位側に出力する。
【０１９３】
また、加算部１６０３は、入力端子１からデータＡの上位ビット（１０２４ビット目〜２０４７ビット目）を受け、入力端子２から零元Ｋを１ビットだけ左にシフトしたデータ（Ｋ≪１）を受けて、これらを加算する。加算部１６０３は、加算結果（Ａ＋（Ｋ≪１））をデータバス１５０４を通じて右シフト回路５０５の上位側に出力する。
【０１９４】
右シフト回路５０５は、上位側にデータバス１５０４を通じて加算結果（Ａ＋（Ｘ≪１））を受けて、下位側にデータバス１５０８Ｌを通じてデータＡの下位ビット（０ビット目〜１０２３ビット目）を受けて、これらを１ビットだけ右にシフトし、右シフトしたデータ（（Ａ＋（Ｘ≪１））≫１）をデータバス１５０６を通じてＰレジスタ１０７に出力する。
【０１９５】
また、右シフト回路５０５は、上位側にデータバス１５０４を通じて加算結果（Ａ＋（Ｋ≪１））を受けて、下位側にデータバス１５０８Ｌを通じてデータＡの下位ビット（０ビット目〜１０２３ビット目）を受けて、これらを１ビットだけ右にシフトし、右シフトしたデータ（（Ａ＋（Ｋ≪１））≫１）をデータバス１５０６を通じてＱレジスタ１５０７に出力する。
【０１９６】
レジスタ選択回路１６０９により、被乗数Ｘと零元が交互にレジスタ群１６０１からデータバス１１２に出力されるので、加算部１６０３および右シフト回路５０５は、被乗数Ｘについての処理と、零元Ｋとの処理を交互に実行する。
【０１９７】
（乗算回路１６００の乗算のアルゴリズム）
図２３は、乗算回路１６００による乗算のアルゴリズム（１０２４ビットの場合）を示す。この乗算のアルゴリズム５８に基づいて、乗算回路１６００の動作を説明する。
【０１９８】
ｉ＝０〜１０２３までについて、以下の処理が実行される。
【０１９９】
選択信号Ｓの初期値が「１」とする。
【０２００】
選択回路１５１２は、Ｐレジスタ１０７からデータバス１５０７を通じてデータＰを受け、Ｑレジスタ１５１７からデータバス１５０７を通じてデータＱを受ける。
【０２０１】
選択回路１５１２は、データバス１５１１を通じて受けた選択信号Ｓが「１」のときには、データＰを選択してデータＡとし、データバス１５１１を通じて受けた選択信号Ｓが「０」のときには、データＱを選択してデータＡとする。選択回路１５１２は、データバス１５０８Ｕを通じて加算部１６０３にデータＡの上位ビット（１０２４ビット目〜２０４７ビット目）を出力し、データバス１５０８Ｌを通じて右シフト回路５０５の下位側にデータＡの下位ビット（０ビット目〜１０２３ビット目）を出力する。
【０２０２】
レジスタ選択回路１６０９は、Ｘレジスタ１５２２に制御バス１５３１を通じて読出信号を送り、Ｘレジスタ１５２２からからデータバス１１２に被乗数Ｘを出力させる。
【０２０３】
加算部１６０３は、データバス１５０８Ｕを通じてデータＡの上位ビット（１０２４ビット目〜２０４７ビット目）を受け、データバス１１２を通じて被乗数Ｘが１ビットだけ左にシフトしたデータ（Ｘ≪１）を受けて、これらを加算し、加算結果をデータバス１５０４を通じて右シフト回路５０５の上位側に出力する。
【０２０４】
右シフト回路５０５は、加算部１６０３および選択回路１５１２から受けたデータ（Ａ＋（Ｘ≪１））を１ビットだけ右にシフトし、右シフトしたデータ（（Ａ＋（Ｘ≪１））≫１）をデータバス１５０６を通じてＰレジスタ１０７に出力する。
【０２０５】
上述の加算部１６０３および右シフト回路５０５の処理が終了後、レジスタ選択回路１６０９は、Ｋレジスタ１６２３に制御バス１５３２を通じて読出信号を送り、Ｋレジスタ１６２３からデータバス１２２に零元Ｋを出力させる。
【０２０６】
加算部１６０３は、データバス１５０８Ｕを通じてデータＡの上位ビット（１０２４ビット目〜２０４７ビット目）を受け、データバス１１２を通じて零元Ｋが１ビットだけ左にシフトしたデータ（Ｋ≪１）を受けて、これらを加算し、加算結果をデータバス１５０４を通じて右シフト回路５０５の上位側に出力する。
【０２０７】
右シフト回路５０５は、加算部１６０３および選択回路１５１２から受けたデータ（Ａ＋（Ｋ≪１））を１ビットだけ右にシフトし、右シフトしたデータ（（Ａ＋（Ｋ≪１））≫１）をデータバス１５０６を通じてＱレジスタ１５１７に出力する。
【０２０８】
Ｙ［ｉ］選択回路１５１０は、乗数Ｙのｉビット目であるＹ［ｉ］の値に応じた選択信号Ｓをデータバス１５１１を通じて選択回路１５１２に出力する。Ｙ［ｉ］が「１」のときに選択信号Ｓ（＝１）が出力され、Ｙ［ｉ］が「０」のときに選択信号Ｓ（＝０）が出力される。
【０２０９】
このような処理をｉ＝０から１０２３まで繰返した後、選択回路１５１２は、選択信号Ｓの値、つまりＹ「１０２３］の値が「１」のときには、データＰを選択してデータＡとし、選択信号Ｓが「０」のときには、データＱを選択してデータＡとする。選択回路１５１２は、データバス１５０８Ｕおよびデータバス１１２を通じて、データＡの上位ビット（１０２４ビット目〜２０４７ビット目）をＡレジスタ１５２３に出力し、データバス１５０８Ｌおよびデータバス１１２を通じてデータＡの下位ビット（０ビット目〜１０２３ビット目）をＡレジスタ１５２３に出力する。
【０２１０】
以上のような処理によって、最終的にＡレジスタ１５２３に乗数Ｙと被乗数Ｘとの乗算結果が格納される。
【０２１１】
以上のように、本変形例に係る乗算回路によれば、第３の実施形態と同様に、乗数Ｙのビットが「０」のときに電力消費量が最小となるのを防止することができるので、暗号処理において秘匿データとなる乗数Ｙが特定されるのを防止することができる。また、本変形例に係る乗算回路によれば、第３の実施形態の乗算回路のように２個の左シフト回路を備えるのではなく、１個の左シフト回路を備えればよいので、乗算回路の構成を簡易にすることができる。
【０２１２】
なお、本変形例に係る乗算回路においても、第１の実施形態またはその変形例のように、右シフト回路の代わりに左シフト回路を備えるように変形してもよく、左または右シフトとＰレジスタおよびＱレジスタへの格納の順序を逆になるように変形してもよく、正論理のデータバスの代りに正負論理混在データバスを備えるように変形するものとしてもよく、Ｋレジスタの代わりに零元出力回路を備えるように変形するものとしてもよい。
【０２１３】
［第４の実施形態］
本実施の形態は、剰余演算の途中結果の符合によって加算と減算とを切替えることなく、加算と減算の両方を実行する剰余演算回路に関する。
【０２１４】
（従来の剰余演算回路の剰余演算のアルゴリズム）
図２４は、従来の剰余演算回路の剰余演算のアルゴリズムを示す。同図を参照して、演算の途中結果であるデータＰの値が０以上のときには、｛（Ｐ≪１）＋Ｙ［ｉ］｝からＮを減算する処理が行なわれ、演算の途中結果であるデータＰの値が０未満のときには、｛（Ｐ≪１）＋Ｙ［ｉ］｝とＮとを加算する処理が行なわれる。加算と減算の電力消費量が異なるので、従来の剰余演算回路の剰余演算のアルゴリズムでは、電力消費量を調べることで、加算と減算のいずれが行なわれたかを特定することができ、それによって、演算の途中結果のデータＰの符号、ひいては暗号処理において秘匿データとなる乗数Ｙの特定が可能となる。
【０２１５】
（剰余演算回路１４００の構成）
図２５は、第４の実施形態に係る剰余演算回路の構成を示す。同図を参照して、この剰余演算回路１４００は、レジスタ群１４０１と、レジスタ選択回路１４０９と、Ｙ［ｉ］選択回路１４１０と、加減算器１４０３と、Ｐレジスタ１４０７と、Ｑレジスタ１４１８と、左シフト回路１４０５と、加減算／レジスタ選択回路１４１２とを備える。
【０２１６】
また、この乗算回路１４００は、ｎ（＝１０２４）ビットのデータを伝送し、全ビットが正論理であるデータバス１１２，１４０４，１４０６，１４０８を含む。データバス１１２は、剰余演算回路１４００の外部の制御回路１２と接続する。
【０２１７】
レジスタ群１４０１は、演算に必要なデータを記憶するもので、Ｙレジスタ１４２１と、Ｎレジスタ１４２２と、Ｋレジスタ１４２３と、Ａレジスタ１５２３とからなる。
【０２１８】
Ｙレジスタ１４２１は、１０２４ビットの被除数Ｙを記憶する。Ｙレジスタ１４２１は、被除数Ｙをデータバス１１２を通じてＹ［ｉ］選択回路１４１０に出力する。
【０２１９】
Ｎレジスタ１４２２は、１０２４ビットの除数Ｎを記憶する。Ｎレジスタ１４２２は、除数Ｎをデータバス１１２を通じて加算部１４０３に出力する。
【０２２０】
Ｋレジスタ１４２３は、１０２４ビットの零元Ｋを記憶する。Ｋレジスタ１４２３は、零元Ｋをデータバス１１２を通じて加算部１４０３に出力する。
【０２２１】
Ａレジスタ１５２３は、剰余演算処理の終了後に、乗数Ｙと被乗数Ｘとの剰余演算結果Ａ（１０２４ビット）を記憶する。
【０２２２】
レジスタ選択回路１４０９は、剰余演算時には、制御バス１４３７を通じて読出信号をＮレジスタ１４２２に送り、Ｎレジスタ１４２２から除数Ｎをデータバス１１２に出力させる。レジスタ選択回路１４０９は、補正演算における第１の加算時に、制御バス１４３７を通じて読出信号をＮレジスタ１４２２に送り、Ｎレジスタ１４２２から除数Ｎをデータバス１１２に出力させる。レジスタ選択回路１４０９は、補正演算における第２の加算時に、制御バス１４３６を通じて読出信号をＫレジスタ１４２３に送り、Ｋレジスタ１４２３から零元Ｋをデータバス１１２に出力させる。
【０２２３】
Ｙ［ｉ］選択回路１４１０は、被除数Ｙのｉビット目であるＹ［ｉ］を制御バス１４１１を通じて左シフト回路１４０５に出力する。
【０２２４】
左シフト回路１４０５は、データバス１４０６を通じて受けたデータＡを１ビットだけ左にシフトするとともに、制御バス１４１１を通じて受けたＹ［ｉ］の値を第０ビット目の値とする。左シフト回路１４０５は、データ（（Ａ≪１）＋Ｙ［ｉ］）をデータバス１４０８に出力する。
【０２２５】
加減算／レジスタ選択回路１４１２は、制御バス１４３１を通じて加減算選択信号を加減算器１４０３に出力する。加減算／レジスタ選択回路１４１２は、制御バス１４３２を通じてＰ読出信号およびＰ書込信号をＰレジスタ１４０７に出力する。加減算／レジスタ選択回路１４１２は、制御バス１４３３を通じてＱ読出信号およびＱ書込信号をＱレジスタ１４１８に出力する。
【０２２６】
加減算／レジスタ選択回路１４１２は、剰余演算における読出し時に、記憶している符号データＳが「０」（Ａの符号が正を示す）のときには、Ｑ読出信号を活性化し、記憶している符号データＳが「１」（Ａの符号が負を示す）のときには、Ｐ読出信号を活性化する。
【０２２７】
加減算／レジスタ選択回路１４１２は、剰余演算における第１の加減算時には、記憶している符号データＳが「０」（Ａの符号が正を示す）のときには、加減算選択信号を活性化し、Ｐ書込信号を活性化し、Ｑ書込信号を非活性化し、記憶している符号データＳが「１」（Ａの符号が負を示す）のときには、加減算選択信号を非活性化し、Ｐ書込信号を非活性化し、Ｑ書込信号を活性化する。
【０２２８】
加減算／レジスタ選択回路１４１２は、剰余演算における第２の加減算時には、記憶している符号データが「０」（Ａの符号が正を示す）のときには、加減算選択信号を非活性化し、Ｐ書込信号を非活性化し、Ｑ書込信号を活性化し、記憶している符号データが「１」（Ａの符号が負を示す）のときには、加減算選択信号を活性化し、Ｐ書込信号を活性化し、Ｑ書込信号を非活性化する。
【０２２９】
加減算／レジスタ選択回路１４１２は、補正演算における第１の読出し時に、記憶している符号データＳが「１」（Ａの符号が負を示す）ときには、Ｑ読出信号を活性化し、記憶している符号データＳが「０」（Ａの符号が正を示す）のときには、Ｐ読出信号を活性化する。
【０２３０】
加減算／レジスタ選択回路１４１２は、補正演算における第１の加算時に、加減算選択信号を活性化し、Ｐ書込信号を活性化し、Ｑ書込信号を非活性化する。加減算／レジスタ選択回路１４１２は、補正演算における第２の加算時に、加減算選択信号を活性化し、Ｐ書込信号を非活性化し、Ｑ書込信号を活性化する。
【０２３１】
加減算／レジスタ選択回路１４１２は、補正演算における第２の読出時に、記憶している符号データＳが「１」（Ａの符号が負を示す）ときには、Ｐ読出信号を活性化し、記憶している符号データＳが「０」（Ａの符号が正を示す）ときには、Ｑ読出信号を活性化する。
【０２３２】
加減算／レジスタ選択回路１４１２は、データバス１４０６またはデータバス１４０８を通じてデータＡを受け、データＡの最上位ビットであり、Ａの符号を表わすＡ［１０２３］を新たな符号データＳとして記憶する。
【０２３３】
加減算器１４０３は、データバス１４０８と接続する入力端子１と、データバス１１２と接続する入力端子２とを備える。加減算器１４０３の入力端子１の第ｉビット目（０≦ｉ）は、データバス１４０８の第ｉビット目と接続し、入力端子２の第ｉビット目（０≦ｉ）は、データバス１１２の第ｉビット目と接続する。
【０２３４】
加減算器１４０３は、入力端子１からデータ｛（Ａ≪１）＋Ｙ［ｉ］｝またはデータＡを受け、入力端子２から除数Ｎまたは零元Ｋとを受けて、加減算選択信号が活性化されているときにこれらを加算し、加減算選択信号が非活性化されているときにこれらを減算する。加減算器１４０３は、演算結果をデータバス１４０４に出力する。
【０２３５】
Ｐレジスタ１４０７は、剰余演算の途中結果のデータＰを記憶する。Ｐレジスタ１４０７は、Ｐ書込信号が活性化されているときには、データバス１４０４を通じて受けたデータをデータＰとして記憶する。また、Ｐレジスタ１４０７は、Ｐ読出信号が活性化されているときには、記憶しているデータＰをデータＡとしてデータバス１４０６またはデータバス１４０８に出力する。
【０２３６】
Ｑレジスタ１４１８は、Ｑ書込信号が活性化されているときには、データバス１４０４を通じて受けたデータをデータＱとして記憶する。また、Ｑレジスタ１４１８は、Ｑ読出信号が活性化されているときには、記憶しているデータＱをデータＡとしてデータバス１４０６またはデータバス１４０８に出力する。
【０２３７】
（剰余演算回路１４００の剰余演算のアルゴリズム）
図２６は、剰余演算回路１４００による剰余演算のアルゴリズム（１０２４ビットの場合）を示す。この剰余演算のアルゴリズム６０に基づいて、剰余演算回路１４００の動作を説明する。同図を参照して、加減算／レジスタ選択回路１４１２に記憶されている符号データＳの初期値が減算を指示する値である「１」とする。
【０２３８】
０から１０２３までのｉについて、以下のような剰余演算処理が行なわれる。
【０２３９】
Ｙ［ｉ］選択回路１４１０は、被除数Ｙのｉビット目であるＹ［ｉ］を制御バス１４１１を通じて左シフト回路１４０５に出力する。
【０２４０】
加減算／レジスタ選択回路１４１２は、剰余演算における読出し時に、記憶している符号データＳが「０」（Ａの符号が正を示す）のときには、Ｑ読出信号を活性化する。Ｑレジスタ１４１８は、Ｑ読出信号が活性化により、記憶しているデータＱをデータＡとしてデータバス１４０６を通じて左シフト回路１４０５および加減算／レジスタ選択回路１４１２に出力する。加減算／レジスタ選択回路１４１２は、データバス１４０６を通じてデータＡを受け、データＡの最上位ビットであり、Ａの符号を表わすＡ［１０２３］を新たな符号データＳとして記憶する。
【０２４１】
左シフト回路１４０５は、データバス１４０６を通じて受けたデータＡを１ビットだけ左にシフトするとともに、制御バス１４１１を通じて受けたＹ［ｉ］の値を第０ビット目の値とする。左シフト回路１４０５は、データ（（Ａ≪１）＋Ｙ［ｉ］）をデータバス１４０８に出力する。
【０２４２】
レジスタ選択回路１４０９は、剰余演算時には、Ｎレジスタ１４２２から除数Ｎをデータバス１１２に出力させる。
【０２４３】
次に、剰余演算における第１の加減算のための処理が行なわれる。
【０２４４】
加減算／レジスタ選択回路１４１２は、剰余演算における第１の加減算時には、記憶している符号データＳが「０」（Ａの符号が正を示す）のときには、加減算選択信号を活性化し、Ｐ書込信号を活性化し、Ｑ書込信号を非活性化する。
【０２４５】
加減算器１４０３は、第１の加減算を行なう。すなわち、加減算器１４０３は、データバス１４０８を通じてデータ（（Ａ≪１）＋Ｙ［ｉ］）と、データバス１１２を通じて除数Ｎとを受けて、加減算選択信号が活性化により、これらを加算し、加算結果（（Ａ≪１）＋Ｙ［ｉ］＋Ｎ）をデータバス１４０４に出力する。
【０２４６】
Ｐレジスタ１４０７は、Ｐ書込信号が活性化により、データバス１４０４を通じて受けた加算結果（（Ａ≪１）＋Ｙ［ｉ］＋Ｎ）をデータＰとして記憶する。Ｑレジスタ１４１８は、Ｑ書込信号が非活性化により、データバス１４０４を通じて受けた加算結果（（Ａ≪１）＋Ｙ［ｉ］＋Ｎ）をデータＱとして記憶しない。
【０２４７】
次に、剰余演算における第２の加減算のための処理が行なわれる。
【０２４８】
加減算／レジスタ選択回路１４１２は、剰余演算における第２の加減算時には、記憶している符号データが「０」（Ａの符号が正を示す）のときには、加減算選択信号を非活性化し、Ｐ書込信号を非活性化し、Ｑ書込信号を活性化する。
【０２４９】
加減算器１４０３は、第２の加減算を行なう。すなわち、加減算器１４０３は、データバス１４０８を通じてデータ（（Ａ≪１）＋Ｙ［ｉ］）と、データバス１１２を通じて除数Ｎとを受けて、加減算選択信号が非活性化により、これらを減算し、減算結果（（Ａ≪１）＋Ｙ［ｉ］−Ｎ）をデータバス１４０４に出力する。
【０２５０】
Ｐレジスタ１４０７は、Ｐ書込信号が非活性化により、データバス１４０４を通じて受けた減算結果（（Ａ≪１）＋Ｙ［ｉ］−Ｎ）をデータＰとして記憶しない。Ｑレジスタ１４１８は、Ｑ書込信号が活性化により、データバス１４０４を通じて受けた減算結果（（Ａ≪１）＋Ｙ［ｉ］−Ｎ）をデータＱとして記憶する。
【０２５１】
一方、加減算／レジスタ選択回路１４１２は、剰余演算時における読出時に、記憶している符号データＳが「１」（Ａの符号が負を示す）のときには、Ｐ読出信号を活性化する。Ｐレジスタ１４０７は、Ｐ読出信号が活性化により、記憶しているデータＰをデータＡとしてデータバス１４０６を通じて左シフト回路１４０５および加減算／レジスタ選択回路１４１２に出力する。加減算／レジスタ選択回路１４１２は、データバス１４０６を通じてデータＡを受け、データＡの最上位ビットであり、Ａの符号を表わすＡ［１０２３］を新たな符号データＳとして記憶する。
【０２５２】
左シフト回路１４０５は、受けたデータＡを１ビットだけ左にシフトするとともに、制御バス１４１１を通じて受けたＹ［ｉ］の値を第０ビット目の値とする。左シフト回路１４０５は、データ（（Ａ≪１）＋Ｙ［ｉ］）をデータバス１４０８に出力する。
【０２５３】
レジスタ選択回路１４０９は、剰余演算時には、Ｎレジスタ１４２２から除数Ｎをデータバス１１２に出力させる。
【０２５４】
次に、剰余演算における第１の加減算のための処理が行なわれる。
【０２５５】
加減算／レジスタ選択回路１４１２は、剰余演算における第１の加減算時に、記憶している符号データＳが「１」（Ａの符号が負を示す）のときには、加減算選択信号を非活性化し、Ｐ書込信号を非活性化し、Ｑ書込信号を活性化する。
【０２５６】
加減算器１４０３は、第１の加減算を行なう。すなわち、加減算器１４０３は、データバス１４０８を通じてデータ（（Ａ≪１）＋Ｙ［ｉ］）と、データバス１１２を通じて除数Ｎとを受けて、加減算選択信号が非活性化により、これらを減算し、減算結果（（Ａ≪１）＋Ｙ［ｉ］−Ｎ）をデータバス１４０４に出力する。
【０２５７】
Ｐレジスタ１４０７は、Ｐ書込信号が非活性化により、データバス１４０４を通じて受けた減算結果（（Ａ≪１）＋Ｙ［ｉ］−Ｎ）をデータＰとして記憶しない。Ｑレジスタ１４１８は、Ｑ書込信号が活性化により、データバス１４０４を通じて受けた減算結果（（Ａ≪１）＋Ｙ［ｉ］−Ｎ）をデータＱとして記憶する。
【０２５８】
次に、剰余演算における第２の加減算のための処理が行なわれる。
【０２５９】
加減算／レジスタ選択回路１４１２は、剰余演算における第２の加減算時に、記憶している符号データが「１」（Ａの符号が負を示す）のときには、加減算選択信号を活性化し、Ｐ書込信号を活性化し、Ｑ書込信号を非活性化する。
【０２６０】
加減算器１４０３は、第２の加減算を行なう。加減算器１４０３は、データバス１４０８を通じてデータ（（Ａ≪１）＋Ｙ［ｉ］）と、データバス１１２を通じて除数Ｎとを受けて、加減算選択信号が活性化により、これらを加算し、加算結果（（Ａ≪１）＋Ｙ［ｉ］＋Ｎ）をデータバス１４０４に出力する。
【０２６１】
Ｐレジスタ１４０７は、Ｐ書込信号が活性化により、データバス１４０４を通じて受けた加算結果（（Ａ≪１）＋Ｙ［ｉ］＋Ｎ）をデータＰとして記憶する。Ｑレジスタ１４１８は、Ｑ書込信号が非活性化により、データバス１４０４を通じて受けた加算結果（（Ａ≪１）＋Ｙ［ｉ］＋Ｎ）をデータＱとして記憶しない。
【０２６２】
以上のような処理を０から１０２３までのｉについて行なった後、以下のような補正演算が行なわれる。
【０２６３】
加減算／レジスタ選択回路１４１２は、補正演算における第１の読出し時に、記憶している符号データＳが「１」（Ａの符号が負を示す）ときには、Ｑ読出信号を活性化する。Ｑレジスタ１４１８は、Ｑ読出信号が活性化により、記憶しているデータＱをデータＡとしてデータバス１４０８を通じて加減算器１４０３に出力する。また、Ｑレジスタ１４１８は、データＡの符号（最上位ビット）をデータバス１４０６を通じて加減算／レジスタ選択回路１４１２に出力する。加減算／レジスタ選択回路１４１２は、データＡの符号（最上位ビット）を符号データＳとして記憶する。
【０２６４】
一方、加減算／レジスタ選択回路１４１２は、補正演算における第１の読出し時に、記憶している符号データＳが「１」（Ａの符号が正を示す）のときには、Ｐ読出信号を活性化する。Ｐレジスタ１４０７は、Ｐ読出信号が活性化により、記憶しているデータＰをデータＡとしてデータバス１４０８を通じて加減算器１４０３に出力する。また、Ｐレジスタ１４０７は、データＡの符号（最上位ビット）をデータバス１４０６を通じて加減算／レジスタ選択回路１４１２に出力する。加減算／レジスタ選択回路１４１２は、データＡの符号（最上位ビット）を符号データＳとして記憶する。
【０２６５】
レジスタ選択回路１４０９は、補正演算における第１の加算時に、Ｎレジスタ１４２２から除数Ｎをデータバス１１２に出力させる。
【０２６６】
加減算／レジスタ選択回路１４１２は、補正演算における第１の加算時に、加減算選択信号を活性化し、Ｐ書込信号を活性化し、Ｑ書込信号を非活性化する。
【０２６７】
加減算器１４０３は、データバス１４０８を通じてデータＡと、データバス１１２を通じて除数Ｎとを受けて、加減算選択信号が活性化により、これらを加算し、加算結果（Ａ＋Ｎ）をデータバス１４０４に出力する。
【０２６８】
Ｐレジスタ１４０７は、Ｐ書込信号が活性化により、データバス１４０４を通じて受けた加算結果（Ａ＋Ｎ）をデータＰとして記憶する。Ｑレジスタ１４１８は、Ｑ書込信号が非活性化により、データバス１４０４を通じて受けた加算結果（Ａ＋Ｎ）をデータＱとして記憶しない。
【０２６９】
さらに、レジスタ選択回路１４０９は、補正演算における第２の加算時に、Ｋレジスタ１４２３から零元Ｋをデータバス１１２に出力させる。
【０２７０】
加減算／レジスタ選択回路１４１２は、補正演算における第２の加算時に、加減算選択信号を活性化し、Ｐ書込信号を非活性化し、Ｑ書込信号を活性化する。
【０２７１】
次に、加減算器１４０３は、データバス１４０８を通じてデータＡと、データバス１１２を通じて零元Ｋとを受けて、加減算選択信号が活性化により、これらを加算し、加算結果（Ａ＋Ｋ）をデータバス１４０４に出力する。
【０２７２】
Ｐレジスタ１４０７は、Ｐ書込信号が非活性化により、データバス１４０４を通じて受けた加算結果（Ａ＋Ｋ）をデータＰとして記憶しない。Ｑレジスタ１４１８は、Ｑ書込信号が活性化により、データバス１４０４を通じて受けた加算結果（Ａ＋Ｋ）をデータＱとして記憶する。
【０２７３】
さらに、加減算／レジスタ選択回路１４１２は、補正演算における第２の読出時に、記憶している符号データＳが「１」（Ａの符号が負を示す）ときには、Ｐ読出信号を活性化する。Ｐレジスタ１４０７は、Ｐ読出信号が活性化により、記憶しているデータＰをデータＡとしてデータバス１４０６およびデータバス１１２を通じてＡレジスタ１５２３に出力する。
【０２７４】
一方、加減算／レジスタ選択回路１４１２は、補正演算における第２の読出時に、記憶している符号データＳが「０」（Ａの符号が正を示す）ときには、Ｑ読出信号を活性化する。Ｑレジスタ１４１８は、Ｑ読出信号が活性化により、記憶しているデータＱをデータＡとしてデータバス１４０６およびデータバス１１２を通じてＡレジスタ１５２３に出力する。
【０２７５】
以上のような処理によって、最終的にＡレジスタ１５２３に除数Ｎと被除数Ｙとの剰余演算結果が格納される。
【０２７６】
なお、本実施の形態では、Ａレジスタ１５２３に剰余演算結果が格納されるものとしたが、これに限定するものではなく、Ｙレジスタ１４２１、Ｎレジスタ１４２２、およびＫレジスタ１４２３のいずれかに乗算結果を格納するものとしてもよく、この場合、Ａレジスタ１５２３は不要となる。
【０２７７】
以上のように、本実施の形態に係る剰余演算回路によれば、演算の途中結果であるＰの値に係らず、加算と減算のいずれをも実行するので、電力消費量に基づいて暗号処理において秘匿データとなる被除数Ｙが特定されるのを防止することができる。
【０２７８】
なお、本実施の形態に係る剰余演算回路においても、第１の実施形態またはその変形例のように正論理のデータバスの代りに正負論理混在データバスを備えるように変形するものとしてもよい。
【０２７９】
［第５の実施形態］
本実施の形態は、正負論理混在データによりモンゴメリ乗算剰余演算を行なうモンゴメリ乗算剰余演算回路に関する。
【０２８０】
（モンゴメリ乗算剰余演算回路の構成）
図２７は、第５の実施形態に係るモンゴメリ乗算剰余演算回路の構成を示す。同図を参照して、このモンゴメリ乗算剰余演算回路６００は、モンゴメリのアルゴリズムによって乗算剰余演算を行なう回路であり、レジスタ群６０１と、Ｙ［ｉ］評価部６０９と、加算部６０３と、右シフト回路６０５と、Ｐレジスタ６０７と、バス論理変換回路１５０とを備える。
【０２８１】
また、このモンゴメリ乗算剰余回路６００は、ｎ（＝１０２４）ビットのデータを伝送し、偶数ビットが正論理で、奇数ビットが負論理である正負論理混在データバス１０２，１０４，１０６，１０８と、ｎビットのデータを伝送し、全ビットが正論理であるデータバス１１２を含む。データバス１１２は、モンゴメリ乗算剰余回路６００の外部の制御回路１２と接続する。
【０２８２】
レジスタ群６０１は、演算に必要なデータを記憶するもので、Ｙレジスタ６２１と、Ｘレジスタ６２２と、Ｋレジスタ６２３と、Ｎレジスタ６２４と、（Ｘ＋Ｎ）レジスタ６２５とからなる。
【０２８３】
Ｙレジスタ６２１は、１０２４ビットの乗数Ｙを記憶する。Ｙレジスタ６２１は、データバス１１２を通じてＹ［ｉ］評価部６０９に乗数Ｙを出力する。
【０２８４】
Ｘレジスタ６２２は、１０２４ビットの被乗数Ｘを記憶する。Ｘレジスタ６２２は、Ｙ［ｉ］評価部６０９から制御バス６３４を通じて読出信号を受けると、被乗数Ｘを正負論理混在データバス１０２に出力する。また、Ｘレジスタ６２２は、被乗数Ｘの第０ビット目であるＸ［０］を制御バス６１１を通じてＹ［ｉ］評価部６０９に出力する。
【０２８５】
Ｋレジスタ６２３は、１０２４ビットの零元Ｋを記憶する。Ｋレジスタ６２３は、Ｙ［ｉ］評価部６０９から制御バス６３３を通じて読出信号を受けると、零元Ｋを正負論理混在データバス１０２に出力する。
【０２８６】
Ｎレジスタ６２４は、１０２４ビットの除数Ｎを記憶する。Ｎレジスタ６２４は、Ｙ［ｉ］評価部６０９から制御バス６３２を通じて読出信号を受けると、除数Ｎを正負論理混在データバス１０２に出力する。
【０２８７】
（Ｘ＋Ｎ）レジスタ６２５は、１０２４ビットのデータ（Ｘ＋Ｎ）を記憶する。（Ｘ＋Ｎ）レジスタ６２５は、Ｙ［ｉ］評価部６０９から制御バス６３１を通じて読出信号を受けると、除数Ｎを正負論理混在データバス１０２に出力する。
【０２８８】
Ｘレジスタ６２２、Ｋレジスタ６２３、Ｎレジスタ６２４、（Ｘ＋Ｎ）レジスタ６２５の出力信号の論理は、図５に示すＸレジスタ１２２の出力信号の論理と同様である。
【０２８９】
Ｙ［ｉ］評価部６０９は、データバスを通じて乗数Ｙを受け、制御バス６１１を通じてＸ［０］を受け、制御バス６１０を通じてＰ［０］を受けて、これらの値よりデータＭ＝Ｐ［０］＾（Ｙ［ｉ］・Ｘ［０］）を算出する。Ｙ［ｉ］評価部６０９は、Ｙ［ｉ］＝０、かつＭ＝０のときには、Ｋレジスタ６２３に制御バス６３３を通じて読出信号を送り、Ｙ［ｉ］＝０、かつＭ＝１のときには、Ｎレジスタ６２４に制御バス６３２を通じて読出信号を送り、Ｙ［ｉ］＝１、かつＭ＝０のときには、Ｘレジスタ６２２に制御バス６３４を通じて読出信号を送り、Ｙ［ｉ］＝１、かつＭ＝１のときには、（Ｘ＋Ｎ）レジスタ６２５に制御バス６３１を通じて読出信号を送る。
【０２９０】
加算部６０３は、正負論理混在データバス１０８と接続する入力端子１と、正負論理混在データバス１０２と接続する入力端子２とを備える。入力端子１の第ｉビット目（０≦ｉ）は、正負論理混在データバス１０８の第ｉビット目と接続する。また、入力端子２の第ｉビット目（０≦ｉ）は、正負論理混在データバス１０２の第ｉビット目と接続する。
【０２９１】
加算部６０３は、入力端子１からデータＰを受け、入力端子２からＫ、Ｎ、Ｘ、または（Ｘ＋Ｎ）を受けて、これらを加算する。加算部６０３は、加算結果をデータバス１０４を通じて右シフト回路６０５に出力する。加算部６０３の加算処理の論理は、加算部１０００と同一なので、ここでは説明を繰返さない。
【０２９２】
右シフト回路６０５は、正負論理混在データバス１０４を通じて受けたデータを１ビットだけ右にシフトし、右シフトしたデータを正負論理混在データバス１０６を通じてＰレジスタ６０７に出力する。
【０２９３】
Ｐレジスタ６０７は、正負論理混在データバス１０６を通じて受けた右シフトしたデータをデータＰとして記憶する。また、Ｐレジスタ６０７は、記憶しているデータＰを正負論理混在データバス１０８を通じて加算部６０３へ出力する。また、Ｐレジスタ６０７は、記憶しているデータＰの第０ビット目であるＰ［０］を制御バス６１０を通じてＹ［ｉ］評価部６０９に出力する。
【０２９４】
バス論理変換回路１５０は、正負論理混在データバス１０８から受けたデータの論理をデータバス１１２の論理に変換してデータバス１１２に出力する。また、バス論理変換回路１５０は、データバス１１２から受けたデータの論理を正負論理混在データバス１０８の論理に変換して、正負論理混在データバス１０８に出力する。
【０２９５】
（モンゴメリ乗算剰余演算回路６００のモンゴメリ乗算剰余演算のアルゴリズム）
図２８は、モンゴメリ乗算剰余演算回路６００によるモンゴメリ乗算剰余演算のアルゴリズム（１０２４ビットの場合）を示す。このモンゴメリ乗算剰余演算のアルゴリズム６１に基づいて、モンゴメリ乗算剰余演算回路６００の動作を説明する。
【０２９６】
０〜１０２３までのｉについて以下の処理が行なわれる。
【０２９７】
Ｙレジスタ６２１は、データバス１１２を通じてＹ［ｉ］評価部６０９に乗数Ｙを出力する。
【０２９８】
Ｘレジスタ６２２は、被乗数Ｘの第０ビット目であるＸ［０］を制御バス６１１に出力し、Ｐレジスタ６０７は、記憶しているデータＰの第０ビット目であるＰ［０］を制御バス６１０を通じてＹ［ｉ］評価部６０９に出力する。
【０２９９】
Ｙ［ｉ］評価部６０９は、データバスを通じて乗数Ｙを受け、制御バス６１１を通じてＸ［０］を受け、制御バス６１０を通じてＰ［０］を受けて、これらの値よりデータＭ＝Ｐ［０］＾（Ｙ［ｉ］・Ｘ［０］）を算出する。
【０３００】
Ｙ［ｉ］評価部６０９は、Ｙ［ｉ］＝０、かつＭ＝０のときには、Ｋレジスタ６２３に制御バス６３３を通じて読出信号を送り、零元Ｋを正負論理混在データバス１０２に出力させる。
【０３０１】
Ｙ［ｉ］評価部６０９は、Ｙ［ｉ］＝０、かつＭ＝１のときには、Ｎレジスタ６２４に制御バス６３２を通じて読出信号を送り、除数Ｎを正負論理混在データバス１０２に出力させる。
【０３０２】
Ｙ［ｉ］評価部６０９は、Ｙ［ｉ］＝１、かつＭ＝０のときには、Ｘレジスタ６２２に制御バス６３４を通じて読出信号を送り、被乗数Ｘを正負論理混在データバス１０２に出力させる。
【０３０３】
Ｙ［ｉ］評価部６０９は、Ｙ［ｉ］＝１、かつＭ＝１のときには、（Ｘ＋Ｎ）レジスタ６２５に制御バス６３１を通じて読出信号を送り、データ（Ｘ＋Ｎ）を正負論理混在データバス１０２に出力させる。
【０３０４】
Ｐレジスタ６０７は、記憶しているデータＰを正負論理混在データバス１０８を通じて加算部６０３へ出力する。
【０３０５】
加算部６０３は、正負論理混在データバス１０８を通じてデータＰを受け、正負論理混在データバス１０２を通じてＫ、Ｎ、Ｘ、または（Ｘ＋Ｎ）を受けて、受けたデータを加算し、加算結果を正負論理混在データバス１０４を通じて右シフト回路６０５に出力する。
【０３０６】
右シフト回路６０５は、加算部６０３から受けたデータを１ビットだけ右にシフトし、右シフトしたデータを正負論理混在データバス１０６を通じてＰレジスタ６０７に出力する。
【０３０７】
Ｐレジスタ６０７は、正負論理混在データバス１０６を通じて受けた右シフトしたデータをデータＰとして記憶する。
【０３０８】
このような処理をｉ＝０から１０２３まで繰返すことによって、最終的にＰレジスタ６０７に、モンゴメリ乗算剰余演算結果が格納される。
【０３０９】
以上のように、本変形例に係るモンゴメリ乗算剰余演算回路によれば、乗数Ｙのビットが「０」のときに、電力消費量が最小となるのを防止することができるので、暗号処理において秘匿データとなる乗数Ｙが特定されるのを防止することができる。
【０３１０】
なお、本実施の形態に係るモンゴメリ乗算剰余回路においても、第１の実施形態またはその変形例のように、右シフトとＰレジスタへの格納の順序を逆になるように変形してもよい。
【０３１１】
［第５の実施形態の変形例］
本変形例は、レジスタの使用に汎用を持たせたモンゴメリ乗算剰余演算回路に関する。
【０３１２】
（モンゴメリ乗算剰余演算回路の構成）
図２９は、第５の実施形態の変形例に係るモンゴメリ乗算剰余演算回路の構成を示す。同図において、図２７のモンゴメリ乗算剰余演算回路６００における構成要素と同一の構成要素には、図２７と同一の符号を付している。同図を参照して、このモンゴメリ乗算剰余演算回路７００が図２７のモンゴメリ乗算剰余演算回路６００と相違する点は、セレクタ７２１を備え、専用のレジスタであるＸレジスタ６２２、Ｋレジスタ６２３、Ｎレジスタ６２４、および（Ｘ＋Ｎ）レジスタ６２５の代りに、汎用のレジスタであるＧ１レジスタ７２２、Ｇ２レジスタ７２３、Ｇ３レジスタ７２４、およびＧ４レジスタ７２５を備えた点である。
【０３１３】
Ｇ１レジスタ７２２、Ｇ２レジスタ７２３、Ｇ３レジスタ７２４、およびＧ４レジスタ７２５は、１０２４ビットの被乗数Ｋ、零元Ｋ、除数Ｎ、およびデータ（Ｘ＋Ｎ）のうちのそれぞれ互いに異なるデータを記憶する。
【０３１４】
Ｇ１レジスタ７２２、Ｇ２レジスタ７２３、Ｇ３レジスタ７２４、およびＧ４レジスタ７２５の出力信号の論理は、図５に示すＸレジスタ１２２の出力信号の論理と同様である。
【０３１５】
セレクタ７２１は、Ｇ１レジスタ７２２、Ｇ２レジスタ７２３、Ｇ３レジスタ７２４、およびＧ４レジスタ７２５から、保存しているデータの第０ビット目を受ける。セレクタ７２１は、これらの第０ビット目のデータのうち、被乗数Ｘを保存しているレジスタから出力された第０ビット目のデータを選択して、制御バス７１１を通じてＹ［ｉ］評価部６０９に出力する。
【０３１６】
また、セレクタ７２１は、Ｙ［ｉ］評価部６０９から制御バス７３４を通じて被乗数Ｘを保存しているレジスタの読出信号を受けると、被乗数Ｘを保存しているレジスタへその読出信号を送る。また、セクレク７０１は、Ｙ［ｉ］評価部６０９から制御バス７３３を通じて零元Ｋを保存しているレジスタの読出信号を受けると、零元Ｋを保存しているレジスタへその読出信号を送る。また、セクレク７０１は、Ｙ［ｉ］評価部６０９から制御バス７３２を通じて除数Ｎを保存しているレジスタの読出信号を受けると、除数Ｎを保存しているレジスタへその読出信号を送る。また、セクレク７０１は、Ｙ［ｉ］評価部６０９から制御バス７３１を通じてデータ（Ｘ＋Ｎ）を保存しているレジスタの読出信号を受けると、データ（Ｘ＋Ｎ）を保存しているレジスタへその読出し信号を送る。
【０３１７】
以上のように、本変形例に係るモンゴメリ乗算剰余演算回路によれば、第５の実施形態と同様に、乗数Ｙのビットが「０」のときに、電力消費量が最小となるのを防止することができるので、暗号処理において秘匿データとなる乗数Ｙが特定されるのを防止することができる。また、本変形例では、第５の実施形態のように、被乗数Ｘを記憶するレジスタをＹ［ｉ］評価部６０９へ出力を送るＸレジスタ７２２に固定されないので、どのレジスタにどのようなデータを記憶するかというレジスタの使用に汎用性を持たせることができる。
【０３１８】
［第６の実施形態］
本実施の形態は、乗数Ｙの２ビット分を同時に処理することで、モンゴメリ乗算剰余演算処理を高速化したモンゴメリ乗算剰余演算回路に関する。
【０３１９】
（モンゴメリ乗算剰余演算回路の構成）
図３０は、第６の実施形態に係るモンゴメリ乗算剰余演算回路の構成を示す。同図を参照して、このモンゴメリ乗算剰余演算回路９００は、レジスタ群９０１と、Ｙ［ｉ＋１，ｉ］評価部９０９と、加算部１２００と、２ビット右シフト回路９０５と、Ｐレジスタ９０７とを備える。
【０３２０】
また、このモンゴメリ乗算剰余回路９００は、ｎ（＝１０２４）ビットのデータを伝送し、偶数ビットが正論理で、奇数ビットが負論理である正負論理混在データバス１０２ａ１０２ｂ，１０２ｃ，１０４，１０６，１０８と、ｎビットのデータを伝送し、全ビットが正論理であるデータバス１１２を含む。データバス１１２は、モンゴメリ乗算剰余回路９００の外部の制御回路１２と接続する。
【０３２１】
レジスタ群９０１は、演算に必要なデータを記憶するもので、Ｙレジスタ６２１と、Ｘレジスタ９２２と、Ｋレジスタ９２３と、Ｎレジスタ９２４と、（Ｘ＋Ｎ）レジスタ９２５とからなる。
【０３２２】
Ｙレジスタ６２１は、１０２４ビットの乗数Ｙを記憶する。Ｙレジスタ６２１は、データバス１１２を通じてＹ［ｉ＋１，ｉ］評価部９０９に乗数Ｙを出力する。
【０３２３】
Ｘレジスタ９２２は、１０２４ビットの被乗数Ｘを記憶する。Ｘレジスタ９２２は、Ｙ［ｉ＋１，ｉ］評価部９０９から制御バス６３４を通じて３ビットの読出信号を受ける。Ｘレジスタ９２２は、読出信号の第２ビットが「１」のとき被乗数Ｘを正負論理混在データバス１０２ａに出力し、読出信号の第１ビットが「１」のとき被乗数Ｘを正負論理混在データバス１０２ｂに出力し、読出信号の第０ビットが「１」のとき被乗数Ｘを正負論理混在データバス１０２ｃに出力する。また、Ｘレジスタ９２２は、被乗数Ｘの第０ビット目および第１ビット目であるＸ［１，０］を制御バス９１１を通じてＹ［ｉ＋１，ｉ］評価部９０９に出力する。
【０３２４】
Ｋレジスタ９２３は、１０２４ビットの零元Ｋを記憶する。Ｋレジスタ９２３は、Ｙ［ｉ＋１，ｉ］評価部９０９から制御バス９３３を通じて３ビットの読出信号を受ける。Ｋレジスタ９２３は、読出信号の第２ビットが「１」のとき零元Ｋを正負論理混在データバス１０２ａに出力し、読出信号の第１ビットが「１」のとき零元Ｋを正負論理混在データバス１０２ｂに出力し、読出信号の第０ビットが「１」のとき零元Ｋを正負論理混在データバス１０２ｃに出力する。
【０３２５】
Ｎレジスタ９２４は、１０２４ビットの除数Ｎを記憶する。Ｎレジスタ９２４は、Ｙ［ｉ＋１，ｉ］評価部９０９から制御バス９３２を通じて３ビットの読出信号を受ける。Ｎレジスタ９２４は、読出信号の第２ビットが「１」のとき除数Ｎを正負論理混在データバス１０２ａに出力し、読出信号の第１ビットが「１」のとき除数Ｎを正負論理混在データバス１０２ｂに出力し、読出信号の第０ビットが「１」のとき除数Ｎを正負論理混在データバス１０２ｃに出力する。
【０３２６】
（Ｘ＋Ｎ）レジスタ９２５は、１０２４ビットのデータ（Ｘ＋Ｎ）を記憶する。（Ｘ＋Ｎ）レジスタ９２５は、Ｙ［ｉ＋１，ｉ］評価部９０９から制御バス９３１を通じて３ビットの読出信号を受ける。（Ｘ＋Ｎ）レジスタ９２５は、読出信号の第２ビットが「１」のときデータ（Ｘ＋Ｎ）を正負論理混在データバス１０２ａに出力し、読出信号の第１ビットが「１」のときデータ（Ｘ＋Ｎ）を正負論理混在データバス１０２ｂに出力し、読出信号の第０ビットが「１」のときデータ（Ｘ＋Ｎ）を正負論理混在データバス１０２ｃに出力する。
【０３２７】
Ｘレジスタ９２２、Ｋレジスタ９２３、Ｎレジスタ９２４、および（Ｘ＋Ｎ）レジスタ９２５の出力信号の論理は、図５に示すＸレジスタ１２２の出力信号の論理と同様である。
【０３２８】
Ｙ［ｉ＋１，ｉ］評価部９０９は、データバス１１２を通じて乗数Ｙを受け、制御バス９１１を通じてＸ［１，０］を受け、制御バス９１０を通じてＰ［１，０］を受けて、これらの値よりデータＭ［０］＝Ｐ［０］＾（Ｙ［ｉ］・Ｘ［０］）と、データＭＣ＝Ｐ［０］・Ｙ［ｉ］・Ｘ［０］と、データＭ［１］＝Ｐ［１］＾（Ｙ［ｉ］・Ｘ［１］）＾（Ｙ［ｉ＋１］・Ｘ［０］）＾ＭＣ＾Ｍ［０］＾（Ｍ［０］・Ｘ［１］）とを算出する。
【０３２９】
Ｙ［ｉ＋１，ｉ］評価部９０９は、Ｙ［ｉ＋１，ｉ］＝００、Ｍ［０］＝０、かつＭ［１］＝０のときには、Ｋレジスタ９２３に読出信号（「１１１」）を送る。Ｙ［ｉ＋１，ｉ］評価部９０９は、Ｙ［ｉ＋１，ｉ］＝００、Ｍ［０］＝０、かつＭ［１］＝１のときには、Ｋレジスタ９２３に読出信号（“１０１”）を送り、Ｎレジスタ９２４に読出信号（“０１０”）を送る。Ｙ［ｉ＋１，ｉ］評価部９０９は、Ｙ［ｉ＋１，ｉ］＝００、Ｍ［０］＝１、かつＭ［１］＝０のときには、Ｎレジスタ９２４に読出信号（“１００”）を送り、Ｋレジスタ９２３に読出信号（“０１１”）を送る。Ｙ［ｉ＋１，ｉ］評価部９０９は、Ｙ［ｉ＋１，ｉ］＝００、Ｍ［０］＝１、かつＭ［１］＝１のときには、Ｎレジスタ９２４に読出信号（“１１０”）を送り、Ｋレジスタ９２３に読出信号（“００１”）を送る。
【０３３０】
Ｙ［ｉ＋１，ｉ］評価部９０９は、Ｙ［ｉ＋１，ｉ］＝０１、Ｍ［０］＝０、かつＭ［１］＝０のときには、Ｘレジスタ９２２に読出信号（“１００”）を送り、Ｋレジスタ９２３に読出信号（“０１１”）を送る。Ｙ［ｉ＋１，ｉ］評価部９０９は、Ｙ［ｉ＋１，ｉ］＝０１、Ｍ［０］＝０、かつＭ［１］＝１のときには、Ｘレジスタ９２２に読出信号（“１００”）を送り、Ｎレジスタ９２４に読出信号（“０１０”）を送り、Ｋレジスタ９２３に読出信号（“００１”）を送る。Ｙ［ｉ＋１，ｉ］評価部９０９は、Ｙ［ｉ＋１，ｉ］＝０１、Ｍ［０］＝１、かつＭ［１］＝０のときには、（Ｘ＋Ｎ）レジスタ９２５に読出信号（“１００”）を送り、Ｋレジスタ９２３に読出信号（“０１１”）を送る。Ｙ［ｉ＋１，ｉ］評価部９０９は、Ｙ［ｉ＋１，ｉ］＝０１、Ｍ［０］＝１、かつＭ［１］＝１のときには、（Ｘ＋Ｎ）レジスタ９２５に読出信号（“１００”）を送り、Ｎレジスタ９２４に読出信号（“０１０”）を送り、Ｋレジスタ９２３に読出信号（“００１”）を送る。
【０３３１】
Ｙ［ｉ＋１，ｉ］評価部９０９は、Ｙ［ｉ＋１，ｉ］＝１０、Ｍ［０］＝０、かつＭ［１］＝０のときには、Ｋレジスタ９２３に読出信号（“１１０”）を送り、Ｘレジスタ９２２に読出信号（“００１”）を送る。Ｙ［ｉ＋１，ｉ］評価部９０９は、Ｙ［ｉ＋１，ｉ］＝１０、Ｍ［０］＝０、かつＭ［１］＝１のときには、Ｋレジスタ９２３に読出信号（“１００”）を送り、Ｎレジスタ９２４に読出信号（“０１０”）を送り、Ｘレジスタ９２２に読出信号（“００１”）を送る。Ｙ［ｉ＋１，ｉ］評価部９０９は、Ｙ［ｉ＋１，ｉ］＝１０、Ｍ［０］＝１、かつＭ［１］＝０のときには、Ｎレジスタ９２４に読出信号（“１００”）を送り、Ｋレジスタ９２３に読出信号（“０１０”）を送り、Ｘレジスタ９２２に読出信号（“００１”）を送る。Ｙ［ｉ＋１，ｉ］評価部９０９は、Ｙ［ｉ＋１，ｉ］＝１０、Ｍ［０］＝１、かつＭ［１］＝１のときには、Ｎレジスタ９２４に読出信号（“１１０”）を送り、Ｘレジスタ９２２に読出信号（“００１”）を送る。
【０３３２】
Ｙ［ｉ＋１，ｉ］評価部９０９は、Ｙ［ｉ＋１，ｉ］＝１１、Ｍ［０］＝０、かつＭ［１］＝０のときには、Ｘレジスタ９２２に読出信号（“１０１”）を送り、Ｋレジスタ９２３に読出信号（“０１０”）を送る。Ｙ［ｉ＋１，ｉ］評価部９０９は、Ｙ［ｉ＋１，ｉ］＝１１、Ｍ［０］＝０、かつＭ［１］＝１のときには、Ｘレジスタ９２２に読出信号（“１０１”）を送り、Ｎレジスタ９２４に読出信号（“０１０”）を送る。
【０３３３】
Ｙ［ｉ＋１，ｉ］評価部９０９は、Ｙ［ｉ＋１，ｉ］＝１１、Ｍ［０］＝１、かつＭ［１］＝０のときには、（Ｘ＋Ｎ）レジスタ９２５に読出信号（“１００”）を送り、Ｋレジスタ９２３に読出信号（“０１０”）を送り、Ｘレジスタ９２２に読出信号（“００１”）を送る。Ｙ［ｉ＋１，ｉ］評価部９０９は、Ｙ［ｉ＋１，ｉ］＝１１、Ｍ［０］＝１、かつＭ［１］＝１のときには、（Ｘ＋Ｎ）レジスタ９２５に読出信号（“１００”）を送り、Ｎレジスタ９２４に読出信号（“０１０”）を送り、Ｘレジスタ９２２に読出信号（“００１”）を送る。
【０３３４】
加算部１２００は、正負論理混在データバス１０８と接続する入力端子１と、正負論理混在データバス１０２ａと接続する入力端子２と、正負論理混在データバス１０２ｂと接続する入力端子３と、正負論理混在データバス１０２ｃと接続する入力端子４とを備える。入力端子１の第ｉビット目（０≦ｉ）は、正負論理混在データバス１０８の第ｉビット目と接続する。入力端子２の第ｉビット目（０≦ｉ）は、正負論理混在データバス１０２ａの第ｉビット目と接続する。また、入力端子３の第ｉビット目（１≦ｉ）は、正負論理混在データバス１０２ｂの第（ｉ−１）ビット目と接続し、入力端子３の第０ビット目は、「０」に固定される。また、入力端子４の第ｉビット目（１≦ｉ）は、正負論理混在データバス１０２ｃの第（ｉ−１）ビット目と接続し、入力端子４の第０ビット目は、「０」に固定される。
【０３３５】
加算部１２００は、正負論理混在データバス１０２ａを通じて被乗数Ｘ、零元Ｋ、除数Ｎ、またはデータ（Ｘ＋Ｎ）を受け、正負論理混在データバス１０２ｂを通じて被乗数Ｘ、零元Ｋ、除数Ｎ、またはデータ（Ｘ＋Ｎ）を１ビットだけ左にシフトされたデータを受け、正負論理混在データバス１０２ｃを通じて被乗数Ｘ、零元Ｋ、除数Ｎ、またはデータ（Ｘ＋Ｎ）を１ビットだけ左にシフトされたデータを受け、正負論理混在データバス１０８を通じてＰレジスタ９０７内のデータの上位ビット（１０２４ビット目〜２０４８ビット目）を受け、正負論理混在データバス１０２ａ，１０２ｂ，１０２ｃ，１０８の論理に適合した加算を行ない、加算結果を正論理混在データバス１０４に出力する。
【０３３６】
（加算部１２００）
図３１は、加算部１２００の構成を示す。同図では、代表的に第（ｍ−１）ビット、第ｍビット、および第（ｍ＋１）ビットの加算に関する部分を示している。この加算部１２００は、前段に加算回路（正論理キャリー負論理）１２０１、加算回路（負論理キャリー正論理）１２０２、および加算回路（正論理キャリー負論理）１２０３を含み、中段に加算回路（正論理キャリー負論理）１２０４、加算回路（負論理キャリー正論理）１２０５、および加算回路（正論理キャリー負論理）１２０６を含み、後段に加算回路（正論理キャリー負論理）１２０７、加算回路（負論理キャリー正論理）１２０８、および加算回路（正論理キャリー負論理）１２０９を含む。
【０３３７】
前段の第（ｍ−１）ビット目を処理する加算回路（正論理キャリー負論理）１２０１は、正負論理混在データバス１０２ａの第（ｍ−１）ビット目の正論理の入力ｉｎ２と、正負論理混在データバス１０２ｂの第（ｍ−１）ビット目の正論理の入力ｉｎ３と、正負論理混在データバス１０２ｃの第（ｍ−１）ビット目の正論理の入力ｉｎ４とを受けて、これらを加算する。加算回路（正論理キャリー負論理）１２０１は、正論理の加算結果ｏｕｔを中段の第（ｍ−１）ビット目を処理する加算回路（正論理キャリー負論理）１２０４に出力し、負論理のキャリーｃｏｕｔＢを中段の第ｍビット目を処理する加算回路（負論理キャリー正論理）１２０５に出力する。
【０３３８】
前段の第ｍビット目を処理する加算回路（負論理キャリー正論理）１２０２は、正負論理混在データバス１０２ａの第ｍビット目の負論理の入力ｉｎＢ２と、正負論理混在データバス１０２ｂの第ｍビット目の負論理の入力ｉｎＢ３と、正負論理混在データバス１０２ｃの第ｍビット目の負論理の入力ｉｎＢ４とを受けて、これらを加算する。加算回路（負論理キャリー正論理）１２０２は、負論理の加算結果ｏｕｔＢを中段の第ｍビット目を処理する加算回路（負論理キャリー正論理）１２０５に出力し、正論理のキャリーｃｏｕｔを中段の第（ｍ＋１）ビット目を処理する加算回路（正論理キャリー負論理）１２０６に出力する。
【０３３９】
前段の第（ｍ＋１）ビット目を処理する加算回路（正論理キャリー負論理）１２０３は、正負論理混在データバス１０２ａの第（ｍ＋１）ビット目の正論理の入力ｉｎ２と、正負論理混在データバス１０２ｂの第（ｍ＋１）ビット目の正論理の入力ｉｎ３と、正負論理混在データバス１０２ｃの第（ｍ＋１）ビット目の正論理の入力ｉｎ４とを受けて、これらを加算する。加算回路（正論理キャリー負論理）１２０３は、正論理の加算結果ｏｕｔを中段の第（ｍ＋１）ビット目を処理する加算回路（正論理キャリー負論理）１２０６に出力し、負論理のキャリーｃｏｕｔＢを図示しない中段の第（ｍ＋２）ビット目を処理する加算回路（負論理キャリー正論理）に出力する。
【０３４０】
中段の第（ｍ−１）ビット目を処理する加算回路（正論理キャリー負論理）１２０４は、正負論理混在データバス１０８の第（ｍ−１）ビット目の正論理の入力ｉｎ１と、前段の第（ｍ−１）ビット目を処理する加算回路（正論理キャリー負論理）１２０１から正論理の加算結果ｏｕｔを受け、図示しない前段の第（ｍ−２）ビット目を処理する加算回路（負論理キャリー正論理）から正論理のキャリーｃｏｕｔを受けて、これらを加算する。加算回路（正論理キャリー負論理）１２０４は、正論理の加算結果ｏｕｔを後段の第（ｍ−１）ビット目を処理する加算回路（正論理キャリー負論理）１２０７に出力し、負論理のキャリーｃｏｕｔＢを後段の第ｍビット目を処理する加算回路（負論理キャリー正論理）１２０８に出力する。
【０３４１】
中段の第ｍビット目を処理する加算回路（負論理キャリー正論理）１２０５は、正負論理混在データバス１０８の第ｍビット目の負論理の入力ｉｎＢ１と、前段の第ｍビット目を処理する加算回路（負論理キャリー正論理）１２０２から負論理の加算結果ｏｕｔＢを受け、前段の第（ｍ−１）ビット目を処理する加算回路（負論理キャリー正論理）１２０２から負論理のキャリーｃｏｕｔＢを受けて、これらを加算する。加算回路（負論理キャリー正論理）１２０５は、負論理の加算結果ｏｕｔＢを後段の第ｍビット目を処理する加算回路（負論理キャリー正論理）１２０８に出力し、正論理のキャリーｃｏｕｔを後段の第（ｍ＋１）ビット目を処理する加算回路（正論理キャリー負論理）１２０９に出力する。
【０３４２】
中段の第（ｍ＋１）ビット目を処理する加算回路（正論理キャリー負論理）１２０６は、正負論理混在データバス１０８の第（ｍ＋１）ビット目の正論理の入力ｉｎ１と、前段の第（ｍ＋１）ビット目を処理する加算回路（正論理キャリー負論理）１２０３から正論理の加算結果ｏｕｔを受け、前段の第ｍビット目を処理する加算回路（正論理キャリー負論理）１２０３から正論理のキャリーｃｏｕｔを受けて、これらを加算する。加算回路（正論理キャリー負論理）１２０６は、正論理の加算結果ｏｕｔを後段の第（ｍ＋１）ビット目を処理する加算回路（正論理キャリー負論理）１２０９に出力し、負論理のキャリーｃｏｕｔＢを図示しない後段の第（ｍ＋２）ビット目を処理する加算回路（負論理キャリー正論理）に出力する。
【０３４３】
後段の第（ｍ−１）ビット目を処理する加算回路（正論理キャリー負論理）１２０７は、中段の第（ｍ−１）ビット目を処理する加算回路（正論理キャリー負論理）１２０４から正論理の加算結果ｏｕｔを受け、図示しない中段の第（ｍ−２）ビット目を処理する加算回路（負論理キャリー正論理）から正論理のキャリーｃｏｕｔを受け、図示しない後段の第（ｍ−２）ビット目を処理する加算回路（負論理キャリー正論理）から正論理のキャリーｃｏｕｔを受けて、これらを加算する。加算回路（正論理キャリー負論理）１２０７は、正論理の加算結果ｏｕｔを正負論理混在データバス１０４に出力し、負論理のキャリーｃｏｕｔＢを後段の第ｍビット目を処理する加算回路（負論理キャリー正論理）１２０８に出力する。
【０３４４】
後段の第ｍビット目を処理する加算回路（負論理キャリー正論理）１２０８は、中段の第ｍビット目を処理する加算回路（負論理キャリー正論理）１２０５から負論理の加算結果ｏｕｔＢを受け、中段の第（ｍ−１）ビット目を処理する加算回路（正論理キャリー負論理）１２０４から負論理のキャリーｃｏｕｔＢを受け、後段の第（ｍ−１）ビット目を処理する加算回路（正論理キャリー負論理）１２０７から負論理のキャリーｃｏｕｔＢを受けて、これらを加算する。加算回路（負論理キャリー正論理）１２０８は、負論理の加算結果ｏｕｔを正負論理混在データバス１０４に出力し、正論理のキャリーｃｏｕｔを後段の第（ｍ＋１）ビット目を処理する加算回路（正論理キャリー負論理）１２０９に出力する。
【０３４５】
後段の第（ｍ＋１）ビット目を処理する加算回路（正論理キャリー負論理）１２０９は、中段の第（ｍ＋１）ビット目を処理する加算回路（正論理キャリー負論理）１２０６から正論理の加算結果ｏｕｔを受け、中段の第ｍビット目を処理する加算回路（負論理キャリー正論理）１２０５から正論理のキャリーｃｏｕｔを受け、後段の第（ｍ＋１）ビット目を処理する加算回路（負論理キャリー正論理）１２０９から正論理のキャリーｃｏｕｔを受けて、これらを加算する。加算回路（正論理キャリー負論理）１２０９は、正論理の加算結果ｏｕｔを正負論理混在データバス１０４に出力し、負論理のキャリーｃｏｕｔＢを図示しない後段の第（ｍ＋２）ビット目を処理する加算回路（負論理キャリー正論理）に出力する。
【０３４６】
２ビット右シフト回路９０５は、正負論理混在データバス１０４を通じて加算部１２００から受けたデータを２ビットだけ右にシフトし、右シフトしたデータを正負論理混在データバス１０６を通じてＰレジスタ９０７に出力する。
【０３４７】
Ｐレジスタ９０７は、正負論理混在データバス１０６を通じて受けた右シフトしたデータをデータＰとして記憶する。また、Ｐレジスタ９０７は、記憶しているデータＰを正負論理混在データバス１０８を通じて加算部１２００へ出力する。また、Ｐレジスタ９０７は、記憶しているデータＰの第０ビット目および第１ビット目の反転データであるＰ［１，０］を制御バス９１０を通じてＹ［ｉ＋１，ｉ］評価部９０９に出力する。
【０３４８】
バス論理変換回路１５０は、正負論理混在データバス１０８から受けたデータの論理をデータバス１１２の論理に変換してデータバス１１２に出力する。また、バス論理変換回路１５０は、データバス１１２から受けたデータの論理を正負論理混在データバス１０８の論理に変換して、正負論理混在データバス１０８に出力する。
【０３４９】
（モンゴメリ乗算剰余演算回路９００のモンゴメリ乗算剰余演算のアルゴリズム）
図３２は、モンゴメリ乗算剰余演算回路９００によるモンゴメリ乗算剰余演算のアルゴリズム（１０２４ビットの場合）を示す。このモンゴメリ乗算剰余演算のアルゴリズム６２に基づいて、モンゴメリ乗算剰余演算回路９００の動作を説明する。
【０３５０】
０〜１０２３までのｉについて以下の処理が行なわれる。
【０３５１】
Ｙレジスタ６２１は、データバス１１２に乗数Ｙを出力する。
【０３５２】
Ｘレジスタ９２２は、被乗数Ｘの第０ビット目と第１ビット目であるＸ［１，０］を制御バス９１１に出力し、Ｐレジスタ９０７は、記憶しているデータＰの第０ビット目と第１ビット目であるＰ［１，０］を制御バス９１０に出力する。
【０３５３】
Ｙ［ｉ＋１，ｉ］評価部９０９は、データバス１１２を通じてＹを受け、制御バス９１１を通じてＸ［１，０］を受け、制御バス９１０を通じてＰ［１，０］を受けて、これらの値よりデータＭ［０］＝Ｐ［０］＾（Ｙ［ｉ］・Ｘ［０］）と、データＭＣ＝Ｐ［０］・Ｙ［ｉ］・Ｘ［０］と、データＭ［１］＝Ｐ［１］＾（Ｙ［ｉ］・Ｘ［１］）＾（Ｙ［ｉ＋１］・Ｘ［０］）＾ＭＣ＾Ｍ［０］＾（Ｍ［０］・Ｘ［１］）とを算出する。
【０３５４】
Ｙ［ｉ＋１，ｉ］評価部９０９は、Ｙ［ｉ＋１，ｉ］＝００、Ｍ［０］＝０、かつＭ［１］＝０のときには、Ｋレジスタ９２３に読出信号（「１１１」）を送り、零元Ｋを正負論理混在データバス１０２ａ、１０２ｂ、および１０２ｃに出力させる。
【０３５５】
Ｙ［ｉ＋１，ｉ］評価部９０９は、Ｙ［ｉ＋１，ｉ］＝００、Ｍ［０］＝０、かつＭ［１］＝１のときには、Ｋレジスタ９２３に読出信号（“１０１”）を送り零元Ｋを正負論理混在データバス１０２ａおよび１０２ｃに出力させ、Ｎレジスタ９２４に読出信号（“０１０”）を送り除数Ｎを正負論理混在データバス１０２ｂに出力させる。
【０３５６】
Ｙ［ｉ＋１，ｉ］評価部９０９は、Ｙ［ｉ＋１，ｉ］＝００、Ｍ［０］＝１、かつＭ［１］＝０のときには、Ｎレジスタ９２４に読出信号（“１００”）を送り除数Ｎを正負論理混在データバス１０２ａに出力させ、Ｋレジスタ９２３に読出信号（“０１１”）を送り零元Ｋを正負論理混在データバス１０２ｂおよび１０２ｃに出力させる。
【０３５７】
Ｙ［ｉ＋１，ｉ］評価部９０９は、Ｙ［ｉ＋１，ｉ］＝００、Ｍ［０］＝１、かつＭ［１］＝１のときには、Ｎレジスタ９２４に読出信号（“１１０”）を送り除数Ｎを正負論理混在データバス１０２ａおよび１０２ｂに出力させ、Ｋレジスタ９２３に読出信号（“００１”）を送り零元Ｋを正負論理混在データバス１０２ｃに出力させる。
【０３５８】
Ｙ［ｉ＋１，ｉ］評価部９０９は、Ｙ［ｉ＋１，ｉ］＝０１、Ｍ［０］＝０、かつＭ［１］＝０のときには、Ｘレジスタ９２２に読出信号（“１００”）を送り被乗数Ｘを正負論理混在データバス１０２ａに出力させ、Ｋレジスタ９２３に読出信号（“０１１”）を送り零元Ｋを正負論理混在データバス１０２ｂおよび１０２ｃに出力させる。
【０３５９】
Ｙ［ｉ＋１，ｉ］評価部９０９は、Ｙ［ｉ＋１，ｉ］＝０１、Ｍ［０］＝０、かつＭ［１］＝１のときには、Ｘレジスタ９２２に読出信号（“１００”）を送り被乗数Ｘを正負論理混在データバス１０２ａに出力させ、Ｎレジスタ９２４に読出信号（“０１０”）を送り除数Ｎを正負論理混在データバス１０２ｂに出力させ、Ｋレジスタ９２３に読出信号（“００１”）を送り零元Ｋを正負論理混在データバス１０２ｃに出力させる。
【０３６０】
Ｙ［ｉ＋１，ｉ］評価部９０９は、Ｙ［ｉ＋１，ｉ］＝０１、Ｍ［０］＝１、かつＭ［１］＝０のときには、（Ｘ＋Ｎ）レジスタ９２５に読出信号（“１００”）を送りデータ（Ｘ＋Ｎ）を正負論理混在データバス１０２ａに出力させ、Ｋレジスタ９２３に読出信号（“０１１”）を送り零元Ｋを正負論理混在データバス１０２ｂおよび１０２ｃに出力させる。
【０３６１】
Ｙ［ｉ＋１，ｉ］評価部９０９は、Ｙ［ｉ＋１，ｉ］＝０１、Ｍ［０］＝１、かつＭ［１］＝１のときには、（Ｘ＋Ｎ）レジスタ９２５に読出信号（“１００”）を送りデータ（Ｘ＋Ｎ）を正負論理混在データバス１０２ａに出力させ、Ｎレジスタ９２４に読出信号（“０１０”）を送り除数Ｎを正負論理混在データバス１０２ｂに出力させ、Ｋレジスタ９２３に読出信号（“００１”）を送り零元Ｋを正負論理混在データバス１０２ｃに出力させる。
【０３６２】
Ｙ［ｉ＋１，ｉ］評価部９０９は、Ｙ［ｉ＋１，ｉ］＝１０、Ｍ［０］＝０、かつＭ［１］＝０のときには、Ｋレジスタ９２３に読出信号（“１１０”）を送り零元Ｋを正負論理混在データバス１０２ａおよび１０２ｂに出力させ、Ｘレジスタ９２２に読出信号（“００１”）を送り被乗数Ｘを正負論理混在データバス１０２ｃに出力させる。
【０３６３】
Ｙ［ｉ＋１，ｉ］評価部９０９は、Ｙ［ｉ＋１，ｉ］＝１０、Ｍ［０］＝０、かつＭ［１］＝１のときには、Ｋレジスタ９２３に読出信号（“１００”）を送り零元Ｋを正負論理混在データバス１０２ａに出力させ、Ｎレジスタ９２４に読出信号（“０１０”）を送り除数Ｎを正負論理混在データバス１０２ｂに出力させ、Ｘレジスタ９２２に読出信号（“００１”）を送り被乗数Ｘを正負論理混在データバス１０２ｃに出力させる。
【０３６４】
Ｙ［ｉ＋１，ｉ］評価部９０９は、Ｙ［ｉ＋１，ｉ］＝１０、Ｍ［０］＝１、かつＭ［１］＝０のときには、Ｎレジスタ９２４に読出信号（“１００”）を送り除数Ｎを正負論理混在データバス１０２ａに出力させ、Ｋレジスタ９２３に読出信号（“０１０”）を送り零元Ｋを正負論理混在データバス１０２ｂに出力させ、Ｘレジスタ９２２に読出信号（“００１”）を送り被乗数Ｘを正負論理混在データバス１０２ｃに出力させる。
【０３６５】
Ｙ［ｉ＋１，ｉ］評価部９０９は、Ｙ［ｉ＋１，ｉ］＝１０、Ｍ［０］＝１、かつＭ［１］＝１のときには、Ｎレジスタ９２４に読出信号（“１１０”）を送り除数Ｎを正負論理混在データバス１０２ａおよび１０２ｂに出力させ、Ｘレジスタ９２２に読出信号（“００１”）を送り被乗数Ｘを正負論理混在データバス１０２ｃに出力させる。
【０３６６】
Ｙ［ｉ＋１，ｉ］評価部９０９は、Ｙ［ｉ＋１，ｉ］＝１１、Ｍ［０］＝０、かつＭ［１］＝０のときには、Ｘレジスタ９２２に読出信号（“１０１”）を送り被乗数Ｘを正負論理混在データバス１０２ａおよび１０２ｃに出力させ、Ｋレジスタ９２３に読出信号（“０１０”）を送り零元Ｋを正負論理混在データバス１０２ｂに出力させる。
【０３６７】
Ｙ［ｉ＋１，ｉ］評価部９０９は、Ｙ［ｉ＋１，ｉ］＝１１、Ｍ［０］＝０、かつＭ［１］＝１のときには、Ｘレジスタ９２２に読出信号（“１０１”）を送り被乗数Ｘを正負論理混在データバス１０２ａおよび１０２ｃに出力させ、Ｎレジスタ９２４に読出信号（“０１０”）を送り除数Ｎを正負論理混在データバス１０２ｂに出力させる。
【０３６８】
Ｙ［ｉ＋１，ｉ］評価部９０９は、Ｙ［ｉ＋１，ｉ］＝１１、Ｍ［０］＝１、かつＭ［１］＝０のときには、（Ｘ＋Ｎ）レジスタ９２５に読出信号（“１００”）を送りデータ（Ｘ＋Ｎ）を正負論理混在データバス１０２ａに出力させ、Ｋレジスタ９２３に読出信号（“０１０”）を送り零元Ｋを正負論理混在データバス１０２ｂに出力させ、Ｘレジスタ９２２に読出信号（“００１”）を送り被乗数Ｘを正負論理混在データバス１０２ｃに出力させる。
【０３６９】
Ｙ［ｉ＋１，ｉ］評価部９０９は、Ｙ［ｉ＋１，ｉ］＝１１、Ｍ［０］＝１、かつＭ［１］＝１のときには、（Ｘ＋Ｎ）レジスタ９２５に読出信号（“１００”）を送りデータ（Ｘ＋Ｎ）を正負論理混在データバス１０２ａに出力させ、Ｎレジスタ９２４に読出信号（“０１０”）を送り除数Ｎを正負論理混在データバス１０２ｂに出力させ、Ｘレジスタ９２２に読出信号（“００１”）を送り被乗数Ｘを正負論理混在データバス１０２ｃに出力させる。
【０３７０】
Ｐレジスタ９０７は、記憶しているデータＰを正負論理混在データバス１０８を通じて加算部１２００へ出力する。
【０３７１】
加算部１２００は、正負論理混在データバス１０８を通じてデータＰの上位ビット（１０２４ビット目〜２０４７ビット目）を受け、正負論理混在データバス１０２ａ，１０２ｂ，１０２ｃを通じてＫ、Ｎ、Ｘ、または（Ｘ＋Ｎ）を受けて、受けたデータを加算し、加算結果を正負論理混在データバス１０４を通じて、２ビット右シフト回路９０５に出力する。
【０３７２】
２ビット右シフト回路９０５は、加算部１２００から受けたデータを２ビットだけ右にシフトし、右シフトしたデータを正負論理混在データバス１０６を通じてＰレジスタ９０７に出力する。
【０３７３】
Ｐレジスタ９０７は、正負論理混在データバス１０６を通じて受けた右シフトしたデータをデータＰとして記憶する。
【０３７４】
このような処理をｉ＝０から１０２３まで繰返すことによって、最終的にＰレジスタ６０７に、モンゴメリ乗算剰余演算結果が格納される。
【０３７５】
以上のように、本変形例に係るモンゴメリ乗算剰余演算回路によれば、乗数Ｙのビットが「０」のときに、電力消費量が最小となるのを防止することができるので、暗号処理において秘匿データとなる乗数Ｙが特定されるのを防止することができる。また、乗数Ｙの２ビット分について、同時に加算処理を行なうので、乗算処理を高速化することができる。
【０３７６】
なお、本実施の形態に係るモンゴメリ乗算剰余回路においても、第１の実施形態またはその変形例のように、初期値Ｐ＝０のためにＰレジスタの代りにデータ格納レジスタ群を備えるように変形してもよく、２ビット右シフトとＰレジスタへの格納の順序を逆になるように変形してもよい。
【０３７７】
［第７の実施形態］
本実施の形態は、２通りの演算を実行し、演算の途中結果のデータに基づいて、いずれかの演算の結果のみを選択するモンゴメリ乗算剰余演算回路に関する。
【０３７８】
（モンゴメリ乗算剰余演算回路の構成）
図３３は、第７の実施形態に係るモンゴメリ乗算剰余演算回路の構成を示す。同図を参照して、このモンゴメリ乗算剰余演算回路１７００は、レジスタ群１７０１と、Ｙ［ｉ］選択回路１４１０と、加算部１７０３と、右シフト回路１７０５と、シフト選択回路１７１２と、Ｐレジスタ１７０７と、Ｑレジスタ１７１８と、レジスタ選択回路（ＳＱ）１７１４とを備える。
【０３７９】
また、このモンゴメリ乗算剰余回路１７００は、ｎ（＝１０２４）ビットのデータを伝送し、全ビットが正論理であるデータバス１１２，１７０４，１７０６，１７１８，１７１３とを含む。データバス１１２は、モンゴメリ乗算剰余回路１７００の外部の制御回路１２と接続する。
【０３８０】
レジスタ群１７０１は、演算に必要なデータを記憶するもので、Ｙレジスタ６２１と、Ｘレジスタ６２２と、Ｋレジスタ６２３と、Ｎレジスタ６２４と、Ｒレジスタ１７２３とからなる。
【０３８１】
Ｙレジスタ６２１は、１０２４ビットの乗数Ｙを記憶する。Ｙレジスタ６２１は、データバス１１２を通じてＹ［ｉ］選択回路１４１０に乗数Ｙを出力する。
【０３８２】
Ｘレジスタ６２２は、１０２４ビットの被乗数Ｘを記憶する。Ｘレジスタ６２２は、レジスタ選択回路１７０９から制御バス１７３１を通じて読出信号を受けると、被乗数Ｘをデータバス１１２に出力する。
【０３８３】
Ｋレジスタ６２３は、１０２４ビットの零元Ｋを記憶する。Ｋレジスタ６２３は、レジスタ選択回路１７０９から制御バス１７３３を通じて読出信号を受けると、零元Ｋをデータバス１１２に出力する。
【０３８４】
Ｎレジスタ６２４は、１０２４ビットの除数Ｎを記憶する。Ｎレジスタ６２４は、レジスタ選択回路１７０９から制御バス１７３２を通じて読出信号を受けると、除数Ｎをデータバス１１２に出力する。
【０３８５】
Ｒレジスタ１７２３は、モンゴメリ乗算剰余演算処理の終了後に、演算結果Ｒを記憶する。
【０３８６】
レジスタ選択回路１７０９は、後述の第１段階の演算における第１の加算時、後述の第２段階の演算時における第１の加算、および後述の補正演算における第１の加算時に、Ｋレジスタ６２３に読出信号を送り、後述の第１段階の演算における第２の加算時に、Ｘレジスタ６２２に読出信号を送り、後述の第２段階の演算における第２の加算時、および後述の補正演算における第２の加算時に、Ｎレジスタ６２４に読出信号を送る。
【０３８７】
Ｙ［ｉ］選択回路１４１０は、データバス１１２を通じて乗数Ｙを受け、制御バス１４１１を通じてレジスタ選択回路（ＳＱ）１７１４に乗数Ｙのｉビット目の値であるＹ［ｉ］を出力する。
【０３８８】
レジスタ選択回路（ＳＱ）１７１４は、制御バス１７３４を通じてＰ読出信号およびＰ書込信号をＰレジスタ１７０７に出力し、制御バス１７３５を通じてＱ読出信号およびＱ書込信号をＱレジスタ１７１８に出力する。
【０３８９】
レジスタ選択回路（ＳＱ）１７１４は、後述する第１段階の演算における読出し時に、記憶しているデータＳＱが「１」のときには、Ｑ読出信号を活性化し、記憶しているデータＳＱが「０」のときには、Ｐ読出信号を活性化する。
【０３９０】
レジスタ選択回路（ＳＱ）１７１４は、後述する第２段階の演算における読出し時に、記憶しているデータＳＱが「１」のときには、Ｐ読出信号を活性化し、記憶しているデータＳＱが「０」のときには、Ｑ読出信号を活性化する。
【０３９１】
レジスタ選択回路（ＳＱ）１７１４は、後述する補正演算における第１の読出し時には、記憶しているデータＳＱが「１」のときには、Ｑ読出信号を活性化し、記憶しているデータＳＱが「０」のときには、Ｐ読出信号を活性化する。レジスタ選択回路（ＳＱ）１７１４は、後述する補正演算における第２の読出し時に、記憶しているデータＳＱが「０」のときには、Ｑ読出信号を活性化し、記憶しているデータＳＱが「１」のときには、Ｐ読出信号を活性化する。
【０３９２】
レジスタ選択回路（ＳＱ）１７１４は、後述する第１段階の演算における第１の加算時に、記憶しているデータＳＱが「１」のときには、Ｐ書込信号を活性化し、記憶しているデータＳＱが「０」のときには、Ｑ書込信号を活性化する。レジスタ選択回路（ＳＱ）１７１４は、後述する第１段階の演算における第２の加算時に、記憶しているデータＳＱが「１」のときには、Ｑ書込信号を活性化し、記憶しているデータＳＱが「０」のときには、Ｐ書込信号を活性化する。
【０３９３】
レジスタ選択回路（ＳＱ）１７１４は、後述する第２段階の演算における第１の加算時に、記憶しているデータＳＱが「１」のときには、Ｑ書込信号を活性化し、記憶しているデータＳＱが「０」のときには、Ｐ書込信号を活性化する。レジスタ選択回路（ＳＱ）１７１４は、後述する第２段階の演算における第２の加算時に、記憶しているデータＳＱが「１」のときには、Ｐ書込信号を活性化し、記憶しているデータＳＱが「０」のときには、Ｑ書込信号を活性化する。
【０３９４】
レジスタ選択回路（ＳＱ）１７１４は、後述する補正演算における第１の加算時に、Ｑ書込信号を活性化し、後述する補正演算における第２の加算時に、Ｐ書込信号を活性化する。
【０３９５】
レジスタ選択回路１７１２に記憶されるデータＳＱの初期値は「０」とする。レジスタ選択回路（ＳＱ）１７１４は、第１段階の演算の終了前に、Ｙ［ｉ］選択回路１４１０から制御バス１４１１を通じてＹ［ｉ］を受けて、ＳＱ＾Ｙ［ｉ］の値を新たなデータＳＱとして記憶する。＾は、排他的論理和（Ｅｘｃｌｕｓｉｖｅ−ＯＲ）を示す。レジスタ選択回路（ＳＱ）１７１４は、後述する第２段階の演算の終了前に、データバス１７０８と接続するデータバス１７１３を通じてデータＲを受けて、ＳＱ＾Ｒ［０］の値を新たなデータＳＱとして記憶する。レジスタ選択回路（ＳＱ）１７１４は、後述する補正演算における第１の読出しの終了前に、データバス１７０８と接続するデータバス１７１３を通じてデータＲを受けて、Ｒの最上位ビットであり、Ｒの符号を表わすＲ［１０２３］を新たなデータＳＱとして記憶する。
【０３９６】
加算部１７０３は、データバス１７０８と接続する入力端子１と、データバス１１２と接続する入力端子２とを備える。入力端子１の第ｉビット目（０≦ｉ）は、データバス１７０８の第ｉビット目と接続する。また、入力端子２の第ｉビット目（０≦ｉ）は、データバス１１２の第ｉビット目と接続する。
【０３９７】
加算部１７０３は、入力端子１からデータＲを受け、入力端子２からＫ、Ｎ、またはＸを受けて、これらを加算する。加算部１７０３は、加算結果をデータバス１７０４を通じて右シフト回路１７０５に出力する。加算部１７０３の加算処理の論理は、加算部１０００と同一なので、ここでは説明を繰返さない。
【０３９８】
シフト選択回路１７１２は、制御バス１７３６を通じてシフト選択信号を右シフト回路１７０５に出力する。
【０３９９】
シフト選択回路１７１２は、後述する第２段階の演算時には、シフト選択信号を活性化し、後述する第１段階の演算時および補正演算時には、シフト選択信号を非活性化する。右シフト回路１７０５は、シフト選択信号が活性化のときには、データバス１７０４を通じて受けたデータを１ビットだけ右にシフトし、右シフトしたデータをデータバス１７０６に出力する。右シフト回路１７０５は、シフト選択信号が非活性化のときには、データバス１７０４を通じて受けたデータをそのままデータバス１７０６に出力する。
【０４００】
Ｐレジスタ１７０７は、Ｐ読出信号が活性化されると、記憶しているデータＰをデータＲとしてデータバス１７０８に出力する。また、Ｐレジスタ１７０７は、Ｐ書込信号が活性化により、データバス１７０６を通じて受けたデータをデータＰとして記憶する。
【０４０１】
Ｑレジスタ１７１８は、Ｑ読出信号が活性化されると、記憶しているデータＱをデータＲとしてデータバス１７０８に出力する。Ｑレジスタ１７１８は、Ｑ書込信号が活性化により、データバス１７０６を通じて受けたデータをデータＱとして記憶する。
【０４０２】
（モンゴメリ乗算剰余演算回路１７００のモンゴメリ乗算剰余演算のアルゴリズム）
図３４は、モンゴメリ乗算剰余演算回路１７００によるモンゴメリ乗算剰余演算のアルゴリズム（１０２４ビットの場合）を示す。このモンゴメリ乗算剰余演算のアルゴリズム６３に基づいて、モンゴメリ乗算剰余演算回路１７００の動作を説明する。
【０４０３】
まず、レジスタ選択回路１７１２に記憶されるデータＳＱの初期値は「０」とする。
【０４０４】
０〜１０２３までのｉについて以下の処理が行なわれる。
【０４０５】
まず、第１段階の演算が行なわれる。
【０４０６】
シフト選択回路１７１２は、第１段階の演算時には、シフト選択信号を非活性化する。
【０４０７】
レジスタ選択回路（ＳＱ）１７１４は、第１段階の演算における読出し時に、記憶しているデータＳＱが「１」のときには、Ｑ読出信号を活性化する。Ｑレジスタ１７１８は、Ｑ読出信号が活性化されると、記憶しているデータＱをデータＲとしてデータバス１７０８に出力する。レジスタ選択回路（ＳＱ）１７１４は、データＱの出力後、Ｑ読出信号を非活性化する。
【０４０８】
レジスタ選択回路１７０９は、第１段階の演算における第１の加算時に、Ｋレジスタ６２３に読出信号を送り、Ｋレジスタ６２３は、零元Ｋをデータバス１１２に出力する。加算部１７０３は、第１段階の第１の加算を行なう。すなわち、加算部１７０３は、データバス１７０８を通じてデータＲを受け、データバス１１２を通じて零元Ｋを受けて、受けたデータを加算し、加算結果（Ｒ＋Ｋ）をデータバス１７０４に出力する。
【０４０９】
右シフト回路１７０５は、シフト選択信号が非活性化により、データバス１７０４を通じて受けた加算結果（Ｒ＋Ｋ）をそのままデータバス１７０６に出力する。
【０４１０】
レジスタ選択回路（ＳＱ）１７１４は、第１段階の演算における第１の加算時に、記憶しているデータＳＱが「１」のときには、Ｐ書込信号を活性化する。
【０４１１】
Ｐレジスタ１７０７は、Ｐ書込信号が活性化により、データバス１７０６を通じて受けたデータ（Ｒ＋Ｋ）をデータＰとして記憶する。レジスタ選択回路（ＳＱ）１７１４は、データＰの書込み後、Ｐ書込信号を非活性化する。
【０４１２】
次に、レジスタ選択回路１７０９は、第１段階の演算における第２の加算時に、Ｘレジスタ６２２に読出信号を送り、Ｘレジスタ６２２は、被乗数Ｘをデータバス１１２に出力する。加算部１７０３は、第１段階の第２の加算を行なう。すなわち、加算部１７０３は、データバス１７０８を通じてデータＲを受け、データバス１１２を通じて被乗数Ｘを受けて、受けたデータを加算し、加算結果（Ｒ＋Ｘ）をデータバス１７０４に出力する。
【０４１３】
右シフト回路１７０５は、シフト選択信号が非活性化により、データバス１７０４を通じて受けた加算結果（Ｒ＋Ｘ）をそのままデータバス１７０６に出力する。
【０４１４】
レジスタ選択回路（ＳＱ）１７１４は、第１段階の演算における第２の加算時に、記憶しているデータＳＱが「１」のときには、Ｑ書込信号を活性化する。
【０４１５】
Ｑレジスタ１７１８は、Ｑ書込信号が活性化により、データバス１７０６を通じて受けたデータ（Ｒ＋Ｘ）をデータＱとして記憶する。レジスタ選択回路（ＳＱ）１７１４は、データＱの書込み後、Ｑ書込信号を非活性化する。
【０４１６】
一方、レジスタ選択回路（ＳＱ）１７１４は、第１段階の演算における読出し時に、記憶しているデータＳＱが「０」のときには、Ｐ読出信号を活性化する。Ｐレジスタ１７０７は、Ｐ読出信号が活性化されると、記憶しているデータＰをデータＲとしてデータバス１７０８に出力する。レジスタ選択回路（ＳＱ）１７１４は、データＰの出力後、Ｐ読出信号を非活性化する。
【０４１７】
レジスタ選択回路１７０９は、第１段階の演算における第１の加算時に、Ｋレジスタ６２３に読出信号を送り、Ｋレジスタ６２３は、零元Ｋをデータバス１１２に出力する。加算部１７０３は、第１段階の第１の加算を行なう。加算部１７０３は、データバス１７０８を通じてデータＲを受け、データバス１１２を通じて零元Ｋを受けて、受けたデータを加算し、加算結果（Ｒ＋Ｋ）をデータバス１７０４に出力する。
【０４１８】
右シフト回路１７０５は、シフト選択信号が非活性化により、データバス１７０４を通じて受けた加算結果（Ｒ＋Ｋ）をそのままデータバス１７０６に出力する。
【０４１９】
レジスタ選択回路（ＳＱ）１７１４は、第１段階の演算における第１の加算時に、記憶しているデータＳＱが「０」のときには、Ｑ書込信号を活性化する。
【０４２０】
Ｑレジスタ１７１８は、Ｑ書込信号が活性化により、データバス１７０６を通じて受けたデータ（Ｒ＋Ｋ）をデータＱとして記憶する。レジスタ選択回路（ＳＱ）１７１４は、データＱの書込み後、Ｑ書込信号を非活性化する。
【０４２１】
次に、レジスタ選択回路１７０９は、第１段階の演算における第２の加算時に、Ｘレジスタ６２２に読出信号を送り、Ｘレジスタ６２２は、被乗数Ｘをデータバス１１２に出力する。加算部１７０３は、第１段階の第２の加算を行なう。すなわち、加算部１７０３は、データバス１７０８を通じてデータＲを受け、データバス１１２を通じて被乗数Ｘを受けて、受けたデータを加算し、加算結果（Ｒ＋Ｘ）をデータバス１７０４に出力する。
【０４２２】
右シフト回路１７０５は、シフト選択信号が非活性化により、データバス１７０４を通じて受けた加算結果（Ｒ＋Ｘ）をそのままデータバス１７０６に出力する。
【０４２３】
レジスタ選択回路（ＳＱ）１７１４は、第１段階の演算における第２の加算時に、記憶しているデータＳＱが「０」のときには、Ｐ書込信号を活性化する。
【０４２４】
Ｐレジスタ１７０７は、Ｐ書込信号が活性化により、データバス１７０６を通じて受けたデータ（Ｒ＋Ｘ）をデータＰとして記憶する。レジスタ選択回路（ＳＱ）１７１４は、データＰの書込み後、Ｐ書込信号を非活性化する。
【０４２５】
次に、レジスタ選択回路（ＳＱ）１７１４は、第１段階の演算の終了前に、Ｙ［ｉ］選択回路１４１０から制御バス１４１１を通じてＹ［ｉ］を受けて、ＳＱ＾Ｙ［ｉ］の値を新たなデータＳＱとして記憶する。
【０４２６】
以上により、第１段階の演算が終了し、第２段階の演算が行なわれる。シフト選択回路１７１２は、第２段階の演算時には、シフト選択信号を活性化する。
【０４２７】
レジスタ選択回路（ＳＱ）１７１４は、第２段階の演算における読出し時に、記憶しているデータＳＱが「１」のときには、Ｐ読出信号を活性化する。Ｐレジスタ１７０７は、Ｐ読出信号が活性化されると、記憶しているデータＰをデータＲとしてデータバス１７０８に出力する。レジスタ選択回路（ＳＱ）１７１４は、データＰの出力後、Ｐ読出信号を非活性化する。
【０４２８】
レジスタ選択回路１７０９は、第２段階の演算における第１の加算時に、Ｋレジスタ６２３に読出信号を送り、Ｋレジスタ６２３は、零元Ｋをデータバス１１２に出力する。加算部１７０３は、第２段階の第１の加算を行なう。すなわち、加算部１７０３は、データバス１７０８を通じてデータＲを受け、データバス１１２を通じて零元Ｋを受けて、受けたデータを加算し、加算結果（Ｒ＋Ｋ）をデータバス１７０４に出力する。
【０４２９】
右シフト回路１７０５は、シフト選択信号が活性化により、データバス１７０４を通じて受けた加算結果（Ｒ＋Ｋ）を１ビットだけ右にシフトしたデータ（（Ｒ＋Ｋ）≫１）をデータバス１７０６に出力する。
【０４３０】
レジスタ選択回路（ＳＱ）１７１４は、第２段階の演算における第１の加算時に、記憶しているデータＳＱが「１」のときには、Ｑ書込信号を活性化する。
【０４３１】
Ｑレジスタ１７１８は、Ｑ書込信号が活性化により、データバス１７０６を通じて受けたデータ（（Ｒ＋Ｋ）≫１）をデータＱとして記憶する。レジスタ選択回路（ＳＱ）１７１４は、データＱの書込み後、Ｑ書込信号を非活性化する。
【０４３２】
次に、レジスタ選択回路１７０９は、第２段階の演算における第２の加算時に、Ｎレジスタ６２４に読出信号を送り、Ｎレジスタ６２４は、除数Ｎをデータバス１１２に出力する。加算部１７０３は、第２段階の第２の加算を行なう。加算部１７０３は、データバス１７０８を通じてデータＲを受け、データバス１１２を通じて乗数Ｎを受けて、受けたデータを加算し、加算結果（Ｒ＋Ｎ）をデータバス１７０４に出力する。
【０４３３】
右シフト回路１７０５は、シフト選択信号が活性化により、データバス１７０４を通じて受けた加算結果（Ｒ＋Ｎ）を１ビットだけ右にシフトしたデータ（（Ｒ＋Ｎ）≫１）をデータバス１７０６に出力する。
【０４３４】
レジスタ選択回路（ＳＱ）１７１４は、第２段階の演算における第２の加算時に、記憶しているデータＳＱが「１」のときには、Ｐ書込信号を活性化する。
【０４３５】
Ｐレジスタ１７０７は、Ｐ書込信号が活性化により、データバス１７０６を通じて受けたデータ（（Ｒ＋Ｎ）≫１）をデータＰとして記憶する。レジスタ選択回路（ＳＱ）１７１４は、データＱＰ書込み後、Ｐ書込信号を非活性化する。
【０４３６】
一方、レジスタ選択回路（ＳＱ）１７１４は、第２段階の演算における読出し時に、記憶しているデータＳＱが「０」のときには、Ｑ読出信号を活性化する。Ｑレジスタ１７１８は、Ｑ読出信号が活性化されると、記憶しているデータＱをデータＲとしてデータバス１７０８に出力する。レジスタ選択回路（ＳＱ）１７１４は、データＱの出力後、Ｑ読出信号を非活性化する。
【０４３７】
レジスタ選択回路１７０９は、第２段階の演算における第１の加算時に、Ｋレジスタ６２３に読出信号を送り、Ｋレジスタ６２３は、零元Ｋをデータバス１１２に出力する。加算部１７０３は、データバス１７０８を通じてデータＲを受け、データバス１１２を通じて零元Ｋを受けて、受けたデータを加算し、加算結果（Ｒ＋Ｋ）をデータバス１７０４に出力する。
【０４３８】
右シフト回路１７０５は、シフト選択信号が活性化のときには、データバス１７０４を通じて受けた加算結果（Ｒ＋Ｋ）を１ビットだけ右にシフトしたデータ（（Ｒ＋Ｋ）≫１）をデータバス１７０６に出力する。
【０４３９】
レジスタ選択回路（ＳＱ）１７１４は、第２段階の演算における第１の加算時に、記憶しているデータＳＱが「０」のときには、Ｐ書込信号を活性化する。
【０４４０】
Ｐレジスタ１７０７は、Ｐ書込信号が活性化により、データバス１７０６を通じて受けたデータ（（Ｒ＋Ｋ）≫１）をデータＰとして記憶する。レジスタ選択回路（ＳＱ）１７１４は、データＰの書込み後、Ｐ書込信号を非活性化する。
【０４４１】
次に、レジスタ選択回路１７０９は、第２段階の演算における第２の加算時に、Ｎレジスタ６２４に読出信号を送り、Ｎレジスタ６２４は、除数Ｎをデータバス１１２に出力する。加算部１７０３は、データバス１７０８を通じてデータＲを受け、データバス１１２を通じて乗数Ｎを受けて、受けたデータを加算し、加算結果（Ｒ＋Ｎ）をデータバス１７０４に出力する。
【０４４２】
右シフト回路１７０５は、シフト選択信号が活性化により、データバス１７０４を通じて受けた加算結果（Ｒ＋Ｎ）を１ビットだけ右にシフトしたデータ（（Ｒ＋Ｎ）≫１）をデータバス１７０６に出力する。
【０４４３】
レジスタ選択回路（ＳＱ）１７１４は、第２段階の演算における第２の加算時に、記憶しているデータＳＱが「０」のときには、Ｑ書込信号を活性化する。
【０４４４】
Ｑレジスタ１７１８は、Ｑ書込信号が活性化により、データバス１７０６を通じて受けたデータ（（Ｒ＋Ｎ）≫１）をデータＱとして記憶する。レジスタ選択回路（ＳＱ）１７１４は、データＱの書込み後、Ｑ書込信号を非活性化する。
【０４４５】
次に、レジスタ選択回路（ＳＱ）１７１４は、第２段階の演算の終了前に、データバス１７０８と接続するデータバス１７１３を通じてデータＲを受けて、ＳＱ＾Ｒ［０］の値を新たなデータＳＱとして記憶する。
【０４４６】
以上により、第２段階の演算が終了する。このような第１段階および第２段階の演算処理をｉ＝０から１０２３まで繰返した後、以下のような補正演算が行なわれる。シフト選択回路１７１２は、補正演算時には、シフト選択信号を非活性化する。
【０４４７】
レジスタ選択回路（ＳＱ）１７１４は、補正演算における第１の読出し時には、記憶しているデータＳＱが「１」のときには、Ｑ読出信号を活性化する。Ｑレジスタ１７１８は、Ｑ読出信号が活性化されると、記憶しているデータＱをデータＲとしてデータバス１７０８に出力する。レジスタ選択回路（ＳＱ）１７１４は、データＱの出力後、Ｑ読出信号を非活性化する。
【０４４８】
一方、レジスタ選択回路（ＳＱ）１７１４は、補正演算における第１の読出し時には、記憶しているデータＳＱが「０」のときには、Ｐ読出信号を活性化する。Ｐレジスタ１７０７は、Ｐ読出信号が活性化されると、記憶しているデータＰをデータＲとしてデータバス１７０８に出力する。レジスタ選択回路（ＳＱ）１７１４は、データＰの出力後、Ｐ読出信号を非活性化する。
【０４４９】
レジスタ選択回路（ＳＱ）１７１４は、補正演算における第１の読出しの終了前に、データバス１７０８と接続するデータバス１７１３を通じてデータＲを受けて、Ｒの最上位ビットであり、Ｒの符号を表わすＲ［１０２３］を新たなデータＳＱとして記憶する。
【０４５０】
レジスタ選択回路１７０９は、補正演算における第１の加算時には、Ｋレジスタ６２２に読出信号を送り、Ｋレジスタ６２３は、零元Ｋをデータバス１１２に出力する。加算部１７０３は、補正演算における第１の加算を行なう。すなわち、加算部１７０３は、データバス１７０８を通じてデータＲを受け、データバス１１２を通じて零元Ｋを受けて、受けたデータを加算し、加算結果（Ｒ＋Ｋ）をデータバス１７０４に出力する。
【０４５１】
右シフト回路１７０５は、シフト選択信号が非活性化により、データバス１７０４を通じて受けた加算結果（Ｒ＋Ｋ）をそのままデータバス１７０６に出力する。
【０４５２】
レジスタ選択回路（ＳＱ）１７１４は、補正演算における第１の加算時に、Ｑ書込信号を活性化する。
【０４５３】
Ｑレジスタ１７１８は、Ｑ書込信号が活性化により、データバス１７０６を通じて受けたデータ（Ｒ＋Ｋ）をデータＱとして記憶する。レジスタ選択回路（ＳＱ）１７１４は、データＱの書込み後、Ｑ書込信号を非活性化する。
【０４５４】
次に、レジスタ選択回路１７０９は、補正演算における第２の加算時に、Ｎレジスタ６２４に読出信号を送り、Ｎレジスタ６２４は、除数Ｎをデータバス１１２に出力する。加算部１７０３は、補正演算における第２の加算を行なう。すなわち、加算部１７０３は、データバス１７０８を通じてデータＲを受け、データバス１１２を通じて乗数Ｎを受けて、受けたデータを加算し、加算結果（Ｒ＋Ｎ）をデータバス１７０４に出力する。
【０４５５】
右シフト回路１７０５は、シフト選択信号が非活性化により、データバス１７０４を通じて受けた加算結果（Ｒ＋Ｎ）をそのままデータバス１７０６に出力する。
【０４５６】
レジスタ選択回路（ＳＱ）１７１４は、補正演算における第２の加算時に、Ｐ書込信号を活性化する。
【０４５７】
Ｐレジスタ１７０７は、Ｐ書込信号が活性化により、データバス１７０６を通じて受けたデータ（Ｒ＋Ｎ）をデータＰとして記憶する。
【０４５８】
次に、レジスタ選択回路（ＳＱ）１７１４は、補正演算における第２の読出し時に、記憶しているデータＳＱが「０」のときには、Ｑ読出信号を活性化する。Ｑレジスタ１７１８は、Ｑ読出信号が活性化されると、記憶しているデータＱをデータＲとしてデータバス１７０８およびデ−タバス１１２を通じてＲレジスタ１７２３に出力する。レジスタ選択回路（ＳＱ）１７１４は、データＱの出力後、Ｑ読出信号を非活性化する。
【０４５９】
一方、レジスタ選択回路（ＳＱ）１７１４は、補正演算における第２の読出し時に、記憶しているデータＳＱが「１」のときには、Ｐ読出信号を活性化する。Ｐレジスタ１７０７は、Ｐ読出信号が活性化されると、記憶しているデータＰをデータＲとしてデータバス１７０８およびデータバス１１２を通じてＲレジスタ１７２３に出力する。レジスタ選択回路（ＳＱ）１７１４は、データＰの出力後、Ｐ読出信号を非活性化する。
【０４６０】
以上のような処理によって、最終的にＲレジスタ１７２３にモンゴメリ乗算剰余演算の結果が格納される。
【０４６１】
以上のように、本実施の形態に係るモンゴメリ乗算剰余演算回路によれば、演算の途中結果のデータの値に係らず、２通りの演算のいずれをも実行するので、電力消費量に基づいて暗号処理において秘匿データとなる乗数Ｙが特定されるのを防止することができる。
【０４６２】
なお、本実施の形態に係るモンゴメリ乗算剰余回路においても、第１の実施形態またはその変形例のように、右シフトとＰレジスタまたはＱレジスタへの格納の順序を逆になるように変形してもよく、正論理のデータバスの代りに正負論理混在データバスを備えるように変形するものとしてもよい。
【０４６３】
また、本実施の形態では、Ｒレジスタ１７２３にモンゴメリ乗算剰余演算結果が格納されるものとしたが、これに限定するものではなく、Ｙレジスタ６２１、Ｘレジスタ６２２、Ｎレジスタ６２２、およびＫレジスタ６２３のいずれかにモンゴメリ乗算剰余演算結果を格納するものとしてもよく、この場合、Ｒレジスタ１７２３は不要となる。
【０４６４】
［第８の実施形態]
本実施の形態は、正負論理混在データを用いて加算を行なう加算回路に関する。
【０４６５】
（加算回路の構成）
図３５は、第８の実施形態に係る加算回路の構成を示す。同図を参照して、この加算回路１９００は、レジスタ群１９０１と、加算部１９０３とを備える。
【０４６６】
レジスタ群１９０１は、演算に必要なデータを記憶するもので、Ｘ１レジスタ１９１１と、Ｘ２レジスタ１９１２と、Ａレジスタ１９１４とからなる。
【０４６７】
Ｘ１レジスタ１９１１は、１０２４ビットの被加算数Ｘ１を記憶する。Ｘ１レジスタ１９１１は、第１の実施形態のＸレジスタ２２と同様に、被加算数Ｘ１を正負論理混在データバス１０２に出力する。
【０４６８】
Ｘ２レジスタ１９１２は、１０２４ビットの被加算数Ｘ２を記憶する。Ｘ２レジスタ１９１２は、第１の実施形態のＸレジスタ２２と同様に、被加算数Ｘ２を正負論理混在データバス１０２に出力する。
【０４６９】
加算部１９０３は、第１の実施形態の加算部１０００と同様に、正負論理混在データバス１０２ａを通じて１０２４ビットの被加算数Ｘ１を受け、正負論理混在データバス１０２ｂを通じて１０２４ビットの被加算数Ｘ２を受け、これらの受けたデータを加算し、加算結果（Ｘ１＋Ｘ２）を正負論理混在データバス１０８に出力する。
【０４７０】
変換器１５０は、正負論理混在データバス１０８の加算結果（Ｘ１＋Ｘ２）を、正論理に変換して、データバス１１２を通じてＡレジスタ１９１４に出力する。
【０４７１】
このようにして、Ａレジスタに、被加算数Ｘ１と被加算数Ｘ２との加算結果が格納される。
【０４７２】
以上のように、本実施の形態に係る加算回路によれば、被加算数Ｘ１またはＸ２が零のときに電力消費量が小さくなるのを防止することができるので、暗号処理において秘匿データとなる被加算数Ｘ１またはＸ２が特定されるのを防止することができる。
【０４７３】
なお、本実施の形態では、Ａレジスタ１９１４に加算結果が格納されるものとしたが、これに限定するものではなく、Ｘ１レジスタ１９１１とＸ２レジスタ１９１２のいずれかに加算結果を格納するものとしてもよく、この場合、Ａレジスタ１９１４は不要となる。
【０４７４】
［第９の実施形態］
本実施の形態は、入力信号の変化の相違によって消費電力が変化しない、論理回路の一種であるインバータ回路に関する。
【０４７５】
（従来のインバータ回路の構成）
図３６は、従来のインバータ回路の構成を示す図である。同図を参照して、従来のインバータ回路９４９では、入力信号ｉｎ１が「Ｈ」から「Ｌ」に変化すると、ＮチャネルＭＯＳトランジスタＮＴ２がオフとなり、ＰチャネルＭＯＳトランジスタＰＴ１がオンとなる。これにより、電源から出力端子に電流が供給され、出力信号ｏｕｔ１が「Ｈ」となる。したがって、この場合には、電力が消費される。
【０４７６】
一方、入力信号ｉｎ１が「Ｌ」から「Ｈ」に変化すると、ＮチャネルＭＯＳトランジスタＮＴ２がオンとなり、ＰチャネルＭＯＳトランジスタＰＴ１がオフとなる。これにより、出力端子から電流がグランドに流れ、出力信号ｏｕｔ１は「Ｌ」となる。したがって、この場合には、電力が消費されない。
【０４７７】
このように、従来のインバータ回路では、入力信号がどのように変化するかに応じて、消費する電力が相違する。それゆえ、ＤＰＡなどによって消費電力を解析することによって、インバータ回路に入力される信号がどのように変化したかの特定が可能となり、それによって、暗号処理に用いられる鍵などの秘匿データを傍受することができる。
【０４７８】
（本実施の形態のインバータ回路の構成）
図３７は、第９の実施形態に係るインバータ回路の構成を示す図である。同図を参照して、このインバータ回路９５０は、ＰチャネルＭＯＳトランジスタＰＴ１，ＰＴ２，ＰＴ３，ＰＴ４と、ＮチャネルＭＯＳトランジスタＮＴ１，ＮＴ２，ＮＴ３とを含む。
【０４７９】
ＰチャネルＭＯＳトランジスタＰＴ１は、そのソースが電源に接続され、そのドレインがノードＮ１に接続し、そのゲートには制御信号ｃｔｒｌ１が入力される。
【０４８０】
ＰチャネルＭＯＳトランジスタＰＴ２は、そのソースが電源に接続され、そのドレインがノードＮ２に接続し、そのゲートには制御信号ｃｔｒｌ１が入力される。
【０４８１】
ＰチャネルＭＯＳトランジスタＰＴ３は、そのソースが電源に接続され、そのドレインがＰチャネルＭＯＳトランジスタＰＴ４のゲートおよびノードＮ２に接続され、そのゲートがＰチャネルＭＯＳトランジスタＰＴ４のドレインおよびノードＮ１に接続される。
【０４８２】
ＰチャネルＭＯＳトランジスタＰＴ４は、そのソースが電源に接続され、そのドレインがＰチャネルＭＯＳトランジスタＰＴ３のゲートおよびノードＮ１に接続され、そのゲートがＰチャネルＭＯＳトランジスタＰＴ３のドレインおよびノードＮ２に接続される。
【０４８３】
ＮチャネルＭＯＳトランジスタＮＴ３は、そのソースが接地され、そのドレインがノードＮ３に接続され、そのゲートには制御信号ｃｔｒｌ１が入力される。
【０４８４】
ＮチャネルＭＯＳトランジスタＮＴ１は、そのソースがノードＮ３に接続され、そのドレインがノードＮ１に接続され、そのゲートには入力信号ｉｎ１が入力される。
【０４８５】
ＮチャネルＭＯＳトランジスタＮＴ２は、そのソースがノードＮ３に接続され、そのドレインがノードＮ２に接続され、そのゲートには反転入力信号ｉｎＢ１が入力される。
【０４８６】
ＰチャネルＭＯＳトランジスタＰＴ１，ＰＴ２、およびＮチャネルＭＯＳトランジスタＮＴ３は、第１群に属し、制御信号ｃｔｒｌ１の活性化、つまり「Ｌ」になると、ノードＮ１およびＮ２を「Ｈ」にする。
【０４８７】
ＮチャネルＭＯＳトランジスタＮＴ１は、第２群に属し、制御信号ｃｔｒｌ１が非活性、つまり「Ｈ」のときに、入力信号ｉｎ１が「Ｈ」になると、ノードＮ１を「Ｌ」にする。
【０４８８】
ＮチャネルＭＯＳトランジスタＮＴ２は、第３群に属し、制御信号ｃｔｒｌ１が非活性、つまり「Ｈ」のときに、反転入力信号ｉｎＢ１が「Ｈ」になると、ノードＮ２を「Ｌ」にする。
【０４８９】
ノードＮ１は、正論理の出力端子と接続され、正論理の出力端子から、出力信号ｏｕｔ１が出力される。ノードＮ２は、負論理の出力端子と接続され、負論理の出力端子から反転出力信号ｏｕｔＢ１が出力される。
【０４９０】
（動作１）
次に、このインバータ回路９５０の動作を説明する。図３８は、インバータ回路９５０に入力および出力される信号の時間的な変化の一例を示す図である。同図を参照して、期間１では、制御信号ｃｔｒｌ１が「Ｈ」となる。これにより、ＮチャネルＭＯＳトランジスタＮＴ３がオンとなり、ＰチャネルＭＯＳトランジスタＰＴ１，ＰＴ２がオフとなる。期間１では、入力信号ｉｎ１を「Ｈ」とし、反転入力信号ｉｎＢ１を「Ｌ」とする。これにより、ＮチャネルＭＯＳトランジスタＮＴ１がオン、ＮチャネルＭＯＳトランジスタＮＴ２がオフとなる。ＮチャネルＭＯＳトランジスタＮＴ３，ＮＴ１がオンにより、出力信号ｏｕｔ１は「Ｌ」となる。また、出力信号ｏｕｔ１（＝「Ｌ」）がＰチャネルＭＯＳトランジスタＰＴ３のゲートに入力されることによって、ＰチャネルＭＯＳトランジスタＰＴ３がオンとなり、反転出力信号ｏｕｔＢ１は「Ｈ」となる。
【０４９１】
次に、期間２では、制御信号ｃｔｒｌ１が「Ｌ」となる。これにより、ＮチャネルＭＯＳトランジスタＮＴ３がオフとなり、ＰチャネルＭＯＳトランジスタＰＴ１，ＰＴ２がオンとなる。期間２の途中で、入力信号ｉｎ１が「Ｌ」に変化し、反転入力信号ｉｎＢ１が「Ｈ」に変化し、それにより、ＮチャネルＭＯＳトランジスタＮＴ１がオフに変化し、ＮチャネルＭＯＳトランジスタＮＴ２がオンに変化する。しかし、ＮチャネルＭＯＳトランジスタＮＴ１、ＮＴ２のオン／オフ状態に係らず、ＮチャネルＭＯＳトランジスタＮＴ３がオフ、およびＰチャネルＭＯＳトランジスタＰＴ１，ＰＴ２がオンによって、出力信号ｏｕｔ１および反転出力信号ｏｕｔＢ１のいずれもが「Ｈ」となる。したがって、出力信号ｏｕｔ１は、期間２では常に「Ｈ」となる。
【０４９２】
次に、期間３では、制御信号ｃｔｒｌ１が「Ｈ」となる。これにより、ＮチャネルＭＯＳトランジスタＮＴ３がオンとなり、ＰチャネルＭＯＳトランジスタＰＴ１，ＰＴ２がオフとなる。また、ＮチャネルＭＯＳトランジスタＮＴ１はオフであり、ＮチャネルＭＯＳトランジスタＮＴ２はオンである。ＮチャネルＭＯＳトランジスタＮＴ３，ＮＴ２がオンにより、反転出力信号ｏｕｔＢ１は「Ｌ」となる。また、反転出力信号ｏｕｔＢ１（＝「Ｌ」）がＰチャネルＭＯＳトランジスタＰＴ４のゲートに入力されることによって、ＰチャネルＭＯＳトランジスタＰＴ４がオンとなり、出力信号ｏｕｔ１は「Ｈ」となる。
【０４９３】
（動作２）
図３９は、インバータ回路９５０に入力および出力される信号の時間的な変化の別の例を示す図である。同図を参照して、期間１では、制御信号ｃｔｒｌ１が「Ｈ」となる。これにより、ＮチャネルＭＯＳトランジスタＮＴ３がオンとなり、ＰチャネルＭＯＳトランジスタＰＴ１，ＰＴ２がオフとなる。期間１では、入力信号ｉｎ１を「Ｌ」とし、反転入力信号ｉｎＢ１を「Ｈ」とする。これにより、ＮチャネルＭＯＳトランジスタＮＴ１がオフ、ＮチャネルＭＯＳトランジスタＮＴ２がオンとなる。ＮチャネルＭＯＳトランジスタＮＴ３，ＮＴ２がオンにより、反転出力信号ｏｕｔＢ１は「Ｌ」となる。また、反転出力信号ｏｕｔＢ１（＝「Ｌ」）がＰチャネルＭＯＳトランジスタＰＴ４のゲートに入力されることによって、ＰチャネルＭＯＳトランジスタＰＴ４がオンとなり、出力信号ｏｕｔ１は「Ｈ」となる。
【０４９４】
次に、期間２では、制御信号ｃｔｒｌ１が「Ｌ」となる。これにより、ＮチャネルＭＯＳトランジスタＮＴ３がオフとなり、ＰチャネルＭＯＳトランジスタＰＴ１，ＰＴ２がオンとなる。期間２の途中では、入力信号ｉｎ１が「Ｈ」に変化し、反転入力信号ｉｎＢ１が「Ｌ」に変化し、それにより、ＮチャネルＭＯＳトランジスタＮＴ１がオンに変化し、ＮチャネルＭＯＳトランジスタＮＴ２がオフに変化する。しかし、ＮチャネルＭＯＳトランジスタＮＴ１、ＮＴ２のオン／オフ状態に係らず、ＮチャネルＭＯＳトランジスタＮＴ３がオフ、およびＰチャネルＭＯＳトランジスタＰＴ１，ＰＴ２がオンによって、出力信号ｏｕｔ１および反転出力信号ｏｕｔＢ１のいずれもが「Ｈ」となる。したがって、出力信号ｏｕｔ１は、期間２では常に「Ｈ」となる。
【０４９５】
次に、期間３では、制御信号ｃｔｒｌ１が「Ｈ」となる。これにより、ＮチャネルＭＯＳトランジスタＮＴ３がオンとなり、ＰチャネルＭＯＳトランジスタＰＴ１，ＰＴ２がオフとなる。また、ＮチャネルＭＯＳトランジスタＮＴ１はオンであり、ＮチャネルＭＯＳトランジスタＮＴ２はオフである。ＮチャネルＭＯＳトランジスタＮＴ３，ＮＴ１がオンにより、出力信号ｏｕｔ１は「Ｌ」となる。また、出力信号ｏｕｔ１（＝「Ｌ」）がＰチャネルＭＯＳトランジスタＰＴ３のゲートに入力されることによって、ＰチャネルＭＯＳトランジスタＰＴ３がオンとなり、反転出力信号ｏｕｔＢ１は「Ｈ」となる。
【０４９６】
図４０は、インバータ回路９５０の入出力関係をまとめた図である。同図を参照して、制御信号ｃｔｒｌ１が非活性化、つまり「１」（＝「Ｈ」）となる期間１および期間３では、出力信号ｏｕｔ１および反転出力信号ｏｕｔＢ１のいずれかが「１」（＝「Ｈ」）となり、他方が「０」（＝「Ｌ」）となる。また、制御信号ｃｔｒｌ１が活性化、つまり「０」（＝「Ｌ」）となる期間２では、出力信号ｏｕｔ１および反転出力信号ｏｕｔＢ１のいずれもが「１」（＝「Ｈ」）となる。
【０４９７】
以上のように、本実施の形態に係るインバータ回路によれば、期間２において入力信号ｉｎ１および反転出力信号ｉｎＢ１がどのように変化したかに係らず、期間１で出力信号ｏｕｔ１と反転出力信号ｏｕｔＢ１のうちの「Ｌ」レベルにある一方が期間２において「Ｈ」に変化し（充電）、さらに期間３において他方が「Ｌ」に変化する（放電）ので、入力信号の変化の相違によって、消費電力が変化しないようにすることができる。それゆえ、電力解析によって暗号処理に用いられる鍵などの秘匿データの傍受を防止することができる。
【０４９８】
［第１０の実施形態］
本実施の形態は、入力信号の変化の相違によって消費電力が変化しない、論理回路の一種であるＮＡＮＤ回路に関する。
【０４９９】
（ＮＡＮＤ回路の構成）
図４１は、第１０の実施形態に係るＮＡＮＤ回路の構成を示す。同図を参照して、このＮＡＮＤ回路９５１は、ＰチャネルＭＯＳトランジスタＰＴ１，ＰＴ２，ＰＴ３，ＰＴ４と、ＮチャネルＭＯＳトランジスタＮＴ１，ＮＴ２，ＮＴ３，ＮＴ４，ＮＴ５，ＮＴ６とを含む。
【０５００】
ＰチャネルＭＯＳトランジスタＰＴ１は、そのソースが電源に接続され、そのドレインがノードＮ１に接続し、そのゲートには制御信号ｃｔｒｌ１が入力される。
【０５０１】
ＰチャネルＭＯＳトランジスタＰＴ２は、そのソースが電源に接続され、そのドレインがノードＮ２に接続し、そのゲートには制御信号ｃｔｒｌ１が入力される。
【０５０２】
ＰチャネルＭＯＳトランジスタＰＴ３は、そのソースが電源に接続され、そのドレインがＰチャネルＭＯＳトランジスタＰＴ４のゲートおよびノードＮ２に接続され、そのゲートがＰチャネルＭＯＳトランジスタＰＴ４のドレインおよびノードＮ１に接続される。
【０５０３】
ＰチャネルＭＯＳトランジスタＰＴ４は、そのソースが電源に接続され、そのドレインがＰチャネルＭＯＳトランジスタＰＴ３のゲートおよびノードＮ１に接続され、そのゲートがＰチャネルＭＯＳトランジスタＰＴ３のドレインおよびノードＮ２に接続される。
【０５０４】
ＮチャネルＭＯＳトランジスタＮＴ５は、そのソースが接地され、そのドレインがノードＮ３に接続され、そのゲートには制御信号ｃｔｒｌ１が入力される。
【０５０５】
ＮチャネルＭＯＳトランジスタＮＴ１は、そのソースがノードＮ４に接続され、そのドレインがノードＮ１に接続され、そのゲートには入力信号ｉｎ１が入力される。
【０５０６】
ＮチャネルＭＯＳトランジスタＮＴ６は、そのソースがノードＮ５に接続され、そのドレインがノードＮ２に接続され、そのゲートには電源が入力される。
【０５０７】
ＮチャネルＭＯＳトランジスタＮＴ７は、そのソースがノードＮ３に接続され、そのドレインがノードＮ４に接続され、そのゲートは接地される。
【０５０８】
ＮチャネルＭＯＳトランジスタＮＴ２は、そのソースがノードＮ３に接続され、そのドレインがノードＮ４に接続され、そのゲートには入力信号ｉｎ２が入力される。
【０５０９】
ＮチャネルＭＯＳトランジスタＮＴ３は、そのソースがノードＮ３に接続され、そのドレインがノードＮ５に接続され、そのゲートには反転入力信号ｉｎＢ１が入力される。
【０５１０】
ＮチャネルＭＯＳトランジスタＮＴ４は、そのソースがノードＮ３に接続され、そのドレインがノードＮ５に接続され、そのゲートには反転入力信号ｉｎＢ２が入力される。
【０５１１】
ＰチャネルＭＯＳトランジスタＰＴ１，ＰＴ２、およびＮチャネルＭＯＳトランジスタＮＴ５は、第１群に属し、制御信号ｃｔｒｌ１の活性化、つまり「Ｌ」になると、ノードＮ１およびＮ２を「Ｈ」にする。
【０５１２】
ＮチャネルＭＯＳトランジスタＮＴ１，ＮＴ７，ＮＴ２は、第２群に属し、制御信号ｃｔｒｌ１が非活性、つまり「Ｈ」のときに、入力信号ｉｎ１，ｉｎ２が「Ｈ」になると、ノードＮ１を「Ｌ」にする。
【０５１３】
ＮチャネルＭＯＳトランジスタＮＴ６，ＮＴ３，ＮＴ４は、第３群に属し、制御信号ｃｔｒｌ１が非活性、つまり「Ｈ」のときに、反転入力信号ｉｎＢ１またはｉｎＢ２が「Ｈ」になると、ノードＮ２を「Ｌ」にする。
【０５１４】
ノードＮ１は、正論理の出力端子と接続され、正論理の出力端子から、出力信号ｏｕｔ１が出力される。ノードＮ２は、負論理の出力端子と接続され、負論理の出力端子から反転出力信号ｏｕｔＢ１が出力される。
【０５１５】
（動作）
次に、このＮＡＮＤ回路９５１に入力される信号と出力される信号の関係を説明する。図４２は、ＮＡＮＤ回路９５１の入出力関係をまとめた図である。同図の期間１、期間２、期間３は、第９の実施形態と同様に、この順序で変化し、入力信号ｉｎ１，ｉｎ２、および反転入力信号ｉｎＢ１，ｉｎＢ２のレベルが変化するのは、期間２に限定される。
【０５１６】
同図を参照して、期間１および期間３では、制御信号ｃｔｒｌ１が「Ｈ」となる。これにより、ＮチャネルＭＯＳトランジスタＮＴ５がオン、ＰチャネルＭＯＳトランジスタＰＴ１，ＰＴ２がオフとなる。
【０５１７】
期間１および期間３で、入力信号ｉｎ１が「Ｈ」、入力信号ｉｎ２が「Ｈ」、反転入力信号ｉｎＢ１が「Ｌ」、かつ反転入力信号ｉｎＢ２が「Ｌ」のとき、ＮチャネルＭＯＳトランジスタＮＴ１がオン、ＮチャネルＭＯＳトランジスタＮＴ２がオン、ＮチャネルＭＯＳトランジスタＮＴ３がオフ、かつＮチャネルＭＯＳトランジスタＮＴ４がオフとなる。
【０５１８】
ＮチャネルＭＯＳトランジスタＮＴ１，ＮＴ２，ＮＴ５がオンにより、出力信号ｏｕｔ１は、「Ｌ」となる。また、ＮチャネルＭＯＳトランジスタＮＴ３，ＮＴ４がオフであり、出力信号ｏｕｔ１（＝「Ｌ」）がＰチャネルＭＯＳトランジスタＰＴ３のゲートに入力されることによって、ＰチャネルＭＯＳトランジスタＰＴ３がオンとなり、反転出力信号ｏｕｔＢ１は「Ｈ」となる。
【０５１９】
期間１および期間３で、入力信号ｉｎ１が「Ｈ」、入力信号ｉｎ２が「Ｈ」、反転入力信号ｉｎＢ１が「Ｌ」、かつ反転入力信号ｉｎＢ２が「Ｌ」以外のときには、ＮチャネルＭＯＳトランジスタＮＴ１とＮＴ２の一方がオンとなり、他方がオフとなる。また、ＮチャネルＭＯＳトランジスタＮＴ３とＮＴ４の一方がオンとなり、他方がオフとなる。ＮチャネルＭＯＳトランジスタＮＴ５と、ＮＴ３またはＮＴ４とがオンにより、反転出力信号ｏｕｔＢ１は「Ｌ」となる。また、ＮチャネルＭＯＳトランジスタＮＴ１またはＮＴ２がオフであり、反転出力信号ｏｕｔＢ１（＝「Ｌ」）がＰチャネルＭＯＳトランジスタＰＴ４のゲートに入力されることによって、ＰチャネルＭＯＳトランジスタＰＴ４がオンとなり、出力信号ｏｕｔ１は「Ｈ」となる。
【０５２０】
一方、期間２では、制御信号ｃｔｒｌ１が「Ｌ」となる。これにより、ＮチャネルＭＯＳトランジスタＮＴ５がオフ、ＰチャネルＭＯＳトランジスタＰＴ１，ＰＴ２がオンとなる。
【０５２１】
このときには、入力信号ｉｎ１，ｉｎ２、および反転入力信号ｉｎＢ１，ｉｎＢ２のレベルに係らず、出力信号ｏｕｔ１および反転出力信号ｏｕｔＢ１は、いずれも「Ｈ」となる。したがって、第９の実施形態のインバータ回路と同様に、期間２において、入力信号ｉｎ１，ｉｎ２、反転出力信号ｉｎＢ１，ｉｎＢ２のレベルを変化させることができる。
【０５２２】
以上のように、本実施の形態に係るＮＡＮＤ回路によれば、期間２において、入力信号ｉｎ１，ｉｎ２、反転入力信号ｉｎＢ１，ｉｎＢ２がどのように変化したかに係らず、期間１で出力信号ｏｕｔ１と反転出力信号ｏｕｔＢ１のうちの「Ｌ」レベルにある方が期間２において「Ｈ」に変化し（充電）、さらに期間３において出力信号ｏｕｔ１と反転出力信号ｏｕｔＢ１のうちのいずれかが「Ｌ」に変化する（放電）ので、入力信号の変化の相違によって消費電力が変化しないようにすることができる。それゆえ、電力解析によって暗号処理に用いられる鍵などの秘匿データの傍受を防止することができる。
【０５２３】
［第１１の実施形態］
本実施の形態は、入力信号の変化の相違によって消費電力が変化しない、論理回路の一種である加算回路に関する。
【０５２４】
（加算回路の構成）
図４３は、第１１の実施形態に係る加算回路の構成を示す図である。同図を参照して、この加算回路は、ＰチャネルＭＯＳトランジスタＰＴ１〜ＰＴ８と、ＮチャネルＭＯＳトランジスタＮＴ１〜ＮＴ３２とを備える。
【０５２５】
ＰチャネルＭＯＳトランジスタＰＴ１は、そのソースが電源に接続され、そのドレインがノードＮ１に接続し、そのゲートには制御信号ｃｔｒｌ１が入力される。
【０５２６】
ＰチャネルＭＯＳトランジスタＰＴ２は、そのソースが電源に接続され、そのドレインがノードＮ２に接続し、そのゲートには制御信号ｃｔｒｌ１が入力される。
【０５２７】
ＰチャネルＭＯＳトランジスタＰＴ３は、そのソースが電源に接続され、そのドレインがＰチャネルＭＯＳトランジスタＰＴ４のゲートおよびノードＮ２に接続され、そのゲートがＰチャネルＭＯＳトランジスタＰＴ４のドレインおよびノードＮ１に接続される。
【０５２８】
ＰチャネルＭＯＳトランジスタＰＴ４は、そのソースが電源に接続され、そのドレインがＰチャネルＭＯＳトランジスタＰＴ３のゲートおよびノードＮ１に接続され、そのゲートがＰチャネルＭＯＳトランジスタＰＴ３のドレインおよびノードＮ２に接続される。
【０５２９】
ＮチャネルＭＯＳトランジスタＮＴ２１は、そのソースが接地され、そのドレインがノードＮ３に接続され、そのゲートには制御信号ｃｔｒｌ１が入力される。
【０５３０】
ＮチャネルＭＯＳトランジスタＮＴ１は、そのソースがノードＮ４に接続され、そのドレインがノードＮ１に接続され、そのゲートには反転キャリー入力信号ｃｉｎＢ１が入力される。
【０５３１】
ＮチャネルＭＯＳトランジスタＮＴ２は、そのソースがノードＮ５に接続され、そのドレインがノードＮ１に接続され、そのゲートにはキャリー入力信号ｃｉｎ１が入力される。
【０５３２】
ＮチャネルＭＯＳトランジスタＮＴ１１は、そのソースがノードＮ６に接続され、そのドレインがノードＮ２に接続され、そのゲートには反転キャリー入力信号ｃｉｎＢ１が入力される。
【０５３３】
ＮチャネルＭＯＳトランジスタＮＴ１２は、そのソースがノードＮ７に接続され、そのドレインがノードＮ２に接続され、そのゲートにはキャリー入力信号ｃｉｎ１が入力される。
【０５３４】
ノードＮ４とノードＮ３との間には、直列に接続されたＮチャネルＭＯＳトランジスタＮＴ３およびＮＴ４と、直列に接続されたＮチャネルＭＯＳトランジスタＮＴ５およびＮＴ６とが設けられる。ＮチャネルＭＯＳトランジスタＮＴ３のゲートには、入力信号ｉｎ１が入力され、ＮチャネルＭＯＳトランジスタＮＴ４のゲートには、入力信号ｉｎ２が入力され、ＮチャネルＭＯＳトランジスタＮＴ５のゲートには、反転入力信号ｉｎＢ１が入力され、ＮチャネルＭＯＳトランジスタＮＴ６のゲートには、反転入力信号ｉｎＢ２が入力される。
【０５３５】
ノードＮ５とノードＮ３との間には、直列に接続されたＮチャネルＭＯＳトランジスタＮＴ７およびＮＴ８と、直列に接続されたＮチャネルＭＯＳトランジスタＮＴ９およびＮＴ１０とが設けられる。ＮチャネルＭＯＳトランジスタＮＴ７のゲートには、入力信号ｉｎ１が入力され、ＮチャネルＭＯＳトランジスタＮＴ８のゲートには、反転入力信号ｉｎＢ２が入力され、ＮチャネルＭＯＳトランジスタＮＴ９のゲートには、反転入力信号ｉｎＢ１が入力され、ＮチャネルＭＯＳトランジスタＮＴ１０のゲートには、入力信号ｉｎ２が入力される。
【０５３６】
ノードＮ６とノードＮ３との間には、直列に接続されたＮチャネルＭＯＳトランジスタＮＴ１３およびＮＴ１４と、直列に接続されたＮチャネルＭＯＳトランジスタＮＴ１５およびＮＴ１６とが設けられる。ＮチャネルＭＯＳトランジスタＮＴ１３のゲートには、入力信号ｉｎ１が入力され、ＮチャネルＭＯＳトランジスタＮＴ１４のゲートには、反転入力信号ｉｎＢ２が入力され、ＮチャネルＭＯＳトランジスタＮＴ１５のゲートには、反転入力信号ｉｎＢ１が入力され、ＮチャネルＭＯＳトランジスタＮＴ１６のゲートには、入力信号ｉｎ２が入力される。
【０５３７】
ノードＮ７とノードＮ３との間には、直列に接続されたＮチャネルＭＯＳトランジスタＮＴ１７およびＮＴ１８と、直列に接続されたＮチャネルＭＯＳトランジスタＮＴ１９およびＮＴ２０とが設けられる。ＮチャネルＭＯＳトランジスタＮＴ１７のゲートには、入力信号ｉｎ１が入力され、ＮチャネルＭＯＳトランジスタＮＴ１８のゲートには、入力信号ｉｎ２が入力され、ＮチャネルＭＯＳトランジスタＮＴ１９のゲートには、反転入力信号ｉｎＢ１が入力され、ＮチャネルＭＯＳトランジスタＮＴ２０のゲートには、反転入力信号ｉｎＢ２が入力される。
【０５３８】
ＰチャネルＭＯＳトランジスタＰＴ５は、そのソースが電源に接続され、そのドレインがノードＮ８に接続し、そのゲートには制御信号ｃｔｒｌ１が入力される。
【０５３９】
ＰチャネルＭＯＳトランジスタＰＴ６は、そのソースが電源に接続され、そのドレインがノードＮ９に接続し、そのゲートには制御信号ｃｔｒｌ１が入力される。
【０５４０】
ＰチャネルＭＯＳトランジスタＰＴ７は、そのソースが電源に接続され、そのドレインがＰチャネルＭＯＳトランジスタＰＴ８のゲートおよびノードＮ９に接続され、そのゲートがＰチャネルＭＯＳトランジスタＰＴ８のドレインおよびノードＮ８に接続される。
【０５４１】
ＰチャネルＭＯＳトランジスタＰＴ８は、そのソースが電源に接続され、そのドレインがＰチャネルＭＯＳトランジスタＰＴ７のゲートおよびノードＮ８に接続され、そのゲートがＰチャネルＭＯＳトランジスタＰＴ７のドレインおよびノードＮ９に接続される。
【０５４２】
ＮチャネルＭＯＳトランジスタＮＴ３２は、そのソースが接地され、そのドレインがノードＮ１０に接続され、そのゲートには制御信号ｃｔｒｌ１が入力される。
【０５４３】
ＮチャネルＭＯＳトランジスタＮＴ２２は、そのソースがノードＮ１１に接続され、そのドレインがノードＮ８に接続され、そのゲートには反転キャリー入力信号ｃｉｎＢ１が入力される。
【０５４４】
ＮチャネルＭＯＳトランジスタＮＴ２７は、そのソースがノードＮ１２に接続され、そのドレインがノードＮ９に接続され、そのゲートにはキャリー入力信号ｃｉｎ１が入力される。
【０５４５】
ノードＮ１１とノードＮ１０との間には、並列接続されたＮチャネルＭＯＳトランジスタＮＴ２３と、ＮチャネルＭＯＳトランジスタＮＴ２４とが設けられる。ＮチャネルＭＯＳトランジスタＮＴ２３のゲートには、反転入力信号ｉｎＢ１が入力され、ＮチャネルＭＯＳトランジスタＮＴ２４のゲートには、反転入力信号ｉｎＢ２が入力される。
【０５４６】
ノードＮ１２とノードＮ１０との間には、並列接続されたＮチャネルＭＯＳトランジスタＮＴ２８と、ＮチャネルＭＯＳトランジスタＮＴ２９とが設けられる。ＮチャネルＭＯＳトランジスタＮＴ２８のゲートには、入力信号ｉｎ１が入力され、ＮチャネルＭＯＳトランジスタＮＴ２９のゲートには、入力信号ｉｎ２が入力される。
【０５４７】
ノードＮ８とノードＮ１０との間には、直列接続されたＮチャネルＭＯＳトランジスタＮＴ２５と、ＮチャネルＭＯＳトランジスタＮＴ２６とが設けられる。ＮチャネルＭＯＳトランジスタＮＴ２５のゲートには、反転入力信号ｉｎＢ１が入力され、ＮチャネルＭＯＳトランジスタＮＴ２６のゲートには、反転入力信号ｉｎＢ２が入力される。
【０５４８】
ノードＮ９とノードＮ１０との間には、直列接続されたＮチャネルＭＯＳトランジスタＮＴ３０と、ＮチャネルＭＯＳトランジスタＮＴ３１とが設けられる。ＮチャネルＭＯＳトランジスタＮＴ３０のゲートには、入力信号ｉｎ１が入力され、ＮチャネルＭＯＳトランジスタＮＴ３１のゲートには、入力信号ｉｎ２が入力される。
【０５４９】
ＰチャネルＭＯＳトランジスタＰＴ１，ＰＴ２、およびＮチャネルＭＯＳトランジスタＮＴ２１は、第１群に属し、制御信号ｃｔｒｌ１の活性化、つまり「Ｌ」になると、ノードＮ１およびＮ２を「Ｈ」にする。
【０５５０】
ＮチャネルＭＯＳトランジスタＮＴ１〜ＮＴ１０は、第２群に属し、制御信号ｃｔｒｌ１が非活性、つまり「Ｈ」のときに、入力信号ｉｎ１，ｉｎ２、反転入力信号ｉｎＢ１，ｉｎＢ２、キャリー入力信号ｃｉｎ１、反転キャリー入力信号ｃｉｎＢ１が所定のレベルになると、ノードＮ１を「Ｌ」にする。
【０５５１】
ＮチャネルＭＯＳトランジスタＮＴ２は、第３群に属し、制御信号ｃｔｒｌ１が非活性、つまり「Ｈ」のときに、入力信号ｉｎ１，ｉｎ２、反転入力信号ｉｎＢ１，ｉｎＢ２、キャリー入力信号ｃｉｎ１、反転キャリー入力信号ｃｉｎＢ１が所定のレベルになると、ノードＮ１を「Ｌ」にする。
【０５５２】
ＰチャネルＭＯＳトランジスタＰＴ５，ＰＴ６、およびＮチャネルＭＯＳトランジスタＮＴ３２は、第１´群に属し、制御信号ｃｔｒｌ１の活性化、つまり「Ｌ」になると、ノードＮ８およびＮ９を「Ｈ」にする。
【０５５３】
ＮチャネルＭＯＳトランジスタＮＴ２２〜ＮＴ２６は、第２´群に属し、制御信号ｃｔｒｌ１が非活性、つまり「Ｈ」のときに、反転入力信号ｉｎＢ１，ｉｎＢ２、および反転キャリー入力信号ｃｉｎＢ１が所定のレベルになると、ノードＮ８を「Ｌ」にする。
【０５５４】
ＮチャネルＭＯＳトランジスタＮＴ２は、第３´群に属し、制御信号ｃｔｒｌ１が非活性、つまり「Ｈ」のときに、入力信号ｉｎ１，ｉｎ２、およびキャリー入力信号ｃｉｎ１が所定のレベルになると、ノードＮ９を「Ｌ」にする。
【０５５５】
ノードＮ１は、正論理の出力端子と接続され、正論理の出力端子から、出力信号ｏｕｔ１が出力される。ノードＮ２は、負論理の出力端子と接続され、負論理の出力端子から反転出力信号ｏｕｔＢ１が出力される。また、ノードＮ８は、正論理のキャリー出力端子と接続され、正論理のキャリー出力端子から、キャリー出力信号ｃｏｕｔ１が出力される。ノードＮ９は、負論理のキャリー出力端子と接続され、負論理のキャリー出力端子から反転キャリー出力信号ｃｏｕｔＢ１が出力される。
【０５５６】
（動作）
次に、この加算回路９５２に入力される信号と出力される信号の関係を説明する。図４４は、加算回路９５２の入出力関係をまとめた図である。同図の期間１、期間２、期間３は、第９の実施形態と同様に、この順序で変化し、入力信号ｉｎ１，ｉｎ２、反転入力信号ｉｎＢ１，ｉｎＢ２、キャリー入力信号ｃｉｎ１、および反転キャリー入力信号ｃｉｎＢ１のレベルが変化するのは、期間２に限定される。
【０５５７】
同図を参照して、期間１および期間３では、制御信号ｃｔｒｌ１が「Ｈ」となる。これにより、ＮチャネルＭＯＳトランジスタＮＴ２１がオン、ＰチャネルＭＯＳトランジスタＰＴ１，ＰＴ２がオフとなる。また、ＮチャネルＭＯＳトランジスタＮＴ３２がオン、ＰチャネルＭＯＳトランジスタＰＴ５，ＰＴ６がオフとなる。
【０５５８】
期間１および期間３の信号のレベルは、以下のようになる。
【０５５９】
（１）  キャリー入力信号ｃｉｎ１が「Ｌ」、反転キャリー入力信号ｃｉｎＢ１が「Ｈ」、入力信号ｉｎ１が「Ｌ」、反転入力信号ｉｎＢ１が「Ｈ」、入力信号ｉｎ２が「Ｌ」、かつ反転入力信号ｉｎＢ２が「Ｈ」のときに、ＮチャネルＭＯＳトランジスタＮＴ１，ＮＴ５，ＮＴ６がオンとなり、出力信号ｏｕｔ１は「Ｌ」となる。
【０５６０】
また、ＮチャネルＭＯＳトランジスタＮＴ１２，ＮＴ１３，ＮＴ１６，ＮＴ１７，ＮＴ１８がオフであり、出力信号ｏｕｔ１（＝「Ｌ」）がＰチャネルＭＯＳトランジスタＰＴ３のゲートに入力されることによって、ＰチャネルＭＯＳトランジスタＰＴ３がオンとなり、反転出力信号ｏｕｔＢ１は「Ｈ」となる。
【０５６１】
また、このときに、ＮチャネルＭＯＳトランジスタＮＴ２２，ＮＴ２３，ＮＴ２４，ＮＴ２５，ＮＴ２６がオンとなり、キャリー出力信号ｃｏｕｔ１は「Ｌ」となる。
【０５６２】
また、ＮチャネルＭＯＳトランジスタＮＴ２７，ＮＴ２８，ＮＴ２９，ＮＴ３０，ＮＴ３１がオフであり、キャリー出力信号ｃｏｕｔ１（＝「Ｌ」）がＰチャネルＭＯＳトランジスタＰＴ７のゲートに入力されることによって、ＰチャネルＭＯＳトランジスタＰＴ７がオンとなり、反転キャリー出力信号ｃｏｕｔＢ１は「Ｈ」となる。
【０５６３】
（２）  キャリー入力信号ｃｉｎ１が「Ｌ」、反転キャリー入力信号ｃｉｎＢ１が「Ｈ」、入力信号ｉｎ１が「Ｌ」、反転入力信号ｉｎＢ１が「Ｈ」、入力信号ｉｎ２が「Ｈ」、かつ反転入力信号ｉｎＢ２が「Ｌ」のときに、ＮチャネルＭＯＳトランジスタＮＴ１１，ＮＴ１５，ＮＴ１６がオンとなり、反転出力信号ｏｕｔＢ１は「Ｌ」となる。
【０５６４】
また、ＮチャネルＭＯＳトランジスタＮＴ２，ＮＴ３，ＮＴ６，ＮＴ７，ＮＴ８がオフであり、出力信号ｏｕｔＢ１（＝「Ｌ」）がＰチャネルＭＯＳトランジスタＰＴ４のゲートに入力されることによって、ＰチャネルＭＯＳトランジスタＰＴ４がオンとなり、出力信号ｏｕｔ１は「Ｈ」となる。
【０５６５】
また、このときに、ＮチャネルＭＯＳトランジスタＮＴ２２，ＮＴ２３がオンとなり、キャリー出力信号ｃｏｕｔ１は「Ｌ」となる。
【０５６６】
また、ＮチャネルＭＯＳトランジスタＮＴ２７，ＮＴ２８，ＮＴ３０がオフであり、キャリー出力信号ｃｏｕｔ１（＝「Ｌ」）がＰチャネルＭＯＳトランジスタＰＴ７のゲートに入力されることによって、ＰチャネルＭＯＳトランジスタＰＴ７がオンとなり、反転キャリー出力信号ｃｏｕｔＢ１は「Ｈ」となる。
【０５６７】
（３）  キャリー入力信号ｃｉｎ１が「Ｌ」、反転キャリー入力信号ｃｉｎＢ１が「Ｈ」、入力信号ｉｎ１が「Ｈ」、反転入力信号ｉｎＢ１が「Ｌ」、入力信号ｉｎ２が「Ｌ」、かつ反転入力信号ｉｎＢ２が「Ｈ」のときに、ＮチャネルＭＯＳトランジスタＮＴ１１，ＮＴ１３，ＮＴ１４がオンとなり、反転出力信号ｏｕｔＢ１は「Ｌ」となる。
【０５６８】
また、ＮチャネルＭＯＳトランジスタＮＴ２，ＮＴ４，ＮＴ５，ＮＴ９，ＮＴ１０がオフであり、出力信号ｏｕｔＢ１（＝「Ｌ」）がＰチャネルＭＯＳトランジスタＰＴ４のゲートに入力されることによって、ＰチャネルＭＯＳトランジスタＰＴ４がオンとなり、出力信号ｏｕｔ１は「Ｈ」となる。
【０５６９】
また、このときに、ＮチャネルＭＯＳトランジスタＮＴ２２，ＮＴ２４がオンとなり、キャリー出力信号ｃｏｕｔ１は「Ｌ」となる。
【０５７０】
また、ＮチャネルＭＯＳトランジスタＮＴ２７，ＮＴ２９，ＮＴ３１がオフであり、キャリー出力信号ｃｏｕｔ１（＝「Ｌ」）がＰチャネルＭＯＳトランジスタＰＴ７のゲートに入力されることによって、ＰチャネルＭＯＳトランジスタＰＴ７がオンとなり、反転キャリー出力信号ｃｏｕｔＢ１は「Ｈ」となる。
【０５７１】
（４）  キャリー入力信号ｃｉｎ１が「Ｌ」、反転キャリー入力信号ｃｉｎＢ１が「Ｈ」、入力信号ｉｎ１が「Ｈ」、反転入力信号ｉｎＢ１が「Ｌ」、入力信号ｉｎ２が「Ｈ」、かつ反転入力信号ｉｎＢ２が「Ｌ」のときに、ＮチャネルＭＯＳトランジスタＮＴ１，Ｎ３５，ＮＴ４がオンとなり、出力信号ｏｕｔ１は、「Ｌ」となる。
【０５７２】
また、ＮチャネルＭＯＳトランジスタＮＴ１２，ＮＴ１４，ＮＴ１５，ＮＴ１９，ＮＴ２０がオフであり、出力信号ｏｕｔ１（＝「Ｌ」）がＰチャネルＭＯＳトランジスタＰＴ３のゲートに入力されることによって、ＰチャネルＭＯＳトランジスタＰＴ３がオンとなり、反転出力信号ｏｕｔＢ１は「Ｈ」となる。
【０５７３】
また、このときに、ＮチャネルＭＯＳトランジスタＮＴ３０，ＮＴ３１がオンとなり、反転キャリー出力信号ｃｏｕｔＢ１は「Ｌ」となる。
【０５７４】
また、ＮチャネルＭＯＳトランジスタＮＴ２３，ＮＴ２４，ＮＴ２５，ＮＴ２６がオフであり、キャリー出力信号ｃｏｕｔＢ１（＝「Ｌ」）がＰチャネルＭＯＳトランジスタＰＴ８のゲートに入力されることによって、ＰチャネルＭＯＳトランジスタＰＴ８がオンとなり、キャリー出力信号ｃｏｕｔ１は「Ｈ」となる。
【０５７５】
（５）  キャリー入力信号ｃｉｎ１が「Ｈ」、反転キャリー入力信号ｃｉｎＢ１が「Ｌ」、入力信号ｉｎ１が「Ｌ」、反転入力信号ｉｎＢ１が「Ｈ」、入力信号ｉｎ２が「Ｌ」、かつ反転入力信号ｉｎＢ２が「Ｈ」のときに、ＮチャネルＭＯＳトランジスタＮＴ１２，ＮＴ１９，ＮＴ２０がオンとなり、反転出力信号ｏｕｔ１は「Ｌ」となる。
【０５７６】
また、ＮチャネルＭＯＳトランジスタＮＴ１，ＮＴ３，ＮＴ４，ＮＴ７，ＮＴ１０がオフであり、出力信号ｏｕｔＢ１（＝「Ｌ」）がＰチャネルＭＯＳトランジスタＰＴ４のゲートに入力されることによって、ＰチャネルＭＯＳトランジスタＰＴ４がオンとなり、出力信号ｏｕｔ１は「Ｈ」となる。
【０５７７】
また、このときに、ＮチャネルＭＯＳトランジスタＮＴ２５，ＮＴ２６がオンとなり、キャリー出力信号ｃｏｕｔ１は「Ｌ」となる。
【０５７８】
また、ＮチャネルＭＯＳトランジスタＮＴ２８，ＮＴ２９，ＮＴ３０，ＮＴ３１がオフであり、キャリー出力信号ｃｏｕｔ１（＝「Ｌ」）がＰチャネルＭＯＳトランジスタＰＴ７のゲートに入力されることによって、ＰチャネルＭＯＳトランジスタＰＴ７がオンとなり、反転キャリー出力信号ｃｏｕｔＢ１は「Ｈ」となる。
【０５７９】
（６）  キャリー入力信号ｃｉｎ１が「Ｈ」、反転キャリー入力信号ｃｉｎＢ１が「Ｌ」、入力信号ｉｎ１が「Ｌ」、反転入力信号ｉｎＢ１が「Ｈ」、入力信号ｉｎ２が「Ｈ」、かつ反転入力信号ｉｎＢ２が「Ｌ」のときに、ＮチャネルＭＯＳトランジスタＮＴ２，ＮＴ１９，ＮＴ１０がオンとなり、出力信号ｏｕｔＢ１は「Ｌ」となる。
【０５８０】
また、ＮチャネルＭＯＳトランジスタＮＴ１１，ＮＴ１３，ＮＴ１４，ＮＴ１７，ＮＴ２０がオフであり、出力信号ｏｕｔ１（＝「Ｌ」）がＰチャネルＭＯＳトランジスタＰＴ３のゲートに入力されることによって、ＰチャネルＭＯＳトランジスタＰＴ３がオンとなり、反転出力信号ｏｕｔＢ１は「Ｈ」となる。
【０５８１】
また、このときに、ＮチャネルＭＯＳトランジスタＮＴ２７，ＮＴ２９がオンとなり、反転キャリー出力信号ｃｏｕｔＢ１は「Ｌ」となる。
【０５８２】
また、ＮチャネルＭＯＳトランジスタＮＴ２２，ＮＴ２４，ＮＴ２６がオフであり、キャリー出力信号ｃｏｕｔＢ１（＝「Ｌ」）がＰチャネルＭＯＳトランジスタＰＴ８のゲートに入力されることによって、ＰチャネルＭＯＳトランジスタＰＴ８がオンとなり、キャリー出力信号ｃｏｕｔ１は「Ｈ」となる。
【０５８３】
（７）  キャリー入力信号ｃｉｎ１が「Ｈ」、反転キャリー入力信号ｃｉｎＢ１が「Ｌ」、入力信号ｉｎ１が「Ｈ」、反転入力信号ｉｎＢ１が「Ｌ」、入力信号ｉｎ２が「Ｌ」、かつ反転入力信号ｉｎＢ２が「Ｈ」のときに、ＮチャネルＭＯＳトランジスタＮＴ２，ＮＴ７，ＮＴ８がオンとなり、出力信号ｏｕｔ１は「Ｌ」となる。
【０５８４】
また、ＮチャネルＭＯＳトランジスタＮＴ１１，ＮＴ１５，ＮＴ１６，ＮＴ１８，ＮＴ１９がオフであり、出力信号ｏｕｔ１（＝「Ｌ」）がＰチャネルＭＯＳトランジスタＰＴ３のゲートに入力されることによって、ＰチャネルＭＯＳトランジスタＰＴ３がオンとなり、反転出力信号ｏｕｔＢ１は「Ｈ」となる。
【０５８５】
また、このときに、ＮチャネルＭＯＳトランジスタＮＴ２７，ＮＴ２８がオンとなり、反転キャリー出力信号ｃｏｕｔＢ１は「Ｌ」となる。
【０５８６】
また、ＮチャネルＭＯＳトランジスタＮＴ２２，ＮＴ２３，ＮＴ２５がオフであり、キャリー出力信号ｃｏｕｔＢ１（＝「Ｌ」）がＰチャネルＭＯＳトランジスタＰＴ８のゲートに入力されることによって、ＰチャネルＭＯＳトランジスタＰＴ８がオンとなり、キャリー出力信号ｃｏｕｔ１は「Ｈ」となる。
【０５８７】
（８）  キャリー入力信号ｃｉｎ１が「Ｈ」、反転キャリー入力信号ｃｉｎＢ１が「Ｌ」、入力信号ｉｎ１が「Ｈ」、反転入力信号ｉｎＢ１が「Ｌ」、入力信号ｉｎ２が「Ｈ」、かつ反転入力信号ｉｎＢ２が「Ｌ」のときに、ＮチャネルＭＯＳトランジスタＮＴ１２，Ｎ１７，ＮＴ１８がオンとなり、反転出力信号ｏｕｔＢ１は、「Ｌ」となる。
【０５８８】
また、ＮチャネルＭＯＳトランジスタＮＴ１，ＮＴ５，ＮＴ６，ＮＴ８，ＮＴ９がオフであり、出力信号ｏｕｔＢ１（＝「Ｌ」）がＰチャネルＭＯＳトランジスタＰＴ４のゲートに入力されることによって、ＰチャネルＭＯＳトランジスタＰＴ４がオンとなり、出力信号ｏｕｔ１は「Ｈ」となる。
【０５８９】
また、このときに、ＮチャネルＭＯＳトランジスタＮＴ３０，ＮＴ３１がオンとなり、反転キャリー出力信号ｃｏｕｔＢ１は「Ｌ」となる。
【０５９０】
また、ＮチャネルＭＯＳトランジスタＮＴ２２，ＮＴ２３，ＮＴ２４，ＮＴ２５，ＮＴ２６がオフであり、キャリー出力信号ｃｏｕｔＢ１（＝「Ｌ」）がＰチャネルＭＯＳトランジスタＰＴ８のゲートに入力されることによって、ＰチャネルＭＯＳトランジスタＰＴ８がオンとなり、キャリー出力信号ｃｏｕｔ１は「Ｈ」となる。
【０５９１】
以上のように、制御信号ｃｔｒｌ１が「Ｈ」となる期間１および期間３では、キャリー入力信号ｃｉｎ１、反転キャリー入力信号ｃｉｎＢ１、入力信号ｉｎ１、入力信号ｉｎ２、反転入力信号ｉｎＢ１、および反転入力信号ｉｎＢ２のレベルに応じて、出力信号ｏｕｔ１および反転出力信号ｏｕｔＢ１の一方が「Ｈ」で、他方が「Ｌ」となり、キャリー出力信号ｃｏｕｔ１および反転キャリー出力信号ｃｏｕｔＢ１の一方が「Ｈ」で、他方が「Ｌ」となる。
【０５９２】
一方、期間２では、制御信号ｃｔｒｌ１が「Ｌ」となる。これにより、ＮチャネルＭＯＳトランジスタＮＴ２１がオフ、ＰチャネルＭＯＳトランジスタＰＴ１，ＰＴ２がオンとなる。また、ＮチャネルＭＯＳトランジスタＮＴ３２がオフ、ＰチャネルＭＯＳトランジスタＰＴ５，ＰＴ６がオンとなる。
【０５９３】
このときには、キャリー入力信号ｃｉｎ１、反転キャリー入力信号ｃｉｎＢ１、入力信号ｉｎ１、入力信号ｉｎ２、反転入力信号ｉｎＢ１、および反転入力信号ｉｎＢ２のレベルに係らず、出力信号ｏｕｔ１および反転出力信号ｏｕｔＢ１はともに「Ｈ」となり、キャリー出力信号ｃｏｕｔ１および反転キャリー出力信号ｃｏｕｔＢ１はともに「Ｈ」となる。したがって、第９の実施形態のインバータ回路と同様に、期間２において、入力信号ｉｎ１，ｉｎ２、反転出力信号ｉｎＢ１，ｉｎＢ２、キャリー入力信号ｃｉｎ１、および反転キャリー入力信号ｃｉｎＢ１のレベルを変化させることができる。
【０５９４】
以上のように、本実施の形態に係る加算回路によれば、期間２において、入力信号ｉｎ１，ｉｎ２、反転入力信号ｉｎＢ１，ｉｎＢ２がどのように変化したかに係らず、期間１で出力信号ｏｕｔ１と反転出力信号ｏｕｔＢ１のうちの「Ｌ」レベルにある方、およびキャリー出力信号ｃｏｕｔ１と反転キャリー出力信号ｃｏｕｔＢ１のうちの「Ｌ」レベルにある方が期間２において「Ｈ」に変化し（充電）、さらに期間３において出力信号ｏｕｔ１と反転出力信号ｏｕｔＢ１のうちのいずれか、およびキャリー出力信号ｃｏｕｔ１と反転キャリー出力信号ｃｏｕｔＢ１のうちのいずれかが「Ｌ」レベルに変化する（放電）ので、入力信号の変化の相違によって、消費電力が変化しないようにすることができる。それゆえ、電力解析によって暗号処理に用いられる鍵などの秘匿データの傍受を防止することができる。
【０５９５】
［第１２の実施形態］
本実施の形態は、入力信号の相違によって消費電力が変化しないＲＯＭ(Read Only Memory)に関する。
【０５９６】
（ＲＯＭの構成）
図４５は、第１２の実施形態に係るＲＯＭの構成を示す。同図を参照して、このＲＯＭ９５３は、ＰチャネルＭＯＳトランジスタＰＴ１，ＰＴ２，ＰＴ３，ＰＴ４と、ＮチャネルＭＯＳトランジスタＮＴ１〜ＮＴ１２９，ＮＴ１３０とを備える。
【０５９７】
ＰチャネルＭＯＳトランジスタＰＴ１は、そのソースが電源に接続され、そのドレインがノードＮ１に接続し、そのゲートには制御信号ｃｔｒｌ１が入力される。
【０５９８】
ＰチャネルＭＯＳトランジスタＰＴ２は、そのソースが電源に接続され、そのドレインがノードＮ２に接続し、そのゲートには制御信号ｃｔｒｌ１が入力される。
【０５９９】
ＰチャネルＭＯＳトランジスタＰＴ３は、そのソースが電源に接続され、そのドレインがＰチャネルＭＯＳトランジスタＰＴ４のゲートおよびノードＮ２に接続され、そのゲートがＰチャネルＭＯＳトランジスタＰＴ４のドレインおよびノードＮ１に接続される。
【０６００】
ＰチャネルＭＯＳトランジスタＰＴ４は、そのソースが電源に接続され、そのドレインがＰチャネルＭＯＳトランジスタＰＴ３のゲートおよびノードＮ１に接続され、そのゲートがＰチャネルＭＯＳトランジスタＰＴ３のドレインおよびノードＮ２に接続される。
【０６０１】
ＮチャネルＭＯＳトランジスタＮＴ１３０は、そのソースが接地され、そのドレインがノードＮ３に接続され、そのゲートには制御信号ｃｔｒｌ１が入力される。
【０６０２】
また、このＲＯＭ９５３は、第１、３、５、・・・１２９行に「Ｌ」レベルを記憶し。第２、４、・・・１２８行に「Ｈ」レベルを記憶する。
【０６０３】
第１列であるノードＮ１とノードＮ３との間に、並列にＮチャネルＭＯＳトランジスタＮＴ１，ＮＴ３，・・・ＮＴ１２９が配置され、第２列であるノードＮ２とノードＮ３との間に、並列にＮチャネルＭＯＳトランジスタＮＴ２，ＮＴ４，・・・ＮＴ１２８が配置する。
【０６０４】
また、第ｋ行にあるＮチャネルＭＯＳトランジスタＮＴｋ（ｋ＝１〜１２８）のゲートには、入力信号ｉｎＫが入力される。
【０６０５】
ＰチャネルＭＯＳトランジスタＰＴ１，ＰＴ２、およびＮチャネルＭＯＳトランジスタＮＴ１３０は、第１群に属し、制御信号ｃｔｒｌ１の活性化、つまり「Ｌ」になると、ノードＮ１およびＮ２を「Ｈ」にする。
【０６０６】
ＮチャネルＭＯＳトランジスタＮＴ１、ＮＴ３、・・・ＮＴ１２９は、第２群に属し、制御信号ｃｔｒｌ１が非活性、つまり「Ｈ」のときに、入力信号ｉｎ１、ｉｎ３、・・・ｉｎ１２９のいずれかが「Ｈ」になると、ノードＮ１を「Ｌ」にする。
【０６０７】
ＮチャネルＭＯＳトランジスタＮＴ２、ＮＴ４、・・・ＮＴ１２８は、第３群に属し、制御信号ｃｔｒｌ１が非活性、つまり「Ｈ」のときに、入力信号ｉｎ２、ｉｎ４、・・・ｉｎ１２８のいずれかが「Ｈ」になると、ノードＮ２を「Ｌ」にする。
【０６０８】
ノードＮ１は、正論理の出力端子と接続され、正論理の出力端子から、出力信号ｏｕｔ１が出力される。ノードＮ２は、負論理の出力端子と接続され、負論理の出力端子から反転出力信号ｏｕｔＢ１が出力される。
【０６０９】
（動作）
次に、このＲＯＭ９５３に入力される信号と出力される信号の関係を説明する。図４６は、ＲＯＭ９５３の入出力関係をまとめた図である。同図の期間１、期間２、期間３は、第９の実施形態と同様に、この順序で変化し、入力信号ｉｎ１〜ｉｎ１２９のレベルが変化するのは、期間２に限定される。
【０６１０】
同図を参照して、期間１および期間３では、制御信号ｃｔｒｌ１が「Ｈ」となる。これにより、ＮチャネルＭＯＳトランジスタＮＴ１３０がオンとなり、ＰチャネルＭＯＳトランジスタＰＴ１，ＰＴ２がオフとなる。このとき、入力信号ｉｎ１〜ｉｎ１２９のいずれかが「Ｈ」となるので、「Ｈ」となった入力信号が入力されるＮチャネルＭＯＳトランスタがオンとなる。
【０６１１】
オンとなったＮチャネルＭＯＳトランジスタがＮチャネルＭＯＳトランジスタＮＴｊ（ｊ＝１、３、・・・１２９のいずれか）のとき、つまりノードＮ１とノードＮ３の間にある場合には、出力信号ｏｕｔ１が「Ｌ」となる。また、このときには、ノードＮ２とノードＮ３の間にあるすべてのトランジスタ、つまりＮチャネルＭＯＳトランジスタＮＴｉ（ｉ＝２、４、・・・１２８のすべて）がオフであり、出力信号ｏｕｔ１（＝「Ｌ」）がＰチャネルＭＯＳトランジスタＰＴ４のゲートに入力されることによって、ＰチャネルＭＯＳトランジスタＰＴ４がオンとなり、反転出力信号ｏｕｔＢ１は「Ｈ」となる。
【０６１２】
オンとなったＮチャネルＭＯＳトランジスタがＮチャネルＭＯＳトランジスタＮＴｊ（ｊ＝２、４、・・・１２８のいずれか）のとき、つまりノードＮ２とノードＮ３の間にある場合には、反転出力信号ｏｕｔＢ１が「Ｌ」となる。また、このときには、ノードＮ１とノードＮ３の間にあるすべてのトランジスタ、つまりＮチャネルＭＯＳトランジスタＮＴｉ（ｉ＝１、３、・・・１２９のすべて）がオフであり、反転出力信号ｏｕｔＢ１（＝「Ｌ」）がＰチャネルＭＯＳトランジスタＰＴ３のゲートに入力されることによって、ＰチャネルＭＯＳトランジスタＰＴ３がオンとなり、出力信号ｏｕｔ１は「Ｈ」となる。
【０６１３】
一方、期間２において、制御信号ｃｔｒｌ１が「Ｌ」となる。これにより、ＮチャネルＭＯＳトランジスタＮＴ１３０がオフとなり、ＰチャネルＭＯＳトランジスタＰＴ１，ＰＴ２がオンとなる。これにより、入力信号ｉｎ１〜ｉｎ１２９にレベルに係らず、出力信号ｏｕｔ１および反転出力信号ｏｕｔＢ１のいずれもが「Ｈ」となる。
【０６１４】
したがって、第９の実施形態のインバータ回路と同様に、期間２において、入力信号ｉｎ１〜ｉｎ１２９のレベルを変化させることができる。
【０６１５】
以上のように、本実施の形態に係るＲＯＭによれば、期間２において入力信号ｉｎ１〜ｉｎ１２９がどのように変化したかに係らず、期間１で出力信号ｏｕｔ１と反転出力信号ｏｕｔＢ１のうちの「Ｌ」レベルにある方が期間２において「Ｈ」に変化し（充電）、さらに期間３において出力信号ｏｕｔ１と反転出力信号ｏｕｔＢ１のうちのいずれかが「Ｌ」に変化する（放電）するので、入力信号ｉｎ１〜ｉｎ１２９の変化の相違によって、消費電力が変化しないようにすることができる。それゆえ、電力解析によって暗号処理に用いられる鍵などの秘匿データの傍受を防止することができる。
【０６１６】
［第１２の実施形態の変形例１］
本変形例は、第１２の実施形態と同様に、入力信号の相違によって消費電力が変化しないのに加えて、より簡易な構成のＲＯＭに関する。
【０６１７】
（ＲＯＭの構成）
図４７は、第１２の実施形態の変形例１に係るＲＯＭの構成を示す。同図において、図４５のＲＯＭにおける構成要素と同一の構成要素には、図４５と同一の符号を付している。同図を参照して、このＲＯＭ９５４が図４５のＲＯＭ９５３と相違する点は、ＮチャネルＭＯＳトランジスタＮＴ１３０を含まず、ＮチャネルＭＯＳトランジスタＮＷ１〜ＮＷ１２９と、ＮチャネルＭＯＳトランジスタＮＥ１〜ＮＥ１２９とを含む点である。
【０６１８】
第１列第ｋ行（ｋ＝１〜１２９）には、ＮチャネルＭＯＳトランジスタＮＷｋが配置される。第２列第ｋ行（ｋ＝１〜１２９）には、ＮチャネルＭＯＳトランジスタＮＥｋが配置される。
【０６１９】
ＮチャネルＭＯＳトランジスタＮＷｋおよびＮＥｋ（ｋ＝１〜１２８）のソースが接地される。
【０６２０】
また、第１列第ｉ行（ｉ＝１、３、５、・・・１２９）のＮチャネルＭＯＳトランジスタＮＷｉは、そのドレインには、ＮチャネルＭＯＳトランジスタＮＴｉのソースが接続され、そのゲートに制御信号ｃｔｒｌ１が入力される。
【０６２１】
また、第２列第ｊ行（ｊ＝２、４、６、・・・１２８）のＮチャネルＭＯＳトランジスタＮＷｊは、そのドレインには、ＮチャネルＭＯＳトランジスタＮＴｊのソースが接続され、そのゲートに制御信号ｃｔｒｌ１が入力される。
【０６２２】
ＰチャネルＭＯＳトランジスタＰＴ１，ＰＴ２、およびＮチャネルＭＯＳトランジスタＮＷ１〜ＮＷ１２９、ＮＥ１〜ＮＥ１２９は、第１群に属し、制御信号ｃｔｒｌ１の活性化、つまり「Ｌ」になると、ノードＮ１およびＮ２を「Ｈ」にする。
【０６２３】
ＮチャネルＭＯＳトランジスタＮＴ１、ＮＴ３、・・・ＮＴ１２９は、第２群に属し、制御信号ｃｔｒｌ１が非活性、つまり「Ｈ」のときに、入力信号ｉｎ１、ｉｎ３、・・・ｉｎ１２９のいずれかが「Ｈ」になると、ノードＮ１を「Ｌ」にする。
【０６２４】
ＮチャネルＭＯＳトランジスタＮＴ２、ＮＴ４、・・・ＮＴ１２８は、第３群に属し、制御信号ｃｔｒｌ１が非活性、つまり「Ｈ」のときに、入力信号ｉｎ２、ｉｎ４、・・・ｉｎ１２８のいずれかが「Ｈ」になると、ノードＮ２を「Ｌ」にする。
【０６２５】
ノードＮ１は、正論理の出力端子と接続され、正論理の出力端子から、出力信号ｏｕｔ１が出力される。ノードＮ２は、負論理の出力端子と接続され、負論理の出力端子から反転出力信号ｏｕｔＢ１が出力される。
【０６２６】
（動作）
次に、このＲＯＭ９５４に入力される信号と出力される信号の関係を説明する。ＲＯＭ９５４の入出力関係は、図４６に示すＲＯＭ９５３の入出力関係と同様である。同図の期間１、期間２、期間３は、第９の実施形態と同様に、この順序で変化し、入力信号ｉｎ１〜ｉｎ１２９のレベルが変化するのは、期間２に限定される。
【０６２７】
同図を参照して、期間１および期間３において、制御信号ｃｔｒｌ１が「Ｈ」となる。これにより、ＮチャネルＭＯＳトランジスタＮＷ１〜ＮＷ１２９がオンとなり、ＮチャネルＭＯＳトランジスタＮＥ１〜ＮＥ１２９がオンとなり、ＰチャネルＭＯＳトランジスタＰＴ１，ＰＴ２がオフとなる。このとき、入力信号ｉｎ１〜ｉｎ１２９のいずれかが「Ｈ」となるので、「Ｈ」となった入力信号が入力されるＮチャネルＭＯＳトランスタがオンとなる。
【０６２８】
オンとなったＮチャネルＭＯＳトランジスタがＮチャネルＭＯＳトランジスタＮＴｊ（ｊ＝１、３、・・・１２９のいずれか）のとき、つまりノードＮ１とノードＮ３の間にある場合には、出力信号ｏｕｔ１が「Ｌ」となる。また、このときには、ノードＮ２とノードＮ３の間にあるすべてのトランジスタ、つまりＮチャネルＭＯＳトランジスタＮＴｉ（ｉ＝２、４、・・・１２８のすべて）がオフであり、出力信号ｏｕｔ１（＝「Ｌ」）がＰチャネルＭＯＳトランジスタＰＴ４のゲートに入力されることによって、ＰチャネルＭＯＳトランジスタＰＴ４がオンとなり、反転出力信号ｏｕｔＢ１は「Ｈ」となる。
【０６２９】
一方、オンとなったＮチャネルＭＯＳトランジスタがＮチャネルＭＯＳトランジスタＮＴｊ（ｊ＝２、４、・・・１２８のいずれか）のとき、つまりノードＮ２とノードＮ３の間にある場合には、反転出力信号ｏｕｔＢ１が「Ｌ」となる。また、このときには、ノードＮ１とノードＮ３の間にあるすべてのトランジスタ、つまりＮチャネルＭＯＳトランジスタＮＴｉ（ｉ＝１、３、・・・１２９のすべて）がオフであり、反転出力信号ｏｕｔＢ１（＝「Ｌ」）がＰチャネルＭＯＳトランジスタＰＴ３のゲートに入力されることによって、ＰチャネルＭＯＳトランジスタＰＴ３がオンとなり、出力信号ｏｕｔ１は「Ｈ」となる。
【０６３０】
期間２において、制御信号ｃｔｒｌ１が「Ｌ」となる。これにより、ＮチャネルＭＯＳトランジスタＮＷ1〜ＮＷ１２９、およびＮＥ１〜ＮＥ１２９がオフとなり、ＰチャネルＭＯＳトランジスタＰＴ１，ＰＴ２がオンとなる。これにより、入力信号ｉｎ１〜ｉｎ１２９にレベルに係らず、出力信号ｏｕｔ１および反転出力信号ｏｕｔＢ１のいずれもが「Ｈ」となる。
【０６３１】
したがって、第９の実施形態のインバータ回路と同様に、期間２において、入力信号ｉｎ１〜ｉｎ１２９のレベルを変化させることができる。
【０６３２】
以上のように、本変形例に係るＲＯＭによれば、期間２において、入力信号ｉｎ１〜ｉｎ１２９がどのように変化したかに係らず、期間１で出力信号ｏｕｔ１と反転出力信号ｏｕｔＢ１のうちの「Ｌ」レベルにある方が期間２において「Ｈ」に変化し（充電）、さらに期間３において出力信号ｏｕｔ１と反転出力信号ｏｕｔＢ１のうちのいずれかが「Ｌ」に変化する（放電）するので、入力信号ｉｎ１〜ｉｎ１２９の変化の相違によって、消費電力が変化しないようにすることができる。それゆえ、電力解析によって暗号処理に用いられる鍵などの秘匿データの傍受を防止することができる。また、第１２の実施形態のＲＯＭでは、ＮチャネルＭＯＳトランジスタＮＴ１〜ＮＴ１２９の１２９個に対して接地電位を供給するために、ＮチャネルＭＯＳトランジスタＮＴ１３０は、抵抗値の小さなサイズの大きなものを使用する必要があったが、本変形例のＲＯＭでは、ＮチャネルＭＯＳトランジスタＮＴ１３０の代りに、サイズの小さなＮチャネルＭＯＳトランジスタＮＷ１〜ＮＷ１２９、およびＮＥ１〜ＮＥ１２９を用いるので、回路の規模を小さくすることができる。
【０６３３】
［第１２の実施形態の変形例２］
本変形例は、第１２の実施形態と同様に、入力信号の変化の相違によって消費電力が変化しないことに加えて、より簡易な構成のＲＯＭに関する。
【０６３４】
（ＲＯＭの構成）
図４８は、第１２の実施形態の変形例２に係るＲＯＭの構成を示す。同図において、図４５のＲＯＭにおける構成要素と同一の構成要素には、図４５と同一の符号を付している。同図を参照して、このＲＯＭ９５５が、図４５のＲＯＭ９５３と相違する点は、ＮチャネルＭＯＳトランジスタＮＴ１３０を含まず、第ｋ行（ｋ＝１〜１２９）に、論理積回路ＡＮＤｋを備えた点である。
【０６３５】
論理積回路ＡＮＤｋ（ｋ＝１〜１２９）は、入力信号ｉｎｋと、制御信号ｃｔｒｌ１とを受けて、それらの論理積をＮチャネルＭＯＳトランジスタＮＴｋのゲートに出力する。
【０６３６】
ＰチャネルＭＯＳトランジスタＰＴ１，ＰＴ２は、第１群に属し、制御信号ｃｔｒｌ１の活性化、つまり「Ｌ」になると、ノードＮ１およびＮ２を「Ｈ」にする。
【０６３７】
ＮチャネルＭＯＳトランジスタＮＴ１、ＮＴ３、・・・ＮＴ１２９は、第２群に属し、制御信号ｃｔｒｌ１が非活性、つまり「Ｈ」のときに、入力信号ｉｎ１、ｉｎ３、・・・ｉｎ１２９のいずれかが「Ｈ」になると、ノードＮ１を「Ｌ」にする。
【０６３８】
ＮチャネルＭＯＳトランジスタＮＴ２、ＮＴ４、・・・ＮＴ１２８は、第３群に属し、制御信号ｃｔｒｌ１が非活性、つまり「Ｈ」のときに、入力信号ｉｎ２、ｉｎ４、・・・ｉｎ１２８のいずれかが「Ｈ」になると、ノードＮ２を「Ｌ」にする。
【０６３９】
ノードＮ１は、正論理の出力端子と接続され、正論理の出力端子から、出力信号ｏｕｔ１が出力される。ノードＮ２は、負論理の出力端子と接続され、負論理の出力端子から反転出力信号ｏｕｔＢ１が出力される。
【０６４０】
（動作）
次に、このＲＯＭ９５５に入力される信号と出力される信号の関係を説明する。ＲＯＭ９５５の入出力関係は、図４６に示すＲＯＭ９５３の入出力関係と同様である。同図の期間１、期間２、期間３は、第９の実施形態と同様に、この順序で変化し、入力信号ｉｎ１〜ｉｎ１２９のレベルが変化するのは、期間２に限定される。
【０６４１】
同図を参照して、期間１および期間３において、制御信号ｃｔｒｌ１が「Ｈ」となる。これにより、論理積回路ＡＮＤｋ（ｋ＝１〜１２９）の入力端子の１つに「Ｈ」レベルが入力され、ＰチャネルＭＯＳトランジスタＰＴ１，ＰＴ２がオフとなる。
【０６４２】
このとき、入力信号ｉｎ１〜ｉｎ１２９のいずれかが「Ｈ」となるので、「Ｈ」となった入力信号が入力される論理積回路の出力が「Ｈ」レベルを出力する。
【０６４３】
「Ｈ」レベルを出力した論理積回路が論理積回路ＡＮＤｊ（ｊ＝１、３、・・・１２９のいずれか）のとき、つまりノードＮ１とノードＮ３の間にあるＮチャネルＭＯＳトランジスタと接続している場合には、そのＮチャネルＭＯＳトランジスタがオンとなり、出力信号ｏｕｔ１が「Ｌ」となる。また、このときには、論理積回路ＡＮＤｉ（ｉ＝２、４、・・・１２８のすべて）が「Ｌ」レベルを出力するので、これらの論理積回路ＡＮＤｉと接続しているノードＮ２とノードＮ３の間にあるすべてのトランジスタ、つまりＮチャネルＭＯＳトランジスタＮＴｉ（ｉ＝２、４、・・・１２８のすべて）がオフとなり、出力信号ｏｕｔ１（＝「Ｌ」）がＰチャネルＭＯＳトランジスタＰＴ４のゲートに入力されることによって、ＰチャネルＭＯＳトランジスタＰＴ４がオンとなり、反転出力信号ｏｕｔＢ１は「Ｈ」となる。
【０６４４】
一方、「Ｈ」レベルを出力した論理積回路が論理積回路ＡＮＤｊ（ｊ＝２、４、・・・１２９のいずれか）のとき、つまりノードＮ２とノードＮ３の間にあるＮチャネルＭＯＳトランジスタと接続している場合には、そのＮチャネルＭＯＳトランジスタがオンとなり、反転出力信号ｏｕｔＢ１が「Ｌ」となる。また、このときには、論理積回路ＡＮＤｉ（ｉ＝１、３、・・・１２９のすべて）が「Ｌ」レベルを出力するので、これらの論理積回路ＡＮＤｉと接続しているノードＮ１とノードＮ３の間にあるすべてのトランジスタ、つまりＮチャネルＭＯＳトランジスタＮＴｉ（ｉ＝１、３、・・・１２９のすべて）がオフとなり、反転出力信号ｏｕｔＢ１（＝「Ｌ」）がＰチャネルＭＯＳトランジスタＰＴ３のゲートに入力されることによって、ＰチャネルＭＯＳトランジスタＰＴ３がオンとなり、出力信号ｏｕｔ１は「Ｈ」となる。
【０６４５】
期間２において、制御信号ｃｔｒｌ１が「Ｌ」となる。これにより、論理積回路ＡＮＤｋ（ｋ＝１〜１２９）の入力端子の１つに「Ｌ」レベルが入力され、ＰチャネルＭＯＳトランジスタＰＴ１，ＰＴ２がオンとなる。これにより、入力信号ｉｎ１〜ｉｎ１２９にレベルに係らず、出力信号ｏｕｔ１および反転出力信号ｏｕｔＢ１のいずれもが「Ｈ」となる。
【０６４６】
したがって、第９の実施形態のインバータ回路と同様に、期間２において、入力信号ｉｎ１〜ｉｎ１２９のレベルを変化させることができる。
【０６４７】
以上のように、本変形例に係るＲＯＭによれば、期間２において、入力信号ｉｎ１〜ｉｎ１２９がどのように変化したかに係らず、期間１で出力信号ｏｕｔ１と反転出力信号ｏｕｔＢ１のうちの「Ｌ」レベルにある方が期間２において「Ｈ」に変化し（充電）、さらに期間３において出力信号ｏｕｔ１と反転出力信号ｏｕｔＢ１のうちのいずれかが「Ｌ」に変化する（放電）するので、入力信号ｉｎ１〜ｉｎ１２９の変化の相違によって、消費電力が変化しないようにすることができる。それゆえ、電力解析によって暗号処理に用いられる鍵などの秘匿データの傍受を防止することができる。また、本変形例のＲＯＭでは、第１２の実施形態のＲＯＭにおけるＮチャネルＭＯＳトランジスタＮＴ１３０の代りに、論理積回路ＡＮＤ１〜ＡＮＤ１２９を用いるので、回路の規模を小さくすることができる。
【０６４８】
［第１３の実施形態］
本実施の形態は、入力信号の変化の相違によって消費電力が変化しないレジスタに関する。
【０６４９】
（レジスタの構成）
図４９は、第１３の実施形態に係るレジスタの構成を示す。同図を参照して、このレジスタ９５６は、ＰチャネルＭＯＳトランジスタＰＴ１〜ＰＴ６と、ＮチャネルＭＯＳトランジスタＮＴ１〜ＮＴ７とを備える。
【０６５０】
ＰチャネルＭＯＳトランジスタＰＴ１は、そのソースが電源に接続され、そのドレインが正論理のノードｒｅｇ１に接続され、そのゲートには制御信号ｃｔｒｌ１が入力される。
【０６５１】
ＰチャネルＭＯＳトランジスタＰＴ２は、そのソースが電源に接続され、そのドレインが負論理のノードｒｅｇＢ１に接続され、そのゲートには制御信号ｃｔｒｌ１が入力される。
【０６５２】
ＮチャネルＭＯＳトランジスタＮＴ１は、入力信号ｉｎ１が入力される正論理の入力端子ＩＮ１と正論理のノードｒｅｇ１との間に配置され、そのゲートには書込み指示信号ｗｒｉｔｅ１が入力される。
【０６５３】
ＮチャネルＭＯＳトランジスタＮＴ２は、反転入力信号ｉｎＢ１が入力される負論理の入力端子ＩＢ１と負論理のノードｒｅｇＢ１との間に配置され、そのゲートには書込み指示信号ｗｒｉｔｅ１が入力される。
【０６５４】
ＮチャネルＭＯＳトランジスタＮＴ５は、出力信号ｏｕｔ１が出力される正論理の出力端子Ｏ１と正論理のノードｒｅｇ１との間に配置され、そのゲートには読出し指示信号ｒｅａｄ１が入力される。
【０６５５】
ＮチャネルＭＯＳトランジスタＮＴ６は、反転出力信号ｏｕｔＢ１が出力される負論理の出力端子ＯＢ１と負論理のノードｒｅｇＢ１との間に配置され、そのゲートには読出し指示信号ｒｅａｄ１が入力される。
【０６５６】
ＰチャネルＭＯＳトランジスタＰＴ５は、そのソースが電源に接続され、そのドレインが出力信号ｏｕｔ１が出力される正論理の出力端子Ｏ１に接続され、そのゲートには制御信号ｃｔｒｌ２が入力される。
【０６５７】
ＰチャネルＭＯＳトランジスタＰＴ６は、そのソースが電源に接続され、そのドレインが反転出力信号ｏｕｔＢ１が出力される負論理の出力端子ＯＢ１に接続され、そのゲートには制御信号ｃｔｒｌ２が入力される。
【０６５８】
ＰチャネルＭＯＳトランジスタＰＴ３は、そのソースが電源に接続され、そのドレインが正論理のノードｒｅｇ１に接続され、そのゲートが負論理のノードｒｅｇＢ１に接続される。
【０６５９】
ＰチャネルＭＯＳトランジスタＰＴ４は、そのソースが電源に接続され、そのドレインが負論理のノードｒｅｇＢ１に接続され、そのゲートが正論理のノードｒｅｇ１に接続される。
【０６６０】
ＮチャネルＭＯＳトランジスタＮＴ３は、そのソースがＮチャネルＭＯＳトランジスタＮＴ７のドレインに接続され、そのドレインが正論理のノードｒｅｇ１に接続され、そのゲートが負論理のノードｒｅｇＢ１に接続される。
【０６６１】
ＮチャネルＭＯＳトランジスタＮＴ４は、そのソースがＮチャネルＭＯＳトランジスタＮＴ７のドレインに接続され、そのドレインが負論理のノードｒｅｇＢ１に接続され、そのゲートが正論理のノードｒｅｇ１に接続される。
【０６６２】
ＮチャネルＭＯＳトランジスタＮＴ７は、そのソースが接地され、そのドレインがＮチャネルＭＯＳトランジスタＮＴ３およびＮＴ４のソースに接続され、そのゲートに制御信号ｃｔｒｌ１が入力される。
【０６６３】
ＰチャネルＭＯＳトランジスタＰＴ１，ＰＴ２、およびＮチャネルＭＯＳトランジスタＮＴ７は、第１群に属し、制御信号ｃｔｒｌ１の活性化、つまり「Ｌ」になると、正論理のノードｒｅｇ１、および負論理のノードｒｅｇＢ１を「Ｈ」にする。
【０６６４】
ＰチャネルＭＯＳトランジスタＰＴ５，ＰＴ６は、第１´群に属し、制御信号ｃｔｒｌ２の活性化、つまり「Ｌ」になると、正論理の出力端子Ｏ１、および負論理の出力端子ＯＢ１を「Ｈ」にする。
【０６６５】
（動作）
次に、このレジスタ９５６の動作を説明する。図５０は、レジスタ９５６に入力および出力される信号の時間的な変化の例を示す図である。同図を参照して、期間１では、制御信号ｃｔｒｌ１が「Ｈ」で、制御信号ｃｔｒｌ２が「Ｈ」で、読出し指示信号ｒｅａｄ１が「Ｌ」で、書込み指示信号ｗｒｉｔｅ１が「Ｌ」である。
【０６６６】
制御信号ｃｔｒｌ１が「Ｈ」によって、ＰチャネルＭＯＳトランジスタＰＴ１，ＰＴ２がオフとなり、ＮチャネルＭＯＳトランジスタＮＴ７はオンとなる。制御信号ｃｔｒｌ２が「Ｈ」によって、ＰチャネルＭＯＳトランジスタＰＴ５，ＰＴ６がオフとなる。読出し指示信号ｒｅａｄ１が「Ｌ」によって、ＮチャネルＭＯＳトランジスタＮＴ５，ＮＴ６がオフとなる。書込み指示信号ｗｒｉｔｅ１が「Ｌ」によって、ＮチャネルＭＯＳトランジスタＮＴ１，ＮＴ２がオフとなる。
【０６６７】
期間１では、入力信号ｉｎ１が「Ｈ」とし、反転入力信号ｉｎＢ１が「Ｌ」とし、せい論理のノードｒｅｇ１「Ｌ」とし、負論理のノードｒｅｇＢ１が「Ｈ」とする。
【０６６８】
期間２では、制御信号ｃｔｒｌ１が「Ｌ」となる。制御信号ｃｔｒｌ１が「Ｌ」となると、ＰチャネルＭＯＳトランジスタＰＴ１，ＰＴ２がオンとなり、ＮチャネルＭＯＳトランジスタＮＴ７がオフとなる。
【０６６９】
期間２では、入力信号ｉｎ１が「Ｌ」に変化し、反転入力信号ｉｎＢ１が「Ｈ」に変化するが、ＰチャネルＭＯＳトランジスタＰＴ１，ＰＴ２がオン、ＮチャネルＭＯＳトランジスタＮＴ７がオフ、およびＮチャネルＭＯＳトランジスタＮＴ１，ＮＴ２がオフより、
これらの変化に係りなく、正論理のノードｒｅｇ１、および負論理のノードｒｅｇＢ１がともに「Ｈ」となる。
【０６７０】
期間３では、制御信号ｃｔｒｌ１が「Ｈ」となるとともに、書込み指示信号ｗｒｉｔｅ１が「Ｈ」となる。制御信号ｃｔｒｌ１が「Ｈ」となると、ＰチャネルＭＯＳトランジスタＰＴ１，ＰＴ２がオフとなり、ＮチャネルＭＯＳトランジスタＮＴ７がオンとなる。
書込み指示信号ｗｒｉｔｅ１が「Ｈ」となると、ＮチャネルＭＯＳトランジスタＮＴ１，ＮＴ２がオンとなる。これにより、ｒｅｇ１は、入力信号ｉｎ１の値（つまり、「Ｌ」）、ｒｅｇＢ１は、反転入力信号ｉｎＢ１の値（つまり、「Ｈ」）となる。
【０６７１】
さらに、期間４では、制御信号ｃｔｒｌ２が「Ｌ」となる。制御信号ｃｔｒｌ２が「Ｌ」となると、ＰチャネルＭＯＳトランジスタＰＴ５，ＰＴ６がオンとなる。これにより、出力信号ｏｕｔ１および反転出力信号ｏｕｔＢ１は、ともに「Ｈ」となる。
【０６７２】
そして、期間５で、制御信号ｃｔｒｌ２が「Ｈ」となる。制御信号ｃｔｒｌ２が「Ｈ」となると、ＰチャネルＭＯＳトランジスタＰＴ５，ＰＴ６がオフとなる。
【０６７３】
期間５の途中で、読出し指示信号ｒｅａｄ１が「Ｈ」となる。読出し指示信号ｒｅａｄ１が「Ｈ」になると、ＮチャネルＭＯＳトランジスタＮＴ５，ＮＴ６がオンとなる。これにより、出力信号ｏｕｔ１は、正論理のノードｒｅｇ１の値となり、反転出力信号ｏｕｔＢ１は、負論理のノードｒｅｇＢ１の値となる。
【０６７４】
以上のように、本実施の形態に係るレジスタによれば、書込み時に、期間２において、入力信号ｉｎ１および反転入力信号ｉｎＢ１がどのように変化したかに係らず、期間１でノードｒｅｇ１およびノードｒｅｇＢ１のうちの「Ｌ」レベルにある方が、制御信号ｃｔｒｌ１が「Ｌ」となる期間２において「Ｈ」に変化し（充電）、さらに書込み指示信号ｗｒｉｔｅ１が「Ｈ」となる期間３において、ノードｒｅｇ１およびノードｒｅｇＢ１のうちのいずれかが「Ｌ」に変化する（放電）ので、入力信号の変化の相違によって、消費電力が変化しないようにすることができる。また、読出し時に、ノードｒｅｇおよびノードｒｅｇＢが記憶しているデータのレベルに係らず、期間３で出力信号ｏｕｔ１および反転出力信号ｏｕｔＢ１のうちの「Ｌ」レベルにある方が、制御信号ｃｔｒｌ２が「Ｌ」となる期間４において「Ｈ」に変化し（充電）、さらに読出し指示信号ｒｅａｄ１が「Ｈ」となる期間５の途中からにおいて、出力信号ｏｕｔ１および反転出力信号ｏｕｔＢ１のうちのいずれかが「Ｌ」に変化する（放電）ので、ノードｒｅｇおよびノードｒｅｇＢ１の記憶データの相違によって、消費電力が変化しないようにすることができる。それゆえ、電力解析によって暗号処理に用いられる鍵などの秘匿データの傍受を防止することができる。
【０６７５】
［第１４の実施形態］
本実施の形態は、第９〜第１１、および第１３の実施形態におけるインバータ回路、ＮＡＮＤ回路、加算回路、またはレジスタなどが含まれるロジックの動作タイミングを制御する制御信号ｃｔｒｌ１を生成する制御信号生成回路を含む半導体回路に関する。
【０６７６】
（半導体回路の構成）
図５１は、第１４の実施形態に係る複数個のロジックを含む半導体回路を示す。同図を参照して、ロジック１からロジック２へ複数個のバスを介して、信号０１，０１Ｂ、０２，０２Ｂが入力される。信号０１は、正論理の第１の信号であり、信号０１Ｂは、信号０１を反転した負論理の第１の信号であり、信号０２は、正論理の第２の信号であり、信号０２Ｂは、信号０２を反転した負論理の第２の信号である。信号０２および信号０２Ｂのペアは、ロジック１からロジック２へ送られる信号のうち、遅延量が最大の信号であるとする。
【０６７７】
ロジック２の動作タイミングを制御する制御信号を生成する制御信号生成回路２９０は、論理積回路ＡＮＤ２および反転論理和回路ＮＯＲ２とからなる。この制御信号生成回路２９０は、遅延量が最大の信号のペア０２，０２Ｂと、すべてのロジック群の制御の基準タイミングを定める基準制御信号０５（たとえば、クロック信号）を受けて、ロジック２の制御信号０４（すなわち、第９〜第１１、および第１３の実施形態において、ロジック２を制御対象としたときの制御信号ｃｔｒｌ１に相当する）を出力する。
【０６７８】
制御信号生成回路２９０は、遅延量が最大である信号０２および信号０２のいずれかが「Ｌ」、かつ信号０５が「Ｌ」のときに、信号０４を「Ｈ」にする。
【０６７９】
ＰチャネルＭＯＳトランジスタＰＸ２は、制御信号０４（つまり、制御信号ｃｔｒｌ１に相当する）が「Ｌ」になるとオンになるトランジスタを代表的に示したものであり、図３７のインバータ回路９５０におけるＰチャネルＭＯＳトランジスタＰＴ１，ＰＴ２、図４１のＮＡＮＤ回路９５１におけるＰチャネルＭＯＳトランジスタＰＴ１，ＰＴ２、図４３の加算回路９５２におけるＰチャネルＭＯＳトランジスタＰＴ１，ＰＴ２，ＰＴ５，ＰＴ６、および図４９のレジスタ９５６におけるＰチャネルＭＯＳトランジスタＰＴ１，ＰＴ２に相当する。
【０６８０】
同様に、ＮチャネルＭＯＳトランジスタＮＸ２は、信号０４（つまり、制御信号ｃｔｒｌ１に相当する）が「Ｈ」になるとオンになるトランジスタを代表的に示したものであり、図３７のインバータ回路９５０におけるＮチャネルＭＯＳトランジスタＮＴ３、図４１のＮＡＮＤ回路９５１におけるＮチャネルＭＯＳトランジスタＮＴ５、図４３の加算回路９５２におけるＮチャネルＭＯＳトランジスタＮＴ２１，ＮＴ３２、および図４９のレジスタ９５６におけるＮチャネルＭＯＳトランジスタＮＴ７に相当する。
【０６８１】
（動作）
次に、この半導体回路の動作を説明する。図５２は、ロジック２に入力および出力される信号の時間的な変化の例を示す図である。同図において、期間１、期間２、および期間３は、それぞれ、第９〜第１１、および第１３の実施形態における期間１、期間２、および期間３に相当する。
【０６８２】
期間１では、信号０５が「Ｌ」である。信号０１は「Ｌ」、信号０１Ｂは「Ｈ」、信号０２は「Ｈ」、信号０２Ｂは「Ｌ」とする。制御信号生成回路２９０は、信号０２、信号０２Ｂ、および信号０５の上記レベルに従い、制御信号０４を「Ｈ」とする。制御信号０４が「Ｈ」によって、ＰチャネルＭＯＳトランジスタＰＸ２はオフとなり、ＮチャネルＭＯＳトランジスタＮＸ２はオンとなる。
【０６８３】
期間２では、まず、信号０５が「Ｈ」となる。これにより、ロジック１が出力する信号０１，０１Ｂ，０２，０２Ｂのレベルは、すべて「Ｈ」に変化する。制御信号生成回路２９０は、信号０２、信号０２Ｂ、および信号０５がすべて「Ｈ」になると、制御信号０４を「Ｌ」にする。制御信号０４が「Ｌ」によって、ＰチャネルＭＯＳトランジスタＰＸ２はオンとなり、ＮチャネルＭＯＳトランジスタＮＸ２はオフとなる。
【０６８４】
期間２では、その後、信号０５が「Ｌ」になると、信号０１および信号０１Ｂのいずれかが「Ｌ」に変化し、信号０２および信号０２Ｂのいずれかが「Ｌ」に変化する。ここでは、信号０１Ｂが「Ｌ」に変化し、信号０２が「Ｌ」に変化するものとする。制御信号生成回路２９０は、信号０２Ｂが「Ｌ」に変化すると、制御信号０４を「Ｈ」に変化させ、期間３に移行する。
【０６８５】
期間３では、制御信号０４が「Ｈ」によって、ＰチャネルＭＯＳトランジスタＰＸ２はオフとなり、ＮチャネルＭＯＳトランジスタＮＸ２はオンとなる。
【０６８６】
以上のように、本実施の形態に係る制御信号生成回路によれば、ロジック２に入力されるすべての信号が変化するタイミングを、ロジック２の動作を制御する制御信号０４が「Ｌ」となる期間２に限定することができる。
【０６８７】
［第１４の実施形態の変形例１］
本変形例は、第１４の実施形態と同様に、ロジックの動作タイミングを制御する制御信号ｃｔｒｌ１を生成することに加えて、遅延量が最大の信号のペアが予め定まっていない場合にでも対応できる制御信号生成回路を含む半導体回路に関する。
【０６８８】
（半導体回路の構成）
図５３は、第１４の実施形態の変形例１に係る複数個のロジックを含む半導体回路を示す。同図を参照して、ロジック１からロジック２へ複数個のバスを介して、信号０１，０１Ｂ、０２，０２Ｂが入力される。信号０１は、正論理の第１の信号であり、信号０１Ｂは、信号０１を反転した負論理の第１の信号であり、信号０２は、正論理の第２の信号であり、信号０２Ｂは、信号０２を反転した負論理の第２の信号である。
【０６８９】
ロジック２の動作を制御する制御信号を生成する制御信号生成回路３１０は、論理積回路ＡＮＤ１、論理積回路ＡＮＤ２、および反転論理和回路ＮＯＲ３とからなる。この制御信号生成回路３１０は、ペアの信号０１，０１Ｂと、ペアの信号０２，０２Ｂ、およびすべてのロジック群の制御の基準タイミングを定める基準制御信号０５（たとえば、外部から与えられるクロック信号）を受けて、ロジック２の制御信号０４（すなわち、制御信号ｃｔｒｌ１）を出力する。
【０６９０】
制御信号生成回路３１０は、信号０１および信号０１のいずれかが「Ｌ」、信号０２および信号０２のいずれかが「Ｌ」、かつ信号０５が「Ｌ」のときに、制御信号０４を「Ｈ」にする。
【０６９１】
（動作）
次に、この半導体回路の動作を説明する。図５４は、ロジック２に入力および出力される信号の時間的な変化の例を示す図である。同図において、期間１、期間２、および期間３は、それぞれ、第９〜第１１、および第１３の実施形態における期間１、期間２、および期間３に相当する。
【０６９２】
期間１では、信号０５が「Ｌ」である。信号０１は「Ｌ」、信号０１Ｂは「Ｈ」、信号０２は「Ｈ」、信号０２Ｂは「Ｌ」とする。制御信号生成回路３１０は、信号０１、信号０１Ｂ、信号０２、信号０２Ｂ、および信号０５の上記レベルに従い、信号０４を「Ｈ」とする。信号０４が「Ｈ」によって、ＰチャネルＭＯＳトランジスタＰＸ２はオフとなり、ＮチャネルＭＯＳトランジスタＮＸ２はオンとなる。
【０６９３】
期間２では、まず、信号０５が「Ｈ」となる。これにより、ロジック１が出力する信号０１，０１Ｂ，０２，０２Ｂのレベルは、すべて「Ｈ」に変化する。
【０６９４】
制御信号生成回路２９０は、信号０１、信号０１Ｂ、信号０２、信号０２Ｂ、および信号０５がすべて「Ｈ」になると、制御信号０４を「Ｌ」にする。制御信号０４が「Ｌ」によって、ＰチャネルＭＯＳトランジスタＰＸ２はオンとなり、ＮチャネルＭＯＳトランジスタＮＸ２はオフとなる。その後、信号０５が「Ｌ」になると、信号０１および信号０１Ｂのいずれかが「Ｌ」に変化し、信号０２および信号０２Ｂのいずれかが「Ｌ」に変化する。ここでは、信号０１Ｂが「Ｌ」に変化し、その後、信号０２が「Ｌ」に変化するものとする。制御信号生成回路３１０は、信号０１が「Ｌ」に変化し、かつ信号０２が「Ｌ」に変化すると、制御信号０４を「Ｈ」に変化させ、期間３に移行する。
【０６９５】
期間３では、制御信号０４が「Ｈ」によって、ＰチャネルＭＯＳトランジスタＰＸ２はオフとなり、ＮチャネルＭＯＳトランジスタＮＸ２はオンとなる。
【０６９６】
以上のように、本変形例に係る制御信号生成回路によれば、第１４の実施形態と同様に、ロジック２に入力されるすべての信号が変化するタイミングを、ロジック２の動作を制御する制御信号０４が「Ｌ」となる期間２に限定することができる。また、第１４の実施形態の制御信号生成回路は、遅延量が最大の信号のペアが０２，０２Ｂのときにのみ対応するものであったのに対して、本変形例に係る制御信号生成回路は、遅延量が最大の信号のペアが０１，０１Ｂのときと、０２，０２Ｂときのいずれにも対応することができる。
【０６９７】
［第１４の実施形態の変形例２］
本変形例は、第１４の実施形態の制御信号生成回路とは別の構成で、第１４の実施形態と同様に、ロジックの動作タイミングを制御する制御信号ｃｔｒｌ１を生成する制御信号生成回路を含む半導体回路に関する。
【０６９８】
（半導体回路の構成）
図５５は、第１４の実施形態の変形例２に係る複数個のロジックを含む半導体回路を示す。同図を参照して、ロジック１からロジック２へ複数個のバスを介して、信号０１，０１Ｂ、０２，０２Ｂが入力される。信号０１は、正論理の第１の信号であり、信号０１Ｂは、信号０１を反転した負論理の第１の信号であり、信号０２は、正論理の第２の信号であり、信号０２Ｂは、信号０２を反転した負論理の第２の信号である。
【０６９９】
ロジック２の動作を制御する制御信号を生成する制御信号生成回路３３０は、遅延回路（ｄｅｌａｙ）Ｄ２と、論理和回路ＯＲ２と、インバータＩＶ２とからなる。この制御信号生成回路３３０は、すべてのロジック群の制御の基準タイミングを定める基準制御信号０７（たとえば、外部から与えられるクロック信号）と、前段から信号０４を受けて、ロジック２の制御信号０６（すなわち、制御信号ｃｔｒｌ１）を出力する。
【０７００】
遅延回路（ｄｅｌａｙ）Ｄ２は、前段から信号０４を受けて、信号０４をαだけ遅延させた信号０５を出力する。そして、信号０５と、基準制御信号０７とに応じて、論理和回路ＯＲ２およびインバータＩＶ２によって、制御信号０６が生成される。
【０７０１】
遅延回路（ｄｅｌａｙ）Ｄ２の遅延量αは、期間２において、ロジック２に入力される信号のペアのうちの遅延量が最大である信号０２および信号０２のペアのいずれかが「Ｌ」になるタイミングよりも後のタイミングで制御信号０６が「Ｈ」になるように設定されている。
【０７０２】
（動作）
次に、この半導体回路の動作を説明する。図５４は、ロジック２に入力および出力される信号の時間的な変化の例を示す図である。同図において、期間１、期間２、および期間３は、それぞれ、第９〜第１１、および第１３の実施形態における期間１、期間２、および期間３に相当する。
【０７０３】
期間１では、信号０７が「Ｌ」である。信号０１は「Ｌ」、信号０１Ｂは「Ｈ」、信号０２は「Ｈ」、信号０２Ｂは「Ｌ」、信号０４は「Ｌ」、および信号０５は「Ｌ」とする。制御信号生成回路３３０は、信号０４、信号０５、および信号０７の上記レベルに従い、制御信号０６を「Ｈ」にする。制御信号０６が「Ｈ」によって、ＰチャネルＭＯＳトランジスタＰＸ２はオフとなり、ＮチャネルＭＯＳトランジスタＮＸ２はオンとなる。
【０７０４】
期間２では、まず、信号０７が「Ｈ」となる。これにより、ロジック１が出力する信号０１，０１Ｂ，０２，０２Ｂのレベルは、すべて「Ｈ」に変化する。また、信号０７が「Ｈ」へ変化した時から、ロジック１の前段にある図示しない遅延回路での遅延の後、信号０４が「Ｈ」に変化する。信号０４が「Ｈ」に変化してから、遅延回路（ｄｅｌａｙ）Ｄ２による遅延量αだけ遅延の後、信号０５が「Ｈ」に変化する。
【０７０５】
一方、信号０７が「Ｈ」となると（信号０５のレベルに係らず）、論理和回路ＯＲ２およびインバータＩＶ２によって、制御信号０６は「Ｌ」に変化する。制御信号０６が「Ｌ」になると、ＰチャネルＭＯＳトランジスタＰＸ２はオンとなり、ＮチャネルＭＯＳトランジスタＮＸ２はオフとなる。
【０７０６】
その後、信号０７が「Ｌ」になると、信号０１および信号０１Ｂのいずれかが「Ｌ」に変化し、信号０２および信号０２Ｂのいずれかが「Ｌ」に変化する。ここでは、信号０１Ｂが「Ｌ」に変化し、その後、信号０２が「Ｌ」に変化するものとする。信号０７が「Ｌ」への変化した時から、ロジック１の前段にある遅延回路での遅延の後、信号０４が「Ｌ」に変化する。信号０４が「Ｌ」に変化してから、遅延回路（ｄｅｌａｙ）Ｄ２による遅延量αだけ遅延の後、信号０５が「Ｌ」に変化する。
【０７０７】
信号０７が「Ｌ」、および信号０５が「Ｌ」となると、論理和回路ＯＲ２およびインバータＩＶ２によって、制御信号０６は「Ｈ」に変化し、期間３に移行する。
【０７０８】
期間３では、制御信号０６が「Ｈ」によって、ＰチャネルＭＯＳトランジスタＰＸ２はオフとなり、ＮチャネルＭＯＳトランジスタＮＸ２はオンとなる。
【０７０９】
以上のように、本変形例に係る制御信号生成回路によれば、第１４の実施形態と同様に、ロジック２に入力されるすべての信号が変化するタイミングを、ロジック２の動作を制御する制御信号０６が「Ｌ」となる期間２に限定することができる。
【０７１０】
［第１４の実施形態の変形例３］
本変形例は、第１４の実施形態の制御信号生成回路とは別の構成で、第１４の実施形態と同様に、ロジックの動作タイミングを制御する制御信号ｃｔｒｌ１を生成する制御信号生成回路を含む半導体回路に関する。
【０７１１】
（構成）
図５７は、第１４の実施形態の変形例３に係る複数個のロジックを含む半導体回路を示す。同図を参照して、ロジック１からロジック２へ複数個のバスを介して、信号０１，０１Ｂ、０２，０２Ｂが入力される。信号０１は、正論理の第１の信号であり、信号０１Ｂは、信号０１を反転した負論理の第１の信号であり、信号０２は、正論理の第２の信号であり、信号０２Ｂは、信号０２を反転した負論理の第２の信号である。信号０２および信号０２Ｂのペアは、ロジック１からロジック２へ送られる信号のうち、遅延量が最大の信号であるとする。
【０７１２】
ロジック２の動作を制御する制御信号を生成する制御信号生成回路３５０は、遅延回路（ｄｅｌａｙ）Ｄ２と、反転論理和回路ＮＯＲ２とからなる。この制御信号生成回路３５０は、すべてのロジック群の制御の基準タイミングを定める基準制御信号０７（たとえば、外部から与えられるクロック信号）と、前段から信号０４を受けて、ロジック２の制御信号０６（すなわち、制御信号ｃｔｒｌ１）を出力する。
【０７１３】
遅延回路（ｄｅｌａｙ）Ｄ２は、前段から信号０４を受けて、信号０４をαだけ遅延させた信号０５を出力する。そして、信号０５と、基準制御信号０７とに応じて、反転論理和回路ＮＯＲ２によって、制御信号０６が生成される。
【０７１４】
遅延回路（ｄｅｌａｙ）Ｄ２の遅延量αは、期間２において、ロジック２に入力される信号のペアのうちの遅延量が最大である信号０２および信号０２のペアのいずれかが「Ｌ」になるタイミングよりも後のタイミングで制御信号０６が「Ｈ」になるように設定されている。
【０７１５】
（動作）
次に、この半導体回路の動作を説明する。図５８は、ロジック２に入力および出力される信号の時間的な変化の例を示す。同図において、期間１、期間２、および期間３は、それぞれ、第９〜第１１、および第１３の実施形態における期間１、期間２、および期間３に相当する。
【０７１６】
期間１では、信号０７が「Ｌ」である。信号０１は「Ｌ」、信号０１Ｂは「Ｈ」、信号０２は「Ｈ」、信号０２Ｂは「Ｌ」、信号０４は「Ｌ」、および信号０５は「Ｌ」とする。制御信号生成回路３５０は、信号０４、信号０５、および信号０７の上記レベルに従い、制御信号０６を「Ｈ」にする。制御信号０６が「Ｈ」によって、ＰチャネルＭＯＳトランジスタＰＸ２はオフとなり、ＮチャネルＭＯＳトランジスタＮＸ２はオンとなる。
【０７１７】
期間２では、まず、信号０７が「Ｈ」となる。これにより、ロジック１が出力する信号０１，０１Ｂ，０２，０２Ｂのレベルは、すべて「Ｈ」に変化する。また、信号０７が「Ｈ」へ変化した時から、ロジック１の前段にある図示しない遅延回路での遅延の後、信号０４が「Ｈ」に変化する。信号０４が「Ｈ」に変化してから、遅延回路（ｄｅｌａｙ）Ｄ２による遅延量αだけ遅延の後、信号０５が「Ｈ」に変化する。
【０７１８】
一方、信号０７が「Ｈ」となると（信号０５のレベルに係らず）、反転論理和回路ＮＯＲ２によって、制御信号０６は「Ｌ」に変化する。制御信号０６が「Ｌ」になると、ＰチャネルＭＯＳトランジスタＰＸ２はオンとなり、ＮチャネルＭＯＳトランジスタＮＸ２はオフとなる。
【０７１９】
その後、信号０７が「Ｌ」になると、信号０１および信号０１Ｂのいずれかが「Ｌ」に変化し、信号０２および信号０２Ｂのいずれかが「Ｌ」に変化する。ここでは、信号０１Ｂが「Ｌ」に変化し、その後、信号０２が「Ｌ」に変化するものとする。信号０７が「Ｌ」への変化した時から、ロジック１の前段にある遅延回路での遅延の後、信号０４が「Ｌ」に変化する。信号０４が「Ｌ」に変化してから、遅延回路（ｄｅｌａｙ）Ｄ２による遅延量αだけ遅延の後、信号０５が「Ｌ」に変化する。
【０７２０】
信号０７が「Ｌ」、および信号０５が「Ｌ」となると、反転論理和回路ＮＯＲ２によって、制御信号０６は「Ｈ」に変化し、期間３に移行する。
【０７２１】
期間３では、制御信号０６が「Ｈ」によって、ＰチャネルＭＯＳトランジスタＰＸ２はオフとなり、ＮチャネルＭＯＳトランジスタＮＸ２はオンとなる。
【０７２２】
以上のように、本変形例に係る制御信号生成回路によれば、第１４の実施形態と同様に、ロジック２に入力されるすべての信号が変化するタイミングを、ロジック２の動作を制御する制御信号０６が「Ｌ」となる期間２に限定することができる。
【０７２３】
［第１４の実施形態の変形例４］
本変形例は、第１４の実施形態の変形例３の基準制御信号を内部で自発的に生成するようにした半導体回路に関する。
【０７２４】
（半導体回路の構成）
図５９は、第１４の実施形態の変形例３に係る複数個のロジックを含む半導体回路を示す。同図を参照して、この半導体回路は、ロジック１の動作を制御する制御信号を生成する制御信号生成回路３５０１と、ロジック２の動作を制御する制御信号を生成する制御信号生成回路３５０２と、ロジック３の動作を制御する制御信号を生成する制御信号生成回路３５０３と、ロジック４の動作を制御する制御信号を生成する制御信号生成回路３５０４とを備える。
【０７２５】
制御信号生成回路３５０１，３５０２，３５０３，３５０４は、変形例３の制御信号生成回路３５０と同様に、遅延回路（ｄｅｌａｙ）と、反転論理和回路とを備え、前段からの信号と、すべてのロジック群の制御の基準タイミングを定める基準制御信号とを受けて、対応するロジックに制御信号を出力する。
【０７２６】
すべてのロジック群の制御の基準タイミングを定める基準制御信号は、第１４の実施形態、およびその変形例１〜３のように外部から与えられるのではなく、以下に説明するように、この半導体回路内部で自発的に生成される。
【０７２７】
遅延回路（ｄｅｌａｙ）Ｄ１〜Ｄ４は、ループを形成し、最後段のロジック４に対応する制御信号生成回路３５０４の遅延回路（ｄｅｌａｙ）Ｄ４から出力された信号をインバータＩＶ１を介して反転させた信号が最前段のロジック１に対応する制御信号生成回路３５０１の遅延回路（ｄｅｌａｙ）Ｄ４に送られる。
【０７２８】
そして、このループを流れる信号で、遅延回路（ｄｅｌａｙ）Ｄ４から出力された信号をインバータＩＶ１を介して反転させた信号が基準制御信号となる。
【０７２９】
以上のように、本変形例に係る半導体回路によれば、基準制御信号を内部で自発的に発生させることができる。基準制御信号が外部から与えられるクロック信号のような場合には、外部から意図的にクロック信号の周波数を高くしたり、クロック信号の電圧を下げたりする操作をすることによって、半導体回路を誤動作させることが可能なのに対して、本変形例の半導体回路は、基準制御信号が内部で自発的に生成されるので、このような攻撃を不可能とすることができる。
【０７３０】
本発明は、上記の実施形態に限定するものではなく、たとえば、以下のような変形例も含む。
【０７３１】
（１）  正負論理混在データバス
本発明の実施形態では、正負論理混在データバスの一例として、ｎ（＝１０２４）ビットのデータを伝送し、偶数ビットが正論理で、奇数ビットが負論理である正負論理混在データバスについて説明したが、これに限定するものではない。正負論理混在データバスは、すべてのビットが正論理、または負論理でないデータバスであれば、どのようなものであってもよい。
【０７３２】
（２）  乗数Ｙを伝送するバス
本発明の実施形態では、乗数Ｙは、常に正論理であるデータバスにより伝送されたが、これに限定するものではない。乗数Ｙを伝送するバスも正負論理混在データバスにしてもよい。これにより、電力解析によって、Ｙレジスタから出力される値の傍受を防止することができる。
【０７３３】
（３）  正負論理混在データバス１０２ａ，１０２ｂ，１０２ｃ
本発明の第２の実施形態では、レジスタ群に属するレジスタから２本の正負論理混在データバス１０２ａ，１０２ｂにデータを出力することによって、乗数Ｙの２ビット分についての処理を同時行なうことができたが、これに限定するものではなく。たとえば、ｎ（≧３）本の正負論理混在データバスにデータを出力することによって、乗数Ｙのｎビット分について処理を同時に行なうようにしてもよい。本発明の第６の実施形態についても同様である。
【０７３４】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【図面の簡単な説明】
【０７３５】
【図１】従来の乗算回路の構成を示す図である。
【図２】従来の乗算回路２０による乗算のアルゴリズム（１０２４ビットの場合）を示す図である。
【図３】暗号回路の構成を示す図である。
【図４】第１の実施形態に係る乗算回路の構成を示す図である。
【図５】Ｘレジスタ１２２の出力信号の論理を示す図である。
【図６】加算部１０００の構成を示す図である。
【図７】加算回路（正論理キャリー負論理）１００１の具体的な構成を示す図である。
【図８】加算回路（負論理キャリー正論理）１００２の具体的な構成を示す図である。
【図９】乗算回路１００による乗算のアルゴリズム（１０２４ビットの場合）を示す図である。
【図１０】第１の実施形態の変形例１に係る乗算回路の構成を示す図である。
【図１１】第１の実施形態の変形例２に係る乗算回路の構成を示す図である。
【図１２】乗算回路４００による乗算のアルゴリズム（１０２４ビットの場合）を示す図である。
【図１３】第１の実施形態の変形例３に係る乗算回路の構成を示す図である。
【図１４】乗算回路５００による乗算のアルゴリズム（１０２４ビットの場合）を示す図である。
【図１５】第１の実施形態の変形例４に係る乗算回路の乗算のアルゴリズム（１０２４ビットの場合）を示す図である。
【図１６】第１の実施形態の変形例５に係るデータ格納レジスタ群の構成を示す図である。
【図１７】第２の実施形態に関する乗算回路の構成を示す図である。
【図１８】加算部１１００の構成を示す図である。
【図１９】乗算回路８００による乗算のアルゴリズム（１０２４ビットの場合）を示す図である。
【図２０】第３の実施形態に係る乗算回路の構成を示す図である。
【図２１】乗算回路１５００による乗算のアルゴリズム（１０２４ビットの場合）を示す図である。
【図２２】第３の実施形態の変形例に係る乗算回路の構成を示す図である。
【図２３】乗算回路１６００による乗算のアルゴリズム（１０２４ビットの場合）を示す図である。
【図２４】従来の剰余演算回路の剰余演算のアルゴリズムを示す図である。
【図２５】第４の実施形態に係る剰余演算回路の構成を示す図である。
【図２６】剰余演算回路１４００による剰余演算のアルゴリズム（１０２４ビットの場合）を示す図である。
【図２７】第５の実施形態に係るモンゴメリ乗算剰余演算回路の構成を示す図である。
【図２８】モンゴメリ乗算剰余演算回路６００によるモンゴメリ乗算剰余演算のアルゴリズム（１０２４ビットの場合）を示す図である。
【図２９】第５の実施形態の変形例に係るモンゴメリ乗算剰余演算回路の構成を示す図である。
【図３０】第６の実施形態に係るモンゴメリ乗算剰余演算回路の構成を示す図である。
【図３１】加算部１２００の構成を示す図である。
【図３２】モンゴメリ乗算剰余演算回路９００によるモンゴメリ乗算剰余演算のアルゴリズム（１０２４ビットの場合）を示す図である。
【図３３】第７の実施形態に係るモンゴメリ乗算剰余演算回路の構成を示す図である。
【図３４】モンゴメリ乗算剰余演算回路１７００によるモンゴメリ乗算剰余演算のアルゴリズム（１０２４ビットの場合）を示す図である。
【図３５】第８の実施形態に係る加算回路の構成を示す図である。
【図３６】従来のインバータ回路の構成を示す図である。
【図３７】第９の実施形態に係るインバータ回路の構成を示す図である。
【図３８】インバータ回路９５０に入力および出力される信号の時間的な変化の例を示す図である。
【図３９】インバータ回路９５０に入力および出力される信号の時間的な変化の別の例を示す図である。
【図４０】インバータ回路９５０の入出力関係をまとめた図である。
【図４１】第１０の実施形態に係るＮＡＮＤ回路の構成を示す図である。
【図４２】ＮＡＮＤ回路９５１の入出力関係をまとめた図である。
【図４３】第１１の実施形態に係る加算回路の構成を示す図である。
【図４４】加算回路９５２の入出力関係をまとめた図である。
【図４５】第１２の実施形態に係るＲＯＭの構成を示す図である。
【図４６】ＲＯＭ９５３の入出力関係をまとめた図である。
【図４７】第１２の実施形態の変形例１に係るＲＯＭの構成を示す図である。
【図４８】第１２の実施形態の変形例２に係るＲＯＭの構成を示す図である。
【図４９】第１３の実施形態に係るレジスタの構成を示す図である。
【図５０】レジスタ９５６に入力および出力される信号の時間的な変化の例を示す図である。
【図５１】第１４の実施形態に係る複数個のロジックを含む半導体回路を示す図である。
【図５２】ロジック２に入力および出力される信号の時間的な変化の例を示す図である。
【図５３】第１４の実施形態の変形例１に係る複数個のロジックを含む半導体回路を示す図である。
【図５４】ロジック２に入力および出力される信号の時間的な変化の例を示す図である。
【図５５】第１４の実施形態の変形例２に係る複数個のロジックを含む半導体回路を示す図である。
【図５６】ロジック２に入力および出力される信号の時間的な変化の例を示す図である。
【図５７】第１４の実施形態の変形例３に係る複数個のロジックを含む半導体回路を示す図である。
【図５８】ロジック２に入力および出力される信号の時間的な変化の例を示す図である。
【図５９】第１４の実施形態の変形例３に係る複数個のロジックを含む半導体回路を示す図である。
【符号の説明】
【０７３６】
１１  暗号回路、１２  制御回路、１３  演算回路、２０，１００，３００，４００，５００，８００，１５００，１６００  乗算回路、２１，１０１，３０１，４０１，５０１，６０１，７０１，８０１，９０１，１４０１，１５０１，１６０１，１７０１，１９０１  レジスタ群、２２，１２２，６２２，８２２，９２２，１５２２  Ｘレジスタ、２３，１２３，６２３，８２３，９２３，１３０２，１４２３，１６２３  Ｋレジスタ、２４，２６，２８，１１２，１４０４，１４０６，１４０８，１５０４，１５０６，１５０７，１５０８Ｌ，１５０８Ｕ，１７０４，１７０６，１７０８，１７１３  データバス、２７，１０７，６０７，９０７，１４０７，１７０７  Ｐレジスタ、５１〜５８  乗算のアルゴリズム、５９，６０  剰余演算のアルゴリズム、６１〜６３  モンゴメリ乗算剰余演算のアルゴリズム、１０２，１０２ａ，１０２ｂ，１０２ｃ，１０４，１０６，１０８  正負論理混在データバス、１０３，６０３，１０００，１０１０，１１００，１２００，１５０３，１７０３，１９０３  加算部、１０５，１４０５  左シフト回路、１０９  Ｙ［ｉ］判定回路、１２１，６２１，１４２１，１５２１  Ｙレジスタ、１５０  バス論理変換回路、２９０，３１０，３３０，３５０  制御信号生成回路、３２０  零元出力回路、５０５，５０５ａ，５０５ｂ，６０５，１７０５  右シフト回路、６００，７００，９００，１７００  モンゴメリ乗算剰余演算回路、６０９  Ｙ［ｉ］評価部、６１０，６１１，６３１，６３２，６３３，６３４，７１１，７３１，７３２，７３３，７３４，９１０，９１１，９３１，９３２，９３３，９３４，１４１１，１４３１，１４３２，１４３３，１４３６，１４３７，１５３１，１５３２，１７３１，１７３２，１７３３，１７３４，１７３５，１７３６  制御バス、６２４，１４２２  Ｎレジスタ、６２５，９２５  （Ｘ＋Ｎ）レジスタ、７２２  Ｇ１レジスタ、７２３  Ｇ２レジスタ、７２４  Ｇ３レジスタ、７２５  Ｇ４レジスタ、８０５  ２ビット左シフト回路、８０９  Ｙ［２ｉ＋１，２ｉ］判定回路、９０５  ２ビット右シフト回路、９０９  Ｙ［ｉ＋１，ｉ］評価部、９２４，１４１０，１５１０  Ｙ［ｉ］選択回路、９４９，９５０  インバータ回路、９５１  ＮＡＮＤ回路、９５２  加算回路、９５３，９５４，９５５  ＲＯＭ、１００１，１００３，１１０１，１１０３，１１０４，１１０６，１２０１，１２０３，１２０４，１２０６，１２０７，１２０９  加算回路（正論理キャリー負論理）、１００２，１１０２，１１０５，１２０２，１２０５，１２０８  加算回路（負論理キャリー正論理）、１３００  データ格納レジスタ群、１３０３  選択回路、１４００  剰余演算回路、１４０３  加減算部、１４１８，１５１７，１７１８  Ｑレジスタ、１４０９，１６０９，１７０９，  レジスタ選択回路、１４１２  加減算選択レジスタ、１５１１  制御バス、１５１２  選択回路、１５２３，１９１４  Ａレジスタ、１７１２  シフト選択回路、１７１４  レジスタ選択回路（ＳＱ）、１７２３  Ｒレジスタ、１９００  加算回路、１９１１  Ｘ１レジスタ、１９１２  Ｘ２レジスタ、Ｐ１，Ｎ１，ＰＴ１〜ＰＴ８，ＰＸ１〜ＰＸ４  ＰチャネルＭＯＳトランジスタ、ＮＴ１〜ＮＴ１３���，ＮＷ１〜ＮＷ１２９，ＮＥ１〜ＮＥ１２９，ＮＸ１〜ＮＸ４  ＮチャネルＭＯＳトランジスタ、ＡＮＤ１〜ＡＮＤ１２９，ＡＮＤ１５０〜ＡＮＤ１５２  論理積回路、ＮＯＲ１〜ＮＯＲ４，ＮＯＲ１５０  反転論理和回路、ＯＲ１〜ＯＲ２，ＯＲ１５０〜ＯＲ１５２  論理和回路、ＮＡＮＤ１５０  反転論理積回路、ＸＯＲ１５０，ＸＯＲ１５１  排他的論理和回路、Ｄ１〜Ｄ４  遅延回路、ＩＶ１，ＩＶ２  インバータ。
【図１】
2005346373.tif 000003
【図２】
2005346373.tif 000004
【図３】
2005346373.tif 000005
【図４】
2005346373.tif 000006
【図５】
2005346373.tif 000007
【図６】
2005346373.tif 000008
【図７】
2005346373.tif 000009
【図８】
2005346373.tif 000010
【図９】
2005346373.tif 000011
【図１０】
2005346373.tif 000012
【図１１】
2005346373.tif 000013
【図１２】
2005346373.tif 000014
【図１３】
2005346373.tif 000015
【図１４】
2005346373.tif 000016
【図１５】
2005346373.tif 000017
【図１６】
2005346373.tif 000018
【図１７】
2005346373.tif 000019
【図１８】
2005346373.tif 000020
【図１９】
2005346373.tif 000021
【図２０】
2005346373.tif 000022
【図２１】
2005346373.tif 000023
【図２２】
2005346373.tif 000024
【図２３】
2005346373.tif 000025
【図２４】
2005346373.tif 000026
【図２５】
2005346373.tif 000027
【図２６】
2005346373.tif 000028
【図２７】
2005346373.tif 000029
【図２８】
2005346373.tif 000030
【図２９】
2005346373.tif 000031
【図３０】
2005346373.tif 000032
【図３１】
2005346373.tif 000033
【図３２】
2005346373.tif 000034
【図３３】
2005346373.tif 000035
【図３４】
2005346373.tif 000036
【図３５】
2005346373.tif 000037
【図３６】
2005346373.tif 000038
【図３７】
2005346373.tif 000039
【図３８】
2005346373.tif 000040
【図３９】
2005346373.tif 000041
【図４０】
2005346373.tif 000042
【図４１】
2005346373.tif 000043
【図４２】
2005346373.tif 000044
【図４３】
2005346373.tif 000045
【図４４】
2005346373.tif 000046
【図４５】
2005346373.tif 000047
【図４６】
2005346373.tif 000048
【図４７】
2005346373.tif 000049
【図４８】
2005346373.tif 000050
【図４９】
2005346373.tif 000051
【図５０】
2005346373.tif 000052
【図５１】
2005346373.tif 000053
【図５２】
2005346373.tif 000054
【図５３】
2005346373.tif 000055
【図５４】
2005346373.tif 000056
【図５５】
2005346373.tif 000057
【図５６】
2005346373.tif 000058
【図５７】
2005346373.tif 000059
【図５８】
2005346373.tif 000060
【図５９】
2005346373.tif 000061