説明

データ処理装置及びデータ処理プログラム

【課題】メッセージを分割して並列処理するデータ処理装置において、処理分岐条件式を減少し、最終ブロック処理の際のパディングデータ付与に起因するブロック増加数を減少できるデータ処理装置を提供する。
【解決手段】メッセージ分割部102は、最終ブロックのデータが220オクテット以下かを判定する。220オクテット以下と判定した場合は最終ブロックのデータを55オクテット以下の4つのデータに分割し、各データに9オクテットの付加データを付加して64オクテットブロックを生成する。最終ブロックのデータが220オクテットを超えると判定した場合は、最終ブロックに含まれるデータを55オクテットの3つのデータと、残りのデータとの4つのデータに分割し、各55オクテットデータに9オクテットの付加データを付加して3つの64オクテットブロックを生成し、残りのデータに付加データを付加して128オクテット長のデータを生成する。

【発明の詳細な説明】
【技術分野】
【0001】
この発明は、メッセージを複数のメッセージとして並列処理するデータ処理装置に関する。
【背景技術】
【0002】
公開鍵暗号を用いてデジタルデータの署名を生成する際には、デジタルデータを直接公開鍵暗号で処理するのではなく、ハッシュアルゴリズムを用いてデジタルデータをいったん数十バイトのデータに変換した後に処理することが一般的である。ハードディスク等の記憶装置の大容量化に伴い、署名対象のデジタルデータのサイズも大きくなってきている。その結果、署名処理におけるハッシュ処理の割合が増加しつつあるため、ハッシュの高速化が重要になってきているが、高速化のためのアルゴリズムの工夫には限界があった。
【0003】
また、一般用途向けのプロセッサにもSIMD命令が搭載されるようになってきており、主に画像や音声等のマルチメディア系の計算に使用されている。SIMD命令とは「Single Instruction Multiple Data」の略で、同一の命令に対して複数のデータを指定できる命令のことであり、例えば、4データを指定可能な加算命令の場合、以下の4つの演算を並列に実行することができる。
1+2=3、3+5=8、2+4=6、6+2=8。
SISD(Single Instruction Single Data)命令とSIMD命令の実行速度が同一であれば、SIMD命令はSISD命令の4倍の速度で命令を処理可能である。
【0004】
ハッシュアルゴリズムは、処理すべきメッセージに算術演算や論理演算等を複数回行なうことによって、ハッシュ値を生成する。各演算の結果は次の演算に使用されるため、アルゴリズムを単独で並列化することは難しい。
【0005】
しかしながら、メッセージを分割してあたかも複数のメッセージとして処理することによって、ハッシュ値の互換性は失われるものの高速化することが可能である。特許文献特開平11−161162号公報(特許文献1)では、共通鍵暗号のCBCモードにおいて、メッセージを分割して処理する方法について示されている。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開平11−161162号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
例えば、SHA−1のようなハッシュアルゴリズムでは、512ビット長のブロック単位でメッセージが処理されており、メッセージの最後では、パディングデータを付加することによりメッセージの長さによらず必ず512ビット単位で処理している。
【0008】
(パディングデータの最小長:9オクテット)
パディングデータには、メッセージの終わりを示すためのビットとメッセージ長が含まれているため、オクテット単位でメッセージを処理する場合、パディングデータの最小長は9オクテットである。したがって、最終ブロック長が55オクテットより大きい場合は、パディングデータを同一ブロックに収めることができず、パディングデータだけからなるブロックを1つ追加する必要がある。
【0009】
また、共通鍵暗号のCBCモードにおけるIVに相当する初期値が存在しており、定められた値を指定して処理する必要がある。しかしながら、一般的なライブラリでは、使用者は初期値やパディングのことを意識することなく任意の長さのメッセージを指定するだけで正しいハッシュ値を取得できるようなインタフェースになっている。
【0010】
(ハッシュ処理の並列化)
ここで、並列実行が可能なようにメッセージを分割しSHA−1を用いて各メッセージを処理することによりハッシュ値を生成するハッシュアルゴリズムを実現することを考える。本ハッシュアルゴリズムは、メッセージを分割して異なるメッセージとして処理するために、SHA−1によりメッセージ全体を処理されたハッシュ値と互換性を持たせることはできない。そのため、異なる計算機の間でデータ及び本アルゴリズムのハッシュ値をやり取りする場合には、両方の計算機に本アルゴリズムを実装する必要がある。
【0011】
SIMD命令を用いてアルゴリズムを実装する計算機では、高速化のためにパディングの処理を含まないアルゴリズム部分を並列実行するように実装する必要があるが、SIMD命令を用いずにアルゴリズムを実装する計算機では、並列実行しないため、パディングの処理を含まないアルゴリズム部分を実装する意義はない。逆に、分割したメッセージを初期値の設定やパディングを含めたSHA−1を用いて処理することによって、既存の一般的なライブラリを利用することが可能になるため、実装が容易になるという利点がある。但し、SIMD命令を用いてアルゴリズムを実装する場合、最終ブロックのメッセージの分割方法によって、実装が複雑になったり、処理のオーバヘッドが生じたりするという課題がある。
【0012】
(メッセージ4分割の場合)
メッセージを4分割して4並列で実行する場合、1つの分割方法として考えられるのは、256オクテットを1ブロックとし、先頭から64オクテット単位に分割して4つのメッセージとして4つのハッシュ演算ユニットで処理する方法である。
図7は、この分割法を示す図である。図7は、処理対象のメッセージを256オクテット単位で1ブロックとし、1ブロックごとに先頭から64オクテット単位に4分割して、4系統のメッセージに分割する状態を示している。さらに具体的に説明すれば、256オクテット単位のブロック(1)について先頭から64オクテット単位に「丸1」〜「丸4」のように4分割する。以下のブロック(2)、ブロック(3)・・・についても同様である。そして、元のメッセージを、
各ブロックの「丸1」からなる「丸1の系列」、
各ブロックの「丸2」からなる「丸2の系列」、
各ブロックの「丸3」からなる「丸3の系列」、
各ブロックの「丸4」からなる「丸4の系列」、
からなる4つのメッセージに分割する。
そして、並列処理では、
「丸1の系列」の「丸1(1)」、
「丸2の系列」の「丸2(1)」、
「丸3の系列」の「丸3(1)」、
「丸4の系列」の「丸4(1)」、
というように、ブロックを同じくする各系列の64オクテットのデータが処理される。
【0013】
(メッセージ4分割の場合の最終ブロック)
最終ブロックの分割方法として、ある単純な方法では、通常のブロックと同様に図7に示したように先頭から64オクテット単位で分割する。
図8は、この場合の分割方法を示す図である。
その場合、図8に示すように、最終ブロックのメッセージの大きさによって、64オクテットすべてがメッセージであるユニット(4並列の4つのハッシュ演算ユニットのうちの一つのハッシュ演算ユニット用の分割されたメッセージを意味する)と、一部がメッセージであるユニットと、メッセージが存在しないユニットが混在する。すべてがメッセージであるユニットでは、パディングデータを付与すると必ず図9のブロック増加(a),(b)のように、1ブロック余分に必要となる。なお図9の破線の部分はパディングデータであることを示している。一部がメッセージであるユニットではメッセージが55オクテット以下ではブロックに収まる(パディングデータは最少9オクテットであるため)が、56オクテット以上では1ブロック余分に必要となる(図9のブロック増加(c))。メッセージが存在しないユニットではパディングデータのみのブロック(図9の(d))となる。
【0014】
したがって、最終ブロックのメッセージの大きさに応じて、各ユニットでブロックの追加が発生するか判定するための条件式が4つ、またブロックの追加が発生する場合にパディングの処理が2つのブロックにまたがるか判定するための条件式が必要になる。
【0015】
(SHA−1による処理)
さらに、通常のSHA−1で処理した場合、ブロックの追加が必要なのは、248オクテット以上の場合に1ブロックであるのに対して、本方式では同じ条件で4ブロックの追加が必要となる。
【0016】
(別の最終ブロックの分割方法)
最終ブロックを分割する別の単純な方法では、各ユニットに均等にメッセージを割り当てるという方法がある。例えば、最終ブロック(256オクテット単位)のメッセージの大きさが120オクテットである場合、4つの各ユニットに30オクテットずつ割り当てる。メッセージのオクテット数がユニット数の倍数の場合には各ユニットに同一の大きさのメッセージを割り当てることが可能であるが、倍数でない場合には例えば、余った分を1オクテットずつ各ユニットに割り当てることになる。
(1)この場合、パティングデータを最小9オクテットとすると最終ブロックのメッセージの大きさが220オクテット以下の場合、どのユニットも55オクテット+9オクテット=64オクテットとなり、追加のブロックを必要とせずにメッセージを処理することができる。
(2)しかし、221から223オクテットまでは、55オクテットを超えるユニットが登場するので追加ブロックを必要としないユニットと必要とするユニットが混在する。
(3)そして、224オクテット以上(56オクテット×4以上)では、すべてのユニットで追加のブロックを必要とするため、ブロックの追加が発生するか判定するための条件式は、5つ必要である。
【0017】
また、最終ブロックのメッセージの大きさが220オクテット以下の場合にはブロックの追加が発生しないものの、先ほどの例における248オクテット以上の場合は、依然として4ブロックの追加が必要である。
【0018】
本発明は、メッセージを分割して、分割したメッセージを既存のハッシュアルゴリズムを用いて並列に処理することにより高速化を行なうハッシュアルゴリズムを実現する場合に際して、処理の複雑さを軽減して開発効率及び不具合の発生率を低減するとともに、ブロックの処理数を減少させることによって、処理のオーバヘッドを軽減する装置及びプログラムの提供を目的とする。
【課題を解決するための手段】
【0019】
この発明のハッシュ演算装置は、
処理対象のメッセージデータを分割することにより前記メッセージデータをN個(Nは2以上の整数)のメッセージに分割し、分割されたN個の各メッセージの最後に少なくとも所定のオクテット数Aオクテットの付加データを付加し、N個のメッセージを示すN系列の系列ごとに所定の処理単位長BオクテットでN個のメッセージを並列処理するデータ処理装置において、
前記処理対象のメッセージデータを入力し、入力された前記処理対象のメッセージデータを先頭から処理単位長BオクテットのBと系列数を示すNとの積BNを示すBNオクテット単位のブロックで順次格納するメッセージ格納部と、
先頭ブロックから最終ブロックの一つ手前のブロックまでは各ブロックを処理単位長Bオクテット単位で分割することにより各ブロックごとにN個の処理単位ブロックを生成すると共に、最終ブロックについては含まれるデータがBNオクテットから前記付加データのオクテット数を示すAと系列数を示すNとの積ANを示すANオクテットを差し引いたオクテット数以下かどうかを判定し、最終ブロックに含まれるデータがBNオクテットからANオクテットを差し引いたオクテット数以下と判定した場合には、最終ブロックに含まれるデータをBオクテットからAオクテットを差し引いたオクテット数以下のN個のデータに分割し、N個に分割された各データにAオクテットの前記付加データを付加することによりN個に分割された各データから前記処理単位長Bオクテットの前記処理単位ブロックを生成するメッセージ分割部と、
前記メッセージ分割部によって生成されたBNオクテット単位のブロックごとのN個の前記処理単位ブロックを、BNオクテット単位の先頭ブロックから最終ブロックに対応する順に、N並列で演算処理する演算処理部と
を備えたことを特徴とする。
【発明の効果】
【0020】
本発明によれば、既存のハッシュアルゴリズムを利用してメッセージを分割して処理することで並列実行可能なハッシュアルゴリズムを実現する際に、並列処理を行なってアルゴリズムを実装する場合の処理を分岐する条件式を減少することができる。また、本発明によれば、最終ブロックを処理する際のパディングデータ付与に起因するブロック増加数を減少させることができる。そのためハッシュを高速に生成することができ、特に数ブロック以下のメッセージに対する効果が大きい。
【図面の簡単な説明】
【0021】
【図1】実施の形態1のハッシュ演算装置100のブロック図。
【図2】実施の形態1のハッシュ演算装置100の動作概要を示す図。
【図3】実施の形態1のメッセージ分割部102の動作を示すフローチャート。
【図4】実施の形態1のハッシュ演算部103の動作を示すフローチャート。
【図5】実施の形態1のハッシュ演算装置100の外観の一例。
【図6】実施の形態1のハッシュ演算装置100のハードウェア構成の一例。
【図7】従来技術を示す図。
【図8】従来技術を示す図。
【図9】従来技術を示す図。
【発明を実施するための形態】
【0022】
実施の形態1.
本実施の形態1では、メッセージを4つに分割し、分割した各メッセージをSHA−1を用いて処理することによってハッシュを生成するハッシュ演算装置100(データ処理装置)を説明する。ハッシュ演算装置100は、4データのSIMD命令を用いて並列処理する構成である。
【0023】
(ハッシュ演算装置100の構成)
図1は、ハッシュ演算装置100の構成図である。ハッシュ演算装置100はメッセージ入力部101、メッセージ分割部102、ハッシュ演算部103(演算処理部)、ハッシュ出力部104、メッセージ格納部105、作業用データ格納部106を備えている。
【0024】
(1)メッセージ入力部101は、ハッシュ対象のメッセージを入力する部分である。
(2)メッセージ分割部102は、入力されたメッセージを分割する部分である。
(3)ハッシュ演算部103は、分割されたメッセージを並列に処理しハッシュを演算する部分である。
(4)ハッシュ出力部104は、ハッシュ演算部103によって演算されたハッシュを出力する部分である。
(5)メッセージ格納部105は、メッセージ入力部101に入力されたメッセージをブロック毎に格納する部分である。
(6)作業用データ格納部106は、メッセージ分割部102によって分割されたメッセージやハッシュ演算のための中間値等ハッシュを生成するために必要なデータを格納する部分である。
【0025】
図2はメッセージ分割部102による最終ブロックの分割処理の概要を示す図である。図2を参照して、ハッシュ演算装置100の特徴である、最終ブロックの分割処理の概要を説明する。ハッシュ演算装置100は、メッセージを分割する際の処理の複雑さ及びオーバヘッドを軽減するために、メッセージを各ユニットに均等に割り当てるとともに、パディングデータが1ブロック内に収まらない場合にすべてのユニットでブロックを追加するのではなく1つのユニットのみにブロックを追加することで処理を行なえるようにメッセージを分割する。
【0026】
(最終ブロックが220オクテット以下の場合)
図2(a)は、最終ブロックが220オクテット以下の場合の処理を示す図である。
(1)メッセージ分割部102は、最終ブロックについては、含まれるデータが220オクテット以下かどうかを判定する。
(2)メッセージ分割部102は、最終ブロックに含まれるデータが220オクテット以下と判定した場合には、図2(a)に示すように、最終ブロックに含まれるデータを55オクテット以下の4つのデータに分割し、4つに分割された各データに最少9オクテット長のパディングデータ(付加データ)を付加することにより、4つに分割された各データから64オクテット単位の64オクテットブロックを生成する。
(3)最終ブロックが220オクテット以下の場合には以上のように分割することで、ブロックの増加をなくすことができる。
【0027】
(最終ブロックが220オクテットを超える場合)
図2(b)は、最終ブロックが220オクテットを超える場合の処理を示す図である。
(1)メッセージ分割部102は、最終ブロックに含まれるデータが220オクテットを超えると判定した場合には、図2(b)に示すように、最終ブロックに含まれるデータを55オクテットの3つのデータと、3つのデータ以外の残りのデータとの4つのデータに分割する。
(2)そして、メッセージ分割部102は、3つの55オクテットの各データに9オクテットのパディングデータを付加することにより3つの64オクテットブロックを生成し、かつ、55オクテットの3つのデータ以外の残りのデータに所定の長さのパディングデータを付加することにより2ブロック分の128オクテット長のデータを生成する。この分割方式により最終ブロックが220オクテットを超える場合には、1ユニット(1系列)のみ1ブロック増加するにとどまる。
【0028】
また従来、最終ブロックのメッセージの大きさに応じて各ユニットでブロックの追加が発生するか判定するための条件式が4つあるいは5つであったのに対して、図2の処理では、最終ブロックが220オクテット以下かどうかを判断するのみでよいので、処理分岐の条件式をひとつでまかなうことができる。
【0029】
ハッシュ演算部103は、メッセージ分割部102によって生成された256オクテット単位のブロックごとの4つの64オクテットブロックを、256オクテット単位の先頭ブロックから最終ブロックに対応する順に、4並列で演算処理する。この場合、ハッシュ演算部103は、最終ブロックが220オクテットを超える場合、最終ブロックに対応する4並列の処理として55オクテットの3つのデータから生成された3つの64オクテットブロックと、128オクテット長のデータのうち先頭から付加データに向かって64オクテットの1ブロックとを演算処理すると共に、その演算処理の後に、128オクテット長のデータのうち後半の64オクテットの1ブロックを演算処理する。
【0030】
以下に、ハッシュ演算装置100を詳しく説明する。
【0031】
(メッセージ入力部101)
メッセージ入力部101は、外部から指定されたメッセージを256オクテット単位のブロックとして、メッセージ格納部105に格納する。入力されたメッセージはM(1)、M(2)、・・・、M(n)の順に格納される。M(1)からM(n−1)までは長さを256オクテットとし、メッセージの最終部であるM(n)は長さを256オクテット未満となるように格納する。
【0032】
(メッセージ分割部102)
メッセージ分割部102は、メッセージ入力部101がメッセージ格納部105に格納したメッセージをM(1)、・・・、M(n)の順に分割する。分割されるメッセージがM(1)からM(n−1)である場合、以下のように処理する。
【0033】
(M(i);i=1〜n−1)
まず、メッセージ分割部102は、メッセージM(i)を先頭から64オクテットずつに分割してMA、MB、MC、MDに設定する。ここで、MA、MB、MC、MDはそれぞれ128オクテット、64オクテット、64オクテット、64オクテットのメッセージを保持可能な変数である。MA、MB、MC、MDをそれぞれ先頭から32ビットずつ16個に分割して先頭からそれぞれ、
WA(0)、・・・、WA(15)、
WB(0)、・・・、WB(15)、
WC(0)、・・・、WC(15)、
WD(0)、・・・、WD(15)、
とする。
WA(i)(このiは1〜15)、WB(i)、WC(i)、WD(i)をSIMD命令のデータとするために、WA(i)、WB(i)、WC(i)、WD(i)の順に連結し128ビットのデータとして、作業用データ格納部106に、W(0)、・・・、W(15)として格納する。
【0034】
図3はメッセージ分割部102による分割処理フローチャートである。図3を用いて、分割されるメッセージがM(n)である場合を説明する。
【0035】
S201においてメッセージ分割部102はM(n)の長さが220オクテット以下であるか判定する。
【0036】
(220オクテット以下の場合)
220オクテット以下の場合、S202においてそれぞれMA、MB、MC、MDの長さMAL、MBL、MCL、MDLをメッセージ長の4分の1に設定する。但し、余りは切り捨てる。MAL、MBL、MCL、MDLは一般的な整数を保持することのできる変数である。
【0037】
(S203〜S204:端数処理)
S203〜S204は、端数処理のステップである。メッセージ長が4の倍数でない場合に端数の処理を行なうためにS203、S204、S205において余りの数を判定する。
余りが1の場合はS206においてMALの値を1増やし、
余りが2の場合はS207においてMALとMBLの値を1増やし、
余りが3の場合はS208においてMALとMBLとMCLの値を1増やす。
【0038】
S210においてM(n)の内容を先頭から順にそれぞれMA、MB、MC、MDにMAL、MBL、MCL、MDLオクテットずつコピーする。S211、S212、S213、S214においてMA、MB、MC、MDのパディング処理を行なう。
【0039】
(パティング処理)
パディング処理とは、従来技術でも説明したように、メッセージの後ろにパディングデータ(付加データ)を追加して整形することにより、メッセージ長を64オクテットの最小の倍数にすることである。具体的には、メッセージ長が55オクテット以下の時にメッセージ長を64オクテットに拡張し、そうでなければ128オクテットに拡張する。拡張した部分をパディングデータとし、パディングデータの先頭オクテットに0x80を設定し、パディングデータの最後から8オクテットにメッセージ長をビットで表した値を設定し、残りの部分には0x00を設定する。M(n)の長さが220オクテット以下であればパディング処理後のMA、MB、MC、MDの長さは64オクテットとなる。
【0040】
(220オクテットを超える場合)
S201において220オクテット以下でない場合、すなわち220オクテットを超える場合には、S209においてMBL、MCL、MDLに55を設定しMALにメッセージの残りの長さを設定する。その後S210に合流しメッセージ長が220オクテット以下の場合と同様の処理を行なう。M(n)の長さが220オクテット以下でなければパディング処理後のMAの長さは128オクテット(2ブロック分)となり、MB、MC、MDの長さは64オクテットとなる。
【0041】
M(n)の長さが220オクテット以下の場合、他のメッセージM(i)と同様にMA、MB、MC、MDからW(0)、・・・、W(15)を作成する。
【0042】
M(n)の長さが220オクテット以下でない場合、MAを前半の64オクテットと後半の64オクテットで半分に分け、それぞれをMA1、MA2とし、他の場合でのMAをMA1と読み替えて、W(0)、・・・、W(15)を作成する。
【0043】
(ハッシュ演算部103)
次にハッシュ演算部103の処理を説明する。ハッシュ演算部103は、分割されたメッセージをSIMDにより並列に演算する。M(1)が分割されているW(0)、・・・、W(15)を演算する場合は処理に先立ち作業用データ格納部106のH0、H1、H2、H3、H4を以下のデータで初期化する。
H0:0x67452301、
H1:0xefcdab89、
H2:0x98badcfe、
H3:0x10325476、
H4:0xc3d2e1f0、
とする。H0、H1、H2、H3、H4は128ビットの領域であり、上記の初期値はそれぞれ4回連結して格納する。
【0044】
図4は初期化後のハッシュ演算部103の処理を示すフローチャートである。図4を用いてハッシュ演算部103の処理を説明する。
【0045】
S301においてH0、H1、H2、H3、H4をそれぞれA、B、C、D、Eに代入する。A、B、C、D、EはそれぞれH0、H1、H2、H3、H4に格納された4つの32ビット長の値を保持することのできる128ビット長の変数である。
【0046】
S302においてtに0を代入する。tは一般的な整数を保持することのできる変数である。
【0047】
S303においてtが16以上79以下の場合にS304においてW(t)を計算する。ここでShift(X,n)は32ビット長の整数が4つ保持されている128ビット長の変数Xの各32ビット長の整数に対してnビット左に巡回シフトしてその結果を4つの32ビット長の整数として返す関数である。
【0048】
S305において図中に示す演算をA、B、C、D、Eに対して行なう。ここでTEMPは4つの32ビット長の値を保持することのできる変数である。
f(t,B,C,D)は以下のようにtの値によって異なる論理式によって構成される関数である。
f(t,B,C,D)=(B AND C)OR((NOT B)AND D)(0<=t<=19)、
f(t,B,C,D)=B XOR C XOR D(20<=t<=39)、
f(t,B,C,D)=(B AND C)OR(B AND D)OR(C AND D)(40<=t<=59)、
f(t,B,C,D)=B XOR C XOR D(60<=t<=79)。
B、C、Dはそれぞれ32ビット長の整数が4つ保持されている128ビット長の変数であり、関数fは各32ビット長の整数に対して論理演算を行ないその結果を4つの32ビット長の整数として返す。K(t)は以下のようにtの値によって定まる32ビット長の定数を4つ返す関数である。
K(t)=0x5a827999(0<=t<=19)、
K(t)=0x6ed9eba1(20<=t<=39)、
K(t)=0x8f1bbcdc(40<=t<=59)、
K(t)=0xca62c1d6(60<=t<=79)。
上記の手順において、各32ビット長の値に対する加算の結果が32ビット長に収まらない場合あふれた分は切り詰める。
【0049】
S306においてtの値を1増やす。S307においてtが79以下の場合にS303に戻る。条件を満たさなければS308においてH0、H1、H2、H3、H4にそれぞれA、B、C、D、Eを加算する。以上がM(i)に対して実施されるハッシュ演算処理の内容である。メッセージ分割部102が分割したメッセージをハッシュ演算部103が処理するという手順をM(1)からM(n)に対して順番に繰り返す。M(n)の長さが220オクテット以下でない場合、メッセージ分割部102においてMAをMA1と読み替えてW(0)、・・・、W(15)を作成してハッシュ演算部103において処理した後、メッセージ分割部102においてMAをMA2と読み替えてW(0)、・・・、W(15)を作成する。次に、H0、H1、H2、H3、H4の内容をH0’、H1’、H2’、H3’、H4’として保存する。続いて、ハッシュ演算部103においてメッセージを処理する。ハッシュ演算部103における処理が終了した後、それぞれH0’、H1’、H2’、H3’、H4’に保存した内容の33ビット目から128ビット目までをH0、H1、H2、H3、H4に書き戻す。
【0050】
以上でメッセージの処理が完了する。
【0051】
メッセージの処理の完了後、ハッシュ出力部104ではハッシュ値を生成する。まず、H0、H1、H2、H3、H4にそれぞれ保持されている4つの32ビット長の整数を使用して4つのハッシュ値を生成する。すなわち、H0、H1、H2、H3、H4のそれぞれ先頭の32ビットを連結した結果を第1のハッシュ値とし、2番目の32ビットを連結した結果を第2のハッシュ値とし、3番目の32ビットを連結した結果を第3のハッシュ値とし、4番目の32ビットを連結した結果を第4のハッシュ値とする。次に、このようにして生成された4つのハッシュ値を連結して1つのメッセージとみなして、通常のSHA−1を用いてハッシュ値を生成する。このようにして生成されたハッシュ値を最終的なハッシュ値として外部に対して出力する。
【0052】
上記の実施の形態では、M(n)の長さが220オクテットよりも大きくMA2の処理を行なう場合に、H0、H1、H2、H3、H4の内容を保存し、SIMDにより並列にMA2の処理を行なった後にMA2の処理に関係しない部分の内容をH0、H1、H2、H3、H4に書き戻していたが、MA2の処理を並列に行なわず、通常のSHA−1の処理のようにSISDを用いて処理しても良い。
【0053】
また上記の実施の形態では、M(n)の長さが220オクテットよりも大きくブロックの追加が必要になる場合に限りMAのブロック数を増加させていたが、M(n−1)とM(n)の長さの合計が284オクテット以下である場合、M(n−1)とM(n)を連結してM(n)のように扱っても良い。その場合、MAとして処理するブロック数をnに、それ以外で処理するブロック数をn−1とすることが可能である。
【0054】
上記の実施の形態において示したハッシュ演算装置100では、メッセージを4つに分割して並列に処理することによって、通常のSHA−1を用いてハッシュを生成する場合に比べて高速に処理することができる。また当該ハッシュ演算装置100によって生成されるハッシュ値は、分割された各メッセージを通常のSHA−1によるハッシュ値と互換性があるように処理した結果から生成されるため、当該ハッシュ演算装置100によって生成されるハッシュ値とメッセージの互換性があるハッシュ値を生成する装置を通常のSHA−1を用いて実装することができる。さらに、パディングのためにブロックの追加が必要か判断するための条件式を1つにすることができる。加えて、ブロックの追加が必要となる場合は、最終ブロック長が220オクテットよりも大きい場合に限られ、その場合の追加ブロック数は1である。
【0055】
実施の形態2.
図5、図6を参照して実施の形態2を説明する。実施の形態2は、ハッシュ演算装置100をコンピュータで実現する場合を示す。
【0056】
図5は、ハッシュ演算装置100の外観の一例を示す図である。図5において、ハッシュ演算装置100は、システムユニット830、CRT(Cathode・Ray・Tube)やLCD(液晶)の表示画面を有する表示装置813、キーボード814(Key・Board:K/B)、マウス815、FDD817(Flexible・Disk・ Drive)、コンパクトディスク装置818(CDD:Compact Disk Drive)、プリンタ装置819などのハードウェア資源を備え、これらはケーブルや信号線で接続されている。
【0057】
図6は、コンピュータで実現されるハッシュ演算装置100のハードウェア資源の一例を示す図である。図6において、ハッシュ演算装置100は、プログラムを実行するCPU810(Central Processing Unit)を備えている。CPU810は、バス825を介してROM(Read Only Memory)811、RAM(Random Access Memory)812、表示装置813、キーボード814、マウス815、通信ボード816、FDD817、CDD818、プリンタ装置819、磁気ディスク装置820と接続され、これらのハードウェアデバイスを制御する。磁気ディスク装置820の代わりに、光ディスク装置、フラッシュメモリなどの記憶装置でもよい。
【0058】
RAM812は、揮発性メモリの一例である。ROM811、FDD817、CDD818、磁気ディスク装置820等の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置あるいは記憶部、格納部、バッファの一例である。通信ボード816、キーボード814、FDD817などは、入力部、入力装置の一例である。また、通信ボード816、表示装置813、プリンタ装置819などは、出力部、出力装置の一例である。
【0059】
通信ボード816は、ネットワーク(LAN等)に接続されている。通信ボード816は、LANに限らず、インターネット、ISDN等のWAN(ワイドエリアネットワーク)などに接続されていても構わない。
【0060】
磁気ディスク装置820には、オペレーティングシステム821(OS)、ウィンドウシステム822、プログラム群823、ファイル群824が記憶されている。プログラム群823のプログラムは、CPU810、オペレーティングシステム821、ウィンドウシステム822により実行される。
【0061】
上記プログラム群823には、以上の実施の形態1の説明において「〜部」として説明した機能を実行するプログラムが記憶されている。プログラムは、CPU810により読み出され実行される。
【0062】
ファイル群824には、以上の実施の形態1の説明において、「〜の判定結果」、「〜の算出結果」、「〜の抽出結果」、「〜の生成結果」、「〜の処理結果」として説明した情報や、データや信号値や変数値やパラメータなどが、「〜ファイル」や「〜データベース」の各項目として記憶されている。「〜ファイル」や「〜データベース」は、ディスクやメモリなどの記録媒体に記憶される。ディスクやメモリなどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してCPU810によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示などのCPUの動作に用いられる。抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示のCPUの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリやキャッシュメモリやバッファメモリに一時的に記憶される。
【0063】
また、以上に述べた実施の形態1の説明において、データや信号値は、RAM812のメモリ、FDD817のフレキシブルディスク、CDD818のコンパクトディスク、磁気ディスク装置820の磁気ディスク、その他光ディスク、ミニディスク、DVD(Digital・Versatile・Disk)等の記録媒体に記録される。また、データや信号は、バス825や信号線やケーブルその他の伝送媒体によりオンライン伝送される。
【0064】
また、以上の実施の形態1の説明において、「〜部」として説明したものは、「〜手段」、「〜回路」、「〜機器」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。すなわち、「〜部」として説明したものは、ROM811に記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェアのみ、或いは、素子・デバイス・基板・配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、DVD等の記録媒体に記憶される。プログラムはCPU810により読み出され、CPU810により実行される。すなわち、プログラムは、以上に述べた「〜部」としてコンピュータを機能させるものである。あるいは、以上に述べた「〜部」の手順や方法をコンピュータに実行させるものである。
【0065】
以上の実施の形態1では、ハッシュ演算装置100を説明したが、ハッシュ演算装置100の動作をコンピュータに実行させるデータ処理プログラムとして把握することも可能である。あるいは、データ処理プログラムを記録したコンピュータ読み取り可能な記録媒体として把握することも可能である。さらに、ハッシュ演算装置100の動作をハッシュ演算装置100が行うデータ処理方法として把握することも可能である。
【0066】
以上の実施の形態ではハッシュ演算装置の場合を説明したが、これは一例であり図2の方式の処理を適用するすべてのデータ処理を対象とするものである。
すなわち、以上で説明したハッシュ演算装置以外に、上記実施の形態で説明した分割方式を適用可能な装置(あるいはプログラム)は、パディングデータの付加が必須であり、ブロック単位で処理を行なうものであれば、どのようなものでもよい。具体例としては、共通鍵暗号(DES、MISTY1(登録商標)、AES(登録商標)、Camellia(登録商標)、etc.)による暗号化装置が挙げられる。
【0067】
また、以上の実施の形態ではハッシュ演算ユニットは64オクテット単位で処理し、4系統の場合において、少なくとも9オクテットであるパティングデータを付加する場合を説明したが、これらの数値は一例であり、他の数値についても同様にハッシュ演算装置100の方式を適用できるのはもちろんである。
「N=4,A=9,B=64」以外の具体例について、例えば次の(1)、(2)の場合がある。
(1)SHA−1(A=9,B=64)を6並列(N=6)で行なう場合を挙げることができる。全体のブロックサイズが384オクテットになり、最終ブロックのサイズが330オクテット以下の場合、全系列が同じブロック数だけ処理することができ、それ以上の場合1系列余分に1ブロック処理することになる。
(2)また、MISTY1(登録商標)(A=1,B=8)を8並列(N=8)で行なう場合が挙げられる。共通鍵暗号であるMISTY1(登録商標)を用いてメッセージの暗号化を8並列で行なう構成について説明する。共通鍵暗号を用いてメッセージの暗号化を行なう際、CBCモードを用いてパディングを行なう方法が多く用いられる。MISTY1(登録商標)をCBCモードで用いる場合、ブロックサイズは8オクテットとなる。パディング方式の1つとして、ブロックサイズに満たない部分を埋めるために必要なオクテット数をパディングデータとして使用する方式がある。例えば、MISTY1(登録商標)をCBCモードで用いて最終ブロックが5オクテットである場合、0x03を3つ付与することによりパディングを行なう。上記の方式において、8並列演算が可能なSIMD命令を用いてメッセージを分割して暗号化を行なう場合、全体的なブロックサイズは64オクテットとなる。最終ブロックの処理では、56オクテット以下の場合、8系統すべてで同一のブロック数を処理することにより暗号化が完了する。56オクテットを超える場合、1系統だけ余分に1ブロック処理する必要がある。暗号化の場合、ハッシュの演算とは異なり復号化する必要があるが、その際にメッセージがどのように分割されているかを暗号文から知る必要がある。最終ブロックが56オクテット以下の場合、暗号文の大きさは64オクテットの倍数となり、56オクテットを超える場合、暗号文の大きさは64オクテットの倍数+1オクテットとなるため、容易に識別することが可能である。
【0068】
以上の実施の形態では、分割したメッセージをハッシュ演算部103へ入力するための処理単位に整形する際に、整形するためのデータを付加した結果余分な処理単位が必要になるかどうかの判断を1つの条件式で実施することを特徴とするハッシュ演算装置100を説明した。
【0069】
以上の実施の形態では、分割したメッセージをハッシュ演算部103へ入力するための処理単位に整形する際に、整形するためのデータを付与した結果増加する処理単位を1以内に制限することを特徴とするハッシュ演算装置100を説明した。
【0070】
以上の実施の形態では、メッセージ長を処理単位長と並列処理を行なう系列数の積で除した際の剰余が、処理単位長とメッセージを整形するためのデータの最小の長さの差と並列処理を行なう系列数の積より大きい場合に、1つの並列処理を行なう系列を除く並列処理を行なう系列に対するメッセージ長を処理単位長とメッセージを整形するためのデータの最小の長さの差とし、1つの並列処理を行なう系列に対するメッセージ長を残りの長さとなるようにメッセージを分割することを特徴とするハッシュ演算装置100を説明した。
【符号の説明】
【0071】
100 ハッシュ演算装置、101 メッセージ入力部、102 メッセージ分割部、103 ハッシュ演算部、104 ハッシュ出力部、105 メッセージ格納部、106 作業用データ格納部。

