(57)【要約】【課題】既存の半導体集積回路からの回路変更が少なく、かつ、少ない乱数ビットで転送性能を低下させることなく、電力解析攻撃に対する耐性を向上させることを特徴とする半導体集積回路を提供する。【解決手段】本発明の半導体集積回路１は、ＣＰＵ３、メモリ装置４Ａ、４Ｂ、暗号コプロセッサ５の入出力端部に反転制御部６をそれぞれ設け、データ転送時に乱数発生装置７から出力される乱数ビットに応じて秘密情報データをランダムに反転させる構成とした。【選択図】  図１
2014096644.tif 000002
【特許請求の範囲】
【請求項１】
秘密情報データを格納又は出力するメモリと、
データバスを介して、前記メモリとの間で前記秘密情報データのデータ転送を行うＣＰＵと、
前記メモリから秘密情報データを受けた場合、該秘密情報データのビットをランダムに反転して反転データとして前記ＣＰＵに出力し、
前記ＣＰＵから秘密情報データを受けた場合、該秘密情報データが反転データである場合は反転して前記メモリに出力し、非反転データである場合は反転せずに前記メモリへ出力する第１の反転制御部と、
前記ＣＰＵから秘密情報データを受けた場合、該秘密情報データのビットをランダムに反転して前記メモリに出力し、前記メモリから秘密情報データを受けた場合、該秘密情報データが反転データである場合は反転して前記ＣＰＵへ出力し、非反転データである場合は反転せずに前記ＣＰＵへ出力する第２の反転制御部と
を備えた半導体集積回路。
【請求項２】
乱数ビットを出力する乱数発生装置を備え、
前記第１の反転制御部又は前記第２の反転制御部は、前記乱数ビットの値に基いて反転又は非反転とすることを特徴とする請求項１に記載の半導体集積回路。
【請求項３】
前記メモリから前記ＣＰＵへ秘密情報データを転送する時、
前記第１の反転制御部は、
前記乱数発生装置から出力された乱数ビットに基いて秘密情報データを反転又は非反転とするとともに、前記乱数ビットを前記第２の反転制御部へ出力し、
前記第２の反転制御部は、前記第１の反転制御部から出力された乱数ビットを受けて前記秘密情報データが反転データか非反転データかを判断し、
前記ＣＰＵから前記メモリへ秘密情報データを転送する時、
前記第２の反転制御部は、
前記乱数発生装置から出力された乱数ビットに基いて秘密情報データを反転又は非反転とするとともに、前記乱数ビットを前記第１の反転制御部へ出力し、
前記第１の反転制御部は、前記第１の反転制御部から出力された乱数ビットを受けて前記秘密情報データが反転データか非反転データかを判断することを特徴とする
請求項２に記載の半導体集積回路。
【請求項４】
前記第２の反転制御部は、
前記秘密情報データを反転せずに入力することを示す信号を前記ＣＰＵから受けた場合、
前記データバスから受けた前記秘密情報データを反転せずに前記ＣＰＵに出力することを特徴とする請求項１ないし請求項３に記載のいずれかに記載の半導体集積回路。
【請求項５】
前記第２の反転制御部は、
前記秘密情報データを反転せずに出力することを示す信号を前記ＣＰＵから受けた場合、
前記ＣＰＵから受けた前記秘密情報データを反転せずに前記データバスに出力することを特徴とする請求項４に記載の半導体集積回路。
【請求項６】
秘密情報データを格納又は出力するメモリと、
データバスを介して、前記メモリとの間で前記秘密情報データのデータ転送を行うＣＰＵとを備えた半導体集積回路のデータ転送方法において、
前記メモリから秘密情報データを受けて、該秘密情報データのビットをランダムに反転して前記データバスに出力するステップと、
前記データバスから前記秘密情報データを受けて、該秘密情報データが反転データである場合は反転して入力し、非反転データである場合は反転せずに前記ＣＰＵへ出力するステップと
を有することを特徴とするデータ転送方法。
【請求項７】
前記データバスから前記秘密情報データを受けて、該秘密情報データが反転データである場合は反転して入力し、非反転データである場合は反転せずに前記ＣＰＵへ出力するステップにおいて、
前記秘密情報データを反転せずに格納することを示す信号が前記ＣＰＵから出力された場合、前記転送データを反転せずに前記ＣＰＵに入力することを特徴とする請求項６に記載の半導体集積回路。
【請求項８】
メモリから出力されたランダムに反転された秘密情報データをデータバスから受けて非反転データとして出力する反転制御部と、
前記反転制御部から出力された秘密情報データを格納するＣＰＵとを備え、
秘密情報データをコピーするプログラム実行時には、前記反転制御部は前記データバスから読み出す前記秘密情報データが非反転データか反転データかに関らず、反転せずに前記ＣＰＵに出力することを特徴とする中央処理装置。
【請求項９】
秘密情報データが格納されたＣＰＵと、
前記ＣＰＵから出力された秘密情報データを受けてランダムに反転してデータバスに出力する反転制御部とを備え、
秘密情報データをコピーするプログラム実行時には、前記反転制御部は前記ＣＰＵから出力される秘密情報データが反転データか非反転データかに関わらず、反転せずに前記データバスに出力することを特徴とする中央処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、秘密情報データ転送中の電力解析攻撃を困難にする半導体集積回路及びそのデータ転送方法に関するものである。
【背景技術】
【０００２】
一般に、システムＬＳＩ等の半導体集積回路は内部にＣＰＵおよび各種メモリ装置を含み、それらがデータバスを介して接続されている。このような半導体集積回路は、鍵データ等の秘密情報データをＣＰＵとメモリ装置等の間で転送する場合、データバスを介して実行する。このとき、データバスはデータバス上に現れるデータのハミング重みに依存して消費電力が偏る可能性がある。特に、データバス上に有効なデータが現れていない期間にデータバスを全て０（または全て1）の状態とするような設計がされた場合、この傾向が高い。このような半導体集積回路において秘密情報データのデータ転送を実行すると、データバス上で０から１へ信号変化が起こる。この変化したビットの信号変化数は、秘密情報データのハミング重みと一致する。ここでハミング重みとは、ビット列中の０以外のシンボルの個数である。さらに、信号変化数はデータ転送時の消費電力に比例する。すなわち、データバス上に現れる秘密情報データのハミング重みに応じて消費電力が増減する。
【０００３】
この消費電力を解析することによって秘密情報を取得する方法として電力解析攻撃が知られている。例えば、攻撃者は、攻撃対象の半導体集積回路に、任意の転送データを繰り返し与えて消費電力波形を大量に測定する。また、測定した大量の消費電力波形を、ハミング重みに基いてグループ分けし、各グループの平均波形を計算する。次に、攻撃者は、未知の秘密情報データを転送する際の消費電力を測定する。このとき、ハミング重みに基いてグループ分けした平均波形と、未知の秘密情報データとを比較する。未知の秘密情報データを転送した時の消費電力波形と最も近い平均波形のグループのハミング重みが未知の秘密情報データのハミング重みに等しいと推定することができる。したがって、秘密情報データ転送時の消費電力を解析することで、データバス上に現れたデータのハミング重みを推定し、秘密情報データに関する情報を取得することができる。この電力解析攻撃を防止するため、データバス上に現れる秘密情報データのハミング重みと消費電力の関連性を低減し、電力解析攻撃への耐性を向上させる半導体集積回路が提案されている。（例えば、特許文献１、特許文献２）
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開2008-269060
【特許文献２】特開2008-271048
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１に開示されている半導体集積回路は、データバスが使用されていない時に、無効データをデータバスに出力することで、秘密情報データとハミング重みの関連性を減らしている。一方、特許文献２に開示された半導体集積回路では、秘密情報データを転送する際に、ハミング重みが一定になるような付加ビットを生成する。この付加ビットと秘密情報データを同時にデータバス上に出力することで、データバス上の秘密情報データのハミング重みを均一化することができ、電力解析攻撃に対する耐性を改善している。しかし、特許文献１、特許文献２に記載された半導体集積回路では、秘密情報データ以外の無効データや付加ビットを秘密情報データと同時に転送するので、従来の半導体集積回路に比べて転送性能が低下するという問題があった。
【０００６】
本発明は、上記課題に鑑みてなされたもので、転送性能を低下させることなく、電力解析攻撃によるデータのハミング重みに基く脆弱性を解決することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の半導体集積回路は、秘密情報データを格納又は出力するメモリと、データバスを介して、前記メモリとの間で前記秘密情報データのデータ転送を行うＣＰＵと、前記メモリから秘密情報データを受けた場合、該秘密情報データのビットをランダムに反転して反転データとして前記ＣＰＵに出力し、前記ＣＰＵから秘密情報データを受けた場合、該秘密情報データが反転データである場合は反転して前記メモリに出力し、非反転データである場合は反転せずに前記メモリへ出力する第１の反転制御部と、前記ＣＰＵから秘密情報データを受けた場合、該秘密情報データのビットをランダムに反転して前記メモリに出力し、前記メモリから秘密情報データを受けた場合、該秘密情報データが反転データである場合は反転して前記ＣＰＵへ出力し、非反転データである場合は反転せずに前記ＣＰＵへ出力する第２の反転制御部とを備えたことを特徴とする。
【発明の効果】
【０００８】
本発明の半導体集積回路は、データバス上に出力する秘密情報データをランダムに反転させて転送させる構成としたので、転送性能を低下させることなく、データバス９の消費電力を解析する電力解析攻撃への耐性を向上させることができる。
【図面の簡単な説明】
【０００９】
【図１】実施の形態１に係る半導体集積回路の構成を示す図。
【図２】実施の形態１に係る半導体集積回路においてメモリ装置からＣＰＵへ秘密情報データを転送する際の動作フローチャートを示す図。
【図３】実施の形態１に係る反転制御部の回路構成例を示す図。
【図４】実施の形態２に係る半導体集積回路においてメモリ装置からＣＰＵを介して別のメモリ装置へ秘密情報データをコピーする際の動作フローチャートを示す図。
【図５】実施の形態２に係る反転制御部の回路構成例を示す図。
【発明を実施するための形態】
【００１０】
実施の形態１
以下、図１から図３を用いて本発明の実施の形態１に係る半導体集積回路について説明する。図１は実施の形態１に係る半導体集積回路の構成を示す図である。図２は実施の形態１に係る半導体集積回路においてメモリ装置からＣＰＵへ秘密情報データを転送する際の動作フローチャートを示す図である。図３は実施の形態１に係る反転制御部の回路構成例を示す図である。
【００１１】
以下に図１を用いて実施の形態１に係る半導体集積回路１の構成を説明する。  
【００１２】
実施の形態１における半導体集積回路１は、入力回路２と、ＣＰＵ３と、メモリ装置４Ａ、４Ｂと、暗号コプロセッサ５と、反転制御部６Ａ、６Ｂ、６Ｃ、６Ｄ（以下、適宜反転制御部６Ａ、６Ｂ、６Ｃ、６Ｄをまとめて「反転制御部６」とする。）と、乱数発生装置７と、出力回路８とで構成されている。入力回路２、ＣＰＵ３、メモリ装置４Ａ、メモリ装置４Ｂ、暗号コプロセッサ５、入力回路２、出力回路８は互いにデータバス９で接続されており、データバス９を介して秘密情報データの転送を行う。ここで、秘密情報データとは、暗号化に使用する鍵データ、暗号化する前の平文データ、暗号化後の暗号データ等、電力解析攻撃によって推定されるおそれのあるデータの全てを指す。さらに、反転制御部６は、信号線Ａによって乱数発生装置７と接続される。また、各反転制御部６間は信号線Ｂにより接続されている。
【００１３】
入力回路２は、外部から入力されるデータを半導体集積回路１の各構成要素へ出力する回路である。
【００１４】
ＣＰＵ３は、メモリ装置４Ａ、メモリ装置４Ｂ、暗号コプロセッサ５にアクセスして秘密情報データの読み出し又は書き込みを行う。読み出しの場合、ＣＰＵ３はメモリ装置４Ａ、メモリ装置４Ｂ、暗号コプロセッサ５のうち秘密情報データが格納された構成要素に対してＬＯＡＤ信号を出力してアクセスし、秘密情報データをＣＰＵ３に転送させて読み込む。書き込みの場合、ＣＰＵ３は、メモリ装置４Ａ、メモリ装置４Ｂ、暗号コプロセッサ５のうち書き込む構成要素にＳＴＯＲＥ信号を出力してアクセスし、秘密情報データをＣＰＵ３から転送して書き込む。このようにして、ＣＰＵ３は秘密情報データのデータ転送を実行する。
【００１５】
データバス９は、ＣＰＵ３、メモリ装置４Ａ、メモリ装置４Ｂ、暗号コプロセッサ５を接続する信号線である。データバス９は、ＣＰＵ３とその他の構成要素との間で秘密情報データの転送を行う際に伝送路として使用される。
【００１６】
メモリ装置４Ａ、メモリ装置４Ｂは、秘密情報データを格納する装置である。例えば、入力回路２から入力された秘密情報データは、ＣＰＵ３を介して一旦メモリ装置４に格納される。メモリ装置４はＣＰＵ３からＬＯＡＤ信号を受けて、秘密情報データをデータバス９に出力する。
【００１７】
暗号コプロセッサ５は、暗号化処理、または、暗号化処理に必要な演算を行う専用回路である。暗号コプロセッサ５は、メモリ装置４Ａ等と同様に、ＣＰＵ３からＬＯＡＤ信号を受けて、秘密情報データを出力し、ＳＴＯＲＥ信号を受けて秘密情報データを格納する。
【００１８】
乱数発生装置７は、反転制御部６に信号線Ａを介して乱数ビット１０１を供給する装置である。すなわち、乱数発生装置７は、ランダムに「１」と「０」を出力する。
【００１９】
反転制御部６Ａ、６Ｂ、６Ｃ、６Ｄは、ＣＰＵ３、メモリ装置４Ａ、メモリ装置４Ｂ、暗号コプロセッサ５の入出力部にそれぞれ設けられる。反転制御部６は、各構成要素から秘密情報データをデータバス９に出力する際、乱数発生装置７からの乱数ビット１０１の示す値に基づいて秘密情報データを反転してデータバス９に出力する。例えば、乱数ビット１０１の示す値が「０」である場合、秘密情報データを反転して出力し、乱数ビットの示す値が「１」である場合、反転せずにデータバス９に出力する。さらに、反転制御部６は、入力された乱数ビット１０１を信号線Ｂを介して他の反転制御部６に反転制御信号１１０として出力する。ここで、反転制御信号１１０とは、反転制御部６に入力される秘密情報データが反転データか非反転データ（以後、秘密情報データが反転されていない状態を「真のデータ」とする。）かを示す信号である。一方、反転制御部６は、各構成要素が秘密情報データを格納する際には、入力される反転制御信号１１０の値によって入力される秘密情報データが「真のデータ」か反転データかを判断し、秘密情報データを「真のデータ」に戻してからメモリ装置４Ａ、４Ｂ、暗号コプロセッサ５、ＣＰＵ３に出力する。なお、反転データとは、８ビットの秘密情報データが２進表記で「１１１１００００」と表される場合、その反転データは「００００１１１１」で表されるものとする。
【００２０】
出力回路８は、暗号データ等を半導体集積回路１の外部に出力する回路である。
【００２１】
ここで、半導体集積回路１が秘密情報データを暗号化する際の秘密情報データの流れを共通鍵暗号の例で説明する。まず、平文データが、入力回路２を介して半導体集積回路１内に入力される。入力された平文データは、ＣＰＵ３を介して一旦メモリ装置４Ａ（この例の場合は揮発性メモリとする）に転送され、格納される。メモリ装置４Ａに格納された平文データは、ＣＰＵ３を介して暗号コプロセッサ５へ転送され、暗号化の演算処理が行われる。このとき、暗号化の演算処理に使用する鍵データは予めメモリ装置４Ｂ（この例の場合は不揮発性メモリとする）に格納されており、ＣＰＵ３を介して暗号コプロセッサ５に転送される。暗号コプロセッサ５によって暗号化された暗号データが、ＣＰＵ３を介して出力回路８へ転送され、外部へ出力される。このように、半導体集積回路１は内部の構成要素間で秘密情報データの転送を繰り返して暗号データを得る。なお、各構成要素間のデータ転送は、データバス９を介して行われる。また、上記の秘密情報データの暗号化処理は一例であり、これに限られるものではない。
【００２２】
次に、図２のフローチャートを用いて実施の形態１に係る半導体集積回路１の動作を説明する。なお、図２の説明では、メモリ装置４ＡからＣＰＵ３へ秘密情報データを転送する場合を例に説明する。また、ＣＰＵ３からメモリ装置４Ａ、メモリ装置４ＢからＣＰＵ３、ＣＰＵ３からメモリ装置４Ｂ、ＣＰＵ３から暗号コプロセッサ５、暗号コプロセッサ５からＣＰＵ３のそれぞれの間で行うデータ転送もメモリ装置４ＡからＣＰＵ３へ秘密情報データを転送する場合と同様の動作であるため省略する。
【００２３】
ステップ２００において、乱数発生装置７はメモリ装置４Ａの入出力部に接続された反転制御部６Ａに乱数ビット１０１を出力する。
【００２４】
ステップ２０１において、ＣＰＵ３は秘密情報データの読み出しを命令するＬＯＡＤ命令を実行する。ＬＯＡＤ命令とは、読み出す対象となる秘密情報データを格納しているメモリ装置４Ａにアクセスし、ＣＰＵ３へデータ転送させる命令である。ＬＯＡＤ命令実行時、ＣＰＵ３は、ＬＯＡＤ信号を半導体集積回路１内部の信号線（図示せず）を介してメモリ装置４Ａに出力してアクセスする。
【００２５】
ステップ２０２において、ＬＯＡＤ信号を受けたメモリ装置４Ａは、メモリ装置４Ａに格納された秘密情報データを反転制御部６Ａに出力する。
【００２６】
ステップ２０３において、ステップ２００で乱数発生装置７から出力された乱数ビット１０１を受けた反転制御部６Ａは、乱数ビット１０１の値に基づいて、秘密情報データを真のデータまたは反転データとし、データバス９を介して反転制御部６Ｄに出力する。また、反転制御部６Ａは、入力された乱数ビット１０１をそのまま反転制御信号１１０として信号線Ｂを介して反転制御部６Ｄへ出力する。なお、反転制御信号１１０とは、反転制御部６に入力される秘密情報データが真のデータか反転データかを示す信号である。
【００２７】
ステップ２０４において、反転制御部６Ｄには、真のデータ又は反転データとなった秘密情報データと、ステップ２０３で反転制御部６Ａから出力された反転制御信号１１０が入力される。反転制御部６Ｄは、反転制御信号１１０の値に基づいて秘密情報データを真のデータとしてからＣＰＵ３へ出力する。このとき、反転制御信号１１０は、反転制御部６Ｄに入力される秘密情報データが真のデータか反転データであるかを判断する信号として用いられている。例えば、ステップ２０２で乱数発生装置７から出力された乱数ビット１０１として「０」が反転制御部６Ａに入力された場合、反転制御部６Ａは秘密情報データを反転する。このとき、反転制御部６Ａは、入力された「０」を示す乱数ビット１０１に対応して「０」を示す反転制御信号１１０を反転制御部６Ｄに出力する。すなわち、反転制御信号１１０として「０」が反転制御部６Ｄに入力された場合、反転制御部６Ｄに入力される秘密情報データは反転データであり、反転制御部６Ｄは、反転された秘密情報データを再度反転して、真のデータに戻してからＣＰＵ３に出力する。
【００２８】
ステップ２０５において、ＣＰＵ３は、反転制御部６Ｄから出力された秘密情報データを格納する。このようにして、メモリ装置４ＡからＣＰＵ３へのデータ転送が完了する。
【００２９】
ここで、実施の形態１に係る反転制御部６の構成例を図３を用いて詳細に説明する。なお、図１と同じ番号を付した構成要素については、同様のものとし、説明を省略する。また、以下の説明においては、半導体集積回路１がメモリ装置４ＡからＣＰＵ３へ秘密情報データを転送する例について説明する。
【００３０】
反転制御部６Ａは、メモリ装置４Ａの出力端子に設けられた出力側反転制御回路２１Ａと、メモリ装置４Ａの入力端子に設けられた入力側反転制御回路２０Ａと、レジスタ１２Ａとで構成される。
【００３１】
出力側反転制御回路２１Ａは、マルチプレクサ３１Ａと反転回路４１Ａで構成される。マルチプレクサ３１Ａは、乱数ビット１０１が示す値に応じて、二つの信号線から入力された秘密情報データのうち一つを選択して、データバス９に出力する回路である。マルチプレクサ３１Ａは、乱数発生装置７から出力された乱数ビット１０１の信号線Ａと、メモリ装置４Ａから出力された秘密情報データの信号線とに接続されている。メモリ装置４Ａと接続された信号線は、途中で分岐して二つの信号線となっている。一つの信号線は、メモリ装置４Ａから直接接続され（以下、「経路Ａ」とする）、もう一方の信号線は反転回路４１Ａを介して接続されている（以下、「経路Ｂ」とする）。なお、反転回路４１Ａは、入力された秘密情報データを反転して出力する回路である。
【００３２】
一方、入力側反転制御回路２０Ａは、マルチプレクサ３０Ａと反転回路４０Ａとから構成される。入力側反転制御回路２０Ａは、出力側反転制御回路２１Ａと同じ回路構成となっているため、各構成の説明は省略する。
【００３３】
また、ＣＰＵ３の入出力部に設けられた反転制御部６Ｄは、反転制御部６Ａと同様の機能と構成である。ＣＰＵ３の入力端子側に設けられた入力側反転制御回路２０Ｄは入力側反転制御回路２０Ａと、出力端子側に設けられた出力側反転制御回路２１Ｄは、出力側反転制御回路２１Ａと、それぞれ同様の構成であるため、説明は省略する。なお、マルチプレクサ３１Ｄは、ＣＰＵ３からメモリ装置４Ａに秘密情報データを転送する際に乱数発生装置７から出力される乱数ビット１０２を受ける。ここで、乱数ビット１０２は、乱数ビット１０１と同様、乱数発生装置７から出力される１ビットの乱数である。
【００３４】
レジスタ１２Ａ、１２Ｄは、それぞれ乱数ビット１０１と１０２の出力タイミングを調整する回路である。レジスタ１２Ａは、乱数ビット１０１とクロック信号１０４を受けてはじめて乱数ビット１０１を出力する。レジスタ１２Ａは、マルチプレクサ３１Ａ、３０Ｄに秘密情報データが入力されるよりも前に乱数ビット１０１が入力されるよう制御する。なお、レジスタ１２Ｄは、レジスタ１２Ａと同様の機能である。乱数ビット１０２とクロック信号１０５を受けて初めて乱数ビット１０２をマルチプレクサ３１Ｄに出力する。また、乱数ビット１０１、１０２は、乱数発生装置７からそれぞれ異なるタイミングで出力される。具体的には、乱数ビット１０１は、メモリ装置４ＡからＣＰＵ３へ秘密情報データを転送する際に出力され、乱数ビット１０２は、ＣＰＵ３からメモリ装置４Ａへ秘密情報データが転送される際に出力される乱数ビットである。
【００３５】
次に、図３に示した反転制御部６の動作を詳細に説明する。
【００３６】
まず、乱数発生装置７から出力された乱数ビット１０１は、レジスタ１２Ａに入力される。レジスタ１２Ａは、クロック信号１０４と乱数ビット１０１を受けて、マルチプレクサ３１Ａに乱数ビット１０１を出力する。また、この乱数ビット１０１は、反転制御信号１１０として信号線Ｂを介してマルチプレクサ３０Ｄに出力される。
【００３７】
次に、メモリ装置４Ａは、ＣＰＵ３からのＬＯＡＤ信号（図示せず）を受けて秘密情報データを出力側反転制御回路２１Ａに出力する。出力側反転制御回路２１Ａに入力された秘密情報データは、経路Ａと経路Ｂを介してマルチプレクサ３１Ａに入力される。
【００３８】
マルチプレクサ３１Ａは、乱数ビット１０１の示す値に応じて、経路Ａ又は経路Ｂのうち、一方を選択する。例えば、マルチプレクサ３１Ａは、入力された乱数ビット１０１の示す値が「０」である場合、経路Ｂを選択して秘密情報データを反転させてデータバス９に出力する。一方、乱数ビット１０１の示す値が「１」の場合、マルチプレクサ３１Ａは、経路Ａを選択して、秘密情報データを真のデータのままデータバス９に出力する。マルチプレクサ３１Ａから出力された秘密情報データは、データバス９を介して入力側反転制御回路２０Ｄに入力される。このとき、秘密情報データは、入力側反転制御部２０Ｄの経路Ａと経路Ｂとを介してマルチプレクサ３０Ｄに入力される。
【００３９】
マルチプレクサ３０Ｄは、秘密情報データを経路Ａと経路Ｂから受け、乱数発生装置７から出力された反転制御信号１１０の示す値に応じて、経路Ａと経路Ｂの一方を選択してＣＰＵ３に出力する。ここで、マルチプレクサ３０Ｄは、秘密情報データが必ず真のデータになるような経路を選択する。例えば、反転制御部６Ａ内のマルチプレクサ３１Ａに乱数ビット１０１として「０」が入力されていた場合、入力側反転制御回路２０Ｄには反転データが入力される。このとき、ＣＰＵ３の入力側反転制御回路２０Ｄ内のマルチプレクサ３０Ｄにも、反転制御信号１１０として「０」が入力される。これを受けたマルチプレクサ３０Ｄは、反転制御部６Ａから出力される秘密情報データが反転データであると判断することができる。よって、マルチプレクサ３０Ｄは、経路Ｂを選択して反転データを再び反転して真のデータとした後、この真のデータをＣＰＵ３へ出力する。一方、入力側反転制御回路２０Ｄは、反転制御信号１１０として「１」が入力され、秘密情報データとして真のデータが入力された場合、経路Ａを選択して、真のデータをそのままＣＰＵ３に出力する。よって、ＣＰＵ３に入力される秘密情報データは必ず真のデータとなる。
【００４０】
以上のように、実施の形態１に係る半導体集積回路１は、秘密情報データのデータ転送を終了する。
【００４１】
なお、以上の説明においては、メモリ装置４ＡからＣＰＵ３へのデータ転送を例に説明したが、ＣＰＵ３からメモリ装置４Ａへの転送も図１、図３に示した回路構成によって実現できる。その際、秘密情報データは、ＣＰＵ３、出力側反転制御回路２１Ｄ、データバス９、入力側反転制御回路２０Ａ、メモリ装置４Ａの順で転送される。また、メモリ装置４Ａに秘密情報データが入力される場合においても、秘密情報データは必ず真のデータで入力される。
【００４２】
また、メモリ装置４ＡとＣＰＵ３との間におけるデータ転送を例に説明したが、ＣＰＵ３とメモリ装置４Ｂ、ＣＰＵ３と暗号コプロセッサ５間でのデータ転送も同様の構成と動作で実現できる。
【００４３】
さらに、反転制御部６をＣＰＵ３等の各構成要素の外部に設ける構成としたが、反転制御部６をＣＰＵ３等の各構成要素の内部に設ける構成としてもよい。
【００４４】
また、上記実施の形態１に係る半導体集積回路１では、反転制御部６をＣＰＵ３、メモリ装置４Ａ、４Ｂ、暗号コプロセッサ５、に設ける構成としたが、これらに限らず、入力回路２や出力回路８などのデータ転送を行う回路に設ける構成としてもよい。
【００４５】
なお、上記の説明では、反転制御部６Ａによって乱数ビット１０１を反転制御信号１０１として出力することにより秘密情報データが真のデータか反転データかを判断するよう構成した例を示したが、本発明はこれに限られるものではなく、反転制御部６Ａを介さずに反転制御部６Ｄに直接乱数ビット１０１を出力する構成としてもよい。
【００４６】
また、乱数ビット１０１を一旦メモリ装置４Ａに入力し、メモリ装置４Ａによって反転制御信号１１０を出力する構成としてもよい。
【００４７】
さらに、実施の形態１に係る半導体集積回路１において、反転制御部６は、乱数発生装置７から出力された１ビットの乱数ビット１０１を受けて、秘密情報データの全てのビットを反転させるように構成したが、秘密情報データを複数ビットの乱数に基づいて反転させるように構成してもよい。例えば、秘密情報データが８ビットである場合、秘密情報データは「１１１１１１１１」（２進表記）のように８桁のビット列で表される。これに対して複数ビットの乱数は、秘密情報データのビット数と同じ８桁のビット列で「００００１１１１」（２進表記）のように表される。この秘密情報データを複数ビットの乱数で反転させる場合、それぞれのビット列の左側から対応する秘密情報データのビットを反転させる。例えば、複数ビットの乱数「００００１１１１」のビット列うち「０」を示すビットに対応する秘密情報データのビットを反転させるとすると、複数ビットの乱数「００００１１１１」の左から４桁が「０」であるので、秘密情報データ「１１１１１１１１」は、左から４桁が反転されて「００００１１１１」となる。
【００４８】
なお、図３において、実施の形態１に係る半導体集積回路１は、マルチプレクサ３１Ｄに乱数発生装置７で生成された乱数ビット１０２そのまま入力する構成としたが、本発明はこれに限られるものではなく、乱数ビット１０２とレジスタ１２Ａから出力された反転制御信号１１０との排他的論理和を３１Ｄに入力するように構成してもよく、ランダムであれば良い。また、その他のマルチプレクサ３１Ａ、３０Ａ、３０Ｄに関しても同様である。
【００４９】
実施の形態１に係る半導体集積回路１は以上のように構成されているので、データバス９の消費電力を解析する電力解析攻撃に対して効果を発揮する。以下に効果を説明する。なお、以下の説明において、データバス９および秘密情報データのビット幅をＮとする。また、データバス９に出力される秘密情報データをＸとした時、その秘密情報データのハミング重みをＸを変数とする関数ＨＷ（Ｘ）と記す。さらに、データバス９に秘密情報データＸが出力されることで発生する電力Pは、Ｐ≒αＨＷ（Ｘ）のように比例定数「α」と秘密情報データＸのハミング重み「ＨＷ（Ｘ）」の積で表される。このとき、電力Ｐとハミング重みＨＷ（Ｘ）はほぼ比例する。（αは比例定数。）
【００５０】
実施の形態１に係る半導体集積回路１において、攻撃者がある秘密情報データＸを用いて電力解析攻撃を行う場合を考える。データバス９に出力される秘密情報データＸが真のデータである場合、データバス９上の消費電力ＰはαＨＷ（Ｘ）である。一方、反転データのハミング重みは、ビット幅Ｎと秘密情報データＸのハミング重みの差となりＮ−ＨＷ（Ｘ）と表される。したがって、秘密情報データが反転データである場合、データバス９に出力される秘密情報データの消費電力はα（Ｎ−ＨＷ（Ｘ）)となる。実施の形態１に係る半導体集積回路１は、データ転送毎にランダムに秘密情報データを反転して転送する。複数回データ転送を繰り返した場合、データバス９上に現れる真のデータと反転データの出現確率は同等とみなすことができ、データバス９上の平均消費電力は、[αＨＷ（Ｘ）+α(N−ＨＷ（Ｘ）)]/２≒αＮ/２とみなせる。よって、データ転送時の平均消費電力は、秘密情報データＸの値に依存しない。従って、平均消費電力からハミング重みを推定することが困難となる。
【００５１】
また、実施の形態１に係る半導体集積回路１は、転送する秘密情報データ自体をランダムに反転して転送するので、不要なデータを転送する必要がない。よって、転送性能を低下させることなく電力解析攻撃による秘密情報データの推定を困難にすることができる。
【００５２】
さらに、実施の形態１に係る半導体集積回路１は、乱数発生装置７と、従来の半導体集積回路の構成であるメモリ装置４や暗号コプロセッサ５等の入出力部に反転制御部６を配設するだけで実現できる。したがって、従来の半導体集積回路の構成を大きく変えることなく簡易にデータ転送時の電力解析攻撃による秘密情報データの推定を困難にすることができる。
【００５３】
実施の形態２
実施の形態１に係る半導体集積回路１は、ＣＰＵ３に入力される秘密情報データを必ず真のデータに戻してから格納する構成とした。しかし、メモリ装置４ＡからＣＰＵ３を介してメモリ装置４Ｂに秘密情報データをコピーするような場合、ＣＰＵ３の内部データバス（図示せず）には必ず真のデータが現れることとなり、電力解析攻撃によって秘密情報データを推定されるおそれがある。
【００５４】
そこで、実施の形態２に係る半導体集積回路１では、メモリ装置４ＡからＣＰＵ３を介してメモリ装置４Ａに秘密情報データをコピーするような場合でも、ＣＰＵ３の内部データバスに反転データ又は真のデータがランダムに現れるように構成したものである。
【００５５】
以下、図４、図５を用いて本発明の実施の形態２に係る半導体集積回路について説明する。図４は実施の形態２に係る半導体集積回路においてメモリ装置からＣＰＵを介して別のメモリ装置へ秘密情報データをコピーする動作のフローチャートを示す図である。図５は実施の形態２に係る反転制御部の回路構成例を示す図である。
【００５６】
なお、実施の形態２に係る半導体集積回路１の全体の構成は、図１に記載した半導体集積回路１の構成と同様であり説明を省略する。なお、実施の形態２に係る半導体集積回路におけるＣＰＵ３は、新たにＳＴＯＲＥ＿Ｓ命令、ＬＯＡＤ＿Ｓ命令を実行するプログラムを備える。なお、ＬＯＡＤ＿Ｓ命令とＳＴＯＲＥ＿Ｓ命令は、それぞれＬＯＡＤ命令とＳＴＯＲＥ命令と同じ動作をさせることに加え、ＬＯＡＤ＿Ｓ信号、ＳＴＯＲＥ＿Ｓ信号をそれぞれ１とする命令である。ここで、ＬＯＡＤ＿Ｓ信号とは、このＬＯＡＤ＿Ｓ信号が１である場合において、データバス９から反転制御部６Ｄに入力された秘密情報データが真のデータであるか反転データであるかに関わらず、反転制御部６Ｄに秘密情報データをそのままＣＰＵ３に出力させる信号である。また、ＳＴＯＲＥ＿Ｓ信号とは、ＳＴＯＲＥ＿Ｓ信号が１である場合において、反転制御部６Ｄに入力された秘密情報データが真のデータであるか反転データであるかに関わらず、反転制御部６Ｄに秘密情報データをそのままデータバス９に出力させる信号である。
【００５７】
まず、実施の形態２に係る半導体集積回路１の動作について図４を用いて説明する。なお、図４の説明は、メモリ装置４ＡからＣＰＵ３を介してメモリ装置４Ｂに秘密情報データをコピーする場合を例にとって説明する。
【００５８】
ステップ３０１において、ＣＰＵ３は「１」を示すＬＯＡＤ＿Ｓ信号を反転制御部６Ｄに出力する。
【００５９】
ステップ３０２において、反転制御部６Ｄには、メモリ装置４Ａから出力された秘密情報データと反転制御信号１１０が入力される。反転制御部６Ｄが受ける秘密情報データは、実施の形態１に係る半導体集積回路１と同様、ランダムに反転されて出力された秘密情報データである。
【００６０】
ステップ３０３において、反転制御部６Ｄは、入力された秘密情報データが真のデータか反転データかに関わらず、そのままＣＰＵ３に出力する。秘密情報データを受けたＣＰＵ３は、秘密情報データを格納する。なお、実施の形態１に係る反転制御部６Ｄと同様に、実施の形態２に係る反転制御部６Ｄは、反転制御信号１１０の値に基づいて入力される秘密情報データが真のデータであるか反転データであるかを判断する。
【００６１】
ステップ３０４において、ＣＰＵ３はＳＴＯＲＥ＿Ｓ信号を反転制御部６Ｄに出力する。
【００６２】
ステップ３０５において、ＣＰＵ３は秘密情報データを反転制御部６Ｄに出力する。
【００６３】
ステップ３０６において、反転制御部６Ｄは、ＣＰＵ３から秘密情報データを受ける。ＳＴＯＲＥ＿Ｓ信号を受けた反転制御部６Ｄは、入力された秘密情報データが真のデータであるか反転データであるかに関わらず、秘密情報データをそのままメモリ装置４Ｂに出力する。また、反転制御部６Ｄは、反転制御信号１１０をメモリ装置４Ｂに出力する。
【００６４】
以上のようにして、半導体集積回路１はメモリ装置４ＡからＣＰＵ３を介してメモリ装置４Ｂへ秘密情報データをコピーする動作が終了する。
【００６５】
ここで、実施の形態２に係る半導体集積回路１の反転制御部６Ｄの構成について図５を用いて詳細に説明する。図５は実施の形態２に係る反転制御部６Ｄの回路構成例を示す図である。なお、実施の形態１において説明した図３と同じ番号を付した構成要素については、同様のものとし、説明を省略する。以下、実施の形態２に係る半導体集積回路１において追加した構成要素について説明する。
【００６６】
実施の形態２に係る半導体集積回路１は、図３に示す反転制御部６Ｄ内にレジスタ１４、マルチプレクサ３２、論理和回路５０Ｄ、論理和回路５１Ｄが追加されている。これらの構成要素と、ＣＰＵ３から出力されるＬＯＡＤ＿Ｓ信号及びＳＴＯＲＥ＿Ｓ信号とによって、実施の形態２に係る半導体集積回路１は、秘密情報データをそのままＣＰＵ３に入力し、さらにメモリ装置４Ｂにそのまま出力することが可能となる。
【００６７】
論理和回路５０Ｄは、反転制御信号１１０とＣＰＵ３から出力されるＬＯＡＤ＿Ｓ信号１０７とを受けて論理和演算し、「１」または「０」を出力する回路である。
【００６８】
レジスタ１４は、反転制御信号１１０の出力タイミングを調整する回路である。ＬＯＡＤ＿Ｓ信号１０７とクロック信号１０５と反転制御信号１１０とを受けた場合に反転制御信号１１０を出力する。
【００６９】
マルチプレクサ３２は、ＳＴＯＲＥ＿Ｓ信号１０８の値に応じて乱数ビット１０２が伝送される信号線Ａ（以下、「経路Ｄ」とする）又は反転制御信号１１０が伝送される信号線Ｂ（以下、「経路Ｃ」とする）のうち一つを選択して出力する回路である。
【００７０】
論理和回路５１Ｄは、ＳＴＯＲＥ＿Ｓ信号１０８と、マルチプレクサ３２から出力された反転制御信号１１０又は乱数ビット１０２とを受けて論理和演算し、「１」又は「０」を出力する回路である。
【００７１】
次に実施の形態２に係る半導体集積回路１の反転制御部６Ｄの動作を図５を用いて詳細に説明する。なお、以下の説明では、メモリ装置４Ａから出力された反転データがＣＰＵ３を介してメモリ装置４Ｂにそのまま反転データとして出力される場合を例として説明する。また、各信号の値について、ＳＴＯＲＥ＿Ｓ信号１０８の示す値が「１」、ＬＯＡＤ＿Ｓ信号１０７が示す値が「１」、入力側反転制御回路２０Ｄに入力される秘密情報データが反転データ、反転制御信号１１０の示す値が「０」（秘密情報データが反転データであることを示す値）、乱数ビット１０２の示す値が「１」（秘密情報データを真のデータにすることを示す値）、であるものとする。さらに、ＳＴＯＲＥ＿Ｓ信号１０８が「１」を示す場合、必ずＬＯＡＤ＿Ｓ信号１０７も「１」を示すものとする。
【００７２】
まず、ＣＰＵ３は、「１」を示すＬＯＡＤ＿Ｓ信号１０７をレジスタ１４と論理和回路５０Ｄに出力する。
【００７３】
論理和回路５０Ｄは、「０」を示す反転制御信号１１０と「１」を示すＬＯＡＤ＿Ｓ信号１０７を受けて論理和演算する。この場合、論理和回路５０Ｄは、ＬＯＡＤ＿Ｓ信号１０７の示す値「１」が入力されるため、反転制御信号１１０の示す値に関わらず必ず「１」をマルチプレクサ３０Ｄに出力する。
【００７４】
マルチプレクサ３０Ｄは、論理和回路５０Ｄから出力された「１」を示す信号を受けて、データバス９から受け取る秘密情報データ２００（以下、適宜「反転データ２００」とする）の経路を選択する。このとき、マルチプレクサ３０Ｄは「１」を示す信号を受けた場合、経路Ａを選択するものとする。マルチプレクサ３０Ｄは、経路Ａを選択した後、データバス９から入力された反転データ２００を経路Ａを介してＣＰＵ３に出力する。
【００７５】
レジスタ１４は、「０」を示す反転制御信号１１０と、「１」を示すＬＯＡＤ＿Ｓ信号１０７と、クロック信号１０５とを受けて、反転制御信号１１０をマルチプレクサ３２に出力する。このとき、レジスタ１４は、マルチプレクサ３２に後述するＳＴＯＲＥ＿Ｓ信号１０８が入力された後に、反転制御信号１１０が入力されるように制御する。
【００７６】
ＣＰＵ３は、マルチプレクサ３０Ｄから出力された反転データ２００をそのままＣＰＵ３に格納する。また、ＣＰＵ３は、格納した反転データ２００をマルチプレクサ３１Ｄに出力するとともに、「１」を示すＳＴＯＲＥ＿Ｓ信号１０８をマルチプレクサ３２と論理和回路５１Ｄに出力する。
【００７７】
「１」を示すＳＴＯＲＥ＿Ｓ信号１０８と、「０」を示す反転制御信号１１０と、「１」を示す乱数ビット１０２を受けたマルチプレクサ３２は、ＳＴＯＲＥ＿Ｓ信号１０８の値に応じて反転制御信号１１０又は乱数ビット１０２のうちどちらか一方を選択して出力する。この場合、マルチプレクサ３２は、ＳＴＯＲＥ＿Ｓ信号１０８の示す値が「１」であるので経路Ｄを選択して、反転制御信号１１０をそのまま論理和回路５１Ｄとメモリ装置４Ｂへ出力する。このとき出力された反転制御信号１１０は、ＣＰＵ３から出力された秘密情報データ２００が反転データ２００であることを示すために用いられる。
【００７８】
論理和回路５１Ｄは、マルチプレクサ３２から出力された「０」を示す反転制御信号１１０と、ＣＰＵ３から出力された「１」を示すＳＴＯＲＥ＿Ｓ信号１０８とを受けて、論理和演算した結果をマルチプレクサ３１Ｄに出力する。この例の場合、論理和回路５１Ｄは、ＳＴＯＲＥ＿Ｓ信号１０８として「１」が入力されているので、マルチプレクサ３２から出力された信号の示す値が「１」か「０」かに関わらず「１」を出力する。すなわち、この構成によって、ＳＴＯＲＥ＿Ｓ信号が「１」を示すときＣＰＵ２は必ず秘密情報データをそのまま出力することが可能となる。
【００７９】
マルチプレクサ３１Ｄは、ＣＰＵ３から出力された反転データ２００と論理和回路５１Ｄから出力された「１」を示す信号を受ける。この場合、マルチプレクサ３１Ｄは、論理和回路５１Ｄから「１」を示す値が入力されているので、経路Ａを選択してデータバス９に出力する。すなわち、秘密情報データを反転せずにそのまま出力するので、データバス９に出力される秘密情報データは反転データ２００のままである。なお、マルチプレクサ３２から出力された反転制御信号１１０の示す値は「０」であり、データバス９に出力される秘密情報データが反転データ２００であることを示している。
【００８０】
このようにして、ＳＴＯＲＥ＿Ｓ信号１０８とＬＯＡＤ＿Ｓ信号１０７が「１」を示す場合に、反転制御部６Ｄは、入力された秘密情報データが反転データ２００である場合にはそのままＣＰＵ３に取り込み、反転データ２００のままデータバス９に出力する。
【００８１】
なお、実施の形態２の説明において、ＳＴＯＲＥ＿Ｓ信号とＬＯＡＤ＿Ｓ信号が「１」の場合を例に説明したが、ＳＴＯＲＥ＿Ｓ信号とＬＯＡＤ＿Ｓ信号が「０」である場合においては、実施の形態２に係る半導体集積回路１は実施の形態１に係る半導体集積回路１と同様の動作を行う。すなわち、秘密情報データがＣＰＵ３に入力される際、反転制御部６Ｄは、必ず秘密情報データを真のデータとして入力する。さらに、ＣＰＵ３から秘密情報データを出力する際、反転制御部６Ｄは、秘密情報データをランダムに反転して出力する。
【００８２】
なお、この例において、反転制御部６Ｄは、反転データ２００が入力される場合を説明したが、真のデータである場合においても同様の動作を行う。すなわち、反転制御部６Ｄに真のデータが入力された場合、反転制御部６Ｄは真のデータをそのままＣＰＵ３内部に出力し、データバス９に真のデータを出力する。
【００８３】
また、この例において、半導体集積回路１は、ＳＴＯＲＥ＿Ｓ信号及びＬＯＡＤ＿Ｓ信号の生成方法として、ＣＰＵ３にＳＴＯＲＥ＿Ｓ命令及びＬＯＡＤ＿Ｓ命令のプログラムを追加したが、これに限られるものではない。例えば、ＣＰＵ３内部のレジスタにＯＮ／ＯＦＦ可能なフラグを設け、そのフラグがＯＮである間は通常のＬＯＡＤ命令及びＳＴＯＲＥ命令をそれぞれＬＯＡＤ＿Ｓ命令及びＳＴＯＲＥ＿Ｓ命令として動作するように実装しても良い。
【００８４】
なお、実施の形態１及び実施の形態２において、反転制御部６ＤとＣＰＵ３は別の構成として記載したが、反転制御部６ＤとＣＰＵ３をまとめて中央処理装置として構成してもよい。
【００８５】
実施の形態２に係る半導体集積回路１は、以上のように構成したので、メモリ装置４ＡからＣＰＵ３を介してメモリ装置４Ｂに秘密情報データをコピーするような場合においても、ＣＰＵの内部データバスに出現する秘密情報データが反転データである場合と真のデータである場合とがランダムに切り替わるので、秘密情報データの転送を複数回繰り返した際のデータバス上の消費電力の平均は、秘密情報データの値に依存せず、平均電力からハミング重みを推定することが困難となる。
【符号の説明】
【００８６】
１  半導体集積回路、２  入力回路、３  ＣＰＵ、４  メモリ装置、５  暗号コプロセッサ、６  反転制御部、７  乱数発生装置、８  出力回路、９  データバス
【図１】
2014096644.tif 000003
【図２】
2014096644.tif 000004
【図３】
2014096644.tif 000005
【図４】
2014096644.tif 000006
【図５】
2014096644.tif 000007