説明

べき乗剰余演算装置、べき乗剰余演算方法およびプログラム

【課題】べき乗剰余演算において、電力解析および処理時間解析に基づくサイドチャネル攻撃への耐性を向上させること。
【解決手段】べき乗剰余演算装置は、べき乗指数kとべき乗剰余演算の法Nを保持する暗号鍵保持部と、べき乗指数kを分割する単位として、2以上の整数の乱数である処理ビット幅pを生成する乱数生成部と、処理ビット幅pおよびべき乗指数kを用いて処理回数qを計算し、演算用べき乗指数fを生成するべき乗指数制御部と、処理回数q、演算用べき乗指数f、およびべき乗剰余演算の法Nを用いてm mod Nを算出する剰余演算部と、を備えている。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、べき乗剰余演算装置、べき乗剰余演算方法およびプログラムに関し、特に、耐タンパー性を有するべき乗剰余演算装置、べき乗剰余演算方法およびプログラムに関する。
【背景技術】
【0002】
電子決済に用いられるICカード、決裁可能な端末機器などの普及に伴い、重要な情報の秘匿性を向上させるために、暗号技術の重要性が増大している。
【0003】
一方、暗号化された情報に対する攻撃方法も高度化されている。特に、暗号処理を実行するプロセッサの処理時間または消費電力を測定し、統計的手法を用いて、暗号プロセッサ内部の秘密情報を解析するサイドチャネル攻撃が現実的な脅威となってきている。そこで、非正規な手段による機密データの読み取りを防ぐ能力(耐タンパー性)をさらに向上させる必要がある。
【0004】
一例として、特許文献1に、耐タンパー性べき乗演算方法が記載されている。図5は、特許文献1に記載された耐タンパーべき乗剰余演算装置の構成を示すブロック図である。
【0005】
べき乗剰余演算装置101は、ICカードなどの計算機のべき乗剰余演算演算部として構成されており、ハードウェアまたはソフトウェアによってべき乗剰余演算を行う。べき乗剰余演算装置101は、制御部102、ROM(Read Only Memory、リードオンリーメモリ)103、RAM(Random Access Memory、ランダムアクセスメモリ)104、事前計算テーブル105、剰余乗算ユニット106からなる。
【0006】
ROM103は、べき乗剰余演算を行う際に必要なパラメータを格納している。例えば、m,N(後述)が固定値であるときには、ROM103はm,Nを格納している。また、ソフトウェアで実現されるときには、Brickellらの方法でべき乗剰余演算を行うプログラムを格納している。
【0007】
RAM104は、べき乗剰余演算の途中結果などの一時的なデータを格納する。事前計算テーブル105は、TBL[i]=mwi mod NからなるTBL[ ]を格納している。事前計算テーブル105は、ROM103に含まれていてもよい。
【0008】
剰余乗算ユニット106は、ROM103、RAM104または事前計算テーブル105から制御部102の制御のもとに入力値x,yを受け、剰余乗算z=x×y mod Nを行って結果zをRAM104に返す。
【0009】
図6は、特許文献1に記載された耐タンパーべき乗剰余演算方法を実現するフローチャートである。
【0010】
図6、図7では、今日のベき乗剰余算を利用した暗号方式の法は一般に1,024ビットが使われていることから、nを1,024ビット、wを8ビット、sをs=n/w=128とした場合を示しているが、もちろん一般化することも容易である。
【0011】
図6を参照して、特許文献1に記載されたべき乗剰余演算装置101の動作について説明する。
【0012】
まず、kは8ビットずつ128ブロックに分けられているものとし、それをMSB(Most Significant Bit)側からk127,k126,・・・,k,kとする。これは、ステップ201よりも前またはステップ201で行われるステップである。また、nが1,024ビットの場合を考えているので、MSBを含むブロックに0をパディングする必要がないが、必要に応じてここでkのMSB側に0をパディングしてブロックをwビットにしておく。
【0013】
ステップ201では、k127,・・・,kを大きい順に並べ替え、それに対応する添え字を領域Fに格納する。ステップ201を詳細に記述したフローチャートが図7である。ここで、ステップ201に対応する図7について説明する。
【0014】
ステップ301において、添え字を格納する領域Fを0に初期化する。ステップ302から309は、dを255(=2−1)からd=0まで1ずつ減じていくループ処理である。ステップ303から306は、iを127(=s−1)からi=0まで1ずつ減じていくループ処理である。なお、ここはiを0から127まで1ずつ増加させていってもよい。
【0015】
ステップ304において、k=dであるかを検査する。成立するときは添え字を格納する領域Fに1バイトのデータとしてiを連結する(ステップ305)。成立しないときは何もしない、すなわちステップ305を飛ばしてステップ306に進む。
【0016】
ステップ306のiループが終了したのちはステップ307に進み、i>0か検査する。成立するときは領域Fに、dの値が変化する印をつける。ここでは0x80(10進数では128)という1バイトをその印としている(ステップ308)。成立しないときは何もしない、すなわちステップ308を飛ばしてステップ309に進む。ステップ309のdループが終了したとき、このフローチャートは終了する。
【0017】
そこで、図6のフローチャートに戻る。ステップ202、203で中間結果A,Bをそれぞれ1と設定する。ステップ204から208はiを0から382(=(2−1)+s−1)まで1ずつ増加させていくループ処理である。
【0018】
ステップ205においてFのi番目の要素F[i]が0x80であるか検査する。成立する場合はB×A mod Nを実行してAに格納し(ステップ206)、ステップ208に進む。成立しない場合はB×TBL[F[i]] mod Nを実行してBに格納する(ステップ207)。
【0019】
ステップ208で終了したときに、Aにm mod Nが格納されている。なぜならば、ここでは、Brickellらの方法において、k=dかの判定を処理の先頭で行っているのみで、剰余乗算の実行順序はBrickellらの方法と同じだからである。また、Brickellらの方法では、dのループはd=0で行っていないが、ここでは(図7)、d=0の場合も行っている。しかし、ステップ307でi=0の場合はFに0x80を連結していないため、d=0に対応する図6での演算は、ステップ207が行われるのみで、ステップ206は行われない。したがって、d=0に対応する演算は、最終結果Aに影響を与えないため、Brickellらの方法と同一の最終結果を得ることができる。
【0020】
なお、特許文献2には、指数部を上位と下位に2分割して並列に処理する技術が記載されている。また、特許文献3には、べき乗剰余演算式ではないものの、乱数による分割処理手段が記載されている。
【先行技術文献】
【特許文献】
【0021】
【特許文献1】特開2008−224830号公報(第6、7頁、図2〜図4)
【特許文献2】特開2003−177669号公報
【特許文献3】特開平09−311627号公報
【発明の概要】
【発明が解決しようとする課題】
【0022】
以下の分析は、本発明者によってなされたものである。
【0023】
特許文献1に記載された耐タンパーべき乗剰余演算装置によると、攻撃手法の高度化に伴い、組込みシステムのように、あらかじめ格納された暗号鍵で処理が行われる場合、複数の異なる被べき乗数に対する処理の処理時間および消費電力波形を統計的に解析することにより、各ステップの処理内容、暗号鍵が解読されるおそれがある。すなわち、特許文献1に記載された耐タンパーべき乗剰余演算装置は、電力解析に基づくサイドチャネル攻撃への耐タンパー性が低い。
【0024】
特許文献1に記載されたべき乗剰余演算では、全ての演算は、図6のフローチャートにおける、ステップ205からステップ206、または、ステップ205からステップ207の演算、すなわち、条件分岐の後のべき乗剰余演算の繰り返しとなる。
【0025】
図6のフローチャートにおいて繰返されるステップ206、およびステップ207の演算の入力値として用いる中間結果A、B、およびTBL[F[i]]は、繰返し処理の度に異なる。したがって、各ステップにおける消費電力波形は、入力値に対応した波形となる。組込みシステムのように、あらかじめROMなどに格納された同一の暗号鍵を使用する場合には、特許文献1に記載されたべき乗剰余演算では、暗号鍵の0、1のパターンの依存した条件分岐、べき乗剰余演算が実行されることになる。このとき、複数の異なる被べき乗数に対する処理の処理時間および消費電力波形を統計的に解析することにより、各ステップの処理内容および暗号鍵を解析することができる。
【0026】
すなわち、特許文献1に記載されたべき乗剰余演算方法は、暗号鍵、すなわち、べき乗指数kおよびべき乗剰余演算の法Nが同一の場合には、同一の処理フローで演算する方法である。したがって、同一の暗号鍵を用いた演算を複数回行うと、暗号鍵の0、1のパターンに依存する処理時間および消費電力波形を統計的に解析することで、暗号鍵を解析することができる。
【0027】
そこで、べき乗剰余演算において、電力解析および処理時間解析に基づくサイドチャネル攻撃への耐性を向上させることが課題となる。本発明の目的は、かかる課題を解決するべき乗剰余演算装置、べき乗剰余演算方法およびプログラムを提供することにある。
【課題を解決するための手段】
【0028】
本発明の第1の視点に係るべき乗剰余演算装置は、
べき乗指数kとべき乗剰余演算の法Nを保持する暗号鍵保持部と、
べき乗指数kを分割する単位として、2以上の整数の乱数である処理ビット幅pを生成する乱数生成器と、
処理ビット幅pおよびべき乗指数kを用いて処理回数qを計算し、演算用べき乗指数fを生成するべき乗指数制御部と、
処理回数q、演算用べき乗指数f、およびべき乗剰余演算の法Nを用いてm mod Nを算出する剰余演算部と、を備えている。
【0029】
本発明の第2の視点に係るべき乗剰余演算方法は、
コンピュータが、記憶部に記録されたべき乗指数kを分割する単位として、2以上の整数の乱数である処理ビット幅pを生成する工程と、
処理ビット幅pおよびべき乗指数kを用いて処理回数qを計算し、演算用べき乗指数fを生成する工程と、
処理回数q、演算用べき乗指数f、および記憶部に記録されたべき乗剰余演算の法Nを用いてm mod Nを算出する工程と、を含む。
【0030】
本発明の第3の視点に係るプログラムは、
記憶部に記録されたべき乗指数kを分割する単位として、2以上の整数の乱数である処理ビット幅pを生成する処理と、
処理ビット幅pおよびべき乗指数kを用いて処理回数qを計算し、演算用べき乗指数fを生成する処理と、
処理回数q、演算用べき乗指数f、および記憶部に記録されたべき乗剰余演算の法Nを用いてm mod Nを算出する処理と、をコンピュータに実行させる。
【発明の効果】
【0031】
本発明に係るべき乗剰余演算装置、べき乗剰余演算方法およびプログラムによると、べき乗剰余演算において、電力解析および処理時間解析に基づくサイドチャネル攻撃への耐性を向上させることができる。
【図面の簡単な説明】
【0032】
【図1】本発明の第1の実施形態に係るべき乗剰余演算装置の構成を示すブロック図である。
【図2】本発明の第2の実施形態に係るべき乗剰余演算装置の構成を示すブロック図である。
【図3】本発明の第2の実施形態に係るべき乗剰余演算装置の剰余演算部の構成を示すブロック図である。
【図4】本発明の第2の実施形態に係るべき乗剰余演算装置の動作を示すフローチャートである。
【図5】特許文献1に記載された耐タンパーべき乗剰余演算装置の構成を示すブロック図である。
【図6】特許文献1に記載された耐タンパーべき乗剰余演算方法を示すフローチャートである。
【図7】特許文献1に記載された耐タンパーべき乗剰余演算方法(図6のステップS201)の詳細を示すフローチャートである。
【発明を実施するための形態】
【0033】
第1の展開形態によると、上記第1の視点に係るべき乗剰余演算装置が提供される。
【0034】
第2の展開形態によると、べき乗指数制御部は、べき乗指数kを処理ビット幅pで割った商を処理回数qとし、べき乗指数kのMSB(Most Significant Bit)からpビット分を演算用べき乗指数fとして取り出す、べき乗剰余演算装置が提供される。
【0035】
第3の展開形態によると、乱数生成器は、べき乗剰余演算を行なう度に、処理ビット幅pを生成する、べき乗剰余演算装置が提供される。
【0036】
第4の展開形態によると、べき乗剰余演算の途中結果を含む一時的なデータを格納する一時データ保持部をさらに備えている、べき乗剰余演算装置が提供される。
【0037】
第5の展開形態によると、
剰余演算部は、処理ビット幅pの最大値をrとして、2個のモンゴメリ演算器と、
個のモンゴメリ演算器の演算結果から、べき乗指数制御部で生成する演算用べき乗指数fに対応する演算結果を選択する第1のセレクタと、
処理回数qを保持するレジスタと、
乗算器と、
剰余演算結果Uを出力する剰余演算器と、
剰余演算結果または固定値を選択する第2のセレクタと、を備えている、べき乗剰余演算装置が提供される。
【0038】
第6の展開形態によると、2個のモンゴメリ演算器は、それぞれ、乱数生成器で生成する処理ビット幅pの最大値をrとした場合、あらかじめ、0から(2−1)までの整数jに関して、m mod Nを計算した結果を保持する、べき乗剰余演算装置が提供される。
【0039】
第7の展開形態によると、第1のセレクタは、べき乗指数制御部で生成する演算用べき乗指数fに対し、モンゴメリ演算器の演算結果からm mod Nを選択し、当該選択結果を乗算器に出力する、べき乗剰余演算装置が提供される。
【0040】
第8の展開形態によると、レジスタは、q−1から0までの整数をループカウンタhとして順次出力する、べき乗剰余演算装置が提供される。
【0041】
第9の展開形態によると、乗算器は、乱数生成器から出力された処理ビット幅p、およびべき乗指数制御部から出力された処理回数qを用いて、第1のセレクタの出力X(f)の2乗を剰余演算器に出力し、剰余演算器の出力Uの2乗をp−1回計算して剰余演算器に出力し、第1のセレクタの出力X(f)と剰余演算器の出力Uの積の2乗を剰余演算器に出力し、剰余演算器の出力Uの2乗をp−1回計算して剰余演算器に出力する処理をq−2回繰り返す、べき乗剰余演算装置が提供される。
【0042】
第10の展開形態によると、剰余演算器は、乗算器出力Tとべき乗剰余演算の法Nに対し、T mod Nを計算して乗算器に出力する、べき乗剰余演算装置が提供される。
【0043】
第11の展開形態によると、第2のセレクタは、ループカウンタhの値により、剰余演算器出力Uまたは固定値いずれかを選択し、選択結果を外部に出力する、べき乗剰余演算装置が提供される。
【0044】
第12の展開形態によると、上記第2の視点に係るべき乗剰余演算方法が提供される。
【0045】
第13の展開形態によると、演算用べき乗指数生成工程において、べき乗指数kを処理ビット幅pで割った商を処理回数qとし、べき乗指数kのMSB(Most Significant Bit)からpビット分を演算用べき乗指数fとして取り出す、べき乗剰余演算方法が提供される。
【0046】
第14の展開形態によると、上記第3の視点に係るプログラムが提供される。
【0047】
第15の展開形態によると、演算用べき乗指数生成処理において、べき乗指数kを処理ビット幅pで割った商を処理回数qとし、べき乗指数kのMSB(Most Significant Bit)からpビット分を演算用べき乗指数fとして取り出す、プログラムが提供される。
【0048】
特許文献1に記載されたべき乗演算方法では、同一の暗号鍵によるべき乗剰余演算を行う場合、暗号鍵の0、1のパターンに依存する同一の処理フローとなる。
【0049】
一方、本発明においては、乱数生成器により、動的に生成した処理ビット幅pを用いて、べき乗指数kを処理するたびに、べき乗指数制御部で決定した処理回数q回の演算に分割し、べき乗剰余演算をq回繰り返す。処理のたびに演算の分割数を可変とすることで、同一の暗号鍵、すなわち同一のべき乗指数kおよびべき乗剰余演算の法Nを用いた処理であっても、処理の都度、暗号鍵の0、1のパターンに依存しない処理フローとすることができる。
【0050】
すなわち、本発明によると、同一の暗号鍵を用いたべき乗剰余演算であっても、処理のたびに異なる消費電力波形とすることができる。このとき、統計的手法を用いて、消費電力波形から暗号鍵の解析を行うことを困難とすることができる。したがって、本発明によると、電力解析に関する耐タンパー性が向上する。
【0051】
また、本発明によると、処理の分割数を演算のたびに変更させるため、同一の暗号鍵を用いた演算を行っても、毎回異なる処理フロー、すなわち異なる処理時間とすることができ、統計的手法を用いて、処理時間から暗号鍵を解析することが困難となる。したがって、本発明によると、処理時間解析に関する耐タンパー性も向上する。
【0052】
(実施形態1)
本発明の第1の実施形態に係るべき乗剰余演算装置について、図面を参照して説明する。
【0053】
図1は、本実施形態に係るべき乗剰余演算装置1の構成を示すブロック図である。図1を参照すると、べき乗剰余演算装置1は、暗号鍵保持部13、乱数生成器5、べき乗指数制御部6および剰余演算部4を備えている。
【0054】
暗号鍵保持部13は、べき乗指数kとべき乗剰余演算の法Nを保持する。暗号鍵保持部13は、一例として、ROM(Read Only Memory)であってもよい。
【0055】
乱数生成器5は、べき乗指数kを分割する単位として、2以上の整数の乱数である処理ビット幅pを生成する。乱数生成器5は、べき乗剰余演算を行う度に、処理ビット幅pを生成するようにしてもよい。
【0056】
べき乗指数制御部6は、処理ビット幅pおよびべき乗指数kを用いて処理回数qを計算し、演算用べき乗指数fを生成する。べき乗指数制御部6は、べき乗指数kを処理ビット幅pで割った商を処理回数qとし、べき乗指数kのMSB(Most Significant Bit)からpビット分を演算用べき乗指数fとして取り出し、処理回数qおよび演算用べき乗指数fを剰余演算部4に出力するようにしてもよい。
【0057】
剰余演算部4は、処理回数q、演算用べき乗指数f、およびべき乗剰余演算の法Nを用いてm mod Nを算出する。
【0058】
べき乗剰余演算装置は、べき乗剰余演算の途中結果を含む一時的なデータを格納する一時データ保持部14をさらに備えていてもよい。一時データ保持部14は、一例として、RAM(Random Access Memory)であってもよい。
【0059】
本実施形態では、乱数生成器5により、動的に生成した処理ビット幅pを用いて、べき乗指数kを処理するたびに、べき乗指数制御部6で決定した処理回数q回の演算に分割し、べき乗剰余演算をq回繰り返す処理を行う。
【0060】
処理のたびに演算の分割数を可変とすることで、同一の暗号鍵、すなわち同一のべき乗指数kおよびべき乗剰余演算の法Nを用いた処理であっても、処理の都度、暗号鍵の0、1のパターンに依存しない処理フローとすることができる。
【0061】
すなわち、本発明によると、同一の暗号鍵を用いたべき乗剰余演算であっても、処理のたびに異なる消費電力波形とすることができる。このとき、統計的手法を用いて、消費電力波形から暗号鍵の解析を行うことを困難にすることができる。したがって、本実施形態によると、電力解析に関する耐タンパー性が向上する。
【0062】
また、本実施形態によれば、処理の分割数を演算のたびに変更させるため、同一の暗号鍵を用いた演算を行っても、毎回異なる処理フロー、すなわち異なる処理時間とすることができ、統計的手法を用いて、処理時間から暗号鍵を解析することが困難となる。したがって、本実施形態によると、処理時間解析に関する耐タンパー性も向上する。
【0063】
(実施形態2)
本発明の第2の実施形態に係るべき乗剰余演算装置について、図面を参照して説明する。
【0064】
図2は、本実施形態に係るべき乗剰余演算装置1の構成を示すブロック図である。図2を参照すると、べき乗剰余演算装置1は、制御部102および演算部8を備えている。
【0065】
演算部8は、ROM103、RAM104、乱数生成器5、べき乗指数制御部6および剰余演算部4を備えている。
【0066】
制御部102は、演算部8の演算全体のコントロールを行う。
【0067】
ROM103は、べき乗剰余演算を行う際に必要なパラメータ格納している。ROM103は、例えば、暗号鍵となるべき乗指数k、べき乗剰余演算の法Nを固定値として格納している。ROM103に格納されたべき乗指数kは、べき乗指数制御部6に出力される。
【0068】
RAM104と剰余演算部4は、一時データ7を相互に入出力する。
【0069】
乱数生成器5で生成された処理ビット幅pは、べき乗指数制御部6および剰余演算部4に入力される。
【0070】
剰余演算部4は、制御部102の制御のもとに、ROM103からべき乗剰余演算の法Nを、べき乗指数制御部6から演算用べき乗指数fおよび処理回数qを、さらに、べき乗剰余演算装置1の外部から被べき乗数m受け、べき乗剰余演算m mod Nを行い、演算結果をべき乗剰余演算装置1の外部に出力する。なお、剰余演算部4による演算方法の詳細については後述する。
【0071】
図3は、剰余演算部4の構成を示すブロック図である。図3を参照すると、剰余演算部4は、モンゴメリ演算器群20、セレクタ10、乗算器40、剰余演算器21、レジスタ30およびセレクタ11を備えている。
【0072】
モンゴメリ演算器群20は、M個のモンゴメリ演算器20−(0),20−(1),・・・,20−(M−1)を含む。ここで、Mは、図2の乱数生成器5で生成される乱数、すなわち、処理ビット幅pの大きさに依存する。処理ビット幅pの最大値をrとすると、M=2である。
【0073】
モンゴメリ演算器群20の各モンゴメリ演算器20−(i)(i=0〜M−1)は、被べき乗数mおよびべき乗剰余演算の法Nを受ける。モンゴメリ演算器20−(0)はm mod Nを計算し、モンゴメリ演算器20−(1)はm mod Nを計算し、・・・、モンゴメリ演算器20−(M−1)はmM−1 mod Nを計算する。ここで、モンゴメリ演算器20−(0)で計算された値をX(0)とし、モンゴメリ演算器20−(1)で計算された値をX(1)とし、・・・、モンゴメリ演算器20−(M−1)で計算された値をX(M−1)とする。
【0074】
セレクタ10は、演算用べき乗指数fを受け、モンゴメリ演算器20−(0),20−(1),・・・,20−(M−1)から出力された演算結果X(0),X(1),・・・、X(M−1)のうちのいずれかを選択するとともに、選択した演算結果X(f)を乗算器40に出力する。
【0075】
レジスタ30は、処理回数qを受ける。また、レジスタ30は、ループカウンタ(ループカウント)hを乗算器40およびセレクタ11に出力する。レジスタ30は、一例として、q−1から0までの整数を順次ループカウンタhとして出力するようにしてもよい。
【0076】
乗算器40は、処理ビット幅p、剰余演算器21の出力U、セレクタ10の出力X(f)、および、ループカウンタhを受ける。乗算器40は、演算中の一時的なデータを、一時データ7として、RAM104との間でやりとりする。
【0077】
剰余演算器21は、乗算器40の演算結果T、および、べき乗剰余演算の法Nを受け、剰余演算を行う。剰余演算器21は、乗算器40およびセレクタ11に出力Uを出力する。また、剰余演算器21は、演算中の一時的なデータを、一時データ7として、RAM104との間でやりとりする。
【0078】
ループカウンタh≠0の場合には、セレクタ11は0を出力する。一方、ループカウンタh=0の場合には、セレクタ11は、最終結果としてm mod Nを出力する。なお、ループカウンタh≠0の場合における出力は固定値であればよく、0に限定されない。
【0079】
本実施形態におけるモンゴメリ演算器は、以下の原理に基づく計算を行う。
【0080】
整数E,Yとべき乗剰余演算の法Nが与えられたとき、モンゴメリ乗数R(=2n、nはべき乗剰余演算の法Nのビット数)を用いると、2つの整数E、Yは、整数e,yを用いて、それぞれ式(1)および式(2)によって表すことができる。
【0081】