【特許請求の範囲】
【請求項1】
処理対象のメッセージデータを分割することにより前記メッセージデータをN個(Nは2以上の整数)のメッセージに分割し、分割されたN個の各メッセージの最後に少なくとも所定のオクテット数Aオクテットの付加データを付加し、N個のメッセージを示すN系列の系列ごとに所定の処理単位長BオクテットでN個のメッセージを並列処理するデータ処理装置において、
前記処理対象のメッセージデータを入力し、入力された前記処理対象のメッセージデータを先頭から処理単位長BオクテットのBと系列数を示すNとの積BNを示すBNオクテット単位のブロックで順次格納するメッセージ格納部と、
先頭ブロックから最終ブロックの一つ手前のブロックまでは各ブロックを処理単位長Bオクテット単位で分割することにより各ブロックごとにN個の処理単位ブロックを生成すると共に、最終ブロックについては含まれるデータがBNオクテットから前記付加データのオクテット数を示すAと系列数を示すNとの積ANを示すANオクテットを差し引いたオクテット数以下かどうかを判定し、最終ブロックに含まれるデータがBNオクテットからANオクテットを差し引いたオクテット数以下と判定した場合には、最終ブロックに含まれるデータをBオクテットからAオクテットを差し引いたオクテット数以下のN個のデータに分割し、N個に分割された各データに前記付加データを付加することによりN個に分割された各データから前記処理単位長Bオクテットの前記処理単位ブロックを生成するメッセージ分割部と、
前記メッセージ分割部によって生成されたBNオクテット単位のブロックごとのN個の前記処理単位ブロックを、BNオクテット単位の先頭ブロックから最終ブロックに対応する順に、N並列で演算処理する演算処理部と
を備えたことを特徴とするデータ処理装置。
【請求項2】
前記メッセージ分割部は、
最終ブロックに含まれるデータがBNオクテットからANオクテットを差し引いたオクテット数を超えると判定した場合には、最終ブロックに含まれるデータをBオクテットからAオクテットを差し引いたオクテット数のN−1個のデータと、最終ブロックに含まれるデータからN−1個分の前記データを差し引いた残りの部分のデータとのN個のデータに分割し、N−1個のBオクテットからAオクテットを差し引いたオクテット数の各データに前記付加データを付加することによりN−1個の処理単位ブロックを生成し、かつ、最終ブロックに含まれるデータからN−1個分の前記データを差し引いた残りの部分のデータに前記付加データを付加することにより処理単位長Bオクテットの2倍のオクテット長のデータを生成し、
前記演算処理部は、
前記最終ブロックに対応するN並列の処理としてBオクテットからAオクテットを差し引いたオクテット数のN−1個のデータから生成されたN−1個の処理単位ブロックと処理単位長Bオクテットの2倍のオクテット長のデータのうち先頭から付加データに向かって処理単位長Bオクテットの1ブロックとをN並列で演算処理すると共に、その演算処理の後に、処理単位ブロックの2倍のオクテット長のデータのうち後半の処理単位長Bオクテットの1ブロックを演算処理することを特徴とする請求項1または2記載のデータ処理装置。
【請求項3】
前記データ処理装置は、
「A=9、B=64、N=4」と、「A=9、B=64、N=6」と、「A=1、B=8、N=8」とのいずれかであることを特徴とする請求項1または2記載のデータ処理装置。
【請求項4】
処理対象のメッセージデータを分割することにより前記メッセージデータを4つのメッセージに分割し、分割された4つのメッセージの各メッセージの最後に少なくとも9オクテットの付加データを付加し、4つのメッセージを示す4系列の系列ごとに処理単位長64オクテットで4つのメッセージを並列処理するデータ処理装置において、
前記処理対象のメッセージデータを入力し、入力された前記処理対象のメッセージデータを先頭から256オクテット単位のブロックで順次格納するメッセージ格納部と、
先頭ブロックから最終ブロックの一つ手前のブロックまでは各ブロックを64オクテット単位で分割することによりブロックごとに4つの処理単位ブロックである64オクテットブロックを生成すると共に、最終ブロックについては含まれるデータが220オクテット以下かどうかを判定し、最終ブロックに含まれるデータが220オクテット以下と判定した場合には、最終ブロックに含まれるデータを55オクテット以下の4つのデータに分割し、4つに分割された各データに前記付加データを付加することにより4つに分割された各データから64オクテット単位の64オクテットブロックを生成するメッセージ分割部と、
前記メッセージ分割部によって生成された256オクテット単位のブロックごとの4つの64オクテットブロックを、256オクテット単位の先頭ブロックから最終ブロックに対応する順に、4並列で演算処理する演算処理部と
を備えたことを特徴とするデータ処理装置。
【請求項5】
前記メッセージ分割部は、
最終ブロックに含まれるデータが220オクテットを超えると判定した場合には、最終ブロックに含まれるデータを55オクテットの3つのデータと、3つのデータ以外の残りのデータとの4つのデータに分割し、3つの55オクテットの各データに前記付加データを付加することにより3つの64オクテットブロックを生成し、かつ、3つのデータ以外の残りのデータに前記付加データを付加することにより128オクテット長のデータを生成し、
前記演算処理部は、
前記最終ブロックに対応する4並列の処理として55オクテットの3つのデータから生成された3つの64オクテットブロックと、前記128オクテット長のデータのうち先頭から付加データに向かって64オクテットの1ブロックとを演算処理すると共に、その演算処理の後に、前記128オクテット長のデータのうち後半の64オクテットの1ブロックを演算処理することを特徴とする請求項4記載のデータ処理装置。
【請求項6】
前記演算処理部は、
前記演算処理として、ハッシュ演算処理を実行することを特徴とする請求項1〜5のいずれかに記載のデータ処理装置。
【請求項7】
処理対象のメッセージデータを分割することにより前記メッセージデータをN個(Nは2以上の整数)のメッセージに分割し、分割されたN個の各メッセージの最後に少なくとも所定のオクテット数Aオクテットの付加データを付加し、N個のメッセージを示すN系列の系列ごとに所定の処理単位長BオクテットでN個のメッセージを並列処理するコンピュータであるデータ処理装置を、
前記処理対象のメッセージデータを入力し、入力された前記処理対象のメッセージデータを先頭から処理単位長BオクテットのBと系列数を示すNとの積BNを示すBNオクテット単位のブロックで順次格納するメッセージ格納部、
先頭ブロックから最終ブロックの一つ手前のブロックまでは各ブロックを処理単位長Bオクテット単位で分割することにより各ブロックごとにN個の処理単位ブロックを生成すると共に、最終ブロックについては含まれるデータがBNオクテットから前記付加データのオクテット数を示すAと系列数を示すNとの積ANを示すANオクテットを差し引いたオクテット数以下かどうかを判定し、最終ブロックに含まれるデータがBNオクテットからANオクテットを差し引いたオクテット数以下と判定した場合には、最終ブロックに含まれるデータをBオクテットからAオクテットを差し引いたオクテット数以下のN個のデータに分割し、N個に分割された各データに前記付加データを付加することによりN個に分割された各データから前記処理単位長Bオクテットの前記処理単位ブロックを生成するメッセージ分割部、
前記メッセージ分割部によって生成されたBNオクテット単位のブロックごとのN個の前記処理単位ブロックを、BNオクテット単位の先頭ブロックから最終ブロックに対応する順に、N並列で演算処理する演算処理部、
として機能させるためのデータ処理プログラム。
【請求項8】
前記メッセージ分割部は、
最終ブロックに含まれるデータがBNオクテットからANオクテットを差し引いたオクテット数を超えると判定した場合には、最終ブロックに含まれるデータをBオクテットからAオクテットを差し引いたオクテット数のN−1個のデータと、最終ブロックに含まれるデータからN−1個分の前記データを差し引いた残りの部分のデータとのN個のデータに分割し、N−1個のBオクテットからAオクテットを差し引いたオクテット数の各データに前記付加データを付加することによりN−1個の処理単位ブロックを生成し、かつ、最終ブロックに含まれるデータからN−1個分の前記データを差し引いた残りの部分のデータにデータの終了を示す少なくともAオクテットの付加データを付加することにより処理単位長Bオクテットの2倍のオクテット長のデータを生成し、
前記演算処理部は、
前記最終ブロックに対応するN並列の処理としてBオクテットからAオクテットを差し引いたオクテット数のN−1個のデータから生成されたN−1個の処理単位ブロックと処理単位長Bオクテットの2倍のオクテット長のデータのうち先頭から付加データに向かって処理単位長Bオクテットの1ブロックとをN並列で演算処理すると共に、その演算処理の後に、処理単位ブロックの2倍のオクテット長のデータのうち後半の処理単位長Bオクテットの1ブロックを演算処理する
ようにコンピュータを機能させることを特徴とする請求項7記載のデータ処理プログラム。

【図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


【公開番号】特開2011−81594(P2011−81594A)
【公開日】平成23年4月21日(2011.4.21)
【国際特許分類】
【出願番号】特願2009−233184(P2009−233184)
【出願日】平成21年10月7日(2009.10.7)
【出願人】(000006013)三菱電機株式会社 (33,312)
【Fターム(参考)】