(57)【要約】【課題】メッセージを分割して並列処理するデータ処理装置において、処理分岐条件式を減少し、最終ブロック処理の際のパディングデータ付与に起因するブロック増加数を減少できるデータ処理装置を提供する。【解決手段】メッセージ分割部１０２は、最終ブロックのデータが２２０オクテット以下かを判定する。２２０オクテット以下と判定した場合は最終ブロックのデータを５５オクテット以下の４つのデータに分割し、各データに９オクテットの付加データを付加して６４オクテットブロックを生成する。最終ブロックのデータが２２０オクテットを超えると判定した場合は、最終ブロックに含まれるデータを５５オクテットの３つのデータと、残りのデータとの４つのデータに分割し、各５５オクテットデータに９オクテットの付加データを付加して３つの６４オクテットブロックを生成し、残りのデータに付加データを付加して１２８オクテット長のデータを生成する。【選択図】図２
2011081594.tif 000002
【特許請求の範囲】
【請求項１】
処理対象のメッセージデータを分割することにより前記メッセージデータをＮ個（Ｎは２以上の整数）のメッセージに分割し、分割されたＮ個の各メッセージの最後に少なくとも所定のオクテット数Ａオクテットの付加データを付加し、Ｎ個のメッセージを示すＮ系列の系列ごとに所定の処理単位長ＢオクテットでＮ個のメッセージを並列処理するデータ処理装置において、
前記処理対象のメッセージデータを入力し、入力された前記処理対象のメッセージデータを先頭から処理単位長ＢオクテットのＢと系列数を示すＮとの積ＢＮを示すＢＮオクテット単位のブロックで順次格納するメッセージ格納部と、
先頭ブロックから最終ブロックの一つ手前のブロックまでは各ブロックを処理単位長Ｂオクテット単位で分割することにより各ブロックごとにＮ個の処理単位ブロックを生成すると共に、最終ブロックについては含まれるデータがＢＮオクテットから前記付加データのオクテット数を示すＡと系列数を示すＮとの積ＡＮを示すＡＮオクテットを差し引いたオクテット数以下かどうかを判定し、最終ブロックに含まれるデータがＢＮオクテットからＡＮオクテットを差し引いたオクテット数以下と判定した場合には、最終ブロックに含まれるデータをＢオクテットからＡオクテットを差し引いたオクテット数以下のＮ個のデータに分割し、Ｎ個に分割された各データに前記付加データを付加することによりＮ個に分割された各データから前記処理単位長Ｂオクテットの前記処理単位ブロックを生成するメッセージ分割部と、
前記メッセージ分割部によって生成されたＢＮオクテット単位のブロックごとのＮ個の前記処理単位ブロックを、ＢＮオクテット単位の先頭ブロックから最終ブロックに対応する順に、Ｎ並列で演算処理する演算処理部と
を備えたことを特徴とするデータ処理装置。
【請求項２】
前記メッセージ分割部は、
最終ブロックに含まれるデータがＢＮオクテットからＡＮオクテットを差し引いたオクテット数を超えると判定した場合には、最終ブロックに含まれるデータをＢオクテットからＡオクテットを差し引いたオクテット数のＮ−１個のデータと、最終ブロックに含まれるデータからＮ−１個分の前記データを差し引いた残りの部分のデータとのＮ個のデータに分割し、Ｎ−１個のＢオクテットからＡオクテットを差し引いたオクテット数の各データに前記付加データを付加することによりＮ−１個の処理単位ブロックを生成し、かつ、最終ブロックに含まれるデータからＮ−１個分の前記データを差し引いた残りの部分のデータに前記付加データを付加することにより処理単位長Ｂオクテットの２倍のオクテット長のデータを生成し、
前記演算処理部は、
前記最終ブロックに対応するＮ並列の処理としてＢオクテットからＡオクテットを差し引いたオクテット数のＮ−１個のデータから生成されたＮ−１個の処理単位ブロックと処理単位長Ｂオクテットの２倍のオクテット長のデータのうち先頭から付加データに向かって処理単位長Ｂオクテットの１ブロックとをＮ並列で演算処理すると共に、その演算処理の後に、処理単位ブロックの２倍のオクテット長のデータのうち後半の処理単位長Ｂオクテットの１ブロックを演算処理することを特徴とする請求項１または２記載のデータ処理装置。
【請求項３】
前記データ処理装置は、
「Ａ＝９、Ｂ＝６４、Ｎ＝４」と、「Ａ＝９、Ｂ＝６４、Ｎ＝６」と、「Ａ＝１、Ｂ＝８、Ｎ＝８」とのいずれかであることを特徴とする請求項１または２記載のデータ処理装置。
【請求項４】
処理対象のメッセージデータを分割することにより前記メッセージデータを４つのメッセージに分割し、分割された４つのメッセージの各メッセージの最後に少なくとも９オクテットの付加データを付加し、４つのメッセージを示す４系列の系列ごとに処理単位長６４オクテットで４つのメッセージを並列処理するデータ処理装置において、
前記処理対象のメッセージデータを入力し、入力された前記処理対象のメッセージデータを先頭から２５６オクテット単位のブロックで順次格納するメッセージ格納部と、
先頭ブロックから最終ブロックの一つ手前のブロックまでは各ブロックを６４オクテット単位で分割することによりブロックごとに４つの処理単位ブロックである６４オクテットブロックを生成すると共に、最終ブロックについては含まれるデータが２２０オクテット以下かどうかを判定し、最終ブロックに含まれるデータが２２０オクテット以下と判定した場合には、最終ブロックに含まれるデータを５５オクテット以下の４つのデータに分割し、４つに分割された各データに前記付加データを付加することにより４つに分割された各データから６４オクテット単位の６４オクテットブロックを生成するメッセージ分割部と、
前記メッセージ分割部によって生成された２５６オクテット単位のブロックごとの４つの６４オクテットブロックを、２５６オクテット単位の先頭ブロックから最終ブロックに対応する順に、４並列で演算処理する演算処理部と
を備えたことを特徴とするデータ処理装置。
【請求項５】
前記メッセージ分割部は、
最終ブロックに含まれるデータが２２０オクテットを超えると判定した場合には、最終ブロックに含まれるデータを５５オクテットの３つのデータと、３つのデータ以外の残りのデータとの４つのデータに分割し、３つの５５オクテットの各データに前記付加データを付加することにより３つの６４オクテットブロックを生成し、かつ、３つのデータ以外の残りのデータに前記付加データを付加することにより１２８オクテット長のデータを生成し、
前記演算処理部は、
前記最終ブロックに対応する４並列の処理として５５オクテットの３つのデータから生成された３つの６４オクテットブロックと、前記１２８オクテット長のデータのうち先頭から付加データに向かって６４オクテットの１ブロックとを演算処理すると共に、その演算処理の後に、前記１２８オクテット長のデータのうち後半の６４オクテットの１ブロックを演算処理することを特徴とする請求項４記載のデータ処理装置。
【請求項６】
前記演算処理部は、
前記演算処理として、ハッシュ演算処理を実行することを特徴とする請求項１〜５のいずれかに記載のデータ処理装置。
【請求項７】
処理対象のメッセージデータを分割することにより前記メッセージデータをＮ個（Ｎは２以上の整数）のメッセージに分割し、分割されたＮ個の各メッセージの最後に少なくとも所定のオクテット数Ａオクテットの付加データを付加し、Ｎ個のメッセージを示すＮ系列の系列ごとに所定の処理単位長ＢオクテットでＮ個のメッセージを並列処理するコンピュータであるデータ処理装置を、
前記処理対象のメッセージデータを入力し、入力された前記処理対象のメッセージデータを先頭から処理単位長ＢオクテットのＢと系列数を示すＮとの積ＢＮを示すＢＮオクテット単位のブロックで順次格納するメッセージ格納部、
先頭ブロックから最終ブロックの一つ手前のブロックまでは各ブロックを処理単位長Ｂオクテット単位で分割することにより各ブロックごとにＮ個の処理単位ブロックを生成すると共に、最終ブロックについては含まれるデータがＢＮオクテットから前記付加データのオクテット数を示すＡと系列数を示すＮとの積ＡＮを示すＡＮオクテットを差し引いたオクテット数以下かどうかを判定し、最終ブロックに含まれるデータがＢＮオクテットからＡＮオクテットを差し引いたオクテット数以下と判定した場合には、最終ブロックに含まれるデータをＢオクテットからＡオクテットを差し引いたオクテット数以下のＮ個のデータに分割し、Ｎ個に分割された各データに前記付加データを付加することによりＮ個に分割された各データから前記処理単位長Ｂオクテットの前記処理単位ブロックを生成するメッセージ分割部、
前記メッセージ分割部によって生成されたＢＮオクテット単位のブロックごとのＮ個の前記処理単位ブロックを、ＢＮオクテット単位の先頭ブロックから最終ブロックに対応する順に、Ｎ並列で演算処理する演算処理部、
として機能させるためのデータ処理プログラム。
【請求項８】
前記メッセージ分割部は、
最終ブロックに含まれるデータがＢＮオクテットからＡＮオクテットを差し引いたオクテット数を超えると判定した場合には、最終ブロックに含まれるデータをＢオクテットからＡオクテットを差し引いたオクテット数のＮ−１個のデータと、最終ブロックに含まれるデータからＮ−１個分の前記データを差し引いた残りの部分のデータとのＮ個のデータに分割し、Ｎ−１個のＢオクテットからＡオクテットを差し引いたオクテット数の各データに前記付加データを付加することによりＮ−１個の処理単位ブロックを生成し、かつ、最終ブロックに含まれるデータからＮ−１個分の前記データを差し引いた残りの部分のデータにデータの終了を示す少なくともＡオクテットの付加データを付加することにより処理単位長Ｂオクテットの２倍のオクテット長のデータを生成し、
前記演算処理部は、
前記最終ブロックに対応するＮ並列の処理としてＢオクテットからＡオクテットを差し引いたオクテット数のＮ−１個のデータから生成されたＮ−１個の処理単位ブロックと処理単位長Ｂオクテットの２倍のオクテット長のデータのうち先頭から付加データに向かって処理単位長Ｂオクテットの１ブロックとをＮ並列で演算処理すると共に、その演算処理の後に、処理単位ブロックの２倍のオクテット長のデータのうち後半の処理単位長Ｂオクテットの１ブロックを演算処理する
ようにコンピュータを機能させることを特徴とする請求項７記載のデータ処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、メッセージを複数のメッセージとして並列処理するデータ処理装置に関する。
【背景技術】
【０００２】
公開鍵暗号を用いてデジタルデータの署名を生成する際には、デジタルデータを直接公開鍵暗号で処理するのではなく、ハッシュアルゴリズムを用いてデジタルデータをいったん数十バイトのデータに変換した後に処理することが一般的である。ハードディスク等の記憶装置の大容量化に伴い、署名対象のデジタルデータのサイズも大きくなってきている。その結果、署名処理におけるハッシュ処理の割合が増加しつつあるため、ハッシュの高速化が重要になってきているが、高速化のためのアルゴリズムの工夫には限界があった。
【０００３】
また、一般用途向けのプロセッサにもＳＩＭＤ命令が搭載されるようになってきており、主に画像や音声等のマルチメディア系の計算に使用されている。ＳＩＭＤ命令とは「Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ」の略で、同一の命令に対して複数のデータを指定できる命令のことであり、例えば、４データを指定可能な加算命令の場合、以下の４つの演算を並列に実行することができる。
１＋２＝３、３＋５＝８、２＋４＝６、６＋２＝８。
ＳＩＳＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｉｎｇｌｅ  Ｄａｔａ）命令とＳＩＭＤ命令の実行速度が同一であれば、ＳＩＭＤ命令はＳＩＳＤ命令の４倍の速度で命令を処理可能である。
【０００４】
ハッシュアルゴリズムは、処理すべきメッセージに算術演算や論理演算等を複数回行なうことによって、ハッシュ値を生成する。各演算の結果は次の演算に使用されるため、アルゴリズムを単独で並列化することは難しい。
【０００５】
しかしながら、メッセージを分割してあたかも複数のメッセージとして処理することによって、ハッシュ値の互換性は失われるものの高速化することが可能である。特許文献特開平１１−１６１１６２号公報（特許文献１）では、共通鍵暗号のＣＢＣモードにおいて、メッセージを分割して処理する方法について示されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平１１−１６１１６２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
例えば、ＳＨＡ−１のようなハッシュアルゴリズムでは、５１２ビット長のブロック単位でメッセージが処理されており、メッセージの最後では、パディングデータを付加することによりメッセージの長さによらず必ず５１２ビット単位で処理している。
【０００８】
（パディングデータの最小長：９オクテット）
パディングデータには、メッセージの終わりを示すためのビットとメッセージ長が含まれているため、オクテット単位でメッセージを処理する場合、パディングデータの最小長は９オクテットである。したがって、最終ブロック長が５５オクテットより大きい場合は、パディングデータを同一ブロックに収めることができず、パディングデータだけからなるブロックを１つ追加する必要がある。
【０００９】
また、共通鍵暗号のＣＢＣモードにおけるＩＶに相当する初期値が存在しており、定められた値を指定して処理する必要がある。しかしながら、一般的なライブラリでは、使用者は初期値やパディングのことを意識することなく任意の長さのメッセージを指定するだけで正しいハッシュ値を取得できるようなインタフェースになっている。
【００１０】
（ハッシュ処理の並列化）
ここで、並列実行が可能なようにメッセージを分割しＳＨＡ−１を用いて各メッセージを処理することによりハッシュ値を生成するハッシュアルゴリズムを実現することを考える。本ハッシュアルゴリズムは、メッセージを分割して異なるメッセージとして処理するために、ＳＨＡ−１によりメッセージ全体を処理されたハッシュ値と互換性を持たせることはできない。そのため、異なる計算機の間でデータ及び本アルゴリズムのハッシュ値をやり取りする場合には、両方の計算機に本アルゴリズムを実装する必要がある。
【００１１】
ＳＩＭＤ命令を用いてアルゴリズムを実装する計算機では、高速化のためにパディングの処理を含まないアルゴリズム部分を並列実行するように実装する必要があるが、ＳＩＭＤ命令を用いずにアルゴリズムを実装する計算機では、並列実行しないため、パディングの処理を含まないアルゴリズム部分を実装する意義はない。逆に、分割したメッセージを初期値の設定やパディングを含めたＳＨＡ−１を用いて処理することによって、既存の一般的なライブラリを利用することが可能になるため、実装が容易になるという利点がある。但し、ＳＩＭＤ命令を用いてアルゴリズムを実装する場合、最終ブロックのメッセージの分割方法によって、実装が複雑になったり、処理のオーバヘッドが生じたりするという課題がある。
【００１２】
（メッセージ４分割の場合）
メッセージを４分割して４並列で実行する場合、１つの分割方法として考えられるのは、２５６オクテットを１ブロックとし、先頭から６４オクテット単位に分割して４つのメッセージとして４つのハッシュ演算ユニットで処理する方法である。
図７は、この分割法を示す図である。図７は、処理対象のメッセージを２５６オクテット単位で１ブロックとし、１ブロックごとに先頭から６４オクテット単位に４分割して、４系統のメッセージに分割する状態を示している。さらに具体的に説明すれば、２５６オクテット単位のブロック（１）について先頭から６４オクテット単位に「丸１」〜「丸４」のように４分割する。以下のブロック（２）、ブロック（３）・・・についても同様である。そして、元のメッセージを、
各ブロックの「丸１」からなる「丸１の系列」、
各ブロックの「丸２」からなる「丸２の系列」、
各ブロックの「丸３」からなる「丸３の系列」、
各ブロックの「丸４」からなる「丸４の系列」、
からなる４つのメッセージに分割する。
そして、並列処理では、
「丸１の系列」の「丸１（１）」、
「丸２の系列」の「丸２（１）」、
「丸３の系列」の「丸３（１）」、
「丸４の系列」の「丸４（１）」、
というように、ブロックを同じくする各系列の６４オクテットのデータが処理される。
【００１３】
（メッセージ４分割の場合の最終ブロック）
最終ブロックの分割方法として、ある単純な方法では、通常のブロックと同様に図７に示したように先頭から６４オクテット単位で分割する。
図８は、この場合の分割方法を示す図である。
その場合、図８に示すように、最終ブロックのメッセージの大きさによって、６４オクテットすべてがメッセージであるユニット（４並列の４つのハッシュ演算ユニットのうちの一つのハッシュ演算ユニット用の分割されたメッセージを意味する）と、一部がメッセージであるユニットと、メッセージが存在しないユニットが混在する。すべてがメッセージであるユニットでは、パディングデータを付与すると必ず図９のブロック増加（ａ），（ｂ）のように、１ブロック余分に必要となる。なお図９の破線の部分はパディングデータであることを示している。一部がメッセージであるユニットではメッセージが５５オクテット以下ではブロックに収まる（パディングデータは最少９オクテットであるため）が、５６オクテット以上では１ブロック余分に必要となる（図９のブロック増加（ｃ））。メッセージが存在しないユニットではパディングデータのみのブロック（図９の（ｄ））となる。
【００１４】
したがって、最終ブロックのメッセージの大きさに応じて、各ユニットでブロックの追加が発生するか判定するための条件式が４つ、またブロックの追加が発生する場合にパディングの処理が２つのブロックにまたがるか判定するための条件式が必要になる。
【００１５】
（ＳＨＡ−１による処理）
さらに、通常のＳＨＡ−１で処理した場合、ブロックの追加が必要なのは、２４８オクテット以上の場合に１ブロックであるのに対して、本方式では同じ条件で４ブロックの追加が必要となる。
【００１６】
（別の最終ブロックの分割方法）
最終ブロックを分割する別の単純な方法では、各ユニットに均等にメッセージを割り当てるという方法がある。例えば、最終ブロック（２５６オクテット単位）のメッセージの大きさが１２０オクテットである場合、４つの各ユニットに３０オクテットずつ割り当てる。メッセージのオクテット数がユニット数の倍数の場合には各ユニットに同一の大きさのメッセージを割り当てることが可能であるが、倍数でない場合には例えば、余った分を１オクテットずつ各ユニットに割り当てることになる。
（１）この場合、パティングデータを最小９オクテットとすると最終ブロックのメッセージの大きさが２２０オクテット以下の場合、どのユニットも５５オクテット＋９オクテット＝６４オクテットとなり、追加のブロックを必要とせずにメッセージを処理することができる。
（２）しかし、２２１から２２３オクテットまでは、５５オクテットを超えるユニットが登場するので追加ブロックを必要としないユニットと必要とするユニットが混在する。
（３）そして、２２４オクテット以上（５６オクテット×４以上）では、すべてのユニットで追加のブロックを必要とするため、ブロックの追加が発生するか判定するための条件式は、５つ必要である。
【００１７】
また、最終ブロックのメッセージの大きさが２２０オクテット以下の場合にはブロックの追加が発生しないものの、先ほどの例における２４８オクテット以上の場合は、依然として４ブロックの追加が必要である。
【００１８】
本発明は、メッセージを分割して、分割したメッセージを既存のハッシュアルゴリズムを用いて並列に処理することにより高速化を行なうハッシュアルゴリズムを実現する場合に際して、処理の複雑さを軽減して開発効率及び不具合の発生率を低減するとともに、ブロックの処理数を減少させることによって、処理のオーバヘッドを軽減する装置及びプログラムの提供を目的とする。
【課題を解決するための手段】
【００１９】
この発明のハッシュ演算装置は、
処理対象のメッセージデータを分割することにより前記メッセージデータをＮ個（Ｎは２以上の整数）のメッセージに分割し、分割されたＮ個の各メッセージの最後に少なくとも所定のオクテット数Ａオクテットの付加データを付加し、Ｎ個のメッセージを示すＮ系列の系列ごとに所定の処理単位長ＢオクテットでＮ個のメッセージを並列処理するデータ処理装置において、
前記処理対象のメッセージデータを入力し、入力された前記処理対象のメッセージデータを先頭から処理単位長ＢオクテットのＢと系列数を示すＮとの積ＢＮを示すＢＮオクテット単位のブロックで順次格納するメッセージ格納部と、
先頭ブロックから最終ブロックの一つ手前のブロックまでは各ブロックを処理単位長Ｂオクテット単位で分割することにより各ブロックごとにＮ個の処理単位ブロックを生成すると共に、最終ブロックについては含まれるデータがＢＮオクテットから前記付加データのオクテット数を示すＡと系列数を示すＮとの積ＡＮを示すＡＮオクテットを差し引いたオクテット数以下かどうかを判定し、最終ブロックに含まれるデータがＢＮオクテットからＡＮオクテットを差し引いたオクテット数以下と判定した場合には、最終ブロックに含まれるデータをＢオクテットからＡオクテットを差し引いたオクテット数以下のＮ個のデータに分割し、Ｎ個に分割された各データにＡオクテットの前記付加データを付加することによりＮ個に分割された各データから前記処理単位長Ｂオクテットの前記処理単位ブロックを生成するメッセージ分割部と、
前記メッセージ分割部によって生成されたＢＮオクテット単位のブロックごとのＮ個の前記処理単位ブロックを、ＢＮオクテット単位の先頭ブロックから最終ブロックに対応する順に、Ｎ並列で演算処理する演算処理部と
を備えたことを特徴とする。
【発明の効果】
【００２０】
本発明によれば、既存のハッシュアルゴリズムを利用してメッセージを分割して処理することで並列実行可能なハッシュアルゴリズムを実現する際に、並列処理を行なってアルゴリズムを実装する場合の処理を分岐する条件式を減少することができる。また、本発明によれば、最終ブロックを処理する際のパディングデータ付与に起因するブロック増加数を減少させることができる。そのためハッシュを高速に生成することができ、特に数ブロック以下のメッセージに対する効果が大きい。
【図面の簡単な説明】
【００２１】
【図１】実施の形態１のハッシュ演算装置１００のブロック図。
【図２】実施の形態１のハッシュ演算装置１００の動作概要を示す図。
【図３】実施の形態１のメッセージ分割部１０２の動作を示すフローチャート。
【図４】実施の形態１のハッシュ演算部１０３の動作を示すフローチャート。
【図５】実施の形態１のハッシュ演算装置１００の外観の一例。
【図６】実施の形態１のハッシュ演算装置１００のハードウェア構成の一例。
【図７】従来技術を示す図。
【図８】従来技術を示す図。
【図９】従来技術を示す図。
【発明を実施するための形態】
【００２２】
実施の形態１．
本実施の形態１では、メッセージを４つに分割し、分割した各メッセージをＳＨＡ−１を用いて処理することによってハッシュを生成するハッシュ演算装置１００（データ処理装置）を説明する。ハッシュ演算装置１００は、４データのＳＩＭＤ命令を用いて並列処理する構成である。
【００２３】
（ハッシュ演算装置１００の構成）
図１は、ハッシュ演算装置１００の構成図である。ハッシュ演算装置１００はメッセージ入力部１０１、メッセージ分割部１０２、ハッシュ演算部１０３（演算処理部）、ハッシュ出力部１０４、メッセージ格納部１０５、作業用データ格納部１０６を備えている。
【００２４】
（１）メッセージ入力部１０１は、ハッシュ対象のメッセージを入力する部分である。
（２）メッセージ分割部１０２は、入力されたメッセージを分割する部分である。
（３）ハッシュ演算部１０３は、分割されたメッセージを並列に処理しハッシュを演算する部分である。
（４）ハッシュ出力部１０４は、ハッシュ演算部１０３によって演算されたハッシュを出力する部分である。
（５）メッセージ格納部１０５は、メッセージ入力部１０１に入力されたメッセージをブロック毎に格納する部分である。
（６）作業用データ格納部１０６は、メッセージ分割部１０２によって分割されたメッセージやハッシュ演算のための中間値等ハッシュを生成するために必要なデータを格納する部分である。
【００２５】
図２はメッセージ分割部１０２による最終ブロックの分割処理の概要を示す図である。図２を参照して、ハッシュ演算装置１００の特徴である、最終ブロックの分割処理の概要を説明する。ハッシュ演算装置１００は、メッセージを分割する際の処理の複雑さ及びオーバヘッドを軽減するために、メッセージを各ユニットに均等に割り当てるとともに、パディングデータが１ブロック内に収まらない場合にすべてのユニットでブロックを追加するのではなく１つのユニットのみにブロックを追加することで処理を行なえるようにメッセージを分割する。
【００２６】
（最終ブロックが２２０オクテット以下の場合）
図２（ａ）は、最終ブロックが２２０オクテット以下の場合の処理を示す図である。
（１）メッセージ分割部１０２は、最終ブロックについては、含まれるデータが２２０オクテット以下かどうかを判定する。
（２）メッセージ分割部１０２は、最終ブロックに含まれるデータが２２０オクテット以下と判定した場合には、図２（ａ）に示すように、最終ブロックに含まれるデータを５５オクテット以下の４つのデータに分割し、４つに分割された各データに最少９オクテット長のパディングデータ（付加データ）を付加することにより、４つに分割された各データから６４オクテット単位の６４オクテットブロックを生成する。
（３）最終ブロックが２２０オクテット以下の場合には以上のように分割することで、ブロックの増加をなくすことができる。
【００２７】
（最終ブロックが２２０オクテットを超える場合）
図２（ｂ）は、最終ブロックが２２０オクテットを超える場合の処理を示す図である。
（１）メッセージ分割部１０２は、最終ブロックに含まれるデータが２２０オクテットを超えると判定した場合には、図２（ｂ）に示すように、最終ブロックに含まれるデータを５５オクテットの３つのデータと、３つのデータ以外の残りのデータとの４つのデータに分割する。
（２）そして、メッセージ分割部１０２は、３つの５５オクテットの各データに９オクテットのパディングデータを付加することにより３つの６４オクテットブロックを生成し、かつ、５５オクテットの３つのデータ以外の残りのデータに所定の長さのパディングデータを付加することにより２ブロック分の１２８オクテット長のデータを生成する。この分割方式により最終ブロックが２２０オクテットを超える場合には、１ユニット（１系列）のみ１ブロック増加するにとどまる。
【００２８】
また従来、最終ブロックのメッセージの大きさに応じて各ユニットでブロックの追加が発生するか判定するための条件式が４つあるいは５つであったのに対して、図２の処理では、最終ブロックが２２０オクテット以下かどうかを判断するのみでよいので、処理分岐の条件式をひとつでまかなうことができる。
【００２９】
ハッシュ演算部１０３は、メッセージ分割部１０２によって生成された２５６オクテット単位のブロックごとの４つの６４オクテットブロックを、２５６オクテット単位の先頭ブロックから最終ブロックに対応する順に、４並列で演算処理する。この場合、ハッシュ演算部１０３は、最終ブロックが２２０オクテットを超える場合、最終ブロックに対応する４並列の処理として５５オクテットの３つのデータから生成された３つの６４オクテットブロックと、１２８オクテット長のデータのうち先頭から付加データに向かって６４オクテットの１ブロックとを演算処理すると共に、その演算処理の後に、１２８オクテット長のデータのうち後半の６４オクテットの１ブロックを演算処理する。
【００３０】
以下に、ハッシュ演算装置１００を詳しく説明する。
【００３１】
（メッセージ入力部１０１）
メッセージ入力部１０１は、外部から指定されたメッセージを２５６オクテット単位のブロックとして、メッセージ格納部１０５に格納する。入力されたメッセージはＭ（１）、Ｍ（２）、・・・、Ｍ（ｎ）の順に格納される。Ｍ（１）からＭ（ｎ−１）までは長さを２５６オクテットとし、メッセージの最終部であるＭ（ｎ）は長さを２５６オクテット未満となるように格納する。
【００３２】
（メッセージ分割部１０２）
メッセージ分割部１０２は、メッセージ入力部１０１がメッセージ格納部１０５に格納したメッセージをＭ（１）、・・・、Ｍ（ｎ）の順に分割する。分割されるメッセージがＭ（１）からＭ（ｎ−１）である場合、以下のように処理する。
【００３３】
（Ｍ（ｉ）；ｉ＝１〜ｎ−１）
まず、メッセージ分割部１０２は、メッセージＭ（ｉ）を先頭から６４オクテットずつに分割してＭＡ、ＭＢ、ＭＣ、ＭＤに設定する。ここで、ＭＡ、ＭＢ、ＭＣ、ＭＤはそれぞれ１２８オクテット、６４オクテット、６４オクテット、６４オクテットのメッセージを保持可能な変数である。ＭＡ、ＭＢ、ＭＣ、ＭＤをそれぞれ先頭から３２ビットずつ１６個に分割して先頭からそれぞれ、
ＷＡ（０）、・・・、ＷＡ（１５）、
ＷＢ（０）、・・・、ＷＢ（１５）、
ＷＣ（０）、・・・、ＷＣ（１５）、
ＷＤ（０）、・・・、ＷＤ（１５）、
とする。
ＷＡ（ｉ）（このｉは１〜１５）、ＷＢ（ｉ）、ＷＣ（ｉ）、ＷＤ（ｉ）をＳＩＭＤ命令のデータとするために、ＷＡ（ｉ）、ＷＢ（ｉ）、ＷＣ（ｉ）、ＷＤ（ｉ）の順に連結し１２８ビットのデータとして、作業用データ格納部１０６に、Ｗ（０）、・・・、Ｗ（１５）として格納する。
【００３４】
図３はメッセージ分割部１０２による分割処理フローチャートである。図３を用いて、分割されるメッセージがＭ（ｎ）である場合を説明する。
【００３５】
Ｓ２０１においてメッセージ分割部１０２はＭ（ｎ）の長さが２２０オクテット以下であるか判定する。
【００３６】
（２２０オクテット以下の場合）
２２０オクテット以下の場合、Ｓ２０２においてそれぞれＭＡ、ＭＢ、ＭＣ、ＭＤの長さＭＡＬ、ＭＢＬ、ＭＣＬ、ＭＤＬをメッセージ長の４分の１に設定する。但し、余りは切り捨てる。ＭＡＬ、ＭＢＬ、ＭＣＬ、ＭＤＬは一般的な整数を保持することのできる変数である。
【００３７】
（Ｓ２０３〜Ｓ２０４：端数処理）
Ｓ２０３〜Ｓ２０４は、端数処理のステップである。メッセージ長が４の倍数でない場合に端数の処理を行なうためにＳ２０３、Ｓ２０４、Ｓ２０５において余りの数を判定する。
余りが１の場合はＳ２０６においてＭＡＬの値を１増やし、
余りが２の場合はＳ２０７においてＭＡＬとＭＢＬの値を１増やし、
余りが３の場合はＳ２０８においてＭＡＬとＭＢＬとＭＣＬの値を１増やす。
【００３８】
Ｓ２１０においてＭ（ｎ）の内容を先頭から順にそれぞれＭＡ、ＭＢ、ＭＣ、ＭＤにＭＡＬ、ＭＢＬ、ＭＣＬ、ＭＤＬオクテットずつコピーする。Ｓ２１１、Ｓ２１２、Ｓ２１３、Ｓ２１４においてＭＡ、ＭＢ、ＭＣ、ＭＤのパディング処理を行なう。
【００３９】
（パティング処理）
パディング処理とは、従来技術でも説明したように、メッセージの後ろにパディングデータ（付加データ）を追加して整形することにより、メッセージ長を６４オクテットの最小の倍数にすることである。具体的には、メッセージ長が５５オクテット以下の時にメッセージ長を６４オクテットに拡張し、そうでなければ１２８オクテットに拡張する。拡張した部分をパディングデータとし、パディングデータの先頭オクテットに０ｘ８０を設定し、パディングデータの最後から８オクテットにメッセージ長をビットで表した値を設定し、残りの部分には０ｘ００を設定する。Ｍ（ｎ）の長さが２２０オクテット以下であればパディング処理後のＭＡ、ＭＢ、ＭＣ、ＭＤの長さは６４オクテットとなる。
【００４０】
（２２０オクテットを超える場合）
Ｓ２０１において２２０オクテット以下でない場合、すなわち２２０オクテットを超える場合には、Ｓ２０９においてＭＢＬ、ＭＣＬ、ＭＤＬに５５を設定しＭＡＬにメッセージの残りの長さを設定する。その後Ｓ２１０に合流しメッセージ長が２２０オクテット以下の場合と同様の処理を行なう。Ｍ（ｎ）の長さが２２０オクテット以下でなければパディング処理後のＭＡの長さは１２８オクテット（２ブロック分）となり、ＭＢ、ＭＣ、ＭＤの長さは６４オクテットとなる。
【００４１】
Ｍ（ｎ）の長さが２２０オクテット以下の場合、他のメッセージＭ（ｉ）と同様にＭＡ、ＭＢ、ＭＣ、ＭＤからＷ（０）、・・・、Ｗ（１５）を作成する。
【００４２】
Ｍ（ｎ）の長さが２２０オクテット以下でない場合、ＭＡを前半の６４オクテットと後半の６４オクテットで半分に分け、それぞれをＭＡ１、ＭＡ２とし、他の場合でのＭＡをＭＡ１と読み替えて、Ｗ（０）、・・・、Ｗ（１５）を作成する。
【００４３】
（ハッシュ演算部１０３）
次にハッシュ演算部１０３の処理を説明する。ハッシュ演算部１０３は、分割されたメッセージをＳＩＭＤにより並列に演算する。Ｍ（１）が分割されているＷ（０）、・・・、Ｗ（１５）を演算する場合は処理に先立ち作業用データ格納部１０６のＨ０、Ｈ１、Ｈ２、Ｈ３、Ｈ４を以下のデータで初期化する。
Ｈ０：０ｘ６７４５２３０１、
Ｈ１：０ｘｅｆｃｄａｂ８９、
Ｈ２：０ｘ９８ｂａｄｃｆｅ、
Ｈ３：０ｘ１０３２５４７６、
Ｈ４：０ｘｃ３ｄ２ｅ１ｆ０、
とする。Ｈ０、Ｈ１、Ｈ２、Ｈ３、Ｈ４は１２８ビットの領域であり、上記の初期値はそれぞれ４回連結して格納する。
【００４４】
図４は初期化後のハッシュ演算部１０３の処理を示すフローチャートである。図４を用いてハッシュ演算部１０３の処理を説明する。
【００４５】
Ｓ３０１においてＨ０、Ｈ１、Ｈ２、Ｈ３、Ｈ４をそれぞれＡ、Ｂ、Ｃ、Ｄ、Ｅに代入する。Ａ、Ｂ、Ｃ、Ｄ、ＥはそれぞれＨ０、Ｈ１、Ｈ２、Ｈ３、Ｈ４に格納された４つの３２ビット長の値を保持することのできる１２８ビット長の変数である。
【００４６】
Ｓ３０２においてｔに０を代入する。ｔは一般的な整数を保持することのできる変数である。
【００４７】
Ｓ３０３においてｔが１６以上７９以下の場合にＳ３０４においてＷ（ｔ）を計算する。ここでＳｈｉｆｔ（Ｘ，ｎ）は３２ビット長の整数が４つ保持されている１２８ビット長の変数Ｘの各３２ビット長の整数に対してｎビット左に巡回シフトしてその結果を４つの３２ビット長の整数として返す関数である。
【００４８】
Ｓ３０５において図中に示す演算をＡ、Ｂ、Ｃ、Ｄ、Ｅに対して行なう。ここでＴＥＭＰは４つの３２ビット長の値を保持することのできる変数である。
ｆ（ｔ，Ｂ，Ｃ，Ｄ）は以下のようにｔの値によって異なる論理式によって構成される関数である。
ｆ（ｔ，Ｂ，Ｃ，Ｄ）＝（Ｂ  ＡＮＤ  Ｃ）ＯＲ（（ＮＯＴ  Ｂ）ＡＮＤ  Ｄ）（０＜＝ｔ＜＝１９）、
ｆ（ｔ，Ｂ，Ｃ，Ｄ）＝Ｂ  ＸＯＲ  Ｃ  ＸＯＲ  Ｄ（２０＜＝ｔ＜＝３９）、
ｆ（ｔ，Ｂ，Ｃ，Ｄ）＝（Ｂ  ＡＮＤ  Ｃ）ＯＲ（Ｂ  ＡＮＤ  Ｄ）ＯＲ（Ｃ  ＡＮＤ  Ｄ）（４０＜＝ｔ＜＝５９）、
ｆ（ｔ，Ｂ，Ｃ，Ｄ）＝Ｂ  ＸＯＲ  Ｃ  ＸＯＲ  Ｄ（６０＜＝ｔ＜＝７９）。
Ｂ、Ｃ、Ｄはそれぞれ３２ビット長の整数が４つ保持されている１２８ビット長の変数であり、関数ｆは各３２ビット長の整数に対して論理演算を行ないその結果を４つの３２ビット長の整数として返す。Ｋ（ｔ）は以下のようにｔの値によって定まる３２ビット長の定数を４つ返す関数である。
Ｋ（ｔ）＝０ｘ５ａ８２７９９９（０＜＝ｔ＜＝１９）、
Ｋ（ｔ）＝０ｘ６ｅｄ９ｅｂａ１（２０＜＝ｔ＜＝３９）、
Ｋ（ｔ）＝０ｘ８ｆ１ｂｂｃｄｃ（４０＜＝ｔ＜＝５９）、
Ｋ（ｔ）＝０ｘｃａ６２ｃ１ｄ６（６０＜＝ｔ＜＝７９）。
上記の手順において、各３２ビット長の値に対する加算の結果が３２ビット長に収まらない場合あふれた分は切り詰める。
【００４９】
Ｓ３０６においてｔの値を１増やす。Ｓ３０７においてｔが７９以下の場合にＳ３０３に戻る。条件を満たさなければＳ３０８においてＨ０、Ｈ１、Ｈ２、Ｈ３、Ｈ４にそれぞれＡ、Ｂ、Ｃ、Ｄ、Ｅを加算する。以上がＭ（ｉ）に対して実施されるハッシュ演算処理の内容である。メッセージ分割部１０２が分割したメッセージをハッシュ演算部１０３が処理するという手順をＭ（１）からＭ（ｎ）に対して順番に繰り返す。Ｍ（ｎ）の長さが２２０オクテット以下でない場合、メッセージ分割部１０２においてＭＡをＭＡ１と読み替えてＷ（０）、・・・、Ｗ（１５）を作成してハッシュ演算部１０３において処理した後、メッセージ分割部１０２においてＭＡをＭＡ２と読み替えてＷ（０）、・・・、Ｗ（１５）を作成する。次に、Ｈ０、Ｈ１、Ｈ２、Ｈ３、Ｈ４の内容をＨ０’、Ｈ１’、Ｈ２’、Ｈ３’、Ｈ４’として保存する。続いて、ハッシュ演算部１０３においてメッセージを処理する。ハッシュ演算部１０３における処理が終了した後、それぞれＨ０’、Ｈ１’、Ｈ２’、Ｈ３’、Ｈ４’に保存した内容の３３ビット目から１２８ビット目までをＨ０、Ｈ１、Ｈ２、Ｈ３、Ｈ４に書き戻す。
【００５０】
以上でメッセージの処理が完了する。
【００５１】
メッセージの処理の完了後、ハッシュ出力部１０４ではハッシュ値を生成する。まず、Ｈ０、Ｈ１、Ｈ２、Ｈ３、Ｈ４にそれぞれ保持されている４つの３２ビット長の整数を使用して４つのハッシュ値を生成する。すなわち、Ｈ０、Ｈ１、Ｈ２、Ｈ３、Ｈ４のそれぞれ先頭の３２ビットを連結した結果を第１のハッシュ値とし、２番目の３２ビットを連結した結果を第２のハッシュ値とし、３番目の３２ビットを連結した結果を第３のハッシュ値とし、４番目の３２ビットを連結した結果を第４のハッシュ値とする。次に、このようにして生成された４つのハッシュ値を連結して１つのメッセージとみなして、通常のＳＨＡ−１を用いてハッシュ値を生成する。このようにして生成されたハッシュ値を最終的なハッシュ値として外部に対して出力する。
【００５２】
上記の実施の形態では、Ｍ（ｎ）の長さが２２０オクテットよりも大きくＭＡ２の処理を行なう場合に、Ｈ０、Ｈ１、Ｈ２、Ｈ３、Ｈ４の内容を保存し、ＳＩＭＤにより並列にＭＡ２の処理を行なった後にＭＡ２の処理に関係しない部分の内容をＨ０、Ｈ１、Ｈ２、Ｈ３、Ｈ４に書き戻していたが、ＭＡ２の処理を並列に行なわず、通常のＳＨＡ−１の処理のようにＳＩＳＤを用いて処理しても良い。
【００５３】
また上記の実施の形態では、Ｍ（ｎ）の長さが２２０オクテットよりも大きくブロックの追加が必要になる場合に限りＭＡのブロック数を増加させていたが、Ｍ（ｎ−１）とＭ（ｎ）の長さの合計が２８４オクテット以下である場合、Ｍ（ｎ−１）とＭ（ｎ）を連結してＭ（ｎ）のように扱っても良い。その場合、ＭＡとして処理するブロック数をｎに、それ以外で処理するブロック数をｎ−１とすることが可能である。
【００５４】
上記の実施の形態において示したハッシュ演算装置１００では、メッセージを４つに分割して並列に処理することによって、通常のＳＨＡ−１を用いてハッシュを生成する場合に比べて高速に処理することができる。また当該ハッシュ演算装置１００によって生成されるハッシュ値は、分割された各メッセージを通常のＳＨＡ−１によるハッシュ値と互換性があるように処理した結果から生成されるため、当該ハッシュ演算装置１００によって生成されるハッシュ値とメッセージの互換性があるハッシュ値を生成する装置を通常のＳＨＡ−１を用いて実装することができる。さらに、パディングのためにブロックの追加が必要か判断するための条件式を１つにすることができる。加えて、ブロックの追加が必要となる場合は、最終ブロック長が２２０オクテットよりも大きい場合に限られ、その場合の追加ブロック数は１である。
【００５５】
実施の形態２．
図５、図６を参照して実施の形態２を説明する。実施の形態２は、ハッシュ演算装置１００をコンピュータで実現する場合を示す。
【００５６】
図５は、ハッシュ演算装置１００の外観の一例を示す図である。図５において、ハッシュ演算装置１００は、システムユニット８３０、ＣＲＴ（Ｃａｔｈｏｄｅ・Ｒａｙ・Ｔｕｂｅ）やＬＣＤ（液晶）の表示画面を有する表示装置８１３、キーボード８１４（Ｋｅｙ・Ｂｏａｒｄ：Ｋ／Ｂ）、マウス８１５、ＦＤＤ８１７（Ｆｌｅｘｉｂｌｅ・Ｄｉｓｋ・  Ｄｒｉｖｅ）、コンパクトディスク装置８１８（ＣＤＤ：Ｃｏｍｐａｃｔ  Ｄｉｓｋ  Ｄｒｉｖｅ）、プリンタ装置８１９などのハードウェア資源を備え、これらはケーブルや信号線で接続されている。
【００５７】
図６は、コンピュータで実現されるハッシュ演算装置１００のハードウェア資源の一例を示す図である。図６において、ハッシュ演算装置１００は、プログラムを実行するＣＰＵ８１０（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を備えている。ＣＰＵ８１０は、バス８２５を介してＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）８１１、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）８１２、表示装置８１３、キーボード８１４、マウス８１５、通信ボード８１６、ＦＤＤ８１７、ＣＤＤ８１８、プリンタ装置８１９、磁気ディスク装置８２０と接続され、これらのハードウェアデバイスを制御する。磁気ディスク装置８２０の代わりに、光ディスク装置、フラッシュメモリなどの記憶装置でもよい。
【００５８】
ＲＡＭ８１２は、揮発性メモリの一例である。ＲＯＭ８１１、ＦＤＤ８１７、ＣＤＤ８１８、磁気ディスク装置８２０等の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置あるいは記憶部、格納部、バッファの一例である。通信ボード８１６、キーボード８１４、ＦＤＤ８１７などは、入力部、入力装置の一例である。また、通信ボード８１６、表示装置８１３、プリンタ装置８１９などは、出力部、出力装置の一例である。
【００５９】
通信ボード８１６は、ネットワーク（ＬＡＮ等）に接続されている。通信ボード８１６は、ＬＡＮに限らず、インターネット、ＩＳＤＮ等のＷＡＮ（ワイドエリアネットワーク）などに接続されていても構わない。
【００６０】
磁気ディスク装置８２０には、オペレーティングシステム８２１（ＯＳ）、ウィンドウシステム８２２、プログラム群８２３、ファイル群８２４が記憶されている。プログラム群８２３のプログラムは、ＣＰＵ８１０、オペレーティングシステム８２１、ウィンドウシステム８２２により実行される。
【００６１】
上記プログラム群８２３には、以上の実施の形態１の説明において「〜部」として説明した機能を実行するプログラムが記憶されている。プログラムは、ＣＰＵ８１０により読み出され実行される。
【００６２】
ファイル群８２４には、以上の実施の形態１の説明において、「〜の判定結果」、「〜の算出結果」、「〜の抽出結果」、「〜の生成結果」、「〜の処理結果」として説明した情報や、データや信号値や変数値やパラメータなどが、「〜ファイル」や「〜データベース」の各項目として記憶されている。「〜ファイル」や「〜データベース」は、ディスクやメモリなどの記録媒体に記憶される。ディスクやメモリなどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ８１０によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示などのＣＰＵの動作に用いられる。抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示のＣＰＵの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリやキャッシュメモリやバッファメモリに一時的に記憶される。
【００６３】
また、以上に述べた実施の形態１の説明において、データや信号値は、ＲＡＭ８１２のメモリ、ＦＤＤ８１７のフレキシブルディスク、ＣＤＤ８１８のコンパクトディスク、磁気ディスク装置８２０の磁気ディスク、その他光ディスク、ミニディスク、ＤＶＤ（Ｄｉｇｉｔａｌ・Ｖｅｒｓａｔｉｌｅ・Ｄｉｓｋ）等の記録媒体に記録される。また、データや信号は、バス８２５や信号線やケーブルその他の伝送媒体によりオンライン伝送される。
【００６４】
また、以上の実施の形態１の説明において、「〜部」として説明したものは、「〜手段」、「〜回路」、「〜機器」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。すなわち、「〜部」として説明したものは、ＲＯＭ８１１に記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェアのみ、或いは、素子・デバイス・基板・配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、ＤＶＤ等の記録媒体に記憶される。プログラムはＣＰＵ８１０により読み出され、ＣＰＵ８１０により実行される。すなわち、プログラムは、以上に述べた「〜部」としてコンピュータを機能させるものである。あるいは、以上に述べた「〜部」の手順や方法をコンピュータに実行させるものである。
【００６５】
以上の実施の形態１では、ハッシュ演算装置１００を説明したが、ハッシュ演算装置１００の動作をコンピュータに実行させるデータ処理プログラムとして把握することも可能である。あるいは、データ処理プログラムを記録したコンピュータ読み取り可能な記録媒体として把握することも可能である。さらに、ハッシュ演算装置１００の動作をハッシュ演算装置１００が行うデータ処理方法として把握することも可能である。
【００６６】
以上の実施の形態ではハッシュ演算装置の場合を説明したが、これは一例であり図２の方式の処理を適用するすべてのデータ処理を対象とするものである。
すなわち、以上で説明したハッシュ演算装置以外に、上記実施の形態で説明した分割方式を適用可能な装置（あるいはプログラム）は、パディングデータの付加が必須であり、ブロック単位で処理を行なうものであれば、どのようなものでもよい。具体例としては、共通鍵暗号（ＤＥＳ、ＭＩＳＴＹ１（登録商標）、ＡＥＳ（登録商標）、Ｃａｍｅｌｌｉａ（登録商標）、ｅｔｃ．）による暗号化装置が挙げられる。
【００６７】
また、以上の実施の形態ではハッシュ演算ユニットは６４オクテット単位で処理し、４系統の場合において、少なくとも９オクテットであるパティングデータを付加する場合を説明したが、これらの数値は一例であり、他の数値についても同様にハッシュ演算装置１００の方式を適用できるのはもちろんである。
「Ｎ＝４，Ａ＝９，Ｂ＝６４」以外の具体例について、例えば次の（１）、（２）の場合がある。
（１）ＳＨＡ−１（Ａ＝９，Ｂ＝６４）を６並列（Ｎ＝６）で行なう場合を挙げることができる。全体のブロックサイズが３８４オクテットになり、最終ブロックのサイズが３３０オクテット以下の場合、全系列が同じブロック数だけ処理することができ、それ以上の場合１系列余分に１ブロック処理することになる。
（２）また、ＭＩＳＴＹ１（登録商標）（Ａ＝１，Ｂ＝８）を８並列（Ｎ＝８）で行なう場合が挙げられる。共通鍵暗号であるＭＩＳＴＹ１（登録商標）を用いてメッセージの暗号化を８並列で行なう構成について説明する。共通鍵暗号を用いてメッセージの暗号化を行なう際、ＣＢＣモードを用いてパディングを行なう方法が多く用いられる。ＭＩＳＴＹ１（登録商標）をＣＢＣモードで用いる場合、ブロックサイズは８オクテットとなる。パディング方式の１つとして、ブロックサイズに満たない部分を埋めるために必要なオクテット数をパディングデータとして使用する方式がある。例えば、ＭＩＳＴＹ１（登録商標）をＣＢＣモードで用いて最終ブロックが５オクテットである場合、０ｘ０３を３つ付与することによりパディングを行なう。上記の方式において、８並列演算が可能なＳＩＭＤ命令を用いてメッセージを分割して暗号化を行なう場合、全体的なブロックサイズは６４オクテットとなる。最終ブロックの処理では、５６オクテット以下の場合、８系統すべてで同一のブロック数を処理することにより暗号化が完了する。５６オクテットを超える場合、１系統だけ余分に１ブロック処理する必要がある。暗号化の場合、ハッシュの演算とは異なり復号化する必要があるが、その際にメッセージがどのように分割されているかを暗号文から知る必要がある。最終ブロックが５６オクテット以下の場合、暗号文の大きさは６４オクテットの倍数となり、５６オクテットを超える場合、暗号文の大きさは６４オクテットの倍数＋１オクテットとなるため、容易に識別することが可能である。
【００６８】
以上の実施の形態では、分割したメッセージをハッシュ演算部１０３へ入力するための処理単位に整形する際に、整形するためのデータを付加した結果余分な処理単位が必要になるかどうかの判断を１つの条件式で実施することを特徴とするハッシュ演算装置１００を説明した。
【００６９】
以上の実施の形態では、分割したメッセージをハッシュ演算部１０３へ入力するための処理単位に整形する際に、整形するためのデータを付与した結果増加する処理単位を１以内に制限することを特徴とするハッシュ演算装置１００を説明した。
【００７０】
以上の実施の形態では、メッセージ長を処理単位長と並列処理を行なう系列数の積で除した際の剰余が、処理単位長とメッセージを整形するためのデータの最小の長さの差と並列処理を行なう系列数の積より大きい場合に、１つの並列処理を行なう系列を除く並列処理を行なう系列に対するメッセージ長を処理単位長とメッセージを整形するためのデータの最小の長さの差とし、１つの並列処理を行なう系列に対するメッセージ長を残りの長さとなるようにメッセージを分割することを特徴とするハッシュ演算装置１００を説明した。
【符号の説明】
【００７１】
１００  ハッシュ演算装置、１０１  メッセージ入力部、１０２  メッセージ分割部、１０３  ハッシュ演算部、１０４  ハッシュ出力部、１０５  メッセージ格納部、１０６  作業用データ格納部。
【図１】
2011081594.tif 000003
【図２】
2011081594.tif 000004
【図３】
2011081594.tif 000005
【図４】
2011081594.tif 000006
【図５】
2011081594.tif 000007
【図６】
2011081594.tif 000008
【図７】
2011081594.tif 000009
【図８】
2011081594.tif 000010
【図９】
2011081594.tif 000011