(57)【要約】【課題】  レジスタ格納データの入出力を伴う演算処理の高速化を実現する構成を提供する。【解決手段】  レジスタを複数有するメモリブロックを持つメモリ部と、レジスタの指定アドレスに基づいてレジスタから読み出されたデータを入力し、入力データに基づく演算処理を実行する演算部を有する演算処理装置において、演算部に出力予定のデータを格納しているデータ格納レジスタが予め定めた特定レジスタと同一のメモリブロックの異なるレジスタである場合に、制御部からの入力アドレスをデータ格納レジスタの指定アドレスに変換して、該変換アドレスをメモリブロックに対する読み出しアドレスとして出力するアドレス制御を実行する。本構成により、レジスタ格納データのコピー処理を削減した高速演算処理が可能となる。【選択図】  図５
2005032034.tif 000002
【特許請求の範囲】
【請求項１】
データ格納領域としてのレジスタを複数有するメモリブロックを持つメモリ部と、前記レジスタの指定アドレスに基づいてレジスタから読み出されたデータを入力し、入力データに基づく演算処理を実行する演算部と、演算部に対するデータ入出力制御を実行する制御部とを有する演算処理装置において、
前記制御部からレジスタ指定アドレスを入力し、入力アドレスの変換処理を実行するアドレス制御部を有し、
前記アドレス制御部は、前記制御部から予め定められた特定レジスタのアドレスを入力し、かつ、前記演算部に出力予定のデータを格納しているデータ格納レジスタが前記特定レジスタと同一のメモリブロックの異なるレジスタである場合において、前記制御部からの入力アドレスを前記データ格納レジスタの指定アドレスに変換して、該変換アドレスを前記メモリブロックに対する読み出しアドレスとして出力する構成を有することを特徴とする演算処理装置。
【請求項２】
前記アドレス制御部は、
前記データ格納レジスタのアドレスを格納したラッチと、
前記制御部からの入力アドレスが予め定められた特定レジスタのアドレスと一致するか否かを検出する一致検出部と、
前記一致検出部の検出情報に基づいて、前記制御部からの入力アドレス、または前記ラッチに格納した前記データ格納レジスタのアドレスのいずれかを選択して、前記メモリブロックに対する読み出しアドレスとして出力するスイッチ手段と、
を有することを特徴とする請求項１に記載の演算処理装置。
【請求項３】
前記アドレス制御部は、さらに、
前記演算部に出力予定のデータを格納しているデータ格納レジスタが前記特定レジスタと同一のメモリブロックの異なるレジスタである場合にのみ、アドレス変換動作を有効とする情報を格納した情報格納部を含み、該情報格納部にアドレス変換動作を有効とする情報が格納されている場合にのみアドレス変換処理を行う構成であることを特徴とする請求項１に記載の演算処理装置。
【請求項４】
前記演算部は、暗号処理演算におけるモンゴメリ演算を実行する乗算器および加算器を含み、
前記メモリ部は、複数のメモリブロック中の２つのメモリブロックの特定レジスタを次期演算サイクルにおいて前記演算部に入力予定のモンゴメリ演算に適用するパラメータまたは中間値の格納予定領域として設定された構成であり、
前記アドレス制御部は、前記制御部からモンゴメリ演算に適用するパラメータまたは中間値の格納予定領域として設定された前記特定レジスタのアドレスを入力し、かつ、前記演算部に出力予定のデータを格納しているデータ格納レジスタが前記特定レジスタと同一のメモリブロックの異なるレジスタである場合において、前記制御部からの入力アドレスを前記データ格納レジスタの指定アドレスに変換して、該変換アドレスを前記メモリブロックに対する読み出しアドレスとして出力する構成を有することを特徴とする請求項１に記載の演算処理装置。
【請求項５】
前記演算処理装置は、下記モンプロ演算を実行する演算処理装置であり、
ＭｏｎＰｒｏ（ａ*，ｂ*）
ｔ＝ａ*×ｂ*
for  i = 0 to dl-1
ｍ＝ｔ0×Ｐ0'mod  ｒ
ｔ＝（ｔ＋ｍ×Ｐ）／ｒ
next i
if ｔ≧Ｐ  then  return  ｔ−Ｐ
else  return  ｔ
前記複数のメモリブロック中の２つのメモリブロックの特定レジスタには、前記モンプロ演算におけるパラメータａ*またはｂ*の格納予定レジスタとして設定された構成であることを特徴とする請求項４に記載の演算処理装置。
【請求項６】
演算処理方法であり、
演算部に対するデータ入出力制御を実行する制御部においてレジスタの指定アドレスを生成するアドレス生成ステップと、
前記制御部から予め定められた特定レジスタのアドレスを入力し、かつ、演算部に出力予定のデータを格納しているデータ格納レジスタが前記特定レジスタと同一のメモリブロックの異なるレジスタである場合において、前記制御部からの入力アドレスを前記データ格納レジスタの指定アドレスに変換して、該変換アドレスをメモリブロックに対する読み出しアドレスとして出力するアドレス制御ステップと、
前記アドレス制御ステップにおいて制御されたアドレスに基づいてメモリブロックのレジスタからデータを読み出し前記演算部に出力するデータ読み出しステップと、
を有することを特徴とする演算処理方法。
【請求項７】
前記アドレス制御ステップは、さらに、
前記制御部からの入力アドレスが予め定められた特定レジスタのアドレスと一致するか否かを検出する一致検出ステップと、
前記一致検出ステップにおける検出情報に基づいて、前記制御部からの入力アドレス、または予めラッチに格納した前記データ格納レジスタのアドレスのいずれかを選択して、前記メモリブロックに対する読み出しアドレスとして出力する出力切り替えステップと、
を有することを特徴とする請求項６に記載の演算処理方法。
【請求項８】
前記演算処理方法において、
前記演算部に出力予定のデータを格納しているデータ格納レジスタが前記特定レジスタと同一のメモリブロックの異なるレジスタである場合にのみ、前記アドレス制御ステップにおけるアドレス変換処理を行うことを特徴とする請求項６に記載の演算処理方法。
【請求項９】
前記アドレス制御ステップは、前記制御部からモンゴメリ演算に適用するパラメータまたは中間値の格納予定領域として設定された特定レジスタのアドレスを入力し、かつ、前記演算部に出力予定のデータを格納しているデータ格納レジスタが前記特定レジスタと同一のメモリブロックの異なるレジスタである場合において、前記制御部からの入力アドレスを前記データ格納レジスタの指定アドレスに変換して、該変換アドレスを前記メモリブロックに対する読み出しアドレスとして出力することを特徴とする請求項６に記載の演算処理方法。
【請求項１０】
前記演算処理方法は、下記モンプロ演算を実行する演算ステップを含み、
ＭｏｎＰｒｏ（ａ*，ｂ*）
ｔ＝ａ*×ｂ*
for  i = 0 to dl-1
ｍ＝ｔ0×Ｐ0'mod  ｒ
ｔ＝（ｔ＋ｍ×Ｐ）／ｒ
next i
if ｔ≧Ｐ  then  return  ｔ−Ｐ
else  return  ｔ
前記アドレス制御ステップは、前記制御部から前記モンプロ演算におけるパラメータａ*またはｂ*の格納予定領域として設定された特定レジスタのアドレスを入力し、かつ、前記演算部に出力予定のパラメータａ*またはｂ*の対応データを格納しているデータ格納レジスタが前記特定レジスタと同一のメモリブロックの異なるレジスタである場合において、前記制御部からの入力アドレスを前記データ格納レジスタの指定アドレスに変換して、該変換アドレスを前記メモリブロックに対する読み出しアドレスとして出力することを特徴とする請求項９に記載の演算処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算の高速化手法に関する。特に、演算パラメータや中間値をレジスタに格納し、演算プロセスにおいて、レジスタの格納値を取得して、取得値に基づいて演算プロセスの次ステップを実行する演算処理において、効率的なレジスタからのデータ取得を可能とすることにより演算の高速化を実現した演算処理装置、および演算処理方法に関する。
【背景技術】
【０００２】
例えば暗号処理等の演算処理においては、あるシーケンスに基づく演算処理を、パラメータや、前ステップで取得した中間値を用いて繰り返し実行する処理が多く行われる。このような演算処理を実行する場合、パラメータや中間値を格納するレジスタが用いられ、レジスタにパラメータや中間値を適宜、格納するとともに、必要に応じてレジスタ格納値を取得して演算プロセスが進行する。
【０００３】
例えば、公開鍵暗号方式として楕円曲線暗号（ＥＣＣ：Ellipitic Curve Cryptography）が知られているが、この暗号処理演算には、パラメータや中間値を格納するレジスタが用いられる。楕円曲線暗号は、１６０ｂｉｔの鍵でＲＳＡ１０２４ｂｉｔの鍵と同等の強度を持つと言われる。
【０００４】
一般に、楕円曲線暗号（Elliptic Curve Cryptography）は、素体上の楕円曲線ｙ２＝ｘ３＋ａｘ＋ｂ（４ａ３＋２７ｂ２≠０）や、２の拡大体上の楕円曲線ｙ２＋ｘｙ＝ｘ３＋ａｘ２＋ｂ（ｂ≠０）などを用いる。これらの曲線上の点に無限遠点（Ｏ）を加えた集合は、加法に関して有限群をなし、無限遠点（Ｏ）はその単位元となる。以下、この有限群上の点の加法を＋で表す。この有限群上の異なる２点Ｐ，Ｑの加算Ｐ＋Ｑを「点の加算」、点Ｐと点Ｐの加算Ｐ＋Ｐ＝２Ｐを「点の２倍算」と呼ぶ。また、点Ｐをｋ回加算した点Ｐ＋Ｐ＋…＋Ｐ＝ｋＰを求める演算を「点のスカラー倍算」と呼ぶ。
【０００５】
点のスカラー倍算は、点の加算、および点の２倍算を用いて構成できることが知られている。素体上の楕円曲線や２の拡大体上の楕円曲線上のアフィン座標系（ｘ，ｙ）や射影座標（Ｘ，Ｙ，Ｚ）における点の加算法、点の２倍算法、および点のスカラー倍算法は、ＩＥＥＥ  P1363/D13 Standard Specifications for Public Key Cryptographyに記されている。
【０００６】
また、素因数分解を行なうために導入された素体上のモンゴメリ型楕円曲線Ｂｙ２＝ｘ３＋Ａｘ２＋ｘ（（Ａ２−４）Ｂ≠０）を用いて点のスカラー倍算法を高速に行なう方法（P.Montgomery "Speeding the Pollard and Elliptic Curve Method of Factorization",Mathematics of Computation,Vol.48,No.177,pp.243-264(1987)）が提案されている。以下、この手法を素体上の楕円曲線におけるモンゴメリ法と呼ぶ。
【０００７】
この手法によれば、アフィン座標系において、異なる２点：Ｐ０（ｘ０，ｙ０），Ｐ１（ｘ１，ｙ１）の加算点を点Ｐ２＝Ｐ１＋Ｐ０とすると、Ｐ３（ｘ３，ｙ３）＝Ｐ１（ｘ１，ｙ１）−Ｐ０（ｘ０，ｙ０）が既知であれば、
ｘ２＝（ｘ０ｘ１−１）２／（ｘ３（ｘ０−ｘ１）２）
により、ｘ２を求めることができる。
【０００８】
また、点Ｐ０（ｘ０，ｙ０）の２倍算点を点Ｐ２（ｘ２，ｙ２）＝２Ｐ０とすると、
ｘ２＝（ｘ０２−１）２／（４ｘ０（ｘ０２＋Ａｘ０＋１））
により、ｘ２を求めることができる。このように、ｙ座標を用いないで、点の加算法、および点の２倍算法を構成することができる。
【０００９】
上述の楕円曲線暗号（ＥＣＣ）に基づく暗号化あるいは復号化に伴う演算処理を実行する場合、あるシーケンスに基づく演算処理を、パラメータや、前ステップで取得した中間値を用いて繰り返し実行する処理が多く行われる。レジスタは、複数の値を格納するため複数のデータ格納領域としての複数レジスタによって構成される。
【００１０】
このようなレジスタに対するデータ格納、レジスタからのデータ読み込みを繰り返し実行する演算処理においては、次の演算サイクルにおいてレジスタから読み出し予定のデータがレジスタの予定位置に格納されていない場合に、予定位置にデータコピー処理を行うことが必要となる。その結果、コピー処理に伴う処理時間が増大し、演算処理の遅延を発生させ、演算効率の低下を招くという問題があった。
【発明の開示】
【発明が解決しようとする課題】
【００１１】
本発明は、上記、問題点に鑑みてなされたものであり、レジスタに対するデータ格納、レジスタからのデータ読み込みを繰り返し実行する演算処理において、パラメータ、中間値の格納領域が予め定めた特定レジスタでない場合においても、アドレス制御を行うことで、レジスタからの効率的なデータ取得を可能とし、高速な演算処理を実現する演算処理装置、および演算処理方法を提供するものである。
【課題を解決するための手段】
【００１２】
本発明の第１の側面は、
データ格納領域としてのレジスタを複数有するメモリブロックを持つメモリ部と、前記レジスタの指定アドレスに基づいてレジスタから読み出されたデータを入力し、入力データに基づく演算処理を実行する演算部と、演算部に対するデータ入出力制御を実行する制御部とを有する演算処理装置において、
前記制御部からレジスタ指定アドレスを入力し、入力アドレスの変換処理を実行するアドレス制御部を有し、
前記アドレス制御部は、前記制御部から予め定められた特定レジスタのアドレスを入力し、かつ、前記演算部に出力予定のデータを格納しているデータ格納レジスタが前記特定レジスタと同一のメモリブロックの異なるレジスタである場合において、前記制御部からの入力アドレスを前記データ格納レジスタの指定アドレスに変換して、該変換アドレスを前記メモリブロックに対する読み出しアドレスとして出力する構成を有することを特徴とする演算処理装置にある。
【００１３】
さらに、本発明の演算処理装置の一実施態様において、前記アドレス制御部は、前記データ格納レジスタのアドレスを格納したラッチと、前記制御部からの入力アドレスが予め定められた特定レジスタのアドレスと一致するか否かを検出する一致検出部と、前記一致検出部の検出情報に基づいて、前記制御部からの入力アドレス、または前記ラッチに格納した前記データ格納レジスタのアドレスのいずれかを選択して、前記メモリブロックに対する読み出しアドレスとして出力するスイッチ手段と、を有することを特徴とする。
【００１４】
さらに、本発明の演算処理装置の一実施態様において、前記アドレス制御部は、さらに、前記演算部に出力予定のデータを格納しているデータ格納レジスタが前記特定レジスタと同一のメモリブロックの異なるレジスタである場合にのみ、アドレス変換動作を有効とする情報を格納した情報格納部を含み、該情報格納部にアドレス変換動作を有効とする情報が格納されている場合にのみアドレス変換処理を行う構成であることを特徴とする。
【００１５】
さらに、本発明の演算処理装置の一実施態様において、前記演算部は、暗号処理演算におけるモンゴメリ演算を実行する乗算器および加算器を含み、前記メモリ部は、複数のメモリブロック中の２つのメモリブロックの特定レジスタを次期演算サイクルにおいて前記演算部に入力予定のモンゴメリ演算に適用するパラメータまたは中間値の格納予定領域として設定された構成であり、前記アドレス制御部は、前記制御部からモンゴメリ演算に適用するパラメータまたは中間値の格納予定領域として設定された前記特定レジスタのアドレスを入力し、かつ、前記演算部に出力予定のデータを格納しているデータ格納レジスタが前記特定レジスタと同一のメモリブロックの異なるレジスタである場合において、前記制御部からの入力アドレスを前記データ格納レジスタの指定アドレスに変換して、該変換アドレスを前記メモリブロックに対する読み出しアドレスとして出力する構成を有することを特徴とする。
【００１６】
さらに、本発明の演算処理装置の一実施態様において、前記演算処理装置は、下記モンプロ演算を実行する演算処理装置であり、
ＭｏｎＰｒｏ（ａ*，ｂ*）
ｔ＝ａ*×ｂ*
for  i = 0 to dl-1
ｍ＝ｔ0×Ｐ0'mod  ｒ
ｔ＝（ｔ＋ｍ×Ｐ）／ｒ
next i
if ｔ≧Ｐ  then  return  ｔ−Ｐ
else  return  ｔ
前記複数のメモリブロック中の２つのメモリブロックの特定レジスタには、前記モンプロ演算におけるパラメータａ*またはｂ*の格納予定レジスタとして設定された構成であることを特徴とする。
【００１７】
さらに、本発明の第２の側面は、
演算処理方法であり、
演算部に対するデータ入出力制御を実行する制御部においてレジスタの指定アドレスを生成するアドレス生成ステップと、
前記制御部から予め定められた特定レジスタのアドレスを入力し、かつ、演算部に出力予定のデータを格納しているデータ格納レジスタが前記特定レジスタと同一のメモリブロックの異なるレジスタである場合において、前記制御部からの入力アドレスを前記データ格納レジスタの指定アドレスに変換して、該変換アドレスをメモリブロックに対する読み出しアドレスとして出力するアドレス制御ステップと、
前記アドレス制御ステップにおいて制御されたアドレスに基づいてメモリブロックのレジスタからデータを読み出し前記演算部に出力するデータ読み出しステップと、
を有することを特徴とする演算処理方法にある。
【００１８】
さらに、本発明の演算処理方法の一実施態様において、前記アドレス制御ステップは、さらに、前記制御部からの入力アドレスが予め定められた特定レジスタのアドレスと一致するか否かを検出する一致検出ステップと、前記一致検出ステップにおける検出情報に基づいて、前記制御部からの入力アドレス、または予めラッチに格納した前記データ格納レジスタのアドレスのいずれかを選択して、前記メモリブロックに対する読み出しアドレスとして出力する出力切り替えステップとを有することを特徴とする。
【００１９】
さらに、本発明の演算処理方法の一実施態様において、前記演算部に出力予定のデータを格納しているデータ格納レジスタが前記特定レジスタと同一のメモリブロックの異なるレジスタである場合にのみ、前記アドレス制御ステップにおけるアドレス変換処理を行うことを特徴とする。
【００２０】
さらに、本発明の演算処理方法の一実施態様において、前記アドレス制御ステップは、前記制御部からモンゴメリ演算に適用するパラメータまたは中間値の格納予定領域として設定された特定レジスタのアドレスを入力し、かつ、前記演算部に出力予定のデータを格納しているデータ格納レジスタが前記特定レジスタと同一のメモリブロックの異なるレジスタである場合において、前記制御部からの入力アドレスを前記データ格納レジスタの指定アドレスに変換して、該変換アドレスを前記メモリブロックに対する読み出しアドレスとして出力することを特徴とする。
【００２１】
さらに、本発明の演算処理方法の一実施態様において、下記モンプロ演算を実行する演算ステップを含み、
ＭｏｎＰｒｏ（ａ*，ｂ*）
ｔ＝ａ*×ｂ*
for  i = 0 to dl-1
ｍ＝ｔ0×Ｐ0'mod  ｒ
ｔ＝（ｔ＋ｍ×Ｐ）／ｒ
next i
if ｔ≧Ｐ  then  return  ｔ−Ｐ
else  return  ｔ
前記アドレス制御ステップは、前記制御部から前記モンプロ演算におけるパラメータａ*またはｂ*の格納予定領域として設定された特定レジスタのアドレスを入力し、かつ、前記演算部に出力予定のデータを格納しているデータ格納レジスタが前記特定レジスタと同一のメモリブロックの異なるレジスタである場合において、前記制御部からの入力アドレスを前記データ格納レジスタの指定アドレスに変換して、該変換アドレスを前記メモリブロックに対する読み出しアドレスとして出力することを特徴とする。
【発明の効果】
【００２２】
本発明の構成によれば、データ格納領域としてのレジスタを複数有するメモリブロックを持つメモリ部と、レジスタの指定アドレスに基づいてレジスタから読み出されたデータを入力し、入力データに基づく演算処理を実行する演算部と、演算部に対するデータ入出力制御を実行する制御部とを有する演算処理装置において、演算部に出力予定のデータを格納しているデータ格納レジスタが予め定めた特定レジスタと同一のメモリブロックの異なるレジスタである場合において、制御部からの入力アドレスをデータ格納レジスタの指定アドレスに変換して、該変換アドレスをメモリブロックに対する読み出しアドレスとして出力するアドレス制御処理を実行する構成としたので、予め定めた特定レジスタに対するデータコピー処理を削減してデータ読み出しおよび演算処理を実行することが可能となり、演算の高速化が実現される。
【００２３】
さらに、本発明の構成によれば、モンゴリ演算におけるモンプロ演算：ＭｏｎＰｒｏ（ａ*，ｂ*）の実行において、モンプロ演算におけるパラメータａ*またはｂ*の格納予定領域として設定された特定レジスタと異なるレジスタに、出力予定のパラメータａ*またはｂ*の対応データを格納している場合において、制御部からの入力アドレスを出力予定のパラメータａ*またはｂ*のデータ格納レジスタの指定アドレスに変換して、該変換アドレスを前記メモリブロックに対する読み出しアドレスとして出力する構成としたので、暗号処理演算において、複数回繰り返し実行されるモンプロ演算のデータコピー処理の削減が可能となり、暗号処理演算の高速化が実現される。
【発明を実施するための最良の形態】
【００２４】
以下、本発明の演算処理装置、および演算処理方法について詳細に説明する。
【００２５】
本発明は、レジスタに対するデータ格納、レジスタからのデータ読み込みを繰り返し実行する演算処理において、パラメータ、中間値の格納領域が予め定めた特定レジスタでない場合においても、アドレス制御を行うことで、レジスタからの効率的なデータ取得を可能とし、高速な演算処理を実現する演算処理装置、および演算処理方法を提供するものである。
【００２６】
以下では、レジスタを適用した演算処理の具体的な例として、公開鍵暗号方式における楕円曲線暗号（Elliptic Curve Cryptography）の演算処理を実行する場合の例について説明する。
【００２７】
暗号方式は、大きく分けるとメッセージの発信者と受信者が同じ鍵を用いる共通鍵暗号方式と、メッセージの発信者と受信者が異なる鍵を用いる公開鍵暗号方式とがある。両暗号方式には、以下の特徴がある。
共通鍵暗号：暗号化、復号化の速度が高速に行なわれる。
公開鍵暗号：演算が複雑で、鍵長が長いため、解読は非常に困難（離散対数問題）である。
【００２８】
現在では、両方式の利点を生かして、コンテンツの暗号化は共通鍵方式を用い、その鍵の受渡しに公開鍵暗号方式を用いるという使われ方が多い。公開鍵暗号方式では、金融系で古くから使われているＲＳＡ暗号と、ＲＳＡ暗号と同じセキュリティ強度をＲＳＡ暗号より短い鍵長で実現できる楕円曲線暗号の２つが代表的である。楕円曲線暗号では、鍵長が短いため、ＲＳＡ暗号に比べて演算時間が短いという特徴を持つ。近年、金融系とつながらないプラットフォームでの鍵の受け渡しや認証に用いる暗号方式として、楕円曲線暗号が注目されている。
【００２９】
例えば、楕円曲線上での鍵交換は、素数を"Ｐ"としたとき、楕円曲線
Ｅ：ｙ2＝ｘ3＋ａｘ＋ｂ  （ mod Ｐ ）
とＥ上の点"Ｇ"が定義されている状態で、発信者Ａと受信者Ｂが適当な数値"ｒ"と"ｓ"を発生させ
Ａさん：ｒＧを計算して、その座標をＢさんに送る。
Ｂさん：ｓＧを計算して、その座標をＡさんに送る。
お互いの座標を受け取った後、
Ａさん：ｒ（ｓＧ）＝ｒｓＧを計算。
Ｂさん：ｓ（ｒＧ）＝ｓｒＧを計算。
を計算する事により、Ａさん・Ｂさんは共通の鍵"ｒｓＧ"を得る。悪意の第３者が、送信データ"ｒＧ"，"ｓＧ"を得ても、それから"ｒｓＧ"を得るのは事実上不可能である。
【００３０】
楕円上の演算式としては、次の２つが定義されている。
２倍算：（ｘ2，ｙ2）＝２（ｘ1，ｙ1）
ｘ2＝α2−２ｘ1
ｙ2＝−ｙ1＋α(ｘ1―ｘ2)
ただし、α＝（３ｘ12＋ａ）／２ｙ1
加算：（ｘ3，ｙ3）＝（ｘ2，ｙ2）＋（ｘ1，ｙ1）
ｘ3＝α2−ｘ1−ｘ2
ｙ2＝−ｙ1＋α(ｘ1―ｘ3)
ただし、α＝（ｙ2−ｙ1）／（ｘ2−ｘ1）
【００３１】
この２つの演算を用いれば、楕円上の点のスカラー倍演算は可能となる。例えば剰余数がＬ[bit]の場合
Ｗ＝ｓＧ  （ｓ＝Σi=0L-1ｓi・２i ）
の計算は、
Ｗ＝Ｇ
for i = L-1 to 0
Ｗ：＝２×Ｗ
if  si＝1  then Ｗ：＝Ｗ＋Ｇ
next i
となる。
【００３２】
例えば、２００Ｇの演算は、
２００Ｇ＝２{２{２{２{２{２{２Ｇ＋Ｇ}}}＋Ｇ}}}
で計算される。
【００３３】
しかし、実際の演算では、２倍算、加算の度に逆数演算が必要となり、これには Euclid 互除法またはベキ乗剰余演算が用いられるが、この演算には多くの演算サイクルが必要となる。このため、通常は、３次元のＪａｃｏｂｉａｎ（ヤコビアン）座標上に展開してスカラー倍演算を行ない、最後に２次元のＡｆｆｉｎ（アフィン）座標に戻すという手法が採られている。Ａｆｆｉｎ座標（ｘ，ｙ）からＪａｃｏｂｉａｎ座標（Ｘ，Ｙ，Ｚ）への展開は、下記関係式により行なわれる。
【００３４】
ｘ＝Ｘ／Ｚ2    ・・（数式１）
ｙ＝Ｙ／Ｚ3    ・・（数式２）
ここで、Ｚ＝１とおくと、
（Ｘ，Ｙ，Ｚ）＝（ｘ，ｙ，１）
となり、Ｊａｃｏｂｉａｎ座標への展開ができる。
【００３５】
Ｊａｃｏｂｉａｎ座標上での２倍算、加算の式は、以下に示される式となる。
【００３６】
２倍算：（Ｘ2，Ｙ2，Ｚ2）＝２（Ｘ1，Ｙ1，Ｚ1）
Ｘ2＝Ｍ2−２Ｕ      （modＰ）・・（数式３）
Ｙ2＝−８Ｙ4＋Ｍ（Ｕ−Ｘ2 ）    （modＰ）・・（数式４）
Ｚ2＝２Ｙ1Ｚ1      （modＰ）・・（数式５）
ただし、Ｍ＝３Ｘ12＋ａＺ14，Ｕ＝４Ｘ1Ｙ12
【００３７】
加算：（Ｘ3，Ｙ3，Ｚ3）＝（Ｘ2，Ｙ2，Ｚ2）＋（Ｘ1，Ｙ1，Ｚ1）
Ｘ3＝Ｒ2−ＴＷ2    （modＰ）・・（数式６）
Ｙ3＝{ Ｒ(ＴＷ2−２Ｘ3)−ＳＷ3 }／２  （modＰ）・・（数式７）
Ｚ3＝Ｚ1Ｚ2Ｗ      （modＰ）・・（数式８）
ただし、Ｒ＝Ｙ2Ｚ13−Ｙ1Ｚ23 ，Ｓ＝Ｙ2Ｚ13＋Ｙ1Ｚ23
Ｗ＝Ｘ2Ｚ12−Ｘ1Ｚ22 ，Ｔ＝Ｘ2Ｚ12＋Ｘ1Ｚ22
と定義できる。
【００３８】
これを用いて、スカラー倍演算を行ない、最後に、(数式１)、(数式２)に基づいてＡｆｆｉｎ座標への逆変換を行なう。この時、Ｚの逆数を求める必要があるが、これは、スカラー倍演算で１回行なえばよく、Ａｆｆｉｎ座標上でスカラー倍演算を行なう場合に比べて、演算に要するサイクル数は大幅に少なくてすむ。
【００３９】
上述の（数式３）〜（数式８）の演算における、素数"Ｐ"による剰余演算は、バレット（Barret）法やモンゴメリ（Montgomery）法を適用して、演算サイクル数を削減し、演算時間の削減をはかることが可能である。
【００４０】
モンゴメリ（Montgoemry）法を用いた乗算剰余演算では、例えば、
ｃ＝ａ×ｂ  mod Ｐの計算を行なう場合、Ｐより大きい値"Ｒ"（通常、２のベキ乗値）を定義し、
Ｒ・Ｒ-1−Ｐ・Ｐ'＝１・・・（数式９）
を満たす値"Ｐ'"を求めておく。
【００４１】
この時、乗算剰余演算は、
ａ*＝ａ×Ｒ  mod Ｐ・・・（数式１０）
ｂ*＝ｂ×Ｒ  mod Ｐ・・・（数式１１）
ｃ*＝MonPro（ａ*，ｂ*）・・（数式１２）
ｃ ＝MonPro（ｃ*，１）・・（数式１３）
として行なわれる。
【００４２】
乗算剰余のみだと効率が悪いが、「楕円曲線上の点のスカラー倍演算」等に適用する場合、例えば、
Ｗ＝ｓＧ（ｓ＝Σi=0L-1ｓi・２i ）
を計算する場合、
Ｘg*＝ｘg・ｒ  mod  Ｐ
Ｙg*＝ｙg・ｒ  mod  Ｐ
Ｚg*＝ １・ｒ  mod  Ｐ
Ｗ*＝（Ｘw*，Ｙw*，Ｚw*）＝Ｇ*＝（Ｘg*，Ｙg*，Ｚg*）
for i = L-1 to 0
Ｗ*：＝２×Ｗ*
if  si＝1  then Ｗ*：＝Ｗ*＋Ｇ*
next i
Ｘw＝MonPro（Ｘw*，１）
Ｙw＝MonPro（Ｙw*，１）
Ｚw＝MonPro（Ｚw*，１）
ｘw＝Ｘw／Ｚw2  mod  Ｐ
ｙw＝Ｙw／Ｚw3  mod  Ｐ
の様に、演算サイクル数の大部分を占めるループの前と後にパラメータの変換を行ない、ループ内はパラメータ変換した値でモンゴメリ（Montgomery）演算を実行することにより、演算サイクル数が格段に削減できる。
【００４３】
この演算で使われているモンプロ（MonPro）関数は、以下の様に定義される。
MonPro（ａ*，ｂ*）・・・（数式１４）
ｔ＝ａ*×ｂ*
ｍ＝ｔ×Ｐ'  mod  Ｒ
ｕ＝（ｔ＋ｍ×Ｐ）／Ｒ
if  ｕ≧Ｐ  then  return  ｕ−Ｐ
else  return  ｕ
【００４４】
または、乗算器のデータ幅をｒ[bit]，データ幅をdl[word：=ｒbit]とした時、
MonPro（ａ*，ｂ*）・・・（数式１５）
ｔ＝ａ*×ｂ*
for  i = 0 to dl-1
ｍ＝ｔ0×Ｐ0'mod  ｒ
ｔ＝（ｔ＋ｍ×Ｐ）／ｒ
next i
if ｔ≧Ｐ  then  return  ｔ−Ｐ
else  return  ｔ
で定義される。
【００４５】
上記（数式１５）で、ｔ0 ，Ｐ' 0はｔ，Ｐ'の０ワード目の値を示す。この演算は、ソフトウェアで規定した演算プログラムで実現する方法と、ハードウェアで実現する方法がある。ＣＰＵパワーの無い携帯機器への搭載や、高いセキュリティが必要とされる機器への搭載は、ハードウェアで実現するのが望ましい。
【００４６】
上記の（数式１５）で示されるモンゴメリ（Montgomery）演算におけるモンプロ（MonPro）関数MonPro（ａ*，ｂ*）の演算を実行する本発明に係る演算処理装置のハードウェア構成例を図１に示す。
【００４７】
演算処理装置は、メモリ部１１０、演算部１５０を有し、演算部に入力するデータがメモリ部１１０のレジスタ群のいずれかに格納され、図示しない制御部からのアドレス信号に応じてレジスタからデータが取得され、メモリバススイッチ回路１３０、およびバスを介して演算部１５０に入力され、演算部１５０での演算がなされ、その結果が、バスおよびメモリバススイッチ回路１３０を介してメモリ部１１０内のレジスタに格納される。
【００４８】
本発明の演算処理装置は、さらにアドレス制御回路２００を有し、図示しない制御回路からのアドレスデータを変換して各メモリブロックに出力する。
【００４９】
上述のモンゴメリ（Montgomery）演算では、複数回のMonPro（ａ*，ｂ*）演算を繰り返し実行することになり、各MonPro（ａ*，ｂ*）演算毎にレジスタからのデータ取得、レジスタに対するデータ格納処理が実行される。
【００５０】
演算部１５０は、乗算器１５２と加算器１５４，１５７、演算のパラメータや途中結果を格納するラッチ１５１，１５３，１５５，１５６，１５８および、これらを制御する図示しないコントロール回路で構成される。
【００５１】
メモリ部１１０は、６個の単位データ格納領域としてのレジスタを有する４つのメモリブロック：メモリ０，１２０、メモリ１，１２１、メモリ２，１２２、メモリ３，１２３を有する。各メモリブロックは行デコーダ、列デコーダを有し、行デコーダが、入力アドレスに基づいて指定レジスタを選択し、指定レジスタから所定ワード単位のデータを列レジスタを介してメモリバススイッチ回路によって接続されたバスに出力、またはバスからのデータ入力を行う。例えばアドレスは、アドレスＡ０〜Ａ５によって構成され、レジスタ選択は、図示しない制御部から行デコーダに入力されるアドレスＡ３〜Ａ５を用いて実行され、多倍長データのワード選択は、図示しない制御部から列デコーダに入力されるアドレスＡ０〜Ａ２を用いて行われる。
【００５２】
多倍長の乗算演算では乗数と被乗数の乗算器への設定と、乗算結果の取出しを行なう必要があるため、少なくとも３つのメモリブロックが必要である。多倍長の加算演算でも同様に３つのメモリブロックが必要となる。例えば、４つのメモリブロックを用いて演算を行なう場合、演算のフローの中で保持しておく中間値を含めた最も多いデータの個数を元に必要なデータ容量を設定する。図１は、楕円曲線上の演算で最も多いデータの個数が２４個の場合の構成である。
【００５３】
この構成で、例えば、メモリ１，１２１のレジスタ９（ｒｅｇ．９）の格納値と、メモリ３，１２３のレジスタ１５（ｒｅｇ．１５）の格納値とを演算部１５０に出力し、乗算処理を実行し、その結果をメモリ０，１２０のレジスタ４（ｒｅｇ．４）とレジスタ８（ｒｅｇ．８）に分割して格納する場合、すなわち、
（reg.9）×（reg.15）＝（reg.8, reg.4）
の多倍長乗算を実行する場合の処理例について説明する。
【００５４】
まず、本発明の特徴であるアドレス制御回路２００を持たない場合の処理例について、説明し、その後、アドレス制御回路２００によるアドレス制御を実行した場合の処理例について説明する。
【００５５】
（reg.9）×（reg.15）＝（reg.8, reg.4）
の多倍長乗算を実行する場合、図示しない制御部からの制御信号に基づいてメモリバススイッチ回路１３０を制御して、メモリ１とバス０、メモリ３とバス１、メモリ０とバス３を接続する。
【００５６】
次に、多倍長の乗算フローにしたがって、図示しない制御部において、メモリ１，１２１のレジスタ９（ｒｅｇ．９）の格納値と、メモリ３，１２３のレジスタ１５（ｒｅｇ．１５）の格納値とを取り出すためのアドレス１とアドレス３を発生させてメモリバススイッチ回路１３０および各バスを介して、演算部１５０の乗算器１５２前段のラッチ１５１に格納し、乗算処理を開始する。
【００５７】
なお、演算部１５０において、乗算器の入力として、レジスタ９（ｒｅｇ．９）の格納値とレジスタ１５（ｒｅｇ．１５）の格納値が設定され、乗算処理がなされた結果は、バス３およびメモリバススイッチ回路１３０を介して、メモリ０，１２０に入力され、アドレス制御回路からのアドレス（アドレス０）に従って指定されたレジスタ（ｒｅｇ．８，ｒｅｇ．４）に乗算結果が格納される。
【００５８】
Ｊａｃｏｂｉａｎ座標上での演算では、複数回のモンゴメリ（Montgomery）演算が必要となる。この演算を実現する手法として、多数回用いられるモンゴメリ（Montgomery）演算を関数化して必要に応じて呼び出す構成を採ることで回路規模は削減される。ただし、演算パラメータすなわち、モンゴメリ（Montgomery）演算において実行するモンプロ関数のパラメータ（MonPro(ａ*, ｂ*)の、ａ*, ｂ*）をセットするレジスタ位置は固定されることになる。
【００５９】
例えばメモリ部１１０のレジスタ０（ｒｅｇ．０）〜レジスタ７（ｒｅｇ．７）をモンゴメリ（Montgomery）演算におけるモンプロ関数：ｃ*＝MonPro（ａ*,ｂ*）のパラメータ及び演算途中結果としての中間値を格納する場所に設定する。
【００６０】
具体例として、パラメータ"ａ*"と"ｂ*"の格納場所をレジスタ５（ｒｅｇ．５）とレジスタ６（ｒｅｇ．６）に固定し、演算結果ｃ*の格納場所を同じレジスタ５（ｒｅｇ．５）とレジスタ６（ｒｅｇ．６）になる様な設計である場合を想定する。
【００６１】
パラメータ"ａ*"と"ｂ*"の格納場所をレジスタ５（ｒｅｇ．５）とレジスタ６（ｒｅｇ．６）に固定することで、パラメータ"ａ*"と"ｂ*"を適用したモンプロ関数：ｃ*＝MonPro（ａ*,ｂ*）を演算部１５０において実行する場合、常に一定のアドレスを適用してデータ取り出しを実行することが可能となる。
【００６２】
前の演算サイクルにおける計算結果は、メモリ０，１２０〜メモリ３，１２３の２４個のレジスタのいずれかのレジスタに格納されることになるので、その格納値をパラメータ"ａ*"と"ｂ*"の格納場所として設定されたレジスタ５（ｒｅｇ．５）とレジスタ６（ｒｅｇ．６）にコピーする処理が必要となる。
【００６３】
例えば、図２に示す様に、演算に用いる２つのデータがメモリ０のレジスタ１２（ｒｅｇ．１２）とメモリ３のレジスタ１９（ｒｅｇ．１９）にある場合、これらの２つのデータを、パラメータ"ａ*"と"ｂ*"の格納場所として設定されたレジスタ５（ｒｅｇ．５）とレジスタ６（ｒｅｇ．６）にコピーする処理が必要となる。
【００６４】
図２に示す様にコピー処理の必要なデータが異なるメモリブロックに格納されている場合、メモリ０のレジスタ１２（ｒｅｇ．１２）からメモリ１のレジスタ５（ｒｅｇ．５）に対するデータコピー処理と、メモリ３のレジスタ１９（ｒｅｇ．１９）からメモリ２のレジスタ６（ｒｅｇ．６）に対するデータコピー処理とは、並行して実行することができるため、コピーはデータのワード数分のサイクル数程度で終了する。
【００６５】
なお、各メモリブロックにおいて、データ読み取り処理、書き込み処理は１つのサイクルで１つの処理、すなわち１ワードデータの読み取りあるいは１ワードデータの書き込み処理が実行可能である。異なるメモリブロックにおけるデータ読み取りまたは書き込み処理は並列に実行できる。
【００６６】
従って、例えば図３に示すように、次の演算サイクルに用いるデータのうち、少なくとも一方が、コピー先、すなわち、パラメータ"ａ*"と"ｂ*"の格納場所として設定されたレジスタ５（ｒｅｇ．５）とレジスタ６（ｒｅｇ．６）と同一のメモリブロックにある場合にはデータコピー処理に長い処理サイクルが必要となる。
【００６７】
図３において、メモリ２にはコピー先であるレジスタ６（ｒｅｇ．６）と、コピー元データの格納されたレジスタ１４（ｒｅｇ．１４）が含まれる。
【００６８】
この場合、メモリ２のデータ読み取りとデータ書き込みは同一の処理サイクルでは並列に実行できないため、データ読み取り処理とデータ書き込み処理をシーケンシャルに実行しなければならない。例えば、レジスタ１４（ｒｅｇ．１４）からのデータ読み取り処理を伴うレジスタ１４（ｒｅｇ．１４）からレジスタ５（ｒｅｇ．５）へのデータコピー処理の終了後、レジスタ１９（ｒｅｇ．１９）からレジスタ６（ｒｅｇ．６）へのデータコピー処理を実行することが必要となり、図２に示すようなデータ格納態様の場合に比べて２倍のサイクル数を要することになる。
【００６９】
また、図４に示すように、次の演算サイクルに用いるデータの両者が、コピー先、すなわち、パラメータ"ａ*"と"ｂ*"の格納場所として設定されたレジスタ５（ｒｅｇ．５）とレジスタ６（ｒｅｇ．６）と同一のメモリブロックにある場合にも、同様にデータコピー処理に長い処理サイクルが必要となる。
【００７０】
図４において、メモリ２にはコピー先であるレジスタ６（ｒｅｇ．６）と、コピー元データの格納されたレジスタ１４（ｒｅｇ．１４）が含まれ、メモリ１にはコピー先であるレジスタ５（ｒｅｇ．５）と、コピー元データの格納されたレジスタ１７（ｒｅｇ．１７）が含まれる。
【００７１】
この場合、メモリ２のデータ読み取りとデータ書き込みは同一の処理サイクルでは並列に実行できず、また、メモリ１のデータ読み取りとデータ書き込みも同一の処理サイクルでは並列に実行できない。従って、これらの複数のデータ読み取り処理とデータ書き込み処理をシーケンシャルに実行しなければならない。
【００７２】
例えば、レジスタ１４（ｒｅｇ．１４）からのデータ読み取り処理を伴うレジスタ１４（ｒｅｇ．１４）からレジスタ５（ｒｅｇ．５）へのデータコピー処理の終了後、レジスタ１７（ｒｅｇ．１７）からレジスタ６（ｒｅｇ．６）へのデータコピー処理を実行することが必要となり、図２に示すようなデータ格納態様の場合に比べて２倍のサイクル数を要することになる。
【００７３】
座標のスカラー倍演算では、座標の２倍算演算・加算演算は、剰余数"Ｐ"のビット幅の回数（例えば、剰余数"Ｐ"が１６０[bit]の場合、１６０回）分、繰返されるため、コピー処理回数の増大による演算サイクル数の増加の影響が多大となる。
【００７４】
本発明では、これらのデータ格納領域に基づくコピー処理による演算サイクルの増大、演算遅延を排除するために、アドレス制御回路２００により、アドレスの変換を行う。本発明の構成に従うことにより、演算サイクル数の削減、高速演算が可能となる。
【００７５】
本発明においては、演算部１５０の制御を実行する制御部（図示せず）において生成し、メモリブロックへ出力するアドレスを変換するアドレス制御回路２００を設けた。アドレス制御回路２００の内部構成を図５、図６を参照して説明する。
【００７６】
図５に示すように、アドレス制御回路２００は、４つのメモリブロック中、パラメータ"ａ*"と"ｂ*"の格納場所として設定されたレジスタ５（ｒｅｇ．５）とレジスタ６（ｒｅｇ．６）を有する２つのメモリブロック、すなわちメモリ１，１２１と、メモリ２，１２２に出力するアドレスを必要に応じて変換して出力する２つのアドレス変換部２１０，２２０を有する。
【００７７】
それぞれのアドレス変換部２１０，２２０は、各々アドレス設定のラッチ回路２１１，２２１と一致検出回路２１２，２２２、及びアドレス切換回路２１３，２２３で構成される。１つのアドレス変換回路の具体的回路構成例を図６に示す。
【００７８】
アドレスは、前述したように、アドレスＡ５〜Ａ０によって構成され、図示しない制御部からアドレスＡ５ｃ〜Ａ３ｃがアドレス制御回路の各アドレス変換部に入力され、必要に応じて変換され、変換アドレスＡ５ｍ〜Ａ３ｍが、行デコーダに入力され、レジスタ選択アドレスとして適用される。また、多倍長データのワード選択は、図示しない制御部から列デコーダに入力されるアドレスＡ０〜Ａ２を用いて行われる。
【００７９】
楕円曲線暗号の演算においても、モンゴメリ（Montgomery）演算におけるモンプロ関数：ｃ*＝MonPro（ａ*,ｂ*）は繰り返し実行される。パラメータ"ａ*"と"ｂ*"の格納場所は、メモリ１，１２１と、メモリ２，１２２のレジスタ５（ｒｅｇ．５）とレジスタ６（ｒｅｇ．６）に設定され、パラメータ"ａ*"と"ｂ*"を適用した演算サイクルの開始毎に、パラメータ"ａ*"と"ｂ*"の読み出しアドレス、すなわち、Ａ３ｃ〜Ａ５ｃ＝００１が、制御部からアドレス制御回路２００に入力される。
【００８０】
アドレス制御回路２００は、制御部から入力されるパラメータ"ａ*"と"ｂ*"の読み出しアドレス、すなわち、Ａ５ｃ〜Ａ３ｃ＝００１を必要に応じて変換し、メモリ１，１２１と、メモリ２，１２２の行デコーダに出力する。具体的には、パラメータ"ａ*"または"ｂ*"が、メモリ１，１２１と、メモリ２，１２２のパラメータ"ａ*"と"ｂ*"の格納レジスタ（アドレス（Ａ５，Ａ４，Ａ３）＝（００１））と異なるアドレスのレジスタ位置に格納されている場合に、制御部から入力されるパラメータ"ａ*"と"ｂ*"の読み出しアドレス、すなわち、Ａ５ｃ〜Ａ３ｃ＝００１を、実際にパラメータ"ａ*"または"ｂ*"が格納されているレジスタを指定するアドレスに変換してメモリ１，１２１と、メモリ２，１２２の行デコーダに出力する。
【００８１】
ラッチ２１１のＡ５＿Ｌ３１４〜Ａ３＿Ｌ３１２は、以前の演算サイクルにおいて演算部１５０において算出され、次の演算サイクルにおいて適用するパラメータ"ａ*"または"ｂ*"が、メモリ１，１２１または、メモリ２，１２２に格納されている場合に、そのレジスタアドレスを設定するラッチである。
【００８２】
ＵＳＥ３１１は、この回路ブロックを機能させるか否かの設定を行なうラッチであり、機能させる場合には"１"、させない場合は"０"をセットする。
【００８３】
アドレス変換部の動作態様には、次の３つの態様がある。
（ａ）ラッチ２１１のＵＳＥ３１１に"０"が保持されている場合
（ｂ）ラッチ２１１のＵＳＥ３１１に"１"が保持され、制御部（コントローラ）からのアドレス信号（Ａ５ｃ，Ａ４ｃ，Ａ３ｃ）が、パラメータ"ａ*"または"ｂ*"の格納場所であるレジスタ５（ｒｅｇ．５）またはレジスタ６（ｒｅｇ．６）の指定アドレス（００１）と異なる場合
（ｃ）ラッチ２１１のＵＳＥ３１１に"１"が保持され、制御部（コントローラ）からのアドレス信号（Ａ５ｃ，Ａ４ｃ，Ａ３ｃ）が、パラメータ"ａ*"または"ｂ*"の格納場所であるレジスタ５（ｒｅｇ．５）またはレジスタ６（ｒｅｇ．６）の指定アドレス（００１）である場合
【００８４】
以下、これらの３つの場合におけるアドレス変換部の動作について説明する。
（ａ）ラッチ２１１のＵＳＥ３１１に"０"が保持されている場合
ラッチ２１１のＵＳＥ３１１に"０"が保持されている場合、反転回路３３４によって反転された信号"１"がＯＲ回路３３５に入力され、ＯＲ回路３３５の出力は１となり、スイッチ回路２１３のスイッチ素子３４１，３４２，３４３がＯＮとなり、スイッチ回路２１３は、制御部（コントローラ）から入力されるアドレス信号Ａ５ｃ〜Ａ３ｃをそのまま、パラメータ"ａ*"と"ｂ*"の格納場所であるレジスタ５（ｒｅｇ．５）とレジスタ６（ｒｅｇ．６）を有するメモリブロックであるメモリ１，１２１と、メモリ２，１２２に対するレジスタ指定アドレスＡ５ｍ〜Ａ３ｍとして、各メモリブロックの行デコーダに出力する。この場合は、制御部（コントローラ）で指定されたレジスタが指定される。
【００８５】
なお、スイッチ回路２１３は、ＯＲ回路３３５の出力が１の場合には、スイッチ素子３４３，３４２，３４１をＯＮとし、制御部（コントローラ）からのアドレス（Ａ５ｃ，Ａ４ｃ，Ａ３ｃ）をメモリに対するレジスタ指定アドレス（Ａ５ｍ，Ａ４ｍ，Ａ３ｍ）として出力し、ＯＲ回路３３５の出力が０の場合には、スイッチ素子３４６，３４５，３４４をＯＮとし、ラッチ２１１のＡ３＿Ｌ３１２〜Ａ５＿Ｌ３１４の格納アドレスをメモリに対するレジスタ指定アドレス（Ａ５ｍ，Ａ４ｍ，Ａ３ｍ）として出力する。
【００８６】
（ｂ）ラッチ２１１のＵＳＥ３１１に"１"が保持され、制御部（コントローラ）からのアドレス信号（Ａ５ｃ，Ａ４ｃ，Ａ３ｃ）が、パラメータ"ａ*"または"ｂ*"の格納場所であるレジスタ５（ｒｅｇ．５）またはレジスタ６（ｒｅｇ．６）の指定アドレス（００１）と異なる場合
【００８７】
ラッチ２１１のＵＳＥ３１１に"１"が保持されている場合、反転回路３３４によって反転された信号"０"がＯＲ回路３３５に入力される。制御部（コントローラ）からのアドレス信号（Ａ５ｃ，Ａ４ｃ，Ａ３ｃ）が、パラメータ"ａ*"または"ｂ*"の格納場所であるレジスタ５（ｒｅｇ．５）またはレジスタ６（ｒｅｇ．６）の指定アドレス（００１）と異なる場合、すなわち、（Ａ５ｃ，Ａ４ｃ，Ａ３ｃ）≠（０，０，１）の場合、ＥＯＲ回路３３１，３３２，３３３の出力のうち、少なくとも１つは"１"となる。
【００８８】
なお、ＥＯＲ回路３３１，３３２，３３３の一方の入力には、予めパラメータ"ａ*"または"ｂ*"の格納場所であるレジスタ５（ｒｅｇ．５）またはレジスタ６（ｒｅｇ．６）の指定アドレス（００１）に対応する値を入力とする設定がなされている。ＥＯＲ入力データ設定部３２１〜３２３の設定が、アドレス（００１）に対応する値を入力とする設定がなされている。
【００８９】
従って、制御部（コントローラ）からのアドレス信号（Ａ５ｃ，Ａ４ｃ，Ａ３ｃ）が、パラメータ"ａ*"または"ｂ*"の格納場所であるレジスタ５（ｒｅｇ．５）またはレジスタ６（ｒｅｇ．６）の指定アドレス（００１）と異なる場合、すなわち、（Ａ５ｃ，Ａ４ｃ，Ａ３ｃ）≠（０，０，１）の場合、ＥＯＲ回路３３１，３３２，３３３の出力のうち、少なくとも１つは"１"となる。
【００９０】
その結果、ＯＲ回路３３５の出力は、"１"、すなわち、一致検出部２１２の出力が"１"となり、上述の（ａ）の場合と同様、スイッチ回路２１３のスイッチ素子３４３，３４２，３４１がＯＮとなり、スイッチ回路２１３は、制御部（コントローラ）から入力されるアドレス信号Ａ５ｃ〜Ａ３ｃをそのまま、パラメータ"ａ*"と"ｂ*"の格納場所であるレジスタ５（ｒｅｇ．５）とレジスタ６（ｒｅｇ．６）を有するメモリブロックであるメモリ１，１２１と、メモリ２，１２２に対するレジスタ指定アドレスＡ５ｍ〜Ａ３ｍとして、各メモリブロックの行デコーダに出力する。この場合は、制御部（コントローラ）で指定されたレジスタが指定される。
【００９１】
（ｃ）ラッチ２１１のＵＳＥ３１１に"１"が保持され、制御部（コントローラ）からのアドレス信号（Ａ５ｃ，Ａ４ｃ，Ａ３ｃ）が、パラメータ"ａ*"または"ｂ*"の格納場所であるレジスタ５（ｒｅｇ．５）またはレジスタ６（ｒｅｇ．６）の指定アドレス（００１）である場合
【００９２】
ラッチ２１１のＵＳＥ３１１に"１"が保持されている場合、反転回路３３４によって反転された信号"０"がＯＲ回路３３５に入力される。制御部（コントローラ）からのアドレス信号（Ａ５ｃ，Ａ４ｃ，Ａ３ｃ）が、パラメータ"ａ*"または"ｂ*"の格納場所であるレジスタ５（ｒｅｇ．５）またはレジスタ６（ｒｅｇ．６）の指定アドレス（００１）と一致する場合、すなわち、（Ａ５ｃ，Ａ４ｃ，Ａ３ｃ）＝（０，０，１）の場合、ＥＯＲ回路３３３，３３２，３３１の出力は全て"０"となる。
【００９３】
その結果、ＯＲ回路３３５の出力は、"０"、すなわち、一致検出部２１２の出力が"０"となる。従って、スイッチ回路２１３のスイッチ素子３４６，３４５，３４４がＯＮとなり、スイッチ回路２１３は、ラッチ２１１のＡ５＿Ｌ３１４〜Ａ３＿Ｌ３１２の格納アドレスをメモリに対するレジスタ指定アドレス（Ａ５ｍ，Ａ４ｍ，Ａ３ｍ）として、各メモリブロックの行デコーダに出力する。この場合は、ラッチ２１１のＡ５＿Ｌ３１４〜Ａ３＿Ｌ３１２の格納アドレスからのデータ読み出しが実行される。
【００９４】
図７、図８を参照してアドレス制御回路２００における具体的なアドレス変換処理および、アドレス変換処理によって変換されたアドレスによるデータ読み出し処理について説明する。
【００９５】
図７は、先に図３を参照して説明したと同様のデータ格納状態、すなわち、次の演算サイクルに用いるデータのうち、一方のデータが、パラメータ"ａ*"と"ｂ*"の格納場所として設定されたレジスタ５（ｒｅｇ．５）とレジスタ６（ｒｅｇ．６）と同一のメモリブロックのレジスタに格納された状態である。メモリ２のレジスタ１４（ｒｅｇ．１４）に次の演算サイクルに用いるデータのうち、一方のデータが格納されている。他方のデータは、メモリ３のレジスタ１９（ｒｅｇ．１９）に格納されている。
【００９６】
図８は、先に図４を参照して説明したと同様のデータ格納状態、すなわち、次の演算サイクルに用いる２つのデータが、パラメータ"ａ*"と"ｂ*"の格納場所として設定されたレジスタ５（ｒｅｇ．５）とレジスタ６（ｒｅｇ．６）と同一のメモリブロックのレジスタに格納された状態である。メモリ２のレジスタ１４（ｒｅｇ．１４）に次の演算サイクルに用いるデータのうち、一方のデータが格納され、他方のデータがメモリ１のレジスタ１７（ｒｅｇ．１７）に格納されている。
【００９７】
従来方式によれば、この２つの状態では、２つのデータコピー処理をシーケンシャルに実行することが必要となるため、処理遅延を招き高速演算処理の妨げとなっていた。本発明のアドレス変換を伴う処理では、最大１回のデータコピー処理のみを実行することで、データのセットを実行し、次の演算サイクルに移行することが可能となる。
【００９８】
なお、乗算処理あるいは加算処理等の演算処理、例えば上述したモンゴメリ（Montgomery）演算では、（数式１４）、（数式１５）から理解されるように、"ａ*","ｂ*"はそのセット位置、すなわち乗算データと被乗算データの立場が入れ替わっても結果に影響を与えない。
【００９９】
まず、図７を参照して、次の演算サイクルに用いるデータのうち、一方のデータが、パラメータ"ａ*"と"ｂ*"の格納場所として設定されたレジスタ５（ｒｅｇ．５）とレジスタ６（ｒｅｇ．６）と同一のメモリブロックのレジスタに格納された状態にある場合の処理シーケンスを説明する。
【０１００】
処理シーケンスは次のようになる。
ステップＳ１０１：メモリ３のレジスタ１９（ｒｅｇ．１９）のデータをメモリ１のレジスタ５（ｒｅｇ．５）にコピーする。
ステップＳ１０２：メモリ１に対応するアドレス変換部２２０（図５参照）のラッチ２２１のＵＳＥに不使用を示すデータ"０"をセットし、メモリ２に対応するアドレス変換部２１０のラッチ２１１のＵＳＥに使用を示すデータ"１"をセットし、（Ａ５＿Ｌ，Ａ４＿Ｌ，Ａ３＿Ｌ）に、レジスタ１４（ｒｅｇ．１４）に対応するアドレスデータ（０，１，１）を設定する。
【０１０１】
ステップＳ１０３ａ：メモリ１に対応するアドレス変換部のアドレス一致検出部２２２の出力、すなわち図６に示すＯＲ回路３３５の出力は１となり、スイッチ回路２１３のスイッチ素子３４３，３４２，３４１がＯＮとなり、スイッチ回路２１３は、制御部（コントローラ）から入力されるアドレス信号Ａ５ｃ〜Ａ３ｃをそのまま、パラメータ"ａ*"の格納場所であるレジスタ５（ｒｅｇ．５）の指定アドレスが、レジスタ指定アドレスＡ５ｍ〜Ａ３ｍとして、メモリ１の行デコーダに出力され、レジスタ５（ｒｅｇ．５）からデータ読み出しが行われ、メモリバススイッチ回路１３０およびバスを介して演算部１５０に出力される。
【０１０２】
ステップＳ１０３ｂ：メモリ２に対応するアドレス変換部のアドレス一致検出部２１２の出力、すなわち図６に示すＯＲ回路３３５の出力は０となり、スイッチ回路２１３のスイッチ素子３４６，３４５，３４４がＯＮとなり、スイッチ回路２１３は、ラッチ２１１のＡ５＿Ｌ３１４〜Ａ３＿Ｌ３１２の格納アドレスをメモリに対するレジスタ指定アドレス（Ａ５ｍ，Ａ４ｍ，Ａ３ｍ）として、メモリ２に出力する。この場合は、ラッチ２１１のＡ５＿Ｌ３１４〜Ａ３＿Ｌ３１２の格納アドレス、すなわち、レジスタ１４（ｒｅｇ．１４）に対応するアドレスデータ（０，１，１）に基づいてレジスタ１４（ｒｅｇ．１４）からのデータ読み出しが実行され、メモリバススイッチ回路１３０およびバスを介して演算部１５０に出力される。
【０１０３】
結果として、メモリ１のレジスタ５（ｒｅｇ．５）のデータと、メモリ２のレジスタ１４（ｒｅｇ．１４）のデータが演算部１５０に入力されて、両データに基づく演算が実行される。
【０１０４】
上述の説明から理解されるように、データコピー処理は、ステップＳ１０１の１回のコピー処理のみとなる。従って、先に図３を参照して説明したアドレス変換を伴わない場合の処理、すなわち２回のコピー処理をシーケンシャルに実行する必要がある場合に比較し、処理サイクルが減少し、高速演算が可能となる。
【０１０５】
次に、図８を参照して、次の演算サイクルに用いるデータの２つのデータが、パラメータ"ａ*"と"ｂ*"の格納場所として設定されたレジスタ５（ｒｅｇ．５）とレジスタ６（ｒｅｇ．６）と同一のメモリブロックのレジスタに格納された状態にある場合の処理シーケンスを説明する。
【０１０６】
処理シーケンスは次のようになる。
ステップＳ２０１：メモリ１に対応するアドレス変換部２２０のラッチ２２１のＵＳＥに使用を示すデータ"１"をセットし、（Ａ５＿Ｌ，Ａ４＿Ｌ，Ａ３＿Ｌ）に、レジスタ１７（ｒｅｇ．１７）に対応するアドレスデータ（１，０，０）を設定する。さらに、メモリ２に対応するアドレス変換部２１０のラッチ２１１のＵＳＥに使用を示すデータ"１"をセットし、（Ａ５＿Ｌ，Ａ４＿Ｌ，Ａ３＿Ｌ）に、レジスタ１４（ｒｅｇ．１４）に対応するアドレスデータ（０，１，１）を設定する。
【０１０７】
ステップＳ２０２ａ：メモリ１に対応するアドレス変換部のアドレス一致検出部２２２の出力、すなわち図６に示すＯＲ回路３３５の出力は０となり、スイッチ回路２２３のスイッチ素子３４６，３４５，３４４がＯＮとなり、スイッチ回路２２３は、ラッチ２２１のＡ５＿Ｌ３１４〜Ａ３＿Ｌ３１２の格納アドレスをメモリに対するレジスタ指定アドレス（Ａ５ｍ，Ａ４ｍ，Ａ３ｍ）として、メモリ１に出力する。この場合は、ラッチ２２１のＡ５＿Ｌ３１４〜Ａ３＿Ｌ３１２の格納アドレス、すなわち、レジスタ１７（ｒｅｇ．１７）に対応するアドレスデータ（１，０，０）に基づいてレジスタ１７（ｒｅｇ．１７）からのデータ読み出しが実行され、メモリバススイッチ回路１３０およびバスを介して演算部１５０に出力される。
【０１０８】
ステップＳ２０２ｂ：メモリ２に対応するアドレス変換部のアドレス一致検出部２１２の出力、すなわち図６に示すＯＲ回路３３５の出力は０となり、スイッチ回路２１３のスイッチ素子３４６，３４５，３４４がＯＮとなり、スイッチ回路２１３は、ラッチ２１１のＡ５＿Ｌ３１４〜Ａ３＿Ｌ３１２の格納アドレスをメモリに対するレジスタ指定アドレス（Ａ５ｍ，Ａ４ｍ，Ａ３ｍ）として、メモリ２に出力する。この場合は、ラッチ２１１のＡ５＿Ｌ３１４〜Ａ３＿Ｌ３１２の格納アドレス、すなわち、レジスタ１４（ｒｅｇ．１４）に対応するアドレスデータ（０，１，１）に基づいてレジスタ１４（ｒｅｇ．１４）からのデータ読み出しが実行され、メモリバススイッチ回路１３０およびバスを介して演算部１５０に出力される。
【０１０９】
結果として、メモリ１のレジスタ１７（ｒｅｇ．１７）のデータと、メモリ２のレジスタ１４（ｒｅｇ．１４）のデータが演算部１５０に入力されて、両データに基づく演算が実行される。
【０１１０】
上述の説明から理解されるように、データコピー処理は不要となる。従って、先に図４を参照して説明したアドレス変換を伴わない場合の処理、すなわち２回のコピー処理をシーケンシャルに実行する必要がある場合に比較し、処理サイクルが大幅に減少し、高速演算が可能となる。
【０１１１】
また、演算部１５０において演算された結果を中間値としてレジスタに格納し、再度、中間値をレジスタから取得し、演算部１５０に出力して２乗の計算を行なう場合の処理について説明する。例えば、上述のモンプロ関数による２乗の計算処理は、下記の処理として示される。
ｃ* ＝ MonPro（ａ*，ｂ* ）
ｃ2*＝ MonPro（ｃ*，ｃ* ）
ここで、ａ*，ｂ* に入力するデータが、図８（図４と同様）である場合、すなわち、次の演算サイクルに用いる２つのデータが、パラメータ"ａ*"と"ｂ*"の格納場所として設定されたレジスタ５（ｒｅｇ．５）とレジスタ６（ｒｅｇ．６）と同一のメモリブロックのレジスタに格納された状態の場合を想定する。すなわち、メモリ２のレジスタ１４（ｒｅｇ．１４）に次の演算サイクルに用いるデータのうち、一方のデータが格納され、他方のデータがメモリ１のレジスタ１７（ｒｅｇ．１７）に格納されている。
【０１１２】
この場合は、
ステップＳ３０１：メモリ１に対応するアドレス変換部２２０のラッチ２２１のＵＳＥに使用を示すデータ"１"をセットし、（Ａ５＿Ｌ，Ａ４＿Ｌ，Ａ３＿Ｌ）に、レジスタ１７（ｒｅｇ．１７）に対応するアドレスデータ（１，０，０）を設定する。さらに、メモリ２に対応するアドレス変換部２１０のラッチ２１１のＵＳＥに使用を示すデータ"１"をセットし、（Ａ５＿Ｌ，Ａ４＿Ｌ，Ａ３＿Ｌ）に、レジスタ１４（ｒｅｇ．１４）に対応するアドレスデータ（０，１，１）を設定する。
【０１１３】
ステップＳ３０２ａ：メモリ１に対応するアドレス変換部のアドレス一致検出部２２２の出力、すなわち図６に示すＯＲ回路３３５の出力は０となり、スイッチ回路２２３のスイッチ素子３４６，３４５，３４４がＯＮとなり、スイッチ回路２２３は、ラッチ２２１のＡ５＿Ｌ３１４〜Ａ３＿Ｌ３１２の格納アドレスをメモリに対するレジスタ指定アドレス（Ａ５ｍ，Ａ４ｍ，Ａ３ｍ）として、メモリ１に出力する。この場合は、ラッチ２２１のＡ５＿Ｌ３１４〜Ａ３＿Ｌ３１２の格納アドレス、すなわち、レジスタ１７（ｒｅｇ．１７）に対応するアドレスデータ（１，０，０）に基づいてレジスタ１７（ｒｅｇ．１７）からのデータ読み出しが実行され、メモリバススイッチ回路１３０およびバスを介して演算部１５０に出力される。
【０１１４】
ステップＳ３０２ｂ：メモリ２に対応するアドレス変換部のアドレス一致検出部２１２の出力、すなわち図６に示すＯＲ回路３３５の出力は０となり、スイッチ回路２１３のスイッチ素子３４４，３４５，３４６がＯＮとなり、スイッチ回路２１３は、ラッチ２１１のＡ５＿Ｌ３１４〜Ａ３＿Ｌ３１２の格納アドレスをメモリに対するレジスタ指定アドレス（Ａ５ｍ，Ａ４ｍ，Ａ３ｍ）として、メモリ２に出力する。この場合は、ラッチ２１１のＡ５＿Ｌ３１４〜Ａ３＿Ｌ３１２の格納アドレス、すなわち、レジスタ１４（ｒｅｇ．１４）に対応するアドレスデータ（０，１，１）に基づいてレジスタ１４（ｒｅｇ．１４）からのデータ読み出しが実行され、メモリバススイッチ回路１３０およびバスを介して演算部１５０に出力される。
【０１１５】
結果として、メモリ１のレジスタ１７（ｒｅｇ．１７）のデータと、メモリ２のレジスタ１４（ｒｅｇ．１４）のデータが演算部１５０に入力されて、両データに基づく演算が実行される。
【０１１６】
これらの処理により、２乗計算まで実行された結果がメモリ１のレジスタ１７（ｒｅｇ．１７）のデータと、メモリ２のレジスタ１４（ｒｅｇ．１４）に格納される。
【０１１７】
以上、特定の実施例を参照しながら、本発明について詳解してきた。しかしながら、本発明の要旨を逸脱しない範囲で当業者が該実施例の修正や代用を成し得ることは自明である。すなわち、例示という形態で本発明を開示してきたのであり、限定的に解釈されるべきではない。本発明の要旨を判断するためには、冒頭に記載した特許請求の範囲の欄を参酌すべきである。
【産業上の利用可能性】
【０１１８】
以上、説明したように、本発明の構成によれば、データ格納領域としてのレジスタを複数有するメモリブロックを持つメモリ部と、レジスタの指定アドレスに基づいてレジスタから読み出されたデータを入力し、入力データに基づく演算処理を実行する演算部と、演算部に対するデータ入出力制御を実行する制御部とを有する演算処理装置において、演算部に出力予定のデータを格納しているデータ格納レジスタが予め定めた特定レジスタと同一のメモリブロックの異なるレジスタである場合において、制御部からの入力アドレスをデータ格納レジスタの指定アドレスに変換して、該変換アドレスをメモリブロックに対する読み出しアドレスとして出力するアドレス制御処理を実行する構成としたので、予め定めた特定レジスタに対するデータコピー処理を削減して、データ読み出しおよび演算処理を実行することが可能となり、演算の高速化が実現され、高速処理の要請される暗号処理デバイスにおいて適用可能である。
【０１１９】
さらに、本発明の構成によれば、モンゴリ演算におけるモンプロ演算：ＭｏｎＰｒｏ（ａ*，ｂ*）の実行において、モンプロ演算におけるパラメータ"ａ*"または"ｂ*"の格納予定領域として設定された特定レジスタと異なるレジスタに、出力予定のパラメータ"ａ*"または"ｂ*"の対応データを格納している場合において、制御部からの入力アドレスを出力予定のパラメータ"ａ*"または"ｂ*"のデータ格納レジスタの指定アドレスに変換して、該変換アドレスを前記メモリブロックに対する読み出しアドレスとして出力する構成としたので、暗号処理演算において、複数回繰り返し実行されるモンプロ演算のデータコピー処理の削減が可能となり、暗号処理演算の高速化が実現され、高速処理の要請される暗号処理デバイスにおいて適用可能である。
【図面の簡単な説明】
【０１２０】
【図１】本発明の演算処理装置の構成を示す図である。
【図２】演算処理におけるメモリのレジスタ利用構成およびコピー処理について説明する図である。
【図３】演算処理におけるメモリのレジスタ利用構成およびコピー処理について説明する図である。
【図４】演算処理におけるメモリのレジスタ利用構成およびコピー処理について説明する図である。
【図５】本発明の演算処理装置のアドレス制御回路構成を示す図である。
【図６】本発明の演算処理装置のアドレス制御回路の詳細回路構成例を示す図である。
【図７】本発明の演算処理装置のアドレス制御回路におけるアドレス変換処理を伴うメモリのレジスタ利用演算処理について説明する図である。
【図８】本発明の演算処理装置のアドレス制御回路におけるアドレス変換処理を伴うメモリのレジスタ利用演算処理について説明する図である。
【符号の説明】
【０１２１】
１１０  メモリ部
１２０〜１２３  メモリブロック
１３０  メモリバススイッチ回路
１５０  演算部
１５１，１５３，１５５，１５６，１５８  ラッチ
１５２  乗算器
１５４，１５７  加算器
２００  アドレス制御回路
２１０，２２０  アドレス変換部
２１１，２２１  ラッチ
２１２，２２２  一致検出部
２１３，２２３  スイッチ
３１１〜３１４  ラッチ
３２１〜３２３  ＥＯＲ入力データ設定部
３３１〜３３３  ＥＯＲ回路
３３５  ＯＲ回路
３４１〜３４６  スイッチ素子
【図１】
2005032034.tif 000003
【図２】
2005032034.tif 000004
【図３】
2005032034.tif 000005
【図４】
2005032034.tif 000006
【図５】
2005032034.tif 000007
【図６】
2005032034.tif 000008
【図７】
2005032034.tif 000009
【図８】
2005032034.tif 000010