(57)【要約】  ＣＰＵ（１０９）等からの暗号演算命令（１１１）の実行が終了したことを受けて、ＣＰＵ（１０９）等に成り代わって暗号制御回路（１０１）に対して偽装演算命令（１１３）を発行する偽装演算命令回路（１００）を備える。暗号演算命令（１１１）の実行が終了した後に、通常であれば停止しているメモリや演算器やレジスタ等の演算資源（１０３〜１０８）を動作させることで電流を消費するため、暗号演算処理の終了や開始等のタイミングを消費電流の大小等で特定することが困難となる。偽装演算命令（１１３）は、あくまでＣＰＵ（１０９）等からの暗号演算命令（１１１）が発行されていない期間のみ発行されるので、暗号演算処理の性能を落とさない。
2008056461.tif 000002
【特許請求の範囲】
【請求項１】
暗号演算用データを記憶するメモリと、
前記暗号演算用データを演算するための演算器と、
前記演算器に対する入出力データを一時的に格納しておくためのレジスタと、
暗号演算命令を受けて、前記暗号演算用データを暗号処理するために前記メモリと前記演算器と前記レジスタとに対する制御を行う暗号制御回路と、
前記暗号演算命令の実行が終了したこと示す演算完了信号を受けて、前記メモリと前記演算器と前記レジスタとを動作させるための偽装演算命令を前記暗号制御回路に対して発行する偽装演算命令回路とを備えたことを特徴とする暗号演算処理回路。
【請求項２】
請求項１記載の暗号演算処理回路において、
前記偽装演算命令回路は、前記暗号演算命令と同じ命令を前記偽装演算命令として発行することを特徴とする暗号演算処理回路。
【請求項３】
請求項１記載の暗号演算処理回路において、
前記偽装演算命令回路は、
前記暗号演算命令を記憶する暗号演算命令記憶回路と、
前記偽装演算命令を過去の暗号演算命令履歴から生成する偽装演算命令生成回路とを備えたことを特徴とする暗号演算処理回路。
【請求項４】
請求項３記載の暗号演算処理回路において、
前記偽装演算命令生成回路は、前記暗号演算命令記憶回路に記憶された暗号演算命令履歴のうち、出現頻度が高い暗号演算命令を選択して前記偽装演算命令を生成することを特徴とする暗号演算処理回路。
【請求項５】
請求項３記載の暗号演算処理回路において、
前記偽装演算命令生成回路は、前記暗号演算命令記憶回路に記憶された暗号演算命令履歴のうち、ランダムに暗号演算命令を選択して前記偽装演算命令を生成することを特徴とする暗号演算処理回路。
【請求項６】
請求項３記載の暗号演算処理回路において、
前記暗号演算命令記憶回路は、不揮発性メモリにより構成され、過去の暗号演算命令履歴を電源断以後も保持して前記偽装演算命令を生成することを特徴とする暗号演算処理回路。
【請求項７】
請求項３記載の暗号演算処理回路において、
前記暗号制御回路は、
前記暗号演算命令又は前記偽装演算命令を実行するための通常制御信号を発生させる通常制御回路と、
前記暗号演算命令又は前記偽装演算命令を実行中であっても前記通常制御回路が前記メモリや前記演算器や前記レジスタを占有する必要のない期間を示す動作状況通知回路と、
前記メモリと前記演算器と前記レジスタとの動作が停止している期間において前記メモリと前記演算器と前記レジスタとを強制的に動作させるための偽装制御信号を発生させる偽装制御回路と、
前記動作状態通知回路からの通知に応じて前記通常制御信号と前記偽装制御信号とを切り替えるセレクタとを備えたことを特徴とする暗号演算処理回路。
【請求項８】
請求項７記載の暗号演算処理回路において、
前記偽装制御回路は、
前記通常制御回路が出力した前記メモリのアドレスと、前記演算器を制御する演算器制御信号とを記憶する通常制御信号記憶回路と、
前記偽装制御信号を過去の通常制御信号履歴から生成する偽装制御信号生成回路とを備えたことを特徴とする暗号演算処理回路。
【請求項９】
請求項８記載の暗号演算処理回路において、
前記偽装制御信号生成回路は、前記通常制御信号記憶回路に記憶された通常制御信号履歴のうち、出現頻度が高い通常制御信号を選択して前記偽装制御信号を生成することを特徴とする暗号演算処理回路。
【請求項１０】
請求項８記載の暗号演算処理回路において、
前記偽装制御信号生成回路は、前記通常制御信号記憶回路に記憶された通常制御信号履歴のうち、ランダムに通常制御信号を選択して前記偽装制御信号を生成することを特徴とする暗号演算処理回路。
【請求項１１】
請求項８記載の暗号演算処理回路において、
前記通常制御信号記憶回路は、不揮発性メモリにより構成され、過去の通常制御信号履歴を電源断以降も保持して前記偽装制御信号を生成することを特徴とする暗号演算処理回路。
【請求項１２】
請求項８記載の暗号演算処理回路において、
前記メモリから読み出されたデータ中に含まれるビット値０の個数をカウントするビット値０カウント回路を更に備え、
前記暗号演算命令記憶回路は、前記ビット値０カウント回路からのビット値０カウント数を記憶する機能を更に備えたことを特徴とする暗号演算処理回路。
【請求項１３】
請求項１２記載の暗号演算処理回路において、
前記偽装演算命令生成回路は、前記暗号演算命令記憶回路に記憶されたビット値０カウント数の分布を判断し、平均に位置するビット値０カウント数を使用していた暗号演算命令を選択して前記偽装演算命令を生成することを特徴とする暗号演算処理回路。
【請求項１４】
請求項１２記載の暗号演算処理回路において、
前記偽装演算命令生成回路は、前記暗号演算命令記憶回路に記憶されたビット値０カウント数の分布を判断し、最大又は最小に位置するビット値０カウント数を使用していた暗号演算命令を選択して前記偽装演算命令を生成することを特徴とする暗号演算処理回路。
【請求項１５】
請求項１２記載の暗号演算処理回路において、
前記通常制御信号記憶回路は、前記ビット値０カウント回路からのビット値０カウント数を記憶する機能を更に備えたことを特徴とする暗号演算処理回路。
【請求項１６】
請求項１５記載の暗号演算処理回路において、
前記偽装制御信号生成回路は、前記通常制御信号記憶回路に記憶されたビット値０カウント数の分布を判断し、平均に位置するビット値０カウント数を使用していた通常制御信号を選択して前記偽装制御信号を生成することを特徴とする暗号演算処理回路。
【請求項１７】
請求項１５記載の暗号演算処理回路において、
前記偽装制御信号生成回路は、前記通常制御信号記憶回路に記憶されたビット値０カウント数の分布を判断し、最大又は最小に位置するビット値０カウント数を使用していた通常制御信号を選択して前記偽装制御信号を生成することを特徴とする暗号演算処理回路。
【請求項１８】
請求項７記載の暗号演算処理回路において、
前記演算器を構成する回路の電位をプリセットするプリセット回路を更に備え、
前記暗号制御回路は、前記演算器の動作開始クロックエッジに同期したパルス信号を発生して前記プリセット回路を動作させるためのパルス信号発生回路を更に備えたことを特徴とする暗号演算処理回路。
【請求項１９】
請求項１８記載の暗号演算処理回路において、
前記プリセット回路は、前記パルス信号発生回路のパルス信号の期間だけ、前記レジスタの出力データを反転させることを特徴とする暗号演算処理回路。
【請求項２０】
請求項１８記載の暗号演算処理回路において、
前記演算器への入力データに対して遅延値を各ビット毎に異ならせる遅延回路を更に備えたことを特徴とする暗号演算処理回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号演算処理回路に関し、更に詳細には暗号鍵等の秘匿データの解析を防止する手段を備えた暗号演算処理回路に関するものである。
【背景技術】
【０００２】
昨今、ＩＣカードやＩＣカード機能搭載携帯電話等による電子商取引や自動改札等の発展に伴い、ＩＣカード等のセキュリティ確保が重要な問題となっている。【０００３】
しかし、ＩＣカードが暗号演算処理を行っている間の消費電力（消費電流）を観測し解析することでＩＣカード内部の暗号鍵や暗号演算処理内容を解析しようという方法が見出されてきている。代表的な解析手段として、消費電流の変化を直接解析に用いる方法である単純電力解析（Simple Power Analysis：ＳＰＡ）や、観測データに対して統計的処理を行うことで秘密の暗号鍵を推定する方法である電力差分解析（Differential Power Analysis：ＤＰＡ）等がある。【０００４】
従来の単純電力解析対策としては、暗号演算処理手順のタイミングを変化させるための擬似的処理を通常処理の間に挿入したり、動作クロック周期を変化させて消費電流を時間軸上で変化させたりする手法が知られている。これらの手法では、毎回、暗号演算処理の手順やタイミングが変わり、時間軸でみた場合の消費電流波形が変化するため、電流波形を時間軸上で比較するというデータ依存性の解析を実質的に不可能にして機密保護を図ろうとしている（特許文献１参照）。【０００５】
従来の電力差分解析対策としては、ノイズ生成回路により通常処理の消費電流にノイズ電流を重畳する手法が知られている。この手法では、同じ演算が複数繰り返し行われても電流波形が異なることで、差分解析を困難とし機密保護を図ろうとしている（特許文献２参照）。
【特許文献１】特開２０００−２５９７９９号公報
【特許文献２】特開２００５−２５２７０５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
単純電力解析対策として、暗号演算処理手順のタイミングを変化させるための擬似的処理を追加しすぎると、暗号演算実行が終了するまでの時間が延びてしまい、暗号演算処理の性能が大きく低下するという問題があった。逆に、暗号演算処理手順のタイミングを変化させるための擬似的処理が少ない場合は、暗号演算処理の性能低下は小さいが、通常暗号処理による電流波形変化が外部に読み取られやすいといった問題があった。【０００７】
単純電力解析対策として、動作クロック周期を変化させて消費電流を時間軸上で変化させる手法に関しては、クロック周期等の情報は外部観測されやすく、観測された電流波形をデジタル信号処理で一定のクロック周期の電流波形として修復解析可能であるといった問題があった。【０００８】
電力差分解析対策として、ノイズ生成回路により通常処理の消費電流にノイズ電流を重畳する手法に関しては、昨今のＬＳＩ解析技術である液晶解析、発光解析等によりＬＳＩ内部で電流を消費している物理的な位置が特定可能である。液晶解析によれば、特定の箇所の電流変化を液晶の透過度変化として観測可能であり、電流解析可能であるといった問題があった。
【課題を解決するための手段】
【０００９】
上記課題を解決するために、本発明による暗号演算処理回路は、暗号演算用データを記憶するメモリと、この暗号演算用データを演算するための演算器と、この演算器に対する入出力データを一時的に格納しておくためのレジスタと、暗号演算命令を受けて暗号演算用データを暗号処理するためにメモリと演算器とレジスタとに対する制御を行う暗号制御回路と、暗号演算命令の実行が終了したこと示す演算完了信号を受けてメモリと演算器とレジスタとを動作させるための偽装演算命令を暗号制御回路に対して発行する偽装演算命令回路とを備えたことを特徴とするものである。
【発明の効果】
【００１０】
本発明の暗号演算処理回路は、偽装演算命令回路によって、ＣＰＵ等からの暗号演算命令の実行が終了した後に、通常であれば停止しているメモリや演算器やレジスタを動作させる偽装演算命令を発行することで、メモリや演算器やレジスタが暗号演算命令と同じように動作し電流を消費するため、暗号演算処理の終了や開始等のタイミングを消費電流の大小等で特定することが困難となり、セキュリティ性が向上する。更に、偽装演算命令は、あくまでＣＰＵ等からの暗号演算命令が発行されていない期間のみ発行されるので、ＣＰＵ等からの暗号演算命令の発行を遅延させたりするものではないため、暗号演算処理のパフォーマンスを落とすことがない。
【図面の簡単な説明】
【００１１】
【図１】図１は、本発明に係る暗号演算処理回路の構成例を示すブロック図である。
【図２】図２は、図１の暗号演算処理回路の動作を示すタイミング図である。
【図３】図３は、図１の暗号演算処理回路に偽装演算命令回路がない場合の動作を示すタイミング図である。
【図４】図４は、図１中の偽装演算命令回路の詳細構成例を示すブロック図である。
【図５】図５は、図４中の暗号演算命令記憶回路の記憶内容の例を示す図である。
【図６】図６は、図１中の暗号制御回路の詳細構成例を示すブロック図である。
【図７】図７は、図６の暗号制御回路を備えた暗号演算処理回路の動作を示すタイミング図である。
【図８】図８は、図６の暗号制御回路を備えた暗号演算処理回路の動作を示す他のタイミング図である。
【図９】図９は、図６の暗号制御回路を備えた暗号演算処理回路の動作を示す更に他のタイミング図である。
【図１０】図１０は、図６の暗号制御回路を備えた暗号演算処理回路の動作を示す更に他のタイミング図である。
【図１１】図１１は、図７〜図１０をまとめて示すタイミング図である。
【図１２】図１２は、図６中の偽装制御回路の詳細構成例を示すブロック図である。
【図１３】図１３は、図１２中の通常制御信号記憶回路の記憶内容の例を示す図である。
【図１４】図１４は、図１の暗号演算処理回路の変形例を示すブロック図である。
【図１５】図１５は、図１４中の暗号演算命令記憶回路の記憶内容の例を示す図である。
【図１６】図１６は、図１４中の通常制御信号記憶回路の記憶内容の例を示す図である。
【図１７】図１７は、図６の変形例に係る暗号制御回路及び演算部の構成を示すブロック図である。
【図１８】図１８は、図１７の暗号制御回路及び演算部を備えた暗号演算処理回路の動作を示すタイミング図である。
【図１９】図１９は、図１７の変形例に係る演算部の構成を示すブロック図である。
【図２０】図２０は、図１９の演算部を備えた暗号演算処理回路の動作を示すタイミング図である。
【符号の説明】
【００１２】
１００  偽装演算命令回路
１０１  暗号制御回路
１０２  演算部
１０３  メモリＡ
１０４  メモリＢ
１０５  演算器
１０６  レジスタＡ
１０７  レジスタＢ
１０８  レジスタＣ
１０９  ＣＰＵ
１１０  クロック
１１１  暗号演算命令
１１２  暗号演算完了信号
１１３  偽装演算命令
１１４  演算完了信号
１１５  メモリＡ制御信号
１１６  レジスタＡ制御信号
１１７  レジスタＢ制御信号
１１８  演算器制御信号
１１９  レジスタＣ制御信号
１２０  メモリＢ制御信号
１２１  メモリＡ出力データ
１２２  レジスタＡ出力データ
１２３  レジスタＢ出力データ
１２４  演算器出力データ
１２５  レジスタＣ出力データ
４００  暗号演算命令記憶回路
４０１  偽装演算命令生成回路
４０２  暗号演算命令履歴情報
６００  動作状況通知回路
６０１  通常制御回路
６０２  偽装制御回路
６０３  セレクタ
６０４  通常制御回路メモリＡ制御信号
６０５  通常制御回路レジスタＡ制御信号
６０６  通常制御回路レジスタＢ制御信号
６０７  通常制御回路演算器制御信号
６０８  通常制御回路レジスタＣ制御信号
６０９  通常制御回路メモリＢ制御信号
６１０  通偽装制御回路メモリＡ制御信号
６１１  偽装制御回路レジスタＡ制御信号
６１２  偽装制御回路レジスタＢ制御信号
６１３  偽装制御回路演算器制御信号
６１４  偽装制御回路レジスタＣ制御信号
６１５  偽装制御回路メモリＢ制御信号
６１６  動作状況通知信号
８００  通常制御信号記憶回路
８０１  偽装制御信号生成回路
８０２  通常制御信号履歴情報
１０００  ビット値０カウント回路
１００１  ビット値０カウント情報
１３００  プリセット回路Ａ
１３０１  プリセット回路Ｂ
１３０２  プリセット回路Ａ制御信号
１３０３  プリセット回路Ｂ制御信号
１３０４  プリセット回路Ａ出力データ
１３０５  プリセット回路Ｂ出力データ
１３０６  パルス信号発生回路
１５００  遅延回路Ａ
１５０１  遅延回路Ｂ
１５０２  遅延回路Ａ出力データ
１５０３  遅延回路Ｂ出力データ
【発明を実施するための最良の形態】
【００１３】
以下、本発明を実施するための最良の形態について図面を参照して説明する。なお、図中同一又は相当部分には同一の符号を付して、その説明は繰り返さない。【００１４】
図１は、本発明に係る暗号演算処理回路の構成例を示している。図１の暗号演算処理回路は、偽装演算命令回路１００と、暗号制御回路１０１と、演算部１０２と、メモリＡ１０３と、メモリＢ１０４とを備える。演算部１０２は、演算器１０５と、レジスタＡ１０６と、レジスタＢ１０７と、レジスタＣ１０８とを備える。【００１５】
偽装演算命令回路１００は、ＣＰＵ１０９から出力される暗号演算命令１１１により暗号演算が開始されることを認識し、その後に暗号演算命令１１１の実行が終了したことを示す信号である演算完了信号１１４を受けて、ＣＰＵ１０９に対して暗号演算完了信号１１２を出力するとともに、暗号制御回路１０１に対して、偽装演算命令１１３を発行する。その後、偽装演算命令１１３の実行が終了したことを示す信号でもある演算完了信号１１４を受けて偽装演算が完了したことを認識すると、偽装演算命令１１３を再度発行する。偽装演算命令１１３の発行は、新たにＣＰＵ１０９から暗号演算命令１１１が発行されるまで繰り返す。【００１６】
暗号制御回路１０１は、ＣＰＵ１０９からの暗号演算命令１１１や偽装演算命令回路１００からの偽装演算命令１１３を受け、メモリＡ１０３とメモリＢ１０４と演算器１０５とレジスタＡ１０６とレジスタＢ１０７とレジスタＣ１０８とを制御するため、メモリＡ制御信号１１５とメモリＢ制御信号１２０と演算器制御信号１１８とレジスタＡ制御信号１１６とレジスタＢ制御信号１１７とレジスタＣ制御信号１１９とを出力する。また暗号制御回路１０１は、暗号演算命令１１１や偽装演算命令１１３の実行が終了すると、演算完了信号１１４を出力する。偽装演算命令１１３の処理が実行中にＣＰＵ１０９から暗号演算命令１１１が発行された場合は、偽装演算命令１１３による制御を強制終了させ、暗号演算命令１１１の処理を開始する。【００１７】
メモリＡ１０３は、例えばクロック１１０の立ち下がりエッジに同期したメモリであり、暗号制御回路１０１からの、メモリＡ制御信号１１５により示されるアドレスからメモリＡ出力データ１２１を出力する。【００１８】
メモリＢ１０４は、例えばクロック１１０の立ち下がりエッジに同期したメモリであり、暗号制御回路１０１からの、メモリＢ制御信号１２０により示されるアドレスに対し、レジスタＣ出力データ１２５を書き込む。【００１９】
演算器１０５は組み合わせ回路であり、レジスタＡ出力データ１２２及びレジスタＢ出力データ１２３を入力として演算器制御信号１１８による演算を行い、演算器出力データ１２４に結果を出力する。【００２０】
レジスタＡ１０６は、メモリＡ出力データ１２１を入力とし、暗号制御回路１０１からのレジスタＡ制御信号１１６が有効になった場合に、メモリＡ出力データ１２１を保持し、レジスタＡ出力データ１２２に出力する。【００２１】
レジスタＢ１０７は、メモリＡ出力データ１２１を入力とし、暗号制御回路１０１からのレジスタＢ制御信号１１７が有効になった場合に、メモリＡ出力データ１２１を保持し、レジスタＢ出力データ１２３に出力する。【００２２】
レジスタＣ１０８は、演算器出力データ１２４を入力とし、暗号制御回路１０１からのレジスタＣ制御信号１１９が有効になった場合に、演算器出力データ１２４を保持し、レジスタＣ出力データ１２５に出力する。【００２３】
ＣＰＵ１０９は、暗号制御回路１０１に対して、暗号演算命令１１１を発行し暗号演算処理を実施させ、また偽装演算命令回路１００からの暗号演算完了信号１１２を受けて、暗号演算処理の終了を認識する。【００２４】
図２は、図１の暗号演算処理回路の動作を示している。ここでは例として、まずＣＰＵ１０９から命令１という暗号演算命令１１１が発行されるものとする。【００２５】
暗号制御回路１０１は、命令１をデコードして、メモリＡ１０３のアドレスＡ１、アドレスＡ２からそれぞれデータＤ１、データＤ２を読み出し、データＤ１をレジスタＡ１０６に、データＤ２をレジスタＢ１０７にそれぞれ格納する。メモリＡ消費電流IIは、メモリＡ１０３が読み出し動作をしたことによる消費電流であり、アドレスＡ１、アドレスＡ２の読み出し動作に対応した消費電流波形となる。【００２６】
暗号制御回路１０１は、命令１をデコードして演算器制御信号１１８として演算１を出力する。この例で演算１は、出力結果が確定するまでに最低５クロックサイクル必要な命令とする。演算器１０５は、レジスタＡ出力データ１２２の出力Ｄ１とレジスタＢ出力データ１２３の出力Ｄ２とを演算し、３クロックサイクル後に、演算器出力データ１２４としてＤＡを出力する。演算部消費電流IIは、組み合わせ回路である演算器１０５への入力レジスタであるレジスタＡ１０６及びレジスタＢ１０７にデータが格納されるたびに変化し、レジスタＡ１０６とレジスタＢ１０７との値が確定した後も、３クロックサイクルは演算が実行されているので電流を消費することになる。【００２７】
暗号制御回路１０１は、命令１をデコードして演算１が終了するタイミングで演算結果をレジスタＣ１０８に格納するためレジスタＣ制御信号１１９を出力し、レジスタＣ１０８にＤＡを格納する。そして暗号制御回路１０１は、命令１をデコードしてメモリＢ制御信号１２０を発行し、レジスタＣ出力データ１２５であるＤＡをメモリＢ１０４のアドレスＡＡに格納する。メモリＢ消費電流IIは、メモリＢ１０４への書き込み動作をしたことによる消費電流であり、アドレスＡＡへの書き込み動作に対応した消費電流波形となる。【００２８】
その後、暗号制御回路１０１は、ＣＰＵ１０９からの命令１の実行が終了したことを示す演算完了信号１１４を偽装演算命令回路１００に出力する。【００２９】
偽装演算命令回路１００は、ＣＰＵ１０９から出力される暗号演算命令１１１により命令１の暗号演算が開始されたことを認識した後に、命令１の実行が終了したことを示す信号である演算完了信号１１４を受けて、ＣＰＵ１０９に対して暗号演算完了信号１１２を出力する。以降、この命令１の暗号演算の開始から終了までの期間を「暗号演算処理１」の期間と定義する。【００３０】
ＣＰＵ１０９では、暗号演算完了信号１１２を受けて新たな暗号演算命令１１１である命令２を発行するために、プログラム処理期間として数十クロックサイクルが必要である。ただし、図２では、命令１の暗号演算完了信号１１２を受けてから、８クロック後に命令２を発行した例を示す。【００３１】
偽装演算命令回路１００は暗号制御回路１０１に対して、偽装演算命令１１３として命令Ｇを発行する。ここでは、命令Ｇは偽装演算命令回路１００から固定的に出力する命令であるとし、メモリＡ１０３のアドレスａ１、アドレスａ２からそれぞれデータｄ１、データｄ２を読み出し、データｄ１をレジスタＡ１０６に、データｄ２をレジスタＢ１０７にそれぞれ格納し、演算器１０５で出力結果が確定するまでに２クロックサイクル必要な演算を行い、レジスタＣ１０８に演算結果としてｄｘを格納し、メモリＢ１０４のアドレスａｘにｄｘを格納した後、演算完了信号１１４を偽装演算命令回路１００に出力して命令Ｇの処理は終了する。なお、メモリＢ制御信号１２０のデータ格納用アドレスａｘは、暗号演算命令１１１等が使用するメモリ空間を破壊しないことが必要であることから、ＣＰＵ１０９により使用されていないアドレスがデータ格納用アドレスとして使用される。【００３２】
偽装演算命令回路１００は、偽装演算命令１１３の実行が終了したことを示す演算完了信号１１４により、新たにＣＰＵ１０９から暗号演算命令１１１が発行されるまで偽装演算命令１１３の発行を繰り返すが、図２の例では同じタイミングでＣＰＵ１０９から新たな暗号演算命令１１１である命令２が発行されたため、偽装演算命令１１３の発行を中止する。以降、この偽装演算命令１１３の実行開始から終了までの期間を「偽装演算処理」の期間と定義する。【００３３】
図２において、図１の暗号演算処理回路の全体における消費電流波形は、メモリＡ消費電流IIと演算部消費電流IIとメモリＢ消費電流IIとの加算となり、「回路全体の消費電流II」が合計された消費電流波形である。図２において、回路全体の消費電流IIは「暗号演算処理１」の期間及び「偽装演算処理」の期間にわたり、ほぼ連続的な消費電流波形となっている。【００３４】
図３は、図１の暗号演算処理回路に本発明の構成要素である偽装演算命令回路１００がない場合の動作を示している。図３では、図２における「偽装演算処理」の期間に相当するクロックサイクル期間に暗号演算処理回路が動作していないので回路全体の消費電流Ｉの波形が連続してＬＯＷレベルの期間となり、消費電流波形の変化から命令実行の終了、開始のタイミングが判明してしまうことが分かる。【００３５】
以上のように、図１の暗号演算処理回路では、偽装演算命令回路１００によって、ＣＰＵ１０９等からの暗号演算命令１１１の実行が終了した後に、通常であれば停止しているメモリＡ１０３やメモリＢ１０４や演算器１０５やレジスタＡ１０６やレジスタＢ１０７やレジスタＣ１０８を動作させる偽装演算命令１１３を発行することで、メモリＡ１０３やメモリＢ１０４や演算器１０５やレジスタＡ１０６やレジスタＢ１０７やレジスタＣ１０８が暗号演算命令１１１を発行したときと同じように動作し電流を消費するため、暗号演算処理の終了や開始等のタイミングを消費電流の大小等で特定することが困難となり、セキュリティ性が向上する。【００３６】
更に偽装演算命令１１３は、ＣＰＵ１０９等からの暗号演算命令１１１が発行されていない期間のみ発行されるので、ＣＰＵ１０９等からの暗号演算命令１１１の発行を遅延させたりするものではないため、暗号演算処理のパフォーマンスを落とすことがない。【００３７】
なお、ここでは偽装演算命令１１３は、固定的であり常に同じ命令を発行するものとしたが、ＣＰＵ１０９から直前に発行された暗号演算命令１１１と同じ命令を偽装演算命令１１３として発行してもよい。これにより暗号演算命令１１１の実行が終了しても、同じ消費電流波形を持つ偽装演算命令１１３が実行されるので、どのタイミングで暗号演算命令１１１の実行が終了したのかの解析が困難となり、電流解析に対するセキュリティ性が更に向上する。【００３８】
なお、メモリＡ１０３とメモリＢ１０４とは、同一のメモリでも構わない。更に、演算器１０５の入力と、その入力データを保持するレジスタは３つ以上あっても構わない。更に、演算器１０５は加算器、乗算器等の複数の演算要素から構成されても構わない。【００３９】
図４は、図１中の偽装演算命令回路１００の詳細構成例を示している。図４の偽装演算命令回路１００は、ＣＰＵ１０９からの暗号演算命令１１１を記憶する暗号演算命令記憶回路４００と、偽装演算命令１１３を過去の暗号演算命令履歴から生成する偽装演算命令生成回路４０１とを備える。【００４０】
暗号演算命令記憶回路４００は、ＣＰＵ１０９が出力する暗号演算命令１１１を、暗号演算命令履歴情報４０２として記憶する。【００４１】
偽装演算命令生成回路４０１は、暗号演算命令１１１の実行が終了したことを示す信号である演算完了信号１１４を受けて、暗号演算命令記憶回路４００から出力される暗号演算命令履歴情報４０２をもとに、偽装演算命令１１３を生成する。【００４２】
図５は、図４中の暗号演算命令記憶回路４００の記憶内容の例を示している。図５に示すように、暗号演算命令記憶回路４００は、過去に発行された複数の暗号演算命令１１１を、ＲＡＭで形成されるＦＩＦＯ（FIRST-IN FIRST-OUT）に記憶する。ここでは、暗号演算命令１１１が記憶されているＦＩＦＯアドレスをスロットと呼ぶこととする。【００４３】
図５ではスロットを５個備え、過去の暗号演算命令１１１をスロット１から埋めてゆき、スロットが一杯になった場合スロット５に格納された暗号演算命令１１１から廃棄してゆく。ここでは、スロット１にはアドレス２及びアドレス３からの各々１６０ビット長のデータを入力とする乗算でアドレス０に結果を出力する命令が格納されており、スロット２にはアドレス０及びアドレス１からの各々１６０ビット長のデータを入力とする加算でアドレス１に結果を出力する命令が格納されており、スロット３にはアドレス４及びアドレス５からの各々１６０ビット長のデータを入力とする乗算でアドレス０に結果を出力する命令が格納されており、スロット４にはアドレス０及びアドレス１からの各々１６０ビット長のデータを入力とする加算でアドレス１に結果を出力する命令が格納されており、スロット５にはアドレス１及びアドレス６からの各々１６０ビット長のデータを入力とする減算でアドレス１に結果を出力する命令が格納されている。【００４４】
偽装演算命令生成回路４０１は、暗号演算命令１１１の実行が終了したことを示す信号である演算完了信号１１４を受けて、スロット１からスロット５までに記憶されている暗号演算命令１１１を検索し、１６０ビットを入力とする乗算が２回、１６０ビットを入力とする加算が２回、１６０ビットを入力とする減算が１回であることを認識し、出現頻度では乗算と加算とが同数であるが一番最後に発行されたスロット１には乗算が格納されていたことから加算を選択することとし、スロット４を選択して、スロット４の暗号演算命令１１１をもとにアドレス０及びアドレス１からの各々１６０ビット長のデータを入力とする加算でアドレスＡＸに結果を出力する偽装演算命令１１３を生成する。データ格納用アドレスＡＸは、暗号演算命令１１１等が使用するメモリ空間を破壊しないことが必要であることから、ＣＰＵ１０９により使用されていないアドレスがデータ格納用アドレスとして使用される。【００４５】
以上のように、図４の構成では、ＣＰＵ１０９から逐次発行される暗号演算命令１１１をＲＡＭ等に記憶し、記憶された暗号演算命令１１１から出現頻度の高い暗号演算命令１１１を選択して偽装演算命令１１３として発行するため、電流解析を実施しても、逐次発行された暗号演算命令１１１が実行されているのか、それとも頻度が高かった暗号演算命令１１１を偽装演算命令１１３として実行されているのかの区別をつけることが困難であり、電流解析に対するセキュリティ性が更に向上する。【００４６】
なお、偽装演算命令生成回路４０１は、記憶された暗号演算命令１１１からランダムに暗号演算命令１１１を選択して偽装演算命令１１３として発行してもよい。これにより電流解析を実施しても、逐次発行された暗号演算命令１１１が実行されているのかそれともランダムに過去の暗号演算命令１１１を偽装演算命令１１３として実行しているのかの区別をつけることが困難であり、電流解析に対するセキュリティ性が更に向上する。【００４７】
また、暗号演算命令記憶回路４００は不揮発性メモリにより構成されてもよい。これにより、ＣＰＵ１０９等から逐次発行される暗号演算命令１１１を不揮発性メモリに記憶するので、電源断以降も過去の暗号演算命令１１１の履歴を記憶でき、記憶された暗号演算命令１１１から暗号演算命令１１１を選択して偽装演算命令１１３として発行するため、電源投入から暗号演算を実行し電源断等のシーケンスを繰り返し実行して電流波形変化を観測するような電流解析手法においても、暗号演算命令１１１が実行されているのかそれとも過去の暗号演算命令１１１を偽装演算命令１１３として実行されているのか区別をつけることが困難であり、電流解析に対するセキュリティ性が更に向上する。【００４８】
なお、暗号演算命令記憶回路４００のスロット数はここでは５個としたが、スロット数が増減しても構わない。【００４９】
さて、ＣＰＵ１０９等からの暗号演算命令１１１を実行中であってもクロックサイクル単位ではメモリ１０３，１０４と演算器１０５とレジスタ１０６，１０７，１０８とが停止している期間が存在している。また、偽装演算命令１１３が実行中であってもクロックサイクル単位ではメモリ１０３，１０４と演算器１０５とレジスタ１０６，１０７，１０８とが停止している期間が存在している。この点に着目し、次に説明する例では、これらの演算資源１０３〜１０８を常に動作させて電流を消費させることで、電流解析に対するセキュリティ性を更に向上させる。【００５０】
図６は、図１中の暗号制御回路１０１の詳細構成例を示している。図６の暗号制御回路１０１は、動作状況通知回路６００と、通常制御回路６０１と、偽装制御回路６０２と、セレクタ６０３とを備える。【００５１】
通常制御回路６０１は、暗号演算命令１１１又は偽装演算命令１１３を受けて、通常制御回路メモリＡ制御信号６０４、通常制御回路レジスタＡ制御信号６０５、通常制御回路レジスタＢ制御信号６０６、通常制御回路演算器制御信号６０７、通常制御回路レジスタＣ制御信号６０８、通常制御回路メモリＢ制御信号６０９（以降これらの制御信号を通常制御信号と呼ぶ）をセレクタ６０３に対して出力する。更に、暗号演算命令１１１又は偽装演算命令１１３による制御が終了すると、偽装演算命令回路１００に対して、演算完了信号１１４を出力する。【００５２】
偽装制御回路６０２は、偽装制御回路メモリＡ制御信号６１０、偽装制御回路レジスタＡ制御信号６１１、偽装制御回路レジスタＢ制御信号６１２、偽装制御回路演算器制御信号６１３、偽装制御回路レジスタＣ制御信号６１４、偽装制御回路メモリＢ制御信号６１５（以降これらの制御信号を偽装制御信号と呼ぶ）をセレクタ６０３に対して出力する。【００５３】
動作状況通知回路６００は、暗号演算命令１１１又は偽装演算命令１１３の実行中であっても通常制御回路６０１からの通常制御信号がメモリＡ１０３やメモリＢ１０４や演算器１０５やレジスタＡ１０６やレジスタＢ１０７やレジスタＣ１０８を占有する必要のないクロックサイクル期間を示す６ビットの動作状況通知信号［５：０］６１６をセレクタ６０３に出力する。【００５４】
セレクタ６０３は、動作状況通知信号［５：０］６１６により、動作状況通知信号［０］で通常制御回路メモリＡ制御信号６０４又は偽装制御回路メモリＡ制御信号６１０からメモリＡ制御信号１１５を選択し、動作状況通知信号［１］で通常制御回路レジスタＡ制御信号６０５又は偽装制御回路レジスタＡ制御信号６１１からレジスタＡ制御信号１１６を選択し、動作状況通知信号［２］で通常制御回路レジスタＢ制御信号６０６又は偽装制御回路レジスタＢ制御信号６１２からレジスタＢ制御信号１１７を選択し、動作状況通知信号［３］で通常制御回路演算器制御信号６０７又は偽装制御回路演算器制御信号６１３から演算器制御信号１１８を選択し、動作状況通知信号［４］で通常制御回路レジスタＣ制御信号６０８又は偽装制御回路レジスタＣ制御信号６１４からレジスタＣ制御信号１１９を選択し、動作状況通知信号［５］で通常制御回路メモリＢ制御信号６０９又は偽装制御回路メモリＢ制御信号６１５からメモリＢ制御信号１２０を選択する。【００５５】
次に、以上のように構成された暗号演算処理回路の動作について図７〜図１１を参照しながら説明する。なお、図７〜図１０には、暗号演算命令１１１を正しく実行するために暗号制御回路１０１からの各種制御信号がメモリＡ１０３やメモリＢ１０４や演算器１０５やレジスタＡ１０６やレジスタＢ１０７やレジスタＣ１０８を占有しなければならない期間を、それぞれ「メモリＡ制御占有期間」、「メモリＢ制御占有期間」、「演算器制御占有期間」、「レジスタＡ制御占有期間」、「レジスタＢ制御占有期間」、「レジスタＣ制御占有期間」として示す。【００５６】
図７は、動作状況通知回路６００からの動作状況通知信号［０］６１６により、通常制御回路メモリＡ制御信号６０４又は偽装制御回路メモリＡ制御信号６１０からメモリＡ制御信号１１５を選択する例である。【００５７】
動作状況通知信号［０］６１６は、暗号演算命令１１１をデコードした結果、２クロックサイクルは通常制御回路メモリＡ制御信号６０４を選択し、それ以外は偽装制御回路メモリＡ制御信号６１０を選択する信号となる。通常制御回路メモリＡ制御信号６０４は、アドレスＡ１、アドレスＡ２の読み出し信号であり、偽装制御回路メモリＡ制御信号６１０は毎クロック毎にインクリメントされるアドレスＡ６からＡ１６までの読み出し信号を出力している。【００５８】
セレクタ６０３は、動作状況通知信号［０］６１６により、通常制御回路メモリＡ制御信号６０４又は偽装制御回路メモリＡ制御信号６１０からメモリＡ１０３に毎クロックサイクルアクセスするようなメモリＡ制御信号１１５を出力する。このメモリＡ制御信号１１５により、メモリＡ１０３からメモリＡ出力データ１２１が読み出され、この結果としてメモリＡ消費電流IIIのような毎クロックサイクル電流を消費する消費電流波形が得られる。【００５９】
図８は、動作状況通知回路６００からの動作状況通知信号［１］６１６により通常制御回路レジスタＡ制御信号６０５又は偽装制御回路レジスタＡ制御信号６１１からレジスタＡ制御信号１１６を選択し、かつ動作状況通知信号［２］６１６により通常制御回路レジスタＢ制御信号６０６又は偽装制御回路レジスタＢ制御信号６１２からレジスタＢ制御信号１１７を選択する例である。【００６０】
動作状況通知信号［１］６１６は、暗号演算命令１１１をデコードした結果、６クロックサイクルは通常制御回路レジスタＡ制御信号６０５を選択し、それ以外は偽装制御回路レジスタＡ制御信号６１１を選択する信号となる。通常制御回路レジスタＡ制御信号６０５はメモリＡ出力データ１２１からの値Ｄ１をレジスタＡ１０６に格納するための信号であり、偽装制御回路レジスタＡ制御信号６１１はメモリＡ出力データ１２１をレジスタＡ１０６に毎クロックサイクル取り込むため常にＨｉｇｈレベルの信号を出力している。【００６１】
動作状況通知信号［２］６１６は、暗号演算命令１１１をデコードした結果、５クロックサイクルは通常制御回路レジスタＢ制御信号６０６を選択し、それ以外は偽装制御回路レジスタＢ制御信号６１２を選択する信号となる。通常制御回路レジスタＢ制御信号６０６はメモリＡ出力データ１２１からの値Ｄ２をレジスタＢ１０７に格納するための信号であり、偽装制御回路レジスタＢ制御信号６１２はメモリＡ出力データ１２１をレジスタＢ１０７に毎クロックサイクル取り込むため常にＨｉｇｈレベルの信号を出力している。【００６２】
セレクタ６０３は、動作状況通知信号［１］６１６により、メモリＡ出力データ１２１からのデータＤ６、データＤ７、データＤ１、データＤ１４、データＤ１５、データＤ１６をレジスタＡ１０６に取り込むようなレジスタＡ制御信号１１６を出力する。またセレクタ６０３は、動作状況通知信号［２］６１６により、メモリＡ出力データ１２１からのデータＤ６、データＤ７、データＤ１、データＤ２、データＤ１４、データＤ１５、データＤ１６をレジスタＢ１０７に取り込むようなレジスタＢ制御信号１１７を出力する。【００６３】
図９は、動作状況通知回路６００からの動作状況通知信号［３］６１６により通常制御回路演算器制御信号６０７又は偽装制御回路演算器制御信号６１３から演算器制御信号１１８を選択し、かつ動作状況通知信号［４］６１６により通常制御回路レジスタＣ制御信号６０８又は偽装制御回路レジスタＣ制御信号６１４からレジスタＣ制御信号１１９を選択する例である。【００６４】
動作状況通知信号［３］６１６は、暗号演算命令１１１をデコードした結果、５クロックサイクルは通常制御回路演算器制御信号６０７を選択し、それ以外は偽装制御回路演算器制御信号６１３を選択する信号である。通常制御回路演算器制御信号６０７は、レジスタＡ出力データ１２２からの値Ｄ１とレジスタＢ出力データ１２３からの値Ｄ２とを入力として演算器１０５で演算１を実行させるための信号であり、偽装制御回路演算器制御信号６１３はレジスタＡ出力データ１２２とレジスタＢ出力データ１２３とを入力とし演算器１０５を動作させるための信号であり、この例では毎クロックサイクル単位で演算０から演算１０までを実行させるための信号を出力している。【００６５】
動作状況通知信号［４］６１６は、暗号演算命令１１１をデコードした結果、１クロックサイクルは通常制御回路レジスタＣ制御信号６０８を選択し、それ以外は偽装制御回路レジスタＣ制御信号６１４を選択する信号である。通常制御回路レジスタＣ制御信号６０８は、演算器出力データ１２４からの演算結果である値ＤＡをレジスタＣ１０８に格納するための信号であり、偽装制御回路レジスタＣ制御信号６１４は演算器出力データ１２４をレジスタＣ１０８に毎クロックサイクル取り込むため常にＨｉｇｈレベルの信号を出力している。【００６６】
セレクタ６０３は、動作状況通知信号［３］６１６により、メモリＡ出力データ１２２とメモリＢ出力データ１２３とを演算器１０５の入力として演算器１０５で演算０、演算１、演算２、演算１、演算８、演算９、演算１０を実行するような演算器制御信号１１８を出力する。またセレクタ６０３は、動作状況通知信号［４］６１６により、クロックサイクル毎に演算器出力データ１２４をレジスタＣ１０８に取り込むようなレジスタＣ制御信号１１９を出力する。これら演算器制御信号１１８及びレジスタＣ制御信号１１９により、演算器１０５で毎クロックサイクル何らかの演算が実行され、レジスタＣ１０８に格納するので、演算部消費電流IIIのような毎クロックサイクル電流を消費する消費電流波形が得られる。【００６７】
図１０は、動作状況通知回路６００からの動作状況通知信号［５］６１６により、通常制御回路メモリＢ制御信号６０９又は偽装制御回路メモリＢ制御信号６１５からメモリＢ制御信号１２０を選択する例である。【００６８】
動作状況通知信号［５］６１６は、暗号演算命令１１１をデコードした結果、１クロックサイクルは通常制御回路メモリＢ制御信号６０９を選択し、それ以外は偽装制御回路メモリＢ制御信号６１５を選択する信号となる。通常制御回路メモリＢ制御信号６０９は、メモリＢ１０４のアドレスＡＡに対するレジスタＣ出力データ値ＤＡの書き込み信号であり、偽装制御回路メモリＢ制御信号６１５は毎クロック毎にメモリＢ１０４の固定アドレスＡＸに対するレジスタＣ出力データ１２５の書き込み信号である。偽装制御回路メモリＢ制御信号６１５によるメモリＢ１０４への書き込み動作に関しては、アドレスによっては暗号演算命令１１１等で必要なデータを上書きしてしまう恐れがあるので、ＣＰＵ１０９から使用されていないアドレスＡＸがデータ格納用アドレスとして使用される。【００６９】
セレクタ６０３は、動作状況通知信号［５］６１６により、通常制御回路メモリＢ制御信号６０９又は偽装制御回路メモリＢ制御信号６１５からメモリＢ１０４に毎クロックサイクル書き込みするようなメモリＢ制御信号１２０を出力する。このメモリＢ制御信号１２０により、メモリＢ１０４にレジスタＣ出力データ１２５が書き込まれ、この結果としてメモリＢ消費電流IIIのような毎クロックサイクル電流を消費する消費電流波形が得られる。【００７０】
図１１は、図７〜図１０をまとめた図である。図１１において暗号演算処理回路における消費電流波形は、メモリＡ消費電流IIIと演算部消費電流IIIとメモリＢ消費電流IIIとの加算となり、「回路全体の消費電流III」が合計された消費電流波形である。回路全体の消費電流IIIは、図２における回路全体の消費電流IIの「暗号演算処理１」の期間と比べてもより一層連続的な消費電流波形となっている。【００７１】
なお、図７〜図１１にわたり暗号演算命令１１１の実行中における暗号制御回路１０１の動作について説明したが、偽装演算命令１１３の実行の場合も同様である。【００７２】
以上のように、図６の構成では、暗号演算命令１１１又は偽装演算命令１１３を実行するための通常制御信号６０４〜６０９を発生させる通常制御回路６０１と、暗号演算命令１１１又は偽装演算命令１１３の実行中であっても通常制御回路６０１がメモリＡ１０３やメモリＢ１０４や演算器１０５やレジスタＡ１０６やレジスタＢ１０７やレジスタＣ１０８を占有する必要のないクロックサイクル期間を示す動作状況通知回路６００と、メモリＡ１０３やメモリＢ１０４や演算器１０５やレジスタＡ１０６やレジスタＢ１０７やレジスタＣ１０８を強制的に動作させるための偽装制御信号６１０〜６１５を発生させる偽装制御回路６０２と、動作状況通知回路６００からの通知に応じて通常制御信号６０４〜６０９と偽装制御信号６１０〜６１５とを切り替えるセレクタ６０３とを備えるので、通常制御回路６０１がメモリＡ１０３やメモリＢ１０４や演算器１０５やレジスタＡ１０６やレジスタＢ１０７やレジスタＣ１０８を占有する必要のない期間は制御を通常制御回路６０１から偽装制御回路６０２に切り替えることで、常にメモリＡ１０３やメモリＢ１０４や演算器１０５やレジスタＡ１０６やレジスタＢ１０７やレジスタＣ１０８を動作させて電流を消費させることができ、暗号演算命令１１１又は偽装演算命令１１３の実行中においても消費電流が更に均一になることで、電流解析に対するセキュリティ性が更に向上する。【００７３】
図１２は、図６中の偽装制御回路６０２の詳細構成例を示している。図１２の偽装制御回路６０２は、通常制御信号記憶回路８００と、偽装制御信号生成回路８０１とを備える。通常制御信号記憶回路８００は、通常制御回路６０１が出力する通常制御信号６０４〜６０９をもとに通常制御信号履歴情報８０２を記憶する。偽装制御信号生成回路８０１は、通常制御信号記憶回路８００が記憶した通常制御信号履歴情報８０２を読み出して、偽装制御信号６１０〜６１５を生成し出力する。【００７４】
図１３は、図１２中の通常制御信号記憶回路８００の記憶内容の例を示している。図１３に示すとおり、通常制御信号記憶回路８００は、内部に複数のデータ記憶用のスロットを備えている。各スロットは、通常制御回路６０１が出力する、通常制御回路演算器制御信号６０７と、通常制御回路メモリＡ制御信号６０４及び通常制御回路レジスタＡ制御信号６０５から得られるメモリＡアドレス（レジスタＡ用）と、通常制御回路メモリＡ制御信号６０４及び通常制御回路レジスタＢ制御信号６０６から得られるメモリＡアドレス（レジスタＢ用）と、通常制御回路メモリＢ制御信号６０９から得られるメモリＢアドレスとを１セットで記憶する構成になっている。【００７５】
偽装制御信号生成回路８０１は、これらのスロット毎に記憶された通常制御信号履歴情報８０２を読み出して、偽装制御信号６１０〜６１５を生成する。この偽装制御信号生成回路８０１が、どのスロットのデータを読み出すかについてのアルゴリズムは、(1)スロットに記憶した順番に読み出す、(2)最も頻度の多い暗号演算命令のスロットを選択する、(3)ランダムにスロットを選択する等の、いずれのアルゴリズムであってもよい。【００７６】
上記のようなアルゴリズムで読み出す場合、クロックサイクル単位においても過去に実施された演算資源１０３〜１０８の動作や、過去の頻度が高かった消費電流波形を持つ演算資源１０３〜１０８の動作や、過去の消費電流波形の状態がランダムに出現する演算資源１０３〜１０８の動作が可能であり、暗号演算命令又は偽装演算命令１１３における消費電流が均一となり、電流解析に対するセキュリティ性が更に向上する。【００７７】
また通常制御信号記憶回路７００は、不揮発性メモリによって構成されてもよい。この場合電源断以降も過去の通常制御信号履歴情報８０２を記憶でき、記憶された通常制御信号６０４〜６０９から偽装制御信号６１０〜６１５を選択して出力するため、電源投入から暗号演算を実行し電源断等のシーケンスを繰り返し実行して電流波形変化を観測するような電流解析手法においても、暗号演算命令１１１の実行中や偽装演算命令１１３の実行中における消費電流波形が、記憶された過去の通常制御信号６０４〜６０９に依存して出現するので、電流解析に対するセキュリティ性が更に向上する。【００７８】
さて、演算器１０５の消費電流は、この演算器１０５での処理が同じである場合、演算対象である入力データに大きく依存する。具体的には、入力データにビット値０が多い場合と少ない場合とでは消費電流に差が出てくる。そこで、次に説明する例では、ビット値０のカウント数を利用することで、電流解析に対するセキュリティ性を向上させる。【００７９】
図１４は、図１の暗号演算処理回路の変形例を示している。図１４では、図１に示した暗号演算処理回路の構成に加えて、更にビット値０カウント回路１０００を備える。ビット値０カウント回路１０００は、メモリＡ出力データ１２１の値を入力とし、その入力データのビット値が０であるビット数をカウントし、ビット値０カウント情報１００１として、暗号演算命令記憶回路４００及び通常制御信号記憶回路８００に対して出力する。【００８０】
例えば、メモリＡ出力データ１２１が３２ビットのデータ幅を持ち、１６進数表記で３９ＤＦ７ＥＢ６のデータを出力した場合、このデータは２進数表記で００１１＿１００１＿１１０１＿１１１１＿０１１１＿１１１０＿１０１１＿０１１０であるから、ビット値が０であるビットの数は１０である。したがって、ビット値０カウント情報１００１は１０を出力する。【００８１】
図１５は、図１４中の暗号演算命令記憶回路４００の記憶内容の例を示している。図１５に示すとおり、暗号演算命令記憶回路４００は、暗号演算命令１１１に加えて、更にビット値０カウント情報１００１を同一スロットに記憶する構成になっている。ここでは仮にスロット番号の小さいものから順に、最近記憶されたデータであるものとする。【００８２】
メモリＡ出力データ１２１が３２ビットのデータ幅を持つものとすると、図１５のスロット１に記憶された暗号演算命令１１１は、アドレスＡ１及びアドレスＡ２の各データを入力とし命令３の演算を行い結果をアドレスＡ３に格納するが、この際ビット値０カウント回路１０００によってカウントされたビット値０カウント情報１００１は、アドレスＡ１では１７、アドレスＡ２では１４である。【００８３】
スロット２に記憶された暗号演算命令１１１は、アドレスＡ５及びアドレスＡ６の各データを入力とし命令３の演算を行い結果をアドレスＡ７に格納するが、この際ビット値０カウント回路１０００によってカウントされたビット値０カウント情報１００１は、アドレスＡ５では１４、アドレスＡ６では１６である。【００８４】
スロット３に記憶された暗号演算命令１１１は、アドレスＡ７及びアドレスＡ８の各データを入力とし命令３の演算を行い結果をアドレスＡ８に格納するが、この際ビット値０カウント回路１０００によってカウントされたビット値０カウント情報１００１は、アドレスＡ７では５、アドレスＡ８では３である。すなわち、アドレスＡ７及びアドレスＡ８から読み出されたデータはともに、３２ビットのデータ幅に対してビット値０のカウント数が非常に少ないデータであることが分かる。【００８５】
スロット４に記憶された暗号演算命令１１１は、アドレスＡ３及びアドレスＡ４の各データを入力とし命令３の演算を行い結果をアドレスＡ５に格納するが、この際ビット値０カウント回路１０００によってカウントされたビット値０カウント情報１００１は、アドレスＡ３では１８、アドレスＡ４では１９である。【００８６】
各スロットに記憶された暗号演算命令１１１は全て命令３を演算器１０５に発行する命令であるが、各スロットに記憶された０値カウント数は、スロット３が少ない特徴を持ち、スロット１、スロット２、スロット４は同じような数字である。データ幅に対して０値カウント数が非常に少ない、又は多いデータが存在する場合、このようなデータを使用した暗号演算は活性化するビット数が非常に少ないため、暗号演算処理中の消費電流波形に独特のピークが生じる。【００８７】
偽装演算命令生成回路４０１は、暗号演算命令１１１の実行が終了したことを示す信号である演算完了信号１１４を受けて、スロット１からスロット４までに記憶されている暗号演算命令１１１を検索しスロット全てが命令３であることを認識すると、更にビット値０カウント情報１００１を検索する。データ幅に対して０値カウント数が非常に少ない、又は多いデータが存在する場合、このようなデータを使用した演算は活性化するビット数が非常に少ないため、暗号演算処理中の消費電流波形に独特のピークが生じるので、このピークを意図的に増やすような偽装演算命令１１３を生成する。これにより、最小に位置するビット値０カウント数を使用していたスロットであるスロット３を選択して偽装演算命令１１３を生成する。【００８８】
以上のように、図１４の構成を有する暗号演算処理回路では、偽装演算命令生成回路４０１が暗号演算命令記憶回路４００に記憶されたビット値０カウント数の分布を判断し、最大又は最小に位置するビット値０カウント数を使用していた暗号演算命令１１１を選択して偽装演算命令１１３を生成するので、生成された偽装演算命令１１３は過去の特異な消費電流波形を示すことができ、暗号演算命令１１１が実行されているのかそれとも過去の特異な消費電流波形を示す暗号演算命令１１１を偽装演算命令１１３として実行されているのかの区別をつけることが困難であり、電流解析に対するセキュリティ性が更に向上する。【００８９】
なお、偽装演算命令生成回路４０１は、暗号演算命令記憶回路４００に記憶されたビット値０カウント数の分布を判断し、平均に位置するビット値０カウント数を使用していた暗号演算命令１１１を選択して偽装演算命令１１３を生成してもよい。平均に位置するビット値０カウント数を使用していた暗号演算命令１１１を選択して偽装演算命令１１３を生成するので、生成された偽装演算命令１１３は平均的な消費電流波形を示すことができ、暗号演算命令１１１が実行されているのか、それともデータ中に含まれるビット値０カウント数の頻度が高かった暗号演算命令１１１を偽装演算命令１１３として実行されているのかの区別をつけることが困難であり、電流解析に対するセキュリティ性が更に向上する。【００９０】
図１６は、図１４中の通常制御信号記憶回路８００の記憶内容の例を示している。図１６に示すとおり、通常制御信号記憶回路８００は、通常制御回路演算器制御信号６０７とメモリＡアドレス及びメモリＢアドレスとに加えて、更にビット値０カウント情報１００１を１セットで記憶する構成になっている。ここでは仮にスロット番号の小さいものから順に、最近記憶されたデータであるものとする。【００９１】
メモリＡ出力データ１２１が３２ビットのデータ幅を持つものとすると、図１６のスロット１によれば、メモリＡアドレス（レジスタＡ用）Ａ１及びメモリＡアドレス（レジスタＢ用）Ａ２から読み出したデータに対して通常制御回路演算器制御信号６０７として演算２を発行し、演算結果をメモリＢアドレスＡＡに書き込んでいる。この際ビット値０カウント回路１０００によってカウントされたレジスタＡ用及びレジスタＢ用のビット値０カウント情報１００１は、それぞれ３１と３２である。すなわち、３２ビットのデータ幅に対してビット値０のカウント数が非常に多いデータであることが分かる。【００９２】
また逆に図１６のスロット３に記憶されているデータでは、ビット値０カウント回路１０００によってカウントされたレジスタＡ用及びレジスタＢ用のビット値０カウント情報１００１は、それぞれ０と１であり、３２ビットのデータ幅に対してビット値０のカウント数が非常に少ないデータであることが分かる。【００９３】
以上のように、データ幅に対して０値カウント数が非常に少ない、又は多いデータが存在する場合、このようなデータを使用した暗号演算は活性化するビット数が非常に少ないため、暗号演算処理中の消費電流波形に独特のピークが生じる。【００９４】
スロット１に記憶されているデータは最も新しいデータであるから、最近、通常制御回路６０１によって、上記のような独特のピークが生じる通常制御信号６０４〜６０９が出力されていることになる。このような場合、その後に続く偽装制御信号６１０〜６１５は、同様な独特のピークが生じる制御信号でなければ効果的に偽装することはできない。また逆に通常制御回路６０１によって、上記のような独特のピークが生じない通常制御信号６０４〜６０９が出力されている場合は、その後に続く偽装制御信号６１０〜６１５は、独特のピークが生じない制御信号でなければ効果的に偽装することはできない。そこで、偽装制御信号生成回路８０１は、最も新しく記憶されたスロットのビット値０カウント情報１００１を判断し、平均、最大又は最小等のビット値０カウント情報１００１を持つスロットのデータを読み出して偽装制御信号６１０〜６１５を生成する。【００９５】
このような偽装演算を実行することで、本来の暗号演算を実行しているタイミングでの消費電流波形との差を区別するのが困難になり、本来の暗号演算の実行タイミングが解析されにくくなる。【００９６】
以上のように、図１４の構成を有する暗号演算処理回路では、メモリＡ出力データ１２１のビット値０の個数をビット値０カウント回路１０００によってカウントし、そのカウント値を、暗号演算命令記憶回路４００及び通常制御信号記憶回路８００に記憶することにより、過去に発生した特異な消費電流波形や平均的な消費電流波形と同じ特徴を持つ消費電流波形を再現することができるため、消費電流解析による暗号演算処理と偽装演算処理との判別が困難になり、消費電流解析に対するセキュリティ性が向上する。【００９７】
さて、演算器１０５の連続した制御において入力データがメモリＡ１０３の違うアドレスから読み出されたデータあっても、データの値そのものが全く同じであった場合は、演算器１０５で電流が消費されることがない。そこで、次に説明する例では、演算器１０５を構成する回路の電位をプリセットすることで、電流解析に対するセキュリティ性を向上させる。【００９８】
図１７は、図６の変形例に係る暗号制御回路１０１及び演算部１０２の構成を示している。図１７の演算部１０２は、図１に示した演算部１０２の構成に加えて、演算器１０５を構成する回路の電位をプリセットするために、プリセット回路Ａ１３００と、プリセット回路Ｂ１３０１とを更に備える。図１７の例では、両プリセット回路１３００，１３０１が、例えばインバータ回路である。また、図１７の暗号制御回路１０１は、図６に示した暗号制御回路１０１の構成に加えて、動作開始クロックエッジに同期したパルス信号を発生して両プリセット回路１３００，１３０１を動作させるためのパルス信号発生回路１３０６を更に備える。【００９９】
プリセット回路Ａ１３００は、パルス信号発生回路１３０６からのプリセット回路Ａ制御信号１３０２が有効になった場合に、レジスタＡ１０６からのレジスタＡ出力データ１２２を反転して、演算器１０５に対して、プリセット回路Ａ出力データ１３０４に出力する。【０１００】
プリセット回路Ｂ１３０１は、パルス信号発生回路１３０６からのプリセット回路Ｂ制御信号１３０３が有効になった場合に、レジスタＢ１０７からのレジスタＢ出力データ１２３を反転して、演算器１０５に対して、プリセット回路Ｂ出力データ１３０５に出力する。【０１０１】
パルス信号発生回路１３０６は、クロック１１０を利用してパルス信号を発生する回路であり、発生した信号はプリセット回路Ａ制御信号１３０２及びプリセット回路Ｂ制御信号１３０３として、プリセット回路Ａ１３００及びプリセット回路Ｂ１３０１に出力する。【０１０２】
図１８は、図１７の暗号制御回路１０１及び演算部１０２を備えた暗号演算処理回路の動作を示している。【０１０３】
図１８によれば、暗号制御回路１０１は、ＣＰＵ１０９からの暗号演算命令１１１により、命令４を受け取る。ここで命令４は、一連の暗号演算処理において演算器１０５が２クロックサイクルの演算４を４回繰り返すものとする。【０１０４】
暗号制御回路１０１は、命令４をデコードして、メモリＡ１０３のアドレスＡ１からアドレスＡ８までのそれぞれデータＤ１、データＤ２を読み出し、データＤ１をレジスタＡ１０６に、データＤ２をレジスタＢ１０７にそれぞれ格納する。メモリＡ消費電流IVは、メモリＡ１０３が読み出し動作をしたことによる消費電流であり、アドレスＡ１からアドレスＡ８までの読み出し動作に対応した消費電流波形となる。【０１０５】
そして暗号制御回路１０１は、演算器制御信号１１８により演算器１０５に対して演算４を実施するよう制御するが、このときパルス信号発生回路１３０６は、プリセット回路Ａ制御信号１３０２を制御し、レジスタＡ出力データ１２２を一時的に反転させてプリセット回路Ａ出力データ１３０４に出力する。これにより演算器１０５は、本来のデータＤ１及びＤ２による演算を実施する前に、一時的にＤ１の反転データとＤ２との演算を実施することになる。演算部消費電流IVは、組み合わせ回路である演算器１０５への入力レジスタであるレジスタＡ１０６とレジスタＢ１０７とにデータが格納されるたびに変化し、レジスタＡ１０６とレジスタＢ１０７との値が確定した後も、２クロックサイクルは演算が実行されているので電流を消費することになる。【０１０６】
アドレスＡ１からＡ８まで読み出したメモリＡ出力データ１２１が図１８のようにＤ１とＤ２とが連続するような場合、レジスタＡ出力データ１２２とレジスタＢ出力データ１２３との値は変化しない。このような場合、従来の構成では演算器１０５の入力は変化せず、実際には演算器１０５が動作しないため電流を消費しないが、本発明ではプリセット回路Ａ１３００及びプリセット回路Ｂ１３０１をパルス信号発生回路１３０６によって制御し、入力データを一時的に反転させることによって、演算処理がその都度実行され、演算器１０５は電流を消費する。【０１０７】
次に、暗号制御回路１０１は、命令４をデコードして演算４が終了するタイミングで演算結果をレジスタＣ１０８に格納するためレジスタＣ制御信号１１９を出力し、レジスタＣ１０８にＤＡを格納する。また暗号制御回路１０１は、命令４をデコードしてメモリＢ制御信号１２０を発行し、レジスタＣ出力データ１２５であるＤＡをメモリＢ１０４のアドレスＡＡからアドレスＡＤまでに格納する。メモリＢ消費電流IVは、メモリＢ１０４への書き込み動作をしたことによる消費電流であり、アドレスＡＡからアドレスＡＤまでの書き込み動作に対応した消費電流波形となる。【０１０８】
以上のように、図１７の構成によれば、パルス信号発生回路１３０６が、プリセット回路Ａ制御信号１３０２とプリセット回路Ｂ制御信号１３０３とを制御することで、演算器１０５に入力されるデータを一時的に反転させ、たとえ演算器１０５に対する入力データが毎クロックサイクル同じ値であったとしても、クロックエッジ毎に演算器１０５内部の電位が強制的に変えられ電流が消費されるため、電流解析に対するセキュリティ性が向上する。【０１０９】
なお、図１７ではプリセット回路１３００，１３０１の例としてインバータ回路を説明したが、演算部１０２の内部の各信号を固定値にリセットするような回路であっても構わない。【０１１０】
図１９は、図１７の変形例に係る演算部１０２の構成を示している。図１９の演算部１０２は、図１７に示した演算部１０２の構成に加えて、演算器１０５への入力データに対して遅延値を各ビット毎に異ならせるために、遅延回路Ａ１５００と、遅延回路Ｂ１５０１とを更に備える。なお、図１９では制御信号の図示を省略している。【０１１１】
遅延回路Ａ１５００は、プリセット回路Ａ１３００からのプリセット回路Ａ出力データ１３０４を、クロックサイクル毎に各ビットに異なる遅延量を付加し、全てのビットが同じタイミングでは変化しないようにしたデータを、演算器１０５に対して、遅延回路Ａ出力データ１５０２として出力する。【０１１２】
遅延回路Ｂ１５０１は、プリセット回路Ｂ１３０１からのプリセット回路Ｂ出力データ１３０５を、クロックサイクル毎に各ビットに異なる遅延量を付加し、全てのビットが同じタイミングでは変化しないようにしたデータを、演算器１０５に対して、遅延回路Ｂ出力データ１５０３として出力する。【０１１３】
図２０は、図１９の演算部１０２を備えた暗号演算処理回路の動作を示している。図２０によれば、暗号制御回路１０１は、ＣＰＵ１０９からの暗号演算命令１１１により、命令４を受け取る。ここで命令４は、一連の暗号演算処理において演算器１０５が２クロックサイクルの演算４を４回繰り返すものとする。【０１１４】
暗号制御回路１０１は、命令４をデコードして、メモリＡ１０３のアドレスＡ１からアドレスＡ８までのそれぞれデータＤ１、データＤ２を読み出し、データＤ１をレジスタＡ１０６に、データＤ２をレジスタＢ１０７にそれぞれ格納する。メモリＡ消費電流Ｖは、メモリＡ１０３が読み出し動作をしたことによる消費電流であり、アドレスＡ１からアドレスＡ８までの読み出し動作に対応した消費電流波形となる。【０１１５】
そして暗号制御回路１０１は、演算器制御信号１１８により演算器１０５に対して演算４を実施するよう命令するが、このときパルス信号発生回路１３０６は、プリセット回路Ａ制御信号１３０２を制御し、レジスタＡ出力データ１２２を一時的に反転させてプリセット回路Ａ出力データ１３０４に出力する。更に、遅延回路Ａ１５００がプリセット回路Ａ出力データ１３０４をクロックサイクル毎に各ビットに違う遅延量を付加して、全てのビットが同じタイミングでは変化しないようにした状態で、遅延回路Ａ出力データ１５０２に出力する。これにより演算器１０５は、本来のデータＤ１及びＤ２による演算を実施する前に、一時的にＤ１の反転データとＤ２との演算を実施し、なおかつデータの変化点において遅延量がビット毎に変化しているため、連続的に異なるデータによる演算を実施することになる。演算部消費電流Ｖは、組み合わせ回路である演算器１０５への入力レジスタであるレジスタＡ１０６とレジスタＢ１０７とにデータが格納されるたびに変化し、レジスタＡ１０６とレジスタＢ１０７との値が確定した後も、２クロックサイクルは演算が実行されているので電流を消費することになる。【０１１６】
アドレスＡ１からＡ８まで読み出したメモリＡ出力データ１２１が図２０のようにＤ１とＤ２とが連続するような場合、レジスタＡ出力データ１２２とレジスタＢ出力データ１２３との値は変化しない。このような場合、従来の構成では演算器１０５の入力は変化せず、実際には演算器１０５が動作しないため電流を消費しないが、本発明ではプリセット回路Ａ１３００及びプリセット回路Ｂ１３０１をパルス信号発生回路１３０６によって制御し、入力データを一時的に反転させ、更に遅延回路Ａ１５００及び遅延回路Ｂ１５０１により、クロックサイクル毎に各ビットに違う遅延量を付加して入力データを連続的に変化させ、演算器１０５に連続的に演算を実施させることができる。【０１１７】
次に、暗号制御回路１０１は、命令４をデコードして演算４が終了するタイミングで演算結果をレジスタＣ１０８に格納するためレジスタＣ制御信号１１９を出力し、レジスタＣ１０８にＤＡを格納する。また暗号制御回路１０１は、命令４をデコードしてメモリＢ制御信号１２０を発行し、レジスタＣ出力データ１２５であるＤＡをメモリＢ１０４のアドレスＡＡからアドレスＡＤまでに格納する。メモリＢ消費電流Ｖは、メモリＢ１０４への書き込み動作をしたことによる消費電流であり、アドレスＡＡからアドレスＡＤまでの書き込み動作に対応した消費電流波形となる。【０１１８】
以上のように、図１９の構成によれば、パルス信号発生回路１３０６が、プリセット回路Ａ制御信号１３０２とプリセット回路Ｂ制御信号１３０３とを制御することで、演算器１０５に入力されるデータを一時的に反転させ、更に遅延回路Ａ１５００及び遅延回路Ｂ１５０１により演算器１０５に入力されるデータを、クロックサイクル毎に各ビットに違う遅延値を付加して変化させることより、演算器１０５における消費電流波形は入力データの遅延の影響を受けるため、消費電流解析に対するセキュリティ性が向上する。
【産業上の利用の可能性】
【０１１９】
以上説明してきたとおり、本発明に係る暗号演算処理回路は、暗号演算等のセキュリティ性を要求されるデータ処理回路として有用であり、ＩＣカード等の用途に応用できる。
【図１】
2008056461.tif 000003
【図２】
2008056461.tif 000004
【図３】
2008056461.tif 000005
【図４】
2008056461.tif 000006
【図５】
2008056461.tif 000007
【図６】
2008056461.tif 000008
【図７】
2008056461.tif 000009
【図８】
2008056461.tif 000010
【図９】
2008056461.tif 000011
【図１０】
2008056461.tif 000012
【図１１】
2008056461.tif 000013
【図１２】
2008056461.tif 000014
【図１３】
2008056461.tif 000015
【図１４】
2008056461.tif 000016
【図１５】
2008056461.tif 000017
【図１６】
2008056461.tif 000018
【図１７】
2008056461.tif 000019
【図１８】
2008056461.tif 000020
【図１９】
2008056461.tif 000021
【図２０】
2008056461.tif 000022
【手続補正書】
【提出日】平成20年2月26日(2008.2.26)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
（削除）
【請求項２】
（削除）
【請求項３】
暗号演算用データを記憶するメモリと、
前記暗号演算用データを演算するための演算器と、
前記演算器に対する入出力データを一時的に格納しておくためのレジスタと、
暗号演算命令を受けて、前記暗号演算用データを暗号処理するために前記メモリと前記演算器と前記レジスタとに対する制御を行う暗号制御回路と、
前記暗号演算命令の実行が終了したこと示す演算完了信号を受けて、前記メモリと前記演算器と前記レジスタとを動作させるための偽装演算命令を前記暗号制御回路に対して発行する偽装演算命令回路とを備えた暗号演算処理回路であって、
前記偽装演算命令回路は、
前記暗号演算命令を記憶する暗号演算命令記憶回路と、
前記偽装演算命令を過去の暗号演算命令履歴から生成する偽装演算命令生成回路とを備えたことを特徴とする暗号演算処理回路。
【請求項４】
請求項３記載の暗号演算処理回路において、
前記偽装演算命令生成回路は、前記暗号演算命令記憶回路に記憶された暗号演算命令履歴のうち、出現頻度が高い暗号演算命令を選択して前記偽装演算命令を生成することを特徴とする暗号演算処理回路。
【請求項５】
請求項３記載の暗号演算処理回路において、
前記偽装演算命令生成回路は、前記暗号演算命令記憶回路に記憶された暗号演算命令履歴のうち、ランダムに暗号演算命令を選択して前記偽装演算命令を生成することを特徴とする暗号演算処理回路。
【請求項６】
請求項３記載の暗号演算処理回路において、
前記暗号演算命令記憶回路は、不揮発性メモリにより構成され、過去の暗号演算命令履歴を電源断以後も保持して前記偽装演算命令を生成することを特徴とする暗号演算処理回路。
【請求項７】
請求項３記載の暗号演算処理回路において、
前記暗号制御回路は、
前記暗号演算命令又は前記偽装演算命令を実行するための通常制御信号を発生させる通常制御回路と、
前記暗号演算命令又は前記偽装演算命令を実行中であっても前記通常制御回路が前記メモリや前記演算器や前記レジスタを占有する必要のない期間を示す動作状況通知回路と、
前記メモリと前記演算器と前記レジスタとの動作が停止している期間において前記メモリと前記演算器と前記レジスタとを強制的に動作させるための偽装制御信号を発生させる偽装制御回路と、
前記動作状態通知回路からの通知に応じて前記通常制御信号と前記偽装制御信号とを切り替えるセレクタとを備えたことを特徴とする暗号演算処理回路。
【請求項８】
請求項７記載の暗号演算処理回路において、
前記偽装制御回路は、
前記通常制御回路が出力した前記メモリのアドレスと、前記演算器を制御する演算器制御信号とを記憶する通常制御信号記憶回路と、
前記偽装制御信号を過去の通常制御信号履歴から生成する偽装制御信号生成回路とを備えたことを特徴とする暗号演算処理回路。
【請求項９】
請求項８記載の暗号演算処理回路において、
前記偽装制御信号生成回路は、前記通常制御信号記憶回路に記憶された通常制御信号履歴のうち、出現頻度が高い通常制御信号を選択して前記偽装制御信号を生成することを特徴とする暗号演算処理回路。
【請求項１０】
請求項８記載の暗号演算処理回路において、
前記偽装制御信号生成回路は、前記通常制御信号記憶回路に記憶された通常制御信号履歴のうち、ランダムに通常制御信号を選択して前記偽装制御信号を生成することを特徴とする暗号演算処理回路。
【請求項１１】
請求項８記載の暗号演算処理回路において、
前記通常制御信号記憶回路は、不揮発性メモリにより構成され、過去の通常制御信号履歴を電源断以降も保持して前記偽装制御信号を生成することを特徴とする暗号演算処理回路。
【請求項１２】
請求項８記載の暗号演算処理回路において、
前記メモリから読み出されたデータ中に含まれるビット値０の個数をカウントするビット値０カウント回路を更に備え、
前記暗号演算命令記憶回路は、前記ビット値０カウント回路からのビット値０カウント数を記憶する機能を更に備えたことを特徴とする暗号演算処理回路。
【請求項１３】
請求項１２記載の暗号演算処理回路において、
前記偽装演算命令生成回路は、前記暗号演算命令記憶回路に記憶されたビット値０カウント数の分布を判断し、平均に位置するビット値０カウント数を使用していた暗号演算命令を選択して前記偽装演算命令を生成することを特徴とする暗号演算処理回路。
【請求項１４】
請求項１２記載の暗号演算処理回路において、
前記偽装演算命令生成回路は、前記暗号演算命令記憶回路に記憶されたビット値０カウント数の分布を判断し、最大又は最小に位置するビット値０カウント数を使用していた暗号演算命令を選択して前記偽装演算命令を生成することを特徴とする暗号演算処理回路。
【請求項１５】
請求項１２記載の暗号演算処理回路において、
前記通常制御信号記憶回路は、前記ビット値０カウント回路からのビット値０カウント数を記憶する機能を更に備えたことを特徴とする暗号演算処理回路。
【請求項１６】
請求項１５記載の暗号演算処理回路において、
前記偽装制御信号生成回路は、前記通常制御信号記憶回路に記憶されたビット値０カウント数の分布を判断し、平均に位置するビット値０カウント数を使用していた通常制御信号を選択して前記偽装制御信号を生成することを特徴とする暗号演算処理回路。
【請求項１７】
請求項１５記載の暗号演算処理回路において、
前記偽装制御信号生成回路は、前記通常制御信号記憶回路に記憶されたビット値０カウント数の分布を判断し、最大又は最小に位置するビット値０カウント数を使用していた通常制御信号を選択して前記偽装制御信号を生成することを特徴とする暗号演算処理回路。
【請求項１８】
請求項７記載の暗号演算処理回路において、
前記演算器を構成する回路の電位をプリセットするプリセット回路を更に備え、
前記暗号制御回路は、前記演算器の動作開始クロックエッジに同期したパルス信号を発生して前記プリセット回路を動作させるためのパルス信号発生回路を更に備えたことを特徴とする暗号演算処理回路。
【請求項１９】
請求項１８記載の暗号演算処理回路において、
前記プリセット回路は、前記パルス信号発生回路のパルス信号の期間だけ、前記レジスタの出力データを反転させることを特徴とする暗号演算処理回路。
【請求項２０】
請求項１８記載の暗号演算処理回路において、
前記演算器への入力データに対して遅延値を各ビット毎に異ならせる遅延回路を更に備えたことを特徴とする暗号演算処理回路。
【手続補正書】
【提出日】平成20年3月24日(2008.3.24)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
暗号演算用データを記憶するメモリと、
前記暗号演算用データを演算するための演算器と、
前記演算器に対する入出力データを一時的に格納しておくためのレジスタと、
暗号演算命令を受けて、前記暗号演算用データを暗号処理するために前記メモリと前記演算器と前記レジスタとに対する制御を行う暗号制御回路と、
前記暗号演算命令の実行が終了したこと示す演算完了信号を受けて、前記メモリと前記演算器と前記レジスタとを動作させるための偽装演算命令を前記暗号制御回路に対して発行する偽装演算命令回路とを備えた暗号演算処理回路であって、
前記偽装演算命令回路は、
前記暗号演算命令を記憶する暗号演算命令記憶回路と、
前記偽装演算命令を過去の暗号演算命令履歴から生成する偽装演算命令生成回路とを備えたことを特徴とする暗号演算処理回路。
【請求項２】
請求項１記載の暗号演算処理回路において、
前記偽装演算命令生成回路は、前記暗号演算命令記憶回路に記憶された暗号演算命令履歴のうち、出現頻度が高い暗号演算命令を選択して前記偽装演算命令を生成することを特徴とする暗号演算処理回路。
【請求項３】
請求項１記載の暗号演算処理回路において、
前記偽装演算命令生成回路は、前記暗号演算命令記憶回路に記憶された暗号演算命令履歴のうち、ランダムに暗号演算命令を選択して前記偽装演算命令を生成することを特徴とする暗号演算処理回路。
【請求項４】
請求項１記載の暗号演算処理回路において、
前記暗号演算命令記憶回路は、不揮発性メモリにより構成され、過去の暗号演算命令履歴を電源断以後も保持して前記偽装演算命令を生成することを特徴とする暗号演算処理回路。
【請求項５】
請求項１記載の暗号演算処理回路において、
前記暗号制御回路は、
前記暗号演算命令又は前記偽装演算命令を実行するための通常制御信号を発生させる通常制御回路と、
前記暗号演算命令又は前記偽装演算命令を実行中であっても前記通常制御回路が前記メモリや前記演算器や前記レジスタを占有する必要のない期間を示す動作状況通知回路と、
前記メモリと前記演算器と前記レジスタとの動作が停止している期間において前記メモリと前記演算器と前記レジスタとを強制的に動作させるための偽装制御信号を発生させる偽装制御回路と、
前記動作状態通知回路からの通知に応じて前記通常制御信号と前記偽装制御信号とを切り替えるセレクタとを備えたことを特徴とする暗号演算処理回路。
【請求項６】
請求項５記載の暗号演算処理回路において、
前記偽装制御回路は、
前記通常制御回路が出力した前記メモリのアドレスと、前記演算器を制御する演算器制御信号とを記憶する通常制御信号記憶回路と、
前記偽装制御信号を過去の通常制御信号履歴から生成する偽装制御信号生成回路とを備えたことを特徴とする暗号演算処理回路。
【請求項７】
請求項６記載の暗号演算処理回路において、
前記偽装制御信号生成回路は、前記通常制御信号記憶回路に記憶された通常制御信号履歴のうち、出現頻度が高い通常制御信号を選択して前記偽装制御信号を生成することを特徴とする暗号演算処理回路。
【請求項８】
請求項６記載の暗号演算処理回路において、
前記偽装制御信号生成回路は、前記通常制御信号記憶回路に記憶された通常制御信号履歴のうち、ランダムに通常制御信号を選択して前記偽装制御信号を生成することを特徴とする暗号演算処理回路。
【請求項９】
請求項６記載の暗号演算処理回路において、
前記通常制御信号記憶回路は、不揮発性メモリにより構成され、過去の通常制御信号履歴を電源断以降も保持して前記偽装制御信号を生成することを特徴とする暗号演算処理回路。
【請求項１０】
請求項６記載の暗号演算処理回路において、
前記メモリから読み出されたデータ中に含まれるビット値０の個数をカウントするビット値０カウント回路を更に備え、
前記暗号演算命令記憶回路は、前記ビット値０カウント回路からのビット値０カウント数を記憶する機能を更に備えたことを特徴とする暗号演算処理回路。
【請求項１１】
請求項１０記載の暗号演算処理回路において、
前記偽装演算命令生成回路は、前記暗号演算命令記憶回路に記憶されたビット値０カウント数の分布を判断し、平均に位置するビット値０カウント数を使用していた暗号演算命令を選択して前記偽装演算命令を生成することを特徴とする暗号演算処理回路。
【請求項１２】
請求項１０記載の暗号演算処理回路において、
前記偽装演算命令生成回路は、前記暗号演算命令記憶回路に記憶されたビット値０カウント数の分布を判断し、最大又は最小に位置するビット値０カウント数を使用していた暗号演算命令を選択して前記偽装演算命令を生成することを特徴とする暗号演算処理回路。
【請求項１３】
請求項１０記載の暗号演算処理回路において、
前記通常制御信号記憶回路は、前記ビット値０カウント回路からのビット値０カウント数を記憶する機能を更に備えたことを特徴とする暗号演算処理回路。
【請求項１４】
請求項１３記載の暗号演算処理回路において、
前記偽装制御信号生成回路は、前記通常制御信号記憶回路に記憶されたビット値０カウント数の分布を判断し、平均に位置するビット値０カウント数を使用していた通常制御信号を選択して前記偽装制御信号を生成することを特徴とする暗号演算処理回路。
【請求項１５】
請求項１３記載の暗号演算処理回路において、
前記偽装制御信号生成回路は、前記通常制御信号記憶回路に記憶されたビット値０カウント数の分布を判断し、最大又は最小に位置するビット値０カウント数を使用していた通常制御信号を選択して前記偽装制御信号を生成することを特徴とする暗号演算処理回路。
【請求項１６】
請求項５記載の暗号演算処理回路において、
前記演算器を構成する回路の電位をプリセットするプリセット回路を更に備え、
前記暗号制御回路は、前記演算器の動作開始クロックエッジに同期したパルス信号を発生して前記プリセット回路を動作させるためのパルス信号発生回路を更に備えたことを特徴とする暗号演算処理回路。
【請求項１７】
請求項１６記載の暗号演算処理回路において、
前記プリセット回路は、前記パルス信号発生回路のパルス信号の期間だけ、前記レジスタの出力データを反転させることを特徴とする暗号演算処理回路。
【請求項１８】
請求項１６記載の暗号演算処理回路において、
前記演算器への入力データに対して遅延値を各ビット毎に異ならせる遅延回路を更に備えたことを特徴とする暗号演算処理回路。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号演算処理回路に関し、更に詳細には暗号鍵等の秘匿データの解析を防止する手段を備えた暗号演算処理回路に関するものである。
【背景技術】
【０００２】
昨今、ＩＣカードやＩＣカード機能搭載携帯電話等による電子商取引や自動改札等の発展に伴い、ＩＣカード等のセキュリティ確保が重要な問題となっている。
【０００３】
しかし、ＩＣカードが暗号演算処理を行っている間の消費電力（消費電流）を観測し解析することでＩＣカード内部の暗号鍵や暗号演算処理内容を解析しようという方法が見出されてきている。代表的な解析手段として、消費電流の変化を直接解析に用いる方法である単純電力解析（Simple Power Analysis：ＳＰＡ）や、観測データに対して統計的処理を行うことで秘密の暗号鍵を推定する方法である電力差分解析（Differential Power Analysis：ＤＰＡ）等がある。
【０００４】
従来の単純電力解析対策としては、暗号演算処理手順のタイミングを変化させるための擬似的処理を通常処理の間に挿入したり、動作クロック周期を変化させて消費電流を時間軸上で変化させたりする手法が知られている。これらの手法では、毎回、暗号演算処理の手順やタイミングが変わり、時間軸でみた場合の消費電流波形が変化するため、電流波形を時間軸上で比較するというデータ依存性の解析を実質的に不可能にして機密保護を図ろうとしている（特許文献１参照）。
【０００５】
従来の電力差分解析対策としては、ノイズ生成回路により通常処理の消費電流にノイズ電流を重畳する手法が知られている。この手法では、同じ演算が複数繰り返し行われても電流波形が異なることで、差分解析を困難とし機密保護を図ろうとしている（特許文献２参照）。
【特許文献１】特開２０００−２５９７９９号公報
【特許文献２】特開２００５−２５２７０５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
単純電力解析対策として、暗号演算処理手順のタイミングを変化させるための擬似的処理を追加しすぎると、暗号演算実行が終了するまでの時間が延びてしまい、暗号演算処理の性能が大きく低下するという問題があった。逆に、暗号演算処理手順のタイミングを変化させるための擬似的処理が少ない場合は、暗号演算処理の性能低下は小さいが、通常暗号処理による電流波形変化が外部に読み取られやすいといった問題があった。
【０００７】
単純電力解析対策として、動作クロック周期を変化させて消費電流を時間軸上で変化させる手法に関しては、クロック周期等の情報は外部観測されやすく、観測された電流波形をデジタル信号処理で一定のクロック周期の電流波形として修復解析可能であるといった問題があった。
【０００８】
電力差分解析対策として、ノイズ生成回路により通常処理の消費電流にノイズ電流を重畳する手法に関しては、昨今のＬＳＩ解析技術である液晶解析、発光解析等によりＬＳＩ内部で電流を消費している物理的な位置が特定可能である。液晶解析によれば、特定の箇所の電流変化を液晶の透過度変化として観測可能であり、電流解析可能であるといった問題があった。
【課題を解決するための手段】
【０００９】
上記課題を解決するために、本発明による暗号演算処理回路は、暗号演算用データを記憶するメモリと、この暗号演算用データを演算するための演算器と、この演算器に対する入出力データを一時的に格納しておくためのレジスタと、暗号演算命令を受けて暗号演算用データを暗号処理するためにメモリと演算器とレジスタとに対する制御を行う暗号制御回路と、暗号演算命令の実行が終了したこと示す演算完了信号を受けてメモリと演算器とレジスタとを動作させるための偽装演算命令を暗号制御回路に対して発行する偽装演算命令回路とを備えたことを特徴とするものである。
【発明の効果】
【００１０】
本発明の暗号演算処理回路は、偽装演算命令回路によって、ＣＰＵ等からの暗号演算命令の実行が終了した後に、通常であれば停止しているメモリや演算器やレジスタを動作させる偽装演算命令を発行することで、メモリや演算器やレジスタが暗号演算命令と同じように動作し電流を消費するため、暗号演算処理の終了や開始等のタイミングを消費電流の大小等で特定することが困難となり、セキュリティ性が向上する。更に、偽装演算命令は、あくまでＣＰＵ等からの暗号演算命令が発行されていない期間のみ発行されるので、ＣＰＵ等からの暗号演算命令の発行を遅延させたりするものではないため、暗号演算処理のパフォーマンスを落とすことがない。
【発明を実施するための最良の形態】
【００１１】
以下、本発明を実施するための最良の形態について図面を参照して説明する。なお、図中同一又は相当部分には同一の符号を付して、その説明は繰り返さない。
【００１２】
図１は、本発明に係る暗号演算処理回路の構成例を示している。図１の暗号演算処理回路は、偽装演算命令回路１００と、暗号制御回路１０１と、演算部１０２と、メモリＡ１０３と、メモリＢ１０４とを備える。演算部１０２は、演算器１０５と、レジスタＡ１０６と、レジスタＢ１０７と、レジスタＣ１０８とを備える。
【００１３】
偽装演算命令回路１００は、ＣＰＵ１０９から出力される暗号演算命令１１１により暗号演算が開始されることを認識し、その後に暗号演算命令１１１の実行が終了したことを示す信号である演算完了信号１１４を受けて、ＣＰＵ１０９に対して暗号演算完了信号１１２を出力するとともに、暗号制御回路１０１に対して、偽装演算命令１１３を発行する。その後、偽装演算命令１１３の実行が終了したことを示す信号でもある演算完了信号１１４を受けて偽装演算が完了したことを認識すると、偽装演算命令１１３を再度発行する。偽装演算命令１１３の発行は、新たにＣＰＵ１０９から暗号演算命令１１１が発行されるまで繰り返す。
【００１４】
暗号制御回路１０１は、ＣＰＵ１０９からの暗号演算命令１１１や偽装演算命令回路１００からの偽装演算命令１１３を受け、メモリＡ１０３とメモリＢ１０４と演算器１０５とレジスタＡ１０６とレジスタＢ１０７とレジスタＣ１０８とを制御するため、メモリＡ制御信号１１５とメモリＢ制御信号１２０と演算器制御信号１１８とレジスタＡ制御信号１１６とレジスタＢ制御信号１１７とレジスタＣ制御信号１１９とを出力する。また暗号制御回路１０１は、暗号演算命令１１１や偽装演算命令１１３の実行が終了すると、演算完了信号１１４を出力する。偽装演算命令１１３の処理が実行中にＣＰＵ１０９から暗号演算命令１１１が発行された場合は、偽装演算命令１１３による制御を強制終了させ、暗号演算命令１１１の処理を開始する。
【００１５】
メモリＡ１０３は、例えばクロック１１０の立ち下がりエッジに同期したメモリであり、暗号制御回路１０１からの、メモリＡ制御信号１１５により示されるアドレスからメモリＡ出力データ１２１を出力する。
【００１６】
メモリＢ１０４は、例えばクロック１１０の立ち下がりエッジに同期したメモリであり、暗号制御回路１０１からの、メモリＢ制御信号１２０により示されるアドレスに対し、レジスタＣ出力データ１２５を書き込む。
【００１７】
演算器１０５は組み合わせ回路であり、レジスタＡ出力データ１２２及びレジスタＢ出力データ１２３を入力として演算器制御信号１１８による演算を行い、演算器出力データ１２４に結果を出力する。
【００１８】
レジスタＡ１０６は、メモリＡ出力データ１２１を入力とし、暗号制御回路１０１からのレジスタＡ制御信号１１６が有効になった場合に、メモリＡ出力データ１２１を保持し、レジスタＡ出力データ１２２に出力する。
【００１９】
レジスタＢ１０７は、メモリＡ出力データ１２１を入力とし、暗号制御回路１０１からのレジスタＢ制御信号１１７が有効になった場合に、メモリＡ出力データ１２１を保持し、レジスタＢ出力データ１２３に出力する。
【００２０】
レジスタＣ１０８は、演算器出力データ１２４を入力とし、暗号制御回路１０１からのレジスタＣ制御信号１１９が有効になった場合に、演算器出力データ１２４を保持し、レジスタＣ出力データ１２５に出力する。
【００２１】
ＣＰＵ１０９は、暗号制御回路１０１に対して、暗号演算命令１１１を発行し暗号演算処理を実施させ、また偽装演算命令回路１００からの暗号演算完了信号１１２を受けて、暗号演算処理の終了を認識する。
【００２２】
図２は、図１の暗号演算処理回路の動作を示している。ここでは例として、まずＣＰＵ１０９から命令１という暗号演算命令１１１が発行されるものとする。
【００２３】
暗号制御回路１０１は、命令１をデコードして、メモリＡ１０３のアドレスＡ１、アドレスＡ２からそれぞれデータＤ１、データＤ２を読み出し、データＤ１をレジスタＡ１０６に、データＤ２をレジスタＢ１０７にそれぞれ格納する。メモリＡ消費電流IIは、メモリＡ１０３が読み出し動作をしたことによる消費電流であり、アドレスＡ１、アドレスＡ２の読み出し動作に対応した消費電流波形となる。
【００２４】
暗号制御回路１０１は、命令１をデコードして演算器制御信号１１８として演算１を出力する。この例で演算１は、出力結果が確定するまでに最低５クロックサイクル必要な命令とする。演算器１０５は、レジスタＡ出力データ１２２の出力Ｄ１とレジスタＢ出力データ１２３の出力Ｄ２とを演算し、３クロックサイクル後に、演算器出力データ１２４としてＤＡを出力する。演算部消費電流IIは、組み合わせ回路である演算器１０５への入力レジスタであるレジスタＡ１０６及びレジスタＢ１０７にデータが格納されるたびに変化し、レジスタＡ１０６とレジスタＢ１０７との値が確定した後も、３クロックサイクルは演算が実行されているので電流を消費することになる。
【００２５】
暗号制御回路１０１は、命令１をデコードして演算１が終了するタイミングで演算結果をレジスタＣ１０８に格納するためレジスタＣ制御信号１１９を出力し、レジスタＣ１０８にＤＡを格納する。そして暗号制御回路１０１は、命令１をデコードしてメモリＢ制御信号１２０を発行し、レジスタＣ出力データ１２５であるＤＡをメモリＢ１０４のアドレスＡＡに格納する。メモリＢ消費電流IIは、メモリＢ１０４への書き込み動作をしたことによる消費電流であり、アドレスＡＡへの書き込み動作に対応した消費電流波形となる。
【００２６】
その後、暗号制御回路１０１は、ＣＰＵ１０９からの命令１の実行が終了したことを示す演算完了信号１１４を偽装演算命令回路１００に出力する。
【００２７】
偽装演算命令回路１００は、ＣＰＵ１０９から出力される暗号演算命令１１１により命令１の暗号演算が開始されたことを認識した後に、命令１の実行が終了したことを示す信号である演算完了信号１１４を受けて、ＣＰＵ１０９に対して暗号演算完了信号１１２を出力する。以降、この命令１の暗号演算の開始から終了までの期間を「暗号演算処理１」の期間と定義する。
【００２８】
ＣＰＵ１０９では、暗号演算完了信号１１２を受けて新たな暗号演算命令１１１である命令２を発行するために、プログラム処理期間として数十クロックサイクルが必要である。ただし、図２では、命令１の暗号演算完了信号１１２を受けてから、８クロック後に命令２を発行した例を示す。
【００２９】
偽装演算命令回路１００は暗号制御回路１０１に対して、偽装演算命令１１３として命令Ｇを発行する。ここでは、命令Ｇは偽装演算命令回路１００から固定的に出力する命令であるとし、メモリＡ１０３のアドレスａ１、アドレスａ２からそれぞれデータｄ１、データｄ２を読み出し、データｄ１をレジスタＡ１０６に、データｄ２をレジスタＢ１０７にそれぞれ格納し、演算器１０５で出力結果が確定するまでに２クロックサイクル必要な演算を行い、レジスタＣ１０８に演算結果としてｄｘを格納し、メモリＢ１０４のアドレスａｘにｄｘを格納した後、演算完了信号１１４を偽装演算命令回路１００に出力して命令Ｇの処理は終了する。なお、メモリＢ制御信号１２０のデータ格納用アドレスａｘは、暗号演算命令１１１等が使用するメモリ空間を破壊しないことが必要であることから、ＣＰＵ１０９により使用されていないアドレスがデータ格納用アドレスとして使用される。
【００３０】
偽装演算命令回路１００は、偽装演算命令１１３の実行が終了したことを示す演算完了信号１１４により、新たにＣＰＵ１０９から暗号演算命令１１１が発行されるまで偽装演算命令１１３の発行を繰り返すが、図２の例では同じタイミングでＣＰＵ１０９から新たな暗号演算命令１１１である命令２が発行されたため、偽装演算命令１１３の発行を中止する。以降、この偽装演算命令１１３の実行開始から終了までの期間を「偽装演算処理」の期間と定義する。
【００３１】
図２において、図１の暗号演算処理回路の全体における消費電流波形は、メモリＡ消費電流IIと演算部消費電流IIとメモリＢ消費電流IIとの加算となり、「回路全体の消費電流II」が合計された消費電流波形である。図２において、回路全体の消費電流IIは「暗号演算処理１」の期間及び「偽装演算処理」の期間にわたり、ほぼ連続的な消費電流波形となっている。
【００３２】
図３は、図１の暗号演算処理回路に本発明の構成要素である偽装演算命令回路１００がない場合の動作を示している。図３では、図２における「偽装演算処理」の期間に相当するクロックサイクル期間に暗号演算処理回路が動作していないので回路全体の消費電流Ｉの波形が連続してＬＯＷレベルの期間となり、消費電流波形の変化から命令実行の終了、開始のタイミングが判明してしまうことが分かる。
【００３３】
以上のように、図１の暗号演算処理回路では、偽装演算命令回路１００によって、ＣＰＵ１０９等からの暗号演算命令１１１の実行が終了した後に、通常であれば停止しているメモリＡ１０３やメモリＢ１０４や演算器１０５やレジスタＡ１０６やレジスタＢ１０７やレジスタＣ１０８を動作させる偽装演算命令１１３を発行することで、メモリＡ１０３やメモリＢ１０４や演算器１０５やレジスタＡ１０６やレジスタＢ１０７やレジスタＣ１０８が暗号演算命令１１１を発行したときと同じように動作し電流を消費するため、暗号演算処理の終了や開始等のタイミングを消費電流の大小等で特定することが困難となり、セキュリティ性が向上する。
【００３４】
更に偽装演算命令１１３は、ＣＰＵ１０９等からの暗号演算命令１１１が発行されていない期間のみ発行されるので、ＣＰＵ１０９等からの暗号演算命令１１１の発行を遅延させたりするものではないため、暗号演算処理のパフォーマンスを落とすことがない。
【００３５】
なお、ここでは偽装演算命令１１３は、固定的であり常に同じ命令を発行するものとしたが、ＣＰＵ１０９から直前に発行された暗号演算命令１１１と同じ命令を偽装演算命令１１３として発行してもよい。これにより暗号演算命令１１１の実行が終了しても、同じ消費電流波形を持つ偽装演算命令１１３が実行されるので、どのタイミングで暗号演算命令１１１の実行が終了したのかの解析が困難となり、電流解析に対するセキュリティ性が更に向上する。
【００３６】
なお、メモリＡ１０３とメモリＢ１０４とは、同一のメモリでも構わない。更に、演算器１０５の入力と、その入力データを保持するレジスタは３つ以上あっても構わない。更に、演算器１０５は加算器、乗算器等の複数の演算要素から構成されても構わない。
【００３７】
図４は、図１中の偽装演算命令回路１００の詳細構成例を示している。図４の偽装演算命令回路１００は、ＣＰＵ１０９からの暗号演算命令１１１を記憶する暗号演算命令記憶回路４００と、偽装演算命令１１３を過去の暗号演算命令履歴から生成する偽装演算命令生成回路４０１とを備える。
【００３８】
暗号演算命令記憶回路４００は、ＣＰＵ１０９が出力する暗号演算命令１１１を、暗号演算命令履歴情報４０２として記憶する。
【００３９】
偽装演算命令生成回路４０１は、暗号演算命令１１１の実行が終了したことを示す信号である演算完了信号１１４を受けて、暗号演算命令記憶回路４００から出力される暗号演算命令履歴情報４０２をもとに、偽装演算命令１１３を生成する。
【００４０】
図５は、図４中の暗号演算命令記憶回路４００の記憶内容の例を示している。図５に示すように、暗号演算命令記憶回路４００は、過去に発行された複数の暗号演算命令１１１を、ＲＡＭで形成されるＦＩＦＯ（FIRST-IN FIRST-OUT）に記憶する。ここでは、暗号演算命令１１１が記憶されているＦＩＦＯアドレスをスロットと呼ぶこととする。
【００４１】
図５ではスロットを５個備え、過去の暗号演算命令１１１をスロット１から埋めてゆき、スロットが一杯になった場合スロット５に格納された暗号演算命令１１１から廃棄してゆく。ここでは、スロット１にはアドレス２及びアドレス３からの各々１６０ビット長のデータを入力とする乗算でアドレス０に結果を出力する命令が格納されており、スロット２にはアドレス０及びアドレス１からの各々１６０ビット長のデータを入力とする加算でアドレス１に結果を出力する命令が格納されており、スロット３にはアドレス４及びアドレス５からの各々１６０ビット長のデータを入力とする乗算でアドレス０に結果を出力する命令が格納されており、スロット４にはアドレス０及びアドレス１からの各々１６０ビット長のデータを入力とする加算でアドレス１に結果を出力する命令が格納されており、スロット５にはアドレス１及びアドレス６からの各々１６０ビット長のデータを入力とする減算でアドレス１に結果を出力する命令が格納されている。
【００４２】
偽装演算命令生成回路４０１は、暗号演算命令１１１の実行が終了したことを示す信号である演算完了信号１１４を受けて、スロット１からスロット５までに記憶されている暗号演算命令１１１を検索し、１６０ビットを入力とする乗算が２回、１６０ビットを入力とする加算が２回、１６０ビットを入力とする減算が１回であることを認識し、出現頻度では乗算と加算とが同数であるが一番最後に発行されたスロット１には乗算が格納されていたことから加算を選択することとし、スロット４を選択して、スロット４の暗号演算命令１１１をもとにアドレス０及びアドレス１からの各々１６０ビット長のデータを入力とする加算でアドレスＡＸに結果を出力する偽装演算命令１１３を生成する。データ格納用アドレスＡＸは、暗号演算命令１１１等が使用するメモリ空間を破壊しないことが必要であることから、ＣＰＵ１０９により使用されていないアドレスがデータ格納用アドレスとして使用される。
【００４３】
以上のように、図４の構成では、ＣＰＵ１０９から逐次発行される暗号演算命令１１１をＲＡＭ等に記憶し、記憶された暗号演算命令１１１から出現頻度の高い暗号演算命令１１１を選択して偽装演算命令１１３として発行するため、電流解析を実施しても、逐次発行された暗号演算命令１１１が実行されているのか、それとも頻度が高かった暗号演算命令１１１を偽装演算命令１１３として実行されているのかの区別をつけることが困難であり、電流解析に対するセキュリティ性が更に向上する。
【００４４】
なお、偽装演算命令生成回路４０１は、記憶された暗号演算命令１１１からランダムに暗号演算命令１１１を選択して偽装演算命令１１３として発行してもよい。これにより電流解析を実施しても、逐次発行された暗号演算命令１１１が実行されているのかそれともランダムに過去の暗号演算命令１１１を偽装演算命令１１３として実行しているのかの区別をつけることが困難であり、電流解析に対するセキュリティ性が更に向上する。
【００４５】
また、暗号演算命令記憶回路４００は不揮発性メモリにより構成されてもよい。これにより、ＣＰＵ１０９等から逐次発行される暗号演算命令１１１を不揮発性メモリに記憶するので、電源断以降も過去の暗号演算命令１１１の履歴を記憶でき、記憶された暗号演算命令１１１から暗号演算命令１１１を選択して偽装演算命令１１３として発行するため、電源投入から暗号演算を実行し電源断等のシーケンスを繰り返し実行して電流波形変化を観測するような電流解析手法においても、暗号演算命令１１１が実行されているのかそれとも過去の暗号演算命令１１１を偽装演算命令１１３として実行されているのか区別をつけることが困難であり、電流解析に対するセキュリティ性が更に向上する。
【００４６】
なお、暗号演算命令記憶回路４００のスロット数はここでは５個としたが、スロット数が増減しても構わない。
【００４７】
さて、ＣＰＵ１０９等からの暗号演算命令１１１を実行中であってもクロックサイクル単位ではメモリ１０３，１０４と演算器１０５とレジスタ１０６，１０７，１０８とが停止している期間が存在している。また、偽装演算命令１１３が実行中であってもクロックサイクル単位ではメモリ１０３，１０４と演算器１０５とレジスタ１０６，１０７，１０８とが停止している期間が存在している。この点に着目し、次に説明する例では、これらの演算資源１０３〜１０８を常に動作させて電流を消費させることで、電流解析に対するセキュリティ性を更に向上させる。
【００４８】
図６は、図１中の暗号制御回路１０１の詳細構成例を示している。図６の暗号制御回路１０１は、動作状況通知回路６００と、通常制御回路６０１と、偽装制御回路６０２と、セレクタ６０３とを備える。
【００４９】
通常制御回路６０１は、暗号演算命令１１１又は偽装演算命令１１３を受けて、通常制御回路メモリＡ制御信号６０４、通常制御回路レジスタＡ制御信号６０５、通常制御回路レジスタＢ制御信号６０６、通常制御回路演算器制御信号６０７、通常制御回路レジスタＣ制御信号６０８、通常制御回路メモリＢ制御信号６０９（以降これらの制御信号を通常制御信号と呼ぶ）をセレクタ６０３に対して出力する。更に、暗号演算命令１１１又は偽装演算命令１１３による制御が終了すると、偽装演算命令回路１００に対して、演算完了信号１１４を出力する。
【００５０】
偽装制御回路６０２は、偽装制御回路メモリＡ制御信号６１０、偽装制御回路レジスタＡ制御信号６１１、偽装制御回路レジスタＢ制御信号６１２、偽装制御回路演算器制御信号６１３、偽装制御回路レジスタＣ制御信号６１４、偽装制御回路メモリＢ制御信号６１５（以降これらの制御信号を偽装制御信号と呼ぶ）をセレクタ６０３に対して出力する。
【００５１】
動作状況通知回路６００は、暗号演算命令１１１又は偽装演算命令１１３の実行中であっても通常制御回路６０１からの通常制御信号がメモリＡ１０３やメモリＢ１０４や演算器１０５やレジスタＡ１０６やレジスタＢ１０７やレジスタＣ１０８を占有する必要のないクロックサイクル期間を示す６ビットの動作状況通知信号［５：０］６１６をセレクタ６０３に出力する。
【００５２】
セレクタ６０３は、動作状況通知信号［５：０］６１６により、動作状況通知信号［０］で通常制御回路メモリＡ制御信号６０４又は偽装制御回路メモリＡ制御信号６１０からメモリＡ制御信号１１５を選択し、動作状況通知信号［１］で通常制御回路レジスタＡ制御信号６０５又は偽装制御回路レジスタＡ制御信号６１１からレジスタＡ制御信号１１６を選択し、動作状況通知信号［２］で通常制御回路レジスタＢ制御信号６０６又は偽装制御回路レジスタＢ制御信号６１２からレジスタＢ制御信号１１７を選択し、動作状況通知信号［３］で通常制御回路演算器制御信号６０７又は偽装制御回路演算器制御信号６１３から演算器制御信号１１８を選択し、動作状況通知信号［４］で通常制御回路レジスタＣ制御信号６０８又は偽装制御回路レジスタＣ制御信号６１４からレジスタＣ制御信号１１９を選択し、動作状況通知信号［５］で通常制御回路メモリＢ制御信号６０９又は偽装制御回路メモリＢ制御信号６１５からメモリＢ制御信号１２０を選択する。
【００５３】
次に、以上のように構成された暗号演算処理回路の動作について図７〜図１１を参照しながら説明する。なお、図７〜図１０には、暗号演算命令１１１を正しく実行するために暗号制御回路１０１からの各種制御信号がメモリＡ１０３やメモリＢ１０４や演算器１０５やレジスタＡ１０６やレジスタＢ１０７やレジスタＣ１０８を占有しなければならない期間を、それぞれ「メモリＡ制御占有期間」、「メモリＢ制御占有期間」、「演算器制御占有期間」、「レジスタＡ制御占有期間」、「レジスタＢ制御占有期間」、「レジスタＣ制御占有期間」として示す。
【００５４】
図７は、動作状況通知回路６００からの動作状況通知信号［０］６１６により、通常制御回路メモリＡ制御信号６０４又は偽装制御回路メモリＡ制御信号６１０からメモリＡ制御信号１１５を選択する例である。
【００５５】
動作状況通知信号［０］６１６は、暗号演算命令１１１をデコードした結果、２クロックサイクルは通常制御回路メモリＡ制御信号６０４を選択し、それ以外は偽装制御回路メモリＡ制御信号６１０を選択する信号となる。通常制御回路メモリＡ制御信号６０４は、アドレスＡ１、アドレスＡ２の読み出し信号であり、偽装制御回路メモリＡ制御信号６１０は毎クロック毎にインクリメントされるアドレスＡ６からＡ１６までの読み出し信号を出力している。
【００５６】
セレクタ６０３は、動作状況通知信号［０］６１６により、通常制御回路メモリＡ制御信号６０４又は偽装制御回路メモリＡ制御信号６１０からメモリＡ１０３に毎クロックサイクルアクセスするようなメモリＡ制御信号１１５を出力する。このメモリＡ制御信号１１５により、メモリＡ１０３からメモリＡ出力データ１２１が読み出され、この結果としてメモリＡ消費電流IIIのような毎クロックサイクル電流を消費する消費電流波形が得られる。
【００５７】
図８は、動作状況通知回路６００からの動作状況通知信号［１］６１６により通常制御回路レジスタＡ制御信号６０５又は偽装制御回路レジスタＡ制御信号６１１からレジスタＡ制御信号１１６を選択し、かつ動作状況通知信号［２］６１６により通常制御回路レジスタＢ制御信号６０６又は偽装制御回路レジスタＢ制御信号６１２からレジスタＢ制御信号１１７を選択する例である。
【００５８】
動作状況通知信号［１］６１６は、暗号演算命令１１１をデコードした結果、６クロックサイクルは通常制御回路レジスタＡ制御信号６０５を選択し、それ以外は偽装制御回路レジスタＡ制御信号６１１を選択する信号となる。通常制御回路レジスタＡ制御信号６０５はメモリＡ出力データ１２１からの値Ｄ１をレジスタＡ１０６に格納するための信号であり、偽装制御回路レジスタＡ制御信号６１１はメモリＡ出力データ１２１をレジスタＡ１０６に毎クロックサイクル取り込むため常にＨｉｇｈレベルの信号を出力している。
【００５９】
動作状況通知信号［２］６１６は、暗号演算命令１１１をデコードした結果、５クロックサイクルは通常制御回路レジスタＢ制御信号６０６を選択し、それ以外は偽装制御回路レジスタＢ制御信号６１２を選択する信号となる。通常制御回路レジスタＢ制御信号６０６はメモリＡ出力データ１２１からの値Ｄ２をレジスタＢ１０７に格納するための信号であり、偽装制御回路レジスタＢ制御信号６１２はメモリＡ出力データ１２１をレジスタＢ１０７に毎クロックサイクル取り込むため常にＨｉｇｈレベルの信号を出力している。
【００６０】
セレクタ６０３は、動作状況通知信号［１］６１６により、メモリＡ出力データ１２１からのデータＤ６、データＤ７、データＤ１、データＤ１４、データＤ１５、データＤ１６をレジスタＡ１０６に取り込むようなレジスタＡ制御信号１１６を出力する。またセレクタ６０３は、動作状況通知信号［２］６１６により、メモリＡ出力データ１２１からのデータＤ６、データＤ７、データＤ１、データＤ２、データＤ１４、データＤ１５、データＤ１６をレジスタＢ１０７に取り込むようなレジスタＢ制御信号１１７を出力する。
【００６１】
図９は、動作状況通知回路６００からの動作状況通知信号［３］６１６により通常制御回路演算器制御信号６０７又は偽装制御回路演算器制御信号６１３から演算器制御信号１１８を選択し、かつ動作状況通知信号［４］６１６により通常制御回路レジスタＣ制御信号６０８又は偽装制御回路レジスタＣ制御信号６１４からレジスタＣ制御信号１１９を選択する例である。
【００６２】
動作状況通知信号［３］６１６は、暗号演算命令１１１をデコードした結果、５クロックサイクルは通常制御回路演算器制御信号６０７を選択し、それ以外は偽装制御回路演算器制御信号６１３を選択する信号である。通常制御回路演算器制御信号６０７は、レジスタＡ出力データ１２２からの値Ｄ１とレジスタＢ出力データ１２３からの値Ｄ２とを入力として演算器１０５で演算１を実行させるための信号であり、偽装制御回路演算器制御信号６１３はレジスタＡ出力データ１２２とレジスタＢ出力データ１２３とを入力とし演算器１０５を動作させるための信号であり、この例では毎クロックサイクル単位で演算０から演算１０までを実行させるための信号を出力している。
【００６３】
動作状況通知信号［４］６１６は、暗号演算命令１１１をデコードした結果、１クロックサイクルは通常制御回路レジスタＣ制御信号６０８を選択し、それ以外は偽装制御回路レジスタＣ制御信号６１４を選択する信号である。通常制御回路レジスタＣ制御信号６０８は、演算器出力データ１２４からの演算結果である値ＤＡをレジスタＣ１０８に格納するための信号であり、偽装制御回路レジスタＣ制御信号６１４は演算器出力データ１２４をレジスタＣ１０８に毎クロックサイクル取り込むため常にＨｉｇｈレベルの信号を出力している。
【００６４】
セレクタ６０３は、動作状況通知信号［３］６１６により、メモリＡ出力データ１２２とメモリＢ出力データ１２３とを演算器１０５の入力として演算器１０５で演算０、演算１、演算２、演算１、演算８、演算９、演算１０を実行するような演算器制御信号１１８を出力する。またセレクタ６０３は、動作状況通知信号［４］６１６により、クロックサイクル毎に演算器出力データ１２４をレジスタＣ１０８に取り込むようなレジスタＣ制御信号１１９を出力する。これら演算器制御信号１１８及びレジスタＣ制御信号１１９により、演算器１０５で毎クロックサイクル何らかの演算が実行され、レジスタＣ１０８に格納するので、演算部消費電流IIIのような毎クロックサイクル電流を消費する消費電流波形が得られる。
【００６５】
図１０は、動作状況通知回路６００からの動作状況通知信号［５］６１６により、通常制御回路メモリＢ制御信号６０９又は偽装制御回路メモリＢ制御信号６１５からメモリＢ制御信号１２０を選択する例である。
【００６６】
動作状況通知信号［５］６１６は、暗号演算命令１１１をデコードした結果、１クロックサイクルは通常制御回路メモリＢ制御信号６０９を選択し、それ以外は偽装制御回路メモリＢ制御信号６１５を選択する信号となる。通常制御回路メモリＢ制御信号６０９は、メモリＢ１０４のアドレスＡＡに対するレジスタＣ出力データ値ＤＡの書き込み信号であり、偽装制御回路メモリＢ制御信号６１５は毎クロック毎にメモリＢ１０４の固定アドレスＡＸに対するレジスタＣ出力データ１２５の書き込み信号である。偽装制御回路メモリＢ制御信号６１５によるメモリＢ１０４への書き込み動作に関しては、アドレスによっては暗号演算命令１１１等で必要なデータを上書きしてしまう恐れがあるので、ＣＰＵ１０９から使用されていないアドレスＡＸがデータ格納用アドレスとして使用される。
【００６７】
セレクタ６０３は、動作状況通知信号［５］６１６により、通常制御回路メモリＢ制御信号６０９又は偽装制御回路メモリＢ制御信号６１５からメモリＢ１０４に毎クロックサイクル書き込みするようなメモリＢ制御信号１２０を出力する。このメモリＢ制御信号１２０により、メモリＢ１０４にレジスタＣ出力データ１２５が書き込まれ、この結果としてメモリＢ消費電流IIIのような毎クロックサイクル電流を消費する消費電流波形が得られる。
【００６８】
図１１は、図７〜図１０をまとめた図である。図１１において暗号演算処理回路における消費電流波形は、メモリＡ消費電流IIIと演算部消費電流IIIとメモリＢ消費電流IIIとの加算となり、「回路全体の消費電流III」が合計された消費電流波形である。回路全体の消費電流IIIは、図２における回路全体の消費電流IIの「暗号演算処理１」の期間と比べてもより一層連続的な消費電流波形となっている。
【００６９】
なお、図７〜図１１にわたり暗号演算命令１１１の実行中における暗号制御回路１０１の動作について説明したが、偽装演算命令１１３の実行の場合も同様である。
【００７０】
以上のように、図６の構成では、暗号演算命令１１１又は偽装演算命令１１３を実行するための通常制御信号６０４〜６０９を発生させる通常制御回路６０１と、暗号演算命令１１１又は偽装演算命令１１３の実行中であっても通常制御回路６０１がメモリＡ１０３やメモリＢ１０４や演算器１０５やレジスタＡ１０６やレジスタＢ１０７やレジスタＣ１０８を占有する必要のないクロックサイクル期間を示す動作状況通知回路６００と、メモリＡ１０３やメモリＢ１０４や演算器１０５やレジスタＡ１０６やレジスタＢ１０７やレジスタＣ１０８を強制的に動作させるための偽装制御信号６１０〜６１５を発生させる偽装制御回路６０２と、動作状況通知回路６００からの通知に応じて通常制御信号６０４〜６０９と偽装制御信号６１０〜６１５とを切り替えるセレクタ６０３とを備えるので、通常制御回路６０１がメモリＡ１０３やメモリＢ１０４や演算器１０５やレジスタＡ１０６やレジスタＢ１０７やレジスタＣ１０８を占有する必要のない期間は制御を通常制御回路６０１から偽装制御回路６０２に切り替えることで、常にメモリＡ１０３やメモリＢ１０４や演算器１０５やレジスタＡ１０６やレジスタＢ１０７やレジスタＣ１０８を動作させて電流を消費させることができ、暗号演算命令１１１又は偽装演算命令１１３の実行中においても消費電流が更に均一になることで、電流解析に対するセキュリティ性が更に向上する。
【００７１】
図１２は、図６中の偽装制御回路６０２の詳細構成例を示している。図１２の偽装制御回路６０２は、通常制御信号記憶回路８００と、偽装制御信号生成回路８０１とを備える。通常制御信号記憶回路８００は、通常制御回路６０１が出力する通常制御信号６０４〜６０９をもとに通常制御信号履歴情報８０２を記憶する。偽装制御信号生成回路８０１は、通常制御信号記憶回路８００が記憶した通常制御信号履歴情報８０２を読み出して、偽装制御信号６１０〜６１５を生成し出力する。
【００７２】
図１３は、図１２中の通常制御信号記憶回路８００の記憶内容の例を示している。図１３に示すとおり、通常制御信号記憶回路８００は、内部に複数のデータ記憶用のスロットを備えている。各スロットは、通常制御回路６０１が出力する、通常制御回路演算器制御信号６０７と、通常制御回路メモリＡ制御信号６０４及び通常制御回路レジスタＡ制御信号６０５から得られるメモリＡアドレス（レジスタＡ用）と、通常制御回路メモリＡ制御信号６０４及び通常制御回路レジスタＢ制御信号６０６から得られるメモリＡアドレス（レジスタＢ用）と、通常制御回路メモリＢ制御信号６０９から得られるメモリＢアドレスとを１セットで記憶する構成になっている。
【００７３】
偽装制御信号生成回路８０１は、これらのスロット毎に記憶された通常制御信号履歴情報８０２を読み出して、偽装制御信号６１０〜６１５を生成する。この偽装制御信号生成回路８０１が、どのスロットのデータを読み出すかについてのアルゴリズムは、(1)スロットに記憶した順番に読み出す、(2)最も頻度の多い暗号演算命令のスロットを選択する、(3)ランダムにスロットを選択する等の、いずれのアルゴリズムであってもよい。
【００７４】
上記のようなアルゴリズムで読み出す場合、クロックサイクル単位においても過去に実施された演算資源１０３〜１０８の動作や、過去の頻度が高かった消費電流波形を持つ演算資源１０３〜１０８の動作や、過去の消費電流波形の状態がランダムに出現する演算資源１０３〜１０８の動作が可能であり、暗号演算命令又は偽装演算命令１１３における消費電流が均一となり、電流解析に対するセキュリティ性が更に向上する。
【００７５】
また通常制御信号記憶回路７００は、不揮発性メモリによって構成されてもよい。この場合電源断以降も過去の通常制御信号履歴情報８０２を記憶でき、記憶された通常制御信号６０４〜６０９から偽装制御信号６１０〜６１５を選択して出力するため、電源投入から暗号演算を実行し電源断等のシーケンスを繰り返し実行して電流波形変化を観測するような電流解析手法においても、暗号演算命令１１１の実行中や偽装演算命令１１３の実行中における消費電流波形が、記憶された過去の通常制御信号６０４〜６０９に依存して出現するので、電流解析に対するセキュリティ性が更に向上する。
【００７６】
さて、演算器１０５の消費電流は、この演算器１０５での処理が同じである場合、演算対象である入力データに大きく依存する。具体的には、入力データにビット値０が多い場合と少ない場合とでは消費電流に差が出てくる。そこで、次に説明する例では、ビット値０のカウント数を利用することで、電流解析に対するセキュリティ性を向上させる。
【００７７】
図１４は、図１の暗号演算処理回路の変形例を示している。図１４では、図１に示した暗号演算処理回路の構成に加えて、更にビット値０カウント回路１０００を備える。ビット値０カウント回路１０００は、メモリＡ出力データ１２１の値を入力とし、その入力データのビット値が０であるビット数をカウントし、ビット値０カウント情報１００１として、暗号演算命令記憶回路４００及び通常制御信号記憶回路８００に対して出力する。
【００７８】
例えば、メモリＡ出力データ１２１が３２ビットのデータ幅を持ち、１６進数表記で３９ＤＦ７ＥＢ６のデータを出力した場合、このデータは２進数表記で００１１＿１００１＿１１０１＿１１１１＿０１１１＿１１１０＿１０１１＿０１１０であるから、ビット値が０であるビットの数は１０である。したがって、ビット値０カウント情報１００１は１０を出力する。
【００７９】
図１５は、図１４中の暗号演算命令記憶回路４００の記憶内容の例を示している。図１５に示すとおり、暗号演算命令記憶回路４００は、暗号演算命令１１１に加えて、更にビット値０カウント情報１００１を同一スロットに記憶する構成になっている。ここでは仮にスロット番号の小さいものから順に、最近記憶されたデータであるものとする。
【００８０】
メモリＡ出力データ１２１が３２ビットのデータ幅を持つものとすると、図１５のスロット１に記憶された暗号演算命令１１１は、アドレスＡ１及びアドレスＡ２の各データを入力とし命令３の演算を行い結果をアドレスＡ３に格納するが、この際ビット値０カウント回路１０００によってカウントされたビット値０カウント情報１００１は、アドレスＡ１では１７、アドレスＡ２では１４である。
【００８１】
スロット２に記憶された暗号演算命令１１１は、アドレスＡ５及びアドレスＡ６の各データを入力とし命令３の演算を行い結果をアドレスＡ７に格納するが、この際ビット値０カウント回路１０００によってカウントされたビット値０カウント情報１００１は、アドレスＡ５では１４、アドレスＡ６では１６である。
【００８２】
スロット３に記憶された暗号演算命令１１１は、アドレスＡ７及びアドレスＡ８の各データを入力とし命令３の演算を行い結果をアドレスＡ８に格納するが、この際ビット値０カウント回路１０００によってカウントされたビット値０カウント情報１００１は、アドレスＡ７では５、アドレスＡ８では３である。すなわち、アドレスＡ７及びアドレスＡ８から読み出されたデータはともに、３２ビットのデータ幅に対してビット値０のカウント数が非常に少ないデータであることが分かる。
【００８３】
スロット４に記憶された暗号演算命令１１１は、アドレスＡ３及びアドレスＡ４の各データを入力とし命令３の演算を行い結果をアドレスＡ５に格納するが、この際ビット値０カウント回路１０００によってカウントされたビット値０カウント情報１００１は、アドレスＡ３では１８、アドレスＡ４では１９である。
【００８４】
各スロットに記憶された暗号演算命令１１１は全て命令３を演算器１０５に発行する命令であるが、各スロットに記憶された０値カウント数は、スロット３が少ない特徴を持ち、スロット１、スロット２、スロット４は同じような数字である。データ幅に対して０値カウント数が非常に少ない、又は多いデータが存在する場合、このようなデータを使用した暗号演算は活性化するビット数が非常に少ないため、暗号演算処理中の消費電流波形に独特のピークが生じる。
【００８５】
偽装演算命令生成回路４０１は、暗号演算命令１１１の実行が終了したことを示す信号である演算完了信号１１４を受けて、スロット１からスロット４までに記憶されている暗号演算命令１１１を検索しスロット全てが命令３であることを認識すると、更にビット値０カウント情報１００１を検索する。データ幅に対して０値カウント数が非常に少ない、又は多いデータが存在する場合、このようなデータを使用した演算は活性化するビット数が非常に少ないため、暗号演算処理中の消費電流波形に独特のピークが生じるので、このピークを意図的に増やすような偽装演算命令１１３を生成する。これにより、最小に位置するビット値０カウント数を使用していたスロットであるスロット３を選択して偽装演算命令１１３を生成する。
【００８６】
以上のように、図１４の構成を有する暗号演算処理回路では、偽装演算命令生成回路４０１が暗号演算命令記憶回路４００に記憶されたビット値０カウント数の分布を判断し、最大又は最小に位置するビット値０カウント数を使用していた暗号演算命令１１１を選択して偽装演算命令１１３を生成するので、生成された偽装演算命令１１３は過去の特異な消費電流波形を示すことができ、暗号演算命令１１１が実行されているのかそれとも過去の特異な消費電流波形を示す暗号演算命令１１１を偽装演算命令１１３として実行されているのかの区別をつけることが困難であり、電流解析に対するセキュリティ性が更に向上する。
【００８７】
なお、偽装演算命令生成回路４０１は、暗号演算命令記憶回路４００に記憶されたビット値０カウント数の分布を判断し、平均に位置するビット値０カウント数を使用していた暗号演算命令１１１を選択して偽装演算命令１１３を生成してもよい。平均に位置するビット値０カウント数を使用していた暗号演算命令１１１を選択して偽装演算命令１１３を生成するので、生成された偽装演算命令１１３は平均的な消費電流波形を示すことができ、暗号演算命令１１１が実行されているのか、それともデータ中に含まれるビット値０カウント数の頻度が高かった暗号演算命令１１１を偽装演算命令１１３として実行されているのかの区別をつけることが困難であり、電流解析に対するセキュリティ性が更に向上する。
【００８８】
図１６は、図１４中の通常制御信号記憶回路８００の記憶内容の例を示している。図１６に示すとおり、通常制御信号記憶回路８００は、通常制御回路演算器制御信号６０７とメモリＡアドレス及びメモリＢアドレスとに加えて、更にビット値０カウント情報１００１を１セットで記憶する構成になっている。ここでは仮にスロット番号の小さいものから順に、最近記憶されたデータであるものとする。
【００８９】
メモリＡ出力データ１２１が３２ビットのデータ幅を持つものとすると、図１６のスロット１によれば、メモリＡアドレス（レジスタＡ用）Ａ１及びメモリＡアドレス（レジスタＢ用）Ａ２から読み出したデータに対して通常制御回路演算器制御信号６０７として演算２を発行し、演算結果をメモリＢアドレスＡＡに書き込んでいる。この際ビット値０カウント回路１０００によってカウントされたレジスタＡ用及びレジスタＢ用のビット値０カウント情報１００１は、それぞれ３１と３２である。すなわち、３２ビットのデータ幅に対してビット値０のカウント数が非常に多いデータであることが分かる。
【００９０】
また逆に図１６のスロット３に記憶されているデータでは、ビット値０カウント回路１０００によってカウントされたレジスタＡ用及びレジスタＢ用のビット値０カウント情報１００１は、それぞれ０と１であり、３２ビットのデータ幅に対してビット値０のカウント数が非常に少ないデータであることが分かる。
【００９１】
以上のように、データ幅に対して０値カウント数が非常に少ない、又は多いデータが存在する場合、このようなデータを使用した暗号演算は活性化するビット数が非常に少ないため、暗号演算処理中の消費電流波形に独特のピークが生じる。
【００９２】
スロット１に記憶されているデータは最も新しいデータであるから、最近、通常制御回路６０１によって、上記のような独特のピークが生じる通常制御信号６０４〜６０９が出力されていることになる。このような場合、その後に続く偽装制御信号６１０〜６１５は、同様な独特のピークが生じる制御信号でなければ効果的に偽装することはできない。また逆に通常制御回路６０１によって、上記のような独特のピークが生じない通常制御信号６０４〜６０９が出力されている場合は、その後に続く偽装制御信号６１０〜６１５は、独特のピークが生じない制御信号でなければ効果的に偽装することはできない。そこで、偽装制御信号生成回路８０１は、最も新しく記憶されたスロットのビット値０カウント情報１００１を判断し、平均、最大又は最小等のビット値０カウント情報１００１を持つスロットのデータを読み出して偽装制御信号６１０〜６１５を生成する。
【００９３】
このような偽装演算を実行することで、本来の暗号演算を実行しているタイミングでの消費電流波形との差を区別するのが困難になり、本来の暗号演算の実行タイミングが解析されにくくなる。
【００９４】
以上のように、図１４の構成を有する暗号演算処理回路では、メモリＡ出力データ１２１のビット値０の個数をビット値０カウント回路１０００によってカウントし、そのカウント値を、暗号演算命令記憶回路４００及び通常制御信号記憶回路８００に記憶することにより、過去に発生した特異な消費電流波形や平均的な消費電流波形と同じ特徴を持つ消費電流波形を再現することができるため、消費電流解析による暗号演算処理と偽装演算処理との判別が困難になり、消費電流解析に対するセキュリティ性が向上する。
【００９５】
さて、演算器１０５の連続した制御において入力データがメモリＡ１０３の違うアドレスから読み出されたデータあっても、データの値そのものが全く同じであった場合は、演算器１０５で電流が消費されることがない。そこで、次に説明する例では、演算器１０５を構成する回路の電位をプリセットすることで、電流解析に対するセキュリティ性を向上させる。
【００９６】
図１７は、図６の変形例に係る暗号制御回路１０１及び演算部１０２の構成を示している。図１７の演算部１０２は、図１に示した演算部１０２の構成に加えて、演算器１０５を構成する回路の電位をプリセットするために、プリセット回路Ａ１３００と、プリセット回路Ｂ１３０１とを更に備える。図１７の例では、両プリセット回路１３００，１３０１が、例えばインバータ回路である。また、図１７の暗号制御回路１０１は、図６に示した暗号制御回路１０１の構成に加えて、動作開始クロックエッジに同期したパルス信号を発生して両プリセット回路１３００，１３０１を動作させるためのパルス信号発生回路１３０６を更に備える。
【００９７】
プリセット回路Ａ１３００は、パルス信号発生回路１３０６からのプリセット回路Ａ制御信号１３０２が有効になった場合に、レジスタＡ１０６からのレジスタＡ出力データ１２２を反転して、演算器１０５に対して、プリセット回路Ａ出力データ１３０４に出力する。
【００９８】
プリセット回路Ｂ１３０１は、パルス信号発生回路１３０６からのプリセット回路Ｂ制御信号１３０３が有効になった場合に、レジスタＢ１０７からのレジスタＢ出力データ１２３を反転して、演算器１０５に対して、プリセット回路Ｂ出力データ１３０５に出力する。
【００９９】
パルス信号発生回路１３０６は、クロック１１０を利用してパルス信号を発生する回路であり、発生した信号はプリセット回路Ａ制御信号１３０２及びプリセット回路Ｂ制御信号１３０３として、プリセット回路Ａ１３００及びプリセット回路Ｂ１３０１に出力する。
【０１００】
図１８は、図１７の暗号制御回路１０１及び演算部１０２を備えた暗号演算処理回路の動作を示している。
【０１０１】
図１８によれば、暗号制御回路１０１は、ＣＰＵ１０９からの暗号演算命令１１１により、命令４を受け取る。ここで命令４は、一連の暗号演算処理において演算器１０５が２クロックサイクルの演算４を４回繰り返すものとする。
【０１０２】
暗号制御回路１０１は、命令４をデコードして、メモリＡ１０３のアドレスＡ１からアドレスＡ８までのそれぞれデータＤ１、データＤ２を読み出し、データＤ１をレジスタＡ１０６に、データＤ２をレジスタＢ１０７にそれぞれ格納する。メモリＡ消費電流IVは、メモリＡ１０３が読み出し動作をしたことによる消費電流であり、アドレスＡ１からアドレスＡ８までの読み出し動作に対応した消費電流波形となる。
【０１０３】
そして暗号制御回路１０１は、演算器制御信号１１８により演算器１０５に対して演算４を実施するよう制御するが、このときパルス信号発生回路１３０６は、プリセット回路Ａ制御信号１３０２を制御し、レジスタＡ出力データ１２２を一時的に反転させてプリセット回路Ａ出力データ１３０４に出力する。これにより演算器１０５は、本来のデータＤ１及びＤ２による演算を実施する前に、一時的にＤ１の反転データとＤ２との演算を実施することになる。演算部消費電流IVは、組み合わせ回路である演算器１０５への入力レジスタであるレジスタＡ１０６とレジスタＢ１０７とにデータが格納されるたびに変化し、レジスタＡ１０６とレジスタＢ１０７との値が確定した後も、２クロックサイクルは演算が実行されているので電流を消費することになる。
【０１０４】
アドレスＡ１からＡ８まで読み出したメモリＡ出力データ１２１が図１８のようにＤ１とＤ２とが連続するような場合、レジスタＡ出力データ１２２とレジスタＢ出力データ１２３との値は変化しない。このような場合、従来の構成では演算器１０５の入力は変化せず、実際には演算器１０５が動作しないため電流を消費しないが、本発明ではプリセット回路Ａ１３００及びプリセット回路Ｂ１３０１をパルス信号発生回路１３０６によって制御し、入力データを一時的に反転させることによって、演算処理がその都度実行され、演算器１０５は電流を消費する。
【０１０５】
次に、暗号制御回路１０１は、命令４をデコードして演算４が終了するタイミングで演算結果をレジスタＣ１０８に格納するためレジスタＣ制御信号１１９を出力し、レジスタＣ１０８にＤＡを格納する。また暗号制御回路１０１は、命令４をデコードしてメモリＢ制御信号１２０を発行し、レジスタＣ出力データ１２５であるＤＡをメモリＢ１０４のアドレスＡＡからアドレスＡＤまでに格納する。メモリＢ消費電流IVは、メモリＢ１０４への書き込み動作をしたことによる消費電流であり、アドレスＡＡからアドレスＡＤまでの書き込み動作に対応した消費電流波形となる。
【０１０６】
以上のように、図１７の構成によれば、パルス信号発生回路１３０６が、プリセット回路Ａ制御信号１３０２とプリセット回路Ｂ制御信号１３０３とを制御することで、演算器１０５に入力されるデータを一時的に反転させ、たとえ演算器１０５に対する入力データが毎クロックサイクル同じ値であったとしても、クロックエッジ毎に演算器１０５内部の電位が強制的に変えられ電流が消費されるため、電流解析に対するセキュリティ性が向上する。
【０１０７】
なお、図１７ではプリセット回路１３００，１３０１の例としてインバータ回路を説明したが、演算部１０２の内部の各信号を固定値にリセットするような回路であっても構わない。
【０１０８】
図１９は、図１７の変形例に係る演算部１０２の構成を示している。図１９の演算部１０２は、図１７に示した演算部１０２の構成に加えて、演算器１０５への入力データに対して遅延値を各ビット毎に異ならせるために、遅延回路Ａ１５００と、遅延回路Ｂ１５０１とを更に備える。なお、図１９では制御信号の図示を省略している。
【０１０９】
遅延回路Ａ１５００は、プリセット回路Ａ１３００からのプリセット回路Ａ出力データ１３０４を、クロックサイクル毎に各ビットに異なる遅延量を付加し、全てのビットが同じタイミングでは変化しないようにしたデータを、演算器１０５に対して、遅延回路Ａ出力データ１５０２として出力する。
【０１１０】
遅延回路Ｂ１５０１は、プリセット回路Ｂ１３０１からのプリセット回路Ｂ出力データ１３０５を、クロックサイクル毎に各ビットに異なる遅延量を付加し、全てのビットが同じタイミングでは変化しないようにしたデータを、演算器１０５に対して、遅延回路Ｂ出力データ１５０３として出力する。
【０１１１】
図２０は、図１９の演算部１０２を備えた暗号演算処理回路の動作を示している。図２０によれば、暗号制御回路１０１は、ＣＰＵ１０９からの暗号演算命令１１１により、命令４を受け取る。ここで命令４は、一連の暗号演算処理において演算器１０５が２クロックサイクルの演算４を４回繰り返すものとする。
【０１１２】
暗号制御回路１０１は、命令４をデコードして、メモリＡ１０３のアドレスＡ１からアドレスＡ８までのそれぞれデータＤ１、データＤ２を読み出し、データＤ１をレジスタＡ１０６に、データＤ２をレジスタＢ１０７にそれぞれ格納する。メモリＡ消費電流Ｖは、メモリＡ１０３が読み出し動作をしたことによる消費電流であり、アドレスＡ１からアドレスＡ８までの読み出し動作に対応した消費電流波形となる。
【０１１３】
そして暗号制御回路１０１は、演算器制御信号１１８により演算器１０５に対して演算４を実施するよう命令するが、このときパルス信号発生回路１３０６は、プリセット回路Ａ制御信号１３０２を制御し、レジスタＡ出力データ１２２を一時的に反転させてプリセット回路Ａ出力データ１３０４に出力する。更に、遅延回路Ａ１５００がプリセット回路Ａ出力データ１３０４をクロックサイクル毎に各ビットに違う遅延量を付加して、全てのビットが同じタイミングでは変化しないようにした状態で、遅延回路Ａ出力データ１５０２に出力する。これにより演算器１０５は、本来のデータＤ１及びＤ２による演算を実施する前に、一時的にＤ１の反転データとＤ２との演算を実施し、なおかつデータの変化点において遅延量がビット毎に変化しているため、連続的に異なるデータによる演算を実施することになる。演算部消費電流Ｖは、組み合わせ回路である演算器１０５への入力レジスタであるレジスタＡ１０６とレジスタＢ１０７とにデータが格納されるたびに変化し、レジスタＡ１０６とレジスタＢ１０７との値が確定した後も、２クロックサイクルは演算が実行されているので電流を消費することになる。
【０１１４】
アドレスＡ１からＡ８まで読み出したメモリＡ出力データ１２１が図２０のようにＤ１とＤ２とが連続するような場合、レジスタＡ出力データ１２２とレジスタＢ出力データ１２３との値は変化しない。このような場合、従来の構成では演算器１０５の入力は変化せず、実際には演算器１０５が動作しないため電流を消費しないが、本発明ではプリセット回路Ａ１３００及びプリセット回路Ｂ１３０１をパルス信号発生回路１３０６によって制御し、入力データを一時的に反転させ、更に遅延回路Ａ１５００及び遅延回路Ｂ１５０１により、クロックサイクル毎に各ビットに違う遅延量を付加して入力データを連続的に変化させ、演算器１０５に連続的に演算を実施させることができる。
【０１１５】
次に、暗号制御回路１０１は、命令４をデコードして演算４が終了するタイミングで演算結果をレジスタＣ１０８に格納するためレジスタＣ制御信号１１９を出力し、レジスタＣ１０８にＤＡを格納する。また暗号制御回路１０１は、命令４をデコードしてメモリＢ制御信号１２０を発行し、レジスタＣ出力データ１２５であるＤＡをメモリＢ１０４のアドレスＡＡからアドレスＡＤまでに格納する。メモリＢ消費電流Ｖは、メモリＢ１０４への書き込み動作をしたことによる消費電流であり、アドレスＡＡからアドレスＡＤまでの書き込み動作に対応した消費電流波形となる。
【０１１６】
以上のように、図１９の構成によれば、パルス信号発生回路１３０６が、プリセット回路Ａ制御信号１３０２とプリセット回路Ｂ制御信号１３０３とを制御することで、演算器１０５に入力されるデータを一時的に反転させ、更に遅延回路Ａ１５００及び遅延回路Ｂ１５０１により演算器１０５に入力されるデータを、クロックサイクル毎に各ビットに違う遅延値を付加して変化させることより、演算器１０５における消費電流波形は入力データの遅延の影響を受けるため、消費電流解析に対するセキュリティ性が向上する。
【産業上の利用可能性】
【０１１７】
以上説明してきたとおり、本発明に係る暗号演算処理回路は、暗号演算等のセキュリティ性を要求されるデータ処理回路として有用であり、ＩＣカード等の用途に応用できる。
【図面の簡単な説明】
【０１１８】
【図１】本発明に係る暗号演算処理回路の構成例を示すブロック図である。
【図２】図１の暗号演算処理回路の動作を示すタイミング図である。
【図３】図１の暗号演算処理回路に偽装演算命令回路がない場合の動作を示すタイミング図である。
【図４】図１中の偽装演算命令回路の詳細構成例を示すブロック図である。
【図５】図４中の暗号演算命令記憶回路の記憶内容の例を示す図である。
【図６】図１中の暗号制御回路の詳細構成例を示すブロック図である。
【図７】図６の暗号制御回路を備えた暗号演算処理回路の動作を示すタイミング図である。
【図８】図６の暗号制御回路を備えた暗号演算処理回路の動作を示す他のタイミング図である。
【図９】図６の暗号制御回路を備えた暗号演算処理回路の動作を示す更に他のタイミング図である。
【図１０】図６の暗号制御回路を備えた暗号演算処理回路の動作を示す更に他のタイミング図である。
【図１１】図７〜図１０をまとめて示すタイミング図である。
【図１２】図６中の偽装制御回路の詳細構成例を示すブロック図である。
【図１３】図１２中の通常制御信号記憶回路の記憶内容の例を示す図である。
【図１４】図１の暗号演算処理回路の変形例を示すブロック図である。
【図１５】図１４中の暗号演算命令記憶回路の記憶内容の例を示す図である。
【図１６】図１４中の通常制御信号記憶回路の記憶内容の例を示す図である。
【図１７】図６の変形例に係る暗号制御回路及び演算部の構成を示すブロック図である。
【図１８】図１７の暗号制御回路及び演算部を備えた暗号演算処理回路の動作を示すタイミング図である。
【図１９】図１７の変形例に係る演算部の構成を示すブロック図である。
【図２０】図１９の演算部を備えた暗号演算処理回路の動作を示すタイミング図である。
【符号の説明】
【０１１９】
１００  偽装演算命令回路
１０１  暗号制御回路
１０２  演算部
１０３  メモリＡ
１０４  メモリＢ
１０５  演算器
１０６  レジスタＡ
１０７  レジスタＢ
１０８  レジスタＣ
１０９  ＣＰＵ
１１０  クロック
１１１  暗号演算命令
１１２  暗号演算完了信号
１１３  偽装演算命令
１１４  演算完了信号
１１５  メモリＡ制御信号
１１６  レジスタＡ制御信号
１１７  レジスタＢ制御信号
１１８  演算器制御信号
１１９  レジスタＣ制御信号
１２０  メモリＢ制御信号
１２１  メモリＡ出力データ
１２２  レジスタＡ出力データ
１２３  レジスタＢ出力データ
１２４  演算器出力データ
１２５  レジスタＣ出力データ
４００  暗号演算命令記憶回路
４０１  偽装演算命令生成回路
４０２  暗号演算命令履歴情報
６００  動作状況通知回路
６０１  通常制御回路
６０２  偽装制御回路
６０３  セレクタ
６０４  通常制御回路メモリＡ制御信号
６０５  通常制御回路レジスタＡ制御信号
６０６  通常制御回路レジスタＢ制御信号
６０７  通常制御回路演算器制御信号
６０８  通常制御回路レジスタＣ制御信号
６０９  通常制御回路メモリＢ制御信号
６１０  通偽装制御回路メモリＡ制御信号
６１１  偽装制御回路レジスタＡ制御信号
６１２  偽装制御回路レジスタＢ制御信号
６１３  偽装制御回路演算器制御信号
６１４  偽装制御回路レジスタＣ制御信号
６１５  偽装制御回路メモリＢ制御信号
６１６  動作状況通知信号
８００  通常制御信号記憶回路
８０１  偽装制御信号生成回路
８０２  通常制御信号履歴情報
１０００  ビット値０カウント回路
１００１  ビット値０カウント情報
１３００  プリセット回路Ａ
１３０１  プリセット回路Ｂ
１３０２  プリセット回路Ａ制御信号
１３０３  プリセット回路Ｂ制御信号
１３０４  プリセット回路Ａ出力データ
１３０５  プリセット回路Ｂ出力データ
１３０６  パルス信号発生回路
１５００  遅延回路Ａ
１５０１  遅延回路Ｂ
１５０２  遅延回路Ａ出力データ
１５０３  遅延回路Ｂ出力データ
【手続補正３】
【補正対象書類名】図面
【補正対象項目名】全図
【補正方法】変更
【補正の内容】
【図１】
2008056461.tif 000023
【図２】
2008056461.tif 000024
【図３】
2008056461.tif 000025
【図４】
2008056461.tif 000026
【図５】
2008056461.tif 000027
【図６】
2008056461.tif 000028
【図７】
2008056461.tif 000029
【図８】
2008056461.tif 000030
【図９】
2008056461.tif 000031
【図１０】
2008056461.tif 000032
【図１１】
2008056461.tif 000033
【図１２】
2008056461.tif 000034
【図１３】
2008056461.tif 000035
【図１４】
2008056461.tif 000036
【図１５】
2008056461.tif 000037
【図１６】
2008056461.tif 000038
【図１７】
2008056461.tif 000039
【図１８】
2008056461.tif 000040
【図１９】
2008056461.tif 000041
【図２０】
2008056461.tif 000042
【国際調査報告】
2008056461.tif 000043
2008056461.tif 000044
2008056461.tif 000045
2008056461.tif 000046