【0082】

【0083】
このとき、整数E,Yの積の剰余演算は、式(3)で示される。
【0084】

【0085】
ここで、E、Y、e、y、Rはいずれも整数であり、モンゴメリ乗数R≧2であることから、式(4)が成り立つ。
【0086】

【0087】
式(4)より、式(1)、(2)に示されたようなモンゴメリ乗数Rを用いた変換を行うことで、べき乗剰余演算を式(3)の右辺のように少ないビット数の演算に変換することができる。したがって、モンゴメリ乗数を使用した場合には、モンゴメリ乗数を使用しない場合と比較して、高速にべき乗剰余演算を実行することができる。
【0088】
本実施形態では、べき乗剰余演算を高速化するために、一例として、モンゴメリ演算器を用いて剰余演算部4を構成した。なお、剰余演算部4は、モンゴメリ演算器を使用しないものであってもよい。
【0089】
図4は、本実施形態に係るべき乗剰余演算装置1により、べき乗剰余演算m mod Nを計算する方法を示すフローチャートである。ここで、mは被べき乗数、kはべき乗指数、Nは法である。また、Nを固定とすると、必然的にモンゴメリ乗数も一意に定まる。
【0090】
まず、乱数生成器5(図2)は、乱数として処理ビット幅pを生成する(ステップS1)。処理ビット幅pは、2以上の任意の整数とする。
【0091】
次に、モンゴメリ演算器群20(図3)は、初期値として、0から(M−1)までの整数jに関して、m mod Nを計算する(ステップS2)。本実施形態では、M個のモンゴメリ演算器20−(0)〜20−(M−1)を用いて並列処理を行う場合について説明するが、逐次処理を行うようにしてもよい。
【0092】
モンゴメリ演算器20−(0)はm mod Nを計算し、モンゴメリ演算器20−(1)はm mod Nを計算し、・・・、モンゴメリ演算器20−(M−1)はmM−1 mod Nを計算する。モンゴメリ演算器20−(0)で計算された値をX(0)とし、モンゴメリ演算器20−(1)で計算された値をX(1)とし、・・・、モンゴメリ演算器20−(M−1)で計算された値をX(M−1)とする。
【0093】
べき乗指数kのビット数が処理ビット幅pで割り切れるように、べき乗指数制御部6(図2)は、べき乗指数kのMSB側に0をパディングする(ステップS3)。パディング後のべき乗指数をk1とする。
【0094】
べき乗指数制御部6は、ステップS3で補正されたべき乗指数k1のビット数を処理ビット幅pで割った商を処理回数qとする(ステップS4)。べき乗指数制御部6は、処理回数qを剰余演算部4に出力する。
【0095】
ステップS5以降の演算は、次の原理に基づく。
【0096】
べき乗指数k1をpビット単位でq個に分割して得られた各ビット列を、演算用べき乗指数fを用いて、f(q−1),f(q−2),・・・,f(1),f(0)とし、べき乗の演算を^で表すと、mを式(5)によって表すことができる。
【0097】

