(57)【要約】【課題】電力解析攻撃への耐性を高めることが可能な演算装置を提供する。【解決手段】演算装置３は、レジスタ群２と、ＡＬＵ１とを備える。レジスタ群２およびＡＬＵ１の各々は、切替制御信号１０１と、時間的に変化するとともにレジスタ群２に格納されたソースデータとは無関係な切替データ信号１０２とを受ける。レジスタ群２は、切替制御信号１０１が非活性化されたことに応答して選択された１または複数のソースデータをＡＬＵ１に出力し、切替制御信号が活性化されたことに応答して切替データ信号１０２に基づく１または複数のデータをＡＬＵ１に出力する。ＡＬＵ１は、切替制御信号が非活性化されたことに応答して上記の１または複数のソースデータに対して算術演算または論理演算を行なった演算結果を出力し、切替制御信号が活性化されたことに応答して切替データ信号１０２に基づくデータを出力する。【選択図】図１
2011234312.tif 000002
【特許請求の範囲】
【請求項１】
記憶部と、
前記記憶部から受けた１または複数のソースデータを用いて算術演算または論理演算を行なう演算部とを備え、
前記記憶部および前記演算部の各々は、活性状態または非活性状態になる切替制御信号と、時間的に変化するとともに前記１または複数のソースデータとは無関係なデータ信号とを受け、
前記記憶部は、前記切替制御信号が非活性化されたことに応答して前記１または複数のソースデータを前記演算部に出力し、前記切替制御信号が活性化されたことに応答して前記無関係なデータ信号に基づく１または複数のデータを前記演算部に出力し、
前記演算部は、前記切替制御信号が非活性化されたことに応答して前記１または複数のソースデータに対して算術演算または論理演算を行なった演算結果を出力し、前記切替制御信号が活性化されたことに応答して前記無関係なデータ信号に基づくデータを出力する、演算装置。
【請求項２】
前記無関係なデータ信号は、多ビットの信号であり、
前記記憶部および前記演算部の各々は、
各々が論理演算機能または記憶機能を有する複数の回路素子と、
前記複数の回路素子の少なくとも一部にそれぞれ対応する複数の選択回路とを含み、
前記複数の選択回路の各々は、対応する回路素子の出力信号、前記無関係なデータ信号のうち対応するビットの信号、および前記切替制御信号を受け、
前記複数の選択回路の各々は、前記切替制御信号が非活性化されたことに応答して前記対応する回路素子の出力信号を出力し、前記切替制御信号が活性化されたことに応答して前記対応するビットの信号を出力する、請求項１に記載の演算装置。
【請求項３】
論理演算機能または記憶機能を有する回路素子を複数備え、
複数の前記回路素子のうち少なくとも一部の回路素子の各々は、
１または複数の第１の入力ノードと、
前記１または複数の第１の入力ノードから入力される１または複数の信号と異なる信号を受ける第２の入力ノードと、
出力ノードと、
前記出力ノードから出力する信号を切替えるための切替制御信号を受ける第３の入力ノードとを含み、
前記一部の回路素子の各々は、前記切替制御信号が非活性化されたことに応答して、前記１または複数の第１の入力ノードから入力された１または複数の信号を論理演算することによって得られる信号、または内部に記憶したデータに応じた信号を前記出力ノードから出力し、
前記一部の回路素子の各々は、前記切替制御信号が活性化されたことに応答して、前記第２の入力ノードから入力された信号に応じた信号を前記出力ノードから出力する、演算装置。
【請求項４】
請求項１または２に記載の演算装置と、
予め設定された複数の命令のいずれかを受け、受けた命令に応じた信号を前記演算装置に出力する命令デコーダとを備え、
前記複数の命令は、前記演算部に算術演算または論理演算を行なわせる演算命令を含む、中央処理装置（ＣＰＵ）。
【請求項５】
前記中央処理装置は、前記記憶部の内部または外部に設けられ、前記無関係なデータ信号に対応するデータを格納する第１のレジスタをさらに備え、
前記第１のレジスタに格納されるデータは、プログラムで設定可能である、請求項４に記載の中央処理装置。
【請求項６】
前記中央処理装置は、前記記憶部の内部または外部に設けられ、前記無関係なデータ信号に対応するデータを格納するシフトレジスタをさらに備え、
前記無関係なデータ信号は、前記シフトレジスタがシフトすることによって変化する、請求項４に記載の中央処理装置。
【請求項７】
前記複数の命令は、前記切替制御信号を活性化するための切替命令を含み、
前記命令デコーダは、前記切替制御信号を前記演算装置に出力し、前記切替命令を受けた場合に前記切替制御信号を活性化する、請求項４に記載の中央処理装置。
【請求項８】
前記中央処理装置は、第１および第２の動作モードを有し、
前記中央処理装置は、クロック信号と前記第１および第２の動作モードのいずれかに設定するためのモード設定信号とを受け、前記クロック信号および前記モード設定信号に基づいて前記切替制御信号を生成する切替制御信号生成部をさらに備え、
前記記憶部は、前記クロック信号の第１のエッジに応答して、前記演算部の演算結果を格納し、
前記切替制御信号生成部は、前記第１の動作モードの場合に、前記クロック信号の前記第１のエッジに応答して前記切替制御信号を活性化し、前記クロック信号の第２のエッジに応答して前記切替制御信号を非活性化し、
前記切替制御信号生成部は、前記第２の動作モードの場合に、前記クロック信号によらず前記切替制御信号を非活性化する、請求項４に記載の中央処理装置。
【請求項９】
前記中央処理装置は、前記記憶部の内部または外部に設けられ、前記モード設定信号に対応するデータを格納する第２のレジスタをさらに備え、
前記第２のレジスタに格納されたデータは、プログラムで設定可能である、請求項８に記載の中央処理装置。
【請求項１０】
前記命令デコーダは、前記演算装置が前記演算命令に従って演算を実行している間は、前記第１の動作モードを指定する前記モード設定信号を前記切替制御信号生成部に出力し、前記演算装置が前記複数の前記演算命令に従った演算の実行を完了した後は、前記第２の動作モードを指定する前記モード設定信号を前記切替制御信号生成部に出力する、請求項８に記載の中央処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、演算装置および中央処理装置に関し、特に暗号処理に対する電力解析攻撃への耐性を高めた演算装置および中央処理装置に関する。
【背景技術】
【０００２】
電力解析攻撃は、暗号処理中の回路の消費電力を解析することによって、処理されている秘密情報を取得するものである。代表的な手法として、ＤＰＡ（Differential  Power  Analysis：差分電力解析）やＣＰＡ（Correlation  Power  Analysis：相関電力解析）がある（非特許文献１〜３を参照）。電力解析攻撃に対する耐性を高める方法として、たとえば以下の文献に記載の技術が知られている。
【０００３】
特開２００８−２６９０６０号公報（特許文献１）に記載の半導体集積回路は、メモリと、主制御手段と、データバスと、使用状態判定手段と、無効データ生成手段と、バス制御手段とを含む。メモリには、セキュリティデータまたはそのデータ処理手順が記憶される。主制御手段は、データ処理手順の実行を制御する。データバスは、データ処理手順の実行で用いられる伝送データを伝送する。使用状態判定手段は、データバスに接続された周辺装置の全てについてデータバスに対する伝送データの入出力を制御する伝送制御信号に基づいて、データバスが使用されているか否かを検出する。無効データ生成手段は、無効データを生成する。バス制御手段は、データバスが使用されていないと判定された場合に、データバスに対して無効データを出力する。
【０００４】
特表２００２−５２６８４９号公報（特許文献２）に記載された暗号化方法では、暗号処理に関するデータビット語をメモリセルまたはレジスタに書込む前に、乱数に基づいて生成されたデータビット語をメモリセルまたはレジスタに格納する。
【０００５】
特開２００６−１９８７２号公報（特許文献３）は、ＤＥＳ（Data  Encryption  Standard）など複数段のラウンド関数の繰り返し処理を含む暗号アルゴリズムを実行する暗号処理装置について開示する。この暗号処理装置では、ラウンドごとのデータ処理を実行する関数演算部に対してラウンド遷移時に乱数が入力され、その後、レジスタに格納された中間データが入力され、演算処理が実行される。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００８−２６９０６０号公報
【特許文献２】特表２００２−５２６８４９号公報
【特許文献３】特開２００６−１９８７２号公報
【非特許文献】
【０００７】
【非特許文献１】Kocher他、「Differential Power Analysis」CRYPTO 1999. LNCS, vol. 1666, pp. 388-397. Springer, Heidelberg (1999)
【非特許文献２】Brier他、「Correlation Power Analysis with a Leakage Model」CHES 2004. LNCS, vol. 3156, pp. 16-29. Springer, Heidelberg (2004)
【非特許文献３】Suzuki他、「DPA Lekage Models for CMOS Logic Circuits」CHES 2005．LNCS，vol．3659, pp. 366-382, Springer-Verlag（2005）
【発明の概要】
【発明が解決しようとする課題】
【０００８】
上記の特開２００８−２６９０６０号公報（特許文献１）は、ＣＰＵ（Central  Processing  Unit：中央処理装置）とメモリとの間でデータバスを介したデータ転送時に発生する消費電力に着目した電力解析攻撃を防御する技術を開示するものである。しかしながら、この技術では、ＣＰＵ内部で実行される演算時の消費電力に着目した攻撃を防御することができない。
【０００９】
上記の特表２００２−５２６８４９号公報（特許文献２）は、メモリまたはレジスタはデータを書込む際の消費電力に対する攻撃を防御する技術を開示するものである。しかしながら、この技術では、ＣＰＵがメモリまたはレジスタに記憶されたデータを使用して演算処理を行なう際の消費電力に基づく電力解析攻撃を防御することはできない。
【００１０】
上記の特開２００６−１９８７２号公報（特許文献３）に開示される技術は、ＤＥＳなどの特定の暗号についての暗号処理を実行する暗号回路に対する電力解析攻撃に対する耐性を向上させるものであり、ＣＰＵ内部で実行される演算時の消費電力に着目した攻撃を防御することができない。
【００１１】
さらに、上記の特開２００８−２６９０６０号公報（特許文献１）に記載された一部の実施形態、および特表２００２−５２６８４９号公報（特許文献２）および特開２００６−１９８７２号公報（特許文献３）に開示された各実施形態を実現するためには乱数が必要であり、必要なビット数の乱数を高速に発生することが困難であるという問題もある。
【００１２】
この発明の目的は、従来の設計を大きく変えることなく、電力解析攻撃への耐性を高めることが可能な演算装置およびＣＰＵを提供することである。
【課題を解決するための手段】
【００１３】
この発明の実施の一形態による演算装置は、記憶部と、演算部とを備える。演算部は、記憶部から受けた１または複数のソースデータを用いて算術演算または論理演算を行なう。記憶部および演算部の各々は、活性状態または非活性状態になる切替制御信号と、時間的に変化するとともに１または複数のソースデータとは無関係なデータ信号とを受ける。記憶部は、切替制御信号が非活性化されたことに応答して１または複数のソースデータを演算部に出力し、切替制御信号が活性化されたことに応答して上記の無関係なデータ信号に基づく１または複数のデータを演算部に出力する。演算部は、切替制御信号が非活性化されたことに応答して１または複数のソースデータに対して算術演算または論理演算を行なった演算結果を出力し、切替制御信号が活性化されたことに応答して上記の無関係なデータ信号に基づくデータを出力する。
【発明の効果】
【００１４】
上記の実施の形態によれば、演算装置を構成する記憶部および演算部は、切替制御信号が活性化されたことに応答して演算に用いるソースデータと無関係なデータを出力するので、演算装置に対する電力解析攻撃への耐性を高めることができる。
【図面の簡単な説明】
【００１５】
【図１】この発明の実施の形態１に従う演算装置３の構成を示すブロック図である。
【図２】ＡＮＤゲートの設計方法について説明するための図である。
【図３】セレクタの設計方法について説明するための図である。
【図４】Ｄ−フリップフロップの設計方法について説明するための図である。
【図５】演算装置１において回路素子の変換を行なう箇所について説明するための図である。
【図６】図５に示したデータ信号１（１０９）を出力する回路部分１１＿１の構成の一例を示す回路図である。
【図７】図５に示したデータ信号１，２（１０９，１１０）が入力される回路部分１２＿０〜１２＿Ｍの構成の一例を示す回路図である。
【図８】図５に示した演算結果１１１を出力する回路部分１３の構成の一例を示す回路図である。
【図９】図５の演算装置３の動作の一例を示すタイミング図である。
【図１０】この発明の実施の形態２に従うＣＰＵ１０の構成を示すブロック図である。
【図１１】この発明の実施の形態３に従うＣＰＵ１０Ａの構成を示すブロック図である。
【図１２】この発明の実施の形態４に従うＣＰＵ１０Ｂの構成を示すブロック図である。
【図１３】この発明の実施の形態５に従うＣＰＵ１０Ｃの構成を示すブロック図である。
【図１４】クロックバッファ１７の構成および動作を説明するための図である。
【図１５】図１３のＣＰＵ１０Ｃの動作の一例を示すタイミング図である。
【図１６】図１４（Ａ）に示すクロックバッファ１７の変形例を示すブロック図である。
【図１７】図１３に示すＣＰＵ１０Ｃの変形例としてのＣＰＵ１０Ｄの構成を示すブロック図である。
【発明を実施するための形態】
【００１６】
一般に、ＣＰＵは、ＡＬＵ（Arithmetic  Logic  Unit：算術論理演算ユニット）を使用する命令（たとえば、算術演算命令、論理演算命令）の実行時には複数のデータソースから２つのデータソースを選択し、それらをＡＬＵの入力データとして、ＡＬＵが入力データを用いて命令で指定された演算を実行する。一方、ＡＬＵを使用しない命令の実行時には、ＡＬＵへの入力データは、特に意味のあるデータである必要はない。典型的には、（ｉ）ある決まった状態（たとえば、全て０のデータなどの固定値）となる場合と、（ｉｉ）最後にＡＬＵが使用された際に選択されたデータソースが入力され続ける場合とがある。ＡＬＵの出力データ（演算結果）についても、ＡＬＵを使用しない命令の実行時には、上記の（ｉ）と同様となる場合がある。これらはＣＰＵの設計に依存して決まる。
【００１７】
従来のＣＰＵで、秘密情報（たとえば、暗号処理における鍵情報など）を扱うと、上記の（ｉ）の場合、ＡＬＵを使用する命令の実行時には演算装置（ＡＬＵおよびレジスタ群）の内部に出現するデータ（たとえば、ＡＬＵの入力データや出力データ）のハミング重みを選択関数とした電力解析によって秘密情報が漏洩する可能性がある。なぜなら、演算装置を構成するＣＭＯＳ（Complementary  Metal-Oxide  Semiconductor）回路では、「０」から「１」、または「１」から「０」に変化する信号の数（すなわちハミング距離）と消費電力とに高い相関があるからである。上記の（ｉｉ）の場合、データソースとして選択されていたレジスタの内容が変化する際の変化の前後のハミング距離を選択関数とした電力解析によって、秘密情報が漏洩する可能性がある。
【００１８】
これらの電力解析による秘密情報の抽出は、ＤＰＡ（Differential  Power  Analysis）やＣＰＡ（Correlation  Power  Analysis）などとして知られている。ＤＰＡの場合、多数の入力データに対して消費電力波形を取得し、暗号鍵に相関のある内部変数の値（選択関数と称する）を用いて、取得した消費電力波形が分類される。そして、各グループの電力波形の平均値に差があれば、鍵の予測値が正しいことが分かる。ＣＰＡでは、予測した暗号鍵に対して消費電力値を推定し、実際の消費電力波形との相関が調べられる。全ての暗号鍵の候補について相関値を計算した後、最も高い相関値を有する鍵候補が、真と判定される。
【００１９】
この発明では、従来の演算装置やＣＰＵの設計を大きく変えることなく、上記の電力解析攻撃への耐性を高めることが可能な技術が提供される。以下、この発明の実施の形態について図面を参照して詳しく説明する。なお、同一または相当する部分には同一の参照符号を付して、その説明を繰返さない。
【００２０】
＜実施の形態１＞
［演算装置３の構成の概略］
図１は、この発明の実施の形態１に従う演算装置３の構成を示すブロック図である。演算装置３は、ＣＰＵのうち演算命令の実行に直接関係する部分である、演算部としてのＡＬＵ１と、記憶部としてのレジスタ群２とを含む。ＡＬＵ１は、２個の入力データ（データ１（１０９）およびデータ２（１１０））を演算ソースとして内部に含まれる（Ｍ＋１）個の演算ブロック１＿０〜１＿Ｍ（加算ブロック、論理和ブロック、論理積ブロック、排他的論理和ブロックなど）が演算を実行する。ＡＬＵ１は、演算種類選択信号１００で指定される種類の演算結果１１１を出力する。レジスタ群２は、ＡＬＵ１の入力データとして選択され得る複数のソースデータを格納するレジスタファイルであり、（Ｎ＋１）個のレジスタ２＿０〜２＿Ｎを含む。
【００２１】
図１の演算装置３が従来の演算装置と異なる点は、ＡＬＵ１およびレジスタ群２に対して切替制御信号１０１および切替データ信号１０２が入力されている点である。図１の場合、切替制御信号１０１は、活性状態（アクティブ）と非活性状態（インアクティブ）とを有する１ビットの信号である。切替データ信号１０２は、演算装置３による演算に用いられるソースデータとは無関係な複数ビットの信号である。図２〜図８で説明するように、切替制御信号１０１が活性化（アサート）された状態では、演算装置３を構成する論理ゲートやフリップフロップなどの複数の回路素子のうち、少なくとも一部の回路素子から出力される信号が切替データ信号１０２に変更される。これによって、演算装置３内の全ての信号の組合せ（以下、「回路状態」と称する）および演算回路３の出力信号が演算とは無関係な状態に設定できる。一方、切替制御信号１０１が非活性化（ネゲート）された状態では、演算装置３の動作は従来の演算装置と同じであり、具体的には次のとおりである。
【００２２】
まず、演算装置３では演算実行に先立って、レジスタ群２が、データソース選択信号１，２（１０４，１０５）に従って、（Ｎ＋１）個のレジスタ２＿０〜２＿Ｎの中から１または複数（通常２個）を選択し、選択したレジスタに格納されたソースデータを入力データ（データ１（１０９）およびデータ２（１１０））としてＡＬＵ１へ出力する。ＡＬＵ１はレジスタ群２から供給された２個の入力データ１０９，１１０に対して複数の演算を並行して実行し、演算種類選択信号１００で指定された演算種類に該当する演算結果１１１を出力する。ＡＬＵの設計によっては、ＡＬＵ１の内部の（Ｍ＋１）個の演算ブロック１＿０〜１＿Ｍのうち、演算種類選択信号１００で指定された演算種類に該当する演算ブロックのみに有効なデータを入力し、それ以外の演算ブロックには有効なデータを入力しない（たとえば、全て０の固定値を入力する）ものもある。これによって、ＡＬＵ１は、必要な演算ブロックのみを動作させる。ＡＬＵ１が出力した演算結果１１１は、演算装置３以外で用いられることもあるし、演算装置３内のレジスタ群２に書き込まれることもある。レジスタ群２への書き込みは、書込レジスタ選択信号１０６および書込イネーブル信号１０７によって制御される。レジスタ群２には、演算装置３の外部のメモリまたはレジスタなどからデータ（書込データ信号１０８）が書き込まれる場合もある。レジスタ群２には、さらに、クロック信号１１２およびリセット信号１１３が外部から入力される。
【００２３】
［従来の演算装置の問題点］
上記のように切替制御信号１０１がネゲートされている場合の動作、すなわち、従来の演算装置の動作には、電力解析攻撃に対する耐性の観点から次のような問題がある。
【００２４】
第１の問題は、演算装置３を使用しない命令の実行時に、ＡＬＵ内部の少なくとも１つの演算ブロックへの入力データ信号がある決まった値（たとえば、全て「０」）となる場合に発生する。たとえば、演算装置３を使用しない命令の実行時には、データ１（１０９）およびデータ２（１１０）としてある決まった値を出力するようにレジスタ群２を設計したり、ＡＬＵ１の内部の演算ブロック１＿０〜１＿Ｍのうち、演算種類選択信号１００で指定された演算種類に該当しない演算ブロックにはある決まった値を入力するようにＡＬＵ１を設計した場合に、ＡＬＵ１にある決まった値が入力される。以下、上記の決まった値が全て「０」の場合を想定して説明するが、それ以外の値であっても個々の入力データ信号のビットデータを選択関数とした電力解析によって、秘密情報が漏洩する可能性がある。
【００２５】
演算装置３を使用しない命令の実行時に、ＡＬＵ１の内部の演算ブロック１＿０〜１＿Ｍの入力データ信号（データ１（１０９）およびデータ２（１１０））が全て「０」であり、演算装置３を使用する命令の実行時に入力データ信号が実際に演算に使用される値に変化したとする。そうすると、各演算ブロックの内部では、演算に使用される値のハミング重み（ビット列中の「１」の個数）に依存した消費電力が発生する。なぜなら、入力データ信号の変化するビット数が多い（すなわち、ハミング距離が大きい）ほど、演算ブロックの内部信号はより多く変化し、より多くの電力を消費するからである。上記の場合、ＡＬＵ１への入力データ信号のハミング重みとハミング距離は等しくなり、入力データのハミング重みを選択関数とした電力解析によって秘密情報が漏洩する可能性がある。演算命令の実行後にＡＬＵ１への入力データ信号が再び全て「０」に戻る際も同様である。
【００２６】
演算装置３を使用しない命令の実行時に、演算装置３の出力信号の値（すなわち、演算結果１１１）として、ある決まった値（たとえば、全て「０」）となるように演算装置３が設計された場合も上記と同様の問題が発生する。この場合、演算結果１１１のハミング重みを選択関数とした電力解析によって秘密情報が漏洩する可能性がある。
【００２７】
第２の問題は、演算装置３を使用しない命令の実行時に、最後に演算装置３が使用された際に選択されたデータソースがＡＬＵ１に入力され続ける場合に発生する。具体的には、ある演算命令を実行する際、演算のデータソースを格納するレジスタと演算結果を格納するレジスタとが同一のレジスタに指定される場合に問題が生じる。この場合、ＡＬＵ１では演算前後の当該レジスタの内容のハミング距離に応じた消費電力が発生する。したがって、当該ハミング距離を選択関数とした電力解析によって秘密情報が漏洩する可能性がある。
【００２８】
たとえば、変数「ａ」と変数「ｂ」との加算結果を変数「ｃ」に代入するプログラム（ｃ＝ａ＋ｂ）で、変数「ｃ」と変数「ａ］とが同じレジスタに割り付けられた場合を考える。この場合、演算実行中のＡＬＵ１の入力データ１０９，１１０は「ａ」と「ｂ」であるが、演算結果１１１をレジスタに格納するタイミングでは、「ｃ」と「ｂ」に変化する。前述のように、入力データ信号の変化するビット数が多い（すなわち、ハミング距離が大きい）ほど、演算ブロックの内部信号はより多く変化し、より多くの電力を消費する。入力データ信号の変化するビット数は、「ａ」と「ｃ」のハミング距離となり、当該ハミング距離を選択関数とした電力解析によって秘密情報が漏洩する可能性がある。
【００２９】
［演算装置３の詳細な構成］
これらの問題を解決するために、演算装置３を構成する論理ゲートやフリップフロップなどの回路素子のうち少なくとも一部の回路素子にそれぞれ対応して複数の選択回路（セレクタ）が設けられる。この明細書で回路素子とは、論理演算機能または記憶機能を有し、機能的に１まとまりと考えられる単位を意味するものとする。したがって、ＡＮＤ素子やＯＲ素子などの論理ゲート、セレクタ（マルチプレクサ）や加算器などの組合せ回路、フリップフロップなどの順序回路のいずれを回路素子と考えてもよい。
【００３０】
各選択回路は、対応の回路素子の出力、切替制御信号１０１、および切替データ信号１０２を受ける。選択回路は、切替制御信号１０１がアサートされたことに応答して切替データ信号１０２を出力し、切替制御信号１０１がネゲートされたことに応答して対応の回路素子から出力された信号を出力する。
【００３１】
演算装置３（ＡＬＵ１およびレジスタ群２）の設計は、従来の演算装置の設計を大きく変更する必要はなく、典型的には以下のステップで設計される。
【００３２】
（１）  従来技術によるＡＬＵとレジスタ群の回路を設計する。
（２）  （１）で得られたＡＬＵおよびレジスタ群の回路をベースとして、ＡＬＵおよびレジスタ群の入出力信号を含む内部信号を生成しているフリップフロップまたは論理ゲートなどの回路素子のうち、全てあるいは一部の回路素子の出力ノードに対してそれぞれセレクタを直列に接続する。
【００３３】
（３）  （２）で接続したセレクタに、切替制御信号１０１と切替データ信号１０２を接続する。各セレクタには、切替データ信号１０２のうち対応のビットの信号が入力される。
【００３４】
切替制御信号１０１をアサートおよびネゲートするタイミングは、変換する全ての回路素子について同じでよい。切替データ信号１０２の値は、変換する全ての回路素子について同じであっても電力解析攻撃に対する耐性を高める効果がなくはないが、変換する回路素子ごとに別々にビットデータが供給されるほうが望ましい。１つの回路素子に供給される切替データ信号１０２の値は任意のタイミングで（たとえば、所定の時間が経過する都度、または所定回数の演算を実行する都度）変更される必要がある。もし、切替データ信号１０２の値が時間的に変化しない固定値であるとすると、個々のビットを選択関数とした電力解析によって秘密情報が漏洩する危険があるので、従来と耐性が変わらなくなるからである。以下、具体的な回路素子に対する設計方法について説明する。
【００３５】
図２は、ＡＮＤゲートの設計方法について説明するための図である。図２（Ａ）は入力信号ＩＮ１，ＩＮ２の論理和を出力する従来のＡＮＤゲート３０を示し、図２（Ｂ）は設計変更後のＡＮＤゲート３２を示す。ＡＮＤゲート３２は、従来のＡＮＤゲート３０の出力ノードと直列にセレクタ３１を接続したものである。セレクタ３１は、ＡＮＤゲート３０の出力、切替データ信号１０２、および切替制御信号１０１を受ける。セレクタ３１は、切替制御信号１０１がアサートされたことに応答して切替データ信号１０２を出力信号ＯＵＴとして出力し、切替制御信号１０１がネゲートされたことに応答してＡＮＤゲート３０の出力を出力信号ＯＵＴとして出力する。
【００３６】
図３は、セレクタの設計方法について説明するための図である。図３（Ａ）は選択信号ＳＥＬに応じて入力信号ＩＮ１，ＩＮ２のいずれかを出力する従来のセレクタ３４を示し、図３（Ｂ）は設計変更後のセレクタ３６を示す。セレクタ３６は、従来のセレクタ３４の出力ノードと直列にセレクタ３５を接続したものである。セレクタ３５は、セレクタ３４の出力、切替データ信号１０２、および切替制御信号１０１を受ける。セレクタ３５は、切替制御信号１０１がアサートされたことに応答して切替データ信号１０２を出力信号ＯＵＴとして出力し、切替制御信号１０１がネゲートされたことに応答してセレクタ３４の出力を出力信号ＯＵＴとして出力する。
【００３７】
図４は、Ｄ−フリップフロップの設計方法について説明するための図である。図４（Ａ）は従来のＤ−フリップフロップ３７を示し、図４（Ｂ）は設計変更後のＤ−フリップフロップ３９を示す。従来のＤ−フリップフロップ３７は、クロック端子ＣＫに入力される入力信号ＩＮ２の立上がりエッジで、データ端子Ｄに入力されている入力信号ＩＮ１の論理レベルを保持し、保持した論理レベル（内部論理状態）を出力端子Ｑから出力信号ＯＵＴとして出力する。設計変更後のＤ−フリップフロップ３９は、従来のＤ−フリップフロップ３７の出力端子Ｑにセレクタ３８を接続したものである。セレクタ３８は、Ｄ−フリップフロップ３７の出力、切替データ信号１０２、および切替制御信号１０１を受ける。セレクタ３８は、切替制御信号１０１がアサートされたことに応答して切替データ信号を出力信号ＯＵＴとして出力し、切替制御信号１０１がネゲートされたことに応答してＤ−フリップフロップ３７の出力（Ｄ−フリップフロップ３７の内部論理状態）を出力信号ＯＵＴとして出力する。
【００３８】
図２（Ｂ）においてＡＮＤゲート３０とセレクタ３１とを接続する配線Ｗ１の長さはできるだけ短いほうが望ましい。同様に、図３（Ｂ）におけるセレクタ３４，３５間の配線Ｗ２の長さ、および図４（Ｂ）におけるＤ−フリップフロップ３７とセレクタ３８とを接続する配線Ｗ３の長さはできるだけ短いほうが望ましい。セレクタと回路素子との間の配線長が長いと、この配線の容量が大きくなり、その結果、この配線を流れる信号の消費電力ひいてはその偏りの絶対量も大きくなる。消費電力の偏りをできるだけ小さくするためには、セレクタと回路素子との間を近接して配置して配線長を抑え、消費電力の絶対量をできるだけ小さくすることが望ましい。
【００３９】
図２〜図４では、ＡＮＤゲート、セレクタ、フリップフロップの変換のみを示したが、他の回路素子についても同様であり、変換すべき回路素子の出力ノードと直列にセレクタを接続すればよい。
【００４０】
もしくは、変換後の回路素子と等価な機能（すなわち、論理ゲートまたはフリップフロップとセレクタとを合わせた機能）を単一セルで実現してもよい。この場合、変換後の回路素子は、１または複数の第１の入力ノードと、切替データ信号１０２が入力される第２の入力ノードと、切替制御信号１０１が入力される第３の入力ノードと、出力ノードとを含む。変換後の回路素子は、切替制御信号１０１が非活性化されたことに応答して、１または複数の第１の入力ノードから入力された信号の論理演算結果、または、内部に記憶したデータに基づく信号を出力する。変換後の回路素子は、切替制御信号１０１が活性化されたことに応答して切替データ信号１０２に応じた信号を出力する。
【００４１】
図２〜図４では、切替制御信号１０１がアサートされたことに応答して、設計変更後の回路素子３２，３６，３９から切替データ信号１０２がそのまま出力される場合を示したが、かならずしもそのまま出力する必要はない。切替データ信号１０２の論理レベルを反転させて出力するなど、切替データ信号１０２を変形させた信号を出力するようにしてもよい。
【００４２】
図５は、演算装置１において回路素子の変換を行なう箇所について説明するための図である。
【００４３】
図２〜図４で説明した変換は、図５に示したＡＬＵ１およびレジスタ群２に含まれる全ての論理ゲートや記憶素子について行なう必要はない。しかしながら、図５に示すように、少なくともデータ信号１，２（１０９，１１０）を出力する回路部分１１＿１，１１＿２、データ信号１，２（１０９，１１０）が入力される回路部分１２＿０〜１２＿Ｍ、演算結果１１１を出力する回路部分１３、および演算結果１１１が書込まれるレジスタについては図２〜図４で説明した変換を行なうことが望ましい。上記のうち、回路部分１１＿１，１１＿２の変換については図６で説明し、回路部分１２＿０〜１２＿Ｍの変換については図７で説明し、回路部分１３の変換については図８で説明する。レジスタ２＿０〜２＿Ｎについては各フリップフロップについて図４に示した変換を行なう。
【００４４】
さらに、ＡＬＵ１内部の非線形論理ゲートについても変換を行なうと、非線形論理ゲートにおける消費電力の偏りを低減することができ、電力解析攻撃に対する耐性がより向上する。ここで、線形論理ゲートとは、ＸＯＲ（exclusive  OR）素子のように、ランダムデータが入力されたときに出力される「１」、「０」の個数が均等な論理ゲートをいう。非線形論理ゲートとは、ＡＮＤ素子やＯＲ素子のように、ランダムデータが入力されたときに出力される「１」、「０」の個数に偏りがある論理ゲートをいう。
【００４５】
図６は、図５に示したデータ信号１（１０９）を出力する回路部分１１＿１の構成の一例を示す回路図である。図６において（Ａ）は従来の回路構成の例を示し、（Ｂ）は変換後の回路構成の例を示す。データ信号２（１１０）を出力する回路部分１１＿２の構成も同様であるので、データ信号１（１０９）回路部分１１＿１の構成の一例が代表として示される。
【００４６】
図６（Ａ）に示すように、データ信号１（１０９）を出力する回路部分１１＿１には、レジスタ０〜Ｎ（２＿０〜２＿Ｎ）の出力データＤＲ＿０〜ＤＲ＿Ｎがそれぞれ入力されるＡＮＤゲート４０＿０〜４０＿Ｎと、各ＡＮＤゲート４０の出力が入力されるＯＲゲート４１とが設けられる。各ＡＮＤゲート４０のもう一方の入力ノードには対応のデータソース選択信号１０４（１０４＿０〜１０４＿Ｎのいずれか）が入力される。
【００４７】
図６（Ｂ）に示すように変換後の回路部分１１＿１において、ＯＲゲート４１の出力ノードにセレクタ４２がさらに接続される。ここで、セレクタ４２は、ＯＲゲート４１の出力と、切替制御信号１０１と、切替データ信号１０２とを受け、切替制御信号１０１がアサートされたことに応答して切替データ信号１０２をデータ信号１（１０９）として出力し、切替制御信号１０１がネゲートされたことに応答してＯＲゲート４１の出力をデータ信号１（１０９）として出力する。
【００４８】
図７は、図５に示したデータ信号１，２（１０９，１１０）が入力される回路部分１２＿０〜１２＿Ｍの構成の一例を示す回路図である。図７において（Ａ）は従来の回路構成の例を示し、（Ｂ）は変換後の回路構成の例を示す。回路部分１２＿０〜１２＿Ｍは、論理ブロック１＿０〜１＿Ｍにそれぞれ対応して設けられる。なお、図７では、一例として、論理ブロック１＿０を論理積ブロックとし、論理ブロック１＿１を論理和ブロックとしている。
【００４９】
図７（Ａ）に示すように、回路部分１２＿０は、データ信号１（１０９）を受けるＡＮＤゲート４３＿０と、データ信号２（１１０）を受けるＡＮＤゲート４４＿０とを含む。ＡＮＤゲート４３＿０，４４＿０には、さらに、演算種類選択信号１００のうち論理積を表わす選択信号１００＿０が入力される。ＡＮＤゲート４３＿０，４４＿０の各出力ノードは、対応の論理積ブロック１＿０に接続される。同様に、回路部分１２＿１は、データ信号１（１０９）を受けるＡＮＤゲート４３＿１と、データ信号２（１１０）を受けるＡＮＤゲート４４＿１とを含む。ＡＮＤゲート４３＿１，４４＿１には、さらに、演算種類選択信号１００のうち論理和を表わす選択信号１００＿１が入力される。ＡＮＤゲート４３＿１，４４＿１の各出力ノードは、対応の論理和ブロック１＿１に接続される。図７では図示を省略しているが、回路部分１２＿２〜１２＿Ｍについても同様である。
【００５０】
図７（Ｂ）に示すように、変換後の回路部分１２＿ｉ（ｉは０以上Ｍ以下の整数）は、ＡＮＤゲート４３＿ｉと対応の論理ブロック１＿ｉとの間に挿入されるセレクタ４５＿ｉと、ＡＮＤゲート４４＿ｉと対応の論理ブロック１＿ｉとの間に挿入されるセレクタ４６＿ｉとをさらに含む。セレクタ４５＿ｉは、データ１（１０９）、切替データ信号１０２のうち対応のビット信号、および切替制御信号１０１を受ける。セレクタ４６＿ｉは、データ２（１１０）、切替データ信号１０２のうち対応のビット信号、および切替制御信号１０１を受ける。セレクタ４５＿ｉは、切替制御信号１０１がアサートされたことに応答して切替データ信号１０２のうちの対応のビット信号を対応の論理ブロック１＿ｉに出力し、切替制御信号１０１がネゲートされたことに応答して対応のＡＮＤゲート４３＿ｉの出力を対応の論理ブロック１＿ｉに出力する。セレクタ４６＿ｉは、切替制御信号１０１がアサートされたことに応答して切替データ信号１０２のうちの対応のビット信号を対応の論理ブロック１＿ｉに出力し、切替制御信号１０１がネゲートされたことに応答して対応のＡＮＤゲート４４＿ｉの出力を対応の論理ブロック１＿ｉに出力する。
【００５１】
図８は、図５に示した演算結果１１１を出力する回路部分１３の構成の一例を示す回路図である。図８において（Ａ）は従来の回路構成の例を示し、（Ｂ）は変換後の回路構成の例を示す。なお、図８では、一例として、図５の論理ブロック１＿０をＡＮＤ演算ブロックとし、論理ブロック１＿１をＯＲ演算ブロックとし、論理ブロック１＿Ｍを加算ブロックとしている。
【００５２】
図８（Ａ）に示すように、演算結果１１１を出力する回路部分には、ＡＬＵ１の論理ブロック１＿０〜１＿Ｍにそれぞれ対応するＡＮＤゲート５０＿０〜５０＿Ｍと、ＡＮＤゲート５０＿０〜５０＿Ｍの出力を受けるＯＲゲート５１とが設けられる。ＡＮＤゲート５０＿０〜５０＿Ｍには、さらに、演算種類選択信号１００のうち対応の演算種類選択信号がそれぞれ入力される。
【００５３】
図８（Ｂ）に示すように、変換後の回路部分１３には、ＯＲゲート５１の出力ノードにセレクタ５２がさらに接続される。セレクタ５２は、ＯＲゲート５１の出力と、切替制御信号１０１と、切替データ信号１０２とを受ける。セレクタ５２は、切替制御信号１０１がアサートされたことに応答して切替データ信号１０２を演算結果１１１として出力し、切替制御信号１０１がネゲートされたことに応答してＯＲゲート５１の出力を演算結果１１１として出力する。ただし、セレクタ５２は、切替データ信号１０２を出力するタイミングを、切替制御信号１０１がアサートされたタイミングよりも、演算ブロックの演算時間に対応する時間（遅延時間Ｔｄ）だけ遅らせる。セレクタ５２は、さらに、ＯＲゲート５１の出力信号を出力するタイミングを、切替制御信号１０１がネゲートされたタイミングよりも上記の遅延時間Ｔｄだけ遅らせる。
【００５４】
［演算装置３の動作および効果］
図９は、図５の演算装置３の動作の一例を示すタイミング図である。図９は、上から順に、クロック信号１１２、演算種類選択信号１００、データソース選択信号１（１０４）、データソース選択信号２（１０５）、書込レジスタ選択信号１０６、書込イネーブル信号１０７、切替データ信号１０２、切替制御信号１０１、データ信号１（１０９）、データ信号２（１１０）、演算結果１１１、レジスタ４（２＿４）に格納されているデータを示す。以下、図５、図９を参照して、レジスタ４（２＿４）に格納されたデータ「ａ」とレジスタ５（２＿５）に格納されたデータ「ｂ」の加算結果「ｃ」（＝ａ＋ｂ）がレジスタ４（２＿４）に書込まれる場合の動作について説明する。
【００５５】
図９に示すように演算装置３は、クロック信号１１２の立上がりエッジ（時刻ｔ１，ｔ２，ｔ３，ｔ４）に応答して動作する。時刻ｔ２より前の時間帯では、切替制御信号１０１がアサートされているので、レジスタ群２からデータ信号１（１０９）として無効データ「Ｘ０」が出力され、データ信号２（１１０）として無効データ「Ｘ１」が出力される。ＡＬＵ１から無効データ「Ｘ２」が出力される。
【００５６】
次の時刻ｔ２において、切替制御信号１０１がネゲートされ、切替データ信号１０２が「Ｘ０，Ｘ１，Ｘ２，…」から「Ｙ０，Ｙ１，Ｙ２，…」に切替わる。なお、切替データ信号１０２の切替わりのタイミングは、切替制御信号１０１がネゲートされている間、すなわち、時刻ｔ２から時刻ｔ３の間のいずれのタイミングであってもよい。
【００５７】
さらに、時刻ｔ２において、演算種類選択信号１００として加算演算（ＡＤＤ）を表わす信号がＡＬＵ１に入力される。レジスタ群２には、データソース選択信号１（１０４）としてレジスタ４（２＿４）を表わす信号が入力され、データソース選択信号２（１０５）としてレジスタ５（２＿５）を表わす信号が入力され、書込レジスタ選択信号１０６としてレジスタ４（２＿４）を表わす信号が入力される。さらに、レジスタ群２に入力される書込イネーブル信号１０７がアサートされる。この結果、レジスタ群２からデータ信号１（１０９）としてデータ「ａ」が出力され、データ信号２（１１０）としてデータ「ｂ」が出力される。ＡＬＵ１から出力される信号１１１は、時刻ｔ２よりも遅延時間Ｔｄだけ遅れて無効データ「Ｘ２」から加算結果「ｃ」（ただし、ｃ＝ａ＋ｂ）に切替わる。加算結果「ｃ」は、次のクロック信号の立上がりに応答して時刻ｔ３でレジスタ４に書込まれる。
【００５８】
次の時刻ｔ３において、書込イネーブル信号１０７がネゲートされ、切替制御信号１０１がアサートされる。この結果、レジスタ群２の回路部分１１＿１からデータ信号１（１０９）として無効データ「Ｙ０」が出力され、回路部分１１＿２からデータ信号２（１１０）として無効データ「Ｙ１」が出力される。ＡＬＵ１の回路部分１３から出力される信号１１１は、時刻ｔ３よりも遅延時間Ｔｄだけ遅れて無効データ「Ｙ２」に切替わる。
【００５９】
このように、演算実行に先立って、まず切替制御信号１０１がアサートされる。切替制御信号１０１がアサートされている期間は、演算装置３を構成するフリップフロップや論理ゲートなどの出力信号値（すなわち、回路状態）が、切替データ信号１０２で決まる値となる。次に切替制御信号１０１をネゲートすることで、実際の演算が実行される。演算種類選択信号１００およびデータソース選択信号１０４、１０５は、切替制御信号１０１がネゲートされるタイミングまたはそれ以前の切替制御信号（１０１）がアサートされている状態で、演算装置３に供給される。演算完了後、再び切替制御信号１０１がアサートされて、演算装置３を構成するフリップフロップや論理ゲートなどの出力信号値（すなわち、回路状態）は実行した演算とは無関係の値となる。切替制御信号１０１がネゲートされるタイミングでは、演算結果がレジスタ群２のうち書込レジスタ選択信号１０６で指定されたレジスタに書込まれる。
【００６０】
演算実行前および演算実行後の演算装置３の内部信号の値、すなわち回路状態は、特にＡＬＵ１の入出力データ信号１０９，１１０，１１１は、「０」などのある決まった値ではなく、切替データ信号１０２で決まる値になる。このため、ＡＬＵ１の入出力データのハミング重みは、ＡＬＵ１の入出力データのハミング距離とは無関係となる。したがって、ＡＬＵ１の入出力データのハミング重みを選択関数とした電力解析攻撃に対する耐性が向上する。
【００６１】
演算のソースレジスタと同一のレジスタが演算結果を格納するレジスタとして指定された場合も、レジスタに格納されるデータが更新されるタイミングで、ＡＬＵ１に入力されるデータは更新後のレジスタの内容ではなく、切替データ信号１０２で決まる値となる。この結果、レジスタの値の更新前後のハミング距離を選択関数とした電力解析攻撃に対する耐性が向上する。
【００６２】
以下、演算データのデータ幅を４ビットとした場合について、図６（Ａ），（Ｂ）を参照して具体的に説明する。図６（Ａ）に示す変換前の回路では、データソースとしていずれのレジスタも選択されないとき（たとえば、演算を必要としない命令実行時など）は、レジスタ群２から出力されるデータ１（１０９）には４ビットが全て「０」のデータ（「００００」と記す）が現れる。演算実行のためにレジスタｊ（２＿ｊ）（ｊは０以上Ｎ以下の整数）が選択されるとデータ１（１０９）はレジスタｊ（２＿ｊ）の内容に変化する。このとき、レジスタｊ（２＿ｊ）の記憶内容が「０１０１」であれば、データ１（１０９）の２ビットの変化に対応する電力が演算装置内で消費され、レジスタｊ（２＿ｊ）の内容が「１１１１」であればデータ１（１０９）の４ビットの変化に対応する電力が消費される。上記演算完了時にデータ１（１０９）が「００００」に戻る場合も同様である。この結果は同じデータで同じ演算を何度実行しても変わらない。このため、レジスタｊ（２＿ｊ）の値のハミング重みを選択関数とした電力解析により、秘密情報が漏洩する可能性がある。
【００６３】
一方、図６（Ｂ）に示す変換後の回路では、演算実行前の状態および演算実行後の状態では切替制御信号１０１がアサートされているので、データ１（１０９）の値が切替データ信号１０２の値に設定される。具体的に、切替データ信号１０２が演算前は「１０１０」に設定され、演算後は「０１０１」に設定されていたとする。この場合、レジスタｊ（２＿ｊ）の記憶内容が「０１０１」であれば、演算開始時にはデータ１（１０９）の変化は４ビット、演算完了時にはデータ１（１０９）の変化は０ビットとなる。したがって、レジスタｊ（２＿ｊ）の値のハミング重みとデータ１（１０９）との間に相関が無くなる。同じデータで同じ演算を何度実行しても、その時点での切替データ信号１０２の内容によって消費電力が変わる。この結果、レジスタｊ（２＿ｊ）の値のハミング重みを選択関数とした電力解析攻撃に対する耐性が向上する。
【００６４】
図７で説明した演算ブロック１＿０〜１＿Ｍへの入力信号を生成している回路素子の場合も、変換前の図７（Ａ）に示す回路では、演算ブロック１＿０〜１＿Ｍが使用されない期間には、ある決まった値（たとえば、全て「０」のデータ）がこれらの演算ブロックに入力される。これに対して、変更後の図７（Ｂ）に示す回路では、演算ブロック１＿０〜１＿Ｍが使用されない期間には、切替データ信号１０２で設定された値がこれらの演算ブロック１＿０〜１＿Ｍに入力される。この結果、選択されたレジスタｊ（２＿ｊ）（ｊは０以上Ｎ以下の整数）の値のハミング重みを選択関数とした電力解析攻撃に対する耐性が向上する。
【００６５】
演算結果１１１を出力する回路素子に図８（Ｂ）に示すような変換を施した場合も上記と同様であり、演算結果１１１のハミング重みを選択関数とした電力解析に対する耐性が向上する。さらに、レジスタ群２内の各レジスタに図４に示すような変換を施すことで、レジスタ内容を更新した前後でのレジスタの値のハミング距離を選択関数とした電力解析攻撃に対する耐性が向上する。
【００６６】
このように実施の形態１の演算装置３によれば、演算装置３に含まれる論理ゲートおよびフリップフロップなどの回路素子のうち少なくとも一部の回路素子について、切替制御信号１０１が活性化されたことに応答して、演算に用いられるソースデータや演算結果と無関係な切替データ信号１０２を出力するように設計が変更される。これによって、演算装置３の回路素子の単位で電力解析攻撃への木目細かい対策が可能となる。
【００６７】
＜実施の形態２＞
図１０は、この発明の実施の形態２に従うＣＰＵ１０の構成を示すブロック図である。図１０には主記憶装置２０（命令メモリ２１、データメモリ２２）や信号の流れも併せて示される。図１で説明した演算装置３に入力される各信号のうちクロック信号１１２、リセット信号１１３の図示は省略されている。クロック信号１１２、リセット信号１１３は、通常、ＣＰＵ１０の外部から与えられる。なお、実施の形態２および後続する各実施の形態で説明するＣＰＵの構成は一例として示すものであって、実施の形態１で示した演算装置３は公知のいずれの構成のＣＰＵに対しも適用できる。
【００６８】
図１０において、ＣＰＵ１０は、実施の形態１で説明した演算装置３と、命令レジスタ４と、命令デコーダ５と、プログラムカウンタ６と、切替データ信号生成部７とを含む。命令レジスタ４は、プログラムカウンタ６の値に従って命令メモリ２１から命令を読み出す。命令デコーダ５は、命令レジスタ４によって読み出された命令をデコードし、命令の種類に応じた制御信号を演算装置３またはデータメモリ２２に出力する。命令デコーダ５は、たとえば、算術論理演算命令を読み出した場合には、命令内容に応じた演算種類選択信号１００をＡＬＵ１に出力し、命令内容に応じたデータソース選択信号１（１０４）、データソース選択信号２（１０５）、および書込レジスタ選択信号１０６をレジスタ群２に出力し、書込イネーブル信号１０７をアサートする。この結果、ＡＬＵ１で演算が実行され、演算結果が指定されたレジスタに書込まれる。メモリ操作命令を読み出した場合には、命令デコーダ５は、命令内容に応じて書込レジスタ選択信号１０６をレジスタ群２に出力し、メモリ制御信号をデータメモリ２２に出力し、書込イネーブル信号１０７をアサートする。この結果、メモリ操作命令によって指令されたメモリアドレスに格納されたデータが書込データ１０８としてレジスタ群２の指定されたレジスタに書込まれる。
【００６９】
実施の形態２の場合、命令の種類には、切替制御信号１０１をアサートするための専用命令である切替命令がさらに含まれる。命令デコーダ５は、通常、ネゲートされた切替制御信号１０１をＡＬＵ１およびレジスタ群２に出力する。命令デコーダ５は、切替命令が実行されるサイクルで切替制御信号１０１をアサートし、切替命令の実行が完了すると切替制御信号１０１をネゲートする。切替命令は、切替制御信号１０１を変化させる以外の副作用を持たない。ＣＰＵ１０を動作させるソフトウェアでは、電力解析攻撃によって秘密情報が漏洩する可能性がある演算命令の前後に、当該切替命令が挿入される。切替命令と秘密情報が漏洩する可能性がある演算命令とは連続して実行される必要があるため、これらは割り込み禁止の状態で実行されなければならない。これは、ＣＰＵが一般に備えている割り込みマスクの機能を用いて実現できる。ただし、通常、暗号処理のプログラムは割り込み禁止で実行されるので、切替命令を実行するために追加の割り込みマスクは不要である。なお、上記の切替命令を新たな命令として追加せず、副作用を持たない他の命令（たとえば、何も実行しないＮＯＰ命令（No  OPeration  Instruction））に上記の切替命令の機能を持たせてもよい。
【００７０】
図１０において、切替データ信号生成部７は切替データ信号１０２を生成する。切替データ信号生成部７として、たとえば、乱数発生源や擬似乱数生成器を用いることができる。その他、演算実行時のシステムクロックやタイマの値を利用して切替データ信号１０２を生成してもよい。
【００７１】
このように、実施の形態２に従うＣＰＵ１０では、切替制御信号１０１をアサートするための命令を追加することによって、ソフトウェアを用いて切替制御信号１０１をアサートまたはネゲートするタイミングを柔軟に制御することができる。
【００７２】
＜実施の形態３＞
図１１は、この発明の実施の形態３に従うＣＰＵ１０Ａの構成を示すブロック図である。図１１のＣＰＵ１０Ａは、図１０の切替データ信号生成部７に代えて、ソフトウェアによって任意の値を書込むことができる専用のレジスタ１４を含み、レジスタ１４の記憶内容を切替データ信号１０２として使用する点で、図１０のＣＰＵ１０と異なる。図１１のＣＰＵ１０Ａにおいて、専用のレジスタ１４は、レジスタ群２Ａの内部に設けられているが、レジスタ群２Ａの外部に設けてもよい。レジスタ１４のビット長は、切替データ信号（１０２）の生成に必要なだけ設けられる。複数の専用レジスタによって切替データ信号１０２を生成してもよい。
【００７３】
ＣＰＵ１０Ａは、専用のレジスタ１４に任意の値を書き込むための専用命令を備えてもよいし、専用レジスタ１４にアドレスを割り付けて、通常のストア命令によって任意の値を専用レジスタ１４に書込むようにしてもよい。専用レジスタ１４の記憶内容は、ソフトウェアによって、任意のタイミングで（たとえば、所定の時間が経過する都度、または所定回数の演算を実行する都度）任意のデータに更新することができる。この場合、専用レジスタ１４に書込むデータは、「０」と「１」のビットをほぼ等しい割合で含み、かつ偏りの小さいようにするのが好ましい。
【００７４】
図１１のその他の点は図１０と共通するので、同一または相当する部分には同一の参照符号を付して説明を繰返さない。
【００７５】
＜実施の形態４＞
図１２は、この発明の実施の形態４に従うＣＰＵ１０Ｂの構成を示すブロック図である。図１２のＣＰＵ１０Ｂは、図１１の専用のレジスタ１４に代えて、切替データ信号１０２として用いるにに必要なビット長を有するシフトレジスタ１５を含み、シフトレジスタ１５の記憶内容を切替データ信号１０２として使用する点で、図１１のＣＰＵ１０Ａと異なる。図１２に示す１個のシフトレジスタ１５に代えて、複数のシフトレジスタで切替データ信号１０２を生成するようにしてもよい。ＣＰＵ１０Ｂでは、シフトレジスタ１５がシフトすることによって切替データ信号１０２の値が変化する。
シフトレジスタ１５に記憶されるデータは、シフト動作に伴って各ビットに０と１がほぼ等しい割合で現れ、かつ隣り合ったビット同士の偏りが小さい任意のビットパターンである。一例として、３２ビットのシフトレジスタで１ビットずつ巡回シフトする場合には、たとえば、「０１０１００１１１０１０１１００１０１０１１０００１０１００１１」を初期値とすればよい。
【００７６】
シフトレジスタ１５のシフト方法は、たとえば以下のような例が考えられ、特に限定されるものではない。
【００７７】
（１）  所定のクロックサイクルごとに任意のビット数分ずつ（たとえば１ビットずつ）巡回シフトする。
【００７８】
（２）  切替制御信号１０１が所定の回数アサートされるごとに任意のビット数分ずつ（たとえば１ビットずつ）巡回シフトする。
【００７９】
（３）  「クロックサイクルごとに１ビット右巡回シフト、３ビット左巡回シフト」を繰り返す。
【００８０】
（４）  「２ビット左巡回シフトを５０回行ない、１ビット右巡回シフトを１００回行なう」というシフト動作を繰り返す。
【００８１】
（５）  「１００クロックサイクルの間、連続して巡回シフトした後、５０クロックサイクルの間は巡回シフトしない」というシフト動作を繰り返す。
【００８２】
さらに、巡回シフト以外のシフト方法として、以下の方法も考えられる。
（６）  シフトアウトしたビットの反転値を新たなビットとして追加する。
【００８３】
（７）  シフトアウトしたビットの代わりに、シフトレジスタのＸ番目のビットを新たなビットとして追加する。
【００８４】
さらに、実施の形態３で説明した専用レジスタ１４と同様に、ソフトウェアによって任意の値をシフトレジスタ１５に書き込むことができるようにしてもよいし、ソフトウェアによってシフト方法を変更できるようにしてもよい。
【００８５】
＜実施の形態５＞
図１３は、この発明の実施の形態５に従うＣＰＵ１０Ｃの構成を示すブロック図である。図１３のＣＰＵ１０Ｃは、命令デコーダ５Ａが切替制御信号１０１を生成せず、切替制御信号１０１を生成するための新たな構成として、モード設定用レジスタ１６と、クロックバッファ１７と、ＡＮＤゲート１８（切替制御信号生成部）とをさらに含む点で、図１２のＣＰＵ１０Ｂと異なる。
【００８６】
ＣＰＵ１０Ｃは、セキュアモードと非セキュアモードの２つの動作モードを有する。いずれの動作モードであるかはモード設定用レジスタ１６の値によって決まる。図１３の場合には、モード設定用レジスタ１６の値が「１」のときセキュアモードとし、「０」のとき非セキュアモードであるとする。セキュアモードでは、切替制御信号１０１および切替データ信号１０２による演算装置３Ｃの制御が有効になる。非セキュアモードでは、切替制御信号１０１および切替データ信号１０２による制御が無効になる。モード設定用レジスタ１６の値はソフトウェアによって設定可能である。典型的には、モード設定用レジスタ１６として既存の制御レジスタの特定のビットが割当てられるが、ＣＰＵ１０Ｃがモード設定用の専用レジスタや当該レジスタにアクセスための専用命令を備えていてもよい。図１３では、モード設定用レジスタ１６がレジスタ群２Ｃの内部に設けられているが、レジスタ群２Ｃの外部にモード設定用レジスタ１６を設けてもよい。
【００８７】
クロックバッファ１７は、ＣＰＵ１０Ｃの外部から与えられたクロック信号１１２に基づいてクロック信号１１２に同期する新たな信号１１４を生成する。設計ルールとしてクロック信号１１２を組合せ回路の入力信号として使用することが許されていない場合などにクロックバッファ１７が用いられる。
【００８８】
図１４は、クロックバッファ１７の構成および動作を説明するための図である。図１４（Ａ）を参照して、クロックバッファ１７は、Ｄ−フリップフロップ６１，６２と、インバータ６３，６４と、排他的論理和ゲート６５とを含む。Ｄ−フリップフロップ６１，６２のクロック端子ＣＫにはクロック信号１１２が入力される。Ｄ−フリップフロップ６１の出力端子Ｑはインバータ６３を介してＤ−フリップフロップ６１のデータ端子Ｄに接続される。Ｄ−フリップフロップ６２の出力端子Ｑはインバータ６４を介してＤ−フリップフロップ６２のデータ端子Ｄに接続される。Ｄ−フリップフロップ６１，６２の出力端子Ｑはさらに排他的論理和ゲート６５の入力ノードに接続される。Ｄ−フリップフロップ６１は、クロック信号１１２の立上がりエッジに応答してＤ端子の入力値がＱ端子の出力として保持され、Ｄ−フリップフロップ６２は、クロック信号１１２の立下がりエッジに応答してＤ端子の入力値がＱ端子の出力として保持される。
【００８９】
図１４（Ｂ）には、クロック信号１１２、Ｄ−フリップフロップ６１，６２の出力信号Ｓ１，Ｓ２、および排他的論理和ゲート６５の出力信号ＳＯＵＴの電圧波形が示される。Ｄ−フリップフロップ６１の出力信号Ｓ１はクロック信号１１２の立上がりエッジ（時刻ｔ１，ｔ３など）に応答してハイ（Ｈ）レベルまたはロー（Ｌ）レベルに切替わり、Ｄ−フリップフロップ６２に出力信号Ｓ２はクロック信号１１２の立下がりエッジ（時刻ｔ２，ｔ４など）に応答してＨレベルまたはＬレベルに切替わる。この結果、排他的論理和ゲート６５の出力信号ＳＯＵＴはクロック信号１１２に応答して信号レベルが変化する。
【００９０】
再び図１３を参照して、ＡＮＤゲート１８は、クロックバッファ１７の出力信号１１４とモード設定用レジスタ１６の設定値に対応するモード設定信号１１５とを受け、これらの論理積を切替制御信号１０１として、ＡＬＵ１およびレジスタ群２Ｃに出力する。したがって、モード設定用レジスタ１６の値が「１」であるセキュアモードでは、１クロックサイクルのうちクロック信号が「１」（Ｈレベル）の期間で切替制御信号１０１がアサートされ、クロック信号が「０」（Ｌレベル）の期間で切替制御信号１０１がネゲートされる。したがって、セキュアモードでは、クロック信号「０」の期間が演算装置３Ｃによる演算処理に使用できる時間となる。一方、モード設定用レジスタ１６の値が「０」である非セキュアモードでは、クロックバッファ１７の出力信号１１４の論理レベルによらず、切替制御信号１０１がネゲートされる。したがって、非セキュアモードでは、１クロックサイクルの全てが演算装置３Ｃによる演算処理に使用できる時間になる。
【００９１】
図１３のその他の点は、図１２で説明したＣＰＵ１０Ｂと同じであるので、同一または相当する部分には同一の参照符号を付して説明を繰返さない。
【００９２】
図１５は、図１３のＣＰＵ１０Ｃの動作の一例を示すタイミング図である。図１５は、上から順に、クロック信号１１２、演算種類選択信号１００、データソース選択信号１（１０４）、データソース選択信号２（１０５）、書込レジスタ選択信号１０６、書込イネーブル信号１０７、切替データ信号１０２、切替制御信号１０１、データ信号１（１０９）、データ信号２（１１０）、演算結果を表わす信号１１１、レジスタ４（２＿４）に格納されているデータを示す。以下、図１３、図１５を参照して、レジスタ４（２＿４）に格納されたデータ「ａ」とレジスタ５（２＿５）に格納されたデータ「ｂ」の加算結果「ｃ」（＝ａ＋ｂ）がレジスタ４（２＿４）に書込まれる場合の動作について説明する。
【００９３】
図１５に示すようにＣＰＵ１０Ｃは、切替制御信号１０１を除いて、クロック信号１１２の立上がりエッジ（時刻ｔ１１，ｔ１３，ｔ１５，ｔ１７）に応答して動作する。切替制御信号１０１は、クロック信号１１２の立上がりエッジに応答してアサートされ、クロック信号１１２の立下がりエッジ（時刻ｔ１２，ｔ１４，ｔ１６，ｔ１８）に応答してネゲートされる。これによって、レジスタ群２ＣからＡＬＵ１出力されるデータ信号１，２（１０９，１１０）およびＡＬＵ１から出力される演算結果を表わす信号１１１もクロック信号１１２の立上がりエッジおよび立下がりエッジの両方に応答して変化する。ただし、ＡＬＵ１から出力される演算結果を表わす信号１１１の信号レベルは、ＡＬＵ１における演算時間に相当する時間（遅延時間Ｔｄ）だけクロックエッジよりも遅延して変化する。
【００９４】
切替データ信号１０２は、たとえば、シフトレジスタ１５が巡回シフトすることによって、クロック信号１１２の立上がりエッジに応答してその値が変化する。図１５の場合には、切替データ信号１０２は、時刻ｔ１１に「Ｘ０，Ｘ１，Ｘ２，…」に切替わり、時刻ｔ１３に「Ｙ０，Ｙ１，Ｙ２，…」に切替わり、時刻ｔ１５に「Ｚ０，Ｚ１，Ｚ２，…」に切替わる。
【００９５】
時刻ｔ１３において、演算種類選択信号１００として加算演算（ＡＤＤ）を表わす信号がＡＬＵ１に入力される。レジスタ群２Ｃには、データソース選択信号１（１０４）としてレジスタ４を表わす信号が入力され、データソース選択信号２（１０５）としてレジスタ５を表わす信号が入力され、書込レジスタ選択信号１０６としてレジスタ４を表わす信号が入力される。さらに、レジスタ群２Ｃに入力される書込イネーブル信号１０７がアサートされる。
【００９６】
時刻ｔ１３と次の時刻ｔ１４との間の時間帯では、切替制御信号１０１がアサートされているので、ＡＬＵ１に入力されるデータ信号１，２（１０９，１１０）はそれぞれ切替データ信号「Ｙ０」、「Ｙ１」であり、レジスタ４，５（２＿４，２＿５）の記憶内容「ａ」、「ｂ」はＡＬＵ１に入力されない。
【００９７】
時刻ｔ１４に切替制御信号１０１がネゲートされると、データ信号１，２（１０９，１１０）として「ａ」、「ｂ」がＡＬＵ１に入力される。この結果、時刻ｔ１４よりも遅延時間Ｔｄだけ遅れて、ＡＬＵ１から出力される信号１１１が、切替データ信号「Ｙ２」から加算結果「ｃ」（ｃ＝ａ＋ｂ）に切替わる。加算結果「ｃ」は、次のクロック信号１１２の立上がりエッジに応答して時刻ｔ１５でレジスタ４に書込まれる。
【００９８】
次の時刻ｔ１５において、書込イネーブル信号１０７がネゲートされ、切替制御信号１０１がアサートされる。この結果、レジスタ群２Ｃからデータ信号１（１０９）として無効データ「Ｚ０」がＡＬＵ１出力され、データ信号２（１１０）として無効データ「Ｚ１」がＡＬＵ１に出力される。ＡＬＵ１から出力される信号１１１は、時刻ｔ３よりも遅延時間Ｔｄだけ遅れて無効データ「Ｚ２」に切替わる。
【００９９】
このように、１クロックサイクルの前半の半周期で切替制御信号１０１をアサートすることによって、ＡＬＵ１に入出力される信号１０９，１１０，１１１の値、さらには演算装置３Ｃ内の回路状態が切替データ信号１０２で決まる値となる。１クロックサイクルの後半の半周期で切替制御信号１０１をネゲートすることによって、実際の演算が実行される。演算完了後、切替制御信号１０１を再度アサートすることによって、ＡＬＵ１に入出力される信号１０９，１１０，１１１の値が切替データ信号１０２で決まる値となり、実行した演算とは無関係の値となる。この結果、ＡＬＵ１の入出力データのハミング重みは、ＡＬＵ１の入出力データのハミング距離とは無関係となる。このため、ＡＬＵ１の入出力データのハミング重みを選択関数とした電力解析攻撃に対する耐性が向上するとともに、更新前後のレジスタの値のハミング距離を選択関数とした電力解析攻撃に対する耐性も向上する。さらに、１クロックサイクルの間に、切替データ信号の出力と演算処理とが行なわれるので、切替データ信号を出力するための余計なクロックサイクルを設ける必要がない。
【０１００】
ただし、実施の形態５の場合には、クロック周波数に対する制限が図９の場合よりも厳しくなる。すなわち、セキュアモードでは、クロック信号１１２が「０」（Ｌレベル）になって初めて実際の演算処理が始まるが、次のクロック信号１１２の立上がりまでに演算処理を完了する必要がある。このため、クロック信号１１２が「０」である期間Ｔ２は、演算処理時間に対応する遅延時間Ｔｄよりも長くする必要がある（すなわち、Ｔｄ＜Ｔ２）。一方、非セキュアモードでは、Ｔｄ＜Ｔ２を満たす必要はなく、Ｔｄ＜Ｔ１＋Ｔ２＝Ｔｃでよい（ただし、クロック信号１１２が「１」である期間をＴ１とし、クロック周期をＴｃとする）。この結果、非セキュアモードの場合は、セキュアモードの場合よりもＴ２を小さくすることができる。したがって、秘密情報が漏洩する可能性がないプログラムを実行する際は、非セキュアモードに設定することで、ＣＰＵのクロック周波数を向上させることができる。なお、ソフトウェア制御によってクロック周波数を制御する機能は、既存の多くのＣＰＵが備えている機能である。
【０１０１】
図１６は、図１４（Ａ）に示すクロックバッファ１７の変形例を示すブロック図である。図１６に示すクロックバッファ１７Ａは、Ｄ−フリップフロップ６１と、インバータ６３とを含む。Ｄ−フリップフロップ６１のクロック端子ＣＫには、図１３の演算装置３Ｃが使用するクロック信号の２倍の周波数を有するクロック信号１２０が供給される。Ｄ−フリップフロップ６１の出力端子Ｑはインバータ６３を介してＤ−フリップフロップ６１のデータ端子Ｄに接続される。Ｄ−フリップフロップ６１のデータ端子Ｄから出力される信号が切替制御信号１０１である。
【０１０２】
図１７は、図１３に示すＣＰＵ１０Ｃの変形例としてのＣＰＵ１０Ｄの構成を示すブロック図である。図１７のＣＰＵ１０Ｄは、モード設定用レジスタ１６に代えて、命令デコーダ５Ｂが動作モードを指定するモード設定信号１１６をＡＮＤゲート１８に出力する点で、図１３のＣＵ１０Ｃと異なる。図１７の演算装置３Ｂにはモード設定用レジスタ１６が設けられておらず、演算装置３Ｂの構成は図１２の場合と同じである。
【０１０３】
図１７において、命令デコーダ５Ｂは、命令レジスタ４から読み込んだ命令が演算装置３Ｂを使用して演算を行なう演算命令である場合には、この演算命令を実行している間、セキュアモードを指定するモード設定信号１１６（「１」：Ｈレベル）をＡＮＤゲート１８に出力する。命令デコーダ５Ｂは、演算命令の実行が完了した後に、非セキュアモードを指定するモード設定信号１１６（「０」：Ｌレベル）をＡＮＤゲート１８に出力する。
【０１０４】
図１７に示すＣＰＵ１０Ｄのその他の点は、図１３に示すＣＰＵ１０Ｃと同じであるので、同一または相当する部分には同一の参照符号を付して説明を繰返さない。
【０１０５】
今回開示された各実施の形態はすべての点で例示であって制限的なものでないと考えられるべきである。たとえば、上記の実施の形態２〜５において、切替制御信号１０１および切替データ信号１０２の種々の生成方法を示したが、これらの信号の生成方法は、実施の形態２〜５に示した生成方法に限定されるものでない。この発明の範囲は上記した説明ではなくて請求の範囲によって示され、請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【０１０６】
１  算術論理演算ユニット（ＡＬＵ）、２，２Ａ，２Ｂ，２Ｃ  レジスタ群、３，３Ａ，３Ｂ，３Ｃ  演算装置、５，５Ａ，５Ｂ  命令デコーダ、７  切替データ信号生成部、１４  専用レジスタ、１５  シフトレジスタ、１６  モード設定用レジスタ、３１，３５，３８，４２，４５，４６，５２  セレクタ、１０１  切替制御信号、１０２  切替データ信号、１０９，１１０  入力データ、１１１  演算結果、１１２  クロック信号、１１５，１１６  モード設定信号。
【図１】
2011234312.tif 000003
【図２】
2011234312.tif 000004
【図３】
2011234312.tif 000005
【図４】
2011234312.tif 000006
【図５】
2011234312.tif 000007
【図６】
2011234312.tif 000008
【図７】
2011234312.tif 000009
【図８】
2011234312.tif 000010
【図９】
2011234312.tif 000011
【図１０】
2011234312.tif 000012
【図１１】
2011234312.tif 000013
【図１２】
2011234312.tif 000014
【図１３】
2011234312.tif 000015
【図１４】
2011234312.tif 000016
【図１５】
2011234312.tif 000017
【図１６】
2011234312.tif 000018
【図１７】
2011234312.tif 000019