(57)【要約】【課題】暗号処理時間の高速化を図り、かつ耐タンパー性を有する暗号装置を比較的簡単な構成で得る。【解決手段】暗号モジュールにおいてＣＰＵ３１及び暗号演算器３２は１パッケージ化され、ＣＰＵ３１は、暗号演算器３２による部分暗号対象データＰＤ１〜ＰＤ５に対する暗号処理が実行される暗号処理期間Ｔ１０中において、メモリから部分暗号対象データＰＤ２〜ＰＤ６を読み出す先行読み出し処理と、先行読み出し処理以外の電力消費処理（アクセスＩＤ読み出し期間Ｔ３１に行う読み出し処理（予備的処理）及びダミー処理期間ＤＴ３１〜ＤＴ３３に行うダミー処理）とを実行している。【選択図】図５
2014192793.tif 000002
【特許請求の範囲】
【請求項１】
暗号対象データに対して暗号処理を施し暗号化データを得る暗号演算器と、
前記暗号対象データを記憶した外部のメモリ部から前記暗号対象データを読み出すデータ読み出し処理を行うとともに、読み出した前記暗号対象データを前記暗号演算器に出力する暗号制御部とを備え、
前記暗号対象データは前記データ読み出し処理により、前記メモリ部から第１，第２，第ｍ（≧２）の順より順次読み出される第１〜第ｍの部分暗号対象データを含み、
前記暗号制御部は
前記暗号演算器による第ｉ（ｉ＝１〜（ｍ−１））の部分暗号対象データに対する暗号処理が実行される暗号処理期間中において、
前記メモリ部からの第（ｉ＋１）の部分暗号対象データを読み出す前記データ読み出し処理における先行読み出し処理を実行することを特徴とする、
暗号装置。
【請求項２】
請求項１記載の暗号装置であって、
前記暗号制御部と前記暗号演算器との間に設けられる配線を外部から隠蔽したことを特徴とする、
暗号装置。
【請求項３】
請求項１または請求項２記載の暗号装置であって、
前記暗号制御部は
前記先行読み出し処理以外の電力消費処理をさらに実行することを特徴とする、
暗号装置。
【請求項４】
請求項３記載の暗号装置であって、
前記メモリ部は前記先行読み出し処理における読み出し手順を規定する複数の読み出しアクセス情報をさらに格納し、
前記電力消費処理は、前記先行読み出し処理の前に実行され、前記複数の読み出しアクセス情報から一の情報を選択読み出しアクセス情報として前記メモリ部から読み出すアクセス情報読み出し処理を含み、
前記先行読み出し処理は、前記選択読み出しアクセス情報の指示する読み出し手順に従い、前記第（ｉ＋１）の部分暗号対象データを読み出す処理を含む、
暗号装置。
【請求項５】
請求項３記載の暗号装置であって、
前記メモリ部は、前記暗号制御部における前記先行読み出し処理用の読み出しプログラムを規定する複数の命令コード情報をさらに格納し、
前記電力消費処理は、前記先行読み出し処理の前に実行され、前記複数の命令コード情報のうち一の情報を選択読み出し命令コード情報として読み出す、命令コード読み出し処理を含み、
前記先行読み出し処理は、前記選択命令コード情報で規定された読み出しプログラムを実行する処理を含む、
暗号装置。
【請求項６】
請求項３〜請求項５のうち、いずれか１項に記載の暗号装置であって、
前記電力消費処理は前記先行読み出し処理と関連性のない少なくとも一つのダミー処理を含み、前記少なくとも一つのダミー処理は前記部分暗号対象データ毎にその内容を変化させることが可能であることを特徴とする、
暗号装置。
【請求項７】
請求項６記載の暗号装置であって、
前記少なくとも一つのダミー処理は前記先行読み出し処理の後に行われるダミー処理を含む、
暗号装置。
【請求項８】
請求項３〜請求項７のうち、いずれか１項に記載の暗号装置であって、
前記暗号制御部は、前記暗号処理期間の全時間帯において、前記データ読み出し処理及び前記電力消費処理のうち一方を実行することを特徴とする、
暗号装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、暗号処理時における耐タンパー性を有し、高速に実行する暗号装置に関する。
【背景技術】
【０００２】
暗号装置を有するシステム製品において、消費電力の消費削減、高パフォーマンスの要求が高く、できるだけ無駄な処理を取り除くように設計されている。その結果、非接触で暗号解読を所望する攻撃者は、消費電力が異常に高いときや、処理時間が長いときに、システム上で特別な処理が行われていることを容易に判断できる。
【０００３】
上述した攻撃者による弊害は、暗号化/復号化処理を行っている際などに、攻撃者によって処理時間に注目したタイミング攻撃や、消費電力に注目した電力解析攻撃等のサイドチャネル攻撃により、機密情報(秘密鍵など)が解析されてしまうことである。
【０００４】
また、サイドチャネル攻撃に対し、ハードウェアで対策を行うことが一般的ではあるが、その対策を行うことにより回路規模が大きくなりコストがかかってしまう。
【０００５】
サイドチャネル攻撃等の対策用に特許文献１に開示された暗号処理装置がある。この暗号処理装置は、暗号化/復号化中にダミー処理を実行している。
【０００６】
サイドチャネル攻撃等の他の対策用に特許文献２に開示されたデータ処理装置がある。このデータ処理装置は、消費電力を均一化させるために、暗号化/復号化の実行開始時間に遅延を生じさせている。
【０００７】
サイドチャネル攻撃等の他の対策用に特許文献３に開示された半導体装置がある。この半導体装置は、出力側となる回路ブロックに、伝送しようとするデータを、データの変化の量が、より一様になるように、予め定められた符号化方法で符号化している。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００４−２１２８２８号公報
【特許文献２】特開２０１０−２７７３２７号公報
【特許文献３】特開２００６−２７９８６８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、特許文献１に開示の暗号処理装置及び特許文献２に開示のデータ処理装置は、暗号化処理中にダミー処理を実行したり、実行開始時間を遅延させたりしているため、暗号処理速度が犠牲となっている問題点があった。
【００１０】
また、特許文献３に開示の半導体装置は、高速化には暗号化／復号化後のデータ格納用の大容量の記憶部（メモリブロック１４）が必要となるため、コスト高を招くという問題点があった。
【００１１】
この発明は上記問題点を解決するためになされたもので、暗号処理時間の高速化を図り、かつ耐タンパー性を有する暗号装置を比較的簡単な構成で得ることを目的とする。
【課題を解決するための手段】
【００１２】
この発明に係る請求項１記載の暗号装置は、暗号対象データに対して暗号処理を施し暗号化データを得る暗号演算器と、前記暗号対象データを記憶した外部のメモリ部から前記暗号対象データを読み出すデータ読み出し処理を行うとともに、読み出した前記暗号対象データを前記暗号演算器に出力する暗号制御部とを備え、前記暗号対象データは前記データ読み出し処理により、前記メモリ部から第１，第２，第ｍ（≧２）の順より順次読み出される第１〜第ｍの部分暗号対象データを含み、前記暗号制御部は、前記暗号演算器による第ｉ（ｉ＝１〜（ｍ−１））の部分暗号対象データに対する暗号処理が実行される暗号処理期間中において、前記メモリ部からの第（ｉ＋１）の部分暗号対象データを読み出す前記データ読み出し処理における先行読み出し処理を実行することを特徴とする。
【００１３】
請求項２の発明は、請求項１記載の暗号装置であって、前記暗号制御部と前記暗号演算器との間に設けられる配線を外部から隠蔽したことを特徴とする。
【００１４】
請求項３の発明は、請求項１または請求項２記載の暗号装置であって、前記暗号制御部は、前記先行読み出し処理以外の電力消費処理をさらに実行することを特徴とする。
【００１５】
請求項４の発明は、請求項３記載の暗号装置であって、前記メモリ部は前記先行読み出し処理における読み出し手順を規定する複数の読み出しアクセス情報をさらに格納し、前記電力消費処理は、前記先行読み出し処理の前に実行され、前記複数の読み出しアクセス情報から一の情報を選択読み出しアクセス情報として前記メモリ部から読み出すアクセス情報読み出し処理を含み、前記先行読み出し処理は、前記選択読み出しアクセス情報の指示する読み出し手順に従い、前記第（ｉ＋１）の部分暗号対象データを読み出す処理を含む。
【００１６】
請求項５の発明は、請求項３記載の暗号装置であって、前記メモリ部は、前記暗号制御部における前記先行読み出し処理用の読み出しプログラムを規定する複数の命令コード情報をさらに格納し、前記電力消費処理は、前記先行読み出し処理の前に実行され、前記複数の命令コード情報のうち一の情報を選択読み出し命令コード情報として読み出す、命令コード読み出し処理を含み、前記先行読み出し処理は、前記選択命令コード情報で規定された読み出しプログラムを実行する処理を含む。
【００１７】
請求項６の発明は、請求項３〜請求項５のうち、いずれか１項に記載の暗号装置であって、前記電力消費処理は前記先行読み出し処理と関連性のない少なくとも一つのダミー処理を含み、前記少なくとも一つのダミー処理は前記部分暗号対象データ毎にその内容を変化させることが可能であることを特徴とする。
【００１８】
請求項７の発明は、請求項６記載の暗号装置であって、前記少なくとも一つのダミー処理は前記先行読み出し処理の後に行われるダミー処理を含む。
【００１９】
請求項８の発明は、請求項３〜請求項７のうち、いずれか１項に記載の暗号装置であって、前記暗号制御部は、前記暗号処理期間の全時間帯において、前記データ読み出し処理及び前記電力消費処理のうち一方を実行することを特徴とする。
【発明の効果】
【００２０】
この発明における請求項１記載の暗号装置は、暗号演算器による第ｉの部分暗号対象データに対する暗号処理期間中において、暗号制御部による電力を消費する先行読み出し処理が行われる。このため、暗号演算器による暗号処理による消費電力に加え、暗号制御部の処理動作による消費電力が加味される時間帯を暗号処理期間内に設けることにより、暗号演算器による暗号処理時におけるサイドチャネル攻撃に対する耐タンパー性の向上を図ることができる。
【００２１】
加えて、暗号演算器による第ｉの部分暗号対象データに対する暗号処理の実行時間中に暗号制御部は第（ｉ＋１）の部分暗号対象データを読み出す先行読み出し処理を実行している。このため、暗号演算器は第１〜第ｍの部分暗号対象データに対する暗号処理を連続的に実行することができる分、暗号処理の高速化を図ることができる。
【００２２】
さらに、暗号演算器以外に必要な構成は、先行読出し処理が実行可能な暗号制御部であるため、比較的簡単な構成で暗号装置を実現できる。
【図面の簡単な説明】
【００２３】
【図１】この発明の実施の形態１である暗号モジュールを含むシステム構成を示すブロック図である。
【図２】実施の形態１の暗号モジュールにおけるデータ読み出し処理内容を表形式で示す説明図である。
【図３】暗号演算期間中における実施の形態１の暗号モジュールの処理内容を模式的に示す説明図（その１）である。
【図４】暗号演算期間中における実施の形態１の暗号モジュールの処理内容を模式的に示す説明図（その２）である。
【図５】暗号処理期間におけるＣＰＵの処理動作に伴う消費電力変化を模式的に示す説明図である。
【図６】この発明の実施の形態２である暗号モジュールを含むシステム構成を示すブロック図である。
【図７】暗号演算期間中における実施の形態２の暗号モジュールの処理内容を模式的に示す説明図（その１）である。
【図８】暗号演算期間中における実施の形態２の暗号モジュールの処理内容を模式的に示す説明図（その２）である。
【発明を実施するための形態】
【００２４】
＜実施の形態１＞
（構成）
図１はこの発明の実施の形態１である暗号モジュール３０（暗号装置）を含むシステム構成を示すブロック図である。同図に示すように、データ処理システム５１は、ホスト部１、メモリコントローラ部２及びメモリコア部４から構成される。
【００２５】
ホスト部１は内部にＳｏＣ（System-on-a-Chip）１１を有し、メモリコントローラ部２は内部にホストＩ／Ｆ２１、制御部２２、暗号モジュール３０、セレクタ２４及びメモリＩ／Ｆ２５を有している。メモリコア部４は内部にメモリ４１を有している。
【００２６】
ホスト部１からホストＩ／Ｆ２１を介して制御部２２に対し、暗号対象データの読み出しを要求するメモリリード要求を与えることができる。
【００２７】
一方、メモリコア部４内のメモリ４１は不揮発性メモリであり、暗号対象データとなるコンテンツデータＤ４１及び後述するアクセスＩＤデータＡＩ１〜ＡＩｎ（読み出しアクセス情報）を格納している。
【００２８】
以下、メモリコントローラ部２の各構成について述べる。制御部２２は、メモリコントローラ部２に関する全体制御を行う。
【００２９】
暗号モジュール３０はＣＰＵ３１及び暗号演算器３２から構成される。暗号演算器３２はＣＰＵ３１によって送信される暗号対象データに対する暗号演算処理を行い暗号化データを得る回路ブロック（ＩＰ(Intellectual Property））である。なお、暗号演算処理内容については特に制限は無い。
【００３０】
また、暗号演算器３２は、暗号対象データ（暗号化/復号化したデータ）を格納可能なレジスタを備えている。なお、レジスタ分だけＲＡＭ等の記憶部を配置する構成も考えられる。レジスタ及びＲＡＭのいずれを配置するかは例えばコストとのトレードオフにより決定される。
【００３１】
ＣＰＵ３１はセレクタ２４を制御して、メモリコア部４内のメモリ４１からメモリＩ／Ｆ２５を介してコンテンツデータＤ４１を暗号対象データとして読み出すデータ読み出し処理を行う。さらに、ＣＰＵ３１は、読み出した暗号対象データを暗号演算器３２に送信し、暗号演算器３２より得た暗号化データを受信する処理を行う。
【００３２】
暗号モジュール３０は、ＣＰＵ３１及び暗号演算器３２が１パッケージ化（１チップ化）されて構成される。したがって、ＣＰＵ３１と暗号演算器３２との間の信号（データ）授受用の配線を外部から隠蔽することができる。
【００３３】
セレクタ２４は、メモリ４１のアクセス対象としてＣＰＵ３１を選択してメモリ４１〜ＣＰＵ３１間の第１のデータ読み出しルートを設けるか、メモリ４１のアクセス対象として制御部２２を選択してメモリ４１〜制御部２２間の第２のデータ読み出しルートを設けるかを切り替える切り替え操作を行う。
【００３４】
セレクタ２４による切り替え操作は、暗号演算器３２による暗号演算処理を実行させる期間はＣＰＵ３１の制御下で行われ、それ以外の一般的なメモリアクセス期間は制御部２２の制御下で行われる。
【００３５】
（原理）
本発明は、暗号演算器３２による暗号演算処理時におけるサイドチャネル攻撃に対する耐タンパー性を向上させると共に、暗号処理のパフォーマンスを向上させるための暗号モジュール３０におけるＣＰＵ３１の処理に関するソフトウェア実装方法の提案である。
【００３６】
具体的には、暗号演算器３２とＣＰＵ３１とを１パッケージ化して暗号モジュール３０として、暗号モジュール３０内のＣＰＵ３１による制御(ソフトウェア制御)によって、暗号モジュール３０における消費電力値の均等化(バラつき)及び暗号処理の高速化を実現している。
【００３７】
（データ読み出し処理と暗号演算処理）
図２はメモリコントローラ部２（暗号モジュール３０）の外部のメモリコア部４内に存在するメモリ４１に格納されたコンテンツデータＤ４１を読み出すデータ読み出し処理内容を表形式で示す説明図である。
【００３８】
まず、ステップＳＴＥＰ０において、ＣＰＵ３１によってメモリ４１からアドレス4000〜41FFhのメモリ４１である部分暗号対象データＰＤ１を読み出す。このとき、暗号演算器３２は暗号演算処理を実行していない。
【００３９】
ステップＳＴＥＰ０では、ホスト部１から制御部２２を経由してＣＰＵ３１に付与されるメモリリード要求で指示される｛ＳＡ(Start Address；開始アドレス)=4000h (暗号処理サイズ = 200h)、ＲＳ(Read Size；読出しサイズ)=C00h｝を、ＣＰＵ３１内の図示しないレジスタ等の内部メモリに格納し、上述したＳＡ，ＲＳに従ってメモリ４１からコンテンツデータＤ４１を読み出す。
【００４０】
したがって、上記メモリリード要求に従い、メモリ４１のアドレス4000〜41FFh，4200〜43FFh，4400〜45FFh，4600〜47FFh，4800〜49FFh，及び4A00〜4BFFに格納されたコンテンツデータＤ４１が各々の暗号処理サイズ２００ｈの部分暗号対象データＰＤ１〜ＰＤ６（第１〜第６の部分暗号対象データ）として順次ＣＰＵ３１により読み出され、暗号演算器３２に送信後に部分暗号対象データＰＤ１〜ＰＤ６に対する暗号演算処理がなされることになる。
【００４１】
なお、ステップＳＴＥＰ０では、部分暗号対象データＰＤ１は暗号演算器３２に入力する段階までの範囲となるため、暗号演算器３２には部分暗号対象データＰＤ１が入力されているが暗号演算器３２は暗号演算処理を開始していないため、図２では「−」と記述している。
【００４２】
次に、ステップＳＴＥＰ１において、暗号演算器３２はステップＳＴＥＰ０でＣＰＵ３１によって読み出された部分暗号対象データＰＤ１（アドレス4000〜41FFhのコンテンツデータＤ４１）に対する暗号演算処理を行い、ＣＰＵ３１は部分暗号対象データＰＤ２（アドレス4200〜43FFhのコンテンツデータＤ４１）の先行読み出し処理を行う。
【００４３】
以下、同様に、ステップＳＴＥＰ２〜ＳＴＥＰ５において、暗号演算器３２はステップＳＴＥＰ１〜ＳＴＥＰ４でＣＰＵ３１によって読み出された部分暗号対象データＰＤ２〜ＰＤ４に対する暗号演算処理を行い、ＣＰＵ３１は部分暗号対象データＰＤ３〜ＰＤ５の先行読み出し処理を行う。
【００４４】
そして、ステップＳＴＥＰ６において、暗号演算器３２は部分暗号対象データＰＤ６に対する暗号演算処理を行い、部分暗号対象データＰＤ１〜ＰＤ６に対する暗号化処理は完了する。なお、ステップＳＴＥＰ６においては先行読み出し処理が実行されないため、図２に示すように、意図的に消費電力バラツキ処理を行うことが望ましい。
【００４５】
このように、暗号制御部であるＣＰＵ３１は、暗号演算器による部分暗号対象データＰＤｉ（ｉ＝１〜５のいずれか）に対する暗号演算処理の実行時間中において、メモリ４１からの部分暗号対象データＰＤ（ｉ＋１）を読み出す先行読み出し処理（データ読み出し処理）を並行して実行している。
【００４６】
したがって、通常の暗号化処理に比べ、部分暗号対象データＰＤｉの暗号演算処理の終了時点で次の部分暗号対象データＰＤ（ｉ＋１）の準備（読み出し）が完了している分、暗号演算処理が終了してから次の部分暗号対象データを読み出す時間を設ける必要はない。
【００４７】
したがって、暗号モジュール３０による部分暗号対象データＰＤ１〜ＰＤ６に対する暗号化処理に関し、（部分暗号対象データＰＤの読み出し時間）×（先行読み出し処理回数分）（＝５回）の時間短縮を図り、暗号化処理の高速化を図ることができる。
【００４８】
（ＣＰＵ３１の処理内容）
図３及び図４は実施の形態１の暗号モジュール３０（ＣＰＵ３１及び暗号演算器３２）の処理内容を模式的に示す説明図である。
【００４９】
以下、同図を参照して、図２で示したように、暗号演算器３２が部分暗号対象データＰＤ１〜ＰＤ６それぞれに対し暗号演算処理を実行して、部分暗号化データＣＤ１〜ＣＤ６を得る場合を例に挙げて、どのように消費電力を均等化またはバラつかせているかを説明する。なお、説明の都合上、暗号演算器３２は部分暗号対象データＰＤ１〜ＰＤ６それぞれに対して一括した</U>暗号演算処理が可能とする。すなわち、暗号演算器３２に部分暗号対象データＰＤのデータサイズ（サイズは鍵長等に依存)分のレジスタ等の内部記憶部を有している。
【００５０】
まず、制御部２２からの暗号処理開始ＳＴ０がなされる。暗号処理開始ＳＴ０に際して、制御部２２は例えば｛ＳＡ(Start Address)=4000h (暗号処理サイズ = 200h)、ＲＳ(Read Size)=C00ｈ｝を指示する読み出し要求を行う。この読み出し要求はホスト部１からの前述したメモリリード要求に基づいてなされる。
【００５１】
上記読み出し要求に沿って、図２で示した部分暗号対象データＰＤ１〜ＰＤ６を部分暗号対象データＰＤｉ（ｉ＝１〜６）単位に読み出し、暗号演算処理を行うことがＣＰＵ３１に伝達される。
【００５２】
すると、ＣＰＵ３１は、セレクタ２４を変更する切り替え処理ＰＲ２１を実行することにより、メモリＩ／Ｆ２５を介したメモリ４１〜ＣＰＵ３１間の第１の読み出しルートを設ける。
【００５３】
その後、ＣＰＵ３１はメモリＩ／Ｆ２５を介してメモリ４１に対し、部分暗号対象データＰＤ１の読み出し処理Ｒ４１を実行して、部分暗号対象データＰＤ１を得る。ＣＰＵ３１によってメモリ４１から部分暗号対象データＰＤ１を読み出す期間が暗号対象データ読出期間Ｔ２１となる。
【００５４】
そして、ＣＰＵ３１は部分暗号対象データＰＤ１を暗号演算器３２に送信することにより、部分暗号対象データＰＤ１が暗号演算器３２のレジスタ等に入力される。
【００５５】
上述した暗号処理開始ＳＴ０、処理ＰＲ２１、及び先行読み出し処理Ｒ４１が、図２で示したステップＳＴＥＰ０の処理に相当する。
【００５６】
その後、ループ処理ＬＰ１に入る。暗号演算器３２は部分暗号対象データＰＤ１の受信後に速やかに部分暗号対象データＰＤ１に対する暗号演算処理を実行するため、ループ処理ＬＰ１の開始当初から、暗号処理期間Ｔ１０となる。
【００５７】
この暗号処理期間Ｔ１０において、ＣＰＵ３１は暗号モジュール３０の消費電力の均等化を図るべく、後に詳述するが、部分暗号対象データＰＤ２の先行読み出し処理ＲＤ４２以外に様々な電力消費処理（ＰＲ２２〜ＰＲ２８，ＲＤ５１）を実行する。
【００５８】
ＣＰＵ３１は、ループ処理ＬＰ１の開始直後において、メモリ４１に格納されたアクセスＩＤデータＡＩ１〜ＡＩｎのうち、読み出し対象として選択されるアクセスＩＤデータＡＩｊ（ｊ＝１〜ｎのいずれか）を乱数で決定する処理ＰＲ２２を実行する。
【００５９】
その後、ＣＰＵ３１は、読み出しＷａｉｔ時間を乱数で決定し、Ｗａｉｔ期間中にＷａｉｔ処理（後述するダミー処理）を行う処理ＰＲ２３を実行する。
【００６０】
処理ＰＲ２３が終了すると、ＣＰＵ３１は、メモリ４１に格納された選択読み出しアクセス情報であるアクセスＩＤデータＡＩｊ（処理ＰＲ２２にて決定）の読み出し処理ＲＤ５１（アクセス情報読み出し処理）を行い、メモリ４１からアクセスＩＤデータＡＩｊを読み出す。読み出し処理ＲＤ５１の実行期間がアクセスＩＤデータ読出期間Ｔ３１となる。
【００６１】
その後、ＣＰＵ３１は、アクセスＩＤデータＡＩｊの内容をデコードする処理ＰＲ２４を実行し、続けて、アクセスＩＤデータＡＩｊで指示されたメモリアクセス方法を決定する処理ＰＲ２５を行う。ここで処理ＰＲ２５により決定されたメモリアクセス方法を「アクセス方法ｊ」とする。
【００６２】
そして、ＣＰＵ３１は、読み出しまでのＷａｉｔ時間を乱数で決定し、Ｗａｉｔ時間分、Ｗａｉｔ処理（ダミー処理）を行う、処理ＰＲ２６を実行する。
【００６３】
処理ＰＲ２６が終了すると、ＣＰＵ３１は、アクセス方法ｊに従った読み出し手順で部分暗号対象データＰＤ２の先行読み出し処理Ｒ４２を実行して、部分暗号対象データＰＤ２を得る。ＣＰＵ３１によってメモリ４１から部分暗号対象データＰＤ２を読み出す期間が暗号対象データ読出期間Ｔ２２となる。ここで、アクセス方法ｊによる読み出し手順で読み出された部分暗号対象データＰＤ２を部分暗号対象データＰＤ２ｘとする。部分暗号対象データＰＤ２ｘはアクセス方法ｊに従った読み出し手順で読み出された結果のデータ列であるため、通常は部分暗号対象データＰＤ２と異なる内容となる。
【００６４】
その後、ＣＰＵ３１は、暗号演算器３２に入力する部分暗号対象データのフォーマット変更する処理ＰＲ２７を実行する。すなわち、部分暗号対象データＰＤ２ｘを本来の部分暗号対象データＰＤ２に整形する処理を行う。
【００６５】
例えば、先行読み出し処理ＲＤ４２時に部分暗号対象データＰＤ２が逆アドレス順（例：43FF〜4200hの順）にシーケンシャルに読み出された場合、処理ＰＲ２７においてアドレス順（例：4200〜43FFhの順）になるようにフォーマット変更を行う必要がある。
【００６６】
さらに、ＣＰＵ３１は、暗号処理期間Ｔ１０中であり、暗号演算器３２から暗号演算処理の処理終了信号ＲＥ１を受信していない場合、処理終了信号ＲＥ１を受信するまでのＷａｉｔ期間において、消費電力をバラつかせるダミー処理（Ｗａｉｔ処理）を処理ＰＲ２８として行う。
【００６７】
そして、ＣＰＵ３１は、暗号演算器３２からの処理終了信号ＲＥ１を受信後、処理ＰＲ２８を終了して、暗号化データ取得要求ＲＱ２４を暗号演算器３２に対して行う。
【００６８】
暗号化データ取得要求ＲＱ２４を受けた暗号演算器３２は部分暗号対象データＰＤ１に対して暗号演算処理を行って得られる部分暗号化データＣＤ１をＣＰＵ３１に送信する。
【００６９】
一方、ＣＰＵ３１は、１page size(200h)分の部分暗号化データＣＤ１の受信の完了を確認し、部分暗号化データＣＤ１を制御部２２に送信する部分暗号対象データの受信完了処理ＰＲ２９を行う。処理ＰＲ２９が終了すると、先行読み出し処理ＲＤ４２で読み出し、処理ＰＲ２７でフォーマット変更された次の部分暗号対象データＰＤである部分暗号対象データＰＤ２を暗号演算器３２に送信し、１回目のループ処理ＬＰ１を終了する。
【００７０】
２回目のループ処理ＬＰ１は、暗号演算器３２による部分暗号対象データＰＤ２に対する暗号演算処理と、ＣＰＵ３１による部分暗号対象データＰＤ３の先行読出し処理ＲＤ４３とを並行して行うことを主とした処理となり、１回目と同様に行われる。
【００７１】
３〜５回目のループ処理ＬＰ１は、暗号演算器３２による部分暗号対象データＰＤ３〜ＰＤ５に対する暗号演算処理と、ＣＰＵ３１による部分暗号対象データＰＤ４〜ＰＤ６の先行読出し処理ＲＤ４４〜ＲＤ４６とを並行して行うことを主とした処理となり、それぞれ１回目と同様に行われる。
【００７２】
５回目のループ処理ＬＰ１が終了すると、ループ処理ＬＰ１を外れ、暗号演算器３２は部分暗号対象データＰＤ６に対する暗号演算処理（図示省略）を行った後、暗号化データＣＤ６をＣＰＵ３１に送信する。
【００７３】
その後、ＣＰＵ３１は、セレクタ２４を変更（切り替え制御）する処理ＰＲ３０を実行することにより、メモリＩ／Ｆ２５を介したメモリ４１〜制御部２２間の第２の読み出しルートに変更する。
【００７４】
ＣＰＵ３１が暗号演算器３２に対し、部分暗号対象データＰＤ１〜ＰＤ６に対する部分暗号化データＣＤ１〜ＣＤ６の取得を完了したことを暗号演算器３２に通知する暗号処理終了信号ＲＥ２を通知する処理ＰＲ３１を行って終了する。
【００７５】
（アクセスＩＤデータ）
読み出しアクセス情報であるアクセスＩＤデータＡＩｊは、ＣＰＵ３１がどのような読み出し手順でコンテンツデータＤ４１（部分暗号対象データＰＤ）を読み出すかを指示するアクセス方法ｊを示すビット列である。
【００７６】
アクセス方法ｊとして例えば、アドレス順にシーケンシャルに読み出す（例：4000〜41FFhの順）、逆アドレス順にシーケンシャルに読み出す（例：41FF〜4000hの順）、１アドレス置きにアドレス順にシーケンシャルに読み出す（例：4000,4002,4004，…41FE，4001，4003，…41FFhの順）、１アドレス置きに逆アドレス順にシーケンシャルに読み出す（例：41FF,41FD，41FB，…0001，41FE，41FC，…4000hの順）等が考えられる。
【００７７】
また、アクセスＩＤデータＡＩｊとなるビット列として、メモリコントローラ部２としての消費電力を消費させるために、"101010…"といった隣接するビット間で電位が変化するビット列に設定すると、メモリ４１〜メモリＩ／Ｆ２５間の消費電力を大きくすることができる効果がある。例えば、アクセスＩＤデータＡＩｊが"AAh"(="10101010")の場合は、アドレス順にシーケンシャルに読み出すアクセス方法ｊと設定することができる。
【００７８】
なお、説明の都合上、アクセスＩＤデータＡＩｊを１単位データとして示したが、アクセスＩＤデータＡＩｊを複数のデータからなるデータ群で構成し、複数のデータの組合せ内容あるいは複数のデータのうち特定される少数のデータの内容に基づきアクセス方法ｊを決定するようにしても良い。
【００７９】
（ＣＰＵ３１の動作）
制御部２２から得られる暗号処理開始ＳＴ０よってＣＰＵ３１は動作を開始する(図２参照)。このタイミングでＣＰＵ３１、ＳＡ(Start Address)、ＲＳ(Read Size)を保持する。
【００８０】
そして、ＣＰＵ３１は、最初の部分暗号対象データである部分暗号対象データＰＤ１の暗号演算器３２への送信を終えると、ループ処理ＬＰ１内おいて次の部分暗号対象データＰＤ２〜ＰＤ５の先行読み出し処理とそれ以外の電力消費処理を行う。
【００８１】
電力消費処理は多く分けて以下の２つに分類される。１つは先行読み出し処理に関連がある予備的処理（アクセスＩＤデータＡＩの読み出し処理ＲＤ５１及びそれに関連した処理ＰＲ２２，ＰＲ２４，ＰＲ２５，ＰＲ２７）である。もう１つは先行読み出し処理に関連性が無いダミー処理（処理ＰＲ２３，ＰＲ２６，ＰＲ２８）である。
【００８２】
予備的処理は行うべき内容が既に決まっているが、ダミー処理の行うべき内容は任意である。例えば、処理ＰＲ２３のＷａｉｔ期間中、処理ＰＲ２６のＷａｉｔ期間中、処理ＰＲ２８の消費電力バラツキ処理が実行されるＷａｉｔ期間中それぞれにおいて、任意の内容のダミー処理が実行可能である。
【００８３】
（ダミー処理）
以下、ＣＰＵ３１が行うダミー処理について詳述する。暗号モジュール３０による消費電力をバラつかせるために、Ｗａｉｔ期間中におけるダミー処理（Ｗａｉｔ処理）を以下の３パターン準備(消費電力が大きい順に列挙)し、暗号処理期間Ｔ１０に行うＣＰＵ３１の先行読み出し処理及び電力消費処理のトータル時間等を任意に変更することができる。
【００８４】
(1) ＣＰＵ３１によるメモリ４１へのダミー読み出し処理、
(2) ＣＰＵ３１をアクティブ（Active)状態にしたダミー演算処理の実行、
(3) ＣＰＵ３１を省電力モードにしてスリープ状態にする。
【００８５】
なお、(1)のダミー読み出し処理でメモリ４１から読み出したデータはＣＰＵ３１側で保存することなく廃棄される。また、(2)のダミー演算処理として単純なループ処理を繰り返し実行するシンプルループ処理が含まれる。これらのパターン(1)〜(3)をＣＰＵ３１側で乱数を発生させ、ランダムに実行することによりダミー処理が実行される。
【００８６】
この際、暗号演算器３２による暗号演算処理の最短時間を予め算出しておく。なぜなら、ダミー処理期間（Ｗａｉｔ期間）が長すぎて、新たな部分暗号対象データＰＤに対する暗号演算処理開始時間や、新たな部分暗号対象データＰＤの読み出し完了時間が遅くなってしまっては、本実施の形態の目的とする暗号モジュール３０による暗号演算処理の高速化を果たすことができないからである。
【００８７】
上述した３パターンのダミー処理を上述した３つのＷａｉｔ期間中に適宜実行させることにより、暗号演算器３２による暗号演算処理が終了するとほぼ同時に、ＣＰＵ３１によるメモリ４１からの先行読み出し処理を完了させ、新たな部分暗号対象データＰＤの暗号演算器３２への送信が直ちに行えるようにすることができる。逆に、意図的にＷａｉｔ期間を短くすることにより、同じＳＡ（Start Address(暗号処理サイズも同じ)）となる同一データ量の部分暗号対象データＰＤを先行読み出し処理する場合でも、暗号モジュール３０の消費電力にバラツキをもたせることができる。
【００８８】
図５は暗号処理期間Ｔ１０におけるＣＰＵ３１の処理動作に伴う消費電力変化を模式的に示す説明図である。同図において、図３及び図４で示したループ処理ＬＰ１期間中における暗号モジュール３０の消費電力変化を示している。なお、消費電圧ＣＶは変化の概略を示している。
【００８９】
暗号演算器３２の暗号処理期間Ｔ１０に対し、ＣＰＵ３１はダミー処理期間ＤＴ３１〜ＤＴ３３，アクセスＩＤデータ読出期間Ｔ２２、及び暗号対象データ読出期間Ｔ２３を設定することにより、ＣＰＵ３１は暗号処理期間Ｔ１０の全時間帯に何らかの電力消費処理を実行する。
【００９０】
なお、暗号処理期間Ｔ１０前のタイミングＴＭ１ではＣＰＵ３１及び暗号演算器３２共にスタンバイ(standby)状態であるため、タイミングＴＭ１では消費電圧ＣＶは十分低く抑えることができる。
【００９１】
最初に設定されたダミー処理期間ＤＴ３１は、主として処理ＰＲ２３（図３参照）のＷａｉｔ期間に相当する。図５では、ダミー処理期間ＤＴ３１に実行するダミー処理として、上記パターン(1)であるダミー読み出し処理（Dummy Read）を実行している。したがって、ダミー処理期間ＤＴ３１におけるタイミングＴＭ２において、暗号演算器３２は暗号演算処理の実行中であり、ＣＰＵ３１はダミー処理を実行中（処理負荷：大）であるため、消費電圧ＣＶを十分高くすることができる。
【００９２】
また、ダミー処理期間ＤＴ３１から次のアクセスＩＤ読み出し期間Ｔ３１に切り替わるタイミングＴＭ３では、ＣＰＵ３１はダミー処理を終えることにより処理負荷が小となり、消費電圧ＣＶが低下し、その後、アクセスＩＤデータＡＩの読み出し処理ＲＤ５１（図３参照）が始まると消費電圧ＣＶが再び上昇する。
【００９３】
アクセスＩＤ読み出し期間Ｔ３１が終了すると、ダミー処理期間ＤＴ３２に移行する。ダミー処理期間ＤＴ３２は主として処理ＰＲ２６（図３参照）のＷａｉｔ期間に相当する。図５ででは、ダミー処理期間ＤＴ３２に実行するダミー処理として、上記パターン(3)であるＣＰＵ省電力モード（処理負荷：実質“０”）で動作させている。したがって、ダミー処理期間ＤＴ３２におけるタイミングＴＭ４において、ＣＰＵ３１の消費電圧は“０”に近くなるため、消費電圧ＣＶは大きく低下する。
【００９４】
ダミー処理期間ＤＴ３２が終わると暗号対象データ読出期間Ｔ２２に移行する。暗号対象データ読出期間Ｔ２２ではＣＰＵ３１による先行読み出し処理（処理負荷：大）が実行されることにより、暗号対象データ読出期間Ｔ２２のタイミングＴＭ５において消費電圧ＣＶは再び上昇する。その後、暗号対象データ読出期間Ｔ２２から次のダミー処理期間ＤＴ３３に切り替わるタイミングＴＭ６では、ＣＰＵ３１は先行読み出し処理を終えることにより処理負荷が小さくなり、消費電圧ＣＶが低下する。
【００９５】
暗号対象データ読出期間Ｔ２２が終了すると、ダミー処理期間ＤＴ３３に移行する。ダミー処理期間ＤＴ３３は主として処理ＰＲ２８（図４参照）の消費電力バラツキ処理を実行するＷａｉｔ期間に相当する。ダミー処理期間ＤＴ３３に実行するダミー処理として、ＣＰＵ３１は、上記パターン(2)であるダミー演算処理（シンプルループ処理；処理負荷：中）を実行する。したがって、ダミー処理期間ＤＴ３３におけるタイミングＴＭ７において、ＣＰＵ３１の消費電圧は少し上昇する。
【００９６】
ダミー処理期間ＤＴ３３が終了すると、暗号化データ受信期間Ｔ２４に移行する。この暗号化データ受信期間Ｔ２４では、ＣＰＵ３１から暗号演算器３２への暗号化データ取得要求ＲＱ２４の送信、暗号演算器３２からＣＰＵ３１への部分暗号化データＣＤ１（〜ＣＤ５）の送信、ＣＰＵ３１から暗号演算器３２への次の部分暗号対象データＰＤ２（〜ＰＤ５）の送信が行われる。この期間は、暗号演算器３２による暗号演算処理は実行されないため、消費電圧ＣＶは低下するが、ＣＰＵ３１が動作しているため“０”にはならない。
【００９７】
（電力消費処理について）
暗号演算器３２が暗号演算処理を行っている暗号処理期間Ｔ１０に対し、先行読み出し処理以外に電力消費処理（予備的処理及びダミー処理）を積極的に行う。暗号処理期間Ｔ１０以外のタイミングで電力消費処理を行ったとしても、暗号演算器３２による暗号演算処理中の消費電力に比べれば微量に消費電力が高くなるだけの効果しかないためである。
【００９８】
前述したように、ダミー処理期間ＤＴ３１〜ＤＴ３３にそれぞれ行われるダミー処理として、上記(1)〜(3)からなる３パターンから選択して実行させている。
【００９９】
上記３パターンの組み合わせ方法に工夫を施すことで、より攻撃者を混乱させることが可能となる。すなわち、ダミー処理期間ＤＴ３１〜ＤＴ３３に行うべきダミー処理のパターンを乱数等を用いて適宜変化させることが望ましい。ダミー処理のパターンの選択順序等をテーブルなどで予めＣＰＵ３１内のＲＯＭ，ＲＡＭ等の内部メモリ（図示せず）に持たせておく方法も、実装面では比較的簡単な処理となる。以下に、ダミー処理の組み合わせパターン例を列挙する。
【０１００】
１．前回の部分暗号対象データのダミー処理期間ＤＴ３１〜ＤＴ３３における３パターン(1)〜(3)の組合せと同じにしない。すなわち、前回の３パターン(1)〜(3)の組合せを記憶しておき、同じになれば変更することにより、耐タンパー性の向上を図ることができる。
【０１０１】
２．同じパターンのみによる組み合わせを使わない。すなわち、上記パターン(1)〜(3)のうち一のパターンのみを連続して採用する組み合わせを不採用とすることにより、耐タンパー性の向上を図ることができる。
【０１０２】
３．パターン(3)のＣＰＵ省電力モードはできるだけ短い期間使用する。すなわち、ＣＰＵ省電力モードは実質的に暗号演算器３２による暗号演算処理による電力しか消費されないため、なるべく短くなるよう設定して、耐タンパー性の向上を図ることができる。したがって、パターン(1)のダミー読み出し処理あるいはパターン(2)のダミー演算処理が実行される時間帯が多くなるようにパターンを決定することが重要である。
【０１０３】
４．組み合わせパターンを予めテーブルで持つ。理想的なパターン(時間内に終わる上記２,３．が実現されるパターン)をＣＰＵ３１のＲＯＭ等の内部メモリ内に予め格納しておき、どのパターンを使うか乱数で決定することにより、ダミー処理の組合せパターンの決定するＣＰＵ３１の実装面の負担を軽減する。なお、乱数で決定する代わりに、上記１．の条件を満たすようテーブルを設定する対応も考えられる。
【０１０４】
上述した、１．〜４．で述べたダミー処理の組合せ決定方式は、ＣＰＵ３１のＲＯＭ等の内部メモリを用いたファームウェアで対応が可能であるため、実装者は、これらを意識してダミー処理期間ＤＴ３１〜ＤＴ３３に行うべきダミー処理内容を検討することが望ましい。
【０１０５】
図３及び図４に示すように、ＣＰＵ３１がアクティブ状態となるのは、主としてホスト部１からの制御部２２を経由して得られる暗号処理開始ＳＴ０の要求後から、暗号演算器３２による暗号演算処理の動作間であり、攻撃者がサイドチャネル攻撃を実施の形態１の暗号モジュール３０に対して実施したとしても、ＣＰＵ３１及び暗号演算器３２が並列に動作しているため、解析が困難となる。また、上述したように、Ｗａｉｔ期間におけるダミー処理内容を毎回変更することにより、同一内容の部分暗号対象データＰＤに対する暗号演算処理実行時においても消費電力を変化させることができる。
【０１０６】
（効果等）
実施の形態１の暗号装置となる暗号モジュール３０におけるＣＰＵ３１（暗号制御部）は、暗号演算器３２による部分暗号対象データＰＤｉ（ｉ＝１〜（ｍ−１），ｍ＝６）に対する暗号処理が実行される暗号処理期間Ｔ１０中において、メモリ４１からの部分暗号対象データＰＤ（ｉ＋１）を読み出す先行読み出し処理と、先行読み出し処理以外の電力消費処理（予備的処理及びダミー処理）とを実行している。
【０１０７】
すなわち、このような実施の形態１の暗号モジュール３０は、暗号演算器３２による部分暗号対象データＰＤｉに対する暗号処理期間Ｔ１０中において、ＣＰＵ３１による先行読み出し処理及び電力消費処理が並列に行われている。このため、暗号演算器３２による暗号演算処理による消費電力に加え、ＣＰＵ３１の先行読み出し処理及び電力消費処理による消費電力が加味される時間帯を暗号処理期間Ｔ１０内に設けることにより、暗号モジュール３０は暗号演算処理時におけるサイドチャネル攻撃に対する耐タンパー性の向上を図ることができる。
【０１０８】
なお、上述した電力消費処理を省略して、先行読み出し処理のみ実行しても、先行読み出し処理による消費電力が加味される時間帯を暗号処理期間Ｔ１０内に設けることができるため、上述したタンパー性の向上を発揮することができる。
【０１０９】
さらに、ＣＰＵ３１は暗号モジュール３０内に暗号演算器３２と１パッケージ化されており、ＣＰＵ３１，暗号演算器３２間の信号授受用の配線を外部から隠蔽することができる分、暗号モジュール３０は暗号演算処理時におけるサイドチャネル攻撃に対する耐タンパー性のさらなる向上を図ることができる。なお、ＣＰＵ３１，暗号演算器３２間の配線を外部から隠蔽する例として、上述した１パッケージ化に加え、モールド処理による一体化等が考えられる。また、ＣＰＵ３１及び暗号演算器３２の位置を物理的に遠くに配置することにより、配線を外部から隠蔽する場合と同様の効果（耐タンパー性）を発揮することができる。
【０１１０】
加えて、暗号演算器３２による暗号処理期間Ｔ１０中にＣＰＵ３１は部分暗号対象データＰＤ（ｉ＋１）を読み出す先行読み出し処理を実行している。このため、暗号演算器３２は部分暗号対象データＰＤ１〜ＰＤ６に対する暗号演算処理を連続的に実行することができる分、暗号化処理の高速化を図ることができる。
【０１１１】
さらに、暗号演算器３２以外に必要な構成は、上述した先行読出し処理及び電力消費処理が実行可能なＣＰＵ３１のみであり、ＣＰＵ３１により実行される様々な電力消費処理は、プログラムを実行する等のソフトウェア処理により実現可能であるため、比較的簡単な構成で暗号モジュール３０を実現することができる。
【０１１２】
例えば、暗号モジュール３０は、外部のメモリ４１が利用できれば十分であり、高速化のために大容量のメモリを内部に設ける必要がないため、コスト削減が見込める。
【０１１３】
さらに、選択読み出しアクセス情報であるアクセスＩＤデータＡＩｊによって、部分暗号対象データＰＤｉ毎に先行読み出し処理における読み出し手順を変化させることにより、部分暗号対象データＰＤｉ毎に消費電力の発生状態を変化させることができるため、暗号演算処理時における耐タンパー性の向上を図ることができる。
【０１１４】
さらに、ダミー処理期間ＤＴ３１〜ＤＴ３３に実行されるダミー処理は、部分暗号対象データＰＤｉ毎にその処理内容が変化可能であるため、より耐タンパー性を向上させることができる。
【０１１５】
加えて、先行読み出し処理の後のダミー処理期間ＤＴ３３にダミー処理を実行して、暗号処理期間Ｔ１０の終了までに電力消費処理（ダミー処理）の実行を可能とすることにより、暗号演算処理時における耐タンパー性の向上を図ることができる。
【０１１６】
ＣＰＵ３１は、図５に示すように、暗号処理期間Ｔ１０の全時間帯において、先行読み出し処理及び電力消費処理を実行する期間（Ｔ２２，ＤＴ３１〜ＤＴ３３，Ｔ３１）を設けている。
【０１１７】
この際、ダミー処理期間ＤＴ３２においても上記(1)，(2)のパターンのダミー処理を実行することにより、ＣＰＵ３１は、暗号処理期間Ｔ１０の全時間帯において先行読み出し処理及び電力消費処理（上記(3)のスリーブ状態を除く電力消費処理）を実行することができる。その結果、暗号処理期間Ｔ１０中に暗号演算器３２のみによる暗号演算処理が行われることを確実に回避することにより、暗号演算処理時における耐タンパー性のさらなる向上を図ることができる。
【０１１８】
なお、最後の部分暗号対象データＰＤ６に対する暗号演算器３２による暗号演算処理時において、ＣＰＵ３１は先行読み出し処理を実行しないため、これらの期間において全てダミー処理を行うことが望ましい。
【０１１９】
＜実施の形態２＞
（構成）
図６はこの発明の実施の形態２である暗号モジュール３０Ｂ（暗号装置）を含むシステム構成を示すブロック図である。同図に示すように、データ処理システム５２は、実施の形態１のデータ処理システム５１と同様、ホスト部１、メモリコントローラ部２及びメモリコア部４から構成される。
【０１２０】
ただし、メモリ４１はアクセスＩＤデータＡＩ１〜ＡＩｎに代えて命令コード群ＭＣ１〜ＭＣｎを格納しており、メモリコントローラ部２内の暗号モジュール３０Ｂ内のＣＰＵ３１Ｂが命令コード群ＭＣ１〜ＭＣｎに対応する処理が可能とされた点が実施の形態１と異なる。
【０１２１】
なお、命令コード群ＭＣｉ（ｉ＝１〜ｎのいずれか）とはＣＰＵ３１に実行させる命令コードを命令実行順に格納した集合体である。すなわち、ＣＰＵ３１は命令コード群ＭＣｉ内の命令コードを順次実行することにより、命令コード群ＭＣｉの指示する読み出しプログラムを実行することができる。すなわち、命令コード群ＭＣｉは先行読み出し処理用の読み出しプログラムを規定する命令コード情報である。
【０１２２】
他の構成は、図１で示した実施の形態１の暗号装置と同様であるため、同一の符号を付して説明を適宜省略する。
【０１２３】
（ＣＰＵ３１の処理内容）
図７及び図８は実施の形態２の暗号モジュール３０ＢにおけるＣＰＵ３１の処理内容を模式的に示す説明図である。
【０１２４】
以下、同図を参照して、図２で示したように、暗号演算器３２が部分暗号対象データＰＤ１〜ＰＤ６に対し暗号演算処理を実行して部分暗号化データＣＤ１〜ＣＤ６を得る場合を例に挙げて、どのように消費電力を均等化またはバラつかせているかを説明する。
【０１２５】
なお、図３及び図４で示した実施の形態１の処理内容と同様な箇所は同一符号等を付して説明を適宜省略し、以下、実施の形態１と異なる箇所を中心に説明する。
【０１２６】
部分暗号対象データＰＤ１の暗号演算器３２への出力後に実行されるループ処理ＬＰ２の暗号処理期間Ｔ１０内において、ＣＰＵ３１Ｂは暗号モジュール３０Ｂの消費電力の均等化を図るべく、部分暗号対象データＰＤ２の先行読み出し処理ＲＤ４２以外に様々な電力消費処理（ＰＲ４２〜ＰＲ４８，ＲＤ５２）を実行する。
【０１２７】
実施の形態２において、電力消費処理における予備的処理として、命令コード群ＭＣの読み出し処理ＲＤ５２及びそれに関連した処理ＰＲ４２，ＰＲ４４，ＰＲ４５，ＰＲ４７が実行され、ダミー処理として、処理ＰＲ４３，ＰＲ４６，ＰＲ４８が実行される。
【０１２８】
ＣＰＵ３１Ｂは、ループ処理ＬＰ２の開始直後において、メモリ４１に格納された命令コード群ＭＣ１〜ＭＣｎのうち、読み出し対象の命令コード群ＭＣｊ（ｊ＝１〜ｎのいずれか；選択読み出し命令コード情報）を乱数で決定する処理ＰＲ４２を実行する。
【０１２９】
その後、ＣＰＵ３１Ｂは、読み出しＷａｉｔ期間を乱数で決定し、Ｗａｉｔ期間中は実施の形態１と同様のダミー処理（Ｗａｉｔ処理）を行う処理ＰＲ４３を実行する。
【０１３０】
処理ＰＲ４３が終了すると、ＣＰＵ３１Ｂは、メモリ４１に格納された命令コード群ＭＣｊ（処理ＰＲ４２にて決定）の読み出し処理ＲＤ５２を行い、メモリ４１から命令コード群ＭＣｊを読み出す。読み出し処理ＲＤ５２の実行期間が命令コード群読出期間Ｔ３２となる。
【０１３１】
その後、ＣＰＵ３１Ｂは、命令コード群ＭＣｊのプログラム内容をデコードする処理ＰＲ４４を実行し、続けて、命令コード群ＭＣｊで指示されたメモリ読み出しプログラムを決定する処理ＰＲ４５を行う。ここで処理ＰＲ４５により決定されたメモリ読み出しプログラムを「読み出しプログラムｊ」とする。
【０１３２】
そして、ＣＰＵ３１Ｂは、読み出しまでのＷａｉｔ期間を乱数で決定し、Ｗａｉｔ期間においてダミー処理（Ｗａｉｔ処理）を行う処理ＰＲ４６を実行する。
【０１３３】
処理ＰＲ４６が終了すると、ＣＰＵ３１Ｂは、読み出しプログラムｊに従った読み出し内容（読み出し手順を含む）で部分暗号対象データＰＤ２の先行読み出し処理Ｒ４３を実行して、部分暗号対象データＰＤ２を得る。ＣＰＵ３１Ｂによってメモリ４１から部分暗号対象データＰＤ２を読み出す期間が暗号対象データ読出期間Ｔ２２となる。ここで、読み出しプログラムｊによって読み出された部分暗号対象データＰＤ２を部分暗号対象データＰＤ２ｘとする。部分暗号対象データＰＤ２ｘは読み出しプログラムｊに従った読み出し内容（読み出し手順）で読み出された結果のデータ列であるため、通常は部分暗号対象データＰＤ２と異なる内容となる。
【０１３４】
その後、ＣＰＵ３１Ｂは、暗号演算器３２に入力する部分暗号対象データのフォーマット変更する処理ＰＲ４７を実行する。すなわち、部分暗号対象データＰＤ２ｘを本来の部分暗号対象データＰＤ２に整形する処理を行う。
【０１３５】
さらに、ＣＰＵ３１Ｂは、暗号処理期間Ｔ１０中であり、暗号演算器３２から暗号演算処理の処理終了信号ＲＥ１を受信していない場合、処理終了信号ＲＥ１を受信するまでのＷａｉｔ期間において消費電力をバラつかせるためのダミー処理を処理ＰＲ４８として実行する。
【０１３６】
そして、ＣＰＵ３１Ｂは、暗号演算器３２からの処理終了信号ＲＥ１を受信後、処理ＰＲ４８を終了して、暗号化データ取得要求ＲＱ２４を暗号演算器３２に対して行う。
【０１３７】
暗号化データ取得要求ＲＱ２４を受けた暗号演算器３２は部分暗号対象データＰＤ１に対して暗号演算処理を行って得られる部分暗号化データＣＤ１をＣＰＵ３１Ｂに送信する。
【０１３８】
一方、ＣＰＵ３１Ｂは、１page size(200h)分の部分暗号化データＣＤ１の受信の完了を確認し、部分暗号化データＣＤ１を制御部２２に送信する部分暗号対象データの受信完了処理ＰＲ４９を行う。処理ＰＲ４９が終了すると、先行読み出し処理ＲＤ４３で読み出し、処理ＰＲ４７でフォーマット変更された次の部分暗号対象データＰＤである部分暗号対象データＰＤ２を暗号演算器３２に送信し、１回目のループ処理ＬＰ２を終了する。
【０１３９】
２回目のループ処理ＬＰ２は、暗号演算器３２による部分暗号対象データＰＤ２に対する暗号演算処理と、ＣＰＵ３１Ｂによる部分暗号対象データＰＤ３の先行読出し処理ＲＤ４３を並行して行うことを主とした処理となり、１回目と同様に行われる。
【０１４０】
３〜５回目のループ処理ＬＰ２は、暗号演算器３２による部分暗号対象データＰＤ３〜ＰＤ５に対する暗号演算処理と、ＣＰＵ３１Ｂによる部分暗号対象データＰＤ４〜ＰＤ６の先行読出し処理ＲＤ４４〜ＲＤ４６を並行して行うことを主とした処理となり、それぞれ１回目と同様に行われる。
【０１４１】
５回目のループ処理ＬＰ２が終了後の処理は図３及び図４で示した実施の形態１と同様に終了する。
【０１４２】
（命令コード群）
前述したように、命令コード情報である各命令コード群ＭＣｉは、命令コードの集合体で構成され、新たな部分暗号対象データＰＤを先行読み出し処理を実現するためのアルゴリズムとなる読み出しプログラムを規定している。
【０１４３】
したがって、命令コード群ＭＣ１〜ＭＣｎそれぞれにおいて、異なる読み出し内容（読み出し手順を含む）からなる読み出しプログラムを規定することにより、部分暗号対象データＰＤ毎に読み出し内容を変化させ、消費電力の発生内容を変化させることができる。
【０１４４】
なお、命令コード群ＭＣｉを構成する複数の命令コードを独自にカスタマイズし、隣接するビット間で“１”と“０”とが配置されるようにして、命令コード群ＭＣｉの読み出し時における消費電力を大きくすることができる。例えば、命令コード群ＭＣｉの読み出し時の消費電力を大きくしたい場合、命令コードとして使用頻度が高いＬＤ命令やＮＯＰ命令コードを"10101010"や"01010101"に設定するなどが考えられる。
【０１４５】
このように、命令コードをカスタマイズできるように作成すれば、メモリ４１の命令コード群ＭＣｉとして格納する命令コードを変更するだけで、命令コード群ＭＣｉの読み出し時における消費電力を均等化及びバラツキ制御が可能となる。
【０１４６】
また、処理４５（図７参照）において、暗号演算器３２は選択された命令コード群ＭＣｊ内の各命令コードをデコードし、デコード結果に従って読み出しプログラムを実行している。
【０１４７】
命令コード群ＭＣｊの選択方法について、メモリ４１に格納された命令コード群ＭＣ１〜ＭＣｎの選択順序を予め定めておき、命令コード群ＭＣ１〜ＭＣｎ間で予め決定した選択順序に沿って命令コード群ＭＣ１〜ＭＣｎのいずれかを命令コード群ＭＣｊとして読み出す方法を採用しても良い。
【０１４８】
なお、命令コード群ＭＣｉで指示される読み出しプログラム内容は予め設定でき、例えば、命令コード群ＭＣ１はシーケンシャルに行う読み出し処理、命令コード群ＭＣ２はデクリメントに行う読み出し処理をそれぞれ実行するプログラムを規定する等、様々な対応が考えられる。
【０１４９】
（効果等）
実施の形態２の暗号モジュール３０Ｂは、メモリ４１に格納した命令コード群ＭＣ１〜ＭＣｎで規定された読み出しプログラムを実行するように構成した点を除き、実施の形態１の暗号モジュール３０と同様な構成を呈しているため、実施の形態１と同様の効果を奏する。以下、実施の形態１と異なる効果について述べる。
【０１５０】
実施の形態２の暗号モジュール３０Ｂは、選択読み出し命令コード情報である命令コード群ＭＣｊによって、部分暗号対象データＰＤｉ毎に先行読み出し処理内容を変化させることにより、部分暗号対象データＰＤｉ毎に消費電力の発生状態を変化させることができるため、暗号演算処理時における耐タンパー性の向上を図ることができる。
【０１５１】
このように、実施の形態２では、命令コード群ＭＣｉをメモリ４１に格納しておくことで、ＣＰＵ３１Ｂは先行読み出し処理を実行するためのプログラムをＲＯＭ等の内部メモリに格納する必要がなくなるため、ＣＰＵ３１Ｂの内部メモリの容量の低減化を図ることができる。
【０１５２】
一方、実施の形態１では、アクセスＩＤデータＡＩｊの指示する読み出し手順で先行読み出し処理を実行するための読み出しプログラムをＣＰＵ３１のＲＯＭ等の内部メモリに格納する必要があるため、ＣＰＵ３１の内部メモリの容量を実施の形態２のＣＰＵ３１Ｂに対して大きくする必要がある。
【０１５３】
さらに、実施の形態２の暗号モジュール３０Ｂでは、比較的大容量のメモリコア部４のメモリ４１に命令コード群ＭＣｉを格納することにより、多様な読み出し内容（読み出し手順）を実行する読み出しプログラムを命令コード群ＭＣ１〜ＭＣｎとして格納することができる効果を奏する。
【０１５４】
なお、上述した実施の形態では、暗号モジュール３０を暗号装置として説明したが、コンテンツデータＤ４１（部分暗号対象データＰＤ１〜ＰＤ６）、及びアクセスＩＤデータＡＩ１〜ＡＩｎ（命令コード群ＭＣ１〜ＭＣｎ）を格納するメモリ４１と暗号モジュール３０とからなる構成を本発明の暗号処理システムとして考えることもできる。
【０１５５】
なお、本発明は、その発明の範囲内において、各実施の形態を自由に組み合わせたり、各実施の形態を適宜、変形、省略したりすることが可能である。
【符号の説明】
【０１５６】
１  ホスト部
２  メモリコントローラ部
４  メモリコア部
２２  制御部
３０，３０Ｂ  暗号モジュール
３１，３１Ｂ  ＣＰＵ
３２  暗号演算器
２４  セレクタ
２５  メモリＩ／Ｆ
４１  メモリ
【図１】
2014192793.tif 000003
【図２】
2014192793.tif 000004
【図３】
2014192793.tif 000005
【図４】
2014192793.tif 000006
【図５】
2014192793.tif 000007
【図６】
2014192793.tif 000008
【図７】
2014192793.tif 000009
【図８】
2014192793.tif 000010