以下、実施形態を図面を用いて説明する。
図1は、演算回路および演算回路の制御方法の一実施形態を示している。この実施形態の演算回路10は、例えば、公開鍵暗号を利用した暗号装置や認証装置に搭載される。例えば、公開鍵暗号は、RSA(Rivest Shamir Adleman)暗号、楕円曲線暗号、DSA(Digital Signature Algorithm)等に使用される。
演算回路10は、例えば、与えられた入力値に対する所定の処理(例えば、公開鍵暗号に関する処理)を実行する。例えば、演算回路10は、データDINを受け、データDINに対する所定の処理を実行する。そして、演算回路10は、所定の処理の結果であるデータDOUTを外部に出力する。ここで、所定の処理に含まれる演算の1つは、例えば、乗算剰余演算である。例えば、演算回路10は、モンゴメリ乗算を用いて乗算剰余演算を高速に実行する。nビットで表される奇数Nを法とし、nビットの入力値A、Bに対するモンゴメリ乗算REDC(A,B,N)は、2のn乗をRとした場合、式(1)で表される。
REDC(A,B,N)=(A・B・R−1)modN ‥(1)
なお、式(1)のmodは、剰余演算子である。また、式(1)のR−1は、素数Nを法とする素体における整数Rの逆元を表している。以下、素数Nを法とする素体における任意の整数Xの逆元を、X−1と表す。すなわち、X−1は、X・X−1≡1modNを満たす数である。
また、例えば、演算回路10は、モンゴメリ乗算を用いて乗算剰余演算を高速化するために、モンゴメリ乗算の計算対象となるデータをモンゴメリ形式に変換する。例えば、演算回路10は、値Aを計算過程で使用する場合、モンゴメリ乗算の実行に先立って、値Aを、“(A・R)modN”のモンゴメリ形式に変換する。以下、値Aをモンゴメリ形式“(A・R)modN”に変換する処理を、モンゴメリ変換とも称し、モンゴメリ形式“(A・R)modN”から値Aを求める処理を、モンゴメリ逆変換とも称する。モンゴメリ変換は、例えば、R2modNで表されるモンゴメリ変換パラメータを用いて、実行される。
例えば、モンゴメリ変換では、式(2)および式(3)に示すように、値Aとモンゴメリ変換パラメータとのモンゴメリ乗算を実行することにより、値Aのモンゴメリ形式が算出される。
REDC(A,R2modN,N)=(A・R2・R−1)modN ‥(2)
(A・R2・R−1)modN=(A・R)modN ‥(3)
また、例えば、モンゴメリ逆変換では、式(4)および式(5)に示すように、1とのモンゴメリ乗算を実行することにより、モンゴメリ形式から値Aを求めることができる。
REDC((A・R)modN,1,N)=(A・R・1・R−1)modN‥(4)
(A・R・1・R−1)modN=AmodN ‥(5)
演算回路10は、例えば、選択部110、モンゴメリ乗算回路120、選択部130、逆元演算回路140および分岐部150を有している。
選択部110は、モンゴメリ乗算回路120の入力端子IN1、IN2に与えるデータを選択する第1選択部の一例である。例えば、選択部110は、モンゴメリ変換パラメータを算出する算出期間に、入力端子IN1、IN2に1を与え、モンゴメリ乗算回路120の演算結果である第1結果“R−1modN”を入力端子IN1にフィードバックする。そして、選択部110は、所定の処理に含まれる演算が実行される演算期間に、所定の処理に含まれる演算用のデータDA10、DA12を入力端子IN1、IN2に与える。
ここで、データDA10、DA12は、例えば、所定の処理の過程でモンゴメリ乗算回路120により使用されるデータである。また、データDA20は、例えば、所定の処理の過程で逆元演算回路140により使用されるデータである。そして、データDA14、DA30は、例えば、所定の処理の過程で、モンゴメリ乗算回路120、逆元演算回路140等により使用されるデータである。あるいは、データDA14、DA30は、例えば、データDOUT(所定の処理の結果)として、演算回路10から出力される場合もある。
モンゴメリ乗算回路120は、入力端子IN1、IN2で受けた整数に対するモンゴメリ乗算を実行する。例えば、モンゴメリ乗算回路120は、nビットの入力値A、Bを入力端子IN1、IN2で受けた場合、演算結果“(A・B・R−1)modN”を出力する。モンゴメリ乗算回路120の演算結果は、選択部110、130等に出力される。
選択部130は、逆元演算回路140に与えるデータを選択する第2選択部の一例である。例えば、選択部130は、モンゴメリ変換パラメータを算出する算出期間に、第1結果“R−1modN”がフィードバックされたモンゴメリ乗算回路120の演算結果である第2結果“R−2modN”を、逆元演算回路140に与える。そして、選択部130は、所定の処理の演算期間に、所定の処理に含まれる演算用のデータDA20を逆元演算回路140に与える。
逆元演算回路140は、与えられた整数に対して、素数Nを法とする素体における逆元を計算する。そして、逆元演算回路140は、例えば、演算結果(与えられた整数の逆元)を分岐部150に出力する。
分岐部150は、逆元演算回路140の演算結果の用途を選択する第3選択部の一例である。例えば、分岐部150は、モンゴメリ変換パラメータを算出する算出期間に、第2結果“R−2modN”を受けた逆元演算回路140の演算結果“R2modN”を、モンゴメリ変換パラメータとして出力する。そして、分岐部150は、所定の処理の演算期間に、データDA20を受けた逆元演算回路140の演算結果を、所定の処理に含まれる演算用のデータDA30として出力する。
このように、演算回路10は、所定の処理で使用されるモンゴメリ乗算回路120および逆元演算回路140を利用して、モンゴメリ変換パラメータを算出する。したがって、この実施形態では、モンゴメリ変換パラメータを算出する専用の演算回路(例えば、多倍長データを処理可能な減算回路や1ビット左シフト回路等)を追加することなく、モンゴメリ変換パラメータを演算回路10内で算出できる。すなわち、この実施形態では、演算回路10の面積の増加を抑制しつつ、モンゴメリ変換パラメータを演算回路10内で算出できる。
なお、ソフトウエアで計算されたモンゴメリ変換パラメータが演算回路に与えられる構成では、演算回路を使用するプロセッサは、多倍長整数演算(例えば、減算処理や1ビット左シフト処理等)を繰り返して、モンゴメリ変換パラメータを計算する。この際、プロセッサは、多倍長データ処理のため、キャリーやボローの発生の検出、上位ワードの計算への反映処理等も実行する。このため、モンゴメリ変換パラメータをソフトウエアで計算する方法では、プロセッサの負荷が増加する。
これに対し、この実施形態では、モンゴメリ変換パラメータを計算するソフトウエアを用いずに、モンゴメリ変換パラメータを演算回路10で算出できる。このため、この実施形態では、演算回路10を使用するプロセッサの負荷を低減できる。さらに、この実施形態では、モンゴメリ変換パラメータを計算するソフトウエアを格納するためのメモリ領域を省くことができ、ユーザシステムのメモリリソースを有効に利用できる。また、この実施形態では、モンゴメリ変換パラメータを計算するソフトウエアの作成等を省くことができるため、開発工程におけるユーザの負担を低減できる。
なお、演算回路10の構成は、この例に限定されない。例えば、演算回路10は、データDIN、DA10、DA12、DA14、DA20、DA30等を保持するワークメモリを有してもよい。あるいは、演算回路10は、モンゴメリ乗算回路120の演算結果“R−1modN”等を、ワークメモリを介してモンゴメリ乗算回路120にフィードバックしてもよい。例えば、モンゴメリ乗算回路120は、演算結果“R−1modN”をワークメモリの所定のアドレスに格納してもよい。そして、選択部110は、ワークメモリの所定のアドレス(演算結果“R−1modN”が格納されているアドレス)から演算結果“R−1modN”を読み出し、演算結果“R−1modN”をモンゴメリ乗算回路120の入力端子IN1に与えてもよい。
また、演算回路10は、選択部110、130、分岐部150等を制御する制御部を有してもよい。また、演算回路10は、モンゴメリ乗算回路120の出力を分岐させる分岐部を有してもよい。
図2は、図1に示した演算回路10の動作の一例を示している。すなわち、図2は、演算回路10の制御方法の一例を示している。図2の動作を実現するための制御は、ハードウエアにより実行されてもよいし、ソフトウエアにより実行されてもよい。ステップS100−S160は、例えば、モンゴメリ変換パラメータを算出する算出期間での動作に対応している。また、ステップS200−S220は、所定の処理に含まれる演算が実行される演算期間での動作に対応している。
ステップS100では、選択部110は、固定値“1”をモンゴメリ乗算回路120の入力端子IN1、IN2に供給する。
ステップS110では、モンゴメリ乗算回路120は、ステップS100で入力端子IN1、IN2に与えられた値“1”に対するモンゴメリ乗算を実行する。これにより、モンゴメリ乗算の結果である“R−1modN”がモンゴメリ乗算回路120から選択部110等に出力される。
ステップS120では、選択部110は、ステップS110でのモンゴメリ乗算回路120の演算結果“R−1modN”を、モンゴメリ乗算回路120の入力端子IN1にフィードバックする。なお、選択部110は、モンゴメリ乗算回路120の入力端子IN2には、固定値“1”を供給している。
ステップS130では、モンゴメリ乗算回路120は、ステップS120で入力端子IN1、IN2に与えられた値“R−1modN”、“1”に対するモンゴメリ乗算を実行する。これにより、モンゴメリ乗算の結果である“R−2modN”がモンゴメリ乗算回路120から選択部130等に出力される。
ステップS140では、選択部130は、ステップS130でのモンゴメリ乗算回路120の演算結果“R−2modN”を、逆元演算回路140に供給する。
ステップS150では、逆元演算回路140は、逆元演算を実行する。例えば、逆元演算回路140は、ステップS140で与えられた値“R−2modN”の逆元を計算する。これにより、“R−2modN”の逆元である“R2modN”が算出される。したがって、逆元演算回路140の演算結果“R2modN”が、逆元演算回路140から分岐部150に出力される。
ステップS160では、分岐部150は、ステップS150での逆元演算回路140の演算結果“R2modN”を、モンゴメリ変換パラメータに設定する。例えば、分岐部150は、ステップS150での逆元演算回路140の演算結果“R2modN”を、モンゴメリ変換パラメータとして出力する。例えば、演算回路10は、分岐部150から出力された“R2modN”をモンゴメリ変換パラメータとして保持する。
このように、ステップS100−S160の処理(モンゴメリ変換パラメータを算出する算出期間での動作)により、モンゴメリ変換パラメータが計算される。そして、モンゴメリ変換パラメータが計算された後、ステップS200−S220の処理(所定の処理に含まれる演算が実行される演算期間での動作)が実行される。
ステップS200では、選択部110は、データDA10、DA12をモンゴメリ乗算回路120の入力端子IN1、IN2に供給する。例えば、選択部110は、モンゴメリ乗算回路120の入力元として、データDA10、DA12の経路を選択する。なお、データDA10、DA12は、例えば、ステップS100−S160の処理で算出されたモンゴメリ変換パラメータを用いたモンゴメリ変換により、モンゴメリ形式に変換されたデータである。
ステップS210では、選択部130は、データDA20(例えば、値“Z”)を、逆元演算回路140に供給する。例えば、選択部130は、逆元演算回路140の入力元として、データDA20の経路を選択する。
ステップS220では、分岐部150は、逆元演算回路140の演算結果(例えば、“Z−1modN”)を、データDA30の経路に出力する。すなわち、分岐部150は、逆元演算回路140の演算結果(例えば、“Z−1modN”)を、データDA30として出力する。このように、分岐部150は、例えば、逆元演算回路140の出力先として、データDA30の経路を選択する。
なお、選択部110、130および分岐部150は、例えば、所定の処理に含まれる演算が実行される演算期間では、所定の処理に含まれる演算用のデータDA10、DA12、DA20、DA30の経路を選択した状態を維持する。これにより、この実施形態では、所定の処理に含まれる演算が終了するまで、所定の処理の過程で使用されるデータを、モンゴメリ乗算回路120、逆元演算回路140等に対して入出力できる。
また、演算回路10の動作は、この例に限定されない。例えば、ステップS200は、ステップS220の後に実行されてもよい。すなわち、選択部110、130および分岐部150は、モンゴメリ変換パラメータの計算が終了した後、所定の処理に含まれる演算が終了するまで、所定の処理に含まれる演算用のデータDA10、DA12、DA20、DA30の経路を選択した状態を維持していればよい。
以上、図1および図2に示した実施形態の演算回路10および演算回路10の制御方法は、与えられた入力値に対する所定の処理を実行する前に、モンゴメリ変換パラメータを計算する。例えば、選択部110は、モンゴメリ変換パラメータを算出する算出期間に、モンゴメリ乗算回路120の入力端子IN1、IN2に1を与え、モンゴメリ乗算回路120の演算結果“R−1modN”を入力端子IN1にフィードバックする。また、例えば、選択部130は、算出期間に、値“R−1modN”、“1”に対するモンゴメリ乗算回路120の演算結果“R−2modN”を逆元演算回路140に与える。そして、分岐部150は、算出期間に、逆元演算回路140の演算結果“R2modN”をモンゴメリ変換パラメータとして出力する。
なお、選択部110、130および分岐部150は、例えば、所定の処理に含まれる演算が実行される演算期間では、所定の処理に含まれる演算用のデータDA10、DA12、DA20、DA30の経路を選択した状態を維持する。これにより、この実施形態では、所定の処理に含まれる演算が終了するまで、所定の処理の過程で使用されるデータを、モンゴメリ乗算回路120、逆元演算回路140等に対して入出力できる。すなわち、演算回路10は、所定の処理で使用されるモンゴメリ乗算回路120および逆元演算回路140を利用して、モンゴメリ変換パラメータを算出する。
このように、この実施形態では、演算回路10の面積の増加を抑制しつつ、モンゴメリ変換パラメータを演算回路10内で算出できる。例えば、この実施形態では、モンゴメリ変換パラメータを計算するための専用の演算回路またはプログラムを要することなく、モンゴメリ変換パラメータを算出できる。これにより、この実施形態では、演算回路10の回路規模の削減、または、演算回路10を使用するプロセッサの負荷の低減を実現できる。
図3は、演算回路および演算回路の制御方法の別の実施形態を示している。この実施形態の演算回路10Aは、例えば、公開鍵暗号を利用した暗号装置や認証装置に搭載される。例えば、演算回路10Aは、楕円曲線暗号のスカラー倍算を実行するスカラー倍算演算回路である。以下、演算回路10Aがスカラー倍算演算回路であるとして説明する。なお、演算回路10Aの用途は、スカラー倍算演算回路に限定されない。
図1および図2で説明した要素と同様の要素については、同様の符号を付し、これ等については、詳細な説明を省略する。例えば、図3に示した選択部110、モンゴメリ乗算回路120、選択部130、逆元演算回路140および分岐部150は、図1に示した選択部110、モンゴメリ乗算回路120、選択部130、逆元演算回路140および分岐部150と同様である。また、例えば、データDA10、DA12、DA14、DA20、DA30の意味は、図1と同様である。なお、図3では、図を見やすくするために、制御部30、70の指示経路等の記載を省略している。
演算回路10Aは、例えば、データK、DIN、a、Nを受け、楕円曲線暗号のスカラー倍算を実行する。そして、演算回路10A、楕円曲線暗号のスカラー倍算の結果であるデータDOUTを出力する。例えば、データKは、楕円曲線暗号のスカラー倍算におけるスカラーを示している。以下、データKを係数Kとも称する。データDINは、素数Nを法とする素体上で定義される楕円曲線“y2=x3+a・x+b”上の点(X0,Y0)を示している。以下、点(X0,Y0)を入力値(X0,Y0)とも称する。データaは、楕円曲線のパラメータの1つである。データNは、楕円曲線の定義体の法となる素数である。データDOUTは、入力値(X0,Y0)をK倍した値(Xk,Yk)を示している。以下、値(Xk,Yk)を演算結果(Xk,Yk)とも称する。
例えば、演算回路10Aは、レジスタ20、制御部30、分岐部40、選択部50、演算部60、選択部130、逆元演算回路140および分岐部150を有している。また、演算部60は、制御部70、加減算回路80、ワークメモリ90、分岐部100、選択部110およびモンゴメリ乗算回路120を有している。例えば、演算回路10Aは、楕円曲線暗号の加算等を繰り返すことにより、楕円曲線暗号のスカラー倍算を実行する。
レジスタ20は、演算回路10Aが受けたデータKを、格納する。制御部30は、例えば、分岐部100、選択部110、モンゴメリ乗算回路120、選択部130、逆元演算回路140、分岐部150等を制御して、モンゴメリ変換パラメータを算出する。そして、制御部30は、例えば、分岐部40、選択部50、演算部60等を制御して、楕円曲線暗号のスカラー倍算を実行する。
分岐部40は、例えば、演算部60の演算結果(Xi,Yi)を、演算部60の端子P3から受ける。そして、分岐部40は、演算部60の演算結果(Xi,Yi)を演算部60にフィードバックするか、演算部60の演算結果(Xi,Yi)を演算回路10Aの演算結果(Xk,Yk)として出力するかを選択する。
選択部50は、演算部60の端子P1に与えるデータを選択する。以下、端子P1で受けたデータの値を入力値(Xa,Ya)や値(Xa,Ya)とも称する。例えば、選択部50は、演算部60で繰り返し実行される演算の1回目の演算では、演算部60の入力値(Xa,Ya)として、入力値(X0,Y0)を選択する。そして、2回目以降の演算では、選択部50は、分岐部40を介してフィードバックされる演算結果(Xi,Yi)を、入力値(Xa,Ya)として選択する。
演算部60は、例えば、楕円曲線暗号の加算等を実現する回路の一部である。例えば、演算部60および逆元演算回路140を含む回路は、楕円曲線暗号の加算等を実行する。演算部60は、例えば、楕円曲線暗号の加算等を繰り返し実行する。例えば、演算部60は、1回目の演算では、入力値(X0,Y0)を入力値(Xa,Ya)として選択部50から受け、2回目以降の演算では、前回の演算結果(Xi,Yi)を入力値(Xa,Ya)として選択部50から受ける。また、演算部60は、例えば、データDIN(入力値(X0,Y0))を、端子P2で受ける。以下、端子P2で受けたデータの値を入力値(Xb,Yb)や値(Xb,Yb)とも称する。
さらに、演算部60は、1回目の演算を実行する前に、楕円曲線暗号の加算等の演算に使用するデータa、N、モンゴメリ変換パラメータ“R2modN”を、端子P8、P9、P7でそれぞれ受ける。例えば、演算部60は、1回目の演算を実行する前に算出したモンゴメリ変換パラメータ“R2modN”を、分岐部150から受ける。また、演算部60は、例えば、逆元を使用する演算では、逆元の算出対象であるデータDA20を端子P4から選択部130に出力する。そして、演算部60は、例えば、データDA20の逆元を示すデータDA30を、分岐部150から受ける。
制御部70は、例えば、加減算回路80、ワークメモリ90、モンゴメリ乗算回路120および逆元演算回路140等を制御して、楕円曲線暗号の加算等を実行する。
加減算回路80は、制御部70の指示に応じて、整数加算あるいは整数減算を実行する。例えば、加減算回路80は、ワークメモリ90から受けたデータに対して、整数加算あるいは整数減算を実行する。そして、加減算回路80は、演算結果をワークメモリ90に格納する。
ワークメモリ90は、例えば、楕円曲線暗号の加算等の演算過程でモンゴメリ乗算回路120や加減算回路80により使用されるデータ(データDA10、DA12、DA14等)を格納する。なお、ワークメモリ90は、データDA20、DA30を格納してもよい。また、ワークメモリ90は、モンゴメリ変換パラメータ“R2modN”を、格納してもよい。
分岐部100は、モンゴメリ乗算回路120の演算結果を、モンゴメリ乗算回路120から受ける。そして、分岐部100は、モンゴメリ乗算回路120の演算結果をモンゴメリ乗算回路120にフィードバックするか、モンゴメリ乗算回路120の演算結果を選択部130に出力するか、モンゴメリ乗算回路120の演算結果をワークメモリ90に格納するかを選択する。
例えば、分岐部100は、モンゴメリ変換パラメータを算出する算出期間において、モンゴメリ乗算回路120の演算結果“R−1modN”を、選択部110に出力する。そして、分岐部100は、演算結果“R−1modN”がフィードバックされたモンゴメリ乗算回路120の演算結果“R−2modN”を、端子P5から選択部130に出力する。また、例えば、分岐部100は、楕円曲線暗号の加算等の演算が実行されている演算期間では、モンゴメリ乗算回路120の演算結果であるデータD14を、ワークメモリ90に格納する。
選択部110は、例えば、セレクタ110a、110b、110cを有している。例えば、セレクタ110a、110bは、モンゴメリ乗算回路120の入力端子IN1に与えるデータを選択する。セレクタ110aは、固定値“1”と、分岐部100から受ける演算結果“R−1modN”とのいずれかを、セレクタ110bに出力する。
例えば、セレクタ110aは、モンゴメリ変換パラメータを算出する算出期間において、先ず、固定値“1”をセレクタ110bに出力する。そして、セレクタ110aは、モンゴメリ乗算回路120の演算結果“R−1modN”をフィードバックするとき、分岐部100から受ける演算結果“R−1modN”を、セレクタ110bに出力する。
セレクタ110bは、例えば、セレクタ110aで選択されたデータと、ワークメモリ90に格納されているデータDA10とを受ける。そして、セレクタ110bは、セレクタ110aで選択されたデータとデータDA10とのいずれかを、モンゴメリ乗算回路120の入力端子IN1に出力する。
例えば、セレクタ110bは、モンゴメリ変換パラメータを算出する算出期間では、セレクタ110aから受けるデータを入力端子IN1に出力する。また、セレクタ110bは、楕円曲線暗号の加算等の演算が実行されている演算期間では、ワークメモリ90から受けるデータDA10を入力端子IN1に出力する。
セレクタ110cは、モンゴメリ乗算回路120の入力端子IN2に与えるデータを選択する。例えば、セレクタ110cは、固定値“1”と、ワークメモリ90に格納されているデータDA12とを受ける。そして、セレクタ110cは、固定値“1”とデータDA12とのいずれかを、モンゴメリ乗算回路120の入力端子IN2に出力する。例えば、セレクタ110cは、モンゴメリ変換パラメータを算出する算出期間では、固定値“1”を入力端子IN2に出力する。また、セレクタ110cは、楕円曲線暗号の加算等の演算が実行されている演算期間では、ワークメモリ90から受けるデータDA12を入力端子IN2に出力する。
モンゴメリ乗算回路120は、入力端子IN1、IN2で受けた整数に対するモンゴメリ乗算を実行し、演算結果を分岐部100に出力する。
選択部130は、演算部60から受けるデータDA20と、分岐部100から受けるモンゴメリ乗算回路120の演算結果“R−2modN”とのいずれかを、逆元演算回路140に出力する。例えば、選択部130は、モンゴメリ変換パラメータを算出する算出期間では、分岐部100から受けるモンゴメリ乗算回路120の演算結果“R−2modN”を、逆元演算回路140に出力する。そして、選択部130は、楕円曲線暗号の加算等の演算が実行されている演算期間では、演算部60から受けるデータDA20を逆元演算回路140に出力する。データDA20は、例えば、楕円曲線暗号の加算等の演算過程で使用されるデータである。
逆元演算回路140は、選択部130から受けたデータの逆元を計算し、演算結果(選択部130から受けたデータの逆元)を分岐部150に出力する。
分岐部150は、逆元演算回路140の演算結果をデータDA30として演算部60に出力するか、逆元演算回路140の演算結果をモンゴメリ変換パラメータとして演算部60に出力するかを選択する。例えば、分岐部150は、モンゴメリ変換パラメータを算出する算出期間では、逆元演算回路140の演算結果“R2modN”を、モンゴメリ変換パラメータとして演算部60の端子P7に出力する。そして、分岐部150は、楕円曲線暗号の加算等の演算が実行されている演算期間では、逆元演算回路140の演算結果(データDA20の逆元)を、データDA30として演算部60の端子P6に出力する。
このように、演算回路10Aは、楕円曲線暗号のスカラー倍算で使用されるモンゴメリ乗算回路120および逆元演算回路140を利用して、モンゴメリ変換パラメータを算出する。したがって、この実施形態では、モンゴメリ変換パラメータを算出する専用の演算回路(例えば、多倍長データを処理可能な減算回路や1ビット左シフト回路等)を追加することなく、モンゴメリ変換パラメータを演算回路10A内で算出できる。すなわち、この実施形態では、演算回路10Aの面積の増加を抑制しつつ、モンゴメリ変換パラメータを演算回路10A内で算出できる。
なお、演算回路10Aの構成は、この例に限定されない。例えば、演算回路10Aは、モンゴメリ乗算回路120の演算結果“R−1modN”を、ワークメモリ90を介してモンゴメリ乗算回路120にフィードバックしてもよい。また、例えば、分岐部100、選択部110、選択部130、分岐部150等は、制御部70に制御されてもよい。すなわち、制御部70は、分岐部100、選択部110、モンゴメリ乗算回路120、選択部130、逆元演算回路140、分岐部150等を制御して、モンゴメリ変換パラメータを算出してもよい。
また、演算部60は、レジスタ20、制御部30、分岐部40、選択部50、選択部130、逆元演算回路140および分岐部150の少なくとも1つを有してもよい。例えば、演算部60は、選択部130、逆元演算回路140および分岐部150を有してもよい。
図4は、楕円曲線暗号の単位元、加算、スカラー倍算の定義の一例を示している。例えば、素数Nを法とする素体上で定義される楕円曲線“y2=x3+a・x+b”上の整数座標を有する2点P=(Xp,Yp)、Q=(Xq,Yq)に対して、図4に示すように、単位元、加算、スカラー倍算が定義される。
単位元Oは、無限遠点と呼ばれる特別な点である。具体的なx座標、y座標は、定義されない。便宜上、単位元Oは、楕円曲線上の点とみなされる。
加算“P+Q”は、5つの場合に分けて定義される。P=Oの場合、加算は、式(6)で与えられる。
P+Q=Q ‥(6)
Q=Oの場合、加算は、式(7)で与えられる。
P+Q=P ‥(7)
Yp=−Yqの場合、加算は、式(8)で与えられる。
P+Q=O ‥(8)
Xp=Xqの場合、加算は、R=(Xr,Yr)を用いて、式(9)で与えられる。なお、Xr、Yrは、式(10)、式(11)、式(12)で与えられる。Xp=Xqの場合の加算は、2倍算と呼ばれている。
P+Q=R ‥(9)
λ=((3・Xp2+a)・(2・Yp)−1)modN ‥(10)
Xr=(λ2−Xp−Xq)modN ‥(11)
Yr=(λ・(Xp−Xr)−Yp)modN ‥(12)
上記の4つ以外の場合、加算は、R=(Xr,Yr)を用いて、式(13)で与えられる。なお、Xr、Yrは、式(14)、式(15)、式(16)で与えられる。
P+Q=R ‥(13)
λ=((Yp−Yq)・(Xp−Xq)−1)modN ‥(14)
Xr=(λ2−Xp−Xq)modN ‥(15)
Yr=(λ・(Xp−Xr)−Yp)modN ‥(16)
スカラー倍算“K・P”は、係数Kが0の場合と係数Kが0より大きい整数の場合とに分けられる。なお、係数Kは、0以上の整数である。係数Kが0の場合(K=0)、スカラー倍算は、式(17)で与えられる。
K・P=O ‥(17)
係数Kが0より大きい整数の場合(K>0の整数の場合)、スカラー倍算は、式(18)に示すように、K個のPを加算する。なお、式(18)で実行される加算は、楕円曲線暗号の加算である。
K・P=P+P+・・・+P+P ‥(18)
このように、楕円曲線暗号を実現する回路では、整数の加減算、乗算剰余演算、逆元演算を実行する回路が実装される。乗算剰余演算を含む処理は、モンゴメリ乗算を用いることにより、高速に処理される。すなわち、この実施形態では、モンゴメリ変換パラメータを算出する専用の演算回路を追加することなく、楕円曲線暗号を実現する回路の一部(モンゴメリ乗算回路120、逆元演算回路140)を利用して、モンゴメリ変換パラメータを算出できる。
図5は、図3に示した演算回路10Aの動作の一例を示している。すなわち、図5は、演算回路10Aの制御方法の一例を示している。なお、図5は、係数Kが2以上の場合の楕円曲線暗号のスカラー倍算を実行する演算回路10Aの動作の一例を示している。図5の動作では、係数Kを処理する際、右向きバイナリ法を用いている。なお、係数Kが1の場合は、演算回路10Aは、入力値(X0,Y0)を、楕円曲線暗号のスカラー倍算の結果として出力する。また、係数Kが0の場合は、演算回路10Aは、単位元Oを、楕円曲線暗号のスカラー倍算の結果として出力する。
図5の動作を実現するための制御は、ハードウエアにより実行されてもよいし、ソフトウエアにより実行されてもよい。ステップS100aは、例えば、モンゴメリ変換パラメータを算出する算出期間での動作に対応している。また、ステップS200a、S210a、S220a、S300−S400は、楕円曲線暗号の加算等の演算が実行されている演算期間での動作に対応している。ステップS200a、S210a、S220aは、分岐部100の動作が追加されたことを除いて、図2で説明したステップS200、S210、S220と同様である。
ステップS100aでは、演算回路10Aは、モンゴメリ変換パラメータを計算する。例えば、演算回路10Aは、図6に示すステップS100−S160の処理を実行して、モンゴメリ変換パラメータを算出する。
ステップS200aでは、制御部30は、例えば、ワークメモリ90の出力(データDA10、DA12の経路)をモンゴメリ乗算回路120の入力端子IN1、IN2に選択部110を介して接続する。これにより、ワークメモリ90から選択部110に転送されるデータDA10、DA12が、モンゴメリ乗算回路120の入力端子IN1、IN2に供給される。
また、ステップS200aでは、制御部30は、例えば、モンゴメリ乗算回路120の出力をワークメモリ90の入力(データDA14の経路)に分岐部100を介して接続する。これにより、モンゴメリ乗算回路120の演算結果(データDA14)がワークメモリ90に格納される。
ステップS210aでは、制御部30は、例えば、演算部60の端子P4を、逆元演算回路140の入力に選択部130を介して接続する。これにより、演算部60から選択部130に転送されるデータDA20(例えば、値“Z”)が、逆元演算回路140に供給される。
ステップS220aでは、制御部30は、例えば、逆元演算回路140の出力を、演算部60の端子P6に分岐部150を介して接続する。これにより、分岐部150に転送される逆元演算回路140の演算結果(例えば、“Z−1modN”)が、データDA30として演算部60に供給される。
ステップS300では、演算回路10Aは、係数Kをレジスタ20にロードする。
ステップS310では、選択部50は、例えば、演算回路10Aが受けた入力値(X0,Y0)を、演算部60の入力値(Xa,Ya)として選択する。例えば、制御部30は、演算回路10Aが受けた入力値(X0,Y0)を、演算部60の端子P1に選択部50を介して供給する。
ステップS320では、演算回路10Aは、演算部60等を制御して、値(Xa,Ya)に対する楕円曲線暗号の2倍算を実行する。
ステップS330では、選択部50は、例えば、演算部60の演算結果(Xi,Yi)を、演算部60の入力値(Xa,Ya)として選択する。例えば、制御部30は、演算部60の端子P3を演算部60の端子P1に、分岐部40および選択部50を介して接続する。
ステップS340では、演算回路10Aは、変数iを1に設定する。変数iは、例えば、レジスタに保持される。
ステップS350では、演算回路10Aは、レジスタ20の左からiビット目が1か否かを判定する。なお、レジスタ20の左から0ビット目は、レジスタ20の最も左のビットである。レジスタ20の左からiビット目が1のとき(ステップS350のYes)、演算回路10Aの動作は、ステップS360に移る。一方、レジスタ20の左からiビット目が1でないとき(ステップS350のNo)、演算回路10Aの動作は、ステップS370に移る。
ステップS360では、演算回路10Aは、演算部60等を制御して、値(Xa,Ya)、(Xb,Yb)に対する楕円曲線暗号の加算を実行する。
ステップS370では、演算回路10Aは、変数iが“k−1”と等しいか否かを判定する。なお、kは、係数Kのビット数(ビット長)である。変数iが“k−1”と等しいとき(ステップS370のYes)、演算回路10Aの動作は、ステップS400に移る。一方、変数iが“k−1”と異なるとき(ステップS370のNo)、演算回路10Aの動作は、ステップS380に移る。
ステップS380では、演算回路10Aは、演算部60等を制御して、値(Xa,Ya)に対する楕円曲線暗号の2倍算を実行する。
ステップS390では、演算回路10Aは、変数iをインクリメントする(i=i+1)。ステップS390の後の演算回路10Aの動作は、ステップS350に戻る。
ステップS400では、演算回路10Aは、演算部60の演算結果(Xi,Yi)を、演算回路10Aの演算結果(Xk,Yk)として出力する。例えば、分岐部40は、演算部60の端子P3から受けた演算結果(Xi,Yi)を、データDOUTとして出力する。これにより、入力値(X0,Y0)をK倍した演算結果(Xk,Yk)が、演算回路10Aから出力される。
なお、演算回路10Aの動作は、この例に限定されない。例えば、ステップS200aは、ステップS220aの後に実行されてもよい。
図6は、図5に示したモンゴメリ変換パラメータの計算処理(図5のステップS100a)の一例を示している。図6の動作は、図2のステップS100−S160に対応している。図2で説明したステップと同様のステップについては、同様の符号を付し、これ等については、詳細な説明を省略する。
ステップS100、S110は、図2のステップS100、S110と同様である。ステップS120a、S120bは、図2のステップS120に対応している。
ステップS120aでは、例えば、分岐部100は、モンゴメリ乗算回路120の演算結果“R−1modN”を、セレクタ110aに出力する。
ステップS120bでは、例えば、選択部110は、モンゴメリ乗算回路120の演算結果“R−1modN”を、モンゴメリ乗算回路120の入力端子IN1にフィードバックする。例えば、選択部110のセレクタ110aは、分岐部100から受けた演算結果“R−1modN”を、セレクタ110bに出力する。そして、セレクタ110bは、セレクタ110aから受けた演算結果“R−1modN”を、モンゴメリ乗算回路120の入力端子IN1に出力する。なお、選択部110は、モンゴメリ乗算回路120の入力端子IN2には、固定値“1”を供給している。
ステップS130は、図2のステップS130と同様である。ステップS140a、S140bは、図2のステップS140に対応している。
ステップS140aでは、例えば、分岐部100は、モンゴメリ乗算回路120の演算結果“R−2modN”を、選択部130に出力する。
ステップS140bでは、選択部130は、分岐部100から受けたモンゴメリ乗算回路120の演算結果“R−2modN”を、逆元演算回路140に供給する。
ステップS150、S160は、図2のステップS150、S160と同様である。例えば、ステップS160では、分岐部150は、モンゴメリ変換パラメータとして、逆元演算回路140の演算結果“R2modN”を演算部60の端子P7に出力する。このように、ステップS100−S160の処理により、モンゴメリ変換パラメータが計算される。
以上、図3から図6に示した実施形態においても、図1および図2に示した実施形態と同様の効果を得ることができる。例えば、この実施形態では、モンゴメリ変換パラメータを算出する専用の演算回路を追加することなく、楕円曲線暗号を実現する回路の一部(モンゴメリ乗算回路120、逆元演算回路140)を利用して、モンゴメリ変換パラメータを算出できる。すなわち、この実施形態においても、演算回路10Aの面積の増加を抑制しつつ、モンゴメリ変換パラメータを演算回路10A内で算出できる。このように、この実施形態においても、モンゴメリ変換パラメータを計算するための専用の演算回路またはプログラムを要することなく、モンゴメリ変換パラメータを算出できる。
図7は、演算回路および演算回路の制御方法の別の実施形態を示している。この実施形態の演算回路12は、図1に示した選択部110および逆元演算回路140の代わりに、選択部112およびモンゴメリ逆元演算回路142を有している。演算回路12のその他の構成は、図1に示した演算回路10と同様である。図1から図6で説明した要素と同様の要素については、同様の符号を付し、これ等については、詳細な説明を省略する。例えば、演算回路12は、公開鍵暗号を利用した暗号装置や認証装置に搭載される。
演算回路12は、例えば、選択部112、モンゴメリ乗算回路120、選択部130、モンゴメリ逆元演算回路142および分岐部150を有している。
選択部112は、モンゴメリ乗算回路120の入力端子IN1、IN2に与えるデータを選択する第1選択部の一例である。例えば、選択部112は、モンゴメリ変換パラメータを算出する算出期間に、入力端子IN1、IN2に1を与える。そして、選択部112は、所定の処理に含まれる演算が実行される演算期間に、所定の処理に含まれる演算用のデータDA10、DA12を入力端子IN1、IN2に与える。
モンゴメリ乗算回路120は、入力端子IN1、IN2で受けた整数に対するモンゴメリ乗算を実行する。例えば、モンゴメリ乗算回路120は、nビットの入力値A、Bを入力端子IN1、IN2で受けた場合、演算結果“(A・B・R−1)modN”を出力する。モンゴメリ乗算回路120の演算結果は、選択部130等に出力される。
選択部130は、モンゴメリ逆元演算回路142に与えるデータを選択する第2選択部の一例である。例えば、選択部130は、モンゴメリ変換パラメータを算出する算出期間に、モンゴメリ乗算回路120の演算結果“R−1modN”を、モンゴメリ逆元演算回路142に与える。そして、選択部130は、所定の処理の演算期間に、所定の処理に含まれる演算用のデータDA20をモンゴメリ逆元演算回路142に与える。
モンゴメリ逆元演算回路142は、与えられた整数(例えば、Z)に対して、素数Nを法とする素体におけるモンゴメリ逆元(例えば、“(Z−1・R)modN”)を計算する。そして、モンゴメリ逆元演算回路142は、例えば、演算結果(与えられた整数のモンゴメリ逆元)を分岐部150に出力する。
分岐部150は、モンゴメリ逆元演算回路142の演算結果の用途を選択する第3選択部の一例である。例えば、分岐部150は、モンゴメリ変換パラメータを算出する算出期間に、演算結果“R−1modN”を受けたモンゴメリ逆元演算回路142の演算結果“R2modN”を、モンゴメリ変換パラメータとして出力する。そして、分岐部150は、所定の処理の演算期間に、データDA20を受けたモンゴメリ逆元演算回路142の演算結果を、所定の処理に含まれる演算用のデータDA30として出力する。
なお、演算回路12の構成は、この例に限定されない。例えば、演算回路12は、データDIN、DA10、DA12、DA14、DA20、DA30等を保持するワークメモリを有してもよい。また、演算回路12は、選択部112、130、分岐部150等を制御する制御部を有してもよい。また、演算回路12は、モンゴメリ乗算回路120の出力を分岐させる分岐部を有してもよい。
図8は、図7に示した演算回路12の動作の一例を示している。すなわち、図8は、演算回路12の制御方法の一例を示している。図8の動作を実現するための制御は、ハードウエアにより実行されてもよいし、ソフトウエアにより実行されてもよい。ステップS100−S162は、例えば、モンゴメリ変換パラメータを算出する算出期間での動作に対応している。また、ステップS200−S222は、所定の処理に含まれる演算が実行される演算期間での動作に対応している。なお、図2で説明したステップと同様のステップについては、同様の符号を付し、これ等については、詳細な説明を省略する。
ステップS100、S110は、図2のステップS100、S110と同様である。
ステップS142では、選択部112は、ステップS110でのモンゴメリ乗算回路120の演算結果“R−1modN”を、モンゴメリ逆元演算回路142に供給する。
ステップS152では、例えば、モンゴメリ逆元演算回路142は、モンゴメリ逆元演算を実行する。例えば、モンゴメリ逆元演算回路142は、ステップS142で与えられた値“R−1modN”のモンゴメリ逆元を計算する。これにより、“R−1modN”のモンゴメリ逆元である“R2modN”が算出される。したがって、モンゴメリ逆元演算回路142の演算結果“R2modN”が、モンゴメリ逆元演算回路142から分岐部150に出力される。
ステップS162では、分岐部150は、ステップS152でのモンゴメリ逆元演算回路142の演算結果“R2modN”を、モンゴメリ変換パラメータに設定する。例えば、分岐部150は、モンゴメリ逆元演算回路142の演算結果“R2modN”を、モンゴメリ変換パラメータとして出力する。例えば、演算回路12は、分岐部150から出力された“R2modN”をモンゴメリ変換パラメータとして保持する。
ステップS200は、図2のステップS200と同様である。
ステップS212では、選択部130は、データDA20(例えば、値“Z”)を、モンゴメリ逆元演算回路142に供給する。例えば、選択部130は、モンゴメリ逆元演算回路142の入力元として、データDA20の経路を選択する。
ステップS222では、分岐部150は、モンゴメリ逆元演算回路142の演算結果(例えば、“(Z−1・R)modN”)を、データDA30の経路に出力する。すなわち、分岐部150は、データDA30として、モンゴメリ逆元演算回路142の演算結果(例えば、“(Z−1・R)modN”)を出力する。このように、分岐部150は、例えば、モンゴメリ逆元演算回路142の出力先として、データDA30の経路を選択する。
なお、選択部112、130および分岐部150は、例えば、所定の処理に含まれる演算が実行される演算期間では、所定の処理に含まれる演算用のデータDA10、DA12、DA20、DA30の経路を選択した状態を維持する。これにより、この実施形態では、所定の処理に含まれる演算が終了するまで、所定の処理の過程で使用されるデータを、モンゴメリ乗算回路120、モンゴメリ逆元演算回路142等に対して入出力できる。
また、演算回路12の動作は、この例に限定されない。例えば、ステップS200は、ステップS222の後に実行されてもよい。すなわち、選択部112、130および分岐部150は、モンゴメリ変換パラメータの計算が終了した後、所定の処理に含まれる演算が終了するまで、所定の処理に含まれる演算用のデータDA10、DA12、DA20、DA30の経路を選択した状態を維持していればよい。
以上、図7および図8に示した実施形態においても、図1および図2に示した実施形態と同様の効果を得ることができる。例えば、選択部112は、モンゴメリ変換パラメータを算出する算出期間に、モンゴメリ乗算回路120の入力端子IN1、IN2に1を与える。また、例えば、選択部130は、算出期間に、モンゴメリ乗算回路120の演算結果“R−1modN”をモンゴメリ逆元演算回路142に与える。そして、分岐部150は、算出期間に、モンゴメリ逆元演算回路142の演算結果“R2modN”をモンゴメリ変換パラメータとして出力する。
なお、選択部112、130および分岐部150は、例えば、所定の処理に含まれる演算が実行される演算期間では、所定の処理に含まれる演算用のデータDA10、DA12、DA20、DA30の経路を選択した状態を維持する。これにより、この実施形態では、所定の処理に含まれる演算が終了するまで、所定の処理の過程で使用されるデータを、モンゴメリ乗算回路120、モンゴメリ逆元演算回路142等に対して入出力できる。すなわち、演算回路12は、所定の処理で使用されるモンゴメリ乗算回路120およびモンゴメリ逆元演算回路142を利用して、モンゴメリ変換パラメータを算出する。
このように、この実施形態においても、モンゴメリ変換パラメータを算出する専用の演算回路を追加することなく、所定の処理を実現する回路の一部(モンゴメリ乗算回路120、モンゴメリ逆元演算回路142)を利用して、モンゴメリ変換パラメータを算出できる。すなわち、この実施形態においても、演算回路12の面積の増加を抑制しつつ、モンゴメリ変換パラメータを演算回路12内で算出できる。したがって、この実施形態においても、モンゴメリ変換パラメータを計算するための専用の演算回路またはプログラムを要することなく、モンゴメリ変換パラメータを算出できる。
図9は、演算回路および演算回路の制御方法の別の実施形態を示している。この実施形態の演算回路12Aは、図3に示した分岐部100、選択部110および逆元演算回路140の代わりに、分岐部102、選択部112およびモンゴメリ逆元演算回路142を有している。演算回路12Aのその他の構成は、図3に示した演算回路10Aと同様である。図1から図8で説明した要素と同様の要素については、同様の符号を付し、これ等については、詳細な説明を省略する。例えば、演算回路12Aは、公開鍵暗号を利用した暗号装置や認証装置に搭載される。例えば、演算回路12Aは、楕円曲線暗号のスカラー倍算を実行するスカラー倍算演算回路である。以下、演算回路12Aがスカラー倍算演算回路であるとして、演算回路10Aとの相違点を中心に説明する。なお、演算回路12Aの用途は、スカラー倍算演算回路に限定されない。図9では、図を見やすくするために、制御部30、70の指示経路等の記載を省略している。
演算回路12Aは、例えば、レジスタ20、制御部30、分岐部40、選択部50、演算部60、選択部130、モンゴメリ逆元演算回路142および分岐部150を有している。また、演算部60は、制御部70、加減算回路80、ワークメモリ90、分岐部102、選択部112およびモンゴメリ乗算回路120を有している。例えば、演算回路12Aは、楕円曲線暗号の加算等を繰り返すことにより、楕円曲線暗号のスカラー倍算を実行する。
制御部30は、例えば、分岐部102、選択部112、モンゴメリ乗算回路120、選択部130、モンゴメリ逆元演算回路142、分岐部150等を制御して、モンゴメリ変換パラメータを算出する。そして、制御部30は、例えば、分岐部40、選択部50、演算部60等を制御して、楕円曲線暗号のスカラー倍算を実行する。
分岐部102は、モンゴメリ乗算回路120の演算結果を、モンゴメリ乗算回路120から受ける。そして、分岐部102は、モンゴメリ乗算回路120の演算結果を選択部130に出力するか、モンゴメリ乗算回路120の演算結果をワークメモリ90に格納するかを選択する。
例えば、分岐部102は、モンゴメリ変換パラメータを算出する算出期間において、モンゴメリ乗算回路120の演算結果“R−1modN”を、端子P5から選択部130に出力する。また、例えば、分岐部102は、楕円曲線暗号の加算等の演算が実行されている演算期間では、モンゴメリ乗算回路120の演算結果であるデータDA14を、ワークメモリ90に格納する。
選択部112は、例えば、モンゴメリ乗算回路120の入力端子IN1に与えるデータを選択するセレクタ112aと、モンゴメリ乗算回路120の入力端子IN2に与えるデータを選択する112bとを有している。
セレクタ112aは、例えば、固定値“1”と、ワークメモリ90に格納されているデータDA10とを受ける。そして、セレクタ112aは、固定値“1”とデータDA10とのいずれかを、モンゴメリ乗算回路120の入力端子IN1に出力する。例えば、セレクタ112aは、モンゴメリ変換パラメータを算出する算出期間では、固定値“1”を入力端子IN1に出力する。また、セレクタ112aは、楕円曲線暗号の加算等の演算が実行されている演算期間では、ワークメモリ90から受けるデータDA10を入力端子IN1に出力する。
セレクタ112bは、例えば、固定値“1”と、ワークメモリ90に格納されているデータDA12とを受ける。そして、セレクタ112bは、固定値“1”とデータDA12とのいずれかを、モンゴメリ乗算回路120の入力端子IN2に出力する。例えば、セレクタ112bは、モンゴメリ変換パラメータを算出する算出期間では、固定値“1”を入力端子IN2に出力する。また、セレクタ112bは、楕円曲線暗号の加算等の演算が実行されている演算期間では、ワークメモリ90から受けるデータDA12を入力端子IN2に出力する。
モンゴメリ乗算回路120は、入力端子IN1、IN2で受けた整数に対するモンゴメリ乗算を実行し、演算結果を分岐部102に出力する。
選択部130は、演算部60から受けるデータDA20と、分岐部102から受けるモンゴメリ乗算回路120の演算結果“R−1modN”とのいずれかを、モンゴメリ逆元演算回路142に出力する。例えば、選択部130は、モンゴメリ変換パラメータを算出する算出期間では、モンゴメリ逆元演算回路142に、分岐部102から受けるモンゴメリ乗算回路120の演算結果“R−1modN”を出力する。そして、選択部130は、楕円曲線暗号の加算等の演算が実行されている演算期間では、演算部60から受けるデータDA20を、モンゴメリ逆元演算回路142に出力する。
モンゴメリ逆元演算回路142は、選択部130から受けたデータのモンゴメリ逆元を計算し、演算結果(選択部130から受けたデータのモンゴメリ逆元)を分岐部150に出力する。
分岐部150は、例えば、モンゴメリ変換パラメータを算出する算出期間では、モンゴメリ逆元演算回路142の演算結果“R2modN”を、モンゴメリ変換パラメータとして演算部60の端子P7に出力する。また、分岐部150は、楕円曲線暗号の加算等の演算が実行されている演算期間では、モンゴメリ逆元演算回路142の演算結果(データDA20のモンゴメリ逆元)を、データDA30として演算部60の端子P6に出力する。
このように、演算回路12Aは、楕円曲線暗号のスカラー倍算で使用されるモンゴメリ乗算回路120およびモンゴメリ逆元演算回路142を利用して、モンゴメリ変換パラメータを算出する。したがって、この実施形態では、モンゴメリ変換パラメータを算出する専用の演算回路(例えば、多倍長データを処理可能な減算回路や1ビット左シフト回路等)を追加することなく、モンゴメリ変換パラメータを演算回路12A内で算出できる。すなわち、この実施形態では、演算回路12Aの面積の増加を抑制しつつ、モンゴメリ変換パラメータを演算回路12A内で算出できる。
なお、演算回路12Aの構成は、この例に限定されない。例えば、分岐部102、選択部112、モンゴメリ乗算回路120、選択部130、モンゴメリ逆元演算回路142、分岐部150は、制御部70に制御されてもよい。すなわち、制御部70は、分岐部102、選択部112、モンゴメリ乗算回路120、選択部130、モンゴメリ逆元演算回路142、分岐部150等を制御して、モンゴメリ変換パラメータを算出してもよい。
また、演算部60は、レジスタ20、制御部30、分岐部40、選択部50、選択部130、モンゴメリ逆元演算回路142および分岐部150の少なくとも1つを有してもよい。例えば、演算部60は、選択部130、モンゴメリ逆元演算回路142および分岐部150を有してもよい。
図10は、図9に示した演算回路12Aの動作の一例を示している。すなわち、図10は、演算回路12Aの制御方法の一例を示している。なお、図10は、係数Kが2以上の場合の楕円曲線暗号のスカラー倍算を実行する演算回路12Aの動作の一例を示している。図10の動作では、係数Kを処理する際、右向きバイナリ法を用いている。なお、係数Kが1の場合は、演算回路12Aは、入力値(X0,Y0)を、楕円曲線暗号のスカラー倍算の結果として出力する。また、係数Kが0の場合は、演算回路12Aは、単位元Oを、楕円曲線暗号のスカラー倍算の結果として出力する。
図10の動作を実現するための制御は、ハードウエアにより実行されてもよいし、ソフトウエアにより実行されてもよい。図10の動作は、ステップS100bは、例えば、モンゴメリ変換パラメータを算出する算出期間での動作に対応している。また、ステップS200a、S212a、S222a、S300−S400は、楕円曲線暗号の加算等の演算が実行されている演算期間での動作に対応している。ステップS200a、S212a、S222aは、分岐部102の動作が追加されたことを除いて、図8で説明したステップS200、S210、S220と同様である。また、ステップS300−S400は、図5のステップS300−S400と同様である。
ステップS100bでは、演算回路12Aは、モンゴメリ変換パラメータを計算する。例えば、演算回路12Aは、図11に示すステップS100−S162の処理を実行して、モンゴメリ変換パラメータを算出する。
ステップS200aでは、制御部30は、例えば、ワークメモリ90の出力(データDA10、DA12の経路)をモンゴメリ乗算回路120の入力端子IN1、IN2に選択部112を介して接続する。これにより、ワークメモリ90から選択部112に転送されるデータDA10、DA12が、モンゴメリ乗算回路120の入力端子IN1、IN2に供給される。
また、ステップS200aでは、制御部30は、例えば、モンゴメリ乗算回路120の出力をワークメモリ90の入力(データDA14の経路)に分岐部102を介して接続する。これにより、モンゴメリ乗算回路120の演算結果(データDA14)がワークメモリ90に格納される。
ステップS212aでは、制御部30は、例えば、演算部60の端子P4を、モンゴメリ逆元演算回路142の入力に選択部130を介して接続する。これにより、演算部60から選択部130に転送されるデータDA20(例えば、値“Z”)が、モンゴメリ逆元演算回路142に供給される。
ステップS222aでは、制御部30は、モンゴメリ逆元演算回路142の出力を演算部60の端子P6に分岐部150を介して接続する。これにより、分岐部150に転送されるモンゴメリ逆元演算回路142の演算結果(例えば、“(Z−1・R)modN”)が、データDA30として演算部60に供給される。
ステップS300−S400は、例えば、図5のステップS300−S400の説明における演算回路10Aを演算回路12Aに読み替えることで説明される。なお、演算回路12Aの動作は、この例に限定されない。例えば、ステップS200aは、ステップS222aの後に実行されてもよい。
図11は、図10に示したモンゴメリ変換パラメータの計算処理(図10のステップS100b)の一例を示している。図11の動作は、図8のステップS100−S162に対応している。図8で説明したステップと同様のステップについては、同様の符号を付し、これ等については、詳細な説明を省略する。
ステップS100、S110は、図8のステップS100、S110と同様である。ステップS142a、S142bは、図8のステップS142に対応している。
ステップS142aでは、分岐部102は、例えば、モンゴメリ乗算回路120の演算結果“R−1modN”を、選択部130に出力する。
ステップS142bでは、選択部130は、分岐部102から受けたモンゴメリ乗算回路120の演算結果“R−1modN”を、モンゴメリ逆元演算回路142に供給する。
ステップS152、S162は、図8のステップS152、S162と同様である。例えば、ステップS162では、分岐部150は、モンゴメリ逆元演算回路142の演算結果“R2modN”を、モンゴメリ変換パラメータとして演算部60の端子P7に出力する。このように、ステップS100−S162の処理により、モンゴメリ変換パラメータが計算される。
以上、図9から図11に示した実施形態においても、図1から図8に示した実施形態と同様の効果を得ることができる。例えば、この実施形態では、モンゴメリ変換パラメータを算出する専用の演算回路を追加することなく、楕円曲線暗号を実現する回路の一部(モンゴメリ乗算回路120、モンゴメリ逆元演算回路142)を利用して、モンゴメリ変換パラメータを算出できる。すなわち、この実施形態においても、演算回路12Aの面積の増加を抑制しつつ、モンゴメリ変換パラメータを演算回路12A内で算出できる。このように、この実施形態においても、モンゴメリ変換パラメータを計算するための専用の演算回路またはプログラムを要することなく、モンゴメリ変換パラメータを算出できる。
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。