(57)【要約】【課題】  演算回路の面積の増加を抑制しつつ、モンゴメリ変換パラメータを演算回路内で算出する。【解決手段】  モンゴメリ乗算回路と逆元演算回路とを有し、所定の処理を実行する演算回路は、モンゴメリ変換パラメータ（Ｒ２ｍｏｄＮ）を算出する算出期間に、モンゴメリ乗算回路の第１入力端子および第２入力端子に１を与え、モンゴメリ乗算回路の演算結果を第１入力端子にフィードバックし、所定の処理の演算期間に、所定の処理用のデータを第１入力端子および第２入力端子に与える第１選択部と、算出期間に、演算結果がフィードバックされたモンゴメリ乗算回路の演算結果を逆元演算回路に与え、演算期間に、所定の処理用のデータを逆元演算回路に与える第２選択部と、算出期間に、逆元演算回路の演算結果をモンゴメリ変換パラメータとして出力し、演算期間に、逆元演算回路の演算結果を所定の処理用のデータとして出力する第３選択部とを有している。【選択図】  図１
2015055851.tif 000002
【特許請求の範囲】
【請求項１】
第１入力端子および第２入力端子で受けた整数に対する整数Ｎを法とするモンゴメリ乗算を実行するモンゴメリ乗算回路と、素数Ｎを法とする素体における逆元を計算する逆元演算回路とを有し、与えられた入力値に対する所定の処理を実行する演算回路であって、
素数Ｎを２進数で表現したときのビット長をｎ、２ｎをＲとしたときにＲ２ｍｏｄＮで表されるモンゴメリ変換パラメータを算出する算出期間に、前記第１入力端子および前記第２入力端子に１を与え、前記モンゴメリ乗算回路の演算結果である第１結果を前記第１入力端子にフィードバックし、前記所定の処理に含まれる演算が実行される演算期間に、前記所定の処理に含まれる演算用の第１データを前記第１入力端子および前記第２入力端子に与える第１選択部と、
前記算出期間に、前記第１結果がフィードバックされた前記モンゴメリ乗算回路の演算結果である第２結果を前記逆元演算回路に与え、前記演算期間に、前記所定の処理に含まれる演算用の第２データを前記逆元演算回路に与える第２選択部と、
前記算出期間に、前記第２結果を受けた前記逆元演算回路の演算結果を前記モンゴメリ変換パラメータとして出力し、前記演算期間に、前記第２データを受けた前記逆元演算回路の演算結果を前記所定の処理に含まれる演算用の第３データとして出力する第３選択部と
を備えていることを特徴とする演算回路。
【請求項２】
第１入力端子および第２入力端子で受けた整数に対する整数Ｎを法とするモンゴメリ乗算を実行するモンゴメリ乗算回路と、素数Ｎを法とする素体におけるモンゴメリ逆元を計算するモンゴメリ逆元演算回路とを有し、与えられた入力値に対する所定の処理を実行する演算回路であって、
素数Ｎを２進数で表現したときのビット長をｎ、２ｎをＲとしたときにＲ２ｍｏｄＮで表されるモンゴメリ変換パラメータを算出する算出期間に、前記第１入力端子および前記第２入力端子に１を与え、前記所定の処理に含まれる演算が実行される演算期間に、前記所定の処理に含まれる演算用の第１データを前記第１入力端子および前記第２入力端子に与える第１選択部と、
前記算出期間に、前記モンゴメリ乗算回路の演算結果を前記モンゴメリ逆元演算回路に与え、前記演算期間に、前記所定の処理に含まれる演算用の第２データを前記モンゴメリ逆元演算回路に与える第２選択部と、
前記算出期間に、前記モンゴメリ逆元演算回路の演算結果を前記モンゴメリ変換パラメータとして出力し、前記演算期間に、前記モンゴメリ逆元演算回路の演算結果を前記所定の処理に含まれる演算用の第３データとして出力する第３選択部と
を備えていることを特徴とする演算回路。
【請求項３】
第１入力端子および第２入力端子で受けた整数に対する整数Ｎを法とするモンゴメリ乗算を実行するモンゴメリ乗算回路と、素数Ｎを法とする素体における逆元を計算する逆元演算回路とを有し、与えられた入力値に対する所定の処理を実行する演算回路の制御方法であって、
素数Ｎを２進数で表現したときのビット長をｎ、２ｎをＲとしたときにＲ２ｍｏｄＮで表されるモンゴメリ変換パラメータを算出する算出期間に、前記第１入力端子および前記第２入力端子に１を与え、前記モンゴメリ乗算回路の演算結果である第１結果を前記第１入力端子にフィードバックし、前記第１結果がフィードバックされた前記モンゴメリ乗算回路の演算結果である第２結果を前記逆元演算回路に与え、前記第２結果を受けた前記逆元演算回路の演算結果を前記モンゴメリ変換パラメータとして出力し、
前記所定の処理に含まれる演算が実行される演算期間に、前記所定の処理に含まれる演算用の第１データを前記第１入力端子および前記第２入力端子に与え、前記所定の処理に含まれる演算用の第２データを前記逆元演算回路に与え、前記第２データを受けた前記逆元演算回路の演算結果を前記所定の処理に含まれる演算用の第３データとして出力すること
を特徴とする演算回路の制御方法。
【請求項４】
第１入力端子および第２入力端子で受けた整数に対する整数Ｎを法とするモンゴメリ乗算を実行するモンゴメリ乗算回路と、素数Ｎを法とする素体におけるモンゴメリ逆元を計算するモンゴメリ逆元演算回路とを有し、与えられた入力値に対する所定の処理を実行する演算回路の制御方法であって、
素数Ｎを２進数で表現したときのビット長をｎ、２ｎをＲとしたときにＲ２ｍｏｄＮで表されるモンゴメリ変換パラメータを算出する算出期間に、前記第１入力端子および前記第２入力端子に１を与え、前記モンゴメリ乗算回路の演算結果を前記モンゴメリ逆元演算回路に与え、前記モンゴメリ逆元演算回路の演算結果を前記モンゴメリ変換パラメータとして出力し、
前記所定の処理に含まれる演算が実行される演算期間に、前記所定の処理に含まれる演算用の第１データを前記第１入力端子および前記第２入力端子に与え、前記所定の処理に含まれる演算用の第２データを前記モンゴメリ逆元演算回路に与え、前記モンゴメリ逆元演算回路の演算結果を前記所定の処理に含まれる演算用の第３データとして出力すること
を特徴とする演算回路の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算回路および演算回路の制御方法に関する。
【背景技術】
【０００２】
ＲＳＡ（Rivest Shamir Adleman）暗号、楕円曲線暗号、ＤＳＡ（Digital Signature Algorithm）等に使用される暗号技術では、例えば、乗算剰余演算やべき乗剰余演算が使用されている。乗算剰余演算等を高速化するアルゴリズムとして、モンゴメリ乗算が使用されている（例えば、特許文献１参照）。モンゴメリ乗算では、例えば、ｎビットで表される奇数Ｎを法とし、２のｎ乗をＲとした場合、ｎビットの入力値Ａ、Ｂに対し、演算結果“（Ａ・Ｂ・Ｒ−１）ｍｏｄＮ”を出力する。なお、Ｒ−１は、素数Ｎを法とする素体における整数Ｒの逆元を表している。また、ｍｏｄは剰余演算子である。
【０００３】
モンゴメリ乗算を用いて乗算剰余演算を高速化する場合、例えば、モンゴメリ乗算を実行する演算装置は、モンゴメリ乗算の計算対象となるデータに、予め、Ｒを乗じる。例えば、モンゴメリ乗算を実行する演算装置は、値Ａ、Ｂ、Ｃ、Ｄを計算過程で使用する場合、モンゴメリ乗算の実行に先立って、“（Ａ・Ｒ）ｍｏｄＮ”、“（Ｂ・Ｒ）ｍｏｄＮ”、“（Ｃ・Ｒ）ｍｏｄＮ”、“（Ｄ・Ｒ）ｍｏｄＮ”を算出する。
【０００４】
以下、“（Ａ・Ｒ）ｍｏｄＮ”の形式をモンゴメリ形式とも称する。また、値Ａをモンゴメリ形式“（Ａ・Ｒ）ｍｏｄＮ”に変換する処理を、モンゴメリ変換とも称し、モンゴメリ形式“（Ａ・Ｒ）ｍｏｄＮ”から値Ａを求める処理を、モンゴメリ逆変換とも称する。モンゴメリ変換は、例えば、Ｒ２ｍｏｄＮで表されるモンゴメリ変換パラメータを用いて、実行される。なお、モンゴメリ変換パラメータは、モンゴメリ変換が実行される前に、予め算出されている。近年、モンゴメリ変換パラメータを効率良く算出する方法が提案されている（例えば、特許文献２参照）。
【０００５】
また、前掲の暗号技術においては、逆元演算やモンゴメリ逆元演算も使用されている。ｎビットで表される素数Ｎに対し、ｎビットの入力値Ａに対してＡ・Ｘ−１＝１ｍｏｄＮを満たす数Ｘを、素数Ｎを法とする素体におけるＡの逆元と言う。
【０００６】
また、ｎビットで表される素数Ｎに対し、２のｎ乗をＲとするとき、ｎビットの入力値Ａに対してＹ＝（Ａ−１・Ｒ）ｍｏｄＮと表される数Ｙを、素数Ｎを法とする素体におけるＡのモンゴメリ逆元と言う。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平１１−１４３６８８号公報
【特許文献２】再表２００５／０１３２４３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
モンゴメリ変換パラメータを算出する専用回路を演算装置に搭載した場合、専用回路の分だけ回路面積が大きくなる。また、ソフトウエアでモンゴメリ変換パラメータを算出し、モンゴメリ変換パラメータを演算装置に外部から与える方法では、ソフトウエアの作成等により、開発工程におけるユーザの負担が増加する。また、モンゴメリ変換パラメータを算出するソフトウエアを格納するためのメモリ領域が、ユーザシステムのメモリリソースを圧迫するおそれがある。
【０００９】
１つの側面では、本件開示の演算回路および演算回路の制御方法は、演算回路の面積の増加を抑制しつつ、モンゴメリ変換パラメータを演算回路内で算出することを目的とする。
【課題を解決するための手段】
【００１０】
一観点によれば、第１入力端子および第２入力端子で受けた整数に対する整数Ｎを法とするモンゴメリ乗算を実行するモンゴメリ乗算回路と、素数Ｎを法とする素体における逆元を計算する逆元演算回路とを有し、与えられた入力値に対する所定の処理を実行する演算回路は、素数Ｎを２進数で表現したときのビット長をｎ、２ｎをＲとしたときにＲ２ｍｏｄＮで表されるモンゴメリ変換パラメータを算出する算出期間に、第１入力端子および第２入力端子に１を与え、モンゴメリ乗算回路の演算結果である第１結果を第１入力端子にフィードバックし、所定の処理に含まれる演算が実行される演算期間に、所定の処理に含まれる演算用の第１データを第１入力端子および第２入力端子に与える第１選択部と、算出期間に、第１結果がフィードバックされたモンゴメリ乗算回路の演算結果である第２結果を逆元演算回路に与え、演算期間に、所定の処理に含まれる演算用の第２データを逆元演算回路に与える第２選択部と、算出期間に、第２結果を受けた逆元演算回路の演算結果をモンゴメリ変換パラメータとして出力し、演算期間に、第２データを受けた逆元演算回路の演算結果を所定の処理に含まれる演算用の第３データとして出力する第３選択部とを有している。
【００１１】
別の観点によれば、第１入力端子および第２入力端子で受けた整数に対する整数Ｎを法とするモンゴメリ乗算を実行するモンゴメリ乗算回路と、素数Ｎを法とする素体におけるモンゴメリ逆元を計算するモンゴメリ逆元演算回路とを有し、与えられた入力値に対する所定の処理を実行する演算回路は、素数Ｎを２進数で表現したときのビット長をｎ、２ｎをＲとしたときにＲ２ｍｏｄＮで表されるモンゴメリ変換パラメータを算出する算出期間に、第１入力端子および第２入力端子に１を与え、所定の処理に含まれる演算が実行される演算期間に、所定の処理に含まれる演算用の第１データを第１入力端子および第２入力端子に与える第１選択部と、算出期間に、モンゴメリ乗算回路の演算結果をモンゴメリ逆元演算回路に与え、演算期間に、所定の処理に含まれる演算用の第２データをモンゴメリ逆元演算回路に与える第２選択部と、算出期間に、モンゴメリ逆元演算回路の演算結果をモンゴメリ変換パラメータとして出力し、演算期間に、モンゴメリ逆元演算回路の演算結果を所定の処理に含まれる演算用の第３データとして出力する第３選択部とを有している。
【００１２】
別の観点によれば、第１入力端子および第２入力端子で受けた整数に対する整数Ｎを法とするモンゴメリ乗算を実行するモンゴメリ乗算回路と、素数Ｎを法とする素体における逆元を計算する逆元演算回路とを有し、与えられた入力値に対する所定の処理を実行する演算回路の制御方法は、素数Ｎを２進数で表現したときのビット長をｎ、２ｎをＲとしたときにＲ２ｍｏｄＮで表されるモンゴメリ変換パラメータを算出する算出期間に、第１入力端子および第２入力端子に１を与え、モンゴメリ乗算回路の演算結果である第１結果を第１入力端子にフィードバックし、第１結果がフィードバックされたモンゴメリ乗算回路の演算結果である第２結果を逆元演算回路に与え、第２結果を受けた逆元演算回路の演算結果をモンゴメリ変換パラメータとして出力し、所定の処理に含まれる演算が実行される演算期間に、所定の処理に含まれる演算用の第１データを第１入力端子および第２入力端子に与え、所定の処理に含まれる演算用の第２データを逆元演算回路に与え、第２データを受けた逆元演算回路の演算結果を所定の処理に含まれる演算用の第３データとして出力する。
【００１３】
別の観点によれば、第１入力端子および第２入力端子で受けた整数に対する整数Ｎを法とするモンゴメリ乗算を実行するモンゴメリ乗算回路と、素数Ｎを法とする素体におけるモンゴメリ逆元を計算するモンゴメリ逆元演算回路とを有し、与えられた入力値に対する所定の処理を実行する演算回路の制御方法は、素数Ｎを２進数で表現したときのビット長をｎ、２ｎをＲとしたときにＲ２ｍｏｄＮで表されるモンゴメリ変換パラメータを算出する算出期間に、第１入力端子および第２入力端子に１を与え、モンゴメリ乗算回路の演算結果をモンゴメリ逆元演算回路に与え、モンゴメリ逆元演算回路の演算結果をモンゴメリ変換パラメータとして出力し、所定の処理に含まれる演算が実行される演算期間に、所定の処理に含まれる演算用の第１データを第１入力端子および第２入力端子に与え、所定の処理に含まれる演算用の第２データをモンゴメリ逆元演算回路に与え、モンゴメリ逆元演算回路の演算結果を所定の処理に含まれる演算用の第３データとして出力する。
【発明の効果】
【００１４】
本件開示の演算回路および演算回路の制御方法は、演算回路の面積の増加を抑制しつつ、モンゴメリ変換パラメータを演算回路内で算出できる。
【図面の簡単な説明】
【００１５】
【図１】演算回路および演算回路の制御方法の一実施形態を示す図である。
【図２】図１に示した演算回路の動作の一例を示す図である。
【図３】演算回路および演算回路の制御方法の別の実施形態を示す図である。
【図４】楕円曲線暗号の単位元、加算、スカラー倍算の定義の一例を示す図である。
【図５】図３に示した演算回路の動作の一例を示す図である。
【図６】図５に示したモンゴメリ変換パラメータの計算処理の一例を示す図である。
【図７】演算回路および演算回路の制御方法の別の実施形態を示す図である。
【図８】図７に示した演算回路の動作の一例を示す図である。
【図９】演算回路および演算回路の制御方法の別の実施形態を示す図である。
【図１０】図９に示した演算回路の動作の一例を示す図である。
【図１１】図１０に示したモンゴメリ変換パラメータの計算処理の一例を示す図である。
【発明を実施するための形態】
【００１６】
以下、実施形態を図面を用いて説明する。
【００１７】
図１は、演算回路および演算回路の制御方法の一実施形態を示している。この実施形態の演算回路１０は、例えば、公開鍵暗号を利用した暗号装置や認証装置に搭載される。例えば、公開鍵暗号は、ＲＳＡ（Rivest Shamir Adleman）暗号、楕円曲線暗号、ＤＳＡ（Digital Signature Algorithm）等に使用される。
【００１８】
演算回路１０は、例えば、与えられた入力値に対する所定の処理（例えば、公開鍵暗号に関する処理）を実行する。例えば、演算回路１０は、データＤＩＮを受け、データＤＩＮに対する所定の処理を実行する。そして、演算回路１０は、所定の処理の結果であるデータＤＯＵＴを外部に出力する。ここで、所定の処理に含まれる演算の１つは、例えば、乗算剰余演算である。例えば、演算回路１０は、モンゴメリ乗算を用いて乗算剰余演算を高速に実行する。ｎビットで表される奇数Ｎを法とし、ｎビットの入力値Ａ、Ｂに対するモンゴメリ乗算ＲＥＤＣ（Ａ，Ｂ，Ｎ）は、２のｎ乗をＲとした場合、式（１）で表される。
【００１９】
ＲＥＤＣ（Ａ，Ｂ，Ｎ）＝（Ａ・Ｂ・Ｒ−１）ｍｏｄＮ  ‥（１）
なお、式（１）のｍｏｄは、剰余演算子である。また、式（１）のＲ−１は、素数Ｎを法とする素体における整数Ｒの逆元を表している。以下、素数Ｎを法とする素体における任意の整数Ｘの逆元を、Ｘ−１と表す。すなわち、Ｘ−１は、Ｘ・Ｘ−１≡１ｍｏｄＮを満たす数である。
【００２０】
また、例えば、演算回路１０は、モンゴメリ乗算を用いて乗算剰余演算を高速化するために、モンゴメリ乗算の計算対象となるデータをモンゴメリ形式に変換する。例えば、演算回路１０は、値Ａを計算過程で使用する場合、モンゴメリ乗算の実行に先立って、値Ａを、“（Ａ・Ｒ）ｍｏｄＮ”のモンゴメリ形式に変換する。以下、値Ａをモンゴメリ形式“（Ａ・Ｒ）ｍｏｄＮ”に変換する処理を、モンゴメリ変換とも称し、モンゴメリ形式“（Ａ・Ｒ）ｍｏｄＮ”から値Ａを求める処理を、モンゴメリ逆変換とも称する。モンゴメリ変換は、例えば、Ｒ２ｍｏｄＮで表されるモンゴメリ変換パラメータを用いて、実行される。
【００２１】
例えば、モンゴメリ変換では、式（２）および式（３）に示すように、値Ａとモンゴメリ変換パラメータとのモンゴメリ乗算を実行することにより、値Ａのモンゴメリ形式が算出される。
【００２２】
ＲＥＤＣ（Ａ，Ｒ２ｍｏｄＮ，Ｎ）＝（Ａ・Ｒ２・Ｒ−１）ｍｏｄＮ  ‥（２）
（Ａ・Ｒ２・Ｒ−１）ｍｏｄＮ＝（Ａ・Ｒ）ｍｏｄＮ  ‥（３）
また、例えば、モンゴメリ逆変換では、式（４）および式（５）に示すように、１とのモンゴメリ乗算を実行することにより、モンゴメリ形式から値Ａを求めることができる。
【００２３】
ＲＥＤＣ（（Ａ・Ｒ）ｍｏｄＮ，１，Ｎ）＝（Ａ・Ｒ・１・Ｒ−１）ｍｏｄＮ‥（４）
（Ａ・Ｒ・１・Ｒ−１）ｍｏｄＮ＝ＡｍｏｄＮ  ‥（５）
演算回路１０は、例えば、選択部１１０、モンゴメリ乗算回路１２０、選択部１３０、逆元演算回路１４０および分岐部１５０を有している。
【００２４】
選択部１１０は、モンゴメリ乗算回路１２０の入力端子ＩＮ１、ＩＮ２に与えるデータを選択する第１選択部の一例である。例えば、選択部１１０は、モンゴメリ変換パラメータを算出する算出期間に、入力端子ＩＮ１、ＩＮ２に１を与え、モンゴメリ乗算回路１２０の演算結果である第１結果“Ｒ−１ｍｏｄＮ”を入力端子ＩＮ１にフィードバックする。そして、選択部１１０は、所定の処理に含まれる演算が実行される演算期間に、所定の処理に含まれる演算用のデータＤＡ１０、ＤＡ１２を入力端子ＩＮ１、ＩＮ２に与える。
【００２５】
ここで、データＤＡ１０、ＤＡ１２は、例えば、所定の処理の過程でモンゴメリ乗算回路１２０により使用されるデータである。また、データＤＡ２０は、例えば、所定の処理の過程で逆元演算回路１４０により使用されるデータである。そして、データＤＡ１４、ＤＡ３０は、例えば、所定の処理の過程で、モンゴメリ乗算回路１２０、逆元演算回路１４０等により使用されるデータである。あるいは、データＤＡ１４、ＤＡ３０は、例えば、データＤＯＵＴ（所定の処理の結果）として、演算回路１０から出力される場合もある。
【００２６】
モンゴメリ乗算回路１２０は、入力端子ＩＮ１、ＩＮ２で受けた整数に対するモンゴメリ乗算を実行する。例えば、モンゴメリ乗算回路１２０は、ｎビットの入力値Ａ、Ｂを入力端子ＩＮ１、ＩＮ２で受けた場合、演算結果“（Ａ・Ｂ・Ｒ−１）ｍｏｄＮ”を出力する。モンゴメリ乗算回路１２０の演算結果は、選択部１１０、１３０等に出力される。
【００２７】
選択部１３０は、逆元演算回路１４０に与えるデータを選択する第２選択部の一例である。例えば、選択部１３０は、モンゴメリ変換パラメータを算出する算出期間に、第１結果“Ｒ−１ｍｏｄＮ”がフィードバックされたモンゴメリ乗算回路１２０の演算結果である第２結果“Ｒ−２ｍｏｄＮ”を、逆元演算回路１４０に与える。そして、選択部１３０は、所定の処理の演算期間に、所定の処理に含まれる演算用のデータＤＡ２０を逆元演算回路１４０に与える。
【００２８】
逆元演算回路１４０は、与えられた整数に対して、素数Ｎを法とする素体における逆元を計算する。そして、逆元演算回路１４０は、例えば、演算結果（与えられた整数の逆元）を分岐部１５０に出力する。
【００２９】
分岐部１５０は、逆元演算回路１４０の演算結果の用途を選択する第３選択部の一例である。例えば、分岐部１５０は、モンゴメリ変換パラメータを算出する算出期間に、第２結果“Ｒ−２ｍｏｄＮ”を受けた逆元演算回路１４０の演算結果“Ｒ２ｍｏｄＮ”を、モンゴメリ変換パラメータとして出力する。そして、分岐部１５０は、所定の処理の演算期間に、データＤＡ２０を受けた逆元演算回路１４０の演算結果を、所定の処理に含まれる演算用のデータＤＡ３０として出力する。
【００３０】
このように、演算回路１０は、所定の処理で使用されるモンゴメリ乗算回路１２０および逆元演算回路１４０を利用して、モンゴメリ変換パラメータを算出する。したがって、この実施形態では、モンゴメリ変換パラメータを算出する専用の演算回路（例えば、多倍長データを処理可能な減算回路や１ビット左シフト回路等）を追加することなく、モンゴメリ変換パラメータを演算回路１０内で算出できる。すなわち、この実施形態では、演算回路１０の面積の増加を抑制しつつ、モンゴメリ変換パラメータを演算回路１０内で算出できる。
【００３１】
なお、ソフトウエアで計算されたモンゴメリ変換パラメータが演算回路に与えられる構成では、演算回路を使用するプロセッサは、多倍長整数演算（例えば、減算処理や１ビット左シフト処理等）を繰り返して、モンゴメリ変換パラメータを計算する。この際、プロセッサは、多倍長データ処理のため、キャリーやボローの発生の検出、上位ワードの計算への反映処理等も実行する。このため、モンゴメリ変換パラメータをソフトウエアで計算する方法では、プロセッサの負荷が増加する。
【００３２】
これに対し、この実施形態では、モンゴメリ変換パラメータを計算するソフトウエアを用いずに、モンゴメリ変換パラメータを演算回路１０で算出できる。このため、この実施形態では、演算回路１０を使用するプロセッサの負荷を低減できる。さらに、この実施形態では、モンゴメリ変換パラメータを計算するソフトウエアを格納するためのメモリ領域を省くことができ、ユーザシステムのメモリリソースを有効に利用できる。また、この実施形態では、モンゴメリ変換パラメータを計算するソフトウエアの作成等を省くことができるため、開発工程におけるユーザの負担を低減できる。
【００３３】
なお、演算回路１０の構成は、この例に限定されない。例えば、演算回路１０は、データＤＩＮ、ＤＡ１０、ＤＡ１２、ＤＡ１４、ＤＡ２０、ＤＡ３０等を保持するワークメモリを有してもよい。あるいは、演算回路１０は、モンゴメリ乗算回路１２０の演算結果“Ｒ−１ｍｏｄＮ”等を、ワークメモリを介してモンゴメリ乗算回路１２０にフィードバックしてもよい。例えば、モンゴメリ乗算回路１２０は、演算結果“Ｒ−１ｍｏｄＮ”をワークメモリの所定のアドレスに格納してもよい。そして、選択部１１０は、ワークメモリの所定のアドレス（演算結果“Ｒ−１ｍｏｄＮ”が格納されているアドレス）から演算結果“Ｒ−１ｍｏｄＮ”を読み出し、演算結果“Ｒ−１ｍｏｄＮ”をモンゴメリ乗算回路１２０の入力端子ＩＮ１に与えてもよい。
【００３４】
また、演算回路１０は、選択部１１０、１３０、分岐部１５０等を制御する制御部を有してもよい。また、演算回路１０は、モンゴメリ乗算回路１２０の出力を分岐させる分岐部を有してもよい。
【００３５】
図２は、図１に示した演算回路１０の動作の一例を示している。すなわち、図２は、演算回路１０の制御方法の一例を示している。図２の動作を実現するための制御は、ハードウエアにより実行されてもよいし、ソフトウエアにより実行されてもよい。ステップＳ１００−Ｓ１６０は、例えば、モンゴメリ変換パラメータを算出する算出期間での動作に対応している。また、ステップＳ２００−Ｓ２２０は、所定の処理に含まれる演算が実行される演算期間での動作に対応している。
【００３６】
ステップＳ１００では、選択部１１０は、固定値“１”をモンゴメリ乗算回路１２０の入力端子ＩＮ１、ＩＮ２に供給する。
【００３７】
ステップＳ１１０では、モンゴメリ乗算回路１２０は、ステップＳ１００で入力端子ＩＮ１、ＩＮ２に与えられた値“１”に対するモンゴメリ乗算を実行する。これにより、モンゴメリ乗算の結果である“Ｒ−１ｍｏｄＮ”がモンゴメリ乗算回路１２０から選択部１１０等に出力される。
【００３８】
ステップＳ１２０では、選択部１１０は、ステップＳ１１０でのモンゴメリ乗算回路１２０の演算結果“Ｒ−１ｍｏｄＮ”を、モンゴメリ乗算回路１２０の入力端子ＩＮ１にフィードバックする。なお、選択部１１０は、モンゴメリ乗算回路１２０の入力端子ＩＮ２には、固定値“１”を供給している。
【００３９】
ステップＳ１３０では、モンゴメリ乗算回路１２０は、ステップＳ１２０で入力端子ＩＮ１、ＩＮ２に与えられた値“Ｒ−１ｍｏｄＮ”、“１”に対するモンゴメリ乗算を実行する。これにより、モンゴメリ乗算の結果である“Ｒ−２ｍｏｄＮ”がモンゴメリ乗算回路１２０から選択部１３０等に出力される。
【００４０】
ステップＳ１４０では、選択部１３０は、ステップＳ１３０でのモンゴメリ乗算回路１２０の演算結果“Ｒ−２ｍｏｄＮ”を、逆元演算回路１４０に供給する。
【００４１】
ステップＳ１５０では、逆元演算回路１４０は、逆元演算を実行する。例えば、逆元演算回路１４０は、ステップＳ１４０で与えられた値“Ｒ−２ｍｏｄＮ”の逆元を計算する。これにより、“Ｒ−２ｍｏｄＮ”の逆元である“Ｒ２ｍｏｄＮ”が算出される。したがって、逆元演算回路１４０の演算結果“Ｒ２ｍｏｄＮ”が、逆元演算回路１４０から分岐部１５０に出力される。
【００４２】
ステップＳ１６０では、分岐部１５０は、ステップＳ１５０での逆元演算回路１４０の演算結果“Ｒ２ｍｏｄＮ”を、モンゴメリ変換パラメータに設定する。例えば、分岐部１５０は、ステップＳ１５０での逆元演算回路１４０の演算結果“Ｒ２ｍｏｄＮ”を、モンゴメリ変換パラメータとして出力する。例えば、演算回路１０は、分岐部１５０から出力された“Ｒ２ｍｏｄＮ”をモンゴメリ変換パラメータとして保持する。
【００４３】
このように、ステップＳ１００−Ｓ１６０の処理（モンゴメリ変換パラメータを算出する算出期間での動作）により、モンゴメリ変換パラメータが計算される。そして、モンゴメリ変換パラメータが計算された後、ステップＳ２００−Ｓ２２０の処理（所定の処理に含まれる演算が実行される演算期間での動作）が実行される。
【００４４】
ステップＳ２００では、選択部１１０は、データＤＡ１０、ＤＡ１２をモンゴメリ乗算回路１２０の入力端子ＩＮ１、ＩＮ２に供給する。例えば、選択部１１０は、モンゴメリ乗算回路１２０の入力元として、データＤＡ１０、ＤＡ１２の経路を選択する。なお、データＤＡ１０、ＤＡ１２は、例えば、ステップＳ１００−Ｓ１６０の処理で算出されたモンゴメリ変換パラメータを用いたモンゴメリ変換により、モンゴメリ形式に変換されたデータである。
【００４５】
ステップＳ２１０では、選択部１３０は、データＤＡ２０（例えば、値“Ｚ”）を、逆元演算回路１４０に供給する。例えば、選択部１３０は、逆元演算回路１４０の入力元として、データＤＡ２０の経路を選択する。
【００４６】
ステップＳ２２０では、分岐部１５０は、逆元演算回路１４０の演算結果（例えば、“Ｚ−１ｍｏｄＮ”）を、データＤＡ３０の経路に出力する。すなわち、分岐部１５０は、逆元演算回路１４０の演算結果（例えば、“Ｚ−１ｍｏｄＮ”）を、データＤＡ３０として出力する。このように、分岐部１５０は、例えば、逆元演算回路１４０の出力先として、データＤＡ３０の経路を選択する。
【００４７】
なお、選択部１１０、１３０および分岐部１５０は、例えば、所定の処理に含まれる演算が実行される演算期間では、所定の処理に含まれる演算用のデータＤＡ１０、ＤＡ１２、ＤＡ２０、ＤＡ３０の経路を選択した状態を維持する。これにより、この実施形態では、所定の処理に含まれる演算が終了するまで、所定の処理の過程で使用されるデータを、モンゴメリ乗算回路１２０、逆元演算回路１４０等に対して入出力できる。
【００４８】
また、演算回路１０の動作は、この例に限定されない。例えば、ステップＳ２００は、ステップＳ２２０の後に実行されてもよい。すなわち、選択部１１０、１３０および分岐部１５０は、モンゴメリ変換パラメータの計算が終了した後、所定の処理に含まれる演算が終了するまで、所定の処理に含まれる演算用のデータＤＡ１０、ＤＡ１２、ＤＡ２０、ＤＡ３０の経路を選択した状態を維持していればよい。
【００４９】
以上、図１および図２に示した実施形態の演算回路１０および演算回路１０の制御方法は、与えられた入力値に対する所定の処理を実行する前に、モンゴメリ変換パラメータを計算する。例えば、選択部１１０は、モンゴメリ変換パラメータを算出する算出期間に、モンゴメリ乗算回路１２０の入力端子ＩＮ１、ＩＮ２に１を与え、モンゴメリ乗算回路１２０の演算結果“Ｒ−１ｍｏｄＮ”を入力端子ＩＮ１にフィードバックする。また、例えば、選択部１３０は、算出期間に、値“Ｒ−１ｍｏｄＮ”、“１”に対するモンゴメリ乗算回路１２０の演算結果“Ｒ−２ｍｏｄＮ”を逆元演算回路１４０に与える。そして、分岐部１５０は、算出期間に、逆元演算回路１４０の演算結果“Ｒ２ｍｏｄＮ”をモンゴメリ変換パラメータとして出力する。
【００５０】
なお、選択部１１０、１３０および分岐部１５０は、例えば、所定の処理に含まれる演算が実行される演算期間では、所定の処理に含まれる演算用のデータＤＡ１０、ＤＡ１２、ＤＡ２０、ＤＡ３０の経路を選択した状態を維持する。これにより、この実施形態では、所定の処理に含まれる演算が終了するまで、所定の処理の過程で使用されるデータを、モンゴメリ乗算回路１２０、逆元演算回路１４０等に対して入出力できる。すなわち、演算回路１０は、所定の処理で使用されるモンゴメリ乗算回路１２０および逆元演算回路１４０を利用して、モンゴメリ変換パラメータを算出する。
【００５１】
このように、この実施形態では、演算回路１０の面積の増加を抑制しつつ、モンゴメリ変換パラメータを演算回路１０内で算出できる。例えば、この実施形態では、モンゴメリ変換パラメータを計算するための専用の演算回路またはプログラムを要することなく、モンゴメリ変換パラメータを算出できる。これにより、この実施形態では、演算回路１０の回路規模の削減、または、演算回路１０を使用するプロセッサの負荷の低減を実現できる。
【００５２】
図３は、演算回路および演算回路の制御方法の別の実施形態を示している。この実施形態の演算回路１０Ａは、例えば、公開鍵暗号を利用した暗号装置や認証装置に搭載される。例えば、演算回路１０Ａは、楕円曲線暗号のスカラー倍算を実行するスカラー倍算演算回路である。以下、演算回路１０Ａがスカラー倍算演算回路であるとして説明する。なお、演算回路１０Ａの用途は、スカラー倍算演算回路に限定されない。
【００５３】
図１および図２で説明した要素と同様の要素については、同様の符号を付し、これ等については、詳細な説明を省略する。例えば、図３に示した選択部１１０、モンゴメリ乗算回路１２０、選択部１３０、逆元演算回路１４０および分岐部１５０は、図１に示した選択部１１０、モンゴメリ乗算回路１２０、選択部１３０、逆元演算回路１４０および分岐部１５０と同様である。また、例えば、データＤＡ１０、ＤＡ１２、ＤＡ１４、ＤＡ２０、ＤＡ３０の意味は、図１と同様である。なお、図３では、図を見やすくするために、制御部３０、７０の指示経路等の記載を省略している。
【００５４】
演算回路１０Ａは、例えば、データＫ、ＤＩＮ、ａ、Ｎを受け、楕円曲線暗号のスカラー倍算を実行する。そして、演算回路１０Ａ、楕円曲線暗号のスカラー倍算の結果であるデータＤＯＵＴを出力する。例えば、データＫは、楕円曲線暗号のスカラー倍算におけるスカラーを示している。以下、データＫを係数Ｋとも称する。データＤＩＮは、素数Ｎを法とする素体上で定義される楕円曲線“ｙ２＝ｘ３＋ａ・ｘ＋ｂ”上の点（Ｘ０，Ｙ０）を示している。以下、点（Ｘ０，Ｙ０）を入力値（Ｘ０，Ｙ０）とも称する。データａは、楕円曲線のパラメータの１つである。データＮは、楕円曲線の定義体の法となる素数である。データＤＯＵＴは、入力値（Ｘ０，Ｙ０）をＫ倍した値（Ｘｋ，Ｙｋ）を示している。以下、値（Ｘｋ，Ｙｋ）を演算結果（Ｘｋ，Ｙｋ）とも称する。
【００５５】
例えば、演算回路１０Ａは、レジスタ２０、制御部３０、分岐部４０、選択部５０、演算部６０、選択部１３０、逆元演算回路１４０および分岐部１５０を有している。また、演算部６０は、制御部７０、加減算回路８０、ワークメモリ９０、分岐部１００、選択部１１０およびモンゴメリ乗算回路１２０を有している。例えば、演算回路１０Ａは、楕円曲線暗号の加算等を繰り返すことにより、楕円曲線暗号のスカラー倍算を実行する。
【００５６】
レジスタ２０は、演算回路１０Ａが受けたデータＫを、格納する。制御部３０は、例えば、分岐部１００、選択部１１０、モンゴメリ乗算回路１２０、選択部１３０、逆元演算回路１４０、分岐部１５０等を制御して、モンゴメリ変換パラメータを算出する。そして、制御部３０は、例えば、分岐部４０、選択部５０、演算部６０等を制御して、楕円曲線暗号のスカラー倍算を実行する。
【００５７】
分岐部４０は、例えば、演算部６０の演算結果（Ｘｉ，Ｙｉ）を、演算部６０の端子Ｐ３から受ける。そして、分岐部４０は、演算部６０の演算結果（Ｘｉ，Ｙｉ）を演算部６０にフィードバックするか、演算部６０の演算結果（Ｘｉ，Ｙｉ）を演算回路１０Ａの演算結果（Ｘｋ，Ｙｋ）として出力するかを選択する。
【００５８】
選択部５０は、演算部６０の端子Ｐ１に与えるデータを選択する。以下、端子Ｐ１で受けたデータの値を入力値（Ｘａ，Ｙａ）や値（Ｘａ，Ｙａ）とも称する。例えば、選択部５０は、演算部６０で繰り返し実行される演算の１回目の演算では、演算部６０の入力値（Ｘａ，Ｙａ）として、入力値（Ｘ０，Ｙ０）を選択する。そして、２回目以降の演算では、選択部５０は、分岐部４０を介してフィードバックされる演算結果（Ｘｉ，Ｙｉ）を、入力値（Ｘａ，Ｙａ）として選択する。
【００５９】
演算部６０は、例えば、楕円曲線暗号の加算等を実現する回路の一部である。例えば、演算部６０および逆元演算回路１４０を含む回路は、楕円曲線暗号の加算等を実行する。演算部６０は、例えば、楕円曲線暗号の加算等を繰り返し実行する。例えば、演算部６０は、１回目の演算では、入力値（Ｘ０，Ｙ０）を入力値（Ｘａ，Ｙａ）として選択部５０から受け、２回目以降の演算では、前回の演算結果（Ｘｉ，Ｙｉ）を入力値（Ｘａ，Ｙａ）として選択部５０から受ける。また、演算部６０は、例えば、データＤＩＮ（入力値（Ｘ０，Ｙ０））を、端子Ｐ２で受ける。以下、端子Ｐ２で受けたデータの値を入力値（Ｘｂ，Ｙｂ）や値（Ｘｂ，Ｙｂ）とも称する。
【００６０】
さらに、演算部６０は、１回目の演算を実行する前に、楕円曲線暗号の加算等の演算に使用するデータａ、Ｎ、モンゴメリ変換パラメータ“Ｒ２ｍｏｄＮ”を、端子Ｐ８、Ｐ９、Ｐ７でそれぞれ受ける。例えば、演算部６０は、１回目の演算を実行する前に算出したモンゴメリ変換パラメータ“Ｒ２ｍｏｄＮ”を、分岐部１５０から受ける。また、演算部６０は、例えば、逆元を使用する演算では、逆元の算出対象であるデータＤＡ２０を端子Ｐ４から選択部１３０に出力する。そして、演算部６０は、例えば、データＤＡ２０の逆元を示すデータＤＡ３０を、分岐部１５０から受ける。
【００６１】
制御部７０は、例えば、加減算回路８０、ワークメモリ９０、モンゴメリ乗算回路１２０および逆元演算回路１４０等を制御して、楕円曲線暗号の加算等を実行する。
【００６２】
加減算回路８０は、制御部７０の指示に応じて、整数加算あるいは整数減算を実行する。例えば、加減算回路８０は、ワークメモリ９０から受けたデータに対して、整数加算あるいは整数減算を実行する。そして、加減算回路８０は、演算結果をワークメモリ９０に格納する。
【００６３】
ワークメモリ９０は、例えば、楕円曲線暗号の加算等の演算過程でモンゴメリ乗算回路１２０や加減算回路８０により使用されるデータ（データＤＡ１０、ＤＡ１２、ＤＡ１４等）を格納する。なお、ワークメモリ９０は、データＤＡ２０、ＤＡ３０を格納してもよい。また、ワークメモリ９０は、モンゴメリ変換パラメータ“Ｒ２ｍｏｄＮ”を、格納してもよい。
【００６４】
分岐部１００は、モンゴメリ乗算回路１２０の演算結果を、モンゴメリ乗算回路１２０から受ける。そして、分岐部１００は、モンゴメリ乗算回路１２０の演算結果をモンゴメリ乗算回路１２０にフィードバックするか、モンゴメリ乗算回路１２０の演算結果を選択部１３０に出力するか、モンゴメリ乗算回路１２０の演算結果をワークメモリ９０に格納するかを選択する。
【００６５】
例えば、分岐部１００は、モンゴメリ変換パラメータを算出する算出期間において、モンゴメリ乗算回路１２０の演算結果“Ｒ−１ｍｏｄＮ”を、選択部１１０に出力する。そして、分岐部１００は、演算結果“Ｒ−１ｍｏｄＮ”がフィードバックされたモンゴメリ乗算回路１２０の演算結果“Ｒ−２ｍｏｄＮ”を、端子Ｐ５から選択部１３０に出力する。また、例えば、分岐部１００は、楕円曲線暗号の加算等の演算が実行されている演算期間では、モンゴメリ乗算回路１２０の演算結果であるデータＤ１４を、ワークメモリ９０に格納する。
【００６６】
選択部１１０は、例えば、セレクタ１１０ａ、１１０ｂ、１１０ｃを有している。例えば、セレクタ１１０ａ、１１０ｂは、モンゴメリ乗算回路１２０の入力端子ＩＮ１に与えるデータを選択する。セレクタ１１０ａは、固定値“１”と、分岐部１００から受ける演算結果“Ｒ−１ｍｏｄＮ”とのいずれかを、セレクタ１１０ｂに出力する。
【００６７】
例えば、セレクタ１１０ａは、モンゴメリ変換パラメータを算出する算出期間において、先ず、固定値“１”をセレクタ１１０ｂに出力する。そして、セレクタ１１０ａは、モンゴメリ乗算回路１２０の演算結果“Ｒ−１ｍｏｄＮ”をフィードバックするとき、分岐部１００から受ける演算結果“Ｒ−１ｍｏｄＮ”を、セレクタ１１０ｂに出力する。
【００６８】
セレクタ１１０ｂは、例えば、セレクタ１１０ａで選択されたデータと、ワークメモリ９０に格納されているデータＤＡ１０とを受ける。そして、セレクタ１１０ｂは、セレクタ１１０ａで選択されたデータとデータＤＡ１０とのいずれかを、モンゴメリ乗算回路１２０の入力端子ＩＮ１に出力する。
【００６９】
例えば、セレクタ１１０ｂは、モンゴメリ変換パラメータを算出する算出期間では、セレクタ１１０ａから受けるデータを入力端子ＩＮ１に出力する。また、セレクタ１１０ｂは、楕円曲線暗号の加算等の演算が実行されている演算期間では、ワークメモリ９０から受けるデータＤＡ１０を入力端子ＩＮ１に出力する。
【００７０】
セレクタ１１０ｃは、モンゴメリ乗算回路１２０の入力端子ＩＮ２に与えるデータを選択する。例えば、セレクタ１１０ｃは、固定値“１”と、ワークメモリ９０に格納されているデータＤＡ１２とを受ける。そして、セレクタ１１０ｃは、固定値“１”とデータＤＡ１２とのいずれかを、モンゴメリ乗算回路１２０の入力端子ＩＮ２に出力する。例えば、セレクタ１１０ｃは、モンゴメリ変換パラメータを算出する算出期間では、固定値“１”を入力端子ＩＮ２に出力する。また、セレクタ１１０ｃは、楕円曲線暗号の加算等の演算が実行されている演算期間では、ワークメモリ９０から受けるデータＤＡ１２を入力端子ＩＮ２に出力する。
【００７１】
モンゴメリ乗算回路１２０は、入力端子ＩＮ１、ＩＮ２で受けた整数に対するモンゴメリ乗算を実行し、演算結果を分岐部１００に出力する。
【００７２】
選択部１３０は、演算部６０から受けるデータＤＡ２０と、分岐部１００から受けるモンゴメリ乗算回路１２０の演算結果“Ｒ−2ｍｏｄＮ”とのいずれかを、逆元演算回路１４０に出力する。例えば、選択部１３０は、モンゴメリ変換パラメータを算出する算出期間では、分岐部１００から受けるモンゴメリ乗算回路１２０の演算結果“Ｒ−2ｍｏｄＮ”を、逆元演算回路１４０に出力する。そして、選択部１３０は、楕円曲線暗号の加算等の演算が実行されている演算期間では、演算部６０から受けるデータＤＡ２０を逆元演算回路１４０に出力する。データＤＡ２０は、例えば、楕円曲線暗号の加算等の演算過程で使用されるデータである。
【００７３】
逆元演算回路１４０は、選択部１３０から受けたデータの逆元を計算し、演算結果（選択部１３０から受けたデータの逆元）を分岐部１５０に出力する。
【００７４】
分岐部１５０は、逆元演算回路１４０の演算結果をデータＤＡ３０として演算部６０に出力するか、逆元演算回路１４０の演算結果をモンゴメリ変換パラメータとして演算部６０に出力するかを選択する。例えば、分岐部１５０は、モンゴメリ変換パラメータを算出する算出期間では、逆元演算回路１４０の演算結果“Ｒ2ｍｏｄＮ”を、モンゴメリ変換パラメータとして演算部６０の端子Ｐ７に出力する。そして、分岐部１５０は、楕円曲線暗号の加算等の演算が実行されている演算期間では、逆元演算回路１４０の演算結果（データＤＡ２０の逆元）を、データＤＡ３０として演算部６０の端子Ｐ６に出力する。
【００７５】
このように、演算回路１０Ａは、楕円曲線暗号のスカラー倍算で使用されるモンゴメリ乗算回路１２０および逆元演算回路１４０を利用して、モンゴメリ変換パラメータを算出する。したがって、この実施形態では、モンゴメリ変換パラメータを算出する専用の演算回路（例えば、多倍長データを処理可能な減算回路や１ビット左シフト回路等）を追加することなく、モンゴメリ変換パラメータを演算回路１０Ａ内で算出できる。すなわち、この実施形態では、演算回路１０Ａの面積の増加を抑制しつつ、モンゴメリ変換パラメータを演算回路１０Ａ内で算出できる。
【００７６】
なお、演算回路１０Ａの構成は、この例に限定されない。例えば、演算回路１０Ａは、モンゴメリ乗算回路１２０の演算結果“Ｒ−１ｍｏｄＮ”を、ワークメモリ９０を介してモンゴメリ乗算回路１２０にフィードバックしてもよい。また、例えば、分岐部１００、選択部１１０、選択部１３０、分岐部１５０等は、制御部７０に制御されてもよい。すなわち、制御部７０は、分岐部１００、選択部１１０、モンゴメリ乗算回路１２０、選択部１３０、逆元演算回路１４０、分岐部１５０等を制御して、モンゴメリ変換パラメータを算出してもよい。
【００７７】
また、演算部６０は、レジスタ２０、制御部３０、分岐部４０、選択部５０、選択部１３０、逆元演算回路１４０および分岐部１５０の少なくとも１つを有してもよい。例えば、演算部６０は、選択部１３０、逆元演算回路１４０および分岐部１５０を有してもよい。
【００７８】
図４は、楕円曲線暗号の単位元、加算、スカラー倍算の定義の一例を示している。例えば、素数Ｎを法とする素体上で定義される楕円曲線“ｙ２＝ｘ３＋ａ・ｘ＋ｂ”上の整数座標を有する２点Ｐ＝（Ｘｐ，Ｙｐ）、Ｑ＝（Ｘｑ，Ｙｑ）に対して、図４に示すように、単位元、加算、スカラー倍算が定義される。
【００７９】
単位元Ｏは、無限遠点と呼ばれる特別な点である。具体的なｘ座標、ｙ座標は、定義されない。便宜上、単位元Ｏは、楕円曲線上の点とみなされる。
【００８０】
加算“Ｐ＋Ｑ”は、５つの場合に分けて定義される。Ｐ＝Ｏの場合、加算は、式（６）で与えられる。
【００８１】
Ｐ＋Ｑ＝Ｑ  ‥（６）
Ｑ＝Ｏの場合、加算は、式（７）で与えられる。
【００８２】
Ｐ＋Ｑ＝Ｐ  ‥（７）
Ｙｐ＝−Ｙｑの場合、加算は、式（８）で与えられる。
【００８３】
Ｐ＋Ｑ＝Ｏ  ‥（８）
Ｘｐ＝Ｘｑの場合、加算は、Ｒ＝（Ｘｒ，Ｙｒ）を用いて、式（９）で与えられる。なお、Ｘｒ、Ｙｒは、式（１０）、式（１１）、式（１２）で与えられる。Ｘｐ＝Ｘｑの場合の加算は、２倍算と呼ばれている。
【００８４】
Ｐ＋Ｑ＝Ｒ  ‥（９）
λ＝（（３・Ｘｐ２＋ａ）・（２・Ｙｐ）−１）ｍｏｄＮ  ‥（１０）
Ｘｒ＝（λ２−Ｘｐ−Ｘｑ）ｍｏｄＮ  ‥（１１）
Ｙｒ＝（λ・（Ｘｐ−Ｘｒ）−Ｙｐ）ｍｏｄＮ  ‥（１２）
上記の４つ以外の場合、加算は、Ｒ＝（Ｘｒ，Ｙｒ）を用いて、式（１３）で与えられる。なお、Ｘｒ、Ｙｒは、式（１４）、式（１５）、式（１６）で与えられる。
【００８５】
Ｐ＋Ｑ＝Ｒ  ‥（１３）
λ＝（（Ｙｐ−Ｙｑ）・（Ｘｐ−Ｘｑ）−１）ｍｏｄＮ  ‥（１４）
Ｘｒ＝（λ２−Ｘｐ−Ｘｑ）ｍｏｄＮ  ‥（１５）
Ｙｒ＝（λ・（Ｘｐ−Ｘｒ）−Ｙｐ）ｍｏｄＮ  ‥（１６）
スカラー倍算“Ｋ・Ｐ”は、係数Ｋが０の場合と係数Ｋが０より大きい整数の場合とに分けられる。なお、係数Ｋは、０以上の整数である。係数Ｋが０の場合（Ｋ＝０）、スカラー倍算は、式（１７）で与えられる。
【００８６】
Ｋ・Ｐ＝Ｏ  ‥（１７）
係数Ｋが０より大きい整数の場合（Ｋ＞０の整数の場合）、スカラー倍算は、式（１８）に示すように、Ｋ個のＰを加算する。なお、式（１８）で実行される加算は、楕円曲線暗号の加算である。
【００８７】
Ｋ・Ｐ＝Ｐ＋Ｐ＋・・・＋Ｐ＋Ｐ  ‥（１８）
このように、楕円曲線暗号を実現する回路では、整数の加減算、乗算剰余演算、逆元演算を実行する回路が実装される。乗算剰余演算を含む処理は、モンゴメリ乗算を用いることにより、高速に処理される。すなわち、この実施形態では、モンゴメリ変換パラメータを算出する専用の演算回路を追加することなく、楕円曲線暗号を実現する回路の一部（モンゴメリ乗算回路１２０、逆元演算回路１４０）を利用して、モンゴメリ変換パラメータを算出できる。
【００８８】
図５は、図３に示した演算回路１０Ａの動作の一例を示している。すなわち、図５は、演算回路１０Ａの制御方法の一例を示している。なお、図５は、係数Ｋが２以上の場合の楕円曲線暗号のスカラー倍算を実行する演算回路１０Ａの動作の一例を示している。図５の動作では、係数Ｋを処理する際、右向きバイナリ法を用いている。なお、係数Ｋが１の場合は、演算回路１０Ａは、入力値（Ｘ０，Ｙ０）を、楕円曲線暗号のスカラー倍算の結果として出力する。また、係数Ｋが０の場合は、演算回路１０Ａは、単位元Ｏを、楕円曲線暗号のスカラー倍算の結果として出力する。
【００８９】
図５の動作を実現するための制御は、ハードウエアにより実行されてもよいし、ソフトウエアにより実行されてもよい。ステップＳ１００ａは、例えば、モンゴメリ変換パラメータを算出する算出期間での動作に対応している。また、ステップＳ２００ａ、Ｓ２１０ａ、Ｓ２２０ａ、Ｓ３００−Ｓ４００は、楕円曲線暗号の加算等の演算が実行されている演算期間での動作に対応している。ステップＳ２００ａ、Ｓ２１０ａ、Ｓ２２０ａは、分岐部１００の動作が追加されたことを除いて、図２で説明したステップＳ２００、Ｓ２１０、Ｓ２２０と同様である。
【００９０】
ステップＳ１００ａでは、演算回路１０Ａは、モンゴメリ変換パラメータを計算する。例えば、演算回路１０Ａは、図６に示すステップＳ１００−Ｓ１６０の処理を実行して、モンゴメリ変換パラメータを算出する。
【００９１】
ステップＳ２００ａでは、制御部３０は、例えば、ワークメモリ９０の出力（データＤＡ１０、ＤＡ１２の経路）をモンゴメリ乗算回路１２０の入力端子ＩＮ１、ＩＮ２に選択部１１０を介して接続する。これにより、ワークメモリ９０から選択部１１０に転送されるデータＤＡ１０、ＤＡ１２が、モンゴメリ乗算回路１２０の入力端子ＩＮ１、ＩＮ２に供給される。
【００９２】
また、ステップＳ２００ａでは、制御部３０は、例えば、モンゴメリ乗算回路１２０の出力をワークメモリ９０の入力（データＤＡ１４の経路）に分岐部１００を介して接続する。これにより、モンゴメリ乗算回路１２０の演算結果（データＤＡ１４）がワークメモリ９０に格納される。
【００９３】
ステップＳ２１０ａでは、制御部３０は、例えば、演算部６０の端子Ｐ４を、逆元演算回路１４０の入力に選択部１３０を介して接続する。これにより、演算部６０から選択部１３０に転送されるデータＤＡ２０（例えば、値“Ｚ”）が、逆元演算回路１４０に供給される。
【００９４】
ステップＳ２２０ａでは、制御部３０は、例えば、逆元演算回路１４０の出力を、演算部６０の端子Ｐ６に分岐部１５０を介して接続する。これにより、分岐部１５０に転送される逆元演算回路１４０の演算結果（例えば、“Ｚ−１ｍｏｄＮ”）が、データＤＡ３０として演算部６０に供給される。
【００９５】
ステップＳ３００では、演算回路１０Ａは、係数Ｋをレジスタ２０にロードする。
【００９６】
ステップＳ３１０では、選択部５０は、例えば、演算回路１０Ａが受けた入力値（Ｘ０，Ｙ０）を、演算部６０の入力値（Ｘａ，Ｙａ）として選択する。例えば、制御部３０は、演算回路１０Ａが受けた入力値（Ｘ０，Ｙ０）を、演算部６０の端子Ｐ１に選択部５０を介して供給する。
【００９７】
ステップＳ３２０では、演算回路１０Ａは、演算部６０等を制御して、値（Ｘａ，Ｙａ）に対する楕円曲線暗号の２倍算を実行する。
【００９８】
ステップＳ３３０では、選択部５０は、例えば、演算部６０の演算結果（Ｘｉ，Ｙｉ）を、演算部６０の入力値（Ｘａ，Ｙａ）として選択する。例えば、制御部３０は、演算部６０の端子Ｐ３を演算部６０の端子Ｐ１に、分岐部４０および選択部５０を介して接続する。
【００９９】
ステップＳ３４０では、演算回路１０Ａは、変数ｉを１に設定する。変数ｉは、例えば、レジスタに保持される。
【０１００】
ステップＳ３５０では、演算回路１０Ａは、レジスタ２０の左からｉビット目が１か否かを判定する。なお、レジスタ２０の左から０ビット目は、レジスタ２０の最も左のビットである。レジスタ２０の左からｉビット目が１のとき（ステップＳ３５０のＹｅｓ）、演算回路１０Ａの動作は、ステップＳ３６０に移る。一方、レジスタ２０の左からｉビット目が１でないとき（ステップＳ３５０のＮｏ）、演算回路１０Ａの動作は、ステップＳ３７０に移る。
【０１０１】
ステップＳ３６０では、演算回路１０Ａは、演算部６０等を制御して、値（Ｘａ，Ｙａ）、（Ｘｂ，Ｙｂ）に対する楕円曲線暗号の加算を実行する。
【０１０２】
ステップＳ３７０では、演算回路１０Ａは、変数ｉが“ｋ−１”と等しいか否かを判定する。なお、ｋは、係数Ｋのビット数（ビット長）である。変数ｉが“ｋ−１”と等しいとき（ステップＳ３７０のＹｅｓ）、演算回路１０Ａの動作は、ステップＳ４００に移る。一方、変数ｉが“ｋ−１”と異なるとき（ステップＳ３７０のＮｏ）、演算回路１０Ａの動作は、ステップＳ３８０に移る。
【０１０３】
ステップＳ３８０では、演算回路１０Ａは、演算部６０等を制御して、値（Ｘａ，Ｙａ）に対する楕円曲線暗号の２倍算を実行する。
【０１０４】
ステップＳ３９０では、演算回路１０Ａは、変数ｉをインクリメントする（ｉ=ｉ+1）。ステップＳ３９０の後の演算回路１０Ａの動作は、ステップＳ３５０に戻る。
【０１０５】
ステップＳ４００では、演算回路１０Ａは、演算部６０の演算結果（Ｘｉ，Ｙｉ）を、演算回路１０Ａの演算結果（Ｘｋ，Ｙｋ）として出力する。例えば、分岐部４０は、演算部６０の端子Ｐ３から受けた演算結果（Ｘｉ，Ｙｉ）を、データＤＯＵＴとして出力する。これにより、入力値（Ｘ０，Ｙ０）をＫ倍した演算結果（Ｘｋ，Ｙｋ）が、演算回路１０Ａから出力される。
【０１０６】
なお、演算回路１０Ａの動作は、この例に限定されない。例えば、ステップＳ２００ａは、ステップＳ２２０ａの後に実行されてもよい。
【０１０７】
図６は、図５に示したモンゴメリ変換パラメータの計算処理（図５のステップＳ１００ａ）の一例を示している。図６の動作は、図２のステップＳ１００−Ｓ１６０に対応している。図２で説明したステップと同様のステップについては、同様の符号を付し、これ等については、詳細な説明を省略する。
【０１０８】
ステップＳ１００、Ｓ１１０は、図２のステップＳ１００、Ｓ１１０と同様である。ステップＳ１２０ａ、Ｓ１２０ｂは、図２のステップＳ１２０に対応している。
【０１０９】
ステップＳ１２０ａでは、例えば、分岐部１００は、モンゴメリ乗算回路１２０の演算結果“Ｒ−１ｍｏｄＮ”を、セレクタ１１０ａに出力する。
【０１１０】
ステップＳ１２０ｂでは、例えば、選択部１１０は、モンゴメリ乗算回路１２０の演算結果“Ｒ−１ｍｏｄＮ”を、モンゴメリ乗算回路１２０の入力端子ＩＮ１にフィードバックする。例えば、選択部１１０のセレクタ１１０ａは、分岐部１００から受けた演算結果“Ｒ−１ｍｏｄＮ”を、セレクタ１１０ｂに出力する。そして、セレクタ１１０ｂは、セレクタ１１０ａから受けた演算結果“Ｒ−１ｍｏｄＮ”を、モンゴメリ乗算回路１２０の入力端子ＩＮ１に出力する。なお、選択部１１０は、モンゴメリ乗算回路１２０の入力端子ＩＮ２には、固定値“１”を供給している。
【０１１１】
ステップＳ１３０は、図２のステップＳ１３０と同様である。ステップＳ１４０ａ、Ｓ１４０ｂは、図２のステップＳ１４０に対応している。
【０１１２】
ステップＳ１４０ａでは、例えば、分岐部１００は、モンゴメリ乗算回路１２０の演算結果“Ｒ−２ｍｏｄＮ”を、選択部１３０に出力する。
【０１１３】
ステップＳ１４０ｂでは、選択部１３０は、分岐部１００から受けたモンゴメリ乗算回路１２０の演算結果“Ｒ−２ｍｏｄＮ”を、逆元演算回路１４０に供給する。
【０１１４】
ステップＳ１５０、Ｓ１６０は、図２のステップＳ１５０、Ｓ１６０と同様である。例えば、ステップＳ１６０では、分岐部１５０は、モンゴメリ変換パラメータとして、逆元演算回路１４０の演算結果“Ｒ２ｍｏｄＮ”を演算部６０の端子Ｐ７に出力する。このように、ステップＳ１００−Ｓ１６０の処理により、モンゴメリ変換パラメータが計算される。
【０１１５】
以上、図３から図６に示した実施形態においても、図１および図２に示した実施形態と同様の効果を得ることができる。例えば、この実施形態では、モンゴメリ変換パラメータを算出する専用の演算回路を追加することなく、楕円曲線暗号を実現する回路の一部（モンゴメリ乗算回路１２０、逆元演算回路１４０）を利用して、モンゴメリ変換パラメータを算出できる。すなわち、この実施形態においても、演算回路１０Ａの面積の増加を抑制しつつ、モンゴメリ変換パラメータを演算回路１０Ａ内で算出できる。このように、この実施形態においても、モンゴメリ変換パラメータを計算するための専用の演算回路またはプログラムを要することなく、モンゴメリ変換パラメータを算出できる。
【０１１６】
図７は、演算回路および演算回路の制御方法の別の実施形態を示している。この実施形態の演算回路１２は、図１に示した選択部１１０および逆元演算回路１４０の代わりに、選択部１１２およびモンゴメリ逆元演算回路１４２を有している。演算回路１２のその他の構成は、図１に示した演算回路１０と同様である。図１から図６で説明した要素と同様の要素については、同様の符号を付し、これ等については、詳細な説明を省略する。例えば、演算回路１２は、公開鍵暗号を利用した暗号装置や認証装置に搭載される。
【０１１７】
演算回路１２は、例えば、選択部１１２、モンゴメリ乗算回路１２０、選択部１３０、モンゴメリ逆元演算回路１４２および分岐部１５０を有している。
【０１１８】
選択部１１２は、モンゴメリ乗算回路１２０の入力端子ＩＮ１、ＩＮ２に与えるデータを選択する第１選択部の一例である。例えば、選択部１１２は、モンゴメリ変換パラメータを算出する算出期間に、入力端子ＩＮ１、ＩＮ２に１を与える。そして、選択部１１２は、所定の処理に含まれる演算が実行される演算期間に、所定の処理に含まれる演算用のデータＤＡ１０、ＤＡ１２を入力端子ＩＮ１、ＩＮ２に与える。
【０１１９】
モンゴメリ乗算回路１２０は、入力端子ＩＮ１、ＩＮ２で受けた整数に対するモンゴメリ乗算を実行する。例えば、モンゴメリ乗算回路１２０は、ｎビットの入力値Ａ、Ｂを入力端子ＩＮ１、ＩＮ２で受けた場合、演算結果“（Ａ・Ｂ・Ｒ−１）ｍｏｄＮ”を出力する。モンゴメリ乗算回路１２０の演算結果は、選択部１３０等に出力される。
【０１２０】
選択部１３０は、モンゴメリ逆元演算回路１４２に与えるデータを選択する第２選択部の一例である。例えば、選択部１３０は、モンゴメリ変換パラメータを算出する算出期間に、モンゴメリ乗算回路１２０の演算結果“Ｒ−１ｍｏｄＮ”を、モンゴメリ逆元演算回路１４２に与える。そして、選択部１３０は、所定の処理の演算期間に、所定の処理に含まれる演算用のデータＤＡ２０をモンゴメリ逆元演算回路１４２に与える。
【０１２１】
モンゴメリ逆元演算回路１４２は、与えられた整数（例えば、Ｚ）に対して、素数Ｎを法とする素体におけるモンゴメリ逆元（例えば、“（Ｚ−１・Ｒ）ｍｏｄＮ”）を計算する。そして、モンゴメリ逆元演算回路１４２は、例えば、演算結果（与えられた整数のモンゴメリ逆元）を分岐部１５０に出力する。
【０１２２】
分岐部１５０は、モンゴメリ逆元演算回路１４２の演算結果の用途を選択する第３選択部の一例である。例えば、分岐部１５０は、モンゴメリ変換パラメータを算出する算出期間に、演算結果“Ｒ−１ｍｏｄＮ”を受けたモンゴメリ逆元演算回路１４２の演算結果“Ｒ２ｍｏｄＮ”を、モンゴメリ変換パラメータとして出力する。そして、分岐部１５０は、所定の処理の演算期間に、データＤＡ２０を受けたモンゴメリ逆元演算回路１４２の演算結果を、所定の処理に含まれる演算用のデータＤＡ３０として出力する。
【０１２３】
なお、演算回路１２の構成は、この例に限定されない。例えば、演算回路１２は、データＤＩＮ、ＤＡ１０、ＤＡ１２、ＤＡ１４、ＤＡ２０、ＤＡ３０等を保持するワークメモリを有してもよい。また、演算回路１２は、選択部１１２、１３０、分岐部１５０等を制御する制御部を有してもよい。また、演算回路１２は、モンゴメリ乗算回路１２０の出力を分岐させる分岐部を有してもよい。
【０１２４】
図８は、図７に示した演算回路１２の動作の一例を示している。すなわち、図８は、演算回路１２の制御方法の一例を示している。図８の動作を実現するための制御は、ハードウエアにより実行されてもよいし、ソフトウエアにより実行されてもよい。ステップＳ１００−Ｓ１６２は、例えば、モンゴメリ変換パラメータを算出する算出期間での動作に対応している。また、ステップＳ２００−Ｓ２２２は、所定の処理に含まれる演算が実行される演算期間での動作に対応している。なお、図２で説明したステップと同様のステップについては、同様の符号を付し、これ等については、詳細な説明を省略する。
【０１２５】
ステップＳ１００、Ｓ１１０は、図２のステップＳ１００、Ｓ１１０と同様である。
【０１２６】
ステップＳ１４２では、選択部１１２は、ステップＳ１１０でのモンゴメリ乗算回路１２０の演算結果“Ｒ−１ｍｏｄＮ”を、モンゴメリ逆元演算回路１４２に供給する。
【０１２７】
ステップＳ１５２では、例えば、モンゴメリ逆元演算回路１４２は、モンゴメリ逆元演算を実行する。例えば、モンゴメリ逆元演算回路１４２は、ステップＳ１４２で与えられた値“Ｒ−１ｍｏｄＮ”のモンゴメリ逆元を計算する。これにより、“Ｒ−１ｍｏｄＮ”のモンゴメリ逆元である“Ｒ２ｍｏｄＮ”が算出される。したがって、モンゴメリ逆元演算回路１４２の演算結果“Ｒ２ｍｏｄＮ”が、モンゴメリ逆元演算回路１４２から分岐部１５０に出力される。
【０１２８】
ステップＳ１６２では、分岐部１５０は、ステップＳ１５２でのモンゴメリ逆元演算回路１４２の演算結果“Ｒ２ｍｏｄＮ”を、モンゴメリ変換パラメータに設定する。例えば、分岐部１５０は、モンゴメリ逆元演算回路１４２の演算結果“Ｒ２ｍｏｄＮ”を、モンゴメリ変換パラメータとして出力する。例えば、演算回路１２は、分岐部１５０から出力された“Ｒ２ｍｏｄＮ”をモンゴメリ変換パラメータとして保持する。
【０１２９】
ステップＳ２００は、図２のステップＳ２００と同様である。
【０１３０】
ステップＳ２１２では、選択部１３０は、データＤＡ２０（例えば、値“Ｚ”）を、モンゴメリ逆元演算回路１４２に供給する。例えば、選択部１３０は、モンゴメリ逆元演算回路１４２の入力元として、データＤＡ２０の経路を選択する。
【０１３１】
ステップＳ２２２では、分岐部１５０は、モンゴメリ逆元演算回路１４２の演算結果（例えば、“（Ｚ−１・Ｒ）ｍｏｄＮ”）を、データＤＡ３０の経路に出力する。すなわち、分岐部１５０は、データＤＡ３０として、モンゴメリ逆元演算回路１４２の演算結果（例えば、“（Ｚ−１・Ｒ）ｍｏｄＮ”）を出力する。このように、分岐部１５０は、例えば、モンゴメリ逆元演算回路１４２の出力先として、データＤＡ３０の経路を選択する。
【０１３２】
なお、選択部１１２、１３０および分岐部１５０は、例えば、所定の処理に含まれる演算が実行される演算期間では、所定の処理に含まれる演算用のデータＤＡ１０、ＤＡ１２、ＤＡ２０、ＤＡ３０の経路を選択した状態を維持する。これにより、この実施形態では、所定の処理に含まれる演算が終了するまで、所定の処理の過程で使用されるデータを、モンゴメリ乗算回路１２０、モンゴメリ逆元演算回路１４２等に対して入出力できる。
【０１３３】
また、演算回路１２の動作は、この例に限定されない。例えば、ステップＳ２００は、ステップＳ２２２の後に実行されてもよい。すなわち、選択部１１２、１３０および分岐部１５０は、モンゴメリ変換パラメータの計算が終了した後、所定の処理に含まれる演算が終了するまで、所定の処理に含まれる演算用のデータＤＡ１０、ＤＡ１２、ＤＡ２０、ＤＡ３０の経路を選択した状態を維持していればよい。
【０１３４】
以上、図７および図８に示した実施形態においても、図１および図２に示した実施形態と同様の効果を得ることができる。例えば、選択部１１２は、モンゴメリ変換パラメータを算出する算出期間に、モンゴメリ乗算回路１２０の入力端子ＩＮ１、ＩＮ２に１を与える。また、例えば、選択部１３０は、算出期間に、モンゴメリ乗算回路１２０の演算結果“Ｒ−１ｍｏｄＮ”をモンゴメリ逆元演算回路１４２に与える。そして、分岐部１５０は、算出期間に、モンゴメリ逆元演算回路１４２の演算結果“Ｒ２ｍｏｄＮ”をモンゴメリ変換パラメータとして出力する。
【０１３５】
なお、選択部１１２、１３０および分岐部１５０は、例えば、所定の処理に含まれる演算が実行される演算期間では、所定の処理に含まれる演算用のデータＤＡ１０、ＤＡ１２、ＤＡ２０、ＤＡ３０の経路を選択した状態を維持する。これにより、この実施形態では、所定の処理に含まれる演算が終了するまで、所定の処理の過程で使用されるデータを、モンゴメリ乗算回路１２０、モンゴメリ逆元演算回路１４２等に対して入出力できる。すなわち、演算回路１２は、所定の処理で使用されるモンゴメリ乗算回路１２０およびモンゴメリ逆元演算回路１４２を利用して、モンゴメリ変換パラメータを算出する。
【０１３６】
このように、この実施形態においても、モンゴメリ変換パラメータを算出する専用の演算回路を追加することなく、所定の処理を実現する回路の一部（モンゴメリ乗算回路１２０、モンゴメリ逆元演算回路１４２）を利用して、モンゴメリ変換パラメータを算出できる。すなわち、この実施形態においても、演算回路１２の面積の増加を抑制しつつ、モンゴメリ変換パラメータを演算回路１２内で算出できる。したがって、この実施形態においても、モンゴメリ変換パラメータを計算するための専用の演算回路またはプログラムを要することなく、モンゴメリ変換パラメータを算出できる。
【０１３７】
図９は、演算回路および演算回路の制御方法の別の実施形態を示している。この実施形態の演算回路１２Ａは、図３に示した分岐部１００、選択部１１０および逆元演算回路１４０の代わりに、分岐部１０２、選択部１１２およびモンゴメリ逆元演算回路１４２を有している。演算回路１２Ａのその他の構成は、図３に示した演算回路１０Ａと同様である。図１から図８で説明した要素と同様の要素については、同様の符号を付し、これ等については、詳細な説明を省略する。例えば、演算回路１２Ａは、公開鍵暗号を利用した暗号装置や認証装置に搭載される。例えば、演算回路１２Ａは、楕円曲線暗号のスカラー倍算を実行するスカラー倍算演算回路である。以下、演算回路１２Ａがスカラー倍算演算回路であるとして、演算回路１０Ａとの相違点を中心に説明する。なお、演算回路１２Ａの用途は、スカラー倍算演算回路に限定されない。図９では、図を見やすくするために、制御部３０、７０の指示経路等の記載を省略している。
【０１３８】
演算回路１２Ａは、例えば、レジスタ２０、制御部３０、分岐部４０、選択部５０、演算部６０、選択部１３０、モンゴメリ逆元演算回路１４２および分岐部１５０を有している。また、演算部６０は、制御部７０、加減算回路８０、ワークメモリ９０、分岐部１０２、選択部１１２およびモンゴメリ乗算回路１２０を有している。例えば、演算回路１２Ａは、楕円曲線暗号の加算等を繰り返すことにより、楕円曲線暗号のスカラー倍算を実行する。
【０１３９】
制御部３０は、例えば、分岐部１０２、選択部１１２、モンゴメリ乗算回路１２０、選択部１３０、モンゴメリ逆元演算回路１４２、分岐部１５０等を制御して、モンゴメリ変換パラメータを算出する。そして、制御部３０は、例えば、分岐部４０、選択部５０、演算部６０等を制御して、楕円曲線暗号のスカラー倍算を実行する。
【０１４０】
分岐部１０２は、モンゴメリ乗算回路１２０の演算結果を、モンゴメリ乗算回路１２０から受ける。そして、分岐部１０２は、モンゴメリ乗算回路１２０の演算結果を選択部１３０に出力するか、モンゴメリ乗算回路１２０の演算結果をワークメモリ９０に格納するかを選択する。
【０１４１】
例えば、分岐部１０２は、モンゴメリ変換パラメータを算出する算出期間において、モンゴメリ乗算回路１２０の演算結果“Ｒ−１ｍｏｄＮ”を、端子Ｐ５から選択部１３０に出力する。また、例えば、分岐部１０２は、楕円曲線暗号の加算等の演算が実行されている演算期間では、モンゴメリ乗算回路１２０の演算結果であるデータＤＡ１４を、ワークメモリ９０に格納する。
【０１４２】
選択部１１２は、例えば、モンゴメリ乗算回路１２０の入力端子ＩＮ１に与えるデータを選択するセレクタ１１２ａと、モンゴメリ乗算回路１２０の入力端子ＩＮ２に与えるデータを選択する１１２ｂとを有している。
【０１４３】
セレクタ１１２ａは、例えば、固定値“１”と、ワークメモリ９０に格納されているデータＤＡ１０とを受ける。そして、セレクタ１１２ａは、固定値“１”とデータＤＡ１０とのいずれかを、モンゴメリ乗算回路１２０の入力端子ＩＮ１に出力する。例えば、セレクタ１１２ａは、モンゴメリ変換パラメータを算出する算出期間では、固定値“１”を入力端子ＩＮ１に出力する。また、セレクタ１１２ａは、楕円曲線暗号の加算等の演算が実行されている演算期間では、ワークメモリ９０から受けるデータＤＡ１０を入力端子ＩＮ１に出力する。
【０１４４】
セレクタ１１２ｂは、例えば、固定値“１”と、ワークメモリ９０に格納されているデータＤＡ１２とを受ける。そして、セレクタ１１２ｂは、固定値“１”とデータＤＡ１２とのいずれかを、モンゴメリ乗算回路１２０の入力端子ＩＮ２に出力する。例えば、セレクタ１１２ｂは、モンゴメリ変換パラメータを算出する算出期間では、固定値“１”を入力端子ＩＮ２に出力する。また、セレクタ１１２ｂは、楕円曲線暗号の加算等の演算が実行されている演算期間では、ワークメモリ９０から受けるデータＤＡ１２を入力端子ＩＮ２に出力する。
【０１４５】
モンゴメリ乗算回路１２０は、入力端子ＩＮ１、ＩＮ２で受けた整数に対するモンゴメリ乗算を実行し、演算結果を分岐部１０２に出力する。
【０１４６】
選択部１３０は、演算部６０から受けるデータＤＡ２０と、分岐部１０２から受けるモンゴメリ乗算回路１２０の演算結果“Ｒ−１ｍｏｄＮ”とのいずれかを、モンゴメリ逆元演算回路１４２に出力する。例えば、選択部１３０は、モンゴメリ変換パラメータを算出する算出期間では、モンゴメリ逆元演算回路１４２に、分岐部１０２から受けるモンゴメリ乗算回路１２０の演算結果“Ｒ−１ｍｏｄＮ”を出力する。そして、選択部１３０は、楕円曲線暗号の加算等の演算が実行されている演算期間では、演算部６０から受けるデータＤＡ２０を、モンゴメリ逆元演算回路１４２に出力する。
【０１４７】
モンゴメリ逆元演算回路１４２は、選択部１３０から受けたデータのモンゴメリ逆元を計算し、演算結果（選択部１３０から受けたデータのモンゴメリ逆元）を分岐部１５０に出力する。
【０１４８】
分岐部１５０は、例えば、モンゴメリ変換パラメータを算出する算出期間では、モンゴメリ逆元演算回路１４２の演算結果“Ｒ２ｍｏｄＮ”を、モンゴメリ変換パラメータとして演算部６０の端子Ｐ７に出力する。また、分岐部１５０は、楕円曲線暗号の加算等の演算が実行されている演算期間では、モンゴメリ逆元演算回路１４２の演算結果（データＤＡ２０のモンゴメリ逆元）を、データＤＡ３０として演算部６０の端子Ｐ６に出力する。
【０１４９】
このように、演算回路１２Ａは、楕円曲線暗号のスカラー倍算で使用されるモンゴメリ乗算回路１２０およびモンゴメリ逆元演算回路１４２を利用して、モンゴメリ変換パラメータを算出する。したがって、この実施形態では、モンゴメリ変換パラメータを算出する専用の演算回路（例えば、多倍長データを処理可能な減算回路や１ビット左シフト回路等）を追加することなく、モンゴメリ変換パラメータを演算回路１２Ａ内で算出できる。すなわち、この実施形態では、演算回路１２Ａの面積の増加を抑制しつつ、モンゴメリ変換パラメータを演算回路１２Ａ内で算出できる。
【０１５０】
なお、演算回路１２Ａの構成は、この例に限定されない。例えば、分岐部１０２、選択部１１２、モンゴメリ乗算回路１２０、選択部１３０、モンゴメリ逆元演算回路１４２、分岐部１５０は、制御部７０に制御されてもよい。すなわち、制御部７０は、分岐部１０２、選択部１１２、モンゴメリ乗算回路１２０、選択部１３０、モンゴメリ逆元演算回路１４２、分岐部１５０等を制御して、モンゴメリ変換パラメータを算出してもよい。
【０１５１】
また、演算部６０は、レジスタ２０、制御部３０、分岐部４０、選択部５０、選択部１３０、モンゴメリ逆元演算回路１４２および分岐部１５０の少なくとも１つを有してもよい。例えば、演算部６０は、選択部１３０、モンゴメリ逆元演算回路１４２および分岐部１５０を有してもよい。
【０１５２】
図１０は、図９に示した演算回路１２Ａの動作の一例を示している。すなわち、図１０は、演算回路１２Ａの制御方法の一例を示している。なお、図１０は、係数Ｋが２以上の場合の楕円曲線暗号のスカラー倍算を実行する演算回路１２Ａの動作の一例を示している。図１０の動作では、係数Ｋを処理する際、右向きバイナリ法を用いている。なお、係数Ｋが１の場合は、演算回路１２Ａは、入力値（Ｘ０，Ｙ０）を、楕円曲線暗号のスカラー倍算の結果として出力する。また、係数Ｋが０の場合は、演算回路１２Ａは、単位元Ｏを、楕円曲線暗号のスカラー倍算の結果として出力する。
【０１５３】
図１０の動作を実現するための制御は、ハードウエアにより実行されてもよいし、ソフトウエアにより実行されてもよい。図１０の動作は、ステップＳ１００ｂは、例えば、モンゴメリ変換パラメータを算出する算出期間での動作に対応している。また、ステップＳ２００ａ、Ｓ２１２ａ、Ｓ２２２ａ、Ｓ３００−Ｓ４００は、楕円曲線暗号の加算等の演算が実行されている演算期間での動作に対応している。ステップＳ２００ａ、Ｓ２１２ａ、Ｓ２２２ａは、分岐部１０２の動作が追加されたことを除いて、図８で説明したステップＳ２００、Ｓ２１０、Ｓ２２０と同様である。また、ステップＳ３００−Ｓ４００は、図５のステップＳ３００−Ｓ４００と同様である。
【０１５４】
ステップＳ１００ｂでは、演算回路１２Ａは、モンゴメリ変換パラメータを計算する。例えば、演算回路１２Ａは、図１１に示すステップＳ１００−Ｓ１６２の処理を実行して、モンゴメリ変換パラメータを算出する。
【０１５５】
ステップＳ２００ａでは、制御部３０は、例えば、ワークメモリ９０の出力（データＤＡ１０、ＤＡ１２の経路）をモンゴメリ乗算回路１２０の入力端子ＩＮ１、ＩＮ２に選択部１１２を介して接続する。これにより、ワークメモリ９０から選択部１１２に転送されるデータＤＡ１０、ＤＡ１２が、モンゴメリ乗算回路１２０の入力端子ＩＮ１、ＩＮ２に供給される。
【０１５６】
また、ステップＳ２００ａでは、制御部３０は、例えば、モンゴメリ乗算回路１２０の出力をワークメモリ９０の入力（データＤＡ１４の経路）に分岐部１０２を介して接続する。これにより、モンゴメリ乗算回路１２０の演算結果（データＤＡ１４）がワークメモリ９０に格納される。
【０１５７】
ステップＳ２１２ａでは、制御部３０は、例えば、演算部６０の端子Ｐ４を、モンゴメリ逆元演算回路１４２の入力に選択部１３０を介して接続する。これにより、演算部６０から選択部１３０に転送されるデータＤＡ２０（例えば、値“Ｚ”）が、モンゴメリ逆元演算回路１４２に供給される。
【０１５８】
ステップＳ２２２ａでは、制御部３０は、モンゴメリ逆元演算回路１４２の出力を演算部６０の端子Ｐ６に分岐部１５０を介して接続する。これにより、分岐部１５０に転送されるモンゴメリ逆元演算回路１４２の演算結果（例えば、“（Ｚ−１・Ｒ）ｍｏｄＮ”）が、データＤＡ３０として演算部６０に供給される。
【０１５９】
ステップＳ３００−Ｓ４００は、例えば、図５のステップＳ３００−Ｓ４００の説明における演算回路１０Ａを演算回路１２Ａに読み替えることで説明される。なお、演算回路１２Ａの動作は、この例に限定されない。例えば、ステップＳ２００ａは、ステップＳ２２２ａの後に実行されてもよい。
【０１６０】
図１１は、図１０に示したモンゴメリ変換パラメータの計算処理（図１０のステップＳ１００ｂ）の一例を示している。図１１の動作は、図８のステップＳ１００−Ｓ１６２に対応している。図８で説明したステップと同様のステップについては、同様の符号を付し、これ等については、詳細な説明を省略する。
【０１６１】
ステップＳ１００、Ｓ１１０は、図８のステップＳ１００、Ｓ１１０と同様である。ステップＳ１４２ａ、Ｓ１４２ｂは、図８のステップＳ１４２に対応している。
【０１６２】
ステップＳ１４２ａでは、分岐部１０２は、例えば、モンゴメリ乗算回路１２０の演算結果“Ｒ−１ｍｏｄＮ”を、選択部１３０に出力する。
【０１６３】
ステップＳ１４２ｂでは、選択部１３０は、分岐部１０２から受けたモンゴメリ乗算回路１２０の演算結果“Ｒ−１ｍｏｄＮ”を、モンゴメリ逆元演算回路１４２に供給する。
【０１６４】
ステップＳ１５２、Ｓ１６２は、図８のステップＳ１５２、Ｓ１６２と同様である。例えば、ステップＳ１６２では、分岐部１５０は、モンゴメリ逆元演算回路１４２の演算結果“Ｒ２ｍｏｄＮ”を、モンゴメリ変換パラメータとして演算部６０の端子Ｐ７に出力する。このように、ステップＳ１００−Ｓ１６２の処理により、モンゴメリ変換パラメータが計算される。
【０１６５】
以上、図９から図１１に示した実施形態においても、図１から図８に示した実施形態と同様の効果を得ることができる。例えば、この実施形態では、モンゴメリ変換パラメータを算出する専用の演算回路を追加することなく、楕円曲線暗号を実現する回路の一部（モンゴメリ乗算回路１２０、モンゴメリ逆元演算回路１４２）を利用して、モンゴメリ変換パラメータを算出できる。すなわち、この実施形態においても、演算回路１２Ａの面積の増加を抑制しつつ、モンゴメリ変換パラメータを演算回路１２Ａ内で算出できる。このように、この実施形態においても、モンゴメリ変換パラメータを計算するための専用の演算回路またはプログラムを要することなく、モンゴメリ変換パラメータを算出できる。
【０１６６】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【０１６７】
１０、１０Ａ、１２、１２Ａ‥演算回路；２０‥レジスタ；３０‥制御部；４０‥分岐部；５０‥選択部；６０‥演算部；７０‥制御部；８０‥加減算回路；９０‥ワークメモリ；１００、１０２‥分岐部；１１０、１１２‥選択部；１２０‥モンゴメリ乗算回路１２０；１３０‥選択部；１４０‥逆元演算回路；１４２‥モンゴメリ逆元演算回路；１５０‥分岐部
【図１】
2015055851.tif 000003
【図２】
2015055851.tif 000004
【図３】
2015055851.tif 000005
【図４】
2015055851.tif 000006
【図５】
2015055851.tif 000007
【図６】
2015055851.tif 000008
【図７】
2015055851.tif 000009
【図８】
2015055851.tif 000010
【図９】
2015055851.tif 000011
【図１０】
2015055851.tif 000012
【図１１】
2015055851.tif 000013