説明

演算プログラム、演算方法、および演算装置

【課題】RSA暗号処理を、CPUの空き時間を可能な限り少なくなるよう非均等に分割し、短時間で完了させること。
【解決手段】演算装置100は、検出部209にてCPUの空き時間を検出する。そして算出部210にて、空き時間とべき乗剰余演算処理を構成する乗算剰余演算処理に要する処理時間と所定の部分演算処理における乗算剰余演算処理の利用回数とに基づいて、空き時間内に処理可能なビット数を算出する。抽出部211にて、算出された処理可能なビット数に基づいて、対象データからビット列を抽出し、実行部212にて、抽出されたビット列を与えて、所定の部分演算処理を実行する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、演算処理を実行する演算プログラム、演算方法、および演算装置に関する。
【背景技術】
【0002】
携帯電話、車載器、ハードディスク装置などの組み込み機器が、搭載しているCPU(Central Processing Unit)は、PC(Personal Computer)に搭載しているCPUに比べて、処理能力が低い。また、メモリ搭載量も低いのが一般的である。さらに、組み込み機器では、タスクが異常停止していないかを確認するために、一定時間ごとにOS(Operating System)等の制御部に応答することでタスクの生存確認を行うことがある。応答先としては、装置内の制御部の他、ネットワーク経由による他の装置へ応答することもある。
【0003】
一方、情報セキュリティ分野で使用されるRSA(Rivest−Shamir−Adleman)暗号処理は、演算負荷が大きく、処理能力の低い組み込み機器のCPUでは、CPUを占有する時間が長くなり、CPUは、一定時間以内にRSA暗号処理を終了することができない可能性がある。一定時間以内に処理を終了できない場合、RSA暗号処理を実行しているタスクは制御部に応答をすることができずに、制御部はタスクが異常停止していると誤認識をする結果となる。御認識を防ぐためには、RSA暗号処理を途中で中断し、制御部に応答を行った後、RSA暗号処理を再開することが必要となる。
【0004】
前述した、RSA暗号処理を分割する課題に関しては、RSA暗号処理のほとんどを構成しているべき乗剰余演算処理を所定の部分乗算に分割して実行する技術が開示されている(たとえば、下記特許文献1を参照。)。また、べき乗剰余演算の高速化方法であるモンゴメリ乗算剰余演算処理において、複数回に分割して実行する技術が開示されている(たとえば、下記特許文献2を参照。)。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2003−29627号公報
【特許文献2】特開平8−169322号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、上述した従来技術において、RSA暗号処理を分割する際に、分割した各RSA暗号分割処理が同一の長さになるような均等分割を行っていた。このため、CPUに空き時間が生じ、無駄な時間が存在しているという問題があった。
【0007】
また、部分乗算を行う際に、事前の前処理として、ある一定範囲のべきに対し、べき乗剰余演算結果を格納する事前計算テーブルの生成処理を行い、事前計算テーブルを参照する場合がある。しかしながら、事前計算テーブルの大きさは常に固定サイズであり、固定の事前計算テーブルを参照したべき乗剰余演算処理を、CPUの空き時間内に行った場合、空き時間をすべて使いきれるとは限らず、空き時間が残る場合があるという問題があった。
【0008】
本発明は、上述した従来技術による問題点を解消するため、CPUの空き時間にあわせてRSA暗号処理を非均等に分割し、処理効率の向上を図ることができる演算プログラム、演算方法、および演算装置を提供することを目的とする。
【課題を解決するための手段】
【0009】
上述した課題を解決し、目的を達成するため、本演算プログラム、演算方法、および演算装置は、CPUの空き時間を検出し、空き時間とべき乗剰余演算処理を構成する乗算剰余演算処理に要する処理時間と所定の部分演算処理における乗算剰余演算処理の利用回数とに基づいて、空き時間内に処理可能なビット数を算出し、算出された処理可能なビット数に基づいて、対象データからビット列を抽出し、抽出されたビット列を与えて、所定の部分演算処理を実行することを要件とする。
【発明の効果】
【0010】
本演算プログラム、演算方法、および演算装置によれば、CPUの空き時間にあわせてRSA暗号処理を非均等に分割し、処理効率の向上を図ることができるという効果を奏する。
【図面の簡単な説明】
【0011】
【図1】実施の形態1にかかる演算装置のハードウェア構成を示すブロック図である。
【図2】演算装置100の機能的構成を示すブロック図である。
【図3】従来例と実施の形態1による実行状態を示す図である。
【図4】バイナリ法の概要説明を示す図である。
【図5】バイナリ法によるRSA暗号非均等分割処理による実行状態を示す図である。
【図6】ウィンドウ法の概要説明を示す図である。
【図7】ウィンドウ法の処理時間を示す図である。
【図8】ウィンドウ法によるRSA暗号非均等分割処理による実行状態を示す図である。
【図9】ウィンドウ法によるRSA暗号非均等分割処理を行った処理時間例を示す図である。
【図10】RSA暗号非均等分割処理を示すフローチャートである。
【図11】実施の形態1にかかる最適実装法取得および処理可能ビット数算出処理を示すフローチャートである。
【図12】実施の形態2にかかる最適実装法取得および処理可能ビット数算出処理を示すフローチャートである。
【図13】実施の形態3にかかる最適実装法取得および処理可能ビット数算出処理を示すフローチャートである。
【図14】実施の形態4にかかる最適実装法取得および処理可能ビット数算出処理を示すフローチャートである。
【発明を実施するための形態】
【0012】
以下に添付図面を参照して、本発明にかかる演算プログラム、演算方法、および演算装置の好適な実施の形態を詳細に説明する。
【0013】
(実施の形態1)
(演算装置100のハードウェア構成)
図1は、実施の形態1にかかる演算装置のハードウェア構成を示すブロック図である。図1において、演算装置100は、CPU101と、ROM(Read‐Only Memory)102と、RAM(Random Access Memory)103と、磁気ディスクドライブ104と、磁気ディスク105と、光ディスクドライブ106と、光ディスク107と、ディスプレイ108と、I/F(Interface)109と、キーボード110と、マウス111と、スキャナ112と、プリンタ113と、を備えている。また、各構成部はバス114によってそれぞれ接続されている。
【0014】
ここで、CPU101は、演算装置100の全体の制御を司る。CPU以外にも、リアルタイム処理を求められる組み込み機器で使用されるDSP(Digital Signal Processor)であってもよい。
【0015】
ROM102は、ブートプログラムなどのプログラムを記憶している。RAM103は、CPU101のワークエリアとして使用される。磁気ディスクドライブ104は、CPU101の制御にしたがって磁気ディスク105に対するデータのリード/ライトを制御する。磁気ディスク105は、磁気ディスクドライブ104の制御で書き込まれたデータを記憶する。また、演算装置100の小型化を目的として、磁気ディスク105の代わりにFlash ROMを使用してもよい。
【0016】
光ディスクドライブ106は、CPU101の制御にしたがって光ディスク107に対するデータのリード/ライトを制御する。光ディスク107は、光ディスクドライブ106の制御で書き込まれたデータを記憶したり、光ディスク107に記憶されたデータをコンピュータに読み取らせたりする。
【0017】
ディスプレイ108は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ108は、たとえば、CRT、TFT液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【0018】
I/F109は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワーク115に接続され、このネットワーク115を介して他の装置に接続される。そして、I/F109は、ネットワーク115と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F109には、たとえばモデムやLANアダプタなどを採用することができる。
【0019】
キーボード110は、文字、数字、各種指示などの入力のためのキーを備え、データの入力を行う。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス111は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などを行う。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【0020】
スキャナ112は、画像を光学的に読み取り、演算装置100内に画像データを取り込む。なお、スキャナ112は、OCR(Optical Character Reader)機能を持たせてもよい。また、プリンタ113は、画像データや文書データを印刷する。プリンタ113には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。なお、組み込み機器環境においては、磁気ディスクドライブ104、磁気ディスク105、光ディスクドライブ106、光ディスク107、ディスプレイ108、I/F109、キーボード110、マウス111、スキャナ112、プリンタ113、ネットワーク115の一部、またはすべてが存在しない構成であってもよい。
【0021】
(演算装置100の機能的構成)
次に、演算装置100の機能的構成について説明する。図2は、演算装置100の機能的構成を示すブロック図である。演算装置100は、制御部201と、処理コントロール部202と、受信部203と、演算部204と、タイマー205と、空き時間計算部206と、リファレンス所要時間格納テーブル207と、処理時間取得部208と、を含む構成である。この制御部となる機能(制御部201〜処理時間取得部208)は、具体的には、たとえば、図1に示したROM102、RAM103、磁気ディスク105、光ディスク107などの記憶装置に記憶されたプログラムをCPU101が実行することにより、その機能を実現する。または、I/F109を経由して他のCPUが実行することにより、その機能を実現してもよい。
【0022】
制御部201は、演算装置の制御を行うOSであり、演算部204を含む、すべてのタスクを実行するために、処理コントロール部202に処理を命令する機能を有する。具体的には、たとえば、制御部201は、処理コントロール部202がタスクAを実行終了後に、タスクBを実行するように処理コントロール部202に命令する。
【0023】
処理コントロール部202は、制御部201からの命令にしたがって、タスクを実行する機能を有する。また、演算部204以外のタスクを実行後、OSに応答を返すまでの空き時間を空き時間計算部206より取得する。具体的には、たとえば、OSに応答を返す周期が30[msec](ミリ秒)の場合に、CPU101が他のタスクを10[msec]実行した場合、処理コントロール部202は空き時間として20[msec]を取得する。なお、取得結果は、RAM103、磁気ディスク105、光ディスク107などの記憶領域に記憶される。
【0024】
受信部203は、べき乗剰余演算処理が行われる被対象データを受信する機能を有する。具体的には、たとえば、暗号化を行う場合には、被対象データは平文であり、また、べき乗剰余演算処理の指数部分にあたる対象データとして、公開鍵の情報もあわせて受信する。なお、受信結果は、RAM103、磁気ディスク105、光ディスク107などの記憶領域に記憶される。
【0025】
演算部204は、処理コントロール部202によって実行される機能の一つであり、RSA暗号処理でのべき乗剰余演算処理を行う機能を有する。具体的には、たとえば、暗号文=平文^公開鍵(modN)というべき乗剰余演算処理を行うことで、平文から暗号文を生成する。また、平文=暗号文^暗号鍵(modN)というべき乗剰余演算処理を行うことで、暗号文から平文を生成する。演算部204の内部の詳細は後述する。なお、演算結果は、RAM103、磁気ディスク105、光ディスク107などの記憶領域に記憶される。
【0026】
タイマー205は、CPU101に対して一定間隔で割り込みを発生させる機能を有する。具体的には、たとえば、タイマー205により割り込みが発生した際に、制御部201で管理しているカウンタを増加することで、内部時刻を更新する。カウンタは、たとえば、CPU101が保持しているレジスタに記憶される。
【0027】
空き時間計算部206は、タイマー205の内部時刻から空き時間を計算する機能を有する。具体的には、たとえば、次にOSに応答を返す時刻から、現在時刻を引くことで、空き時間を求めることができる。なお、計算結果は、RAM103、磁気ディスク105、光ディスク107などの記憶領域に記憶される。
【0028】
リファレンス所要時間格納テーブル207は、乗算剰余演算処理にかかる時間を事前に計算、もしくは計測し、格納しておく領域である。乗算剰余演算処理は、べき乗剰余演算処理の高速化方法であるモンゴメリ乗算剰余演算処理であってもよい。具体的には、たとえば、平文を暗号文にする場合、平文であるべき乗剰余演算処理の被対象データのビット長と、秘密鍵であるべき乗のビット長と、公開鍵であるモジュラスのビット長をインデックスとして、モンゴメリ乗算剰余演算処理にかかる時間を格納する。
【0029】
また、処理方式がCRT(Chinese Remainder Theorem)もしくは非CRTかもインデックスに含めてもよい。リファレンス所要時間格納テーブル207は、RAM103、磁気ディスク105、光ディスク107などの記憶領域に記憶される。または、事前計測した結果をROM102に保持しておいても良い。また、インデックスを持たず、1024ビットの乗算剰余演算処理の結果を保持しておき、利用時には暗黙的に1024ビットとして扱ってもよい。
【0030】
処理時間取得部208は、べき乗剰余演算処理を構成する乗算剰余演算処理に要する処理時間を取得する機能を有する。具体的には、たとえば、演算装置100は、リファレンス所要時間格納テーブル207から、べき乗剰余演算処理の被対象データのビット長と、べき乗のビット長と、モジュラスのビット長を指定することで、条件に当てはまる場合の処理時間を取得する。なお、取得結果は、RAM103、磁気ディスク105、光ディスク107などの記憶領域に記憶される。
【0031】
次に、実施の形態1にかかる演算部204の機能詳細について説明する。演算部204は、検出部209と、算出部210と、抽出部211と、実行部212と、設定部213と、テーブル生成部214と、テーブル取得部215で構成される。
【0032】
検出部209は、べき乗剰余演算処理より優先度の高い処理を行うまでの空き時間を検出する機能を有する。具体的には、たとえば、他のタスクの処理が終わった時点で、次のOSに応答を返す時刻までの空き時間を、空き時間計算部206より検出する。なお、検出結果は、RAM103、磁気ディスク105、光ディスク107などの記憶領域に記憶される。
【0033】
算出部210は、乗算剰余演算処理に要する処理時間と、べき乗剰余演算処理の部分演算処理における乗算剰余演算処理の利用回数と、空き時間に基づいて、空き時間内で処理可能なビット数を算出する機能を有する。それぞれ、処理時間は処理時間取得部208から、空き時間は検出部209から検出する。部分演算処理とは、後述するバイナリ法、ウィンドウ法である。さらに、受信部203によって受信された対象データのビット列に基づいて、空き時間内で処理可能なビット数を算出してもよい。
【0034】
部分演算処理でバイナリ法が実装されている場合、処理可能なビット数の算出式として、下記式(1)で算出してもよい。以下、この算出方式を「処理可能ビット数算出法1」と称する。実施の形態1では、処理可能ビット数算出法1を適用している。
【0035】
Kb=Floor((T/t−1)/2)…(1)
【0036】
ただし、Kbは処理可能なビット数を、Floor()は床関数を、Tは空き時間を、tは乗算剰余演算処理に要する処理時間を示す。
【0037】
部分演算処理でウィンドウ法が実装されている場合、処理可能なビット数の算出式として、下記式(2)で算出してもよい。以下、この算出方式を「処理可能ビット数算出法2」と称する。後述する実施の形態2では、処理可能ビット数算出法2を適用している。
【0038】
Kb=Floor((T/t−2^n)/(n+1))*n…(2)
【0039】
ただし、Kbは処理可能なビット数を、Floor()は床関数を、Tは空き時間を、tは乗算剰余演算処理に要する処理時間を、nはウィンドウ法にて、1度に処理を行う対象のビット数を示す。以下、ウィンドウ幅とする。
【0040】
部分演算処理でバイナリ法が実装されている場合、空き時間内に乗算剰余演算処理の利用可能な回数である演算利用可能回数を下記式(3)にて求める。そして、対象ビットの値に応じて演算を実行した回数を加算することにより、演算を実行した回数が演算利用可能回数になるまで対象ビットを順次読み出し、読み出した対象ビットの数を処理可能なビット数として、算出してもよい。具体的には、対象ビットが0ならば回数を1加算し、対象ビットが1ならば回数を2加算する。以下、この算出方式を「処理可能ビット数算出法3」と称する。後述する実施の形態3では、処理可能ビット数算出法3を適用している。
【0041】
a=Floor(T/t−1)…(3)
【0042】
ただし、aは演算利用可能回数を、Floor()は床関数を、Tは空き時間を、tは乗算剰余演算処理に要する処理時間を示す。
【0043】
バイナリ法では、対象ビットが0である場合は乗算剰余演算処理を1回行い、1である場合は乗算剰余演算処理を2回行う。したがって、対象ビットの値に沿って乗算剰余演算処理を行う回数を計算することで、処理可能なビット数を算出できる。
【0044】
部分演算処理でウィンドウ法が実装されている場合、空き時間内に乗算剰余演算処理の利用可能な回数である演算利用可能回数を下記式(4)にて求める。そして、ウィンドウ幅分のビット列が取り得るビットパターンに応じて演算を実行した回数を加算する。演算を実行した回数が演算利用可能回数になるまでビット列を順次読み出し、読み出したビット列を構成するビットの数を処理可能なビット数として、算出してもよい。具体的には、ビット列がすべて0ならば回数をウィンドウ幅分加算し、ビット列に1が含まれるならば回数をウィンドウ幅+1分加算する。以下、この算出方式を「処理可能ビット数算出法4」と称する。後述する実施の形態4では、処理可能ビット数算出法4を適用している。
【0045】
a=Floor(T/t−2^n)…(4)
【0046】
ただし、aは演算利用可能回数を、Floor()は床関数を、Tは空き時間を、tは乗算剰余演算処理に要する処理時間を、nはウィンドウ幅を示す。
【0047】
ウィンドウ法では、nビットのビット列がすべて0である場合は乗算剰余演算処理をn回行い、ビット列に1が含まれる場合は乗算剰余演算処理をn+1回行う。したがって、nビットのビット列の値に沿って乗算剰余演算処理を行う回数を計算することで、処理可能なビット数を算出できる。
【0048】
また、実施の形態2または4でのウィンドウ幅nについて、取り得るウィンドウ幅ごとに対して処理可能なビット数を算出し、後述する抽出部211にて、最長となるビット数を抽出し、後述する実行部212で実行してもよい。また、算出時に後述する設定部213にて設定されたテーブルの生成時間を含めて算出してもよい。
【0049】
また、実施の形態1〜4を同時に複数持つ形態でもよい。具体的には、たとえば、実施の形態1であるバイナリ法と実施の形態2であるバイナリ法を同時に持ち、それぞれ処理可能なビット数を算出する。そして、処理可能なビット数が最大となる部分演算処理と処理可能なビット数を使用してもよい。
【0050】
算出の具体例として、たとえば、実施の形態1にて、乗算剰余演算処理に要する処理時間が0.1[msec]、部分演算処理がバイナリ法、空き時間が20[msec]の場合を考える。バイナリ法における乗算剰余演算処理の利用回数は1ビットに対して2回である。前述の条件では、後述する式1を使用することにより、Kb=Floor((20/0.1−1)/2)により、空き時間内に99ビット処理可能であることが算出できる。なお、算出結果は、RAM103、磁気ディスク105、光ディスク107などの記憶領域に記憶される。
【0051】
抽出部211は、受信部203によって受信された対象データから算出部210によって算出されたビット数分のビット列を抽出する機能を有する。また、部分演算処理を開始する開始ビット位置を記憶装置から読み出し、対象データの開始ビット位置から、算出されたビット数分のビット列を抽出する。その後、次の算出時のために、開始ビット位置と算出されたビット数分に基づいて、新たな開始ビット位置を求め、開始ビット位置として記憶装置に格納してもよい。
【0052】
具体的には、たとえば、算出部210によって99ビット処理可能であるという算出結果を受けとったら、抽出部211は、対象データの先頭もしくは記憶装置に格納されている開始ビット位置から99ビット分のビット列を抽出する。なお、算出結果は、RAM103、磁気ディスク105、光ディスク107などの記憶領域に記憶される。
【0053】
実行部212は、抽出部211によって抽出されたビット列に対して、部分演算処理を実行する機能を有する。具体的には、たとえば、実施の形態1または3では、バイナリ法を実行する。また、実施の形態2または4では、ウィンドウ法を実行する。バイナリ法の概要説明は図4にて、ウィンドウ法の概要説明は図6にて後述する。
【0054】
設定部213は、部分演算処理がウィンドウ法の場合に、ウィンドウ幅ごとに、後述するテーブル生成部214で生成するテーブルの作成時間を、処理時間取得部208を用いて設定する機能を有する。具体的には、たとえば、ウィンドウ幅が2ならば、テーブルの作成時間は、2^2×(乗算剰余演算処理)と設定できる。なお、設定結果は、RAM103、磁気ディスク105、光ディスク107などの記憶領域に記憶される。
【0055】
テーブル生成部214は、部分演算処理がウィンドウ法の場合に、事前に行う処理として、べき乗剰余演算処理が行われる被対象データをウィンドウ幅のビット列が取り得るビットパターンごとにべき乗剰余した値を格納するテーブルを生成する機能を有する。具体的には、たとえば、ウィンドウ幅が4ビットで、被対象データがX、モジュラスがZの場合、X^0(modZ)、X^1(modZ)、・・・、X^15(modZ)の値を求め、テーブルに格納する。なお、生成結果は、RAM103、磁気ディスク105、光ディスク107などの記憶領域に記憶される。
【0056】
テーブル取得部215は、部分演算処理がウィンドウ法の場合に、テーブル生成部214によって生成されたテーブルから、ビットパターンに基づいて、被対象データをビットパターンにてべき乗剰余した値を取得する機能を有する。具体的には、たとえば、ウィンドウ幅が4ビットで、被対象データがX、モジュラスがZの場合に、ウィンドウ内のビットパターンが9である場合は、テーブルに格納されているX^9(modZ)の値を取得する。なお、取得結果は、RAM103、磁気ディスク105、光ディスク107などの記憶領域に記憶される。
【0057】
以上の機器、機能を使用して、演算装置100はべき乗剰余演算処理を行う。次に、従来例と実施の形態1による実行状態を示す。
【0058】
(実施の形態1の概要説明)
図3は、従来例と実施の形態1による実行状態を示す図である。前提条件として、10[msec]ごとにOSに対して応答を返す。従来例での実行状態301では、別タスクを実行した後に、分割されたRSA暗号処理が行われている状態を示している。RSA暗号処理を均等に分割する場合、一番空き時間が短い10〜20[msec]の区間にあわせるため、他の区間、たとえば、0〜10[msec]の区間で空き時間303、20〜30[msec]の区間で空き時間304が発生してしまう。
【0059】
実施の形態1では、RSA暗号処理をそれぞれの空き時間を動的に計算して処理分割し、効率的にCPUを利用する。実施の形態1での実行状態302では、RSA暗号処理は、0〜10[msec]の区間では部分演算処理305、10〜20[msec]の区間では部分演算処理306、20〜30[msec]の区間では部分演算処理307といった状態に非均等分割される。
【0060】
図4は、バイナリ法の概要説明を示す図である。実施の形態1では、部分演算処理にバイナリ法が実装されている。バイナリ法はべき乗部分を2進数表現し、得られたビット列に対して1ビットごとにべき乗剰余演算処理を行う方法である。平文X、公開鍵d、モジュラスZ、があるときに、求める暗号文Yは、Y=X^d(modZ)で表すことができる。
【0061】
ここで、d=21としてバイナリ法の具体例を示す。d=21を2進数表記すると(10101)となり、式401が得られる。式401において、符号402,403,405,406は2乗算をあらわし、符号404,407は乗算をあらわす。これら符号402〜407で示した乗算および2乗算は、d=21の2進数表記(10101)の各ビットに対応している。符号402の2乗算は2進数表記(10101)の最上位から2番目のビットである0が対応している。以下、順に、符号403の2乗算と符号404の乗算は、最上位から3番目のビットである1が対応している。符号405の2乗算は、最上位から4番目のビットである0が対応している。符号406の2乗算と符号407の乗算は、最下位のビットである1が対応している。
【0062】
したがって、ビット列先頭以外の対象ビットが0の場合には2乗算を行い、対象ビットが1の場合には2乗算を行った後に乗算を行うことにより、X^21を得ることができる。また、合同式の性質より、A*B(modZ)=(A(modZ))*(B(modZ))(modZ)となるため、乗算剰余を行った結果同士をさらに乗算剰余することで、べき乗剰余と同じ結果を得ることができる。
【0063】
図5は、バイナリ法によるRSA暗号非均等分割処理による実行状態を示す図である。RSA暗号非分割処理の実行状態501では10[msec]の段階でOSに応答を返すことができない。従来例の実行状態502では、バイナリ法を、2乗算のところで分割した例である。タイマーを持たせることで、空き時間に応じてRSA暗号処理を割り当てている。
【0064】
モンゴメリ乗算剰余を使用した従来例の実行状態503では、モンゴメリ乗算剰余を使用する際に必要な前処理が行われるため、0〜10[msec]の区間では、RSA暗号分割処理505が10[msec]を超えてしまっている。同様に10〜20[msec]の区間では、RSA暗号分割処理506が、20〜30[msec]の区間では、RSA暗号分割処理507が、各区間を超過してしまっており、OSに応答を返すことができない状態である。
【0065】
実施の形態1での実行状態504では、モンゴメリ乗算剰余の前処理の時間を含んで処理可能なビット数を算出する。そのため、0〜10[msec]、10〜20[msec]、20〜30[msec]、30〜40[msec]の各区間でRSA暗号分割処理が終了するように割り当てられている。空き時間内で処理可能なビットの算出式は式(1)となる。
【0066】
(実施の形態2の概要説明)
図6は、ウィンドウ法の概要説明を示す図である。実施の形態2のハードウェアの構成は実施の形態1に示したものと等しく、機能的構成も同様であるが、部分演算処理はウィンドウ法が実装されている。また、算出部210も部分演算処理にあわせた機能となる。Y=X^d(modZ)にて、dを2進数表記することで、ビット列601を得る。次に、所定のウィンドウ幅、図6ではkビットごとにビット列を分割し、分割して得たkビットのビット列に対してべき乗剰余演算処理を行う。ウィンドウbm-1、ウィンドウbm-2、・・・、ウィンドウb1、ウィンドウb0と分割し、分割して得た結果が式602である。
【0067】
また、w[0]=X^0(modZ)、w[1]=X^1(modZ)、・・・、w[2^(k−1)]=X^(2^(k−1))(modZ)までを事前計算テーブルとして事前準備する。定義したw[]を使用すると、 ウィンドウbm-1はw[1111]と置き換えられる。以下、同様に、ウィンドウbm-2は、w[0110]と置き換えられ、b1は、w[1001]と置き換えられ、b0は、w[1101]と置き換えられる。置き換えた後、ウィンドウごとに2乗算をk回行い、さらにw[]との乗算を1回行うことを繰り返すことで、Y=X^d(modZ)を求めることができる。
【0068】
メモリが潤沢にある環境では、23〜25ビット程度のデータ量となる事前計算テーブルを事前計算にて準備しておき、べき乗剰余演算実行時にはこの事前計算テーブルを参照することで、高速な処理を実現できる。しかし、組み込み環境では、メモリ搭載量等の観点から事前計算テーブルを内部に保持し続けることができないため、実行の度にテーブル生成を行うことになり、オーバーヘッドがかかる。よって、一度に参照するビット幅が大きいテーブルを準備すれば、べき乗剰余演算の処理が高速に実行できる反面、事前計算テーブル生成の手間は大きくなる。
【0069】
図7は、ウィンドウ法の処理時間を示す図である。ウィンドウ法は、処理の内容として、事前計算テーブルを生成する処理と、べき乗剰余演算処理を行う処理との2つに分かれる。図7は、それぞれのウィンドウ幅にあわせた、事前計算テーブルの生成にかかる処理時間と、べき乗剰余処理の処理時間とを表している。
【0070】
たとえば、ウィンドウ幅が2ビットの場合は、テーブル生成には、2^2×(乗算剰余演算処理)、べき乗剰余演算処理には、(b+b/2)×(乗算剰余演算処理)の時間がかかることになる。ここで、bは対象データのビット長である。ウィンドウ幅がnビットであれば、テーブル生成には、2^n×(乗算剰余演算処理)、べき乗剰余演算処理には、(b+b/n)×(乗算剰余演算処理)の時間がかかることになる。
【0071】
図8は、ウィンドウ法によるRSA暗号非均等分割処理による実行状態を示す図である。ウィンドウ幅を4ビット固定で行ったウィンドウ法の実行状態801では、10〜20[msec]の区間で空き時間803が、20〜30[msec]の区間で空き時間804が、それぞれ発生している。空き時間が発生する理由は、ウィンドウ法はバイナリ法よりも一度にまとめて処理を行うため、空きができることがあるためである。
【0072】
次に、実施の形態2の実行状態802では、空き時間にあわせてウィンドウ幅を動的に変更させることで、空き時間を限りなく少なくなるように使用することができる。具体的には、0〜10[msec]の区間では、ウィンドウ幅は4ビットである。同様に、10〜20[msec]の区間では、ウィンドウ幅は2ビット、20〜30[msec]の区間では、ウィンドウ幅は5ビット、30〜40[msec]の区間では、ウィンドウ幅は4ビットといったようにウィンドウ幅が可変となっている。空き時間内で処理可能なビットの算出式は式(2)となる。
【0073】
図9は、ウィンドウ法によるRSA暗号非均等分割処理を行った処理時間例を示す図である。RSA暗号処理の対象データのビット数を1024ビットとする。また、OSに応答を返す間隔を30[msec]とし、別タスク処理時間として、各最適実装法取得回数の各フィールドが対応する。たとえば、1度目は12[msec]、2度目は10[msec]となる。余り時間Tは、OSに応答を返す間隔30[msec]と別タスク処理時間の差となる。乗算剰余演算処理が行える回数aは、余り時間Tと1回の乗算剰余演算処理に要する所要時間tの商である。
【0074】
前述した前提条件にて、式(2)をウィンドウ幅1〜5ビットまで行い、最大のKbを最適実装法として取得する。たとえば、1度目の場合、Kb(1)としてウィンドウ幅1ビットの場合は89ビット、同様に、Kb(2)は116ビット、Kb(3)は129ビット、Kb(4)は128ビット、Kb(5)は120ビットとなり、最大のKbはKb(3)となる。したがって、未処理のビットは、1024ビットとKb(3)で得た129の差となり、895ビットとなる。以下、2度目以降も同様の処理を行い、処理残りビットが751ビット、721ビット、・・・と繰り返す。9度目の時点で処理残りビットがなくなったため処理を終了する。
【0075】
9度目の分割処理でRSA暗号処理が終わったため、RSA処理に要した処理時間は別タスクの時間も含めると、270[msec]となる。もし、従来例で処理を行った場合、最も余り時間が短い、RSA暗号分割処理の処理時間は5[msec]に設定することになる。ウィンドウ幅として4ビットを使用した場合、1度に24ビット処理することができ、RSA暗号処理ビットが1024ビットである場合、43度目、1290[msec]で終了することになる。
【0076】
(実施の形態1〜4の機能説明)
図10は、RSA暗号非均等分割処理を示すフローチャートである。図10は実施の形態1〜4すべての形態で使用され、後述するステップS1004と、ステップS1008にてそれぞれの形態にて対応する処理が行われる。
【0077】
演算装置100は、別タスク実行後の空き時間を検出部209より検出し、Tに格納する(ステップS1001)。続けて、乗算剰余演算処理の処理時間を処理時間取得部208により取得し、tに格納する(ステップS1002)。演算装置100は、Tとtを用い、a=T/tを計算し(ステップS1003)、aを引数として、最適実装法取得および処理可能ビット数算出処理を実行する(ステップS1004)。具体的な処理内容は、それぞれの実施の形態、実施の形態1では図11、実施の形態2では図12、実施の形態3では図13、実施の形態4では図14にて後述する。
【0078】
最適実装法と処理可能ビット数を取得できたら、演算装置100は、今回が初回のRSA暗号処理であるのかを確認する(ステップS1005)。初回である場合には(ステップS1005:Yes)、受信部203によって受信された対象データを入力データとして取得する(ステップS1006)。初回でなく、2回目以降の場合には(ステップS1005:No)、記憶装置に格納してあったRSA暗号処理途中結果を取得する(ステップS1007)。次に、取得した対象データに対して、算出した処理可能ビット数分、取得した最適実装法を実行する(ステップS1008)。最適実装法は、実施の形態1または3ではバイナリ法を使用し、実施の形態2または4ではウィンドウ法を使用する。
【0079】
処理可能ビット数分、最適実装法を行った後に、演算装置100は、RSA暗号処理が終了したかを確認する(ステップS1009)。終了した場合には(ステップS1009:Yes)、RSA暗号処理結果を出力する(ステップS1010)。終了していなく、途中であった場合には(ステップS1009:No)、RSA暗号処理途中結果を記憶装置に格納する(ステップS1011)。
【0080】
(実施の形態1の機能説明)
図11は、実施の形態1にかかる最適実装法取得および処理可能ビット数算出処理を示すフローチャートである。処理可能ビット数算出法1のフローチャートが図11となる。演算装置100は、引数として渡されたaを用いて、Kb=Floor((a−1)/2)を算出する(ステップS1101)。ステップS1101で求めたKbが処理可能ビット数となり、最適実装法として、バイナリ法を出力し、処理可能ビット数として、Kbを出力し(ステップS1102)、処理を終了する。
【0081】
(実施の形態2の機能説明)
図12は、実施の形態2にかかる最適実装法取得および処理可能ビット数算出処理を示すフローチャートである。処理可能ビット数算出法2のフローチャートが図12となる。演算装置100は、iを1に初期化する(ステップS1201)。後続するステップではiをウィンドウ幅として使用する。
【0082】
次に、演算装置100は、引数として渡されたaを用いて、a−2^iを算出し、0より大きいかを確認する(ステップS1202)。0より大きい場合には(ステップS1202:Yes)、Kb(i)=Floor((a−2^i)/(i+1))*iを算出する(ステップS1203)。算出されたKb(i)を保持し(ステップS1204)、次のウィンドウ幅で計算するために、iをインクリメントし(ステップS1205)、ステップS1202に移行する。
【0083】
a−2^iが0以下の場合は(ステップS1202:No)、演算装置100は、保持したKb(1)、・・・、Kb(i)について、最大値をKb_maxに設定し、対応するウィンドウ幅の値をi_maxに設定する(ステップS1206)。最後に最適実装法として、ウィンドウ幅をi_maxとするウィンドウ法を出力し、処理可能ビット数として、Kb_maxを出力し(ステップS1207)、処理を終了する。
【0084】
また、変数iについて、演算装置100が対応していないウィンドウ幅であった場合は、該当のウィンドウ幅での算出処理を行わず対応しているウィンドウ幅に対して処理を行ってもよい。同様に、ステップS1202にて、a−2^iが0より大きい場合でも、演算装置100のハードウェアの制約上、該当のウィンドウ幅以上でテーブルを生成できない場合には、ステップS1202:Noのルートに入ってもよい。
【0085】
(実施の形態3の機能説明)
図13は、実施の形態3にかかる最適実装法取得および処理可能ビット数算出処理を示すフローチャートである。処理可能ビット数算出法3のフローチャートが図13となる。実施の形態3のハードウェアの構成は実施の形態1に示したものと等しく、機能的構成も同様であるが、算出部210にて、空き時間内に乗算剰余演算処理の利用可能な回数を算出する方法として処理可能ビット数算出法3を使用する。
【0086】
演算装置100は、引数として渡されたaを用いて、Floor(a−1)をaに設定する(ステップS1301)。乗算剰余演算処理の利用回数を示す変数mを用意し、0に初期化する(ステップS1302)。引き続き、RSA暗号処理対象ビット列に、処理開始位置sを設定する(ステップS1303)。そして、RSA暗号処理対象ビット列を指すポインタとして位置pを用意し、位置sと同位置に設定する(ステップS1304)。
【0087】
演算装置100は、位置pがRSA暗号処理対象ビット列の先頭かを確認する(ステップS1305)。先頭の場合は(ステップS1305:Yes)、m=m+1を行い(ステップS1306)、m>aであるかを確認する(ステップS1310)。先頭でない場合は(ステップS1305:No)、続けて、位置pのビットの値が1かを確認する(ステップS1307)。1の場合は(ステップS1307:Yes)、m=m+2を行い(ステップS1309)、0の場合は(ステップS1307:No)、m=m+1を行い(ステップS1308)、ステップS1310に移行する。
【0088】
演算装置100は、ステップS1310にて、m>aでない場合には(ステップS1310:No)、続けて、位置pがRSA暗号処理対象ビット列の末尾にあるかを確認する(ステップS1311)。末尾にない場合は(ステップS1311:No)、位置pを下位方向へ1つ移動し(ステップS1312)、ステップS1305に移行する。末尾であった場合には(ステップS1311:Yes)、RSA暗号処理が終了したことを意味し、後述するステップS1314に移行する。
【0089】
演算装置100は、ステップS1310にて、m>aである場合には(ステップS1310:Yes)、mが空き時間内に処理可能なビット数を超えたことを意味するため、位置pを上位方向へ1つ移動する(ステップS1313)。続けて、Kbを位置sから位置pまでのビット数に設定し(ステップS1314)、最適実装法として、バイナリ法を出力し、処理可能ビット数として、Kbを出力する(ステップS1315)。ステップS1311:Yesのルートの場合は、最下位のビット列までRSA暗号処理が行えることを意味しているため、ステップS1313を行わず、ステップS1314を行う。
【0090】
(実施の形態4の機能説明)
図14は、実施の形態4にかかる最適実装法取得および処理可能ビット数算出処理を示すフローチャートである。処理可能ビット数算出法4のフローチャートが図14となる。実施の形態4のハードウェアの構成は実施の形態2に示したものと等しく、機能的構成も同様であるが、算出部210にて、空き時間内に乗算剰余演算処理の利用可能な回数を算出する方法として処理可能ビット数算出法4を使用する。演算装置100は、iを1に初期化する(ステップS1201)。後続するステップではiをウィンドウ幅として使用する。
【0091】
次に、演算装置100は、引数として渡されたaを用いて、a−2^iを算出し(ステップS1402)、a>0かを確認する(ステップS1403)。a>0であれば(ステップS1403:Yes)、乗算剰余演算処理の利用回数を示す変数mを用意し、0に初期化する(ステップS1404)。引き続き、RSA暗号処理対象ビット列に、処理開始位置sを設定する(ステップS1405)。そして、RSA暗号処理対象ビット列を指すポインタとして位置pを用意し、位置sと同位置に設定する(ステップS1406)。
【0092】
位置pを設定後、演算装置100は、位置pからi−1番目までのビットの値がすべて0かを確認する(ステップS1407)。0である場合は(ステップS1407:Yes)、m=m+iを行い(ステップS1409)、m>aであるかを確認する(ステップS1410)。値が1であるビットが含まれる場合は(ステップS1407:No)、m=m+i+1を行い(ステップS1408)、ステップS1410に移行する。
【0093】
演算装置100は、ステップS1410にて、m>aでない場合には(ステップS1410:No)、続けて、位置pがRSA暗号処理対象ビット列の末尾にあるかを確認する(ステップS1411)。末尾にない場合は(ステップS1411:No)、位置pを下位方向へi分移動し(ステップS1412)、ステップS1407に移行する。末尾であった場合には(ステップS1411:Yes)、RSA暗号処理が終了したことを意味し、後述するステップS1414に移行する。
【0094】
演算装置100は、ステップS1410にて、m>aである場合には(ステップS1410:Yes)、mが空き時間内に処理可能なビット数を超えたことを意味するため、位置pを上位方向へi分移動する(ステップS1413)。次に、Kb(i)を位置sから位置pまでのビット数として保持し(ステップS1414)、iをインクリメントし(ステップS1415)、ステップS1402に移行する。
【0095】
ステップS1403にて、aが0以下の場合は(ステップS1403:No)、演算装置100は、保持したKb(1)、・・・、Kb(i)について、最大値をKb_maxに設定し、対応するウィンドウ幅の値をi_maxに設定する(ステップS1416)。最後に最適実装法として、ウィンドウ幅をi_maxとするウィンドウ法を出力し、処理可能ビット数として、Kb_maxを出力し(ステップS1417)、処理を終了する。
【0096】
また、変数iについて、演算装置100が対応していないウィンドウ幅であった場合は、該当のウィンドウ幅での算出処理を行わず対応しているウィンドウ幅に対して処理を行ってもよい。同様に、ステップS1403にて、aが0より大きい場合でも、演算装置100のハードウェアの制約上、該当のウィンドウ幅以上でテーブルを生成できない場合には、ステップS1403:Noのルートに入ってもよい。
【0097】
以上説明したように、演算装置100によれば、CPUの空き時間にあわせてべき乗剰余演算処理を非均等に分割することにより、1回のRSA暗号処理を短時間で完了することができる。
【0098】
また、ビット列を抽出する場合、ビット列を順次抽出してもよい。これにより、べき乗剰余演算処理の対象データの先頭から末尾までを、複数の非均等に分割した処理に分けて処理することができる。また、上記実施の形態では先頭から末尾までを走査する方法を例示したが、逆に、末尾から先頭方向へ走査してもよい。
【0099】
また、処理可能なビット数を算出する際に、部分演算処理がバイナリ法である場合、バイナリ法における乗算剰余演算処理の利用回数に基づいて、処理可能なビット数を算出してもよい。これにより、バイナリ法での処理可能なビット数を算出でき、CPUの空き時間を有効利用し、1回のRSA暗号処理を短時間で完了することができる。
【0100】
また、処理可能なビット数を算出する際に、部分演算処理がバイナリ法である場合、式(1)を使用してもよい。これにより、具体的にバイナリ法での処理可能なビット数を算出でき、CPUの空き時間を有効利用し、1回のRSA暗号処理を短時間で完了することができる。
【0101】
また、処理可能なビット数を算出する際に、部分演算処理がバイナリ法である場合、式(3)より乗算剰余演算処理の利用可能な回数を求める。そして、対象データの対象ビットの値に応じて回数を減算し、回数が0になるまで対象ビットを順次読み出し、読み出した対象ビットの数を処理可能なビット数として算出してもよい。これにより、対象データのビット列に0が多く、バイナリ法にて、1ビットあたりに乗算剰余演算処理を1度だけ行うことが多い場合、より多くのビット数を算出可能として算出することができる。
【0102】
また、処理可能なビット数を算出する際に、部分演算処理がウィンドウ法である場合、ウィンドウ法における乗算剰余演算処理の利用回数に基づいて、処理可能なビット数を算出してもよい。これにより、ウィンドウ法での処理可能なビット数を算出でき、CPUの空き時間を有効利用し、1回のRSA暗号処理を短時間で完了することができる。
【0103】
また、処理可能なビット数を算出する際に、部分演算処理がウィンドウ法である場合、式(2)を使用してもよい。これにより、具体的にウィンドウ法での処理可能なビット数を算出でき、CPUの空き時間を有効利用し、空き時間にあったテーブルサイズを作成することができ、1回のRSA暗号処理を短時間で完了することができる。
【0104】
また、処理可能なビット数を算出する際に、部分演算処理がウィンドウ法である場合、式(4)より乗算剰余演算処理の利用可能な回数を求める。そして、対象データのウィンドウ幅分のビット列が取り得るビットパターンに応じて回数をウィンドウ幅分減算し、回数が0になるまでビット列を順次読み出し、読み出したビット列を構成するビットの数を処理可能なビット数として算出してもよい。これにより、対象データのビット列に0が多く、ウィンドウ法にて、対象ビット列あたりに乗算剰余演算処理をウィンドウ幅分だけ行うことが多い場合、より多くのビット数を算出可能として算出することができる。
【0105】
また、処理可能なビット数を算出する場合に部分演算処理がウィンドウ法である場合、取り得るウィンドウ幅ごとにビット数を算出し、算出されたビット数のうち最長となるビット数を抽出し、対象データからビット列を抽出し、ウィンドウ法を実行してもよい。これにより、CPUの空き時間の変化にあわせたウィンドウ幅を設定することができ、1回のRSA暗号処理を短時間で完了することができる。また、CPUの空き時間にあわせて非均等に分割した処理ごとに、毎回適切な大きさの事前計算テーブルを生成するため、処理効率を向上することができ、RSA暗号処理を短時間で完了することができる。
【0106】
また、べき乗剰余演算処理を行う方式として、RSA暗号処理を例にしたが、その他のべき乗剰余演算処理や曲線上の点のスカラー倍算を伴う処理、たとえば、楕円曲線暗号、EPOC(Efficient Probabilistic public−key enCryption)暗号、ラビン暗号、エルガマル暗号等でも、本実施の形態を利用することができる。
【0107】
なお、本実施の形態で説明した演算方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション、組み込み機器等のコンピュータで実行することにより実現することができる。本演算プログラムは、ROM、不揮発性メモリ、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本演算プログラムは、インターネット等のネットワークを介して配布してもよい。
【0108】
上述した実施の形態に関し、さらに以下の付記を開示する。
【0109】
(付記1)コンピュータを、
前記コンピュータが一定時間ごとに返す応答までの空き時間を検出する検出手段、
前記検出手段によって検出された空き時間とべき乗剰余演算処理を構成する乗算剰余演算処理に要する処理時間と所定の部分演算処理における前記乗算剰余演算処理の利用回数とに基づいて、前記空き時間内で処理可能なビット数を算出する算出手段、
前記べき乗剰余演算処理の指数部分にあたる対象データから前記算出手段によって算出されたビット数分のビット列を抽出する抽出手段、
前記抽出手段によって抽出されたビット列を与えて前記所定の部分演算処理を実行する実行手段、
として機能させることを特徴とする演算プログラム。
【0110】
(付記2)前記抽出手段は、
前記対象データの先頭ビットから前記ビット数分のビット列を順次抽出することを特徴とする付記1に記載の演算プログラム。
【0111】
(付記3)前記算出手段は、
前記所定の部分演算処理がバイナリ法に関する部分演算処理である場合、前記空き時間と前記乗算剰余演算処理に要する処理時間と前記バイナリ法に関する部分演算処理における前記乗算剰余演算処理の利用回数とに基づいて、前記空き時間内で処理可能な前記バイナリ法でのビット数を算出し、
前記抽出手段は、
前記対象データから前記算出手段によって算出された前記バイナリ法でのビット数分のビット列を抽出し、
前記実行手段は、
前記抽出手段によって抽出されたビット列を与えて前記バイナリ法に関する部分演算処理を実行することを特徴とする付記1または2に記載の演算プログラム。
【0112】
(付記4)前記算出手段は、
下記式(1)により前記処理可能なビット数を算出することを特徴とする付記3に記載の演算プログラム。
Kb=Floor((T/t−1)/2)…(1)
ただし、Kbは処理可能なビット数を、Floor()は床関数を、Tは空き時間を、tは乗算剰余演算処理に要する処理時間を示す。
【0113】
(付記5)前記算出手段は、
下記式(2)により前記空き時間内に前記乗算剰余演算処理の利用可能な回数である演算利用可能回数を求め、前記対象ビットの値に応じて演算を行った回数である演算実行回数を加算することにより、前記演算実行回数が前記演算利用可能回数になるまで対象ビットを順次読み出し、読み出した対象ビットの数を前記処理可能なビット数として算出することを特徴とする付記3に記載の演算プログラム。
a=Floor(T/t−1)…(2)
ただし、aは演算利用可能回数を、Floor()は床関数を、Tは空き時間を、tは乗算剰余演算処理に要する処理時間を示す。
【0114】
(付記6)前記コンピュータを、
前記所定の部分演算処理がウィンドウ法に関する部分演算処理である場合、前記べき乗剰余演算処理が行われる被対象データをウィンドウ幅のビット列が取り得るビットパターンごとにべき乗剰余した値を格納するテーブルを生成する生成手段、
前記生成手段によって生成されたテーブルから、前記ビットパターンに基づいて、前記被対象データをべき乗剰余した値を取得する取得手段として機能させ、
前記算出手段は、
前記空き時間と前記乗算剰余演算処理に要する処理時間と前記ウィンドウ法に関する部分演算処理における前記乗算剰余演算処理の利用回数と前記生成手段によって生成されたテーブルの生成時間と前記ウィンドウ幅とに基づいて、前記空き時間内で処理可能な前記ウィンドウ法でのビット数を算出し、
前記抽出手段は、
前記対象データから前記算出手段によって算出された前記ウィンドウ法でのビット数分のビット列を抽出し、
前記実行手段は、
前記抽出手段によって抽出されたビット列と前記取得手段によって取得された前記被対象データをべき乗剰余した値とを与えて前記ウィンドウ法に関する部分演算処理を実行することを特徴とする付記1または2に記載の演算プログラム。
【0115】
(付記7)前記算出手段は、
下記式(3)により前記処理可能なビット数を算出することを特徴とする付記6に記載の演算プログラム。
Kb=Floor((T/t−2^n)/(n+1))*n…(3)
ただし、Kbは処理可能なビット数を、Floor()は床関数を、Tは空き時間を、tは乗算剰余演算処理に要する処理時間を、nはウィンドウ幅を示す。
【0116】
(付記8)前記算出手段は、
下記式(4)により前記空き時間内に前記乗算剰余演算処理の利用可能な回数である演算利用可能回数を求め、前記ウィンドウ幅分のビット列が取り得るビットパターンに応じて演算を行った回数である演算実行回数をウィンドウ幅に基づいて加算することにより、前記演算実行回数が前記演算利用可能回数になるまで前記ビット列を順次読み出し、読み出したビット列を構成するビットの数を前記処理可能なビット数として算出することを特徴とする付記6に記載の演算プログラム。
a=Floor(T/t−2^n)…(4)
ただし、aは演算利用可能回数を、Floor()は床関数を、Tは空き時間を、tは乗算剰余演算処理に要する処理時間を、nはウィンドウ幅を示す。
【0117】
(付記9)前記算出手段は、
前記ウィンドウ幅ごとに前記ビット数を算出し、
前記抽出手段は、
前記算出手段によって算出されたウィンドウ幅ごとのビット数のうち、最長となるビット数を抽出し、
前記実行手段は、
前記抽出手段によって抽出された最長となるビット数に基づいて、前記ウィンドウ法に関する部分演算処理を実行することを特徴とする付記6〜8のいずれか1つに記載の演算プログラム。
【0118】
(付記10)前記コンピュータを、
前記ウィンドウ幅ごとに、前記テーブルの生成時間を前記乗算剰余演算処理に要する処理時間に基づいて設定する設定手段として機能させ、
前記算出手段は、
前記ウィンドウ幅ごとに、前記設定手段によって設定された生成時間に基づいて前記ビット数を算出し、
前記抽出手段は、
前記ウィンドウ幅ごとに算出されたビット数のうち最長となるビット数分のビット列を抽出し、
前記生成手段は、
前記ビット数が最長となるウィンドウ幅に基づいて、前記被対象データを前記ウィンドウ幅のビット列が取り得るビットパターンごとにべき乗剰余した値を格納するテーブルを生成し、
前記取得手段は、
前記生成手段によって前記ビット数が最長となるウィンドウ幅に基づいて生成されたテーブルから、前記ウィンドウ幅のビット列のビットパターンに基づいて、前記被対象データをべき乗剰余した値を取得し、
前記実行手段は、
前記抽出手段によって抽出されたビット列と前記取得手段によって取得された前記被対象データをべき乗剰余した値とを与えて前記ウィンドウ法に関する部分演算処理を実行することを特徴とする付記9に記載の演算プログラム。
【0119】
(付記11)検出手段と算出手段と抽出手段と実行手段とを備えるコンピュータが、
前記検出手段により、前記コンピュータが一定時間ごとに返す応答までの空き時間を検出する検出工程と、
前記算出手段により、前記検出工程によって検出された空き時間とべき乗剰余演算処理を構成する乗算剰余演算処理に要する処理時間と所定の部分演算処理における前記乗算剰余演算処理の利用回数とに基づいて、前記空き時間内で処理可能なビット数を算出する算出工程と、
前記抽出手段により、前記べき乗剰余演算処理の指数部分にあたる対象データから前記算出工程によって算出されたビット数分のビット列を抽出する抽出工程と、
前記実行手段により、前記抽出工程によって抽出されたビット列を与えて前記所定の部分演算処理を実行する実行工程と、
を実行することを特徴とする演算方法。
【0120】
(付記12)一定時間ごとに返す応答までの空き時間を検出する検出手段と、
前記検出手段によって検出された空き時間とべき乗剰余演算処理を構成する乗算剰余演算処理に要する処理時間と所定の部分演算処理における前記乗算剰余演算処理の利用回数とに基づいて、前記空き時間内で処理可能なビット数を算出する算出手段と、
前記べき乗剰余演算処理の指数部分にあたる対象データから前記算出手段によって算出されたビット数分のビット列を抽出する抽出手段と、
前記抽出手段によって抽出されたビット列を与えて前記所定の部分演算処理を実行する実行手段と、
を備えることを特徴とする演算装置。
【符号の説明】
【0121】
100 演算装置
201 制御部
202 処理コントロール部
203 受信部
204 演算部
205 タイマー
206 空き時間計算部
207 リファレンス所要時間格納テーブル
208 処理時間取得部
209 検出部
210 算出部
211 抽出部
212 実行部
213 設定部
214 テーブル生成部
215 テーブル取得部

