(57)【特許請求の範囲】
【請求項１】
データを記憶領域に記憶する記憶部と、
第１のイニシャル値から分割された複数のデータＩＶＰの各々と第２のイニシャル値から分割された複数のデータＩＶＱの各々とが分割の順序に従って連結された複数の連結データＩＶを上記記憶部に入力し、第１のメッセージから分割された複数のデータＭＡの各々と第２のメッセージから分割された複数のデータＭＢの各々とが分割の順序に従って連結された複数の連結データＭを上記記憶部に入力する入力部と、
上記入力部によって上記記憶部に入力された複数の連結データＩＶと複数の連結データＭとから１の連結データＩＶと１の連結データＭとを順次選択し、選択した連結データＩＶ中のデータＩＶＰと連結データＭ中のデータＭＡとを入力データとして所定のアルゴリズムにより非線形変換し変換データＨＳを取得する処理とともに、並行して、選択した連結データＩＶ中のデータＩＶＱと連結データＭ中のデータＭＢとを入力データとして上記非線形変換に用いたアルゴリズムと同一のアルゴリズムにより非線形変換し変換データＨＴを取得する処理を、順次選択された連結データＩＶと連結データＭについて逐次的に繰り返す変換部と
を備えることを特徴とする非線形変換装置。
【請求項２】
上記記憶部は、複数の２Ｊビット領域を有する連結データＩＶ用の記憶領域と複数の２Ｊビット領域を有する連結データＭ用の記憶領域とを有し、
上記入力部は、Ｊビット長である各データＩＶＰとＪビット長である各データＩＶＱとを上記連結データＩＶ用の記憶領域の有する２Ｊビット領域の上位Ｊビット領域と下位Ｊビット領域に各々入力し、Ｊビット長である各データＭＡとＪビット長である各データＭＢとを上記連結データＭ用の記憶領域の有する２Ｊビット領域の上位Ｊビット領域と下位Ｊビット領域に各々入力する
ことを特徴とする請求項１に記載された非線形変換装置。
【請求項３】
上記記憶部は、２Ｊビット長のレジスタと２Ｊビット長のメモリとの少なくともいずれかより構成されることを特徴とする請求項１または２に記載の非線形変換装置。
【請求項４】
上記入力部は、複数のデータＩＶＲと複数のデータＭＣとを連結させずに上記記憶部に入力し、
上記変換部は、非線形変換により変換データＨＳと変換データＨＴとを並行して取得する上記２つの処理に並行して、上記入力部によって上記記憶部に入力された複数のデータＩＶＲと複数のデータＭＣとから１のデータＩＶＲとデータＭＣとを順次選択し、選択したデータＩＶＲとデータＭＣとを任意のアルゴリズムにより非線形変換し変換データＨＵを取得する処理を順次選択されたデータＩＶＲとデータＭＣについて逐次的に繰り返すことを特徴とする請求項１に記載された非線形変換装置。
【請求項５】
上記記憶部は、レジスタ長の異なる複数のレジスタあるいは記憶容量の異なる複数のメモリから構成されることを特徴とする請求項４に記載された非線形変換装置。
【請求項６】
上記変換部は、非線形変換するためのアルゴリズムに平文を暗号化するためのブロック暗号あるいハッシュ値を求めるためのハッシュ関数を使用することを特徴とする請求項１に記載された非線形変換装置。
【請求項７】
上記非線形変換装置は、さらに、上記変換部が取得した変換データを連結して上記記憶部に出力する出力部を備えることを特徴とする請求項１に記載された非線形変換装置。
【請求項８】
記憶部が、データを記憶領域に記憶し、
入力部が、第１のイニシャル値から分割された複数のデータＩＶＰの各々と第２のイニシャル値から分割された複数のデータＩＶＱの各々とが分割の順序に従って連結された複数の連結データＩＶを上記記憶部に入力し、第１のメッセージから分割された複数のデータＭＡの各々と第２のメッセージから分割された複数のデータＭＢの各々とが分割の順序に従って連結された複数の連結データＭを上記記憶部に入力し、
変換部が、上記入力部によって上記記憶部に入力された複数の連結データＩＶと複数の連結データＭとから１の連結データＩＶと１の連結データＭとを順次選択し、選択した連結データＩＶ中のデータＩＶＰと連結データＭ中のデータＭＡとを入力データとして所定のアルゴリズムにより非線形変換し変換データＨＳを取得する処理とともに、並行して、選択した連結データＩＶ中のデータＩＶＱと連結データＭ中のデータＭＢとを入力データとして上記非線形変換に用いたアルゴリズムと同一のアルゴリズムにより非線形変換し変換データＨＴを取得する処理を、順次選択された連結データＩＶと連結データＭについて逐次的に繰り返す
ことを特徴とする非線形変換装置の非線形変換方法。
【請求項９】
記憶部が、データを記憶領域に記憶する処理と、
入力部が、第１のイニシャル値から分割された複数のデータＩＶＰの各々と第２のイニシャル値から分割された複数のデータＩＶＱの各々とが分割の順序に従って連結された複数の連結データＩＶを上記記憶部に入力し、第１のメッセージから分割された複数のデータＭＡの各々と第２のメッセージから分割された複数のデータＭＢの各々とが分割の順序に従って連結された複数の連結データＭを上記記憶部に入力する処理と、
変換部が、上記入力部によって上記記憶部に入力された複数の連結データＩＶと複数の連結データＭとから１の連結データＩＶと１の連結データＭとを順次選択し、選択した連結データＩＶ中のデータＩＶＰと連結データＭ中のデータＭＡとを入力データとして所定のアルゴリズムにより非線形変換し変換データＨＳを取得する処理とともに、並行して、選択した連結データＩＶ中のデータＩＶＱと連結データＭ中のデータＭＢとを入力データとして上記非線形変換に用いたアルゴリズムと同一のアルゴリズムにより非線形変換し変換データＨＴを取得する処理を、順次選択された連結データＩＶと連結データＭについて逐次的に繰り返す処理とをコンピュータに実行させることを特徴とする非線形変換プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、非線形変換装置及び非線形変換方法に関するものである。特に、非線形変換を高速に行う処理に関するものである。
【０００２】
【従来の技術】
従来例１．
従来例１では、従来行われていた非線形変換装置について説明する。
図７は、非線形変換装置１３００の概要図である。
１０００は、イニシャル値ＩＶを格納する記憶領域を示す。イニシャル値ＩＶは固定値である。１２００は、通信によって任意の者から他の者へ送信されるメッセージＭを格納する記憶領域である。１３１０は、任意のアルゴリズム関数を用いてイニシャル値ＩＶとメッセージＭとから変換データを求める変換部である。変換部１３１０で用いられるアルゴリズムには、ハッシュ値を求めるためのハッシュ関数や平文を暗号化するためのブロック暗号があり、図７ではハッシュ関数Ｆ１（Ｆｕｎｃｔｉｏｎ  １）が挙げられている。ハッシュ関数の例としては、ＳＨＡ−１やＭＤ−５などがあげられる。非線形変換装置１３００の変換部１３１０でハッシュ関数Ｆ１により変換された変換データは、ハッシュ値として出力される。１１００は変換後の変換データを格納する記憶領域である。
【０００３】
次に、詳細を説明する。
１００１〜１０１０、１１０１〜１１１０、１２０１〜１２１０は、全て３２ビット領域のレジスタである。
イニシャル値ＩＶは、ＩＶ（１）、ＩＶ（２）、ＩＶ（３）、・・・、ＩＶ（Ｋ）というように３２ビットのイニシャル値に分割される。ＩＶ（１）、ＩＶ（２）、ＩＶ（３）、・・・、ＩＶ（Ｋ）は、入力部Ｉ１３５０によって、各々、レジスタ１００１、レジスタ１００２、レジスタ１００３、・・・、レジスタ１０１０に格納される。
メッセージＭも同様に、Ｍ（１）、Ｍ（２）、Ｍ（３）、・・・、Ｍ（Ｋ）というように３２ビットデータに分割され、入力部Ｍ１３６０によって、各々、レジスタ１２０１、レジスタ１２０２、レジスタ１２０３、・・・、レジスタ１２１０に格納される。
【０００４】
非線形変換装置１３００の変換部１３１０では、レジスタ１００１に格納されたＩＶ（１）とレジスタ１２０１に格納されたＭ（１）とから非線形変換がなされ、変換結果としてＳ（１）を出力する。出力したＳ（１）は、レジスタ１１０１に格納される。
次に、変換部１３１０により、レジスタ１００２に格納されたＩＶ（２）とレジスタ１２０２に格納されたＭ（２）を入力データとしてＦ１によって非線形変換がなされ、変換結果としてＳ（２）が出力され、レジスタ１１０２に格納される。
以下同様にして、逐次的にＳ（３）、・・・、Ｓ（Ｋ）が出力され、レジスタ１１０３、・・・、レジスタ１１１０に格納される。
格納されたレジスタ１１０１〜レジスタ１１１０中のＳ（１）〜Ｓ（Ｋ）は、出力部１３７０によって連結されてハッシュ値１１００が出力される。
【０００５】
上記に示した非線形変換装置１３００が行う非線形変換の逐次的処理について、さらに詳細に説明する。図８は、非線形変換装置１３００が逐次的に行う非線形変換の処理工程（第１非線形変換工程〜第Ｋ非線形変換工程）を示した図である。図８の横軸は、時間ｔを表しており、第１非線形変換工程から第Ｋ非線形変換工程までの工程が、第１非線形変換工程から順に逐次的に行われていることを示している。
第１非線形変換工程１３００ａは、非線形変換装置１３００によって第１に実行される非線形変換処理の工程を示す。第２非線形変換工程１３００ｂは、第１非線形変換工程１３００ａの処理後に実行される非線形変換処理の工程を示す。同様にして、第２非線形変換工程１３００ｂの実行後に、第３非線形変換工程１３００ｃが行われ、最後に、第Ｋ非線形変換工程１３００ｋが実行される。
【０００６】
第１非線形変換工程．
第１非線形変換工程１３００ａでは、レジスタ１００１に格納されたＩＶ（１）とレジスタ１２０１に格納されたＭ（１）とから変換部１３１０の有するハッシュ関数Ｆ１によって非線形変換がなされる。即ち、ＩＶ（１）とＭ（１）とをハッシュ関数Ｆ１に基づいて非線形変換し、非線形変換後のデータとＩＶ（１）とを用いてＸＯＲ（ＸＯＲ：ＥＸＣＬＵＳＩＶＥ  ＯＲ）１３２０が排他的論理和演算を行い結果としてＳ（１）を出力する。出力されたＳ（１）は、レジスタ１１０１に格納される。
第２非線形変換工程．
第２非線形変換工程１３００ｂでは、入力値としてＩＶ（２）、Ｍ（２）及びＳ（１）を用いる。まず、変換部１３１０は、ＩＶ（２）とＭ（２）とをハッシュ関数Ｆ１により非線形変換する。ＸＯＲ１３２０は、変換した結果である変換値と第１非線形変換工程１３００ａの出力結果であるＳ（１）との排他的論理和演算を行い、その結果であるＳ（２）をレジスタ１１０２に出力する。
第３非線形変換工程〜第Ｋ非線形変換工程．
第３非線形変換工程１３００ｃ〜第Ｋ非線形変換工程１３００ｋについても、逐次的に上記第１非線形変換工程１３００ａと同様の演算を行い、出力データとして、Ｓ（３）〜Ｓ（Ｋ）をレジスタ１１０３〜レジスタ１１１０に出力する。このように、非線形変換装置１３００では、第２非線形変換工程１３００ｂは、第１非線形変換工程１３００ａにおいて出力されたＳ（１）を用いなければならない。同様に、第３非線形変換工程１３００ｃの変換工程においても第２非線形変換工程１３００ｂの出力結果であるＳ（２）が必要であり、第Ｋ非線形変換工程１３００ｋにおいても第Ｋ非線形変換工程１３００ｋの前の変換工程における出力データであるＳ（ｋ−１）が必要である。従って、第１非線形変換工程１３００ａから第Ｋ非線形変換工程１３００ｋで行われる非線形変換処理自体はすべて同様の処理であっても、前で行われた変換結果を用いて次の変換工程を経なければならないため、第１非線形変換工程１３００ａから第Ｋ非線形変換工程１３００ｋの各工程は、逐次的に行わなければならなかった。そのため、大量の入力データに対しては、同様の非線形変換処理を大量の入力データ分、ループ処理として繰り返さなければならず、複数のデータの並行処理が行えないために全体の総処理時間の増大が問題となっていた。
【０００７】
従来例２．
従来例２は、任意のアルゴリズムを実行する場合に、従来行われていた加算処理方法について示すものである。
図９は、２Ｊビット長のデータの加算処理の動作を示している。図９に示すように、レジスタ８０２に格納されたデータ（１）とメモリ８００中の任意の領域８０１に格納されたデータ（２）とを加算器８１５によって加算している。
ここで、単一に２Ｊビット長のデータの加算命令が存在せず、Ｊビット長のデータの加算命令しかできない場合には、図９のように、単純にデータ（１）とデータ（２）とを加算することは不可能となる。そこで、代替方法としてデータ（１）とデータ（２）とを、各々上位Ｊビットと下位Ｊビットに分け、それぞれの単位で加算演算を行うことによって２Ｊビット長のデータの加算処理を実現する方法がある。
図１０は、上位と下位のＪビットずつを加算処理単位として加算演算を行う従来の加算方法を示す図である。
レジスタ８０２に格納された２Ｊビット長のデータ（１）は、上位Ｊビットと下位Ｊビットのデータに分割し、レジスタ８０４とレジスタ８０３にそれぞれ格納される。レジスタ８０４に格納されたデータをデータＨ（１）、レジスタ８０３に格納されたデータをデータＬ（１）とする。
まず、レジスタ８０３に格納されたデータＬ（１）とメモリ８００の任意の領域８０１の下位Ｊビットに格納されたデータＬ（２）との加算を行う。その後、レジスタ８０４に格納されたデータＨ（１）とメモリ８００の任意の領域８０１の上位Ｊビットに格納されたデータＨ（２）との加算を行う。上記のようにして行われた加算結果を加算データとしてレジスタ８０７に転送する。以上のような加算処理では、下位Ｊビットの加算時に桁上がりが発生した場合には、桁上がりをキャリーとしてレジスタ８１０に格納し、上位Ｊビットの加算時にキャリーの値をも加算する。
【０００８】
上記に示した加算処理の詳細を図１１のフローチャートに示す。
まず、２Ｊビット長レジスタであるレジスタ８０２に格納されたデータ（１）を上位ＪビットのデータＨ（１）と下位ＪビットのデータＬ（１）に分割する（Ｓ１２０）。
レジスタ８０２の下位Ｊビットに格納されたデータＬ（１）をレジスタ８０３に格納し、上位Ｊビットに格納されたデータＨ（１）をレジスタ８０４に格納する（Ｓ１２１）。
レジスタ８０３に格納されたデータＬ（１）とメモリ８００の任意の領域８０１の下位Ｊビットに格納されたデータＬ（２）とを加算器８１５により加算し、加算した結果を領域８０１の下位ＪビットにデータＬ（２）として格納する。このとき、桁上がりが発生した場合には、桁上がりの値をレジスタ８１０にキャリーとして格納する（Ｓ１２２）。
次に、上位Ｊビットの加算を行う。即ち、レジスタ８０４に格納されたデータＨ（１）とメモリ８００の任意の領域８０１の上位Ｊビットに格納されたデータＨ（２）とキャリーが存在する場合にはレジスタ８１０に格納されたキャリーとを加算器８１５により加算し、加算した結果を領域８０１の上位ＪビットにデータＨ（２）として格納する（Ｓ１２３）。
メモリ８００の領域８０１に格納された２Ｊビットのデータは、レジスタ８０７に転送される（Ｓ１２４）。
【０００９】
このようにして、２Ｊビット長の加算が単一の命令で実現できないために、その代わりとして上位、下位のＪビット単位で加算演算を行う場合、この演算によって得られた結果が格納されたメモリ上の任意の領域から演算結果を２Ｊビットの値としてＣＰＵが読み出し、レジスタ８０７に転送する際に読み出し時間に莫大な時間がかかるため、全体の処理時間が遅延し、演算速度が著しく低下し、全体の処理時間が遅延するという問題が生じていた。
【００１０】
【発明が解決しようとする課題】
例えば、甲から乙にネットワークを通じて送信されたメッセージが改ざんされていないメッセージであることを認証する認証情報を作成する暗号アプリケーションにおいて、非線形変換処理を汎用的なマイクロプロセッサを搭載したコンピュータ上のソフトウエアで実現する場合、図８に示すように、第一の非線形変換工程から第Ｋの非線形変換工程は逐次的に行わなければならなかった。
本発明の目的は、非線形変換処理を並列に処理し、従来より高速な演算方法を得ることにある。
【００１１】
また、本発明の目的は、データのアクセス方法によって演算の遅延を起こす場合がある従来の要因を回避し、高速な演算方法を得ることを目的とする。
【００１２】
【課題を解決するための手段】
この発明に係る非線形変換装置は、所定長のデータを記憶する記憶部と、
互いに関連しない複数のデータを連結し、連結した所定長の連結データを上記記憶部に入力する入力部と、
上記入力部により上記記憶部に入力された所定長の連結データを入力して、同一のアルゴリズムにより連結前の複数のデータを並行して非線形変換し、複数の変換データを取得する変換部とを備えることを特徴とする。
【００１３】
上記入力部は、複数のデータＩＶＰの各データＩＶＰと複数のデータＩＶＱの各データＩＶＱとを各々連結データＩＶとして連結し、連結した複数の連結データＩＶを上記記憶部に入力し、複数のデータＭＡの各データＭＡと複数のデータＭＢの各データＭＢとを各々連結データＭとして連結し、連結した複数の連結データＭを上記記憶部に入力し、
上記変換部は、上記入力部によって上記記憶部に入力された複数の連結データＩＶと連結データＭとから１の連結データＩＶと連結データＭとを順次選択し、選択した連結データＩＶ中のデータＩＶＰと連結データＭ中のデータＭＡとを入力データとして上記アルゴリズムにより非線形変換し変換データＨＳを取得する処理とともに、並行して、選択した連結データＩＶ中のデータＩＶＱと連結データＭ中のデータＭＢとを入力データとして上記非線形変換に用いたアルゴリズムと同一のアルゴリズムにより非線形変換し変換データＨＴを取得する処理を、順次選択された連結データＩＶと連結データＭについて逐次的に繰り返すことを特徴とする。
【００１４】
上記記憶部は、２Ｊビット長のレジスタと２Ｊビット長のメモリの少なくともいずれかであり、
上記入力部は、Ｊビット長である各データＩＶＰとＪビット長である各データＩＶＱとを上記記憶部であるレジスタあるいはメモリの上位Ｊビット領域と下位Ｊビット領域に各々入力し、Ｊビット長である各データＭＡとＪビット長である各データＭＢとを上記記憶部であるレジスタあるいはメモリの上位Ｊビット領域と下位Ｊビット領域に各々入力することを特徴とする。
【００１５】
上記入力部は、複数のデータＩＶＲと複数のデータＭＣとを連結させずに上記記憶部に入力し、
上記変換部は、非線形変換により変換データＨＳと変換データＨＴとを並行して取得する上記２つの処理に並行して、上記入力部によって上記記憶部に入力された複数のデータＩＶＲと複数のデータＭＣとから１のデータＩＶＲとデータＭＣとを順次選択し、選択したデータＩＶＲとデータＭＣとを任意のアルゴリズムにより非線形変換し変換データＨＵを取得する処理を順次選択されたデータＩＶＲとデータＭＣについて逐次的に繰り返すことを特徴とする。
【００１６】
上記記憶部は、複数の種類あるいは複数の長さから構成されるレジスタあるいはメモリであることを特徴とする。
【００１７】
上記変換部は、非線形変換するためのアルゴリズムに平文を暗号化するためのブロック暗号あるいハッシュ値を求めるためのハッシュ関数を使用することを特徴とする。
【００１８】
上記非線形変換装置は、さらに、上記変換部が取得した変換データを連結して上記記憶部に出力する出力部を備えることを特徴とする。
【００１９】
この発明に係る非線形変換方法は、所定長のデータを記憶部に記憶し、
互いに関連しない複数のデータを連結し、連結した所定長の連結データを上記記憶部に入力し、
上記記憶部に入力された所定長の連結データを入力して、同一のアルゴリズムにより連結前の複数のデータを並行して非線形変換し、複数の変換データを取得することを特徴とする。
【００２０】
この発明に係る非線形変換プログラムは、所定長のデータを記憶部に記憶する処理、
互いに関連しない複数のデータを連結し、連結した所定長の連結データを上記記憶部に入力する処理、
上記記憶部に入力された所定長の連結データを入力して、同一のアルゴリズムにより連結前の複数のデータを並行して非線形変換し、複数の変換データを取得する処理とをコンピュータに実行させることを特徴とする。
【００２１】
この発明に係る加算方法は、２Ｊビット長のデータ（１）と２Ｊビット長のデータ（２）とを２Ｊビット長のデータのまま単一に加算する命令が存在しない計算機の加算方法において、
２Ｊビット長のデータ（１）を上位ＪビットのデータからなるデータＨ（１）と下位ＪビットのデータからなるデータＬ（１）に分割し、
２Ｊビット長のデータ（２）を上位ＪビットのデータからなるデータＨ（２）と下位ＪビットのデータからなるデータＬ（２）に分割し、
上記分割されたデータＬ（１）とデータＬ（２）とを加算し、加算された結果桁上がりが発生した場合には、加算された結果中、下位Ｊビットを加算データＬとして格納し、上記桁上がりをキャリーとして格納し、加算された結果桁上がりが発生しない場合には、加算された結果を加算データＬとして格納し、
上記分割されたデータＨ（１）とデータＨ（２）とを加算し、上記キャリーが格納されている場合には、上記データＨ（１）とデータＨ（２）との加算結果にキャリーを加算し、加算された結果を加算データＨとして格納し、
上記格納された加算データＬと加算データＨとを２Ｊビット長からなる２つの記録領域の下位Ｊビットに各々転送し、
上記転送された加算データＨを上位ビット、加算データＬを下位ビットとして連結し、２Ｊビット長となった加算データを記録領域へ転送することを特徴とする。
【００２２】
【発明の実施の形態】
実施の形態１．
本実施の形態では、非線形変換を並列に処理する非線形変換装置について説明する。
図１は、非線形変換装置の概要図である。
３００は、非線形変換装置を示す。３１０は、非線形変換装置３００の有する変換部である。
図１において、１０１、１０２、１０３、・・・、１１０、２０１、２０２、２０３、・・・、２１０、４０１、４０２、４０３、・・・、４１０は、すべて６４ビット長のレジスタを示す。各レジスタは図示されていないが記録部によって記憶可能なデバイスの一例である。
１０１Ｈ、１０２Ｈ、１０３Ｈ、・・・、１１０Ｈ、２０１Ｈ、２０２Ｈ、２０３Ｈ、・・・、２１０Ｈ、４０１Ｈ、４０２Ｈ、４０３Ｈ、・・・、４１０Ｈは、それぞれ１０１、１０２、１０３、・・・、１１０、２０１、２０２、２０３、・・・、２１０、４０１、４０２、４０３、・・・、４１０の上位３２ビット部分を示し、１０１Ｌ、１０２Ｌ、１０３Ｌ、・・・、１１０Ｌ、２０１Ｌ、２０２Ｌ、２０３Ｌ、・・・、２１０Ｌ、４０１Ｌ、４０２Ｌ、４０３Ｌ、・・・、４１０Ｌは、それぞれ１０１、１０２、１０３、・・・、１１０、２０１、２０２、２０３、・・・、２１０、４０１、４０２、４０３、・・・、４１０の下位３２ビット部分を示す。
Ｆ２は、変換部３１０で使用されるアルゴリズムであるハッシュ関数を示す。このＦ２を用いて非線形変換処理が行われる。
【００２３】
２００Ｈは、送信者から受信者へネットワークによって送信されるメッセージＭＡを格納したレジスタである。メッセージＭＡは、ＭＡ（１）、ＭＡ（２）、・・・、ＭＡ（ｋ）まで３２ビット単位に分割される。２００Ｌも同様にメッセージＭＢを格納したレジスタであり、メッセージＭＢは、ＭＢ（１）、・・・、ＭＢ（Ｋ）まで３２ビット単位に分割される。
１００Ｈは、初期値であるイニシャル値ＩＶＰを格納したレジスタである。レジスタ１００Ｈに格納されたイニシャル値ＩＶＰは、ＩＶＰ（１）からＩＶＰ（Ｋ）まで３２ビット単位に分割される。１００Ｌも同様にイニシャル値ＩＶＱを格納したレジスタであり、イニシャル値ＩＶＱは、ＩＶＱ（１）からＩＶＱ（Ｋ）まで３２ビット単位に分割される。
４００Ｈは、メッセージＭＡとイニシャル値ＩＶＰとを入力データとしてこれらのデータを用いて非線形変換装置３００によって変換された変換データであるＨＳ（１）〜ＨＳ（Ｋ）を格納するレジスタである。ＨＳ（１）〜ＨＳ（Ｋ）まで３２ビット単位のデータは連結後、ハッシュ値ＨＳとしてレジスタ４００Ｈに格納される。
４００Ｌは、メッセージＭＢとイニシャル値ＩＶＱとを入力データとして非線形変換された変換データであるＨＴ（１）〜ＨＴ（Ｋ）を格納するレジスタである。ＨＴ（１）〜ＨＴ（Ｋ）までの３２ビットデータは連結後、ハッシュ値ＨＴとしてレジスタ４００Ｌに格納される。
【００２４】
上記メッセージＭＡ、メッセージＭＢ、イニシャル値ＩＶＰ、イニシャル値ＩＶＱは、すべて非線形変換装置３００への入力データであり、ハッシュ値ＨＳ、ハッシュ値ＨＴは、すべて非線形変換装置３００からの出力データである。
【００２５】
次に、非線形変換装置３００が行う処理の動作について、図１を用いて説明する。
前処理．
まず、第１のイニシャル値であるレジスタ１００Ｈ中のＩＶＰ（１）と第２のイニシャル値である１００Ｌ中のＩＶＱ（１）は、入力部Ｉ３５０によって、それぞれレジスタ１０１の上位３２ビット領域１０１Ｈとレジスタ１０１の上位３２ビット領域１０１Ｌに転送され、それによりレジスタ１０１において６４ビットの長さに連結される。同様にして、ＩＶＰ（２）とＩＶＱ（２）、ＩＶＰ（３）とＩＶＱ（３）、・・・、ＩＶＰ（Ｋ）とＩＶＱ（Ｋ）とが、各々連結され、レジスタ１０２、レジスタ１０３、レジスタ１１０に格納される。連結された各データを連結データＩＶとする。
ハッシュ関数Ｆ２へのもう一方からの入力データとなるメッセージＭＡとメッセージＭＢは、入力部Ｍ３６０によって、イニシャル値ＩＶＰやイニシャル値ＩＶＱと同様な連結手段によって連結される。すなわち、レジスタ２００Ｈ中のＭＡ（１）とレジスタ２００Ｌ中のＭＢ（１）は、それぞれレジスタ２０１の上位３２ビット領域２０１Ｈと下位３２ビット領域２０１Ｌに転送され、それによりレジスタ２０１において６４ビットの長さに連結される。同様にして、ＭＡ（２）とＭＢ（２）、ＭＡ（３）とＭＢ（３）、ＭＡ（Ｋ）とＭＢ（Ｋ）とが連結され、それぞれレジスタ２０２、レジスタ２０３、レジスタ２１０に格納される。連結された各データを連結データＭとする。
以上の動作を行う入力部Ｉ３５０と入力部Ｍ３６０とは、互いに関連しない複数のデータを連結し、連結した所定長の連結データをレジスタ等から構成される記憶部に入力する入力部の一例である。
【００２６】
非線形変換処理．
前述のような入力データの連結手段によって、連結された個々の６４ビット長の連結データＩＶと連結データＭとは、変換部３１０の有するハッシュ関数Ｆ２によって、その内部において、６４ビット単位で演算される。このとき、各レジスタにおいて連結手段によって連結された連結データＩＶと連結データＭの上位３２ビットと下位３２ビットのデータは、相互に独立性が保たれたまま、同時に処理が実行される。例えば、連結データＩＶの上位３２ビットであるＩＶＰ（１）と連結データＭの上位３２ビットであるＭＡとを入力データとして非線形変換し変換データＨＳを取得する処理と、連結データＩＶの下位３２ビットであるＩＶＱ（１）と連結データＭの下位３２ビットであるＭＢとを入力データとして非線形変換し変換データＨＴを取得する処理とが、変換部３１０によって並行して行われる。
このようにして、変換部３１０は、複数の連結データＩＶと連結データＭとから１の連結データＩＶと連結データＭとを順次選択し、選択した連結データＩＶ中のデータＩＶＰ（ＩＶＰ（１）〜ＩＶＰ（Ｋ）のいずれか）と連結データＭ中のデータＭＡ（ＭＡ（１）〜ＭＡ（Ｋ）のいずれか）とを入力データとして任意のアルゴリズムにより非線形変換し変換データＨＳ（ＨＳ（１）〜ＨＳ（Ｋ）のいずれか）を取得するとともに、並行して、選択した連結データＩＶ中のデータＩＶＱ（ＩＶＱ（１）〜ＩＶＱ（Ｋ）のいずれか）と連結データＭ中のデータＭＢ（ＭＢ（１）〜ＭＢ（Ｋ）のいずれか）とを入力データとして上記非線形変換に用いたアルゴリズムと同一のアルゴリズムにより非線形変換し変換データＨＴ（ＨＴ（１）〜ＨＴ（Ｋ）のいずれか）を取得する処理を、順次選択された連結データＩＶと連結データＭについて逐次的に繰り返す。
このように実行することによって、非線形変換装置３００の変換部３１０は、ハッシュ関数Ｆ２を用いて、イニシャル値ＩＶＰとメッセージＭＡを入力データとして非線形変換する処理とイニシャル値ＩＶＱとメッセージＭＢを入力データとして非線形変換する処理を並列に、同時に実行することができる。
【００２７】
後処理．
変換部３１０のハッシュ関数Ｆ２によって変換された変換データであるＨＳ（１）はレジスタ４０１の上位３２ビット領域４０１Ｈに格納される。また、変換部３１０のハッシュ関数Ｆ２によって変換された変換データＨＴ（１）はレジスタ４０１の下位３２ビット領域４０１Ｌに格納される。ＨＳ（２）とＨＴ（２）も同様にレジスタ４０２に格納される。他の変換データも同様に各レジスタに格納される。
次に、レジスタ４０１〜レジスタ４１０の各々上位３２ビット部分４０１Ｈ〜４１０Ｈに格納されたＨＳ（１）、ＨＳ（２）、・・・、ＨＳ（Ｋ）は、出力部３７０によってそれぞれ切り出され、連結する手段によって連結され、レジスタ４００Ｈに出力される。
同様にして、レジスタ４０１〜レジスタ４１０の下位部分４０１Ｌ〜４１０Ｌに格納されたＨＴ（１）、ＨＴ（２）、・・・、ＨＴ（Ｋ）は、それぞれ切り出され、それらを連結する手段によって連結され、レジスタ４００Ｌに格納される。
【００２８】
次に、非線形変換工程について、図２を用いて詳細に説明する。
第１非線形変換工程３００ａ．
第１非線形変換工程３００ａでは、レジスタ１０１の上位３２ビットに格納されたＩＶＰ（１）とレジスタ２０１の上位３２ビットに格納されたＭＡ（１）とは、変換部３１０のハッシュ関数Ｆ２を用いて非線形変換される。即ち、ＩＶＰ（１）とＭＡ（１）とからハッシュ関数Ｆ２に基づいてデータを非線形変換し、非線形変換後のデータとＩＶＰ（１）とを用いてＸＯＲ３２０が排他的論理和演算を行い、行った結果をＨＳ（１）として出力する。出力されたＨＳ（１）は、レジスタ４０１の上位３２ビット領域４０１Ｈに格納される。
第１非線形変換工程３００ａでは、上記ＨＳ（１）を出力するための非線形変換処理と同時に、並行して以下に記すＨＴ（１）を出力するための非線形変換処理が行われる。
すなわち、レジスタ１０１の下位３２ビットに格納されたＩＶＱ（１）とレジスタ２０１の下位３２ビットに格納されたＭＢ（１）とが、変換部３１０のハッシュ関数Ｆ２を用いて上記処理と同時に、非線形変換される。即ち、ＩＶＱ（１）とＭＢ（１）とからハッシュ関数Ｆ２に基づいてデータを非線形変換し、非線形変換後のデータとＩＶＱ（１）とを用いてＸＯＲ３２０が排他的論理和演算を行い、行った結果をＨＴ（１）として出力する処理がＨＳ（１）を出力する処理と並行して行われる。出力されたＨＴ（１）は、レジスタ４０１の下位３２ビット領域４０１Ｌに格納される。
上記で説明したデータの流れを図３に示す。図３に示すように、レジスタ２０１に格納されたＭＡ（１）とレジスタ１０１に格納されたＩＶＰ（１）とから非線形変換がなされ、ＸＯＲ３２０によって排他的論理和がとられ、変換されたでーたをレジスタ４０１にＨＳ（１）として出力する処理と並行して、レジスタ２０１に格納されたＭＢ（１）とレジスタ１０１に格納されたＩＶＱ（１）とから非線形変換がなされ、ＸＯＲ３２０によって排他的論理和がとられ、変換されたでーたをレジスタ４０１にＨＴ（１）として出力する処理が行われる。
【００２９】
第２非線形変換工程３００ｂ．
第２非線形変換工程３００ｂでは、レジスタ１０２とレジスタ２０２の上位ビットの処理と下位ビットの処理が同時に、並行して行われる。ただし、いずれの処理も第１非線形変換工程３００ａの出力データを必要とするため、第１非線形変換工程３００ａを経た後でなければ実行できない。
第２非線形変換工程３００ｂでは、レジスタ１０２とレジスタ２０２の上位ビットの処理に、入力値としてＩＶＰ（２）、ＭＡ（２）及びＨＳ（１）を用いる。まず、変換部３１０は、ＩＶＰ（２）とＭＡ（２）とを入力データとしてハッシュ関数Ｆ２を用いて非線形変換を行う。ＸＯＲ３２０は、変換した結果である変換値と第１非線形変換工程３００ａの出力結果であるＨＳ（１）との排他的論理和演算を行い、その結果をＳ（２）として出力する。
第２非線形変換工程３００ｂにおいても、上記ＨＳ（２）を出力するための非線形変換処理と同時に、並行してＨＴ（２）を出力するための同一の非線形変換処理が行われる。
【００３０】
第３非線形変換工程〜第Ｋ非線形変換工程．
第３非線形変換工程３００ｃ〜第Ｋ非線形変換工程３００ｋについても、逐次的に上記第１非線形変換工程３００ａ等と同様の演算を行い、出力データとして、ＨＳ（３）〜ＨＳ（Ｋ）及びＨＴ（３）〜ＨＴ（Ｋ）をそれぞれ出力するための並行処理が行われる。
【００３１】
このように、上位３２ビットの演算処理と下位３２ビットの演算処理は、独立に、かつ、並列に処理され、それぞれ独立に処理結果を得ることができる。このため、非線形変換処理は、従来の２倍の処理速度を実現することができる。すなわち、同一のアルゴリズムに基づく同一の命令に従って、メッセージＭＡとイニシャル値ＩＶＰとの処理とメッセージＭＢとイニシャル値ＩＶＱとの処理とを並列処理することで、単精度（３２ビット長）と倍精度（６４ビット長）の演算がすべて同じサイクル数で実行可能であれば、１メッセージ当たりの演算効率は２倍に向上し、高速化が実現できる。
【００３２】
本実施の形態では、入力データであるイニシャル値ＩＶＰ，イニシャル値ＩＶＱ，メッセージＭＡ，メッセージＭＢをそれぞれ３２ビット単位に分割した例を図１に示したが、各入力データを分割する単位は３２ビットに限らず、８、１６、６４、１２８ビット等の値がとれる。それらに対応して図１に示すレジスタの格納可能ビット数は、倍制度のデータ長、即ち、１６，３２，１２８，２５６ビットとなる。このようにレジスタの格納可能ビット数は２xで（Ｘ≧１）であれば、どのようなビット数をとることもできる。
【００３３】
以上のように、非線形変換装置３００を用いることによって互いに関連しない複数のデータについて並列して同時に非線形変換処理を行うことができ、高速に変換データを出力することが可能となる。したがって、例えば、入力データであるメッセージに対し、そのメッセージが正当であることを認証するデジタル署名情報として変換データを用いる場合にも、高速な認証情報を生成できる。このようなデジタル署名においては、大量の通信メッセージに対し、高速に認証情報を生成する必要があるため、従来に比べ、本実施の形態のように並列して複数のデータを同時に非線形変換処理行うことで、非線形変換処理スピードを複数倍にできる効果は今後のネット通信市場において大きな意味をもつものである。
【００３４】
実施の形態２．
実施の形態２では、実施の形態１に更に第３の入力データであるイニシャル値ＩＶＲとそれに対応する入力データであるメッセージＭＣとに対する処理が付加され、これらを並列処理することにより、非線形変換をより高速に処理することを実現する実施の形態である。
例えば、ペンティアム（ペンティアムは登録商標。以下、同様。）３では、６４ビット長のレジスタを８個と３２ビット長のレジスタを８個、ＣＰＵ中に保持している。従って、６４ビット長のレジスタを実施の形態１に示す処理にて利用し、３２ビット長のレジスタを第３の入力データであるイニシャル値ＩＶＲとメッセージＭＣに対する処理に用いることが可能である。
【００３５】
図４は、実施の形態１に更に第３のイニシャル値ＩＶＲとメッセージＭＣとに対する処理を付加した非線形変換装置３００の概念図である。
ＩＶＲは、イニシャル値を示し、レジスタ５００に格納され、ＩＶＲ（１）からＩＶＲ（Ｋ）まで３２ビット単位に分割される。
ＭＣも同様にメッセージを示し、レジスタ６００に格納され、ＭＣ（１）からＭＣ（Ｋ）まで３２ビット単位に分割される。
ＨＵは、非線形変換後の出力データであるハッシュ値を示す。ＨＵ（１）からＨＵ（Ｋ）は、連結されてハッシュ値ＨＵとしてレジスタ７００に格納される。
【００３６】
図４に基づいて動作を説明する。
まず、ＩＶＲ（１）は、実施の形態１の場合と同様に、レジスタ５０１に転送される。ＩＶＲ（２）からＩＶＲ（Ｋ）も同様に、レジスタ５０２〜レジスタ５１０に転送される。ここで、レジスタ５０１〜レジスタ５１０は図示はしていないが記録部によって記憶可能なデバイスの一例である。
ＭＣ（１）も、実施の形態１の場合と同様に、レジスタ６０１に転送される。ＭＣ（２）からＭＣ（Ｋ）も同様に、レジスタ６０２〜レジスタ６１０に転送される。なお、レジスタ６０１〜レジスタ６１０は記録部によって記憶可能なデバイスの一例である。
ここで、変換部３１０は、６４ビット長のレジスタを使用して、実施の形態１と同様の非線形変換処理を行うために使用するアルゴリズムとしてＦ２というハッシュ関数を用い、３２ビット長のレジスタを使用して、前記Ｆ２を使用した処理と並列に処理するためのアルゴリズムとしてＦ３というハッシュ関数を使用する。
【００３７】
実施の形態１で説明したように、非線形変換装置３００の変換部３１０は、レジスタ１０１Ｈに転送されたＩＶＰ（１）とレジスタ２０１Ｈに転送されたＭＡ（１）とからハッシュ関数Ｆ２によって、非線形変換処理を行う。変換後、変換部３１０は、レジスタ４０１Ｈに出力データとしてＨＳ（１）を出力する。上記処理と同時に、非線形変換装置３００の変換部３１０は、レジスタ１０１Ｌに転送されたＩＶＱ（１）とレジスタ２０１Ｌに転送されたＭＢ（１）を入力データとして非線形変換処理を行い、レジスタ４０１ＬにＨＴ（１）を出力する処理を並行に行う。
さらに、本実施の形態では、次の非線形変換処理が上記２つの処理と並行に行われる。即ち、レジスタ５０１に転送されたＩＶＲ（１）とレジスタ６０１に転送されたＭＣ（１）を入力データとして非線形変換装置３００の変換部がＦ３をハッシュ関数として使用して非線形変換処理を行い、出力データであるＨＵ（１）を６０１に出力する。
【００３８】
上記に説明した３つの非線形変換並行処理の詳細について図５を使用して説明する。図５は、本実施の形態の非線形変換装置３００によって実行される３つの並行処理である非線形変換処理の工程を表した図である。
第１非線形変換工程３００ａ．
第１非線形変換工程３００ａでは、以下に示す並列処理１と並列処理２と並列処理３が並列に処理される。
（１）並列処理１．
第１非線形変換工程３００ａでは、レジスタ１０１上位ビットに転送されたＩＶＰ（１）とレジスタ２０１の上位ビットに転送されたＭＡ（１）を入力データとして、入力データは、ハッシュ関数Ｆ２により変換され、出力データとしてＨＳ（１）がレジスタ４０１の上位３２ビットに出力される。
（２）並列処理２．
この処理に並行して、第１非線形変換工程３００ａでは次の処理が実行される。即ち、レジスタ１０１下位ビットに転送されたＩＶＱ（１）とレジスタ２０１の下位ビットに転送されたＭＢ（１）を入力データとして、入力データは、ハッシュ関数Ｆ２により変換され、出力データとしてＨＴ（１）がレジスタ４０１の下位３２ビットに出力される。
（３）並列処理３．
更に、これらの処理と並行して、第１非線形変換工程３００ａでは次の処理が実行される。即ち、レジスタ５０１に転送されたＩＶＲ（１）とレジスタ６０１に転送されたＭＣ（１）を入力データとして、入力データは、ハッシュ関数Ｆ３により変換され、出力データとしてＨＵ（１）がレジスタ７０１に出力される。
【００３９】
第１非線形変換工程３００ａでは、以上の３つの処理を並行に行うことができる。同様に、第２非線形変換工程３００ｂ、第３非線形変換工程３００ｃ〜第Ｋ非線形変換工程３００ｋの各工程においても３つのイニシャル値と３つのメッセージを入力データとして、各アルゴリズムにより非線形変換処理を並行して行い、その結果、３つの出力データをハッシュ値として同時に出力することが可能となる。
【００４０】
このように、６４ビット長のレジスタと３２ビット長のレジスタを同時に、並行して使用することにより、３つの変換処理を並行して行い、それぞれの命令を記述したコードを、ペンティアム３のようなＣＰＵ内部において命令レベルで並列実行可能なようにマージすることによって、３つの独立なデータブロックを並列に演算することができる。
このように、異なる種類のレジスタを組み合わせることによって複数の独立なデータを並列に演算することが可能となるため、並列できる処理数が多ければ多いほど高速に出力データを得ることができる。今後、大量の通信データに対し、デジタル署名や暗号化の必要性が増大することに鑑みれば、上記のように、より高速なデータ処理を実現することはこれから、ますます加速するＩＴ社会に大きな貢献を果たすものである。
【００４１】
また、以上の実施の形態では、例としてレジスタを使用したが、レジスタでなく、メモリを使用してもよい。この場合には、メモリ間で演算処理がなされる。また、レジスタとメモリを混在させて使用してもよい。
なお、変換部３１０は、ソフトウェアによって実現されていてもよいし、ハードウェアによって実現さていてもよい。
【００４２】
実施の形態３．
実施の形態３では、単一の２Ｊビット長の加算命令が存在しない計算機において、Ｊビットずつの演算処理を行う場合に、データのアクセス方法によって演算の遅延を起こす場合がある従来の要因を回避し、高速な演算方法を得る方法について説明する。
図６は、レジスタ８０２に格納されたデータ（１）とメモリ８００の任意の領域８０１に格納されたの値との加算演算を示す図である。
【００４３】
データの加算処理は、次の手順によって行われる。
まず、レジスタ８０２に格納されたデータ（１）の上位Ｊビットは、レジスタ８０４にデータＨ（１）として転送され、レジスタ８０２に格納されたデータ（１）の下位Ｊビットは、レジスタ８０３にデータＬ（１）として転送される（Ｓ１）。
次に、レジスタ８０３に転送されたデータＬ（１）とメモリ８００の任意の領域８０１の下位Ｊビットに格納されたデータＬ（２）とが、加算器８１５によって加算される。加算された結果は、レジスタ８０３に加算データＬとして格納される（Ｓ２）。このとき、桁上がりが発生した場合には、桁上がりをレジスタ８１０にキャリーとして格納する。
次に、レジスタ８０４の上位Ｊビットに格納されたデータＨ（１）と領域８０１の上位Ｊビットに格納されたデータＨ（２）とキャリーが存在する場合にはレジスタ８１０に格納されたキャリーとが、加算器８１５によって加算され、加算された結果をレジスタ８０４に加算データＨとして格納する（Ｓ３）。
レジスタ８０３とレジスタ８０４に格納された各データは、それぞれ、レジスタ８０５とレジスタ８０６の下位Ｊビットに転送される（Ｓ４）。
その後、レジスタ８０６に格納された加算データＨを上位ビット、レジスタ８０５に転送された加算データＬを下位ビットとして連結する。連結後、２Ｊビット長となった加算データをレジスタ８０７へ転送する（Ｓ５）。
その後、レジスタ８０７をメモリ８００の領域８０１へ転送する。
【００４４】
このように、単一の２Ｊビット長の加算命令が存在しない場合に、従来方法のようなメモリ書き込みと読み出しを行わないため、演算の遅延を起こすような要因を排除して、高速な演算を可能にすることができる。従って、従来に比して全体の処理のスピードを向上させることができる。
【００４５】
【発明の効果】
本発明によれば、非線形変換処理を高速に行うことができる。特に、非線形変換処理をソフトウェア（プログラム）により行う場合には、サイクル数を減少させることができ、高速処理を行うことができる。
【００４６】
また、本発明によれば、演算の遅延を起こすような要因を排除して、高速な演算を可能にすることができる。
【図面の簡単な説明】
【図１】  実施の形態１における非線形変換装置の構成図。
【図２】  実施の形態１における非線形変換装置の動作図。
【図３】  データ間の加算処理動作を示す図。
【図４】  実施の形態２における非線形変換装置の構成図。
【図５】  実施の形態２における非線形変換装置の動作図。
【図６】  実施の形態３の加算方法を示す図。
【図７】  従来の非線形変換処理図。
【図８】  従来の非線形変換処理工程図。
【図９】  従来のメモリとレジスタとの間の加算処理の一例を示す図。
【図１０】  従来の加算方法動作を示す図。
【図１１】  従来の加算方法動作を示すフローチャート。
【符号の説明】
１００Ｈ，１００Ｌ，５００，１０００  イニシャル値を格納したレジスタ、２００Ｈ，２００Ｌ，６００，１２００  メッセージを格納したレジスタ、３００，１３００  非線形変換装置、３００ａ，１３００ａ  第１非線形変換工程、３００ｂ，１３００ｂ  第２非線形変換工程、３００ｃ，１３００ｃ  第３非線形変換工程、３００ｋ，１３００ｋ  第Ｋ非線形変換工程、３１０，１３１０  変換部、３２０，１３２０  ＸＯＲ、３５０  入力部Ｉ、３６０  入力部Ｍ、３７０  出力部、４００Ｈ，４００Ｌ，７００，１１００  ハッシュ値を格納したレジスタ、８００  メモリ、１０１〜１１０，２０１〜２１０，４０１〜４１０，５０１〜５１０，６０１〜６１０，１００１〜１０１０，１１０１〜１１１０，１２０１〜１２１０，８０２〜８０７，８１０  レジスタ、８１５  加算器。
【図１】
0004004805.tif 000002
【図２】
0004004805.tif 000003
【図３】
0004004805.tif 000004
【図４】
0004004805.tif 000005
【図５】
0004004805.tif 000006
【図６】
0004004805.tif 000007
【図７】
0004004805.tif 000008
【図８】
0004004805.tif 000009
【図９】
0004004805.tif 000010
【図１０】
0004004805.tif 000011
【図１１】
0004004805.tif 000012