(57)【特許請求の範囲】
【請求項１】
同一の演算処理を繰り返し行うことで、外部から入力される平文データ／暗号文データを暗号化／復号する暗号化／復号装置において、 
乱数を生成する乱数供給部と、
前記平文データ／暗号文データと前記乱数供給部の乱数とを排他的論理和演算する第１排他的論理和回路と、
前記演算処理を行うものであって、初回は、前記第１排他的論理和回路で排他的論理和されたデータを演算処理する演算回路と、
複数のデータ保持部を備えており、複数のデータ保持部の一つを指定する選択信号を入力する毎に、前記演算回路からのデータを、前記選択信号に基づき選択された一のデータ保持部に書き込み保持するデータレジスタ回路と、
最終回の前記演算回路での演算処理後に前記データレジスタ回路の前記一のデータ保持部に保持されたデータと、前記乱数供給部の乱数とを排他的論理和演算する第２排他的論理和回路とを備え、
前記演算回路は、２回目以降は、前記データレジスタ回路の前記一のデータ保持部に保持されたデータを演算し、
前記第２排他的論理和演算の結果である暗号化データ／平文データを出力する
こと特徴とする暗号化／復号装置。 
【請求項２】
前記選択信号は、連続して同じデータ保持部を指定しないことを特徴とする前記請求項１に記載の暗号化／復号装置。 
【請求項３】
前記選択信号で選択されなかったデータ保持部の保持内容をリセットするようにしたことを特徴とする前記請求項１乃至２に記載の暗号化／復号装置。 
【請求項４】
前記選択信号で選択されなかったデータ保持部の保持内容を反転するようにしたことを特徴とする前記請求項1乃至２に記載の暗号化／復号装置。 
【請求項５】
前記選択信号で選択されなかったデータ保持部の保持内容を予め定められた２値列または乱数で書き換えるようにしたことを特徴とする前記請求項1乃至２に記載の暗号化／復号装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、同じ演算処理を繰り返し行う暗号化／復号装置であって、特に各演算処理の結果を一時的にデータレジスタ回路に格納する暗号化／復号装置に関する。
【背景技術】
【０００２】
一般に、ＦＩＰＳ４６−３（ＦＩＰＳ：Ｆｅｄｅｒａｌ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｐｒｏｃｅｓｓｉｎｇ  Ｓｔａｎｄａｒｄｓ）で定められるＤＥＳ方式などのブロック暗号化／復号方式は、所定の演算処理を所定回数繰り返すことによって暗号化／復号する。もう少し詳しく述べると、ブロック暗号化／復号方式の各回の演算処理を行った後の演算結果を、記憶手段（Ｅｘ．レジスタ）にいったん格納し、この演算結果を用いて、次回の演算処理を行って、その演算結果を記憶手段に上書き、つまり、演算結果を更新処理しながら、暗号化／復号が進む。
【０００３】
ここで記憶手段のデータの変化に着目すると、データの変化量は、時間軸上連続する２つの演算結果の差分としてあらわされる。この差分は、連続する２つの演算結果を排他的論理和した結果となる。この記憶手段のデータの変化量に注目し、暗号化／復号装置の、消費電力とデータの変化の遷移の解析用データを用いて、暗号モジュール内の秘密情報を推定する方法として、電力差分解析（ＤＰＡ：Ｄｉｆｆｅｒｅｎｔｉａｌ  Ｐｏｗｅｒ  Ａｎａｌｙｓｙｓ）が良く知られる。
【０００４】
ＤＰＡは、暗号機能を搭載した回路や暗号演算を行うプロセッサの消費電力の変動と、演算中の秘密データとの間に関係があるとき、秘密情報を導出することができるというものである。  
ＤＰＡは、破壊行為を伴わない攻撃であるため、外見を見ただけでは攻撃によって鍵情報が取り出されたかどうか判断できず、不正利用による被害が拡大する恐れがある。このため、暗号演算回路において、ＤＰＡへの対策が必須となってきている。
【０００５】
ＤＰＡに対する対策法として、演算中のデータを乱数などのデータでマスクし、消費電力と演算中のデータとの相関を、外部の攻撃者にわからないようにする方法（データマスク法）が知られている（例えば、［非特許文献１］参照）。データマスク法は、マスク用のデータとして乱数を用い、演算データとマスクデータを排他的論理和演算することで、演算途中のデータをマスクする。演算途中のデータが乱数によりマスクされることで、攻撃者が演算途中のデータを正しく推定できないようにする。このようにして、暗号モジュール内の秘密情報を導出できないようにする対策技術である。
【非特許文献１】"Ａｎ  ｉｍｐｌｅｍｅｎｔａｔｉｏｎ  ｏｆ  ＤＥＳ  ａｎｄ  ＡＥＳ，  ｓｅｃｕｒｅ  ａｇａｉｎｓｔ  ｓｏｍｅ  ａｔｔａｃｋｓ，"  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ＣＨＥＳ  ２００１，  ＬＮＣＳ  ２１６２，  ｐｐ．３０９−３１８，  ２００１
【発明の開示】
【発明が解決しようとする課題】
【０００６】
データマスク法によるＤＰＡ対策を実施した場合、乱数データを常に必要な量を得ることができればよいが、ＩＣカードのように消費電力と回路規模の制約が厳しい場合には、乱数生成回路の出力データ幅を小さくする必要が生じる。
【０００７】
このような場合には、マスクに使う乱数データを乱数生成回路から得るためには、数クロック掛かる。乱数生成回路の出力データ幅と、マスク用データのデータ幅との関係によっては、数十クロック待たなければならない。つまり、暗号化／復号の途中で毎回の演算処理毎に、乱数の生成を待つ時間が生じてしまう。
【０００８】
そこで、１回の暗号化／復号時には、同じ乱数を用いて演算回路内のデータを排他的論理輪を用いてマスクを行うことが考えられる。以降、マスクするということは、マスク用データと、演算回路内のデータを排他的論理輪で演算することをさす。
【０００９】
ここで、暗号演算結果が書き込まれる記憶手段に、連続する２つのマスクされたデータ（ＭａｓｋｅｄＤａｔａＡとＭａｓｋｅｄＤａｔａＢ）が書き込まれたときの記憶手段のデータの変化量に注目する。最初に記憶手段に書き込まれるＭａｓｋｅｄＤａｔａＡは、暗号演算途中のデータ（ＤａｔａＡ）がマスク用データ（“ＲＮ”で示す）によってマスクされたものであり、次に書き込まれるＭａｓｋｅｄＤａｔａＢは暗号演算途中のデータ（ＤａｔａＢ）をマスク用データでマスクを行ったものとする。
【００１０】
記憶手段のデータの変化量は、書き込まれたデータを排他的論理和（“＾”で示す）したときと同じであることから、変化量は次式で表される。
【００１１】
記憶手段のデータの変化量＝ＭａｓｋｅｄＤａｔａＡ＾ＭａｓｋｅｄＤａｔａＢ
＝（ＤａｔａＡ＾ＲＮ）＾（ＤａｔａＢ＾ＲＮ）
＝ＤａｔａＡ＾ＤａｔａＢ＾ＲＮ＾ＲＮ
＝ＤａｔａＡ＾ＤａｔａＢ
このように、記憶手段のデータの変化量に着目すると、データをマスクしているマスク用データの部分が消去され、２つのマスクのかかっていないデータの排他的論理和の結果だけが残る。これはまさに、記憶手段の連続する２つのデータの変化量に相当する。したがって、攻撃者は、記憶手段の変化量を正しく推定することが可能となっており、その結果、秘密情報を導出されることになり、安全性が保障できない（なお、２つの連続するデータの変化量に着目した解析モデルを、状態遷移モデルと呼ぶ）。
【００１２】
本発明は、上記課題を考慮したものであり、ＤＰＡによる攻撃に対する対策による回路の増加を抑えつつ、安全性が保障できる暗号化／復号装置を提供することを目的とする。
【課題を解決するための手段】
【００１３】
上記課題を解決するため、本発明の暗号化／復号装置は、同一の演算処理を繰り返し行うことで、外部から入力される平文データ／暗号文データを暗号化／復号するものであって、乱数を生成する乱数供給部と、平文データ／暗号文データと乱数供給部の乱数とを排他的論理和演算する第１排他的論理和回路と、演算処理を行うものであって、初回は、第１排他的論理和回路で排他的論理和されたデータを演算処理する演算回路と、複数のデータ保持部を備えており、複数のデータ保持部の一つを指定する選択信号を入力する毎に、演算回路からのデータを、選択信号に基づき選択された一のデータ保持部に書き込み保持するデータレジスタ回路と、最終回の演算回路での演算処理後にデータレジスタ回路の一のデータ保持部に保持されたデータと、乱数供給部の乱数とを排他的論理和演算する第２排他的論理和回路とを備え、演算回路は、２回目以降は、データレジスタ回路の一のデータ保持部に保持されたデータを演算し、第２排他的論理和演算の結果である暗号化データ／平文データを出力するようにした。
【発明の効果】
【００１６】
本発明によれば、回路規模の制約などのために、常に新しい乱数データを得ることができない場合、少ない乱数データを用いた場合においても状態遷移モデルによる解析に対して耐性のある回路を構成することができるようになる。
【発明を実施するための最良の形態】
【００１７】
以下、本発明の実施の形態を詳細に説明する。
【００１８】
図１は、本実施の形態の暗号化／復号装置のブロック構成を示したものである。なお、暗号化／復号装置１０は、平文データを暗号化し暗号文データを生成する暗号化装置、暗号文データを復号し、平文データを生成する復号装置、あるいは、その何れの処理も実現できる暗号化／復号装置の、総称として称しており、何れの装置であっても良い。また、暗号化／復号装置１０は、同じ演算処理を複数回繰り返し実行するような暗号化／復号方式を対象とする。
【００１９】
暗号化／復号装置１０は、所定長の平文／暗号文データと所定長の鍵データとを入力し、所定長の暗号文／復号文データを出力する。なお、平文／暗号文データのデータ長、および鍵データのデータ長のそれぞれは、暗号化／復号装置１０の暗号化／復号方式によって定まる。
【００２０】
暗号化／復号装置１０は、演算回路１１と、乱数供給部１２と、排他的論理和回路１３、１５と、レジスタ回路１４と、選択信号生成部１６とを備える。
【００２１】
演算回路１１は、入力データに、暗号化／復号方式に依存した所定の変換を施して、その施されたデータを出力データとして出力するものである。演算回路１１は、暗号化／復号開始時には、外部から入力される平文／暗号文データを入力データとし、２回目以降は、演算回路１１の出力データを入力データとする。また、演算回路１１の変換は、入力される鍵データに基づいて作用される。
【００２２】
乱数供給部１２は、一回の暗号化／復号の処理期間（暗号化／復号装置１０への一回の平文／暗号文データ入力に対し一回の暗号文／平文データ出力するまでの期間）中には同じ乱数を常時供給するものである。
【００２３】
乱数供給部１２の一例を、図２に示す。乱数生成部２１は、乱数を生成するものである。乱数生成部２１が１回あたりに生成する乱数の長さ（乱数のデータ長）は、暗号化／復号装置１０の平文／暗号文データのデータ長より相当小さいものとする。例えば、1回あたり８ビットの乱数を生成し、平文／暗号文データのデータ長と同じ長さになるまで乱数の生成を繰り返し行う。このような一回に生成する乱数のデータ長が短い乱数生成部２１は、実装規模を小さく実現できる。
【００２４】
乱数保持部２２は、暗号化／復号装置１０の平文／暗号文データのデータ長と同じ長さのデータを保持できるものであり、乱数生成部２１で生成された各乱数を直列的に、該データ長になるまで連結・保持する。乱数保持部２２は、連結・保持して該データ長となった乱数を、保持しつつ常時出力する。
【００２５】
以上のような乱数供給部１２は、供給するために乱数を用意するのに時間がかかるが、小型化が実現でき、例えば、ＩＣカードなどの利用には有用である。
【００２６】
図１に戻り、排他的論理和回路１３は、暗号化／復号装置１０の入力データと乱数供給部１２の乱数とを各ビットごとに排他的論理和するものである。この排他的論理和回路１３は、暗号化／復号装置１０の入力データを隠蔽（マスク）するものであり、以後、この排他的論理和回路１３の出力をマスクデータと呼ぶこととする。
【００２７】
レジスタ回路１４は、演算回路１１からのマスクデータを一時的に保持し、次回の演算回路１１での演算処理のための入力データとして供給するためのものである。また、選択信号生成部１６は、レジスタ回路１４へ選択信号を供給する。レジスタ回路１４、及び選択信号生成部１６の詳細については後述する。
【００２８】
排他的論理和回路１５は、レジスタ回路１４からのマスクデータと、乱数供給部１２の乱数とをビットごとに排他的論理和するものである。排他的論理和は、あるデータに対し、同じ排他的論理和を２回行うことによって、元のデータに戻るといった性質を有している。つまり、暗号化／復号装置１０の入力データを、乱数供給部１２からの乱数で、排他的論理和回路１３を経てマスクし、マスクしたデータを演算回路１１に入力する。演算回路１１の結果が排他的論理和回路１５を経ることにより、乱数供給部１２からの同一の乱数を用いて排他的論理輪和を行うことで、マスクされていない元の出力データに戻る。従って、本構成により、排他的論理和回路１３から排他的論理和回路１５までの間はマスクされたデータが存在する。ここで、乱数供給部１２では、図示していない演算回路１１から演算終了信号を受けたときにのみ、排他的論理和回路１５に乱数を供給する。
【００２９】
なお、図１に示されていないが、演算回路１１、レジスタ回路１４には、処理の同期を取るためのクロック信号が供給されている。
【００３０】
次に、レジスタ回路１４の内部の機能ブロックを図３に示し、説明する。
【００３１】
レジスタ回路１４は、入力タイミング制御部３１と、データ保持部３３−１と、データ保持部３３−２と、データ選択部３４とを備える。また、データ保持部３３−１と、データ保持部３３−２と、データ選択部３４は、選択信号が供給される選択信号生成部１６と接続され、更に、入力タイミング制御部３１はクロック信号が供給される。
【００３２】
レジスタ回路１４の外部にある選択信号生成部１６は、データ保持部３３−１または３３−２の何れを選択するかを示す選択信号をクロックに同期して出力する。
【００３３】
この選択信号の生成方法としては、例えば、図４のような予め複数の選択パターン（図では各行）を用意したテーブル４０を備え、テーブル４０の中から選択パターンを一つ選択し、そのパターンの値（図では、０、１）に対応付けた選択信号（０→３３−１を示す信号，1→３３−２を示す信号）をクロックに同期して順次生成し出力する方法や、一ビットの乱数生成器を用意し、乱数０／１に対応付けた選択信号をクロックに同期して順次生成し出力する方法などがある。
【００３４】
入力タイミング制御部３１は、演算回路１１からのマスクデータを、データ保持部３３−１またはデータ保持部３３−２へ供給するタイミングを制御するものであってクロック信号に基づいている。
【００３５】
データ保持部３３−１、データ保持部３３−２は、選択信号生成部１６からの選択信号に基づいて、入力タイミング制御部３１からのマスクデータを、何れか一方のデータ保持部３３−１、データ保持部３３−２へ上書きし保持する。つまり、データ保持部３３−１、３３−２の一方のみが更新され、他方は以前のデータを保持している。なお、選択信号は、クロックに同期されているから、更新実行のタイミングもクロックに同期される。
【００３６】
ここで、選択信号生成部１６の選択信号とデータ保持部３３−１、データ保持部３３−２の保持する内容との関係の一例を図５に示す。なお、選択信号が０のときは、データ保持部３３−１を、選択信号が１のときは、データ保持部３３−２を選択するとする。
【００３７】
時刻Ｔ１において選択信号が“０”（データ保持部３３−１を示す）の場合、データ保持部３３−１には、演算回路１１の演算結果であるＭａｓｋｅｄＤａｔａ１（マスクされたＤａｔａ１）が保持され、一方、データ保持部３３−２には既に保持済みのＭａｓｋｅｄＤａｔａ０が保持される。なお、ＭａｓｋｅｄＤａｔａ０は、前回の演算回路１１の演算結果であるＤａｔａ０をマスクしたものである。
【００３８】
次に時刻Ｔ２において選択信号が“１”（データ保持部３３−２を示す）の場合、データ保持部３３−２には、演算回路１１の演算結果であるＭａｓｋｅｄＤａｔａ２（マスクされたＤａｔａ２）が保持され、一方、データ保持部３３−１はＴ１で既に保持済みのＭａｓｋｅｄＤａｔａ１が引き続き保持される。
【００３９】
次に時刻Ｔ３において選択信号が“１”（データ保持部３３−２を示す）の場合、データ保持部３３−２には、演算回路１１の演算結果であるＭａｓｋｅｄＤａｔａ３（マスクされたＤａｔａ３）が保持され、一方、データ保持部３３−１はＴ１で既に保持済みのＭａｓｋｅｄＤａｔａ１が引き続き保持される。
【００４０】
時刻Ｔ４において選択信号が“０”（データ保持部３３−１を示す）の場合、データ保持部３３−１には、演算回路１１の演算結果であるＭａｓｋｅｄＤａｔａ４（マスクされたＤａｔａ４）が保持され、一方、データ保持部３３−２には既に保持済みのＭａｓｋｅｄＤａｔａ３が引き続き保持される。
【００４１】
なお、上記例は、同じデータ保持部への連続的な書き込みを許す方法を示した。この場合には、連続書き込みを行われたデータ保持部に着目しＤＰＡ攻撃すれば、マスクが外れるため、前後のデータの差分がわかるので、秘密情報がわかってしまい、一見安全性に欠ける。しかし、頻出しなければ同じデータ保持部への連続的な書き込みが起きる箇所が、そもそもわからないので十分にＤＰＡ攻撃に対する耐性を有している。また、図４の２行目のパターンに基づき、書き込みを行えば、同じデータ保持部への連続的な書き込みが起きないので、確実にＤＰＡ攻撃に対する耐性を有することになる。
【００４２】
また、上記例は、選択されなかった（書き込みのなかった）データ保持部に対しては、特に何も行わない例を示したが、これに代え、選択されなかったデータ保持部の保持内容をリセットするようにしてもよい。リセットとは、例えばデータ保持部の内容を全て“０”または“１”に書き込むことをさす。また、選択されなかったデータ保持部の保持内容を反転したり、予め定めておいた２値列や乱数で書き換えるようにしても良い。このようにすることにより、演算処理にとっては不要であるが、過去の演算処理が反映されたデータが残ることを防ぐことができるから、安全性が増す可能性がある。
【００４３】
図３の説明に戻る。
【００４４】
データ選択部３４は、選択信号生成部１６からの選択信号に基づいて、データ保持部３３−１、データ保持部３３−２の何れかで保持している最新の演算結果のマスクデータを選択し、出力するものである。データ選択部３４は、データ保持部３３−１、３３−２への書き込み先の選択に用いる選択信号と同じ選択信号に基づくから、書き込みのあった、すなわち最新の演算結果のマスクデータを選択できる。
【００４５】
出力されたマスクデータは、排他的論理和回路１５を得た後、暗号化／復号結果（最終出力）となる。
以上
【００４６】
以上のようなレジスタ回路１４は、例えば、図６に示すような論理素子を組み合わせた１ビットレジスタ回路を、n個並列に並べることによって、nビットのレジスタ回路１４を構成することができる。なお、図６の１ビットレジスタ回路の出力が２つあるが、出力のあるほうをその1ビットの値として出力するよう利用する。
【００４７】
以上詳細に説明した本発明の実施の形態によれば、同一演算を繰り返して暗号化／復号する際の各演算結果を乱数でマスクしたマスクデータを、２つのデータ保持部の何れかを都度選択し、書き込むようにしたから、前記乱数を各演算結果毎に変更することが不要になった。その結果、前記乱数を生成する回路を小型化できた。これは、言い換えれば、同一演算を繰り返して暗号化／復号する際の各演算結果をマスクするための乱数を生成する回路を小型化することによって生じる同一乱数の使用によるＤＰＡに対する耐性の欠如という欠点を、２つのデータ保持部を用意し、これらの何れかを都度選択し、書き込むようにすることにより、（ＤＰＡに対する耐性の欠如を）克服できるようになった。
【００４８】
次に、本実施の形態の応用例について簡単に示す。図７は、本実施の形態のレジスタ回路１４の別の例である。
【００４９】
同図からも明らかなように、この例はデータ保持部を３つ備えている。これに伴う前記した実施の形態からの変更点は、３つのデータ保持部から一つを選択できるように選択信号を変更することと、この選択信号に基づいてデータ選択部が３つのデータ保持部からの入力データのうち一つを選択することである。前者の変更点は、たとえば、図４のテーブルの１ビットに対応付けて選択信号を生成するようにしていた点を、２ビットに対応付けるようにすれば良い。また、後者の変更点は、２ビットの選択信号による４値の表現のうち、３値でデータ保持部を選択するようにすれば良い。
【００５０】
以上の応用例のように、データ保持部を３つにすると、２つのときよりも書き込みの選択がより複雑化できるので、ＤＰＡによる攻撃に対する耐性がより増大する。
【図面の簡単な説明】
【００５１】
【図１】本実施の形態の暗号化／復号装置のブロック構成を示した図。
【図２】乱数供給部１２の一例。
【図３】レジスタ回路１４の内部の機能ブロックを示す図。
【図４】予め複数の選択パターンを用意したテーブル４０を示す図。
【図５】選択信号生成部１６の選択信号とデータ保持部３３−１、データ保持部３３−２の保持する内容との関係の一例。
【図６】論理素子を組み合わせた１ビットレジスタ回路の例。
【図７】本実施の形態のレジスタ回路１４の別の例。
【符号の説明】
【００５２】
１０  暗号化／復号装置
１１  演算回路
１２  乱数供給部
１３、１５  排他的論理和回路
１４  レジスタ回路
１６  選択信号生成部
２１  乱数生成部
２２  乱数保持部
３１  入力タイミング制御部
３３−１、３３−２、３３−３  データ保持部
３４  データ選択部
４０  テーブル  
【図１】
0004783104.tif 000002
【図２】
0004783104.tif 000003
【図３】
0004783104.tif 000004
【図４】
0004783104.tif 000005
【図５】
0004783104.tif 000006
【図６】
0004783104.tif 000007
【図７】
0004783104.tif 000008