(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-05-26
(45)【発行日】2023-06-05
(54)【発明の名称】演算処理方法、演算処理装置、及び半導体装置
(51)【国際特許分類】
G09C 1/00 20060101AFI20230529BHJP
【FI】
G09C1/00 650A
(21)【出願番号】P 2019036619
(22)【出願日】2019-02-28
【審査請求日】2021-08-11
【前置審査】
(73)【特許権者】
【識別番号】302062931
【氏名又は名称】ルネサスエレクトロニクス株式会社
(74)【代理人】
【識別番号】110002066
【氏名又は名称】弁理士法人筒井国際特許事務所
(72)【発明者】
【氏名】斎藤 僚介
(72)【発明者】
【氏名】福島 和彦
【審査官】青木 重徳
(56)【参考文献】
【文献】国際公開第2009/034800(WO,A1)
【文献】特開2013-057828(JP,A)
【文献】国際公開第2007/080652(WO,A1)
【文献】特開2010-091913(JP,A)
【文献】特開2007-212701(JP,A)
【文献】特開2005-122141(JP,A)
【文献】吉野 雅之 ほか,コプロセッサの2倍のビット長をもつモンゴメリ乗算,電子情報通信学会技術研究報告,日本,社団法人電子情報通信学会,2006年07月13日,Vol.106 No.175,p.87~94
【文献】Masayuki Yoshino et al.,Unbridle the Bit-Length of a Crypto-coprocessor with Montgomery Multiplication,LNSC, International Workshop on Selected Areas in Cryptography,2007年,Vol. 4356,p。188-202
(58)【調査した分野】(Int.Cl.,DB名)
G09C 1/00
(57)【特許請求の範囲】
【請求項1】
CPUと、
前記CPUの命令によりnビットモンゴメリ乗算剰余の算出、又はnビット乗算を切り換えて行う演算器と、
メモリと、
を備えた演算処理装置において、nビットモンゴメリ乗算剰余の算出とnビット乗算とを時系列的に組み合わせてnビットの整数倍のビット数のモンゴメリ乗算剰余を算出する演算処理方法であって、
前記CPUが、前記メモリから読み出したプログラムに基づき、カウント値が所定の値である場合にはnビットモンゴメリ乗算剰余の算出を演算方法として選択し、前記カウント値が前記所定の値でない場合にはnビット乗算を前記演算方法として選択する第1ステップと、
前記CPUが、選択した前記演算方法による演算を前記演算器に実行させ、実行を完了すると前記カウント値を更新して前記第1ステップに戻る第2ステップと、
を有する、
演算処理方法。
【請求項2】
請求項1に記載の演算処理方法において、
前記演算器は、nビットモンゴメリ乗算剰余の算出を行う第1演算器と、nビット乗算を行う第2演算器と、が独立して設けられており、
前記CPUは、前記第1ステップにおいてnビットモンゴメリ乗算剰余の算出を選択した場合、前記第2ステップにおいて前記第1演算器による演算を実行させ、前記第1ステップにおいてnビット乗算を選択した場合、前記第2ステップにおいて前記第2演算器による演算を実行させる、
演算処理方法。
【請求項3】
請求項1に記載の演算処理方法において、
前記CPUは、前記演算器を用いて、2nビット又は3nビットモンゴメリ乗算剰余を算出する、
演算処理方法。
【請求項4】
CPUと、
前記CPUの命令によりnビットモンゴメリ乗算剰余の算出、又はnビット乗算を切り換えて行う演算器と、
メモリと、
を備え、
前記CPUは、前記メモリから読み出したプログラムに基づき、カウント値が所定の値である場合にはnビットモンゴメリ乗算剰余の算出を選択し、前記カウント値が前記所定の値でない場合にはnビット乗算を選択して前記演算器に実行させ、実行を完了すると前記カウント値を更新する処理を繰り返すことで、nビットモンゴメリ乗算剰余の算出とnビット乗算とを時系列的に組み合わせて、nビットの整数倍のビット数のモンゴメリ乗算剰余を算出する、
演算処理装置。
【請求項5】
請求項
4に記載の演算処理装置において、
前記演算器は、nビットモンゴメリ乗算剰余の算出を行う第1演算器と、nビット乗算を行う第2演算器と、が独立して設けられている、
演算処理装置。
【請求項6】
請求項
4に記載の演算処理装置において、
前記CPUは、前記演算器を用いて、2nビット又は3nビットモンゴメリ乗算剰余を算出する、
演算処理装置。
【請求項7】
請求項
4に記載の演算処理装置を備えた、
半導体装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、演算処理方法、演算処理装置、及び半導体装置に関する。
【背景技術】
【0002】
暗号処理分野では、乗算剰余の算出処理が行われる。例えば、非特許文献1~3には、モンゴメリ乗算剰余について開示されている。非特許文献1には、モンゴメリ乗算剰余の基本的な内容が開示されている。非特許文献1によれば、モンゴメリ乗算剰余の算出には、数回の乗算とシフト演算とが組み合わされる旨記載されている。モンゴメリ乗算剰余は、除算を必要とせず、他の乗算剰余アルゴリズムと比べて極めて高速で実行することが可能である。このため、モンゴメリ乗算剰余は、暗号処理分野において広く利用されている。
【0003】
非特許文献2~3には、nビットモンゴメリ乗算剰余を用いて、2nビットモンゴメリ乗算剰余を算出する方法が開示されている。
【先行技術文献】
【非特許文献】
【0004】
【文献】Montgomery, Peter L. "Modular multiplication without trial division." Mathematics of computation 44.170 (1985): 519-521.
【文献】Yoshino, Masayuki, Katsuyuki Okeya, and Camille Vuillaume. "Montgomery multiplication with twice the bit-length of multipliers." IEICE transactions on fundamentals of electronics, communications and computer sciences 91.1 (2008): 203-210.
【文献】Yoshino, Masayuki, Katsuyuki Okeya, and Camille Vuillaume. "Recursive Double-Size Modular Multiplications from Euclidean and Montgomery Multipliers." IEICE transactions on fundamentals of electronics, communications and computer sciences 93.1 (2010): 180-187.
【発明の概要】
【発明が解決しようとする課題】
【0005】
ここで、従来の暗号処理における、nビットモンゴメリ乗算剰余を用いた2nビットモンゴメリ乗算剰余の算出方法について説明する。
図16は、暗号処理を行う従来の演算処理装置の構成の一例を示す図である。演算処理装置1001は、CPU(Central Processing Unit)10、演算器1020、メモリ30を備えている。CPU10は、メモリ30に保持されたプログラムを読み出し、プログラムに基づく命令を演算器1020に送信する。また、CPU10は、演算器1020における演算に必要なデータを、メモリ30から読み出し演算器1020に送信する。
【0006】
演算器1020は、CPU10から受信した命令及びデータに基づき、モンゴメリ乗算剰余算出の演算等を含むマルチ演算(MultMonDiv)を行う。
【0007】
メモリ30は、RAM(Random Access Memory)等を備え、CPU10で実行するプログラムや、CPU10や演算器1020における演算結果、演算処理装置1001の設定情報等のデータを保持する。
【0008】
図17は、従来の暗号処理における2nビットモンゴメリ乗算剰余の算出に係るアルゴリズムを示す図である。
図18は、マルチ演算のアルゴリズムを示す図である。
図19は、
図17のアルゴリズムに対応するフロー図である。
図17、
図19に示すように、2nビットモンゴメリ乗算剰余の算出には、それぞれの入力値に対し、6回のマルチ演算(Step1~Step6)が順次実行される。そして、各Stepにおける演算結果を用いて、2nビットモンゴメリ乗算剰余が出力値(Output)として算出される。なお、
図19における各ステップを示す符号は、後述する
図3等と対応している。
【0009】
図18に示すように、それぞれのマルチ演算(MultMonDiv)では、例えば「x」、「y」、「w」を入力とし、「q」、「r」が出力される。
図18に示すように、それぞれのマルチ演算では、1行目及び4行目において、nビットモンゴメリ乗算剰余の算出(MultMon)が行われる。すなわち、2nビットモンゴメリ乗算(2nビットモンゴメリ乗算剰余)の算出には、12回のnビットモンゴメリ乗算剰余の算出を行う必要がある。
【0010】
図20は、nビットモンゴメリ乗算剰余の算出に係る演算量と、nビット乗算に係る演算量とを比較する図である。
図20に示すように、nビットモンゴメリ乗算剰余の算出に要する演算量は、nビット乗算に要する演算量よりも多く、nビットモンゴメリ乗算剰余の算出には、nビット乗算の1.5倍以上の演算時間が必要となる。そうすると、2nビットモンゴメリ乗算剰余の算出には、nビット乗算の18倍以上の演算時間が必要となる。
【0011】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【0012】
本明細書には、複数の実施の形態の演算処理方法等が記載されているが、一実施の形態の演算処理方法を述べると、次の通りである。演算処理方法は、CPUと、CPUの命令によりnビットモンゴメリ乗算剰余の算出、又はnビット乗算を切り換えて行う演算器と、メモリと、を備えた演算処理装置において、nビットの整数倍のビット数のモンゴメリ乗算剰余を算出する演算処理方法である。演算処理方法は、CPUが、メモリから読み出したプログラムに基づき、nビットモンゴメリ乗算剰余の算出、又はnビット乗算から演算方法を選択する第1ステップと、CPUが、選択した演算方法による演算を演算器に実行させる第2ステップと、を有する。
【発明の効果】
【0013】
一実施の形態によれば、nビットモンゴメリ乗算剰余を用いたnビットの整数倍のビット数のモンゴメリ乗算剰余の算出に要する演算時間を短縮することが可能となる。
【図面の簡単な説明】
【0014】
【
図1】
図1は、本発明の実施の形態1に係る演算処理装置の構成の一例を示す図である。
【
図2】
図2は、本発明の実施の形態1に係る2nビットモンゴメリ乗算剰余算出のアルゴリズムを例示する図である。
【
図3】
図3は、
図2のアルゴリズムに対応するフロー図である。
【
図4】
図4は、本発明の実施の形態1の変形例に係る2nビットモンゴメリ乗算剰余算出のアルゴリズムを例示する図である。
【
図5】
図5は、
図4のアルゴリズムに対応するフロー図である。
【
図6】
図6は、本発明の実施の形態2に係る演算処理装置の構成の一例を示す図である。
【
図7】
図7は、本発明の実施の形態3に係る3nビットモンゴメリ乗算剰余算出のアルゴリズムを例示する図である。
【
図8】
図8は、
図7のアルゴリズムに対応するフロー図である。
【
図9】
図9は、本発明の実施の形態4に係る演算処理装置の構成の一例を示す図である。
【
図10】
図10は、本発明の実施の形態4におけるマルチ演算とnビット乗算とを並列実行させる手順の一例を示す図である。
【
図11】
図11は、本発明の実施の形態4におけるマルチ演算とnビット乗算とを並列実行させる手順の他の例を示す図である。
【
図12】
図12は、本発明の実施の形態5に係る演算処理装置の構成の一例を示す図である。
【
図13】
図13は、本発明の実施の形態5に係るマルチ演算のアルゴリズムを例示する図である。
【
図16】
図16は、暗号処理を行う従来の演算処理装置の構成の一例を示す図である。
【
図17】
図17は、従来の暗号処理における2nビットモンゴメリ乗算剰余の算出に係るアルゴリズムを示す図である。
【
図18】
図18は、マルチ演算のアルゴリズムを示す図である。
【
図20】
図20は、nビットモンゴメリ乗算剰余の算出に係る演算量と、nビット乗算に係る演算量とを比較する図である。
【発明を実施するための形態】
【0015】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するためのすべての図において、同一部分には原則として同一の符号を付し、その繰り返しの説明は省略する。
【0016】
(実施の形態1)
本実施の形態では、nビットモンゴメリ乗算剰余の算出を含むマルチ演算(MultMonDiv)と、nビット乗算とを、CPUが適宜選択することにより、2nビットモンゴメリ乗算剰余の算出が行われる。
【0017】
<演算処理装置の構成>
図1は、本発明の実施の形態1に係る演算処理装置の構成の一例を示す図である。
図1は
図16に類似しており、演算器1020が演算器20に置き換えられている点が異なる。演算器20は、CPU10の命令により、nビットモンゴメリ乗算剰余の算出(MultMon)と、nビット乗算とを切り換えて実行する。
【0018】
図2は、本発明の実施の形態1に係る2nビットモンゴメリ乗算剰余算出のアルゴリズムを例示する図である。本実施の形態における2nビットモンゴメリ乗算剰余算出には、
図2に示すStep1~Step6等の演算処理が実行される。
図2に示すように、Step1、Step2、Step4、Step6ではnビット乗算が実行され、Step3、Step5ではnビットモンゴメリ乗算剰余の算出や加減算を含むマルチ演算(MultMonDiv)が実行される。
【0019】
具体的に説明すると、
図2のアルゴリズムでは、A=a
1m+a
0、B=b
1m+b
0、N=n
1m+n
0を入力として、2nビットの各値{r
0、q
0}、{r
1、q
1}、(q
2、r
2)、{r
3、q
3}、(q
4、r
4)、{r
5、q
5}が算出される。なお、m:=2
n、M:=m
2=2
2nである。a
1、b
1、n
1は各値(A、B、N)における上位ビット(nビット)、a
0、b
0、n
0は各値(A、B、N)における下位ビット(nビット)を示している。また、rは算出された各値の上位ビット(nビット)であり、qは算出された各値の下位ビット(nビット)を示している。
【0020】
Step1では、[a1、b1]を入力として、これらの乗算が実行される。これにより、2nビットの値{r0、q0}が算出される。Step2では、[a1+a0、b1+b0]を入力として、これらの乗算が算出される。これにより、2nビットの値{r1、q1}が算出される。Step3では、[a0、b0、n0]を入力として、マルチ演算(MultMonDiv)が実行される。これにより、2nビットの値(q2、r2)が算出される。
【0021】
Step4では、[q2、n1]を入力として、これらの乗算が実行される。これにより、2nビットの値{r3、q3}が算出される。Step5では、[-q0+q1+r2-q3、1、n0]を入力として、マルチ演算(MultMonDiv)が実行される。これにより、2nビットの値(q4、r4)が算出される。Step6では、[q4、n1]を入力として、これらの乗算が実行される。これにより、2nビットの値{r5、q5}が算出される。
【0022】
そして、これらの演算結果を用いて、以下の式(1)により、2nビットモンゴメリ乗算剰余が出力値として算出される。
【0023】
A*B*M
-1(mod N)=(r
0+r
3-r
5)m+(q
0-r
0+r
1-r
2+q
3-r
3+r
4-q
5) ・・・(1)
<演算処理方法>
図3は、
図2のアルゴリズムに対応するフロー図である。
図3のフロー図は、ステップS101~S108を含む。ステップS101では、CPU10は、メモリ30に対してカウント値の初期化を実行し、カウント値を「1」に設定する。ここで、カウント値とは、
図2のアルゴリズムにおける処理の進捗状況を識別する値である。詳しくは後述するが、各Stepの処理が完了するごとに、カウント値が更新される。例えば、カウント値が「4」に設定されていれば、
図2における処理がStep3まで完了していることが示される。
【0024】
ステップS102では、
図2の各Stepに対応する入力値の準備が行われる。CPU10は、メモリ30から読み出したプログラムに基づき、各Stepの入力値を作成する。例えば、Step1であれば、CPU10は、入力値[a
1、b
1]を作成する。また、Step2、5では、CPU10は、加減算を行って入力値を作成する。
【0025】
ステップS103では、カウント値に応じて、演算方法が選択される。具体的に述べると、カウント値が「3、5」の場合(Yes)、CPU10は、マルチ演算(MultMonDiv)、すなわちnビットモンゴメリ乗算剰余の算出を選択し、ステップS104の処理が実行される。一方、カウント値がそれ以外の値である場合(No)、CPU10は、乗算を選択し、ステップS105の処理が実行される。
【0026】
CPU10は、ステップS102で作成した入力値を送信するとともに、選択した演算方法を実行するため、演算器20に演算方法を命令する。
【0027】
例えば、Step1では、カウント値が「1」に設定されているので、CPU10は、乗算を選択する。そして、CPU10は、入力値[a1、b1]を送信し、演算器20に乗算を行うよう命令する。
【0028】
ステップS105では、演算器20は、CPU10からの命令に従い、受信した入力値を用いた乗算を行う。例えば、Step1では、演算器20は、入力値[a1、b1]を用いたnビット乗算を行い、2nビットの値{r0、q0}を算出する。算出された値は、メモリ30に保持される。
【0029】
ステップS104では、演算器20におけるnビットモンゴメリ乗算剰余の算出や、CPU10による加減算等の処理が実行される。ステップS104は、
図3に示すように、ステップS104a~S104cを有する。
【0030】
ステップS104aでは、
図18の1行目に対応するnビットモンゴメリ乗算剰余の算出が行われる。CPU10は、読み出したプログラムに基づき、演算器20に対し、nビットモンゴメリ乗算剰余の算出を行うよう命令し、
図18に示す入力値[x、y、w]を送信する。入力値は、
図2のStep3では[a
0、b
0、n
0]であり、Step5では[-q
0+q
1+r
2-q
3、1、n
0]である。CPU10の命令に基づき、演算器20は、入力された値を用いてnビットモンゴメリ乗算剰余の算出を行い、出力値の上位ビットの値rを算出する。ここで算出された値rは、メモリ30に保持される。
【0031】
ステップS104bでは、
図18の4行目に対応するnビットモンゴメリ乗算剰余の算出が行われる。なお、ステップS104bの入力となる
図18の2~3行目の演算は、例えばCPU10において実行される。CPU10は、プログラムに基づき、演算器20に対し、nビットモンゴメリ乗算剰余の算出を行うよう命令し、
図18の2~3行目に対応する値等を入力値として送信する。演算器20は、入力された値を用いてnビットモンゴメリ乗算剰余の算出を行い、出力値の下位ビットの算出用の値r’を算出する。
【0032】
そして、ステップS104cにおいて、CPU10は、
図18の6~8行目に対応する加算等の各演算を行い、出力値の下位ビットの値qを算出する。そして、CPU10は、出力値として2nビットの値(q、r)を作成する。算出された値は、メモリ30に保持される。
【0033】
例えば、Step3において、CPU10は、演算器20に対し入力値[a0、b0、n0]に基づくnビットモンゴメリ乗算剰余の算出を2回実行させ、加算等の演算を行って2nビットの値(q2、r2)を算出する。また、Step5において、CPU10は、演算器20に対し入力値[-q0+q1+r2-q3、1、n0]に基づくnビットモンゴメリ乗算剰余の算出を2回実行させ、加算等の演算を行って2nビットの値(q4、r4)を算出する。
【0034】
ステップS106では、カウント値が「6」であるかどうかが判定される。CPU10は、カウント値が「6」でないと判定した場合(No)、ステップS107において、カウント値を「+1」加算する処理を行う。例えば、Step1の処理が行われた場合、CPU10は、カウント値を1+1=2に更新し、更新したカウント値をメモリ30に保持させる。そして、ステップS102に戻り、Step2以降の処理が続いて実行される。
【0035】
一方、ステップS106において、CPU10は、カウント値が「6」であると判定した場合(Yes)、Step1~Step6の処理がすべて完了したと判断し、ステップS108の処理が実行される。ステップS108では、CPU10は、Step1~Step6における演算結果を用いて出力値を算出する。CPU10は、メモリ30に保持された各演算結果の値を読み出し、式(1)に示す2nビットモンゴメリ乗算剰余を出力値として算出する。算出された出力値は、メモリ30に保持されてもよいし、外部に送信されてもよい。
【0036】
<本実施の形態による主な効果>
本実施の形態によれば、CPU10は、メモリ30から読み出したプログラムに基づき、nビットモンゴメリ乗算剰余の算出、又はnビット乗算を選択して演算器に実行させる。
【0037】
この構成によれば、演算時間が長いnビットモンゴメリ乗算剰余を含むマルチ演算の回数を削減し、演算時間が短い乗算が用いられるので、nビットモンゴメリ乗算剰余を用いた2nビットモンゴメリ乗算剰余の算出に係る演算時間を短縮することが可能となる。
【0038】
削減される演算時間は、nビット乗算とnビットモンゴメリ乗算剰余における演算時間の差によって決まる。具体的に述べると、nビット乗算に対してnビットモンゴメリ乗算剰余の演算時間が遅いほど効果が大きくなる。nビットモンゴメリ乗算剰余がnビット乗算に対してk倍の時間が掛かるとした場合、2nビットモンゴメリ乗算剰余の演算時間は、次の通りとなる。k=3の場合、本実施の形態における演算時間は、従来の約44.4%となる。k=2の場合、本実施の形態における演算時間は、従来の約50%となる。k=1.5の場合、本実施の形態における演算時間は、従来の約55.6%となる。k=1の場合、本実施の形態における演算時間は、従来の約66.7%となる。このように、nビットモンゴメリ乗算剰余の演算時間がnビット乗算の演算時間より長くなると、2nビットモンゴメリ乗算剰余の演算時間の削減効果はより大きくなる。
【0039】
[変形例]
2nビットモンゴメリ乗算剰余の算出は、
図2以外のアルゴリズムでも可能である。そこで、ここでは、
図2以外のアルゴリズムを変形例として例示する。
図4は、本発明の実施の形態1の変形例に係る2nビットモンゴメリ乗算剰余算出のアルゴリズムを例示する図である。
図4のStep1~Srep5は、
図2と同じであるが、
図4のStep6がマルチ演算に置き換えられている。
図5は、
図4のアルゴリズムに対応するフロー図である。
【0040】
図4のStep6では、[q
4、n
1、m-1]を入力として、マルチ演算(MultMonDiv)が実行される。これにより、2nビットの値(q
5、r
5)が算出される。出力値である2nビット乗算剰余は、すでに述べた式(1)を用いて算出される。
【0041】
図5は、
図3に対し、ステップS103の処理内容のみが異なる。
図4に示すように、Step6においてもマルチ演算が実行される。このため、ステップS103では、カウント値が「3、5、6」の場合(Yes)、CPU10は、マルチ演算(MultMonDiv)を選択し、ステップS104の処理が実行される。一方、カウント値がそれ以外の値「1、2、4」である場合(No)、CPU10は、乗算を選択し、ステップS105の処理が実行される。
【0042】
本変形例においても、従来の演算方法に比べて2nビットモンゴメリ乗算剰余の演算時間を削減することが可能である。
【0043】
(実施の形態2)
次に、実施の形態2について説明する。なお、以下では、すでに述べた内容と重複する箇所については、原則として説明を省略する。
【0044】
図6は、本発明の実施の形態2に係る演算処理装置の構成の一例を示す図である。
図6に示す演算処理装置101は、
図1の演算器20が演算器120に置き換えられている。演算器120は、CPU10から送信される命令に基づき、nビットモンゴメリ乗算剰余の算出、nビット乗算、及び加減算を切り換えて実行する。
【0045】
演算器120は、例えば
図3のステップS108における出力値の算出を加減算により行う。このように、演算器120は、CPU10が行っていた演算を代わりに実行することができる。また、演算器120は、出力値の算出以外にも、加減算による入力値の算出をCPU10に代わり行ってもよい。
【0046】
具体的に述べると、
図2のStep2において、CPU10は、入力値の算出に必要な値[a
1、a
0、b
1、b
0]を演算器120に送信し、演算器120に入力値[a
1+a
0、b
1+b
0]を算出させてもよい。そして、演算器120は、自身が算出した入力値を用いてnビット乗算を実行することができる。
【0047】
図2、
図3におけるその他の場合においても、演算器120は、CPU10に代わり加減算を実行することが可能となる。
【0048】
本実施の形態によれば、演算器120は、CPU10の命令によりnビットモンゴメリ乗算剰余の算出、nビット乗算、及び加減算を切り換えて行う。この構成によれば、CPU10の負荷が軽減され演算処理装置101における処理が高速化される。また、演算結果を、CPU10に読み出す必要がなくなるので、2nビットモンゴメリ乗算剰余の演算時間がより短縮される。
【0049】
(実施の形態3)
次に、実施の形態3について説明する。従来手法を用いることにより、2n、4n、8nビット等のモンゴメリ乗算剰余の算出は可能ではあるが、3nビットモンゴメリ乗算剰余の算出には、一旦、4nビットモンゴメリ乗算剰余の算出を行う必要がある。しかし、この方法では、nビットモンゴメリ乗算剰余の算出回数が増え、演算時間が長くなるとともに、4nビットのメモリ領域が必要となる。そこで、本実施の形態では、nビットモンゴメリ乗算剰余やnビット乗算を用いた3nビットモンゴメリ乗算剰余の算出方法について説明する。
【0050】
図7は、本発明の実施の形態3に係る3nビットモンゴメリ乗算剰余算出のアルゴリズムを例示する図である。本実施の形態における3nビットモンゴメリ乗算剰余算出には、
図7のStep1~Step14等の演算処理が実行される。
図7に示すように、Step1~2、Step4~8、Step10~11、Step13~14ではnビット乗算が実行され、Step3、Step9、Step12ではnビットモンゴメリ乗算剰余の算出や加減算を含むマルチ演算(MultMonDiv)が実行される。このように、本実施の形態では、Step数を増やすことにより、3nビット乗算剰余が直接算出される。
【0051】
具体的に述べると、
図7のアルゴリズムでは、A=a
2m
2+a
1m+a
0、B=b
2m
2+b
1m+b
0、N=n
2m
2+n
1m+n
0を入力として、2nビットの各値{r
0、q
0}~{r
1、q
1}、(q
2、r
2)、{r
3、q
3}~{r
7、q
7}、(q
8、r
8)、{r
9、q
9}~{r
10、q
10}、(q
11、r
11)、{r
12、q
12}~{r
13、q
13}が算出される。なお、m:=2
n、M:=m
3=2
3nである。
【0052】
Step1では、[a2、b2]を入力とし、これらの乗算が実行される。これにより、2nビットの値{r0、q0}が算出される。Step2では、[a1、b1]を入力とし、これらの乗算が実行される。これにより、2nビットの値{r1、q1}が算出される。Step3では、[a0、b0、n0]を入力として、マルチ演算(MultMonDiv)が実行される。これにより、2nビットの値(q2、r2)が算出される。
【0053】
Step4では、[a2+a1、b2+b1]を入力として、これらの乗算が実行される。これにより、2nビットの値{r3、q3}が算出される。Step5では、[a2+a0、b2+bo]を入力として、これらの乗算が実行される。これにより、2nビットの値{r4、q4}が算出される。Step6では、[a1+a0、b1+b0]を入力として、これらの乗算が実行される。これにより、2nビットの値{r5、q5}が算出される。
【0054】
Step7では、[q2、n2]を入力として、これらの乗算が実行される。これにより、2nビットの値{r6、q6}が算出される。Step8では、[q2、n1]を入力として、これらの乗算が実行される。これにより、2nビットの値{r7、q7}が算出される。Step9では、[-q1+r2+q5-q7、1、n0]を入力として、マルチ演算(MultMonDiv)が実行される。これにより、2nビットの値(q8、r8)が算出される。
【0055】
Step10では、[q8、n2]を入力として、これらの乗算が実行される。これにより、2nビットの値{r9、q9}が算出される。Step11では、[q8、n1]を入力として、これらの乗算が実行される。これにより、2nビットの値{r10、q10}が算出される。Step12では、[-q0+q1-r1-r2+q4+r5-q6+q7-r7+r8-q10、1、n0]を入力として、マルチ演算(MultMonDiv)が実行される。これにより、2nビットの値(q11、r11)が算出される。
【0056】
Step13では、[q11、n2]を入力として、これらの乗算が実行される。これにより、2nビットの値{r12、q12}が算出される。Step14では、[q11、n1]を入力として、これらの乗算が実行される。これにより、2nビットの値{r13、q13}が算出される。
【0057】
そして、これらの演算結果を用いて、以下の式(2)により、3nビットモンゴメリ乗算剰余が出力値として算出される。
【0058】
A*B*M
-1(mod N)=(r
0+r
6-r
12)m
2+(q
0-r
0-r
1+r
3+q
6+r
6+r
7-r
9-q
12-r
13)m+(-q
0-r
0-q
1+r
1-r
2+q
3+r
4+q
6-r
6+q
7+r
7-q
9-r
10+r
11-q
13) ・・・(2)
図8は、
図7のアルゴリズムに対応するフロー図である。
図7は、
図3に対し、ステップS103、S106の処理内容が異なる。
図7に示すように、本実施の形態では、Step3、9、12においてマルチ演算が実行される。このため、
図8のステップS103では、カウント値が「3、9、12」の場合(Yes)、CPU10は、マルチ演算(MultMonDiv)を選択し、ステップS104の処理が実行される。一方、カウント値がそれ以外の値「1~2、4~8、10~11、13~14」である場合(No)、CPU10は、乗算を選択し、ステップS105の処理が実行される。
【0059】
ステップS106では、カウント値が「14」であるかどうかが判定される。CPU10が、カウント値が「14」でないと判定した場合(No)、ステップS107の処理が実行される。これに対し、CPU10が、カウント値が「14」であると判定した場合(Yes)、ステップS108の処理が実行される。
【0060】
本実施の形態によれば、演算器20において、nビットモンゴメリ乗算剰余の算出と、nビット乗算とを適宜切り換えて実行することにより、3nビットモンゴメリ乗算剰余の算出が行われる。2nビットモンゴメリ乗算剰余の算出に比べてステップ数が増えているが、nビットモンゴメリ乗算剰余の算出の回数が6回に抑えられており、3nビットモンゴメリ乗算剰余の算出に要する演算時間を短縮させることが可能となる。また、4nビットモンゴメリ乗算剰余の算出を行うことなく、3nビットモンゴメリ乗算剰余を直接算出することが可能となるので、3nビット以上のメモリ領域を用意する必要がなくなり、メモリを有効に利用することが可能となる。
【0061】
本実施の形態では、3nビットモンゴメリ乗算剰余の算出方法について説明したが、ステップ数を増やすことにより、さらにビット数の大きいnビットの整数倍のビット数のモンゴメリ乗算剰余も短時間で算出可能である。
【0062】
(実施の形態4)
次に、実施の形態4について説明する。本実施の形態では、nビットモンゴメリ乗算剰余を行う演算器(第1演算器)と、nビット乗算を行う演算器(第2演算器)とがそれぞれ独立して設けられている。
図9は、本発明の実施の形態4に係る演算処理装置の構成の一例を示す図である。
図9に示す演算処理装置201は、
図1の演算器20が演算器221、222に置き換えられている。演算器221は、CPU10の命令に基づきnビットモンゴメリ乗算剰余の算出を実行する。演算器222は、CPU10の命令に基づき、nビット乗算を実行する。
【0063】
本実施の形態に係る演算処理装置201は、演算器221によるnビットモンゴメリ乗算剰余の算出を含むマルチ演算と、演算器222によるnビット乗算とを並列に実行することが可能である。
図10は、本発明の実施の形態4におけるマルチ演算とnビット乗算とを並列実行させる手順の一例を示す図である。
図10には、
図2のアルゴリズムを例にした並列実行手順が示されている。
【0064】
図2のアルゴリズムについて検討する。Step3のマルチ演算は、入力値(Input)のみを用いて実行可能である。したがって、Step1のnビット乗算と、Step3のマルチ演算とを並列実行可能である。また、Step3の実行中、Step1に続いてStep2のnビット乗算を並行実行することが可能である。
【0065】
一方、Step4のnビット乗算には、Step3の演算結果「q2」が必要となるので、Step3の処理が完了するまで、Step4を実行することはできない。また、Step5のマルチ演算には、Step4の演算結果「q3」が必要となるので、Step4の処理が完了するまで、Step5を実行することができない。また、Step6のnビット乗算には、Step5の演算結果「q4」が必要となるので、Step5の処理が完了するまで、Step6を実行することができない。
【0066】
したがって、
図2のアルゴリズムに対し、演算処理装置201では、Step1及びStep3、Step2及びStep3がそれぞれ並行実行可能である。
【0067】
図11は、本発明の実施の形態4におけるマルチ演算とnビット乗算とを並列実行させる手順の他の例を示す図である。
図11は、
図7のアルゴリズムを例にした並列実行手順が示されている。
図11に示すように、Step3のマルチ演算時には、Step2、6、8のnビット乗算が順次並列実行可能である。Step9のマルチ演算時には、Step1、5、7のnビット乗算が順次並列実行可能である。
【0068】
一部でnビット乗算の順序が入れ換わっているが、これは、各Stepにおいて必要な値が得られるタイミング等を考慮したためである。例えば、Step1で得られる値「q0」は、Step12のマルチ演算まで使用されない。このため、Step1は、必ずしも最初に実行される必要はない。一方、Step9のマルチ演算は、Step8の演算結果「q7」が必要なので、Step3と並行して実行されることが望ましい。そうすれば、Step3とStep9とを連続して実行可能となる。その他のStepについても、ここで述べた事情により適宜実行順序が決定される。
【0069】
本実施の形態によれば、演算器221によるnビットモンゴメリ乗算剰余の算出を含むマルチ演算と、演算器222によるnビット乗算とを並列に実行することが可能であるので、2nビットや3nビット等のモンゴメリ乗算剰余の算出に要する演算時間がより短縮される。
【0070】
(実施の形態5)
次に、実施の形態5について説明する。本実施の形態では、マルチ演算をnビット乗算及び加減算により実行する場合について説明する。
図12は、本発明の実施の形態5に係る演算処理装置の構成の一例を示す図である。
図12に示す演算処理装置301は、
図1の演算器20が演算器320に置き換えられている。演算器320は、CPU10の命令に基づきnビット乗算を実行する。すなわち、本実施の形態では、演算器においてnビットモンゴメリ乗算剰余の算出が直接行われることはない。
【0071】
図13は、本発明の実施の形態5に係るマルチ演算のアルゴリズムを例示する図である。
図13のマルチ演算では、「a、b、n、m、s」が入力され、「q、r」が出力される。なお、sはn
-1(mod m)で規定される値であり、マルチ演算の実行前に、CPU10等で事前に算出しておく。
【0072】
Step1では、[a、b]を入力として、これらの乗算が実行され、値{c1、c0}が算出される。なお、b=1の場合、{c1、c0}=aである。Step2では、[c0、s]を入力としてこれらの乗算等を行い、値「q」が算出される。Step3では、[q、n]を入力とする乗算等や、[c0、c1]を入力とする加減算等が実行される。
【0073】
図14及び
図15は、
図13のアルゴリズムに対応するフロー図である。
図14は、2nビットモンゴメリ乗算剰余の算出に係るフロー図であり、
図3と対応している。
図15は、3nビットモンゴメリ乗算剰余の算出に係るフロー図であり、
図8と対応している。
【0074】
図14及び
図15では、
図3のステップS104がステップS304に置き換えられている。ステップS304は、ステップS304a~S304eを含んでいる。ステップS304aでは、入力値「b」が1であるどうかが判断される。CPU10が、b≠1と判断すると(No)、ステップS304bの処理が実行される。一方、ステップS304aにおいて、CPU10がb=1と判断すると(Yes)、ステップS304cの処理が実行される。
【0075】
ステップS304bでは、
図13のStep1の処理が実行される。CPU10は値「a、b」を演算器320に送信し、乗算を行うよう命令する。演算器320は、CPU10の命令に従い、[a、b]を入力とする乗算(a*b)を実行する。算出された値{c
1、c
0}は、例えばメモリ30に保持される。
【0076】
ステップS304cでは、
図13のStep2の処理が実行される。CPU10は値[c
0、s]を演算器320に送信し、乗算を行うよう命令する。演算器320は、CPU10の命令に従い、[c
0、s]を入力とする乗算(c
0*s)を実行する。算出された値「q」は、例えばメモリ30に保持される。
【0077】
ステップS304d~S304eでは、
図13のStep2の処理が実行される。ステップS304dにおいて、CPU10は、値[q、n]を演算器320に送信し、乗算を行うよう命令する。演算器320は、CPU10の命令に従い、[q、n]を入力とする乗算(q*n)を実行する。算出された値「q*n」は、例えばメモリ30に保持される。
【0078】
ステップS304eにおいて、CPU10は、ステップS304で算出された値「q*n」、及び値[c0、c1]を用いて値「r」を算出する。算出された値「r」は、例えばメモリ30に保持される。このように、マルチ演算により値(q、r)が算出される。このように、乗算及び加減算を含むステップS304のマルチ演算により算出された値は、nビットモンゴメリ乗算剰余の算出及び加算を含むS104のマルチ演算により算出された値と同一である。
【0079】
図14及び
図15のマルチ演算では、2回のnビットモンゴメリ乗算剰余の算出が、3回の乗算に変更されている。したがって、2nビットモンゴメリ乗算剰余の算出では、マルチ演算で6(3×2)回の乗算が実行される。また、3nビットモンゴメリ乗算剰余の算出では、マルチ演算で9(3×3)回の乗算が実行される。また、bの値に応じて、マルチ演算における乗算回数は削減される。
【0080】
本実施の形態によれば、乗算及び加減算によりマルチ演算が実行される。この構成によれば、nビット乗算剰余の算出を行わなくてもよいので、2nビットや3nビット等のモンゴメリ乗算剰余の算出に要する演算時間がさらに短縮される。
【0081】
これまで説明した各実施の形態に係る演算処理装置は、例えば、セキュリティ機能が要求されるネットワーク機器、自動車、産業機器等に搭載される。また、演算処理装置は、その他の機能を含めた半導体装置として構成されてもよい。
【0082】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【符号の説明】
【0083】
1、101、201、301…演算処理装置、10…CPU、20、120、221、222、320…演算器、30…メモリ