(57)【要約】【課題】  サイドチャネル攻撃、特にＤＰＡ攻撃に対する耐性を有した暗号化／復号モジュールの提供。【解決手段】  暗号化／復号モジュール１は、動作中に発生する秘密情報が外部に漏洩しないように、第１の乱数を得て利用する暗号化／復号処理回路１１と、該第１の乱数の元となる第２の乱数を生成する乱数生成器１２と、該第２の乱数を該第１の乱数に変換するためにパラメータを供給するパラメータ供給部１４と、該パラメータに基づいて、前記乱数生成器１２から入力された該第２の乱数を該第１の乱数に変更し、変更した前記第１の乱数を前記暗号化／復号回路へ供給する乱数制御部１３とを備えた。【選択図】図１
2005086670.tif 000002
【特許請求の範囲】
【請求項１】
動作中に発生する秘密情報が外部に漏洩しないように、第１の乱数を得て利用する暗号化／復号回路と、
該第１の乱数の元となる第２の乱数を生成する乱数生成器と、
該第２の乱数を該第１の乱数に変換するためにパラメータを供給するパラメータ供給部と、
該パラメータに基づいて、前記乱数生成器から入力された該第２の乱数を該第１の乱数に変更し、変更した前記第１の乱数を前記暗号化／復号回路へ供給する乱数制御部とを備えたことを特徴とする暗号化／復号モジュール。
【請求項２】
前記パラメータは、該秘密情報が外部に漏洩しない該第１の乱数の出現確率を示すものであることを特徴とする請求項１記載の暗号化／復号モジュール。
【請求項３】
前記パラメータは、該秘密情報が外部に漏洩しない該第１の乱数の出現確率を求めるための元となる値であることを特徴とする請求項１記載の暗号化／復号モジュール。
【請求項４】
前記パラメータは、該暗号化／復号回路の特定の性質を示すものであることを特徴とする請求項１記載の暗号化／復号モジュール。
【請求項５】
前記パラメータは、該暗号化／復号回路の特定の性質に基づいて予め求めた該第１の乱数の出現確率を示すものであることを特徴とする請求項１記載の暗号化／復号モジュール。
【請求項６】
前記暗号化／復号回路は、前記第１の乱数によって一つを選択する選択回路と、前記選択回路へ、それぞれの出力値を伝達するための各配線を介して接続される複数の非線形変換回路とを備えたものであり、
前記特定の性質は、前記各配線の配線容量に基づくものであることを特徴とする請求項４または５記載の暗号化／復号モジュール
【請求項７】
前記暗号化／復号回路は、前記第１の乱数によって一つを選択する選択回路と、前記選択回路へ、それぞれの出力値を伝達するための各配線を介して接続される複数の非線形変換回路とを備えたものであり、
前記特定の性質は、前記選択回路が各配線を介して受ける出力値の到達遅延に基づくものであることを特徴とする請求項４または５記載の暗号化／復号モジュール。
【請求項８】
前記パラメータ供給部は、前記パラメータを格納するパラメータ格納手段を備えることを特徴とする請求項１乃至７のいずれかに記載の暗号化／復号モジュール。
【請求項９】
前記パラメータ供給部は、前記暗号化／復号回路のある特性を導くデータを測定し、測定されたデータに基づいて前記パラメータを設定するパラメータ検出手段を備えることを特徴とする請求項１乃至７に記載の暗号化／復号モジュール。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、乱数生成器を利用した暗号化／復号モジュールに関する。
【背景技術】
【０００２】
近年、情報のデジタル化に伴って、暗号化や復号を行う暗号化／復号モジュール（以下、単に暗号化モジュールと呼ぶ）や、暗号化モジュールを備えた多種多様なＬＳＩが、多数利用されてきている。暗号化モジュールは、鍵の生成や安全性を高めるためのマスク技術に、一時的な乱数を利用することが多い。このような暗号化モジュールに利用される乱数の生成を行う乱数生成器は、安全上０／１の統計的性質に優れている方向で開発が行われている。例えば、乱数を１００ビットサンプリングした場合、０と１の出現確率は１／２ずつであることが望ましい。
【０００３】
ところで、暗号化モジュールは、外部からの不正な攻撃（サイドチャネル攻撃）が行われることが多いため、攻撃に対する耐性を備えたものが望まれる。近年、暗号化モジュールに対するサイドチャネル攻撃方法の一つとして、ＤＰＡ（Ｄｉｆｆｅｒｅｎｔｉａｌ  Ｐｏｗｅｒ  Ａｎａｌｙｓｉｓ：電力差分解析）攻撃が注目されてきている。ＤＰＡ攻撃は、暗号化モジュール内のある処理の出力と秘密情報（秘密の鍵など）との相関の有無を、その際に測定した消費電力を統計的に処理することで、本来暗号化モジュールの内部で生成され隠蔽されるべき秘密情報を推定する方法である。
【０００４】
例えば、共通鍵暗号化方式として著名なＤＥＳは、Ｓｂｏｘと呼ばれる処理の出力データと秘密鍵との相関の有無を調べるようにしたＤＰＡ攻撃を行われてしまう事がわかっている。この相関を隠蔽する目的で、１つのＳｂｏｘに対して、ある関係を満たすＳｂｏｘ１とＳｂｏｘ２を用意し、その２つを乱数によってランダムに切り換えて使用することにより鍵との相関を消すという対策が提案されている（例えば、特許文献１参照）。
【０００５】
また、このような特定の暗号技術の特定の要素における問題でなく、一般に、共通鍵暗号方式や、ＲＳＡや楕円曲線暗号などの公開鍵方式を用いた暗号化モジュールにおいて、そのモジュール内のバスラインに秘密情報（鍵など）が流れる。これをＤＰＡ攻撃や、タイミング攻撃など、サイドチャネル攻撃することも可能で、これに対する対策として、バスラインに流れる各データを、乱数によってマスクする方法も考えられている。より具体的には、kビットのデータをkビットの乱数でマスク（通常は排他的論理和）することによって、隠蔽することが考えられた。
【特許文献１】特開２００１−２６８０７１公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
上記で説明したＳｂｏｘ対策が有効に働くには、Ｓｂｏｘ１とＳｂｏｘ２が乱数によって均等に選択される(すなわち０／１のバランスが等しい)という条件と同時に、Ｓｂｏｘ１とＳｂｏｘ２の出力信号線の配線容量が等しいことが必要となる。
【０００７】
しかし、配線容量には数倍の差が生じる場合があり、そのような場合は一般的に開発される乱数生成器が、たとえ乱数の０／１のバランスが良好であっても、ＤＰＡ攻撃の対策としては有効に働かず、ＤＰＡ攻撃に対する耐性が実現されないことになってしまう。
【０００８】
また、バス上の秘密情報のマスクにおいて、バスライン上のマスクしたデータのハミング重みが、極端に小さかったり大きかったりすることはＤＰＡ攻撃に対する脆弱性を与え
る可能性があることが分かっている。例えば、８ビットの信号線の場合、ハミング重みは４が理想的であり、値の推測が容易である０や８などは避けることが望ましいが、秘密情報（データ）を単に乱数でマスクするだけでは、ハミング重みについて何ら考慮されず、依然としてＤＰＡ攻撃される恐れがあった。
【０００９】
そこで、本発明は、サイドチャネル攻撃、特にＤＰＡ攻撃に対する耐性を有した暗号化／復号モジュールを提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明の暗号化／復号モジュールは、動作中に発生する秘密情報が外部に漏洩しないように、第１の乱数を得て利用する暗号化／復号回路と、該第１の乱数の元となる第２の乱数を生成する乱数生成器と、該第２の乱数を該第１の乱数に変換するためにパラメータを供給するパラメータ供給部と、該パラメータに基づいて、前記乱数生成器から入力された該第２の乱数を該第１の乱数に変更し、変更した前記第１の乱数を前記暗号化／復号回路へ供給する乱数制御部とを備えた。
【発明の効果】
【００１１】
本発明によれば、暗号化／復号モジュールに対するサイドチャネル攻撃に対する対策で用いる乱数のバランスを適宜偏らせる制御を行うことで、暗号化／復号モジュールの耐タンパー性を高め、サイドチャネル攻撃に対する耐性を実現することができる。
【発明を実施するための最良の形態】
【００１２】
以下、本発明の実施の形態について、図面を参照しつつ詳細に説明する。
【００１３】
図１は、本実施の形態の暗号化／復号モジュールの機能ブロックを示したものである。
【００１４】
暗号化／復号モジュール１は、暗号化／復号処理回路１１、乱数生成器１２、乱数制御部１３、パラメータ供給部１４を備える。
【００１５】
暗号化／復号処理回路１１は、暗号化／復号処理を行うものであり、暗号化方式としては、ＤＥＳ、ＡＥＳなどの共通鍵暗号化方式や、ＲＳＡ、楕円曲線などの公開鍵暗号方式などの何れの方式を実装したもので良い。
【００１６】
乱数生成器１２は、暗号化／復号処理回路１１内で、鍵生成やマスク処理などを行うために、ビット毎に乱数０／１をほぼ均等にランダム生成して出力するものである。この乱数生成器１２は、擬似乱数生成器であってもよいし、物理乱数生成器であってもよい。
【００１７】
パラメータ供給部１４は、ＤＰＡ攻撃の耐性に影響する乱数の出現確率を調整するためのパラメータ（参照情報）を供給する。このパラメータは、暗号化／復号処理回路１１で生じるハードウェア実装により生じる偏りや、暗号化／復号処理回路１１で生じるデータ内容の特性による偏りに基づく値であり、（詳細には後述するが、）所謂暗号化／復号処理回路１１の特徴に基づくものである。
【００１８】
乱数制御部１３は、乱数生成器１２から出力される乱数を、パラメータ供給部１４からのパラメータに基づく出現確率に応じて、適宜変換しながら出力する。乱数制御部１３の出力は、暗号化／復号処理回路１１へ供給する乱数となる。
【００１９】
以上のように暗号化／復号モジュール１を構成することにより、暗号化／復号処理回路１１は、自回路で生じるハードウェア実装により生じる偏りやデータ内容の特性による偏りに合った出現確率に見合う乱数の入力を得ることができ、これに基づき動作するから、
偏りによる動作による電力差を隠蔽でき、ＤＰＡ攻撃の耐性を有することができる。
【００２０】
次に、暗号化／復号処理回路１１の具体化した実施例を２つ示し、より詳細に説明する。
（第１実施例）
以下、ＤＥＳ方式の暗号化処理回路２１を用いた暗号化モジュールを実施例として説明する。
【００２１】
ＤＥＳは、６４ビットのデータを３２ビットづつに左右に分割し、所定の処理単位を実行し、処理結果（各３２ビット）を左右入れ替えながら、この処理単位を全１６段繰り返すことによって暗号化する。図２には、この１段の処理単位の主要部を示したものである。
【００２２】
線形変換部Ｅ１０１は、図上右から入力される３２ビットのデータを所定の規則により４８ビットへ線形変換を行うものである。
【００２３】
論理回路１０２は、線形変換部Ｅ１０１から出力された４８ビットのデータと、暗号化処理回路１１内で図示しない秘密鍵生成器より生成され入力される４８ビットの秘密鍵Ｋｅｙとを排他的論理和を行って、Ｓｂｏｘ１（１０３）およびＳｂｏｘ２（１０４）へ入力するものである。なお、秘密鍵Ｋｅｙは、外部からは隠蔽され、秘密を保ったものである。
【００２４】
Ｓｂｏｘ１（１０３）およびＳｂｏｘ２（１０４）は、非線形変換を行うものであり、入力される４８ビットを非線形変換し、３２ビットの出力を行う。Ｓｂｏｘ１（１０３）およびＳｂｏｘ２（１０４）は、ＤＥＳの一般的な処理単位に用いられる１つのＳｂｏｘを、ＤＰＡ耐性を備えるために２つに置換したものである。Ｓｂｏｘ１（１０３）およびＳｂｏｘ２（１０４）は、それぞれの出力値と鍵に対する相関が逆符号になるように設計される。例えば、Ｓｂｏｘ１（１０３）の出力と鍵との相関係数が１／２であれば、Ｓｂｏｘ２（１０４）の出力と鍵との相関係数は−１／２になるように設計される。ＤＰＡ攻撃は、全ての信号に関する同じタイミングでの相関の総和を観測するため、Ｓｂｏｘ１（１０３）の出力とＳｂｏｘ２（１０４）の出力とを均等に選択することにより、Ｓｂｏｘ１（１０３）とＳｂｏｘ２（１０４）との相関は打ち消し合い、チップ全体としてＤＰＡ攻撃に対する耐性を有することになる。このように、Ｓｂｏｘ１（１０３）とＳｂｏｘ２（１０４）とを設ける構成は、例えば、背景技術で説明した特開２００１−２６８０７１公報に記載されるとおり、既知である。
【００２５】
セレクタ１０５は、Ｓｂｏｘ１（１０３）とＳｂｏｘ２（１０４）との何れかの出力を利用するために選択するものであり、乱数制御部１３から送られる乱数に従って制御される。例えば、入力される乱数の１ビットが“０”であればＳｂｏｘ１（１０３）を選択し、乱数の１ビットが“１”であればＳｂｏｘ２（１０４）を選択する。
【００２６】
線形変換部Ｐ１０６は、３２ビットを入力し、線形変換し３２ビット出力を行う。この出力された３２ビットは、前の段の左の３２ビットと、論理回路１０７によって排他的論理和される。
【００２７】
そして、排他的論理和された左の３２ビット値と、線形変換部Ｅ１０１に入力された前段から右に入力される３２ビット値とを左右交換し、次段の処理へ渡す。
【００２８】
以上のようなＤＥＳの処理単位において、Ｓｂｏｘ１（１０３）の出力と秘密鍵Ｋｅｙとの相関値をφ１、Ｓｂｏｘ２の出力と秘密鍵Ｋｅｙとの相関値をφ２とすると、ＤＰＡ
耐性が達成されるための条件はφ１＝−φ２で与えられる。
【００２９】
ところが、実際にＤＥＳをハードウェア実装する場合に、暗号化処理回路２１全体のレイアウトに依存して、Ｓｂｏｘ１（１０３）とＳｂｏｘ２（１０４）との出力信号線の長さや太さなどが異なり、これにより配線容量が異なるように実装されることが多い。この場合、φ１＝−φ２が成り立たなくなり、その結果、ＤＰＡ耐性が達成されないことが新たに判明した。これは、Ｓｂｏｘ１（１０３）の出力信号線の配線容量をc1、Ｓｂｏｘ２の出力信号線の配線容量をc2、Ｓｂｏｘ１の出力が選択される確率をp、Ｓｂｏｘ２の出力が選択される確率を1-pとすると、φ1 = p・c1、φ2 = -(1-p)・c2と表され、乱数生成器１２の一般的特性からセレクタ１０５によって２つのＳｂｏｘ１（１０３）、Ｓｂｏｘ２（１０４）を均等（p=1/2）に選択するので、φ1とφ2とは、各配線容量c1とc2に依存することになり、その結果、各配線容量c1とc2が異なるためにφ1=-φ2が成り立たらないからである。
【００３０】
そこで、第１実施例では、配線容量c1とc2が等しくない場合にもＤＰＡ耐性を達成できるよう、Ｓｂｏｘ１とＳｂｏｘ２の選択確率pで乱数生成器１２からの乱数を制御するようにした。
【００３１】
図３は、第１実施例の暗号化モジュール１を示したものである。
【００３２】
ＤＥＳの非線形処理は、一般には８個のＳｂｏｘで構成されるから、図２において示したＳｂｏｘ１（１０３）はＳｂｏｘ１−１〜Ｓｂｏｘ１−８の計８個に対応し、Ｓｂｏｘ２（１０４）はＳｂｏｘ２−１〜Ｓｂｏｘ２−８の計８個に対応する。Ｓｂｏｘ１−１〜Ｓｂｏｘ１−８の出力信号線の容量は、それぞれc1[1]からc1[8]で示している。同様に、Ｓｂｏｘ２−１〜Ｓｂｏｘ２−８の出力信号線の容量は、それぞれc2[1]からc2[8]で示している。
【００３３】
各セレクタ１０５−１〜１０５−８は、それぞれ乱数制御部１３から出力される８ビットの乱数R[1]〜R[8]の信号線の１つとそれぞれ接続される。この例においては、乱数制御部１３からの下位ｉビット（１≦ｉ≦８）が、セレクタ１０５−ｉへ接続される。各セレクタ１０５−１〜１０５−８は、乱数制御部１３から個別の０／１の乱数R[1]〜R[8]によって、Ｓｂｏｘ１−ｉまたはＳｂｏｘ２−ｉの何れかの出力を個別に選択し、出力する。
【００３４】
乱数制御部１３は、乱数生成器１２から生成される８ビットの乱数r[1]〜r[8]をｎサンプル分、一時保持するレジスタ１３１−１〜１３１−８と、８ビットそれぞれの出現確率パラメータp[i]を入力し、それぞれの出現確率に合うように、レジスタ１３１−１〜１３１−８に一時保持したｎビットの乱数r[1]〜r[8]を適宜変更（変更しない場合も含む）し、変更した乱数R[1]〜R[8]を出力するフィルタ部１３２−１〜１３２−８とを備える。なお、この適宜変更は、所定の規則に基づいて変更するようにすれば良い。
【００３５】
パラメータ格納部１４１は、ＬＳＩ設計におけるレイアウト時に判明する、Ｓｂｏｘ１−１の出力信号線の配線容量c1[1]とＳｂｏｘ２−１の出力信号線の配線容量c2[1]とから求めた出現確率p[1]、・・・、Ｓｂｏｘ１−８の出力信号線の配線容量c1[8]とＳｂｏｘ２−８の出力信号線の配線容量c2[8]とから求めた出現確率p[8]をそれぞれ設計時に格納しておき、それぞれに対応するフィルタ部１３２−１〜１３２−８へ、格納した出現確率をパラメータとして、供給する。なお、出現確率p[k]（１≦ｉ≦８）は、c2[k]／（c1[k]＋c2[k]）を演算すれば容易に求められる。また、ここではパラメータ格納部１４１に、出現確率p[1]・・・p[8]を格納するようにしたが、代わりに配線容量c1[1]、c2[1]の組、・・・c1[8]、c2[8]の組を備えるようにしても良い。この場合には、乱数制御部１３にて、各配線容量の組から出現確率を求めるようにすれば良い。
【００３６】
次に、このような構成における乱数制御部１３での変更制御について図４のフローチャートを用いて説明する。なお、説明を簡単にするために、乱数生成器１２から出力される乱数の１ビットに着目して説明することとし、また、この1ビットに着目した際の構成図として図５を用意した。また、このとき乱数の１ビットのデータをr、このrにおける１の出現確率をp、１の出現確率を1-pとする。
【００３７】
まず、乱数生成器１２からの乱数rの時系列的なｎサンプル(すなわちnビット)をレジスタ１３１に一時格納する（step1）。次に、パラメータ格納部１４１から、０／１の出現確率pを取得する（step2）。取得した出現確率pにより、一時格納したnビットの乱数rは、n・pビットが０を示し、n・(1-p)ビットが１を示す必要があることが分かる。
【００３８】
次にp<1/2である出現確率pへと変更する場合（step3のY）には、フィルタ部１３２はn・pビットの０のうち所定の変更方法にて選んだn・(1/2-p)ビットを１に変更する（step4）。この変更方法は、様々な方法で実現可能であり、例えば最上位ビットから下位ビット方向へ、順に０が出現する際に、変更する個数まで１に変更する、という規則でも良い。
【００３９】
また、p>1/2である出現確率pへと変更する場合（step5のY）には、フィルタ部１３２はn・(1-p)ビットの１のうち所定の変更方法にて選んだn・(p-1/2)ビットを０に変更する（step6）。この変更方法も先と同様な方法で実現すればよい。なお、何れの変更を要しない場合には、何もしない。そして、フィルタ部１３２は、n・pビットが０、n・(1-p)が１とである変更（変更しない場合も含む）した乱数Rを出力する（step7）。
【００４０】
そして、セレクタ１０５は、この供給されるRに基づいて、順次Ｓｂｏｘ１（１０８）とＳｂｏｘ２（１０９）との何れかの出力を選択する。このように制御することにより、φ1=-φ2の条件を満たし、ＤＰＡ対策が実現できる。
【００４１】
上記で説明した乱数制御部１３での処理は、比較的簡単に構成できるものを記載したが、0/1の出現確率をpと1-pに変更する方法であれば、例えば統計的手法を利用するようなより洗練された方法を適用してもよい。
【００４２】
なお、Ｓｂｏｘ１（１０８）とＳｂｏｘ２（１０９）の選択確率を１／２からずらしたことによる弊害として、セレクタ１０５で選択された後の信号のＤＰＡ耐性が低下することが考えられる。これを回避するための対策として、Ｓｂｏｘ１（１０８）とＳｂｏｘ２（１０９）の出力信号がセレクタ１０５に入力される前に、それぞれを新たな乱数でマスクするようにしても良い。Ｓｂｏｘ以外の処理は線形変換であるため、このような処理は可能であり、この処理によってセレクタ１０５で選択された後の信号についてもＤＰＡ耐性を保証することができる。
【００４３】
次に、乱数生成器１２から出力される乱数の１ビットに着目した上記説明を元に、本実施例の構成における、８ビットの乱数を対象とした乱数制御部１３での変更制御について簡単に説明する。
【００４４】
この、乱数８ビットに対する処理を行う場合、８ビット乱数をnサンプルだけレジスタ１３１−１〜１３１−８に一時保持する。そして、一時保持したj番目（ｊは、１≦ｊ≦８の全ての整数）のｎサンプルに対し、各０／１の出現確率がp[j]と1-p[j]となるようにフィルタ部１３１−ｊで変更処理を行う。ここで、p[j]はp[j]=c2[j]/(c1[j]+c2[j])で与えられ、c1[j]とc2[j]は乱数j番目のビットが指定するＳｂｏｘ１−ｊとＳｂｏｘ２−ｊの出力信号線の配線容量である。配線容量は、ＬＳＩ設計におけるレイアウト時に把握できるので、これらの値を、パラメータ格納部１４１に格納しておく。このｊ番目のビット
に対して、先で説明した方法によって０／１のバランスの変更制御を行う。以上により全ビット（８ビット）それぞれのビットごとに制御することが可能である。
【００４５】
以上説明してきた実施例では、通常１つのＳｂｏｘに対し、２つのＳｂｏｘ１とＳｂｏｘ２とを乱数で切り換えて使用する場合について説明したが、２つのＳｂｏｘ１とＳｂｏｘ２の代わりに、図６に示すように３つ以上のＳｂｏｘ１〜ｕを用意してそれらを同様に乱数で切り換えて使用するようにしても良い。
【００４６】
このように1個のＳｂｏｘに対して３つ以上のＳｂｏｘ１〜ｕを用意して乱数で切り換えて使用する場合も、以下のような処理を行うことにより実現できる。
【００４７】
ここではu個のＳｂｏｘ１, Ｓｂｏｘ２, …, Ｓｂｏｘｕを用意して乱数でそれらを切り換えて使用する場合について説明する。u個のＳｂｏｘを選択するために、vビットの乱数r（vは2v-1＜u≦2vを満たす）を用いると仮定する。例えばu=8の場合はv=3とし、バイナリ表現でr=000であればＳｂｏｘ１を、r=001であればＳｂｏｘ２を、...、r=111であればＳｂｏｘ８を選択する。以下では簡単のため、u=2vであるとして説明する。
【００４８】
Ｓｂｏｘ１,…,Ｓｂｏｘｕの出力信号線の配線容量が等しい場合は、Ｓｂｏｘ１,…,Ｓｂｏｘｕの選択確率が均等（すなわち、vビットの乱数rの全パタンの出現確率が均等）である場合にＤＰＡ耐性が保証されることになる。しかし、Ｓｂｏｘ１,…,Ｓｂｏｘｕの出力信号線の配線容量が等しくない場合は、上記実施例で説明したのと同様に、ＤＰＡ耐性を実現するためにＳｂｏｘ１,…,Ｓｂｏｘｕの選択確率を与える乱数rを制御する必要が生じる。その方法を以下に示す。
【００４９】
今、Ｓｂｏｘｗ（ＤＰＡ対策として用意したu個のＳｂｏｘのうちのw番目）が選択される確率をp(w)、Ｓｂｏｘｗの出力信号線の配線容量をc(w)とする。ここでp(w)は、p(1)+...+p(u)=1という関係式を満たしている。上記したu=8、v=3という例の場合、例えば、p(1)はＳｂｏｘ１を指定するパタン000の出現確率を、p(2)はＳｂｏｘ２を指定するパタン001の出現確率を、...、p(8)はＳｂｏｘ８を指定するパタン111の出現確率を示す。さらにＳｂｏｘｗの出力値と鍵との相関をφ(w)と書くと、φ(w)はp(w)とc(w)の関数として与えられる。上述したようにＤＰＡ耐性を与える条件は相関の総和がゼロ、すなわちφ(1)+...+φ(u)=0という関係式を満たしている。
【００５０】
よって、これらの関係式を満たすようなp(w) (w=1,...,u)を求めることができる。このp(w)はc(w) (w=1,...,u)を与えれば決めることができる（ただし一意に決まるとは限らない）ため、パラメータ格納部１４１に予め格納されている配線容量c(w) (w=1,...,u)を用いることでp(w) (w=1,...,u)を決定することができる。
【００５１】
以上説明したように、１つのＳｂｏｘに対し、複数のＳｂｏｘを用意し、切替え制御することによりＤＰＡ耐性を持ったＤＥＳ暗号化方式をハードウェア実装した際に生じるＳｂｏｘ出力信号線の配線容量の差を、切替え制御に利用される乱数の０／１の出現確率を電力差を隠蔽するよう制御するようにしたから、Ｓｂｏｘ出力信号線の配線容量の差に対するＤＰＡ攻撃に対しても耐性を有することができるようになった。
【００５２】
次に、図７は、上記で説明した本実施例の変形例を示したものである。
【００５３】
この変形例は、乱数制御部１３の入力データとして必要となる配線容量を自動検出部１４２によって自動的に検出を行うものである。
【００５４】
自動検出部１４２は、出力信号線の遅延時間の測定により配線容量を測定する。遅延時
間は、配線容量の目安となる情報であるため、配線容量cの代わりに遅延時間dを用いて、式(3)で与えられる0/1の出現確率pをp=d2/(d1+d2)と表すことができる。自動検出部１４２では、この遅延時間を測定し、Ｓｂｏｘ１とＳｂｏｘ２の出力信号線の遅延時間d1, d2を得る。乱数制御部１３は、自動検出部１４２からd1, d2の情報を受け取り、式p=d2/(d1+d2)を用いて乱数の0/1のバランスの制御を行う。このようにすることにより、ＬＳＩ設計のレイアウト時ではなく、製造の結果、個々の暗号化処理回路１１での配線容量にばらつきが生じたとしても、個々の暗号化処理回路２１の信号線の物理的条件などが反映された値となるため、チップ毎にカスタマイズした制御を行うことが可能となる。
【００５５】
なお、図８のように、乱数制御部１３へ与えるパラメータ格納部１４１と自動検出部１４２とを併用し、条件に応じて選択回路等で、一方を選択して利用するようにしても良いことは勿論である。
【００５６】
また、上記で説明した自動検出部１４２での遅延時間の測定法の一例として、位相比較器を用いる方法が考えられる。基準信号としてシステムクロック、比較信号として問題の信号線を用いれば、その位相差（すなわち遅延時間）を測定できる。なお、この方法では位相を比較するため、1周期以上のずれは判定できないことも予想されるが、そのような場合には、例えば、基準クロックとして分周クロックなどを用いることで、1周期よりも長い位相のずれを検出することも可能である。
【００５７】
上記した各変形例は、各種組み合わせて良いことは、勿論である。例えば、図３においてパラメータ格納部１４１の代わりに、図５で示した自動検出部１４２による自動検出方法を用いるようにしても良い。この場合、遅延時間d(w) (w=1,...,u)を検出し、このd(w)をc(w)の代わりに用いてp(w) (w=1,...,u)を決定することも可能である。乱数制御部１３では以上のようにしてp(w) (w=1,...,u)を決定した後、p(w)に対応する乱数rのパタンの出現確率がp(w)になるように乱数rの０／１の制御を行って乱数Rを生成する。そして乱数Rを暗号処理回路１１へ供給してＳｂｏｘ１〜Ｓｂｏｘｕの選択に使用することで、Ｓｂｏｘ１〜Ｓｂｏｘｕの出力信号線の配線容量が異なる場合にもＤＰＡ耐性を有する実装を提供できる。なお、以上の第１実施例の説明は、暗号化処理回路２１を例示したものであったが、基本的に暗号化と復号は相反するものであり、復号処理回路も暗号化処理回路２１と同様に実現できることは勿論である。
（第２実施例）
次に、暗号化処理回路３１のバスラインに流れる鍵情報などの秘密情報を乱数によってマスクする場合について説明する。
【００５８】
図９に示すように、暗号化処理回路３１は、内部にＲＯＭ、ＲＡＭ、ＥＥＰＲＯＭ、ＣＰＵ、暗号回路、Ｉ／Ｏ等がバスラインを介して接続される。暗号回路は、ＤＥＳやＡＥＳなどの共通鍵暗号方式や、ＲＳＡや楕円曲線暗号などの公開鍵暗号方式などの何れを適用したもので良い。
【００５９】
バスラインに同時に流れる各ビットデータのうち１であるビットの個数の総和をバスラインのハミング重みと呼ぶが、このハミング重みは、ＤＰＡ攻撃に対する耐性を維持するには、平均値であることが望ましく、ハミング重みが極端に小さかったり大きかったりすることはＤＰＡ攻撃に対する脆弱性を与える可能性があることが分かっている。例えば、８ビットのバスラインの場合、ハミング重みが４であることが理想的であり、ハミング重みが０や８であると、ＤＰＡ攻撃によりデータ値の推測が容易となる。
【００６０】
従って、本実施例では、秘密情報を乱数でマスクした結果（マスクデータ）、バスラインに流れるマスクデータのハミング重みが平均的な値になるように、乱数を制御するようにしている。
【００６１】
図１０は、本実施例の動作の一例を示すための図である。ここでは、ＥＥＰＲＯＭに暗号回路で利用する外部に秘密の鍵情報を記憶しておき、暗号回路の要求によって、バスラインを介して暗号回路へ送信する際に、バスライン上に流れる秘密の鍵情報をマスクすることを想定している。
【００６２】
まず、ＣＰＵは、ＥＥＰＲＯＭへ、その内部に記憶する鍵情報を要求する（１）。鍵情報検出部１４３は、ＥＥＰＲＯＭへの鍵情報の要求を検出し、ＥＥＰＲＯＭから鍵情報を取得する（２）。一般に鍵情報は、バスラインのビット幅よりはるかに大きいものであり、その場合には、例えばバスラインのビット幅単位で取得する（ようにしても良い）。鍵情報検出部１４３は、取得した鍵情報をビット幅単位で、乱数制御部１３へ送信する（３）。一方、乱数生成器１２は、乱数を順次生成し、乱数制御部１３へ送信する（４）。乱数制御部１３は、乱数生成器１２から送られる乱数をバス幅単位で乱数として得、また鍵情報検出部１４３からのビット幅の鍵情報を得、得られたこれらのデータを排他的論理和した結果、ハミング重みが、バス幅の１／２になるように乱数の０／１を変更する。例えば、マスクするデータがバイナリ表現で10111000、乱数が01100101であった場合、マスクした結果は11011101となり、ハミング重みは6である。ハミング重みを4にするため、乱数の最下位と最上位ビットを変更して11100100とすると、マスクした結果は01011100となり平均値4が達成される。なお、ここでは、最下位と最上位とを変更するようにしたが、どのビットを変更するかは、予め定めた規則に基づいて変更するようにすれば何れの方法でも良い。
【００６３】
変更した乱数を、ＥＥＰＲＯＭおよびＣＰＵへ供給し（５）、ＥＥＰＲＯＭでは得られた乱数によって、この求めた際に対応するビット幅の鍵情報をマスクし、バスラインへ出力する（６）。ＣＰＵは、マスクされた鍵情報を受け取って、乱数制御部から得た（変更した）乱数で排他的論理を行うことにより、ＣＰＵ内で鍵情報を得る（７）。以上のように、バスライン上で流れる鍵情報は、ビット幅単位で送信される各データが、全てハミング重みが、バス幅の１／２となっているので、外部からのＤＰＡ攻撃に対し、耐性を備えることができる。
【００６４】
以上説明した本実施例を上位概念で示すと、乱数で隠蔽するデータをs、乱数をr、それらに対して行う処理をfとすると、h=f(s,r)で与えられるhの何らかの性質を制御するといえる。このように表示した際、例えばＲＳＡ暗号に対するタイミング攻撃やＤＰＡの対策であるメッセージブラインディングやべき指数ブラインディング等も同様に扱うことができることがわかる。ＲＳＡの公開鍵をe,N、入力メッセージをMとすると、メッセージブラインディングでは乱数rを用いてM'=M・r mod N （またはM'=M・re mod N）を計算するという処理が通常行われる。これをh=f(s,r)に対応付けると、Mがs、M'がhにそれぞれ相当する。メッセージブラインディングが施されている場合、攻撃者は意図した攻撃に有効となるM'を発生させるためにMをいろいろ変えながら入力してＲＳＡの処理を行うことが考えられる。ここで、攻撃に対する脆弱性に繋がるようなM'の性質が分かっている場合、そのようなM'が発生することがないようにrを制御することで攻撃を防御することができる。
【００６５】
これを実現するためには、例えば次のような処理を行えばよい。ＤＰＡ攻撃耐性に影響を与える信号sのモニタリングを行い、この信号sに基づきh=f(s,r)で与えられる信号hが望ましい性質からずれている場合には、それを是正する方向に乱数rの制御を行う。その際、例えばr=f-1(s,h)という逆変換が得られる場合は、この関係式を使ってrの制御を行うことも可能である。ここで、rの制御の方法においては、例えば、第１実施例で説明したようなビット単位で０／１を制御する方法でもよく、hに対する望ましい性質に対応してrが取り得る値の範囲を限定するという方法でも良い。また、モニタリングする対象は
、信号sの代わりに、信号hとしても良い。
【００６６】
以上のような制御を乱数生成器１２の出力であるrに対して行って乱数Rを生成し、このRを暗号処理回路１１に供給することで、タイミング攻撃やＤＰＡ攻撃などに対する信号hに関する耐性を達成することが可能である。
【００６７】
なお、以上の第２実施例の説明も、暗号化処理回路３１を例示したものであったが、基本的に暗号化と復号は相反するものであり、復号処理回路も暗号化処理回路３１と同様に実現できることは勿論である。
【００６８】
以上詳細に説明してきた本実施の形態においては、種々の変形が可能である。例えば、図１の乱数制御部１３、パラメータ供給部１４を乱数生成器１２の内部に組み込むことも可能である。また、乱数制御部１３のみを乱数生成器１２内部に組み込み、パラメータ供給部１４は、乱数生成器１２の外に置くという構成も可能である。
【図面の簡単な説明】
【００６９】
【図１】本実施の形態の暗号化／復号モジュール１の機能ブロックを示す図。
【図２】ＤＥＳの１段の処理単位の主要部を示した図。
【図３】第１実施例の暗号化モジュール１を示した図。
【図４】乱数制御部１３での乱数の変更制御を示すフローチャート。
【図５】乱数生成器１２から出力される乱数の１ビットに着目した構成図。
【図６】第１実施例の２つのＳｂｏｘに代え、３つ以上のＳｂｏｘとした図。
【図７】第１実施例の変形例を示す図。
【図８】第１実施例において、パラメータ格納部１４１と自動検出部１４２とを選択可能にした構成例。
【図９】第２実施例の暗号化処理回路３１の内部構成図。
【図１０】第２実施例の動作の一例を示すための図。
【符号の説明】
【００７０】
１・・・暗号化モジュール
１１・・・暗号化／復号処理回路
１２・・・乱数生成器
１３・・・乱数制御部
１４・・・パラメータ供給部
２１、３１・・・暗号化処理回路
１０１、１０６・・・線形変換部
１０２、１０７・・・論理回路
１０３、１０４、１０８、１０９・・・Ｓｂｏｘ
１０５、１０５−１〜８・・・セレクタ
１４１・・・パラメータ格納部
１４２・・・自動検出部
１４３・・・鍵情報検出部
１３１、１３１−１〜１３１−８・・・レジスタ
１３２、１３２−１〜１３１−８・・・フィルタ部
105・・・自動検出部
【図１】
2005086670.tif 000003
【図２】
2005086670.tif 000004
【図３】
2005086670.tif 000005
【図４】
2005086670.tif 000006
【図５】
2005086670.tif 000007
【図６】
2005086670.tif 000008
【図７】
2005086670.tif 000009
【図８】
2005086670.tif 000010
【図９】
2005086670.tif 000011
【図１０】
2005086670.tif 000012