【0098】
また、剰余演算においては以下の式が成り立つ。すなわち、整数C、D、F、べき乗剰余演算の法Nがあるとき、以下の式(6)、(7)が成立する。
【0099】

【0100】

【0101】
したがって、式(5)〜(7)より、m mod Nの演算は、式(8)のように変更することができる。
【0102】

(8)
【0103】
べき乗指数制御部6は、べき乗指数k1の上位からpビットを、演算用べき乗指数fとして取り出し、剰余演算部4に出力する(ステップS5)。
【0104】
べき乗指数制御部6は、ステップS4で求めた処理回数qを剰余演算部4に出力する(ステップS6)。剰余演算部4は、初期値として、q−1をレジスタ30にセットする。
【0105】
セレクタ10は、演算用べき乗指数fにより、モンゴメリ演算器群20内のモンゴメリ演算器20−(0),20−(1),・・・,20−(M−1)からのモンゴメリ演算器群出力X(f)を選択し、乗算器40に出力する(ステップS7)。このときのモンゴメリ演算器群出力X(f)の値は、X(0)〜X(2−1)のいずれかとなる。
【0106】
乗算器40は、モンゴメリ演算器群出力X(f)を受けて、(X(f))を計算し、出力Tとして出力する。
【0107】
剰余演算器21は、乗算器40の出力T、および、べき乗剰余演算の法Nを受けて、初期値としてT mod Nを計算する(ステップS8a)。
【0108】
乗算器40は、剰余演算器21の出力Uを受けて、Uを計算し、計算結果を出力Tとして剰余演算器21に出力する(ステップS8b)。
【0109】
剰余演算器21は、出力Tを受けて、T mod Nを計算する(ステップS8c)。
【0110】
剰余演算器21によるT mod Nの計算がp回繰り返されたか否かを判定する(ステップS8d)。p回繰り返されていない場合には(ステップS8dのNo)、ステップS8bおよびS8cにおける処理を繰り返す。
【0111】
ステップS8a〜S8dの処理により、べき乗指数k1の最初のpビット分をべき乗指数とし、Nを法とする、被べき乗数mに対するべき乗剰余演算が完了する。
【0112】
べき乗指数制御部6は、べき乗指数k1を、pビット分だけMSB側にシフトし、これを新たなべき乗指数k1とする(ステップS9)。
【0113】
べき乗指数制御部6は、ステップS9で更新されたべき乗指数k1のMSBからpビットを取り出し、演算用べき乗指数fとして剰余演算部4に出力する(ステップS10)。
【0114】
次に、レジスタ30に格納されたループカウンタhを1だけ減ずる。ループカウンタhは、最初(q−1)であるが、以後1ずつ減算されていく。減算された新たなループカウンタhに対して、演算器40は、モンゴメリ演算器群20のモンゴメリ演算器20−(0),20−(1),・・・,20−(M−1)からセレクタ11で選択した新たなX(f)の値、すなわち、X(0)〜X(2−1)のいずれかと、ステップS8d実行後の剰余演算器21の出力Uとを受け、これらを乗じた結果として新たに得られた出力Tを剰余演算器21に出力する。剰余演算器21は、出力Tを受けて、べき乗剰余演算の法Nによる剰余演算を行う(ステップS11)。
【0115】
ループカウンタhの値により終了判定を行う(ステップS12)。ループカウンタh≠0の場合、すなわち、べき乗指数k1について分割した演算が完了していない場合には(ステップS12のNo)、ステップS8aに戻り、ステップS8a〜S11を繰返す。
【0116】
一方、ループカウンタh=0の場合には(ステップS12のYes)、処理を終了する。このとき、セレクタ11は、最終的な演算結果を出力する。
【0117】
以上の処理により、剰余演算部4の出力としてm mod Nが得られる。
【0118】
ステップS1で生成する分割数pを、乱数生成器5の出力値とすることにより、同一の暗号鍵およびメッセージを入力した演算であっても、毎回、分割数を変えることができ、演算内容および中間処置の値が異なるものになる。すなわち、毎回、消費電力波形を異なるものとすることができる。
【0119】
本実施形態では、モンゴメリ演算器群20として、M個のモンゴメリ演算器20−(0)〜20−(M−1)を設ける構成について説明した。一方、モンゴメリ演算器群20を設ける代わりに、モンゴメリ演算の結果を予めレジスタまたはメモリ領域に格納するようにした構成を採用することもできる。
【0120】
本実施形態にかかるべき乗剰余演算装置は、べき乗剰余演算において、まず、乱数生成器により、動的に処理ビット幅p生成する。処理ビット幅pの最大値をrとするとき、モンゴメリ演算器により、0から(2−1)までの整数jに関して、m mod Nの演算結果を求めておき、べき乗指数kを処理するたびに、べき乗指数制御部により決定した処理回数q回の演算に分割し、当該回数に分割された演算用べき乗指数fに応じた前記モンゴメリ演算器によるm mod Nの演算結果を選択し、選択した演算結果を基に乗算器および剰余演算器を用いてべき乗剰余演算を行わせる処理を、q回繰り返す。
【0121】
処理のたびに演算の分割数を可変とすることで、同一の暗号鍵、すなわち同一のべき乗指数kおよびべき乗剰余演算の法Nを用いた処理であっても、毎回異なる処理フローとすることができ、結果として処理のたびに異なる消費電力波形とすることができる。
【0122】
本実施形態によると、電力解析に関する耐タンパー性が向上する。なぜなら、本実施形態によると、処理の分割数を演算のたびに変更させるため、同一の暗号鍵を用いた演算を行っても、毎回異なる処理フローとすることができ、統計的手法を用いて、消費電力波形から暗号鍵を解析することが困難となるからである。
【0123】
また、本実施形態によると、処理時間解析に関する耐タンパー性も向上する。なぜなら、本実施形態によると、処理の分割数を演算のたびに変更させるため、同一の暗号鍵を用いた演算を行っても、毎回異なる処理フロー、すなわち異なる処理時間とすることができ、統計的手法を用いて、処理時間から暗号鍵を解析することが困難となるからである。
【0124】
なお、上記の特許文献の各開示を、本書に引用をもって繰り込むものとする。本発明の全開示(請求の範囲を含む)の枠内において、さらにその基本的技術思想に基づいて、実施形態の変更・調整が可能である。また、本発明の請求の範囲の枠内において種々の開示要素の多様な組み合わせないし選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。
【符号の説明】
【0125】
1,101 べき乗剰余演算装置
4 剰余演算部
5 乱数生成器
6 べき乗指数制御部
7 一時データ
8 演算部
10,11 セレクタ
13 暗号鍵保持部
14 一時データ保持部
20 モンゴメリ演算器群
20−(0),20−(1),・・・,20−(M−1) モンゴメリ演算器
21 剰余演算器
30 レジスタ
40 乗算器
102 制御部
103 ROM
104 RAM
105 事前計算テーブル
106 剰余乗算ユニット
f 演算用べき乗指数
h ループカウンタ
k べき乗指数
m 被べき乗数
N べき乗剰余演算の法
p 処理ビット幅
q 処理回数
T 演算結果
U 剰余演算器21の出力
X(f) モンゴメリ演算器群出力