【特許請求の範囲】
【請求項1】
コンピュータを、
前記コンピュータが一定時間ごとに返す応答までの空き時間を検出する検出手段、
前記検出手段によって検出された空き時間とべき乗剰余演算処理を構成する乗算剰余演算処理に要する処理時間と所定の部分演算処理における前記乗算剰余演算処理の利用回数とに基づいて、前記空き時間内で処理可能なビット数を算出する算出手段、
前記べき乗剰余演算処理の指数部分にあたる対象データから前記算出手段によって算出されたビット数分のビット列を抽出する抽出手段、
前記抽出手段によって抽出されたビット列を与えて前記所定の部分演算処理を実行する実行手段、
として機能させることを特徴とする演算プログラム。
【請求項2】
前記抽出手段は、
前記対象データの先頭ビットから前記ビット数分のビット列を順次抽出することを特徴とする請求項1に記載の演算プログラム。
【請求項3】
前記算出手段は、
前記所定の部分演算処理がバイナリ法に関する部分演算処理である場合、前記空き時間と前記乗算剰余演算処理に要する処理時間と前記バイナリ法に関する部分演算処理における前記乗算剰余演算処理の利用回数とに基づいて、前記空き時間内で処理可能な前記バイナリ法でのビット数を算出し、
前記抽出手段は、
前記対象データから前記算出手段によって算出された前記バイナリ法でのビット数分のビット列を抽出し、
前記実行手段は、
前記抽出手段によって抽出されたビット列を与えて前記バイナリ法に関する部分演算処理を実行することを特徴とする請求項1または2に記載の演算プログラム。
【請求項4】
前記コンピュータを、
前記所定の部分演算処理がウィンドウ法に関する部分演算処理である場合、前記べき乗剰余演算処理が行われる被対象データをウィンドウ幅のビット列が取り得るビットパターンごとにべき乗剰余した値を格納するテーブルを生成する生成手段、
前記生成手段によって生成されたテーブルから、前記ビットパターンに基づいて、前記被対象データをべき乗剰余した値を取得する取得手段として機能させ、
前記算出手段は、
前記空き時間と前記乗算剰余演算処理に要する処理時間と前記ウィンドウ法に関する部分演算処理における前記乗算剰余演算処理の利用回数と前記生成手段によって生成されたテーブルの生成時間と前記ウィンドウ幅とに基づいて、前記空き時間内で処理可能な前記ウィンドウ法でのビット数を算出し、
前記抽出手段は、
前記対象データから前記算出手段によって算出された前記ウィンドウ法でのビット数分のビット列を抽出し、
前記実行手段は、
前記抽出手段によって抽出されたビット列と前記取得手段によって取得された前記被対象データをべき乗剰余した値とを与えて前記ウィンドウ法に関する部分演算処理を実行することを特徴とする請求項1または2に記載の演算プログラム。
【請求項5】
前記算出手段は、
前記ウィンドウ幅ごとに前記ビット数を算出し、
前記抽出手段は、
前記算出手段によって算出されたウィンドウ幅ごとのビット数のうち、最長となるビット数を抽出し、
前記実行手段は、
前記抽出手段によって抽出された最長となるビット数に基づいて、前記ウィンドウ法に関する部分演算処理を実行することを特徴とする請求項4に記載の演算プログラム。
【請求項6】
前記コンピュータを、
前記ウィンドウ幅ごとに、前記テーブルの生成時間を前記乗算剰余演算処理に要する処理時間に基づいて設定する設定手段として機能させ、
前記算出手段は、
前記ウィンドウ幅ごとに、前記設定手段によって設定された生成時間に基づいて前記ビット数を算出し、
前記抽出手段は、
前記ウィンドウ幅ごとに算出されたビット数のうち最長となるビット数分のビット列を抽出し、
前記生成手段は、
前記ビット数が最長となるウィンドウ幅に基づいて、前記被対象データを前記ウィンドウ幅のビット列が取り得るビットパターンごとにべき乗剰余した値を格納するテーブルを生成し、
前記取得手段は、
前記生成手段によって前記ビット数が最長となるウィンドウ幅に基づいて生成されたテーブルから、前記ウィンドウ幅のビット列のビットパターンに基づいて、前記被対象データをべき乗剰余した値を取得し、
前記実行手段は、
前記抽出手段によって抽出されたビット列と前記取得手段によって取得された前記被対象データをべき乗剰余した値とを与えて前記ウィンドウ法に関する部分演算処理を実行することを特徴とする請求項5に記載の演算プログラム。
【請求項7】
検出手段と算出手段と抽出手段と実行手段とを備えるコンピュータが、
前記検出手段により、前記コンピュータが一定時間ごとに返す応答までの空き時間を検出する検出工程と、
前記算出手段により、前記検出工程によって検出された空き時間とべき乗剰余演算処理を構成する乗算剰余演算処理に要する処理時間と所定の部分演算処理における前記乗算剰余演算処理の利用回数とに基づいて、前記空き時間内で処理可能なビット数を算出する算出工程と、
前記抽出手段により、前記べき乗剰余演算処理の指数部分にあたる対象データから前記算出工程によって算出されたビット数分のビット列を抽出する抽出工程と、
前記実行手段により、前記抽出工程によって抽出されたビット列を与えて前記所定の部分演算処理を実行する実行工程と、
を実行することを特徴とする演算方法。
【請求項8】
一定時間ごとに返す応答までの空き時間を検出する検出手段と、
前記検出手段によって検出された空き時間とべき乗剰余演算処理を構成する乗算剰余演算処理に要する処理時間と所定の部分演算処理における前記乗算剰余演算処理の利用回数とに基づいて、前記空き時間内で処理可能なビット数を算出する算出手段と、
前記べき乗剰余演算処理の指数部分にあたる対象データから前記算出手段によって算出されたビット数分のビット列を抽出する抽出手段と、
前記抽出手段によって抽出されたビット列を与えて前記所定の部分演算処理を実行する実行手段と、
を備えることを特徴とする演算装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate


【公開番号】特開2011−75611(P2011−75611A)
【公開日】平成23年4月14日(2011.4.14)
【国際特許分類】
【出願番号】特願2009−223883(P2009−223883)
【出願日】平成21年9月29日(2009.9.29)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】