【特許請求の範囲】
【請求項1】
べき乗指数kとべき乗剰余演算の法Nを保持する暗号鍵保持部と、
前記べき乗指数kを分割する単位として、2以上の整数の乱数である処理ビット幅pを生成する乱数生成器と、
前記処理ビット幅pおよび前記べき乗指数kを用いて処理回数qを計算し、演算用べき乗指数fを生成するべき乗指数制御部と、
前記処理回数q、前記演算用べき乗指数f、および前記べき乗剰余演算の法Nを用いてm mod Nを算出する剰余演算部と、を備えていることを特徴とするべき乗剰余演算装置。
【請求項2】
前記べき乗指数制御部は、前記べき乗指数kを前記処理ビット幅pで割った商を処理回数qとし、前記べき乗指数kのMSB(Most Significant Bit)からpビット分を演算用べき乗指数fとして取り出すことを特徴とする、請求項1に記載のべき乗剰余演算装置。
【請求項3】
前記乱数生成器は、べき乗剰余演算を行なう度に、前記処理ビット幅pを生成することを特徴とする、請求項1または2に記載のべき乗剰余演算装置。
【請求項4】
べき乗剰余算の途中結果を含む一時的なデータを格納する一時データ保持部をさらに備えていることを特徴とする、請求項1ないし3のいずれか1項に記載のべき乗剰余演算装置。
【請求項5】
前記剰余演算部は、処理ビット幅pの最大値をrとして、2個のモンゴメリ演算器と、
前記2個のモンゴメリ演算器の演算結果から、前記べき乗指数制御部で生成する演算用べき乗指数fに対応する演算結果を選択する第1のセレクタと、
前記処理回数qを保持するレジスタと、
乗算器と、
剰余演算結果Uを出力する剰余演算器と、
剰余演算結果または固定値を選択する第2のセレクタと、を備えていることを特徴とする、請求項1ないし4のいずれか1項に記載のべき乗剰余演算装置。
【請求項6】
前記2個のモンゴメリ演算器は、それぞれ、前記乱数生成器で生成する処理ビット幅pの最大値をrとした場合、あらかじめ、0から(2−1)までの整数jに関して、m mod Nを計算した結果を保持することを特徴とする、請求項5に記載のべき乗剰余演算装置。
【請求項7】
前記第1のセレクタは、前記べき乗指数制御部で生成する演算用べき乗指数fに対し、前記モンゴメリ演算器の演算結果からm mod Nを選択し、当該選択結果を前記乗算器に出力することを特徴とする、請求項5または6に記載のべき乗剰余演算装置。
【請求項8】
前記レジスタは、q−1から0までの整数をループカウンタhとして順次出力することを特徴とする、請求項5ないし7のいずれか1項に記載のべき乗剰余演算装置。
【請求項9】
前記乗算器は、前記乱数生成器から出力された処理ビット幅p、および前記べき乗指数制御部から出力された処理回数qを用いて、前記第1のセレクタの出力X(f)の2乗を前記剰余演算器に出力し、前記剰余演算器の出力Uの2乗をp−1回計算して前記剰余演算器に出力し、前記第1のセレクタの出力X(f)と前記剰余演算器の出力Uの積の2乗を前記剰余演算器に出力し、前記剰余演算器の出力Uの2乗をp−1回計算して前記剰余演算器に出力する処理をq−2回繰り返すことを特徴とする、請求項5ないし8のいずれか1項に記載のべき乗剰余演算装置。
【請求項10】
前記剰余演算器は、前記乗算器出力Tとべき乗剰余演算の法Nに対し、T mod Nを計算して前記乗算器に出力することを特徴とする、請求項5ないし9のいずれか1項に記載のべき乗剰余演算装置。
【請求項11】
前記第2のセレクタは、前記ループカウンタhの値により、前記剰余演算器出力Uまたは固定値のいずれかを選択し、選択結果を外部に出力することを特徴とする、請求項5ないし10のいずれか1項に記載のべき乗剰余演算装置。
【請求項12】
コンピュータが、記憶部に記録されたべき乗指数kを分割する単位として、2以上の整数の乱数である処理ビット幅pを生成する工程と、
前記処理ビット幅pおよび前記べき乗指数kを用いて処理回数qを計算し、演算用べき乗指数fを生成する工程と、
前記処理回数q、前記演算用べき乗指数f、および前記記憶部に記録されたべき乗剰余演算の法Nを用いてm mod Nを算出する工程と、を含むことを特徴とするべき乗剰余演算方法。
【請求項13】
前記演算用べき乗指数生成工程において、前記べき乗指数kを前記処理ビット幅pで割った商を処理回数qとし、前記べき乗指数kのMSB(Most Significant Bit)からpビット分を演算用べき乗指数fとして取り出すことを特徴とする、請求項12に記載のべき乗剰余演算方法。
【請求項14】
記憶部に記録されたべき乗指数kを分割する単位として、2以上の整数の乱数である処理ビット幅pを生成する処理と、
前記処理ビット幅pおよび前記べき乗指数kを用いて処理回数qを計算し、演算用べき乗指数fを生成する処理と、
前記処理回数q、前記演算用べき乗指数f、および前記記憶部に記録されたべき乗剰余演算の法Nを用いてm mod Nを算出する処理と、をコンピュータに実行させることを特徴とするプログラム。
【請求項15】
前記演算用べき乗指数生成処理において、前記べき乗指数kを前記処理ビット幅pで割った商を処理回数qとし、前記べき乗指数kのMSB(Most Significant Bit)からpビット分を演算用べき乗指数fとして取り出すことを特徴とする、請求項14に記載のプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate


【公開番号】特開2012−47941(P2012−47941A)
【公開日】平成24年3月8日(2012.3.8)
【国際特許分類】
【出願番号】特願2010−189438(P2010−189438)
【出願日】平成22年8月26日(2010.8.26)
【出願人】(302062931)ルネサスエレクトロニクス株式会社 (8,021)
【Fターム(参考)】