以下、添付図面を参照して本発明に係る実施の形態を詳細に説明する。ただし、この実施の形態に記載されている構成要素はあくまでも例示であり、本発明の範囲をそれらのみに限定する趣旨のものではない。また、本実施の形態で説明されている特徴の組み合わせの全てが発明の解決手段に必須のものとは限らない。
<<実施形態1>>
本実施形態では、一例として、ハッシュ値を計算するハッシュ関数としてSHA−1を適用した構成を説明する。SHA−1においては、メッセージを512ビットのブロック単位で処理し、ハッシュ処理の最終結果として、160ビットのハッシュ値を出力する。SHA−1のハッシュ処理は下記の一連の処理から構成される。
・メッセージを512ビット単位のブロックに区切り、最後のブロックも512ビットになるように、メッセージの最後尾に所定のデータを付け加える(以下、パディング処理と呼ぶ)。
・512ビットのブロック毎に、後述するメッセージ拡張処理と80ステップのステップ処理と加算処理をしてハッシュ中間値を生成する。
メッセージ拡張処理は、512ビットのブロックのデータをもとに、32ビットの拡張メッセージ(拡張済みブロック)を80個生成する処理である。元の512ビットのブロックデータは、そのまま0から15番目の拡張メッセージとなる。16番目以降の拡張メッセージに関しては、(n−16)から(n−1)番目の拡張メッセージに対して所定の演算処理をして、n番目の拡張メッセージを生成する。
ステップ処理は、5つの32ビットデータから構成される所定の内部状態変数値の初期値(ハッシュ初期値)に対して80ステップにわたってステップ毎に80個の各拡張メッセージを用いて所定の演算を行い、内部状態変数値を順次更新していく処理である。最初の0番目のステップ(以降、ステップ0と呼ぶ)では、ハッシュ初期値に対して0番目の拡張メッセージを用いて所定の演算処理をして、内部状態変数値を更新する。残りの79の各ステップ(ステップnとする)においては、ステップ(n−1)の内部状態変数値にn番目の拡張メッセージを用いて所定の演算処理をして、内部状態変数値を更新していく。
加算処理は、先頭ブロックから1つ前のブロックまでのハッシュ中間値に、当該ブロックの80ステップ目のステップ処理結果である内部状態変数値を加算する処理である。
メッセージの先頭ブロックからあるブロックまでのハッシュ処理の結果がハッシュ中間値であり、先頭ブロックから最終ブロックまでのハッシュ中間値が当該メッセージ全体に対するハッシュ値となる。
(ハッシュ処理回路の構成)
図1は本発明の実施形態1におけるハッシュ処理回路の構成を示した図である。
100はハッシュ処理回路である。101は後述する外部のDMAコントローラ(以下、DMACと呼ぶ)が外部のメモリからハッシュ処理回路100にDMA転送するメッセージを一時的に保持しておくためのメッセージ保持部である。
102は拡張メッセージを一時的に保持しておくための拡張メッセージ保持部である。103は拡張メッセージ保持部102が一時的に保持した拡張メッセージを入力し、メッセージ拡張処理を行うメッセージ拡張処理部である。
104は入力メッセージの各ブロックに対するステップ0からステップ79のステップ処理を1ステップ単位で順次行うステップ処理部である。105はステップ処理部104で処理する内部状態変数値を選択するセレクタである。
106はステップ処理部104の出力である内部状態変数値を一時的に保持する内部状態変数値保持部である。107は全ステップ分の処理終了後の内部状態変数値と前のブロックまでのハッシュ中間値を加算処理するための加算処理部である。
108は加算処理部107に入力するハッシュ中間値を選択するセレクタである。109、110は加算処理部107の出力であるハッシュ中間値を保持するハッシュ中間値保持部(第1の中間値保持手段、第2の中間値保持手段)である。111はハッシュ中間値保持部109、110に保持されたハッシュ中間値のうち、いずれか一方を選択するセレクタである。
112は前のブロックまでのハッシュ処理の結果であるハッシュ中間値とハッシュ初期値のうち、いずれか一方を選択するセレクタである。113は外部のDMACあるいはCPUとの間のデータ送受信およびハッシュ処理を制御するための各種信号を生成するハッシュ処理制御部である。
114はメッセージの区切り毎に160ビットのハッシュ値に32ビットのダミーデータを付加して、3つの64ビットのデータとしてハッシュ処理回路100の外部へDMA転送によって送信するためのハッシュ値出力部である。116はハッシュ処理回路100の外部のCPU等が設定する、ハッシュ処理回路100の動作パラメタを保持するレジスタである。
117はレジスタ116にデータを入出力するためのアドレス信号、データ信号、制御信号等からなるバス信号である。118はDMACとの間で送受信するDMAデータ/制御信号であり、後述するDMA入力データ、DMA出力データ、DMAリクエスト信号、DMAアクノレッジ信号からなる。
119はセレクタ111によって選択されたハッシュ中間値である。120はDMACがハッシュ処理回路100に出力するDMA入力データであり、メッセージ保持部101が当該DMA入力データを保持する。
121はハッシュ処理回路100がDMACへ出力するDMA出力データであり、ハッシュ値出力部114がハッシュ値あるいはハッシュ中間値を出力する。122はハッシュ回路100がDMACに出力するDMAリクエスト信号であり、ハッシュ処理制御回路113が入力データのリード、出力データのライト要求時に各々DMAリードリクエスト信号、DMAライトリクエスト信号をアサートする。
123はDMACがハッシュ処理回路100に出力するDMAアクノレッジ信号である。これは、DMACは入力データのリード要求に対してはDMAリードアクノレッジ信号のアサートと共に入力データを出力し、出力データのライト要求に対してはDMAライトアクノレッジ信号のアサートと共に出力データを取り込む。なお、上記DMAリクエスト信号122、DMAアクノレッジ信号123は、リード/ライトをまとめて示している。
124はブロックに対するハッシュ処理の開始時に、メッセージ保持部101が格納している拡張メッセージを拡張メッセージ保持部102にロードするためにハッシュ処理制御部113が出力するブロックロード信号である。125はセレクタ105の制御信号としてハッシュ処理制御部113が出力するハッシュ中間値選択信号である。
126はレジスタ116に設定されたハッシュ処理の初期値を示す信号で、ハッシュ処理制御部113がセレクタ112に出力するハッシュ初期値である。127は、セレクタ112の制御信号としてハッシュ処理制御部113が出力するハッシュ初期値選択信号Xである。
128は、セレクタ108の制御信号としてハッシュ処理制御部113が出力するハッシュ初期値選択信号Yである。129は、ハッシュ中間値保持部A109のハッシュ中間値A135のロード信号としてハッシュ処理制御部113が出力するハッシュ中間値Aロード信号である。
130は、ハッシュ中間値保持部B110のハッシュ中間値B136のロード信号としてハッシュ処理制御部113が出力するハッシュ中間値Bロード信号である。131は、セレクタ111の制御信号としてハッシュ処理制御部113が出力するメッセージA選択信号である。
132はメッセージ保持部101が拡張メッセージ保持部102へ出力するメッセージである。133は拡張メッセージ保持部102がメッセージ拡張処理部103へ出力する拡張メッセージである。
134は内部状態変数値保持部106の出力である内部状態変数値である。135はハッシュ中間値保持部A109の出力であるハッシュ中間値Aである。136はハッシュ中間値保持部B110の出力であるハッシュ中間値Bである。
137はメッセージ毎に処理するブロック数をカウントするブロックカウンタであり、メッセージを構成する所定数のブロックに対するハッシュ処理を完了したときにクリアされる。138はメッセージのブロック毎に処理するステップ数をカウントするステップカウンタであり、所定数のステップをカウントしたときにクリアされる。
なお、本実施形態では、ブロックカウンタ137のカウンタ値は、n番目(n=0、・・・)のブロック処理に対して(n+1)の値を示す。ステップカウンタ138のカウンタ値は、n番目(n=0、・・・、79)のステップ処理に対して(n+1)の値を示す。
本実施形態において、ハッシュ処理回路100は、ハッシュ処理のうち、パディング処理以外のメッセージ拡張処理、ステップ処理、加算処理を行う。パディング処理は、後述するハッシュ処理システム200のハッシュ処理回路100以外の部分、具体的には、後述するCPU201とメモリ202が実行する。
(ハッシュ処理システムの構成)
図2はハッシュ処理回路100を動作させるためのシステムの構成例を示した図である。200はハッシュ処理システムである。201はハッシュ処理システム200の動作を制御するCPUである。202はハッシュ処理するメッセージ、ハッシュ値などを保持するためのメモリである。
203はメモリ202からハッシュ処理回路100にメッセージを転送し、ハッシュ処理回路100からメモリ202にハッシュ値を転送するダイレクト・メモリ・アクセス・コントローラ(DMAC)である。204はハッシュ処理システム200の割込み信号を制御する割込み制御部である。205はハッシュ処理回路100、CPU201、メモリ202、DMAC203、割込み制御部204を接続するバスであり、アドレス信号、データ信号、制御信号等からなる。
206はDMAC204から割込み制御部204への割込み信号である。本実施形態においては、DMAC203がハッシュ処理回路100からメモリ202へハッシュ値を転送したあとに、割込み信号206によってDMAC203から割込み制御部204に割込みを通知する。割込み制御部204は不図示の割込み信号により、CPU201にメモリへのハッシュ値格納を通知する。
(ハッシュ処理の概要)
図3は、本実施形態のハッシュ処理システムにおける、メッセージ毎のハッシュ処理の動作フローを示す図である。
ST001において、CPU201よりバス信号117を介してハッシュ処理回路100のレジスタ116に、当該メッセージに対するハッシュ処理の動作パラメタを設定する。
次に、ST002において、ハッシュ処理回路100はDMAリード転送によりメッセージのデータをリードし、ブロック単位毎にハッシュ処理をおこない、最終ブロックまでのハッシュ値を生成する。
次に、ST003において、ハッシュ処理回路100はDMAライト転送により当該メッセージのハッシュ値を出力する。
(レジスタの記憶内容)
図4は、本実施形態のハッシュ処理回路100内のレジスタ116が保持する情報を示す図である。
レジスタ116は、ジョブ開始、メッセージ識別子、ブロック数、ハッシュ初期値、処理継続の各情報の保持領域を有する。『ジョブ開始』領域の情報は、他の『メッセージ識別』、『ブロック数』、『ハッシュ初期値』、『処理継続』領域に設定された情報に基づいて“ハッシュ処理を開始する”こと、あるいは、“ハッシュ処理を開始しない”ことを示す。ハッシュ処理を開始するか否かは、各々当該領域内の所定ビットの1、0によって示すことができる。以下、当該所定ビットを1あるいは0に設定することを、各々フラグを立てる、フラグをクリアすると呼ぶ。
CPU201は1つのメッセージに対するハッシュ処理要求毎に、“ハッシュ処理を開始する”ことを示す為に、ハッシュ処理回路100のレジスタ116の当該『ジョブ開始』領域の所定フラグを立てる。ハッシュ処理回路100は当該領域の所定フラグが立っており、かつ、1つ前のメッセージに対するハッシュ処理が完了している場合にハッシュ処理を開始する。そして、ハッシュ処理回路100は、処理中のメッセージに対するハッシュ処理が完了した時点で、“ハッシュ処理を開始しない”ことを示す為に当該フラグをクリアする。
『メッセージ識別子』領域の情報は、処理要求の中の対象メッセージを当該領域内の所定の複数ビットによって識別する識別子である。例えば、メッセージの種類が2種類の場合は、所定のビットが1なら“メッセージAを処理すること”、0なら“メッセージBを処理すること”を示す。
『ブロック数』領域の情報は、処理要求の中のブロック数を当該領域内の所定ビットによって示すものである。例えば、所定ビットの示す値が処理するブロック数を示す場合は、所定ビットの値が0x0004ならば処理するブロック数は4となる。
『ハッシュ初期値』領域の情報は、処理要求の中の、内部状態変数値の初期値(ハッシュ初期値)を示すものである。SHA−1の場合、内部状態変数値は5つの32ビットのデータから構成されるため、当該領域の所定の160ビットによってハッシュ初期値を示す。尚、CPU201は当該『ハッシュ初期値』領域に、SHA−1のアルゴリズムの内部状態変数値の初期値を書き込んでもよいし、中断したハッシュ処理を再開して処理する為に、ハッシュ中間値に相当する値を書き込んでもよい。
『処理継続』領域の情報は、処理要求の中のハッシュ処理に用いる内部状態変数値の初期値として、以下を各々当該領域内の所定ビットの1、0によって示すものである。
・『ハッシュ初期値』領域に保持する“内部状態変数値の初期値を用いる”こと。
・ハッシュ処理回路100内のハッシュ中間値保持部に保持する“ハッシュ中間値を用いる”こと。
なお、CPU201は1つのメッセージに対するハッシュ処理要求毎に、『メッセージ識別子』、『ブロック数』、『ハッシュ初期値』、『処理継続』領域に所定の値を書き込む。
(メッセージ例)
図5は、本実施形態においてハッシュ処理される2つのメッセージであるメッセージA(第1メッセージ)、メッセージB(第2メッセージ)を示した図である。SHA−1ではハッシュ処理は512ビットのブロック単位でおこなわれる。ここでは、メッセージAは先頭から512ビットのブロックA0、A1、A2、・・・・、A51、A52、A53、A54、・・・・、A93、A94、A95に分割されている。最終ブロックA95については、512ビットに満たない部分はパディング・データが付加されている。同様にしてメッセージBは先頭から512ビットごとにブロックB0、B1、B2、B3に分割され、B3にパディング・データが付加されているとする。これらのメッセージはメモリ202に格納されている。
(メッセージ転送の概要)
図6は、本実施形態においてハッシュ処理されるメッセージA及びメッセージBがメモリ203からハッシュ処理回路100に転送される場合の転送順序を示した図である。本実施形態では、メッセージAの途中でメッセージBを優先的に処理するように、CPU201がハッシュ処理回路100を制御する場合の例を示す。つまり、DMAC203は、メッセージAを構成するブロックA0、A1、A2、・・・、A51、A52をハッシュ処理回路100に順次転送した後、メッセージBを構成するブロックB0、B1、B2、B3をハッシュ処理回路100に順次転送する。その後、DMAC203は、メッセージAを構成するブロックA53、A54、・・・、A93、A94、A95をハッシュ処理回路100に転送する。
本実施形態においては、CPU201はメッセージAのハッシュ処理を途中で中断して、メッセージBのハッシュ処理を行うように処理要求することを予め決定されている。また、ハッシュ処理回路100に対して、メッセージAをブロックA0〜A52から成るメッセージと、ブロックA53〜A95から成るメッセージの2つのメッセージとして処理要求を出す。
(ハッシュ処理)
また、本実施形態では、ハッシュ処理回路100は、図3のフローに従い、ST001でCPU201によってレジスタ116に設定されたブロック数を有するメッセージに対して、ST002で当該ブロック数分のハッシュ処理を中断なく実行する。そして、ST003においてハッシュ処理結果のハッシュ値を出力する。上記メッセージに対するハッシュ処理完了後に、CPU201が次のメッセージに対する処理要求をハッシュ処理回路100のレジスタ116に設定することにより、ハッシュ処理回路100は次のメッセージに対する設定されたブロック数のハッシュ処理を行う。
図7は、3つのメッセージ(A0〜A52、B0〜B3、A53〜95)が図6に示した順番で入力する場合の本実施形態のハッシュ処理の動作フローを示した図である。各々のメッセージに対しては図3のST001からST002の動作フローに従い、順次メッセージ毎にハッシュ処理を行う。
ST101において、CPU201は第一のメッセージ(A0〜A52)に対する処理要求を、ハッシュ処理回路100のレジスタ116に設定する。
ST102において、ハッシュ処理回路100は第一のメッセージ(A0〜A52)のデータをDMAC203にリードリクエストして読込み、当該メッセージに対するハッシュ処理を行う。
ST103において、ハッシュ処理回路100は第一のメッセージ(A0〜A52)に対するハッシュ値をDMAC203にライトリクエストして出力する。
ST104において、CPU201は第ニのメッセージ(B0〜B3)に対する処理要求を、ハッシュ処理回路100のレジスタ116に設定する。
ST105において、ハッシュ処理回路100は第二のメッセージ(B0〜B3)のデータをDMAC203にリードリクエストして読込み、当該メッセージに対するハッシュ処理を行う。
ST106において、ハッシュ処理回路100は第二のメッセージ(B0〜B3)に対するハッシュ値をDMAC203にライトリクエストして出力する。
ST107において、CPU201は第三のメッセージ(A53〜A95)に対する処理要求を、ハッシュ処理回路100のレジスタ116に設定する。
ST108において、ハッシュ処理回路100は第三のメッセージ(A53〜A95)のデータをDMAC203にリードリクエストして読込み、当該メッセージに対するハッシュ処理を行う。
ST109において、ハッシュ処理回路100は第三のメッセージ(A53〜A95)に対するハッシュ値をDMAC203にライトリクエストして出力する。
(ハッシュ処理の詳細)
図8〜図10は本実施形態の、ハッシュ処理の各ステップ単位の動作を示したタイミングチャートである。ここで、TXXXはステップ処理およびDMA転送処理の基本単位となっている動作クロック周期Tに基づく期間を表している。本実施形態では、ハッシュ処理回路100は周期Tの動作クロックで同期設計されている。また、例えば、メッセージAの各512ビットのブロックのデータは32ビットの0番目から15番目の16個の拡張メッセージW0〜W15に相当する。例えば、メッセージAの0番目のブロックをA0、A0の0番目と1番目の32ビットデータをA0_W00―W01、A0の最初の16個の拡張メッセージをEA0_W00−W15と表記する。同様に、例えば、ブロックA0の0番目のステップの内部状態変数値をSA0_00、ブロックA0のハッシュ中間値をHA0と表記する。以下、単位期間毎の各部の動作を説明する。
T000において、データライトをするために、ハッシュ処理制御部113がDMAC203に対してDMAライトリクエスト信号122をアサートする。T001において、DMAC203は、DMAライトアクノレッジ信号123を返すと共に、ハッシュ値出力部114がDMA出力データ116として出力するハッシュ値(ここではHAX)の最初の64ビットをメモリ202に転送する。以下、T002からT005にかけて、DMAC203はハッシュ値HAXをメモリ202に転送する。この間、ハッシュ処理制御部113は、DMAC203がDMAライトアクノレッジ信号123をアサートする回数をカウントする。ここでは、T005までにDMAライトアクノレッジ信号123が3回アサートされたことを確認し、T006においてDMAライトリクエスト信号122をデアサートする。
T006およびT007において、CPU201がバス205、バス信号117を経由して、レジスタ116を設定する。ここでは、図4に示したレジスタ116の『ジョブ開始』領域に“ハッシュ処理を開始する”フラグを立てると共に、『処理継続』領域に“内部状態変数値の初期値を用いる”フラグを立てる。また、『メッセージ識別子』領域に“メッセージAを処理する”こと、『ブロック数』領域に“53ブロック分処理する”こと、『ハッシュ初期値』領域に“SHA−1アルゴリズムの初期値”を設定する。
レジスタ116の『ジョブ開始』領域に“ハッシュ処理を開始する”フラグが立ったことを受け、T008において、データリードをするために、ハッシュ処理制御部113がDMAC203に対してDMAリードリクエスト信号122をアサートする。T009において、DMAC203は、DMAリードアクノレッジ信号123を返す。それと同時にメモリ202に保持されたメッセージAの先頭ブロックA0の、最初の64ビット(A0_W00−W01)をハッシュ処理装置100に転送する。
T010において、メッセージ保持部101は64ビットデータA0_W00−W01を保持する。以下、T011からT023にかけて、DMAC203はブロックA0をメモリ202からハッシュ処理回路100に転送する。この間、ハッシュ処理制御部113は、DMAC203がDMAアクノレッジ信号123をアサートする回数をカウントする。ハッシュ処理制御部113はT023までにDMAC203がDMAアクノレッジ信号123を8回アサートしたことを確認し、T024においてDMAリードリクエスト信号122をデアサートする。レジスタ116の『ジョブ開始』領域に“ハッシュ処理を開始する”フラグが立った状態で、ブロックカウンタ137はDMAリードリクエスト信号122のデアサート回数により、処理するブロック数のカウントを行う。ブロックカウンタ137のカウント値をBCとすると、ここでBCは1となる。そして同じくT024において、メッセージ保持部101がブロックA0を保持する。
T025において、ハッシュ処理制御部113がブロックロード信号124をアサートする。
T026において、拡張メッセージ保持部102はブロックロード信号124のアサートを検知し、メッセージ保持部101に保持されたブロックA0を読み込む。このとき、拡張メッセージ保持部102は、ブロックA0を16個の32ビットデータEA0_W00〜EA0_W15に分割して保持する。ブロックロード信号124アサート後に、ステップカウンタ138は基本処理期間T毎の不図示のクロックにより、ステップ数をカウントする。ステップカウンタ138のカウント値をSCとすると、ここでSCは1となる。以降、ステップカウンタ138はカウンタ値SCが80になるまで、1ステップ処理の単位の基本処理期間Tのクロック毎にカウントアップする。ハッシュ処理制御部113は、メッセージ保持部101が保持していたデータが拡張メッセージ保持部102にロードされたことに応じて、次のブロックのデータをリードするためにDMAリードリクエスト信号122をアサートする。
同じくT026においてメッセージ拡張処理部103は、拡張メッセージ保持部102が保持する拡張メッセージ133(EA0_W00〜EA0_W15)を入力して、32ビットデータEA0_W16を求める。
同じくT026においてハッシュ処理制御部113は、レジスタ116の『処理継続』領域に“内部状態変数値の初期値を用いる”フラグが立っており、かつ、ステップカウンタ138が1であることに応じて、ハッシュ初期値選択信号X127をアサートする。また、T026においてハッシュ処理制御部113は、ステップカウンタ138が1であることに応じて、ハッシュ中間値選択信号125をアサートする。
同じくT026においてセレクタ112は、ハッシュ初期値選択信号X127がアサートされているので、セレクタ112の入力であるハッシュ中間値119とハッシュ初期値126のうち、ハッシュ初期値126を出力する。また、セレクタ105は、ハッシュ中間値選択信号125のアサートを受けて、セレクタ105の入力であるセレクタ112の出力と内部状態変数値134のうち、セレクタ112の出力を出力する。その結果、セレクタ105はハッシュ初期値126を出力する。
同じくT026においてステップ処理部104は、拡張メッセージ保持部102が保持するEA0_W00とハッシュ初期値126を入力し、SHA−1のステップ0の処理をして内部状態変数値SA0_00を求める。
T027において、ステップカウンタ138はカウントアップし、カウンタ値SCは2となる。
同じくT027において拡張メッセージ保持部102は、EA0_W01〜EA0_W15およびT026においてメッセージ拡張処理部103で求めたEA0_W16を保持する。
同じくT027において内部状態変数値保持部106は、T026において求めた内部状態変数値SA0_00を保持する。
同じくT027においてメッセージ拡張処理部103は、拡張メッセージ保持部102が保持する拡張メッセージ133(EA0_W01〜EA0_W16)を入力して、32ビットデータEA0_W17を求める。
同じくT027においてハッシュ処理制御部113は、ステップカウンタ138が1ではないことに応じて、ハッシュ初期値選択信号X127とハッシュ中間値選択信号125をデアサートする。
同じくT027においてセレクタ105は、ハッシュ中間値選択信号125のデアサートを受けて、セレクタ105の入力であるセレクタ112の出力と内部状態変数値134のうち、内部状態変数値134を出力する。その結果、セレクタ105は内部状態変数値SA0_00を出力する。
同じくT027においてステップ処理部104は、拡張メッセージEA0_W01と内部状態変数値SA0_00を入力し、SHA−1のステップ1の処理をして内部状態変数値SA0_01を求める。
同じくT027においてDMAC203は、DMAリードアクノレッジ信号123を返すと同時に、メモリ202から64ビットデータA1_W00−W01をハッシュ処理装置100に転送する。
T028において、ステップカウンタ138はカウントアップし、カウンタ値SCは3となる。
同じくT028において拡張メッセージ保持部102は、EA0_W02〜EA0_W16およびT027においてメッセージ拡張処理部103で求めたEA0_W17を保持する。
同じくT028において内部状態変数値保持部106は、T027において求めた内部状態変数値SA0_01を保持する。
同じくT028においてメッセージ拡張処理部103は、拡張メッセージ保持部102が保持する拡張メッセージ133(EA0_W02〜EA0_W17)を入力して、32ビットデータEA0_W18を求める。
同じくT028においてセレクタ105は、ハッシュ中間値選択信号125のデアサートを受けて、セレクタ105の入力であるセレクタ112の出力と内部状態変数値134のうち、内部状態変数値134を出力する。その結果、セレクタ105は内部状態変数値SA0_01を出力する。
同じくT028においてステップ処理部104は、拡張メッセージ保持部102が保持するEA0_W02と内部状態変数値SA0_01を入力し、SHA−1のステップ2の処理をして内部状態変数値SA0_02を求める。
同じくT028においてメッセージ保持部101は、64ビットデータA1_W00−W01を保持する。
以下、T029〜T041まで、DMAC203はメモリ202からハッシュ処理装置100へブロックA1のDMA転送を行う。この間、ハッシュ処理制御部113は、DMAC203がDMAリードアクノレッジ信号123をアサートする回数をカウントする。ハッシュ処理制御部113はT041までにDMAC203がDMAアクノレッジ信号123を8回アサートしたことを確認し、T042においてDMAリードリクエスト信号122をデアサートする。そしてT042において、メッセージ保持部101はブロックA1を保持する。また、DMAリードリクエスト信号122のデアサートを受けて、ブロックカウンタ137はカウントアップし、カウンタ値BCは2になる。
また、T029〜T105まで、ハッシュ処理回路100は、SHA−1のステップ2〜79の処理を行う。この間、ステップカウンタ138はカウント値SCを3から80までカウントアップする。その結果、T106において内部状態変数値保持部106は、SHA−1のステップ79の処理結果である内部状態変数値SA0_79を保持する。
T105までに所定の80ステップまでカウントした為、T106においてステップカウンタ138はカウンタ値SCをクリアし、SCは0となる。
同じくT106においてハッシュ処理制御部113は、
・レジスタ116の『処理継続』領域に“内部状態変数値の初期値を用いる”フラグが立っていること。並びに、
・T105のステップカウンタ138のカウント値SCが80であること。
に応じて、ハッシュ初期値選択信号Y128をアサートする。
同じくT106においてセレクタ108は、ハッシュ初期値選択信号Y128のアサートを受けて、セレクタ108の入力であるハッシュ初期値126とハッシュ中間値119のうち、ハッシュ初期値126を出力する。
同じくT106において加算処理部107は、内部状態変数値134(SA0_79)とハッシュ初期値126を入力して、ハッシュ中間値HA0を求める。
同じくT106においてハッシュ処理制御部113は、レジスタ116の『メッセージ識別子』領域が“メッセージAを処理する”旨を示しているので、ハッシュ中間値Aロード信号129をアサートする。またハッシュ処理制御部113は、ブロックロード信号124をアサートする。
ハッシュ中間値保持部A109はハッシュ中間値Aロード信号129のアサートを検知し、T107においてハッシュ中間値HA0を保持する。同じくT107において、ハッシュ処理制御部113は、レジスタ116の『メッセージ識別子』領域が“メッセージAを処理する”旨を示しているので、メッセージA選択信号131をアサートする。そこでセレクタ111はハッシュ中間値保持部A109の出力とハッシュ中間値保持部B110の出力のうち、ハッシュ中間値保持部A109の出力(HA0)をハッシュ値出力部114へ出力する。
拡張メッセージ保持部102はブロックロード信号124のアサートを検知し、同じくT107において、メッセージ保持部101が保持するブロックA1を読み込む。このとき、拡張メッセージ保持部102は、ブロックA1を16個の32ビットデータEA1_W00〜EA1_W15に分割して保持する。ハッシュ処理制御部113は、メッセージ保持部101が保持していたデータを拡張メッセージ保持部102が保持したことに応じて、次のブロックのデータをリードするためにDMAリードリクエスト信号122をアサートする。
同じくT107において、ハッシュ処理制御部113は、ブロックA0のハッシュ処理が終わったことに応じて、ハッシュ初期値選択信号Y128をデアサートする。
同じくT107において、ブロックロード信号124のアサートを受けて、ステップカウンタ138はカウントアップを開始し、カウンタ値SCは1となる。
同じくT107においてメッセージ拡張処理部103は、拡張メッセージ保持部102が保持する拡張メッセージ133(EA1_W00〜EA1_W15)を入力して、32ビットデータEA1_W16を求める。
ブロックA1の処理であるため、T107においてハッシュ処理制御部113は、ハッシュ初期値選択信号X127をアサートしない。
同じくT107においてセレクタ112は、ハッシュ初期値信号X127のデアサートを受けて、セレクタ112の入力であるハッシュ中間値119とハッシュ初期値126のうち、ハッシュ中間値119(HA0)を出力する。また、セレクタ105は、ハッシュ中間値選択信号125のアサートを受けて、セレクタ105の入力であるセレクタ112の出力と内部状態変数値134のうち、セレクタ112の出力を出力する。その結果、セレクタ105はハッシュ中間値119(HA0)を出力する。
同じくステップ107においてステップ処理部104は、拡張メッセージ保持部102が保持するEA1_W00とハッシュ中間値119(HA0)を入力し、SHA−1のステップ0の処理をして内部状態変数値SA1_00を求める。
以下、T027〜T041におけるブロックA1のDMA転送と同様に、T108〜T122において、ブロックA2のDMA転送を行う。T123においてハッシュ処理制御部113は、ブロックA1に対するDMAリードリクエスト信号122をデアサートする。DMAリードリクエスト信号122のデアサートを受けて、ブロックカウンタ137をカウントアップし、カウンタ値BCは3となる。また、T027〜T105におけるブロックA0に対するSHA−1のステップ1〜79の処理と同様に、T108〜T186において、ブロックA1に対するSHA−1のステップ1〜79の処理を行う。この間ステップカウンタ138はカウンタ値SCを2から80までカウントアップする。その結果、T187において内部状態変数値保持部106は、SHA−1のステップ79の処理結果である内部状態変数値SA1_79を保持する。
同じくT187において、ブロックA1の処理であるため、ハッシュ処理制御部113は、ハッシュ初期値選択信号Y128をアサートしない。
同じくT187においてセレクタ108は、ハッシュ初期値選択信号Y126のデアサートを受けて、セレクタ108の入力であるハッシュ初期値126とハッシュ中間値119(HA0)のうち、ハッシュ中間値119(HA0)を出力する。
同じくT187において加算処理部107は、内部状態変数値134(SA1_79)とハッシュ中間値119(HA0)を入力して、ハッシュ中間値HA1を求める。
同じくT187においてハッシュ処理制御部113は、レジスタ116の『メッセージ識別子』領域が“メッセージAを処理する”旨を示しているので、ハッシュ中間値Aロード信号129をアサートする。ハッシュ中間値保持部A109は、T188においてハッシュ中間値Aロード信号129のアサートを検知し、ハッシュ中間値HA1を保持する。ここで、ハッシュ処理制御部113は、レジスタ116の『メッセージ識別子』領域が“メッセージAを処理する”旨を示しているので、メッセージA選択信号131をアサートする。そこでセレクタ111は、ハッシュ中間値保持部A109の出力とハッシュ中間値保持部B110の出力のうち、ハッシュ中間値保持部A109の出力(HA1)をハッシュ出力部114へ出力する。
以降、レジスタ116の『メッセージ識別子』領域が“メッセージAを処理する”こと、『ブロック数』領域が“53ブロック分処理する”ことを示しているのを受けて、ブロックA3〜A52をDMA転送する。また、ブロックA2〜A52に対してハッシュ処理を行う。
(ブロック単位の動作)
図11Aと図11B(以下、まとめて図11)は本実施形態の、ハッシュ処理の各ブロック単位の動作を示したタイミングチャートである。なお、TBXXXは基本的にブロック処理の単位となっている期間Tの81個分の期間をあらわす。先述のT026〜T106はTB0にあたり、T107〜T187はTB1にあたる。但し、メッセージ毎のハッシュ処理完了後のDMAライト転送及び次のメッセージの最初のブロックのDMAリード転送をする期間に相当するTB53、TB58は期間Tの26個分の期間となる。また、入力メッセージA0_W00〜W15はA0(t)、拡張メッセージEA0_W00〜EA_W79はEA0(t)、内部状態変数値SA0_00〜SA0_79はSA0(t)とあらわしている。ここで、tはステップ数を示し、XX(t)はステップ数tにより値が変化することを示す。
以下、ブロック処理期間毎の各部の動作を説明する。尚、一部ステップ処理期間毎の詳細動作も説明する。
前述したように、TB0においてDMAC203が、メモリ202からハッシュ処理回路100にブロックA1をDMA転送する。ブロックA1のDMA転送終了後、ブロックカウンタ137はカウントアップし、カウンタ値BCは2となる。TB1においてDMAC203が、メモリ202からハッシュ処理回路100にブロックA2をDMA転送する。ブロックA2のDMA転送終了後、ブロックカウンタ137はカウントアップし、カウンタ値BCは3となる。
また、前述したように、ハッシュ処理回路100は、TB0においてメッセージAの先頭ブロックであるブロックA0を入力して拡張メッセージEA0(t)を求めると共に内部状態変数値SA0(t)を求める。SA(t)を更新するステップ処理においてはステップt毎にt番目の拡張メッセージと(t−1)番目の内部状態変数値を用いて内部状態変数値を更新し、ステップ79で内部状態変数値SA0_79を求める。そして最終的にハッシュ初期値と加算してハッシュ中間値HA0を求める。TB1において、ハッシュ中間値保持部A109はハッシュ中間値HA0を保持し、ハッシュ処理回路100はブロックA1を入力して拡張メッセージEA1(t)と内部状態変数値SA1(t)を求め、ステップ79で内部状態変数値SA1_79を求める。そして最終的に内部状態変数値SA1_79とハッシュ中間値HA0を加算して、ハッシュ中間値HA1を求める。
以下、TB2〜TB51においてDMAC203は、ブロックA3〜A52をメモリ202からハッシュ処理回路100にDMA転送する。このとき、ブロックカウンタ137の値は4〜53までカウントアップする。また、TB2〜TB52においてハッシュ処理回路100は、ブロックA2〜A52のハッシュ処理をする。その結果、TB53においてハッシュ中間値保持部A109はハッシュ中間値HA52を保持し、ハッシュ値出力部114は、ハッシュ中間値HA52を出力する。
ここで、レジスタ116の『メッセージ識別子』領域および『ブロック数』領域が保持する“メッセージAを処理する”および“53ブロック分処理する”要求を満したことになる。そこでハッシュ処理制御部113は、TB53においてレジスタ116の『ジョブ開始』領域が保持する“ハッシュ処理を開始する”フラグと、『処理継続』領域が保持する“内部状態変数値の初期値を用いる”フラグをクリアする。また、ハッシュ処理制御部113は、TB53においてDMAC203に対してDMAライトリクエスト信号122をアサートする。DMAC203はDMAライトアクノレッジ信号123を返すと共に、ハッシュ値出力部114が出力するハッシュ中間値HA52を、メモリ202へ転送する。ハッシュ処理制御部113は、DMAC203がDMAライトアクノレッジ信号123をアサートする回数をカウントする。ハッシュ処理制御部113は、DMAC203がDMAライトアクノレッジ信号123を3回アサートしたことを確認して、DMAライトリクエスト信号122をデアサートする。
同じくTB53においてDMAC203は、ハッシュ処理装置100からのDMAライトリクエスト信号122がデアサートしたのを検知して、割込信号206をアサートし、割込み制御部204に割込みを通知する。そして割込み制御部204は、不図示の割込信号により、CPU201にメモリ202へのハッシュ中間値HA52の格納を通知する。
同じくTB53において、CPU201はDMAC203からの割込みによって“メッセージA”を“53ブロック分”、“メッセージの先頭から”処理し終わったことを検知する。そこでCPU201は、バス205、バス信号117を経由して、レジスタ116を設定する。ここでは、図4に示したレジスタ116の『ジョブ開始』領域に“ハッシュ処理を開始する”フラグを立てると共に、『処理継続』領域に“内部状態変数値の初期値を用いる”フラグを立てる。また、『メッセージ識別子』領域に“メッセージBを処理する”こと、『ブロック数』領域に“4ブロック分処理する”こと、『ハッシュ初期値』領域に“SHA−1アルゴリズムの初期値”を設定する。
レジスタ116の『ジョブ開始』領域に“ハッシュ処理を開始する”フラグが立ったことを受け、同じくTB53において、データリードをするために、ハッシュ処理制御部113がDMAC203に対してDMAリードリクエスト信号112をアサートする。DMAC203は、DMAリードアクノレッジ信号123を返すと共にメッセージBの先頭ブロックB0をハッシュ処理装置100にDMA転送し、メッセージ保持部101がブロックB0を保持する。そしてブロックカウンタ137はカウントアップし、カウンタ値BCは1となる。
TB54において、ブロックB1のDMA転送およびブロックB0に対するハッシュ処理がおこなわれる。以下に詳細を示す。
T4344においてハッシュ処理制御部113は、ブロックロード信号124をアサートする。T4345において、拡張メッセージ保持部102はブロックロード信号124のアサートを検知し、メッセージ保持部101が保持するブロックB0を読み込む。このとき、拡張メッセージ保持部102は、ブロックB0を16個の32ビットデータEB0_W00〜EB0_W15に分割して保持する。また、ステップカウンタ138はカウントアップを開始し、カウンタ値SCは1になる。ハッシュ処理制御部113は、メッセージ保持部101が保持していたデータを拡張メッセージ保持部102が保持したことに応じて、次のブロックのデータをリードするためにDMAリードリクエスト信号122をアサートする。
同じくT4345においてメッセージ拡張処理部103は、拡張メッセージ保持部102が保持する拡張メッセージ133(EB0_W00〜EB0_W15)を入力して、32ビットデータEB0_W16を求める。
同じくT4345においてハッシュ処理制御部113は、
・レジスタ116の『処理継続』領域に“内部状態変数値の初期値を用いる”フラグが立っていること。並びに、
・ステップカウンタ138のカウンタ値SCが1であること。
に応じて、ハッシュ初期値選択信号X127とハッシュ中間値選択信号125をアサートする。
同じくT4345においてセレクタ112は、ハッシュ初期値選択信号X127のアサートを受けて、セレクタ112の入力であるハッシュ中間値119とハッシュ初期値126のうち、ハッシュ初期値126を出力する。また、セレクタ105は、ハッシュ中間値選択信号125のアサートを受けて、セレクタ105の入力であるセレクタ112の出力と内部状態変数値134のうち、セレクタ112の出力を出力する。その結果、セレクタ105はハッシュ初期値126を出力する。
同じくT4345においてステップ処理部104は、拡張メッセージ保持部102が保持するEB0_W00とハッシュ初期値126を入力し、SHA−1のステップ0の処理をして内部状態変数値SB0_00を求める。
T4346において、ステップカウンタ138はカウントアップし、カウンタ値SCは2となる。
同じくT4346において拡張メッセージ保持部102は、EB0_W01〜EB0_W15およびメッセージ拡張処理部103で求めたEB0_W16を保持する。
同じくT4346において内部状態変数値保持部106は、内部状態変数値SB0_00を保持する。
同じくT4346においてメッセージ拡張処理部103は、拡張メッセージ保持部102が保持する拡張メッセージ133(EB0_W01〜EB0_W16)を入力して、32ビットデータEB0_W17を求める。
同じくT4346においてハッシュ処理制御部113は、ステップカウンタ138のカウント値SCが1ではないことに応じて、ハッシュ初期値選択信号X127とハッシュ中間値選択信号125をデアサートする。
同じくT4346においてセレクタ105は、ハッシュ中間値選択信号125のデアサートを受けて、セレクタ105の入力であるセレクタ112の出力と内部状態変数値134のうち、内部状態変数値134を出力する。その結果、セレクタ105は内部状態変数値SB0_00を出力する。
同じくT4346においてステップ処理部104は、拡張メッセージEB0_W01と内部状態変数値SB0_00を入力し、SHA−1のステップ1の処理をして内部状態変数値SB0_01を求める。そしてハッシュ処理制御部113は、ステップカウンタ138をカウントアップする。このときのステップカウンタ138の値は2である。
同じくT4346においてDMAC203は、DMAリードアクノレッジ信号123を返すと同時に、メモリ202から64ビットデータB1_W00−W01をハッシュ処理装置100に転送する。
T4347において、ステップカウンタ138をカウントアップし、カウンタ値SCは3となる。
同じくT4347において拡張メッセージ保持部102は、EB0_W02〜EB0_W16およびメッセージ拡張処理部103で求めたEB0_W17を保持する。
同じくT4347において内部状態変数値保持部106は、内部状態変数値SB0_01を保持する。
同じくT4347においてメッセージ拡張処理部103は、拡張メッセージ保持部102が保持する拡張メッセージ133(EB0_W02〜EB0_W17)を入力して、32ビットデータEB0_W18を求める。
同じくT4347においてセレクタ105は、ハッシュ中間値選択信号125のデアサートを受けて、セレクタ105の入力であるセレクタ112の出力と内部状態変数値134のうち、内部状態変数値134を出力する。その結果、セレクタ105は内部状態変数値SB0_01を出力する。
同じくT4347においてステップ処理部104は、拡張メッセージEB0_W02と内部状態変数値SB0_01を入力し、SHA−1のステップ2の処理をして内部状態変数値SB0_02を求める。
同じくT4347においてメッセージ保持部101は、DMAC203がDMA転送した64ビットデータB1_W00−W01を保持する。
以下、T4348からT4360までDMAC203はメモリ202からハッシュ処理装置100へのブロックB1のDMA転送を引き続き行う。この間、ハッシュ処理制御部113は、DMAC203がDMAリードアクノレッジ信号123をアサートする回数をカウントする。ハッシュ処理制御部113は、DMAC203がDMAアクノレッジ信号123を8回アサートしたことを確認した後、DMAリードリクエスト信号122をデアサートする。そして、メッセージ保持部101はブロックB1を保持する。またブロックカウンタ137はカウントアップし、カウンタ値BCは2になる。
また、T4348からT4424までハッシュ処理回路100は、SHA−1のステップ3〜79の処理を行う。この間、各ステップ処理の開始時にステップカウンタ138は4から80までカウントアップする。その結果、T4425において内部状態変数値保持部106は、SHA−1のステップ79の処理結果である内部状態変数値SB0_79を保持する。
同じくT4425においてハッシュ処理制御部113は、
・レジスタ116の『処理継続』領域に“内部状態変数値の初期値を用いる”フラグが立っていること。並びに、
・T4424のステップカウンタ138の値が80であること。
に応じて、ハッシュ初期値選択信号Y128をアサートする。
同じくT4425においてセレクタ108は、ハッシュ初期値選択信号Y128のアサートを受けて、セレクタ108の入力であるハッシュ初期値126とハッシュ中間値119のうち、ハッシュ初期値126を出力する。
同じくT4425において加算処理部107は、内部状態変数値134(SB0_79)とハッシュ初期値126を入力して、ハッシュ中間値HB0を求める。
同じくT4425において、ハッシュ処理制御部113はレジスタ116の『メッセージ識別子』領域が“メッセージBを処理する”旨を示しているので、ハッシュ中間値Bロード信号130をアサートする。またハッシュ処理制御部113は、ブロックロード信号124をアサートする。そこで、TB55期間内のT4426において、ハッシュ中間値保持部B110はハッシュ中間値HB0を保持する。また、レジスタ116の『メッセージ識別子』領域が“メッセージBを処理する”旨を示しているので、ハッシュ処理制御部113はメッセージA選択信号131をアサートしない。そこでセレクタ111は、ハッシュ中間値保持部A109の出力とハッシュ中間値保持部B110の出力のうち、ハッシュ中間値保持部B110の出力(HB0)をハッシュ値出力部114へ出力する。
同じくT4426において拡張メッセージ保持部102は、ブロックロード信号124のアサートを検知し、メッセージ保持部101が保持するブロックB1を読み込む。このとき、拡張メッセージ保持部102は、ブロックB1を16個の32ビットデータEB1_W00〜EB1_W15に分割して保持する。ハッシュ処理制御部113は、メッセージ保持部101が保持していたデータを拡張メッセージ保持部102が保持したことに応じて、次のブロックのデータをリードするためにDMAリードリクエスト信号122をアサートする。
同じくT4426においてハッシュ処理制御部113は、ブロックB0のハッシュ処理が終わったことに応じて、ハッシュ初期値選択信号Y128をデアサートする。
以上により、TB55において、ハッシュ中間値保持部A109はハッシュ中間値HA52を保持し、ハッシュ中間値保持部B110はハッシュ中間値HB0を保持する。
ブロックB1に対するハッシュ処理は、TB55においてハッシュ中間値保持部B100が保持するハッシュ中間値HB0を用いて行う。
以降、DMAC203は、TB55〜TB56においてブロックB2〜B3をメモリ202からハッシュ処理回路100にDMA転送する。このとき、ブロックカウンタ137はカウンタ値BCを3〜4までカウントアップする。また、ハッシュ処理回路100は、TB55〜TB57おいてブロックB1〜B3に対するハッシュ処理を行う。この間、レジスタ116の『メッセージ識別子』領域が“メッセージBを処理する”旨を示しているので、ハッシュ処理制御部113はハッシュ中間値Aロード信号129をアサートせず、ハッシュ中間値Bロード信号130を適宜アサートする。そのため、ハッシュ中間値保持部A109はメッセージBのハッシュ中間値を保持せず、ハッシュ中間値保持部B110がメッセージBのハッシュ中間値を保持する。また、レジスタ116の『メッセージ識別子』領域が“メッセージBを処理する”旨を示しているので、ハッシュ処理制御部113はメッセージA選択信号131をアサートしない。そのため、セレクタ111は、ハッシュ中間値保持部A109の出力とハッシュ中間値保持部B110の出力のうち、ハッシュ中間値保持部B110の出力を出力する。その他の処理はブロックA1〜A3に対する処理と同様である。
この結果、TB55〜TB57においてハッシュ中間値HB1〜HB3が求まる。TB58において、ハッシュ中間値保持部A109はメッセージAのブロックA0〜A52に対するハッシュ中間値HA52を保持し、ハッシュ中間値保持部B110はメッセージBのブロックB0〜B3に対するハッシュ中間値HB3を保持する。メッセージBは図5に示すようにブロックB0〜B3で構成されるので、ハッシュ中間値HB3はメッセージBのハッシュ値HBとなる。TB58においてハッシュ処理制御部113は、レジスタ116の『メッセージ識別子』領域が“メッセージBを処理する”旨を示しているので、メッセージA選択信号131をアサートしない。そのためセレクタ111は、セレクタ111の入力であるハッシュ中間値保持部A109の出力(HA52)とハッシュ中間値保持部B110の出力(HB)のうち、ハッシュ中間値保持部B110の出力(HB)をハッシュ値出力部114へ出力する。
ここで、レジスタ116の『メッセージ識別子』領域および『ブロック数』領域が保持する“メッセージBを処理する”および“4ブロック分処理する”要求を満したことになる。そこでハッシュ処理制御部113は、TB58においてレジスタ116の『ジョブ開始』領域が保持する“ハッシュ処理を開始する”フラグと、『処理継続』領域が保持する“内部状態変数値の初期値を用いる”フラグをクリアする。また、ハッシュ処理制御部113は、TB58においてDMAC203に対してDMAライトリクエスト信号122をアサートする。DMAC203はDMAライトアクノレッジ信号123を返すと共に、ハッシュ値HBをハッシュ値出力部114からメモリ202へ転送する。ハッシュ処理制御部113は、DMA203がDMAライトアクノレッジ信号123をアサートする回数をカウントする。ハッシュ処理制御部113は、DMAC203がDMAライトアクノレッジ信号123を3回アサートしたことを確認して、DMAライトリクエスト信号122をデアサートする。
同じくTB58においてDMAC203は、ハッシュ処理装置100がDMAライトリクエスト信号122をデアサートしたのを検知し、割込信号206をアサートし、割込み制御部204に割込みを通知する。そして割込み制御部204は、不図示の割込信号によりCPU201にメモリ202へのハッシュ値HBの格納を通知する。
同じくTB58において、CPU201はDMAC203からの割込みによって“メッセージB”を“4ブロック分”、“内部状態変数値の初期値を用いて”処理し終わったことを検知する。そこでCPU201は、バス205、バス信号117を経由して、レジスタ116を設定する。ここでは、図4に示したレジスタ116の『ジョブ開始』領域に“ハッシュ処理を開始する”フラグをたてると共に、『処理継続』領域に“ハッシュ中間値を用いる”フラグを立てる。また、『メッセージ識別子』領域に“メッセージAを処理する”こと、『ブロック数』領域に“43ブロック分処理する”ことを設定する。このときハッシュ処理制御部113は、ブロックカウンタ137をクリアする。
レジスタ116の『ジョブ開始』領域に“ハッシュ処理を開始する”フラグが立ったことを受け、同じくTB58において、データリードをするために、ハッシュ処理制御部113がDMAC203に対してDMAリードリクエスト信号122をアサートする。DMAC203は、DMAリードアクノレッジ信号123を返すと共にメッセージAのブロックA53をハッシュ処理装置100にDMA転送し、メッセージ保持部101がブロックA53を保持する。そしてブロックカウンタ137はカウントアップし、カウンタ値BCは1となる。
TB59において、ブロックA54のDMA転送およびブロックA53に対するハッシュ処理がおこなわれる。以下に詳細を示す。
T4694において、ハッシュ処理制御部113がブロックロード信号124をアサートする。T4695において、拡張メッセージ保持部102はブロックロード信号124のアサートを検知し、メッセージ保持部101が保持するブロックA53を読み込む。このとき、拡張メッセージ保持部102は、ブロックA53を16個の32ビットデータEA53_W00〜EA53_W15に分割して保持する。ハッシュ処理制御部113は、メッセージ保持部101が保持していたデータを拡張メッセージ保持部102が保持したことに応じて、次のブロックのデータをリードするためにDMAリードリクエスト信号122をアサートする。
同じくT4695において、ステップカウンタ138はカウントアップし、カウンタ値SCは1となる。
同じくT4695において、メッセージ拡張処理部103は、拡張メッセージ保持部102が保持する拡張メッセージ133(EA53_W00〜EA53_W15)を入力して、32ビットデータEA53_W16を求める。
ハッシュ処理制御部113は、レジスタ116の『処理継続』領域に“ハッシュ中間値を用いる”フラグが立っていることを受けて、ハッシュ初期値選択信号X127をデアサートする。
同じくT4695において、ハッシュ処理制御部113はレジスタ116の『メッセージ識別子』領域が“メッセージAを処理する”ことを示しているのを受けて、メッセージA選択信号131をアサートしている。よってセレクタ111は、セレクタ111の入力であるハッシュ中間値保持部A109の出力(HA52)とハッシュ中間値保持部B110の出力(HB)のうち、ハッシュ中間値保持部A109の出力(HA52)を出力する。セレクタ112は、ハッシュ初期値選択信号X127のデアサートを受けて、セレクタ112の入力であるハッシュ中間値119(HA52)とハッシュ初期値126のうち、ハッシュ中間値119(HA52)を出力する。また、セレクタ105は、ハッシュ中間値選択信号125のアサートを受けて、セレクタ105の入力であるセレクタ112の出力と内部状態変数値134のうち、セレクタ112の出力を出力する。その結果、セレクタ105はハッシュ中間値119(HA52)を出力する。
同じくT4695において、ステップ処理部104は、拡張メッセージ保持部102が保持するEA53_W00とハッシュ中間値HA52を入力し、SHA−1のステップ0の処理をして内部状態変数値SA53_00を求める。
T4696において、ステップカウンタ138はカウントアップし、カウンタ値SCは2となる。
同じくT4696において拡張メッセージ保持部102は、EA53_W01〜EA53_W15およびメッセージ拡張処理部103で求めたEA53_W16を保持する。
同じくT4696において内部状態変数値保持部106は、内部状態変数値SA53_00を保持する。
同じくT4696においてメッセージ拡張処理部103は、拡張メッセージ保持部102が保持する拡張メッセージ133(EA53_W01〜EA53_W16)を入力して、32ビットデータEA53_W17を求める。
同じくT4696においてハッシュ処理制御部113は、SHA−1のステップ1の処理であることを受けて、ハッシュ初期値選択信号X127をデアサートする。
同じくT4696においてセレクタ105は、ハッシュ中間値選択信号125のデアサートを受けて、セレクタ105の入力であるセレクタ112の出力と内部状態変数値134のうち、内部状態変数値134を出力する。その結果、セレクタ105は内部状態変数値SA53_00を出力する。
同じくT4696においてステップ処理部104は、拡張メッセージEA53_W01と内部状態変数値SA53_00を入力し、SHA−1のステップ1の処理をして内部状態変数値SA53_01を求める。
同じくT4696において、DMAC203は、DMAリードアクノレッジ信号123を返すと同時に、メモリ202から64ビットデータA54_W00−W01をハッシュ処理装置100に転送する。 T4697において、ステップカウンタ138はカウントアップし、カウンタ値SCは3となる。
同じくT4697において拡張メッセージ保持部102は、EA53_W02〜EA53_W16およびメッセージ拡張処理部103で求めたEA53_W17を保持する。
同じくT4697において内部状態変数値保持部106は、内部状態変数値SA53_01を保持する。
同じくT4697においてメッセージ拡張処理部103は、拡張メッセージ保持部102が保持する拡張メッセージ133(EA53_W02〜EA53_W17)を入力して、32ビットデータEA53_W18を求める。
同じくT4697においてセレクタ105は、ハッシュ中間値選択信号125のデアサートを受けて、セレクタ105の入力であるセレクタ112の出力と内部状態変数値134のうち、内部状態変数値134を出力する。その結果、セレクタ105は内部状態変数値SA53_01を出力する。
同じくT4697においてステップ処理部104は、拡張メッセージEA53_W02と内部状態変数値SA53_01を入力し、SHA−1のステップ2の処理をして内部状態変数値SA53_02を求める。
同じくT4697においてメッセージ保持部101は64ビットデータA54_W00−W01を保持する。
以下、T4698からT4710まで、DMAC203はメモリ202からハッシュ処理装置100へのブロックA54のDMA転送を引き続き行う。この間、ハッシュ処理制御部113は、DMAC203がDMAリードアクノレッジ信号123をアサートする回数をカウントする。ハッシュ処理制御部113は、T4711において、DMAC203がDMAアクノレッジ信号123を8回アサートしたことを確認した後、DMAリードリクエスト信号122をデアサートする。そして、メッセージ保持部101はブロックA54を保持する。また、ブロックカウンタ137はカウントアップし、カウンタ値BCは2になる。
また、T4697からT4774まで、ハッシュ処理回路100は、SHA−1のステップ2〜79の処理を行う。この間、ステップカウンタ138は、各ステップ処理の開始時にカウンタ値SCを3から80までカウントアップする。その結果、T4775において内部状態変数値保持部106は、SHA−1のステップ79の処理結果である内部状態変数値SA53_79を保持する。
同じくT4775においてハッシュ処理制御部113は、レジスタ116の『処理継続』領域に“ハッシュ中間値を用いる”フラグが立っていることを受けて、ハッシュ初期値選択信号Y128をデアサートする。
同じくT4775においてセレクタ108は、ハッシュ初期値選択信号Y128のデアサートを受けて、セレクタ108の入力であるハッシュ初期値126とハッシュ中間値119のうち、ハッシュ中間値119を出力する。
同じくT4775において加算処理部107は、内部状態変数値134(SA53_79)とハッシュ中間値119(HA52)を入力して、ハッシュ中間値HA53を求める。
同じくT4775において、ハッシュ処理制御部113がブロックロード信号124をアサートする。
T4775において、ハッシュ処理制御部113はレジスタ116の『メッセージ識別子』領域が“メッセージAを処理する”旨を示しているので、ハッシュ中間値Aロード信号129をアサートする。そのため、TB60期間内のT4776において、ハッシュ中間値保持部A109はハッシュ中間値HA53を保持する。また、レジスタ116の『メッセージ識別子』領域が“メッセージAを処理する”旨を示しているので、ハッシュ処理制御部113はメッセージA選択信号131をアサートする。そこでセレクタ111は、ハッシュ中間値保持部A109の出力とハッシュ中間値保持部B110の出力のうち、ハッシュ中間値保持部A109の出力(HA53)をハッシュ値出力部114へ出力する。
同じくT4776において、拡張メッセージ保持部102はブロックロード信号124のアサートを検知し、メッセージ保持部101が保持するブロックA54を読み込む。このとき、拡張メッセージ保持部102は、ブロックA54を16個の32ビットデータEA54_W00〜EA54_W15に分割して保持する。ハッシュ処理制御部113は、メッセージ保持部101が保持していたデータを拡張メッセージ保持部102が保持したことを受けて、次のブロックのデータをリードするためにDMAリードリクエスト信号122をアサートする。
同じくT4776においてハッシュ処理制御部113は、ブロックA53のハッシュ処理が終わったことを受けて、ハッシュ初期値選択信号Y128をデアサートする。
以上により、TB60において、ハッシュ中間値保持部A109はハッシュ中間値HA53を保持し、ハッシュ中間値保持部B110はハッシュ値HBを保持する。
以降、DMAC203は、TB60〜TB100においてブロックA55〜A95をメモリ202からハッシュ処理回路100にDMA転送する。このとき、ブロックカウンタ137はカウンタ値BCを3〜43までカウントアップする。また、ハッシュ処理回路100は、TB60〜TB101においてブロックA54〜A95に対するハッシュ処理を行う。この間、ハッシュ処理制御部113は、レジスタ116の『メッセージ識別子』領域が“メッセージAを処理する”旨を示しているのでハッシュ値Bロード信号130をアサートせず、ハッシュ値Aロード信号129を適宜アサートする。そのため、ハッシュ中間値保持部B110はメッセージAのハッシュ中間値を保持せず、ハッシュ中間値保持部A109がメッセージAのハッシュ中間値を保持する。また、ハッシュ処理制御部113は、レジスタ116の『メッセージ識別子』領域が“メッセージAを処理する”旨を示しているのでメッセージ選択信号A131をアサートしている。そのため、セレクタ111は、ハッシュ中間値保持部A109の出力とハッシュ中間値保持部B110の出力のうち、ハッシュ中間値保持部A109の出力を出力する。その他の処理は他のブロックに対する処理と同様である。
この結果、TB102においてハッシュ中間値保持部A109は、メッセージAのブロックA0〜ブロックA95に対するハッシュ中間値HA95を保持する。メッセージAは図5に示すようにブロックA0〜A95で構成されるので、ハッシュ中間値HA95はメッセージAのハッシュ値HAとなる。TB102においてハッシュ処理制御部113はメッセージA選択信号131をアサートしている。そのためセレクタ111は、セレクタ111の入力であるハッシュ中間値保持部A109の出力(HA)とハッシュ中間値保持部B110の出力(HB)のうち、ハッシュ中間値保持部A109の出力(HA)をハッシュ値出力部114へ出力する。
ここで、レジスタ116の『メッセージ識別子』領域および『ブロック数』領域が保持する“メッセージAを処理する”および“43ブロック分処理する”要求を満したことになる。そこでハッシュ処理制御部113は、TB102においてレジスタ116の『ジョブ開始』領域が保持する“ハッシュ処理を開始する”フラグと、『処理継続』領域が保持する“ハッシュ中間値を用いる”フラグをクリアする。また、ハッシュ処理制御部113は、TB102においてDMAC203に対してDMAライトリクエスト信号122をアサートする。DMAC203はDMAライトアクノレッジ信号123を返すと共に、ハッシュ値HAをハッシュ値出力部114からメモリ202へ転送する。ハッシュ処理制御部113は、DMAC203がDMAライトアクノレッジ信号123をアサートする回数をカウントする。ハッシュ処理制御部113は、DMAC203がDMAライトアクノレッジ信号123を3回アサートしたことを確認して、DMAライトリクエスト信号122をデアサートする。
同じくTB102においてDMAC203は、ハッシュ処理装置100がDMAライトリクエスト信号122をデアサートしたのを検知し、割込信号206をアサートし、割込み制御部204に割込みを通知する。そして割込み制御部204は、不図示の割込信号によりCPU201にメモリ202へのハッシュ値HAの格納を通知する。
以上のように、本実施形態では、メッセージAの途中でメッセージBを先に処理するように、CPUは、第一のメッセージ、第二のメッセージ、第三のメッセージに対するハッシュ処理をハッシュ処理回路に対して順次要求する。ここで、第一のメッセージはA0〜A52、第二のメッセージはB0〜B3、第三のメッセージはA53〜A95である。そして、第一のメッセージに対するハッシュ処理の結果のハッシュ中間値をハッシュ処理回路内に保持し、第二のメッセージのハッシュ処理完了後に、保持した第一のメッセージのハッシュ中間値を用いて、第三のメッセージに対するハッシュ処理を行う。これにより、ハッシュ中間値を外部のメモリに一旦書き出して、再び読込んでいた従来の構成と比べて、外部メモリとのハッシュ中間値の送受信に要していたオーバーヘッド分の時間が削減され、高速に応答する効率的なハッシュ処理を実現できる。
また、本実施形態においては、メッセージの1ブロック分をハッシュ処理回路内に保持することにより、外部メモリからメッセージの各ブロックデータを転送するのに必要なオーバーヘッド時間が不要である。このため、より効率的なハッシュ処理を実現することができる。
なお、本実施形態においては、1つ前のブロックに対するハッシュ処理を完了した時点で、上記回路内に保持した1ブロック分のデータを拡張処理部にロードし、その後に、外部メモリから次の1ブロック分のデータ転送を要求している。しかし、これに限られず、例えば、当該ロードしたブロック分に対するハッシュ処理が完了するまで保持部で保持して、その後、次の1ブロック分のデータの転送要求をしてもよい。当該ブロックに対するハッシュ処理を途中で破棄した場合も、当該ブロックのデータが回路内に保持されているので、外部メモリから再度読込むオーバーヘッドを削減する効果があるためである。
また、本実施形態においては、ハッシュ関数としてSHA−1を用いた場合を一例として説明したが、ハッシュ関数はMD5、SHA−256等、他のアルゴリズムでもよいことは言うまでもない。
また、本実施形態においては、拡張メッセージはステップ毎に順次生成する構成としたが、最初に一括で生成しても構わない。
また、本実施形態においては、2種類のメッセージに対するハッシュ中間値を保持可能な構成としたが、3以上のハッシュ中間値保持部を設けることにより、3種類以上のメッセージに対するハッシュ処理を中断して、再開することできる。
また、本実施形態においては、1つのハッシュ中間値を保持可能なハッシュ中間値保持領域を有するハッシュ中間値保持部を複数備える構成としたが、これに限られない。例えば、複数のハッシュ中間値を保持可能なハッシュ中間値保持領域を有するハッシュ中間値保持部を1つあるいは複数備える構成としてもよい。
また、本実施形態においては、メッセージAのハッシュ中間値はハッシュ中間値保持部Aに、メッセージBのハッシュ中間値はハッシュ中間値保持部Bに保持するというように各メッセージのハッシュ中間値とハッシュ中間値保持部の対応は固定的だった。しかし、例えば、どのハッシュ中間値保持領域にどのメッセージのハッシュ中間値を保持するかの対応情報を保持する対応情報保持部を設け、当該対応情報保持部に保存した対応情報に基づいてハッシュ中間値保持領域を決定するようにしてもよい。
また、本実施形態においては、ハッシュ処理のうち、パディング処理はハッシュ回路の外部で、CPUが処理する構成としたが、ハッシュ回路内で処理する構成としても構わない。
また、本実施形態においては、ハッシュ処理回路と外部メモリとの間でメッセージ、ハッシュ値を入出力する手段としてDMACを用いたが、他の転送手段を用いてもよい。
また、本実施形態においては、DMA入出力データのビット幅が64ビットである場合の例を説明したが、他のビット数でもよいことは言うまでもない。
また、本実施形態においては、ハッシュ処理のステップ毎の処理と、DMA転送処理の基本処理期間Tは同一としたが、ステップ処理とDMA転送処理の基本処理期間は異なっていても構わない。
また、本実施形態では、CPUがメッセージのブロック数をハッシュ処理回路のレジスタに設定し、ハッシュ処理回路はDMAアクノレッジ信号をカウントすることにより、CPUが設定したブロック数のメッセージの供給を認識する例を説明した。しかし、メッセージの転送完了をCPUからレジスタ設定で通知する等、他の方法を用いてもよい。
なお、本発明の実施の形態は、上記構成に限定されるものでなく、種々に変更可能である。
<<実施形態2>>
実施形態1においては、処理継続、メッセージ識別子等の情報は、メッセージ毎にCPU201からハッシュ処理回路100のレジスタに設定されていた。本実施形態2においては、メッセージのデータに同期したサイドバンド信号である入力データアトリビュート信号内に上記処理継続、メッセージ識別子等の情報が含まれている場合を説明する。
(ハッシュ処理回路の構成)
図12は本実施形態2におけるハッシュ処理回路の構成を示した図である。以下、図12にもとづいて、実施形態1と異なる部分のみ説明する。
137はハッシュ処理回路100が受け取った第一のメッセージ(以下、メッセージAと呼ぶ)のブロック数をカウントするブロックカウンタである。140はハッシュ処理回路100が受け取った第ニのメッセージ(以下、メッセージBと呼ぶ)のブロック数をカウントするブロックカウンタXである。ハッシュ処理制御部113はメッセージを構成する所定数のブロックに対するハッシュ処理を完了したときに、ブロックカウンタ137あるいはブロックカウンタX140のカウンタ値をクリアする。139はDMAC203がDMA入力データ120と同期してハッシュ回路100に出力する入力データアトリビュート信号である。入力データアトリビュート信号の内容には、メッセージ識別子、処理継続が含まれる。
(レジスタの記憶内容)
図13は、本実施形態のハッシュ処理回路100内のレジスタ116が保持する情報を示す図である。以下、実施形態1と異なる部分のみ説明する。
レジスタ116は、メッセージ種別毎に、ジョブ開始、ブロック数、ハッシュ初期値の各情報の保持領域を有する。
本実施形態においては、CPU201は処理すべき複数のメッセージに対するジョブ開始、ブロック数、ハッシュ初期値の設定を、予めハッシュ処理回路100がジョブを開始する前に、レジスタ116に書き込む。
実施形態1においては、CPU201はメッセージAのハッシュ処理を途中で中断して、メッセージBのハッシュ処理を行うように処理要求することを予め決定していた。つまり、ハッシュ処理回路100に対して、メッセージAをブロックA0〜A52から成るメッセージと、ブロックA53〜A95から成るメッセージの2つのメッセージとして処理要求を出すものとした。本実施形態においては、CPU201はハッシュ処理すべき複数のメッセージに対する情報を最初にハッシュ処理回路100にレジスタ設定する。即ち、ブロック数96のメッセージAとブロック数4のメッセージBの情報を上記レジスタ116の所定の領域に設定する。そして、CPU201が上記レジスタ設定し、ハッシュ処理回路100が当該処理要求に対するハッシュ処理開始後に、CPU201はメッセージAのハッシュ処理を途中で中断することを決定する。さらに、メッセージAのブロック52以降にブロックB0からメッセージBのデータをハッシュ処理回路に転送するように、DMAC203を制御する。
そして、ハッシュ処理回路100は、レジスタ設定された複数のメッセージに対して、入力データアトリビュート信号139のメッセージ識別子、処理継続の情報に応じて、各メッセージ種別、処理継続有無を判定する。さらに、各メッセージ毎に適宜ハッシュ処理を行う。
また、ハッシュ処理回路100は、
・各メッセージの転送ブロック数をカウントするブロックカウンタ137のカウンタ値BC。
・アトリビュート情報のメッセージ識別子。
により、メッセージAに対してレジスタ設定されたブロック数96のデータ受信以前にメッセージBのブロックデータを受信したことを検知し、メッセージAのハッシュ処理を中断すべきことを判定する。
(ハッシュ処理)
図14は、2つのメッセージ(A0〜A95、B0〜B3)が図6に示した順番で入力する場合の本実施形態のハッシュ処理の動作フローを示した図である。
ST201において、CPU201は第一のメッセージ(A0〜A95)に対する処理要求を、ハッシュ処理回路100のレジスタ116に設定する。
ST202において、CPU201は第ニのメッセージ(B0〜B3)に対する処理要求を、ハッシュ処理回路100のレジスタ116に設定する。
ST203において、ハッシュ処理回路100はメッセージの1ブロック分のデータをDMAC203対して、リードリクエストを出して読込む。
ST204において、読込んだブロックデータのメッセージをアトリビュート信号のメッセージ識別子により判定し、メッセージ識別子がメッセージAを示す場合はST205に進み、メッセージBを示す場合はST209に進む。
ST205において、ハッシュ処理回路100は1つ前のブロックに対するハッシュ処理中か否かを判定し、ハッシュ処理中の場合は当該ブロックのハッシュ処理が完了するまで待ち、ハッシュ処理が完了している場合はST206に進む。
ST206において、ハッシュ処理回路100は第一のメッセージ(A0〜A95)の1ブロックに対するハッシュ処理を行う。
ST207において、総ブロック数96の第一のメッセージ(A0〜A95)に対するハッシュ処理が完了したか判定し、完了している場合はST208に進み、完了していない場合はST203に戻る。
ST208において、ハッシュ処理回路100はDMAC203にライトリクエストして第一のメッセージ(A0〜A95)に対するハッシュ値を出力する。
ST209において、ハッシュ処理回路100は1つ前のブロックに対するハッシュ処理中か否かを判定し、ハッシュ処理中の場合は当該ブロックのハッシュ処理が完了するまで待ち、ハッシュ処理が完了している場合はST210に進む。
ST210において、ハッシュ処理回路100は第ニのメッセージ(B0〜B3)の1ブロックに対するハッシュ処理を行う。
ST211において、総ブロック数4の第ニのメッセージ(B0〜B3)に対するハッシュ処理が完了したか判定し、完了している場合はST212に進み、完了していない場合はST203に戻る。
ST212において、ハッシュ処理回路100はDMAC203にライトリクエストして第ニのメッセージ(B0〜B3)に対するハッシュ値を出力する。
ST213において、他のメッセージの処理が完了しているか判定し、完了している場合は処理を終了し、完了していない場合はST203に戻る。
本実施形態においては、実施形態1と同様に、不図示のT006からのT007において、CPU201がバス205、バス信号117を経由して、レジスタ116を設定する。ここでは、図12に示したレジスタ116のメッセージA用の『ジョブ開始』領域に“ハッシュ処理を開始する”フラグを立てる。さらに、『ブロック数』領域に“96ブロック分処理する”こと、『ハッシュ初期値』領域に“SHA−1アルゴリズムの初期値”を設定する。同様に、メッセージB用の『ジョブ開始』領域に“ハッシュ処理を開始する”フラグを立てると共に、『ブロック数』領域に“4ブロック分処理する”こと、『ハッシュ初期値』領域に“SHA−1アルゴリズムの初期値”を設定する。
その後、ハッシュ処理回路100はDMAC203がメモリから転送するメッセージのDMA入力データ120と入力データアトリビュート信号139を受信する。入力データアトリビュート信号139のメッセージ識別子、処理継続の情報、および、メッセージ毎にレジスタ内に保持する総ブロック数とDMA転送ブロック数に従って、メッセージ毎のハッシュ処理を適宜実行する。
(ハッシュ処理の詳細)
図15、図16は本実施形態の、ハッシュ処理の各ステップ単位の動作を示したタイミングチャートである。各々メッセージAからメッセージBに切替わる部分およびメッセージBからメッセージAに切替わる部分を示している。以下、実施形態1と異なる部分のみ説明する。
T000からT4237までの処理は実施形態1と同様である。T4237において加算処理部107は、内部状態変数値SA51_79とハッシュ中間値HA50を入力して加算処理をし、ハッシュ中間値HA51を出力する。そしてT4238において、ハッシュ中間値保持部A109がハッシュ中間値HA51を保持する。
T4237において、ハッシュ処理制御部113がブロックロード信号124をアサートする。拡張メッセージ保持部102はブロックロード信号124のアサートを検知し、T4238において、メッセージ保持部101が保持するブロックA52を読み込む。
ここでブロックA52の転送終了後にメモリ202からハッシュ処理回路100にメッセージBの転送を開始するように、CPU201がDMAC203を制御したとする。T4238においてハッシュ処理制御部113は、メッセージ保持部101が保持していたブロックA52のデータを拡張メッセージ保持部102が保持したことを受けて、次ブロックのデータをリードすべくDMAリードリクエスト信号122をアサートする。
T4238からT4318において、ブロックA52に対するハッシュ処理がおこなわれる。
一方、T4239からT4253においてDMAC203は、DMAデータリードアクノレッジ信号123を返すと同時に、メモリ202からブロックB0をハッシュ処理回路100に転送する。そしてT4254においてメッセージ保持部101が、ブロックB0を保持する。また、ブロックB0の読み込みと同時に、ハッシュ処理制御部113は、入力データアトリビュート信号139を読み込み、“メッセージBである”こと、“内部状態変数値の初期値を用いる”ことを識別する。また、ブロックカウンタX140はカウンタ値をBCXとすると、メッセージBのブロックB0に対応するカウンタ値BCXを1にカウントアップする。ブロックカウンタ137はメッセージAのブロックA52に対応するカウンタ値BCとして53を保持する。
T4319においてハッシュ中間値保持部A109はハッシュ中間値HA52を保持する。ここで総ブロック数96のメッセージAに対するハッシュ処理は先頭ブロックから53ブロック分までしか完了していない為、T4319においてハッシュ処理制御部113は、DMAライトリクエスト信号122をアサートしない。また、DMAC203はハッシュ中間値HA52をハッシュ処理装置100からメモリ202へDMA転送しない。
(ブロック単位の動作)
図17Aと図17B(以下、まとめて図17)は本実施形態の、ハッシュ処理の各ブロック単位の動作を示したタイミングチャートである。尚、一部ステップ処理期間毎の詳細動作も説明する。
TB52において、データリードをするために、ハッシュ処理制御部113がDMAC203に対してDMAリードリクエスト信号122をアサートする。DMAC203は、DMAリードアクノレッジ信号123を返すと共にメッセージBの先頭ブロックB0をハッシュ処理装置100にDMA転送、メッセージ保持部101がブロックB0を保持する。
TB53において、ブロックB1のDMA転送およびブロックB0に対するハッシュ処理を行う。TB54において、ハッシュ処理制御部113はハッシュ中間値Bロード信号130をアサートしているので、ハッシュ中間値保持部B110は、TB53において求まったハッシュ中間値HB0を保持する。また、ハッシュ処理制御部113はメッセージA選択信号131をデアサートしている。そこでセレクタ111は、ハッシュ中間値保持部A109の出力とハッシュ中間値保持部B110の出力のうち、ハッシュ中間値保持部B110の出力(HB0)をハッシュ値出力部114へ出力する。
以上により、TB54において、ハッシュ中間値保持部A109はハッシュ中間値HA52を保持し、ハッシュ中間値保持部B110はハッシュ中間値HB0を保持する。
ブロックB1に対するハッシュ処理は、ハッシュ中間値保持部B110が保持するハッシュ中間値HB0を用いて、TB54においておこなわれる。
以降、DMAC203は、TB54〜TB55においてブロックB2〜B3をメモリ202からハッシュ処理回路100にDMA転送する。
ここで、ブロックB3の転送終了後にメモリ202からハッシュ処理回路100に対してメッセージAの残りのデータ転送を再開するように、CPU201がDMAC203を制御したとする。そこでDMAC203は、TB56においてメッセージAを構成するブロックであるブロックA53をメモリ202からハッシュ処理回路100にDMA転送する。このとき、DMAC203は、メッセージAに対する入力データアトリビュート信号139内の処理継続情報として“ハッシュ中間値を用いる”ことを示す値を送信する。DMAC203がブロックA53の転送を完了し、ハッシュ処理回路100がブロックA53のデータを保持した後、ハッシュ処理制御部113は、入力データアトリビュート信号139を読み込む。そして、“メッセージAである”こと、“ハッシュ中間値を用いる”ことを識別する。また、ブロックカウンタX140はカウンタ値BCXとして4を保持する。ブロックカウンタ139はメッセージAのブロックA53に対応してカウンタ値BCを54にカウントアップする。尚、実施形態1においては、メッセージBのハッシュ処理完了の後、メッセージAのブロックA53からA95に対するレジスタ設定をおこなった後に、ブロックA53の転送を実施した。これに対して、本実施形態においてはブロックA53の転送はメッセージBのハッシュ処理完了前に実施可能となっている。
また、ハッシュ処理回路100は、TB54〜TB56においてブロックB1〜B3に対するハッシュ処理を行う。この間、ハッシュ処理制御部113はハッシュ中間値Aロード信号129をアサートせず、ハッシュ中間値Bロード信号130を適宜アサートする。そのため、ハッシュ中間値保持部A109はメッセージBのハッシュ中間値を保持せず、ハッシュ中間値保持部B110がメッセージBのハッシュ中間値を保持する。また、ハッシュ処理制御部113はメッセージA選択信号131をデアサートしている。そのため、セレクタ111は、ハッシュ中間値保持部A109の出力とハッシュ中間値保持部B110の出力のうち、ハッシュ中間値保持部B110の出力を出力する。その他の処理はブロックA1〜A3に対する処理と同様である。
この結果、TB54〜TB56においてハッシュ処理回路100はハッシュ中間値HB1〜HB3を求める。
TB57において、ハッシュ中間値保持部A109はメッセージAのブロックA0〜A52のハッシュ中間値HA52を保持し、ハッシュ中間値保持部B110はメッセージBのブロックB0〜B3に対するハッシュ中間値HB3を保持する。メッセージBは図5に示すようにブロックB0〜B3で構成されるので、ハッシュ中間値HB3はメッセージBのハッシュ値HBとなる。TB57においてハッシュ処理制御部113はメッセージA選択信号131をデアサートしている。そのためセレクタ111は、セレクタ111の入力であるハッシュ中間値保持部A109の出力(HA52)とハッシュ中間値保持部B110の出力(HB)のうち、ハッシュ中間値保持部B110の出力(HB)をハッシュ値出力部114へ出力する。
ここで、レジスタ116のメッセージB用の『ブロック数』領域が保持する“4ブロック分処理する”要求を満したことになる。そこでハッシュ処理制御部113は、TB57においてレジスタ116の『ジョブ開始』領域が保持する“ハッシュ処理を開始する”フラグをクリアする。また、ブロックカウンタ140のカウンタ値BCXをクリアする。
また、ハッシュ処理制御部113は、TB57においてDMAC203に対してDMAライトリクエスト信号122をアサートする。DMAC203はDMAライトアクノレッジ信号123を返すと共に、ハッシュ値HBをハッシュ値出力部114からメモリ202へ転送する。ハッシュ処理制御部113は、DMAC203がDMAライトアクノレッジ信号123をアサートする回数をカウントする。ハッシュ処理制御部113は、DMAC203がDMAライトアクノレッジ信号123を3回アサートしたことを確認して、DMAライトリクエスト信号122をデアサートする。
同じくTB57においてDMAC203は、ハッシュ処理装置100がDMAライトリクエスト信号122をデアサートしたのを検知し、割込信号206をアサートし、割込み制御部204に割込みを通知する。そして割込み制御部204は、不図示の割込信号によりCPU201にメモリ202へのハッシュ値HBの格納を通知する。
同じくTB57において、CPU201はDMAC203からの割込みによって“メッセージB”を“4ブロック分”、“内部状態変数値の初期値を用いて”処理し終わったことを検知する。
また、TB57において、ブロックA54のDMA転送およびブロックA53に対するハッシュ処理を行う。以降、DMAC203は、TB58〜TB98においてブロックA55〜A95をメモリ202からハッシュ処理回路100にDMA転送する。また、ハッシュ処理回路100は、TB58〜TB99においてブロックA54〜A95に対するハッシュ処理を行う。この間、ハッシュ処理制御部113はハッシュ中間値Bロード信号130をアサートせず、ハッシュ中間値Aロード信号129を適宜アサートする。そのため、ハッシュ中間値保持部B110はメッセージAのハッシュ中間値を保持せず、ハッシュ中間値保持部A109がメッセージAのハッシュ中間値を保持する。また、ハッシュ処理制御部113はメッセージA選択信号131をアサートしている。そのため、セレクタ111は、ハッシュ中間値保持部A109の出力とハッシュ中間値保持部B110の出力のうち、ハッシュ中間値保持部A109の出力を出力する。その他の処理は他のブロックに対する処理と同様である。
この結果、TB100においてハッシュ中間値保持部A109は、ブロックA0〜ブロックA95に対するハッシュ中間値HA95を保持する。メッセージAは図5に示すようにブロックA0〜A95で構成されるので、ハッシュ中間値HA95はメッセージAのハッシュ値HAとなる。TB100においてハッシュ処理制御部113はメッセージA選択信号131をアサートしている。そのためセレクタ111は、セレクタ111の入力であるハッシュ中間値保持部A109の出力(HA)とハッシュ中間値保持部B110の出力(HB)のうち、ハッシュ中間値保持部A109の出力(HA)をハッシュ値出力部114へ出力する。
ここで、レジスタ116のメッセージA用の『ブロック数』領域が保持する“96ブロック分処理する”要求を満したことになる。そこでハッシュ処理制御部113は、TB100においてレジスタ116の『ジョブ開始』領域が保持する“ハッシュ処理を開始する”フラグをクリアする。また、ブロックカウンタ137のカウンタ値BCをクリアする。
また、ハッシュ処理制御部113は、TB100においてDMAC203に対してDMAライトリクエスト信号122をアサートする。DMAC203はDMAライトアクノレッジ信号123を返すと共に、ハッシュ値HAをハッシュ値出力部114からメモリ202へ転送する。ハッシュ処理制御部113は、DMAC203がDMAライトアクノレッジ信号123をアサートする回数をカウントする。ハッシュ処理制御部113は、DMAC203がDMAライトアクノレッジ信号123を3回アサートしたことを確認して、DMAライトリクエスト信号122をデアサートする。
同じくTB100においてDMAC203は、ハッシュ処理装置100がDMAライトリクエスト信号122をデアサートしたのを検知し、割込信号206をアサートし、割込み制御部204に割込みを通知する。そして割込み制御部204は、不図示の割込信号によりCPU201にメモリ202へのハッシュ値HAの格納を通知する。
同じくTB100において、CPU201はDMAC203からの割込みによって“メッセージA”を“96ブロック分”、“内部状態変数値の初期値を用いて”処理し終わったことを検知する。
以上、説明したように、本実施形態において、メッセージ識別子、処理継続の情報をメッセージのデータに付帯する入力データアトリビュート信号から抽出して識別する。これにより、第一のメッセージに対するハッシュ処理を途中で中断して、別の第二のメッセージに対するハッシュ処理を先に行う場合、実施形態1に比して、ハッシュ処理期間をさらに短縮することができる。すなわち、第一のメッセージの途中のブロックまでのハッシュ処理後に要していたハッシュ処理結果(ハッシュ中間値)のメモリへのDMA転送とメッセージ毎のハッシュ処理の開始時に要していたメッセージに対するレジスタ設定の時間を削減できる。また、第二のメッセージに対するハッシュ処理の完了時期をより早くすることができた。
具体的には、実施形態1におけるステップ毎のハッシュ処理のタイミングチャートを示した図9において、メッセージBのハッシュ値はTB58内のT4669の時点で出力されている。これに対して、実施形態2におけるステップ毎のハッシュ処理のタイミングチャートを示した図14において、メッセージBのハッシュ値HB03はTB57内のT4643の時点で出力されている。
実施形態2では実施形態1に比して、実施形態1のTB53の期間に対応する26基本処理期間分短縮されている。また、第一のメッセージの未処理部分の最初のブロックのDMA転送期間を第二のメッセージのハッシュ処理期間に隠蔽することができ、第一のメッセージの再開処理も実施形態1よりも早くすることができた。具体的には、図11において、実施形態1におけるメッセージAの先頭ブロックからブロックA53までのハッシュ中間値HA53はTB60内のT4776の時点で出力されている。これに対して、図16において、実施形態2におけるメッセージAの先頭ブロックからブロックA53までのハッシュ中間値HA53はTB58内のT4724の時点で出力されている。実施形態2では実施形態1に比して、実施形態1のTB53の期間とTB58の期間の和に対応する52基本処理期間分短縮されている。
なお、本実施形態においては、1つ前のブロックに対するハッシュ処理を完了した時点で、上記回路内に保持した1ブロック分のデータを拡張処理部にロードし、ロード後に、外部メモリからの次の1ブロック分のデータの転送を要求している。処理期間は増えるが、当該ロードした1ブロックに対するハッシュ処理が完了するまで当該ブロックのデータを保持部で保持して、その後、次の1ブロック分のデータの転送要求をしてもよい。このとき、当該ブロックに対するハッシュ処理を途中で破棄した場合も、当該ブロックのデータが回路内に保持されているので、外部メモリから再度読込むオーバーヘッドを削減する効果はある。
また、本実施形態においては、ハッシュ関数としてはSHA−1を用いたが、ハッシュ関数はMD5、SHA−256等、他のアルゴリズムであってもよいことは言うまでもない。
また、本実施形態においては、拡張メッセージはステップ毎に順次生成する構成としたが、最初に一括で生成する構成としても構わない。
また、本実施形態においては、2種類のメッセージに対するハッシュ中間値を保持可能な構成としたが、これに限られない。例えば、3以上のハッシュ中間値保持部、ブロックカウンタ、レジスタ設定領域等を設けることにより、2種類以上のメッセージに対するハッシュ処理を中断して、再開することできる。
また、本実施形態においては、1つのハッシュ中間値を保持可能なハッシュ中間値保持領域を有するハッシュ中間値保持部を複数備える構成としたが、これに限られない。例えば、複数のハッシュ中間値を保持可能なハッシュ中間値保持領域を有するハッシュ中間値保持部を1つあるいは複数備える構成としてもよい。
また、本実施形態では、メッセージAのハッシュ中間値はハッシュ中間値保持部Aに、メッセージBのハッシュ中間値はハッシュ中間値保持部Bに保持するというように各メッセージのハッシュ中間値とハッシュ中間値保持部の対応は固定的であるものとした。しかし、どのハッシュ中間値保持領域にどのメッセージのハッシュ中間値を保持するかの対応情報を保持するハッシュ中間値保持情報保持部を設け、当該ハッシュ中間値保持情報保持部に保存した対応情報に基づいてハッシュ中間値保持領域を決定してもよい。
また、本実施形態においては、ハッシュ処理のうち、パディング処理はハッシュ回路の外部で、CPUが処理する構成としたが、ハッシュ回路内で処理する構成としても構わない。
また、本実施形態においては、ハッシュ処理回路と外部メモリとの間でメッセージ、ハッシュ値を入出力する手段としてDMACを用いたが、他の転送手段を用いてもよい。
また、本実施形態においては、DMA入出力データは64ビットであるとしたが、他のビット数であってもよいことは言うまでもない。
また、本実施形態においては、ハッシュ処理のステップ毎の処理と、DMA転送処理の基本処理期間Tは同一としたが、ステップ処理とDMA転送処理の基本処理期間は異なっていても構わない。
また、本実施形態においては、入力データアトリビュート信号にはメッセージ識別子、処理継続の情報を含むものとし、データ幅は8ビットであるとした。ただし、入力データアトリビュート情報としては他のメッセージ優先度等の情報を含んでもよく、情報に応じて信号のデータ幅が変わってもよい。
また、本実施形態においては、ハッシュ処理回路が入力メッセージのブロック番号をメッセージ毎の入力ブロック数をカウントして識別するものとしたが、入力データアトリビュート信号としてブロック番号が付帯している構成としてもよい。
また、本実施形態においては、CPUがメッセージのブロック数をハッシュ処理回路のレジスタに設定し、ハッシュ処理回路はDMAアクノレッジ信号をカウントすることにより、CPUが設定したブロック数のメッセージの供給を認識するものとした。ただし、メッセージの転送完了をCPUからレジスタ設定で通知する等他の方法を用いてもよい。
また、本実施形態においては、ハッシュ処理対象のメッセージとしてメッセージAとメッセージBに関して最初にレジスタ設定してそれ以降入力メッセージに応じてメッセージAあるいはメッセージBに対するハッシュ処理を行うものとした。しかし、例えば、上記メッセージAあるいはメッセージBに対するハッシュ処理の途中でメッセージCに対するハッシュ処理を開始する必要が生じた場合は、メッセージCに対するハッシュ処理要求のレジスタ設定を途中で追加してもよい。この場合、以降、入力メッセージに応じてメッセージA、メッセージB、メッセージCに対するハッシュ処理を行うことができる。
なお、本発明の実施形態は上記に限定されるものでなく種々に変更可能である。
<<実施形態3>>
実施形態2においては、各メッセージに関する処理要求の情報として、CPUがジョブ開始、ブロック数、ハッシュ初期値をハッシュ処理回路内のレジスタに予め設定していた。本実施形態3においては、上記に加えてメッセージ優先度の情報もCPUがハッシュ処理回路内のレジスタに予め設定する。
(ハッシュ処理回路の構成)
図18は本実施形態におけるハッシュ処理回路の構成を示した図である。以下、図18にもとづいて、実施形態2と異なる部分のみ説明する。
141は、ブロックデータを保持するメッセージ保持部Xである。メッセージ保持部X141は、次の条件が全て満たされる場合に、ハッシュ処理完了時点で、メッセージ保持部101が保持する。
・メッセージ保持部101が保持するブロックデータのメッセージの優先度が低い。
・ハッシュ処理中のブロックのメッセージの優先度が低い。
・当該ハッシュ処理中のブロックを自らが保持している
142はメッセージ保持部101が保持しているメッセージのデータをメッセージ保持部Xにロードするためにハッシュ処理制御部113が出力するブロックロード信号Xである。143はメッセージ保持部X141が後述するセレクタ144へ出力するメッセージXである。144はメッセージ132とメッセージX143のうち、いずれか一方を選択して、拡張メッセージ保持部102へ出力するセレクタである。145はセレクタ144の制御信号としてハッシュ処理制御部113が出力するメッセージX選択信号である。
(レジスタの記憶内容)
図19は、本実施形態のハッシュ処理回路100内のレジスタ116が保持する情報を示す図である。以下、実施形態2と異なる部分のみ説明する。
レジスタ116は、メッセージ種別毎に、ジョブ開始、ブロック数、ハッシュ初期値、メッセージ優先度の各情報の保持領域を有する。
本実施形態においては、実施形態2と同様に、T006からのT007において、CPU201がバス205、バス信号117を経由して、レジスタ116を設定する。ここでは、図19に示したレジスタ116のメッセージA用の『ジョブ開始』領域に“ハッシュ処理を開始する”フラグを立てる。さらに、『ブロック数』領域に“96ブロック分処理する”こと、『ハッシュ初期値』領域に“SHA−1アルゴリズムの初期値”、『メッセージ優先度』領域に“低優先”を設定する。同様に、メッセージB用の『ジョブ開始』領域に“ハッシュ処理を開始する”フラグを立てる。さらに、『ブロック数』領域に“4ブロック分処理する”こと、『ハッシュ初期値』領域に“SHA−1アルゴリズムの初期値”、 『メッセージ優先度』領域に“高優先”を設定する。
その後、ハッシュ処理回路100はDMAC203がメモリから転送するメッセージのDMA入力データ120と入力データアトリビュート信号139を受信する。そして、入力データアトリビュート信号139のメッセージ識別子、処理継続の情報およびメッセージ毎にレジスタの所定領域が保持する総ブロック数とDMA転送ブロック数に従って、メッセージ毎のハッシュ処理を適宜実行する。
(ハッシュ処理)
図20は、2つのメッセージ(A0〜A95、B0〜B3)が図6に示した順番で入力する場合の本実施形態のハッシュ処理の動作フローを示した図である。
ST301において、CPU201は第一のメッセージ(A0〜A95)に対する処理要求を、ハッシュ処理回路100のレジスタ116に設定する。
ST302において、CPU201は第ニのメッセージ(B0〜B3)に対する処理要求を、ハッシュ処理回路100のレジスタ116に設定する。
ST303において、ハッシュ処理回路100はメッセージの1ブロック分のデータをDMAC203対して、リードリクエストを出して読込む。
ST304において、読込んだブロックデータのメッセージをアトリビュート信号のメッセージ識別子により判定し、メッセージ識別子がメッセージAを示す場合はST305に進み、メッセージBを示す場合はST312に進む。
ST305において、ハッシュ処理回路100は1つ前のブロックに対するハッシュ処理中か否かを判定し、ハッシュ処理中の場合は当該ブロックのハッシュ処理が完了するまで待ち、ハッシュ処理が完了している場合はST306に進む。
ST306において、ハッシュ処理回路100は、メッセージ保持部X141が低優先の第一のメッセージの破棄されたブロックを保持しているか判定する。メッセージ保持部Xが第一のメッセージの破棄されたブロックのデータを保持している場合はST307に進み、保持していない場合はST309に進む。
ST307において、ハッシュ処理回路100は低優先の第一のメッセージの破棄されたブロックに対するハッシュ処理を行う。
ST308において、総ブロック数96の第一のメッセージ(A0〜A95)に対するハッシュ処理が完了したか判定し、完了している場合はST311に進み、完了していない場合はST309に進む。
ST309において、ハッシュ処理回路100は第一のメッセージ(A0〜A95)の1ブロックに対するハッシュ処理を行う。
ST310において、総ブロック数96の第一のメッセージ(A0〜A95)に対するハッシュ処理が完了したか判定し、完了している場合はST311に進み、完了していない場合はST303に戻る。
ST311において、ハッシュ処理回路100はDMAC203にライトリクエストして第一のメッセージ(A0〜A95)に対するハッシュ値を出力する。
ST312において、ハッシュ処理回路100は1つ前のブロックが高優先の第二のメッセージであるか判定し、高優先の第二のメッセージである場合はST313に進み、低優先の第一のメッセージである場合はST314に進む。
ST313において、ハッシュ処理回路100は1つ前のブロックに対するハッシュ処理中か否かを判定し、ハッシュ処理中の場合は当該ブロックのハッシュ処理が完了するまで待ち、ハッシュ処理が完了している場合はST314に進む。
ST314において、ハッシュ処理回路100は第ニのメッセージ(B0〜B3)の1ブロックに対するハッシュ処理を行う。
ST315において、総ブロック数4の第ニのメッセージ(B0〜B3)に対するハッシュ処理が完了したか判定し、完了している場合はST316に進み、完了していない場合はST303に戻る。
ST316において、ハッシュ処理回路100はDMAC203にライトリクエストして第ニのメッセージ(B0〜B3)に対するハッシュ値を出力する。
ST317において、他のメッセージの処理が完了しているか判定し、完了している場合は処理を終了し、完了していない場合はST303に戻る。
(ハッシュ処理の詳細)
図21、図22、図23は本実施形態の、ハッシュ処理の各ステップ単位の動作を示したタイミングチャートである。各々メッセージAの先頭部分、メッセージAからメッセージBに切替わる部分およびメッセージBからメッセージAに切替わる部分を示している。以下、実施形態2と異なる部分のみ説明する。
T000からT024までの処理は実施形態2と同様である。T025において、ハッシュ処理制御部113はブロックロード信号124をアサートする。また、メッセージ保持部に保持されているメッセージAは低優先のため、ハッシュ処理制御部113はブロックロード信号124およびブロックロード信号X142をアサートする。メッセージ保持部X141はブロックロード信号X142のアサートを検知し、T026においてメッセージ保持部101が保持するブロックA0を読み込む。また、拡張メッセージ保持部102はブロックロード信号124のアサートを検知し、T026においてセレクタ144の出力を読み込む。このとき、ハッシュ処理制御部113がメッセージX選択信号145をアサートしていないので、セレクタ144はメッセージ132とメッセージX143のうち、メッセージ132を出力する。
T000からT4237では、原則として実施形態2と同様の処理を実行する。ただし、本実施形態では、メッセージの優先度の基づきメッセージ132をメッセージ保持部X141に保持し、メッセージ保持部101の出力とメッセージ保持部X141の出力のいずれかをセレクタ144で選択して拡張メッセージ保持部102に出力する。
T4237において、ハッシュ処理制御部113がブロックロード信号124をアサートする。拡張メッセージ保持部102はブロックロード信号124のアサートを検知し、T4238において、セレクタ144の出力であるメッセージ保持部102に保持されたブロックA52を読み込む。このとき、拡張メッセージ保持部102は、ブロックA52を16個の32ビットデータEA52_W00〜EA52_W15に分割して保持する。ハッシュ処理回路100はT4238からT4255までメッセージAのブロックA52に対するステップ0からステップ17の処理を行う。
同じくT4238においてハッシュ処理制御部113は、メッセージ保持部101が保持していたデータを拡張メッセージ保持部102が保持したことを受けて、次のブロックのデータをリードするためにDMAリードリクエスト信号122をアサートする。ハッシュ処理回路100は、T4238からT4253にかけてブロックB0をDMA転送で読み込み、T4254においてメッセージ保持部101はブロックB0を保持する。
T4255においてハッシュ処理制御部113は、入力データアトリビュート信号139のメッセージ識別子の情報によりメッセージBであることを検知する。さらに、レジスタ116の『メッセージ優先度』領域の情報によりメッセージBが“高優先”であることを検知する。そして、T4255まで処理していたメッセージAのブロック52に対するステップ処理を破棄して、高優先のメッセージBのハッシュ処理を先に行うために、ブロックロード信号124をアサートする。拡張メッセージ保持部102はブロックロード信号124のアサートを検知し、T4256において、セレクタ144の出力であるメッセージ保持部101に保持されたブロックB0を読み込む。このとき、T4255においてハッシュ処理制御部113は、ブロックロード信号X142をアサートしないので、メッセージ保持部X141はメッセージ保持部101の出力であるメッセージ132(ブロックB0)を読み込まない。
以後ハッシュ処理回路100は、T4256からT4579にかけてメッセージBに対するハッシュ処理をおこない、DMAC203は、T4580からT4585にかけてメッセージBのハッシュ値HBを出力する。
また、メッセージ保持部101に保持したメッセージBの最後のブロックB3を拡張メッセージ保持部102にロードしたことに応じて、T4499においてハッシュ制御処理部113はDMAリードリクエスト信号122をアサートする。これにより、次のメッセージのデータがリードされる。T4500からT4514にかけて、DMAC203はメッセージAのブロックA53をDMA転送し、T4515においてメッセージ保持部101はブロックA53を保持する。このとき、メッセージ保持部101が保持するメッセージAは低優先であるが、メッセージ保持部X141に保持しているデータのハッシュ処理は完了していないため、ハッシュ処理制御部113はブロックロード信号X142をアサートしない。従って、メッセージ保持部X141はメッセージ保持部101の出力であるメッセージ132(ブロックA53)を読み込まない。
また、T4500において入力データアトリビュート信号139を読み込み、ハッシュ処理制御部113はメッセージAの読み込みが再開したことを検知する。そこでT4501においてハッシュ処理制御部113はメッセージX選択信号145をアサートする。これにより、セレクタ144はメッセージ132とメッセージX143のうち、メッセージX143を出力する。T4579においてハッシュ処理制御部113は、ブロックロード信号124をアサートする。T4580において拡張メッセージ保持部102はブロックロード信号124のアサートを検知し、セレクタ144の出力であるメッセージX143(A52)を読み込む。そしてハッシュ処理制御部113は、T4580においてメッセージX選択信号145をデアサートする。T4580からは、先ほど途中で破棄したブロックA52の処理を再び行う。
(ブロック単位の動作)
図24Aと図24B(以下、まとめて図24)は本実施形態の、ハッシュ処理の各ブロック単位の動作を示したタイミングチャートである。
TB52において、DMAC203がハッシュ処理回路100にブロックB0をDMA転送するのは、実施形態2と同様である。しかし、DMAC203が、ハッシュ処理回路100からメッセージBのハッシュ値HBを転送するのはTB56内のT4580の時点となる。実施形態2においては、ハッシュ処理回路100はハッシュ値HBをTB57内のT4643の時点で出力していた。したがって、本実施形態3においてはメッセージBのハッシュ値の出力開始時期が実施形態2に比して63基本処理期間分短縮されている。なお、上記63基本処理期間は1ブロック処理期間81からメッセージBのブロックB0のデータを保持するのに要する18基本処理期間を引いた値となる。そして、この18処理期間は、途中で破棄したHA52のハッシュ処理をおこなっていた期間でもある。
一方、本実施形態においては、ハッシュ処理回路100はハッシュ中間値HA53をTB58内のT4742の時点で出力する。実施形態2においては、ハッシュ処理回路100はハッシュ中間値HA53をTB58内のT4724の時点で出力していた。したがって、本実施形態3においてはメッセージHA53のハッシュ値の出力開始時期は実施形態2に比して18基本処理期間遅延している。
また、本実施形態においては、メッセージBのメッセージ優先度が高優先であるが、これに限られない。メッセージBのメッセージ優先度がメッセージAと同様に低優先の場合は、実施形態2と同様に、ハッシュ処理回路100はブロックA52に対するハッシュ処理を途中で破棄しない。その代わり、ブロックA52のハッシュ中間値を生成後に、ブロックB0に対するハッシュ処理を行う。
以上のように、本実施形態では、対象メッセージをメッセージのデータに付帯する入力データアトリビュート信号から抽出して識別することおよびメッセージ保持部に保持したメッセージを更に保持する第二のメッセージ保持部を設けている。例えば、第一のメッセージに対するハッシュ処理の途中で中断して、別の第二のメッセージのハッシュ処理を先に行う場合を考える。本実施形態の構成によれば、実施形態2に比して、第二のメッセージのデータを保持するまでの間に処理中の第一のメッセージのあるブロックに対するハッシュ処理を破棄して、第二のメッセージの最初のブロックを優先的に処理することができる。したがって、第二のメッセージに対するハッシュ処理の完了時期をより早くすることができる。
また、本実施形態においては、ハッシュ関数としてはSHA−1を用いたが、ハッシュ関数はMD5、SHA−256等、他のアルゴリズムであってもよいことは言うまでもない。
また、本実施形態においては、拡張メッセージはステップ毎に順次生成する構成としたが、最初に一括で生成する構成としても構わない。
また、本実施形態においては、2種類のメッセージに対するハッシュ中間値を保持可能な構成としたがこれに限られない。例えば、3以上のハッシュ中間値保持部、ブロックカウンタ、レジスタ設定領域等を設けることにより、3種類以上のメッセージに対するハッシュ処理を中断して、再開することできる。また、本実施形態においては、1つのハッシュ中間値を保持可能なハッシュ中間値保持領域を有するハッシュ中間値保持部を複数備える構成としたがこれに限られない。例えば、複数のハッシュ中間値を保持可能なハッシュ中間値保持領域を有するハッシュ中間値保持部を1つあるいは複数備える構成としてもよい。
また、メッセージA、Bのハッシュ中間値はそれぞれハッシュ中間値保持部A、Bに保持するというように、各メッセージのハッシュ中間値とハッシュ中間値保持部の対応が固定的な場合を説明したが、これに限られない。例えば、どのハッシュ中間値保持領域にどのメッセージのハッシュ中間値を保持するかの対応情報を保持するハッシュ中間値保持情報保持部を設け、当該ハッシュ中間値保持情報保持部に保存した対応情報に基づいてハッシュ中間値保持領域を決定してもよい。
また、本実施形態においては、メッセージ優先度は高優先、低優先の2段階としたが、メッセージ優先度は3段階以上にして、より優先度の高いメッセージの処理を優先的にハッシュ処理するような構成にしてもよい。
また、本実施形態においては、第一のメッセージ保持部に保持したメッセージを更に保持するメッセージ保持部を1つ備える構成としたが、これに限られない。例えば、優先度の段階数、ハッシュ中間値保持部の数に応じて、第一のメッセージ保持部に加えて2以上のメッセージ保持部を備える構成としてもよい。
また、本実施形態においては、ハッシュ処理のうち、パディング処理はハッシュ回路の外部で、CPUが処理する構成としたが、ハッシュ回路内で処理する構成としても構わない。
また、本実施形態においては、ハッシュ処理回路と外部メモリとの間でメッセージ、ハッシュ値を入出力する手段としてDMACを用いたが、他の転送手段を用いてもよい。
また、本実施形態においては、DMA入出力データは64ビットであるとしたが、他のビット数であってもよいことは言うまでもない。
また、本実施形態においては、ハッシュ処理のステップ毎の処理と、DMA転送処理の基本処理期間Tは同一としたが、ステップ処理とDMA転送処理の基本処理期間は異なっていても構わない。
また、本実施形態においては、メッセージ優先度は予め処理要求の情報としてCPUがレジスタの所定領域に設定するものとしたが、入力データアトリビュート信号にメッセージ優先度を含めてもよい。
また、本実施形態においては、入力データアトリビュート信号にはメッセージ識別、処理継続の情報を含むものとし、データ幅は8ビットであるとしたが、これに限られない。例えば、入力データアトリビュート情報としては他のメッセージ優先度、ブロック識別子等の情報を含んでもよく、情報に応じて信号のデータ幅が変わってもよい。
また、本実施形態においては、ハッシュ処理回路が入力メッセージのブロック番号をメッセージ毎の入力ブロック数をカウントして識別するものとしたが、入力データアトリビュート信号としてブロック番号が付帯している構成としてもよい。
また、本実施形態では、CPUがメッセージのブロック数をハッシュ処理回路のレジスタに設定し、ハッシュ処理回路はメッセージ毎にDMAアクノレッジ信号をカウントすることにより、CPUが設定したブロック数のメッセージの供給を認識する。しかし、これに限られず、例えば、メッセージの転送完了をCPUからレジスタ設定で通知する等他の方法を用いてもよい。
また、本実施形態においては、レジスタの所定領域が保持するメッセージ優先度の情報により、低優先のメッセージのブロックに対するハッシュ処理を途中で破棄するようにしたが、これに限られない。例えば、アトリビュート信号中のメッセージ識別子にメッセージ優先度の意味を兼ねさせる、あるいは、他の処理中断指示信号を入力することにより、高優先のメッセージを優先して処理中のメッセージに対するハッシュ処理の破棄を判断してもよい。
また、本実施形態では、ハッシュ処理対象のメッセージとしてメッセージAとメッセージBに関して最初にレジスタ設定してそれ以降入力メッセージに応じてメッセージAあるいはメッセージBに対するハッシュ処理を行う場合を説明したがこれに限られない。例えば、上記メッセージAあるいはメッセージBに対するハッシュ処理の途中でメッセージCに対するハッシュ処理を開始する必要が生じた場合を考える。この場合は、メッセージCに対するハッシュ処理要求のレジスタ設定を途中で追加すれば、以降、入力メッセージに応じてメッセージA、メッセージB、メッセージCに対するハッシュ処理を行うことができる。
なお、本発明の実施形態は上記に限定されるものでなく、種々に変更可能である。
上記のように、実施形態1〜3の構成によれば、ブロック単位で被処理メッセージを選択してハッシュ処理を行う際のオーバーヘッドを軽減することができると共に、ハッシュ処理の安全性を維持することができる。
<<実施形態4>>
(ハッシュ処理回路の構成)
図25は本発明の実施形態4におけるハッシュ処理回路の構成を示した図である。
100はハッシュ処理回路である。101はメッセージ保持部Aである。メッセージ保持部A101は、後述する外部のDMAコントローラが外部のメモリからハッシュ処理回路100にDMA転送する第一のメッセージの1ブロック分のデータを一時的に保持しておく。以下、外部のDMAコントローラをDMACと呼び、第一のメッセージをメッセージAと呼ぶ。
同様に、141はDMACが外部のメモリからハッシュ処理回路100にDMA転送する第ニのメッセージ(以下、メッセージBと呼ぶ)の1ブロック分のデータを一時的に保持しておくためのメッセージ保持部Bである。132はメッセージ保持部A101の出力のメッセージAである。143はメッセージ保持部B141の出力のメッセージBである。
102はメッセージAを拡張した拡張メッセージAを一時的に保持しておくための拡張メッセージ保持部A(第1の拡張メッセージ保持手段)である。146はメッセージBを拡張した拡張メッセージBを一時的に保持しておくための拡張メッセージ保持部B(第2の拡張メッセージ保持手段)である。149は拡張メッセージ保持部A102の出力の拡張メッセージAである。150は拡張メッセージ保持部B146の出力の拡張メッセージBである。144は拡張メッセージA149と拡張メッセージB150のうち、いずれか一方を選択して、後述するメッセージ拡張処理部103へ出力するセレクタである。133はセレクタ144の出力の拡張メッセージである。103は拡張メッセージ133を入力し、メッセージ拡張処理を行うメッセージ拡張処理部である。104は入力メッセージの各ブロックに対するステップ0からステップ79のステップ処理を1ステップ単位で順次行うステップ処理部である。
105はステップ処理部104で処理する内部状態変数値を選択するセレクタである。106はメッセージAに関するステップ処理部104の出力である内部状態変数値を一時的に保持する内部状態変数値保持部A(第1の変数値保持手段)である。151はメッセージBに関するステップ処理部104の出力である内部状態変数値を一時的に保持する内部状態変数値保持部B(第2の変数値保持手段)である。152は内部状態変数値保持部A106の出力の内部状態変数値Aである。153は内部状態変数値保持部B151の出力である内部状態変数値Bである。154は内部状態変数値A152と内部状態変数値B153のうち、いずれか一方を選択して、セレクタ105へ出力するセレクタである。134はセレクタ154の出力である内部状態変数値である。
107は全ステップ分の処理終了後の内部状態変数値と前のブロックまでのハッシュ中間値を加算処理するための加算処理部である。108は加算処理部107に入力するハッシュ中間値として、ハッシュ初期値126と後述するハッシュ中間値119のうち、いずれか一方を選択するセレクタである。109はメッセージAに関する加算処理部107の出力であるハッシュ中間値を保持するハッシュ中間値保持部Aである。135はハッシュ中間値保持部Aの出力のハッシュ中間値Aである。110はメッセージBに関する加算処理部107の出力であるハッシュ中間値を保持するハッシュ中間値保持部Bである。136はハッシュ中間値保持部Bの出力のハッシュ中間値Bである。
111はハッシュ中間値A135とハッシュ中間値B136のうち、いずれか一方を選択するセレクタである。119はセレクタ111の出力のハッシュ中間値である。112は前のブロックまでのハッシュ処理の結果であるハッシュ中間値119とハッシュ初期値126のうち、いずれか一方を選択するセレクタである。113は外部のDMACあるいはCPUとの間のデータ送受信およびハッシュ処理を制御するための各種信号を生成するハッシュ処理制御部である。114はメッセージの区切り毎に160ビットのハッシュ中間値に32ビットのダミーデータを付加して、3つの64ビットのデータとしてハッシュ処理回路100の外部へDMA転送によって送信するためのハッシュ値出力部である。116はハッシュ処理回路100の外部のCPU等が設定する、ハッシュ処理回路100の動作パラメタを保持するレジスタである。
117はレジスタ116にデータを入出力するためのアドレス信号、データ信号、制御信号等からなるバス信号である。118はDMACとの間で送受信するDMAデータ/制御信号であり、後述するDMA入力データ、DMA出力データ、DMAリクエスト信号、DMAアクノレッジ信号からなる。119はセレクタ111によって選択されたハッシュ中間値である。120はDMACがハッシュ処理回路100に出力するDMA入力データであり、メッセージ保持部A101あるいはメッセージ保持部B141が当該DMA入力データを保持する。
121はハッシュ処理回路100がDMACへ出力するDMA出力データであり、ハッシュ値出力部114がハッシュ値あるいはハッシュ中間値を出力する。122はハッシュ回路100がDMACに出力するDMAリクエスト信号である。DMAリクエスト信号122は、ハッシュ処理制御回路113が入力データのリード、出力データのライト要求時に各々DMAリードリクエスト信号、DMAライトリクエスト信号をアサートする。
123はDMACがハッシュ処理回路100に出力するDMAアクノレッジ信号である。DMAアクノレッジ信号123は、DMACは入力データのリード要求に対してはDMAリードアクノレッジ信号のアサートと共に入力データを出力し、出力データのライト要求に対してはDMAライトアクノレッジ信号のアサートと共に出力データを取り込む。なお、上記DMAリクエスト信号122、DMAアクノレッジ信号123は、リード/ライトをまとめて示している。
124はブロックAロード信号である。
ブロックAロード信号124は、メッセージAに関するブロックに対するハッシュ処理の開始時に、メッセージ保持部A101が格納しているメッセージA132を拡張メッセージ保持部102にロードするためにハッシュ処理制御部113から出力される。ここで、メッセージA132は、0番目から15番目の拡張メッセージに相当する。
142はブロックBロード信号である。ブロックBロード信号142は、メッセージBに関するブロックに対するハッシュ処理の開始時に、メッセージ保持部B141が格納している拡張メッセージB156を拡張メッセージ保持部B146にロードするために、ハッシュ処理制御部113が出力する。拡張メッセージB156は、0番目から15番目の拡張メッセージに相当する。
125はセレクタ105の制御信号としてハッシュ処理制御部113が出力するハッシュ中間値選択信号である。
126はレジスタ116に設定されたハッシュ処理の初期値を示す信号で、ハッシュ処理制御部113がセレクタ112に出力するハッシュ初期値である。127は、セレクタ112の制御信号としてハッシュ処理制御部113が出力するハッシュ初期値選択信号Xである。128は、セレクタ108の制御信号としてハッシュ処理制御部113が出力するハッシュ初期値選択信号Yである。129は、メッセージAに関する加算処理部107の出力をハッシュ中間値としてハッシュ中間値保持部A109にロードするためにハッシュ処理制御部113が出力するハッシュ中間値Aロード信号である。
130は、メッセージBに関する加算処理部107の出力をハッシュ中間値としてハッシュ中間値保持部B110にロードするためにハッシュ処理制御部113が出力するハッシュ中間値Bロード信号である。131は、セレクタ111の制御信号としてハッシュ処理制御部113が出力するメッセージA選択信号Xである。145は、セレクタ144の制御信号および内部状態変数値保持部A106のロード信号としてハッシュ処理制御部113が出力するメッセージA選択信号Yである。155はインバータであり、メッセージA選択信号Y145を入力して、反転出力のメッセージB選択信号Y155を出力する。137はハッシュ処理回路100が受け取ったメッセージAのブロック数をカウントするブロックカウンタAである。140はハッシュ処理回路100が受け取ったメッセージBのブロック数をカウントするブロックカウンタBである。ハッシュ処理制御部113はメッセージを構成する所定数のブロックに対するハッシュ処理を完了したときに、ブロックカウンタA137あるいはブロックカウンタB140のカウンタ値をクリアする。
138はメッセージAのブロック毎に処理するステップ数をカウントするステップカウンタAであり、所定数のステップをカウントしたときにクリアされる。157はメッセージBのブロック毎に処理するステップ数をカウントするステップカウンタBであり、所定数のステップをカウントしたときにクリアされる。なお、ブロックカウンタA137、ブロックカウンタB140のカウンタ値は、n番目(n=0、・・・)のブロック処理に対して(n+1)の値を示す。ステップカウンタA138、ステップカウンタB157のカウンタ値は、n番目(n=0、・・・、79)のステップ処理に対して(n+1)の値を示す。
139はDMAC203がDMA入力データ120と同期してハッシュ回路100に出力する入力データアトリビュート信号である。入力データアトリビュート信号の内容としては、メッセージ識別子、処理継続が含まれる。
『メッセージ識別子』は、DMACが送信するメッセージを所定の部分信号によって識別する識別子である。例えば、メッセージの種類が2種類の場合は、所定の部分信号が1なら“メッセージAを処理すること”、0なら“メッセージBを処理すること”を示す。
『処理継続』は、“内部状態変数値の初期値を用いる”か、あるいは、“ハッシュ中間値を用いる”かを、所定の部分信号によって識別する識別子である。ここで、“内部状態変数値の初期値を用いる”は、DMACが送信する当該メッセージに対するハッシュ処理に用いる内部状態変数値の初期値として、レジスタ116の『ハッシュ初期値』領域に保持することを意味する。“ハッシュ中間値を用いる”は、ハッシュ中間値保持部A109あるいはハッシュ中間値保持部B110が保持する当該メッセージを使用することを意味する。『処理継続』は、例えば、所定の部分信号が1なら“ハッシュ中間値を用いる”こと、0なら“ハッシュ初期値を用いる”ことを示すようにして表現することができる。
146は入力データアトリビュート信号の部分信号であり、DMACよりメッセージA出力時にオンするメッセージA識別信号である。147はインバータであり、メッセージA識別信号146を入力して、その反転出力であるメッセージB識別信号148を出力する。
本実施形態において、ハッシュ処理回路100は、ハッシュ処理のうち、パディング処理以外のメッセージ拡張処理、ステップ処理、加算処理を行う。パディング処理は、後述するハッシュ処理システム200のハッシュ処理回路100以外の部分、具体的には、後述するCPU201とメモリ202が行う。
(システム構成例)
図26はハッシュ処理回路100を動作させるためのシステムの構成例を示した図である。200はハッシュ処理システムである。201はハッシュ処理システム200の動作を制御するCPUである。202はハッシュ処理するメッセージ、ハッシュ値などを保持するためのメモリである。203はメモリ202からハッシュ処理回路100にメッセージを転送し、ハッシュ処理回路100からメモリ202にハッシュ値を転送するダイレクト・メモリ・アクセス・コントローラ(DMAC)である。204はハッシュ処理システム200の割込み信号を制御する割込み制御部である。205はハッシュ処理回路100、CPU201、メモリ202、DMAC203、割込み制御部204を接続するバスであり、アドレス信号、データ信号、制御信号等からなる。206はDMAC204から割込み制御部204への割込み信号である。本実施形態においては、DMAC203がハッシュ処理回路100からメモリ202へハッシュ値を転送したあとに、割込み信号206によってDMAC203から割込み制御部204に割込みを通知する。割込み制御部204は不図示の割込み信号により、CPU201にメモリへのハッシュ値格納を通知する。
(レジスタの記憶内容)
図27は、本実施形態のハッシュ処理回路100内のレジスタ116が保持する情報を示す図である。
レジスタ116は、メッセージ毎に、ジョブ開始、ブロック数、ハッシュ初期値、メッセージ優先度の各情報の保持領域を有する。『ジョブ開始』領域の情報は、他の『ブロック数』、『ハッシュ初期値』、『メッセージ優先度』領域に設定された情報に基づいて“ハッシュ処理を開始する”こと、あるいは、“ハッシュ処理を開始しない”ことを示す。例えば、各々当該領域内の所定bitの1、0によって示すことができる。以下、当該所定bitを1あるいは0に設定することを各々フラグを立てる、フラグをクリアすると呼ぶ。
CPU201は1つのメッセージに対するハッシュ処理要求毎に、“ハッシュ処理を開始する”ことを示す為に、ハッシュ処理回路100のレジスタ116の当該『ジョブ開始』領域の所定フラグを立てる。ハッシュ処理回路100は当該領域の所定フラグが立っている場合にハッシュ処理を開始する。そして、ハッシュ処理回路100は、処理中のメッセージに対するハッシュ処理が完了した時点で、“ハッシュ処理を開始しない”ことを示す為に当該フラグをクリアする。
『ブロック数』領域の情報は、処理要求の中のブロック数を当該領域内の所定bitによって示すものである。例えば、所定bitの示す値が処理するブロック数を示す場合は、所定bitの値が0x0004ならば処理するブロック数は4となる。
『ハッシュ初期値』領域の情報は、処理要求の中の内部状態変数値の初期値(ハッシュ初期値)を示すものである。SHA−1の場合、内部状態変数値は5つの32bitのデータから構成されるため、当該領域の所定の160bitによってハッシュ初期値を示す。尚、CPU201は当該『ハッシュ初期値』領域に、SHA−1のアルゴリズムの内部状態変数値の初期値を書き込んでもよいし、中断したハッシュ処理を再開して処理する為に、ハッシュ中間値に相当する値を書き込んでもよい。
『メッセージ優先度』領域の情報は、処理要求の優先度を当該領域内の所定bitによって示すものである。例えば、優先度が高低の2段階の場合は、当該領域内の所定bitが“0”の場合は低優先、“1”の場合は高優先となる。
尚、CPU201はハッシュ処理要求を有する複数のメッセージについて、レジスタ116内のメッセージごとの『ジョブ開始』、『メッセージ識別子』、『ブロック数』、『ハッシュ初期値』、『メッセージ優先度』領域に所定の値を書き込む。これによりハッシュ処理を開始する。
なお、メッセージの例は、実施形態1と同様に図5で示される。また、ハッシュ処理されるメッセージA及びメッセージBがメモリ203からハッシュ処理回路100に転送される場合の転送順序は、実施形態1と同様に図6で示される。
本実施形態においては、CPU201はハッシュ処理すべき複数のメッセージに対する情報を最初にハッシュ処理回路100にレジスタ設定する。即ち、ブロック数96のメッセージAとブロック数4のメッセージBの情報を上記レジスタ116の所定の領域に設定する。そして、CPU201が上記レジスタ設定し、ハッシュ処理回路100が当該処理要求に対するハッシュ処理開始後に、CPU201はメッセージAのハッシュ処理を途中で中断することを決定する。そして、メッセージAのブロック52以降にブロックB0からメッセージBのデータをハッシュ処理回路に転送するようにDMAC203を制御する。
そして、ハッシュ処理回路100は、レジスタ設定された複数のメッセージに対して、入力データアトリビュート信号139のメッセージ識別子、処理継続の情報に応じて、各メッセージ種別、処理継続有無を判定する。そして、各メッセージ毎に適宜ハッシュ処理を行う。また、ハッシュ処理回路100は、メッセージAに対してレジスタ設定されたブロック数96のデータ受信以前にメッセージBのブロックデータを受信したことを検知し、メッセージAのハッシュ処理を中断すべきことを判定する。ここで、メッセージBのブロックデータの受信検知は、各メッセージの転送ブロック数をカウントするブロックカウンタA137のカウンタ値BCAとアトリビュート情報のメッセージ識別子とに基づいて、行うことができる。
(ハッシュ処理)
図28は、本実施形態のハッシュ処理システムにおける、2つのメッセージ(A0〜A95、B0〜B3)が図6に示した順番で入力する場合の本実施形態のハッシュ処理の動作フローを示した図である。
ST401において、CPU201は第一のメッセージ(A0〜A95)に対する処理要求を、ハッシュ処理回路100のレジスタ116に設定する。
ST402において、CPU201は第ニのメッセージ(B0〜B3)に対する処理要求を、ハッシュ処理回路100のレジスタ116に設定する。
ST403において、ハッシュ処理回路100はメッセージの1ブロック分のデータをDMAC203対して、リードリクエストを出して読込む。
ST404において、読込んだブロックデータのメッセージをアトリビュート信号のメッセージ識別子により判定し、メッセージ識別子がメッセージAを示す場合はST405に進み、メッセージBを示す場合はST412に進む。
ST405において、ハッシュ処理回路100は1つ前のブロックに対するハッシュ処理中か否かを判定し、ハッシュ処理中の場合は当該ブロックのハッシュ処理が完了するまで待ち、ハッシュ処理が完了している場合はST406に進む。
ST406において、ハッシュ処理回路100は、メッセージ保持部A101が低優先の第一のメッセージのステップの区切りで中断されたブロックを保持しているか判定する。メッセージ保持部A101が第一のメッセージのステップの区切りで中断されたブロックのデータを保持している場合はST407に進み、保持していない場合はST409に進む。
ST407において、ハッシュ処理回路100は低優先の第一のメッセージのステップの区切りで中断されたブロックに対するハッシュ処理を行う。
ST408において、総ブロック数96の第一のメッセージ(A0〜A95)に対するハッシュ処理が完了したか判定し、完了している場合はST411に進み、完了していない場合はST409に進む。
ST409において、ハッシュ処理回路100は第一のメッセージ(A0〜A95)の1ブロックに対するハッシュ処理を行う。
ST410において、総ブロック数96の第一のメッセージ(A0〜A95)に対するハッシュ処理が完了したか判定し、完了している場合はST411に進み、完了していない場合はST403に戻る。
ST411において、ハッシュ処理回路100はDMAC203にライトリクエストして第一のメッセージ(A0〜A95)に対するハッシュ値を出力する。
ST412において、ハッシュ処理回路100は1つ前のブロックが高優先の第二のメッセージであるか判定し、高優先の第二のメッセージである場合はST413に進み、低優先の第一のメッセージである場合はST414に進む。
ST413において、ハッシュ処理回路100は1つ前の第二のメッセージのブロックに対するハッシュ処理中か否かを判定し、ハッシュ処理中の場合は当該ブロックのハッシュ処理が完了するまで待ち、ハッシュ処理が完了している場合はST415に進む。
ST414において、ハッシュ処理回路100は第一のメッセージの1つ前のブロックのステップに対するハッシュ処理中か否かを判定する。ハッシュ処理中の場合は当該ステップのハッシュ処理が完了するまで待ち、当該ステップに対するハッシュ処理が完了している場合は当該ステップまでの内部状態変数値を保存して当該メッセージに対するハッシュ処理は一旦中断して、ST415に進む。
ST415において、ハッシュ処理回路100は第ニのメッセージ(B0〜B3)の1ブロックに対するハッシュ処理を行う。
ST416において、総ブロック数4の第ニのメッセージ(B0〜B3)に対するハッシュ処理が完了したか判定し、完了している場合はST417に進み、完了していない場合はST403に戻る。
ST417において、ハッシュ処理回路100はDMAC203にライトリクエストして第ニのメッセージ(B0〜B3)に対するハッシュ値を出力する。
ST418において、他のメッセージの処理が完了しているか判定し、完了している場合は処理を終了し、完了していない場合はST403に戻る。
(ハッシュ処理の詳細)
図29〜図31は本実施形態の、ハッシュ処理の各ステップ単位の動作を示したタイミングチャートである。各々メッセージAの先頭部分、メッセージAからメッセージBに切替わる部分およびメッセージBからメッセージAに切替わる部分を示している。尚、TXXXはステップ処理およびDMA転送処理の基本単位となっている動作クロック周期Tに基づく期間を表す。本実施形態において、ハッシュ処理回路100は周期Tの動作クロックで同期設計されている。また、例えば、メッセージAの各512ビットのブロックのデータは32ビットの0番目から15番目の16個の拡張メッセージW0〜W15に相当する。例えば、メッセージAの0番目のブロックをA0、A0の0番目と1番目の32ビットデータをA0_W00―W01、A0の最初の16個の拡張メッセージをEA0_W00−W15と表記する。同様に、例えば、ブロックA0の0番目のステップの内部状態変数値をSA0_00、ブロックA0のハッシュ中間値をHA0と表記する。
以下、単位期間毎の各部の動作を説明する。
T000において、データライトをするために、ハッシュ処理制御部113がDMAC203に対してDMAライトリクエスト信号122をアサートする。T001において、DMAC203は、DMAライトアクノレッジ信号123を返すと共に、ハッシュ値出力部114がDMA出力データ116として出力するハッシュ値(ここではHAX)の最初の64ビットをメモリ202に転送する。以下、T002からT005にかけて、DMAC203はハッシュ値HAXをメモリ202に転送する。この間、ハッシュ処理制御部113は、DMAC203がDMAライトアクノレッジ信号123をアサートする回数をカウントする。ここでは、T005までにDMAライトアクノレッジ信号123が3回アサートされたことを確認し、T006においてDMAライトリクエスト信号122をデアサートする。
T006およびT007において、CPU201がバス205、バス信号117を経由して、処理すべき複数のメッセージに関するレジスタ116を設定する。具体的には、各メッセージごとに、図27に示したレジスタ116の『ジョブ開始』領域に“ハッシュ処理を開始する”フラグを立てる。また、メッセージAの『ブロック数』領域には“96ブロック分処理する”こと、メッセージBの『ブロック数』領域には“4ブロック分処理する”こと、両メッセージの『ハッシュ初期値』領域に“SHA−1アルゴリズムの初期値”を設定する。
レジスタ116のメッセージAおよびメッセージBの『ジョブ開始』領域に“ハッシュ処理を開始する”フラグが立ったことを受け、T008の処理を行う。T008においては、データリードをするために、ハッシュ処理制御部113がDMAC203に対してDMAリードリクエスト信号122をアサートする。T009において、DMAC203は、DMAリードアクノレッジ信号123を返す。それと同時にメモリ202に保持されたメッセージAの先頭ブロックA0の、最初の64ビット(A0_W00−W01)をハッシュ処理装置100に転送する。このとき、DMAC203は、DMA入力データ120と共に入力データアトリビュート信号139を出力する。入力データアトリビュート信号139の部分信号であるメッセージA識別信号146はメッセージAを示す“1”となっている。また、入力データアトリビュート信号139の部分信号である不図示の処理継続信号は“内部状態変数値の初期値を用いる”ことを示す“0”となっている。
T010において、メッセージ保持部A101は64ビットデータA0_W00−W01を保持する。以下、T011からT023にかけて、DMAC203はブロックA0をメモリ202からハッシュ処理回路100に転送する。この間、ハッシュ処理制御部113は、DMAC203がDMAアクノレッジ信号123をアサートする回数をカウントする。ハッシュ処理制御部113はT023までにDMAC203がDMAアクノレッジ信号123を8回アサートしたことを確認し、T024においてDMAリードリクエスト信号122をデアサートする。レジスタ116のメッセージAの『ジョブ開始』領域に“ハッシュ処理を開始する”フラグが立った状態で、ブロックカウンタA137はDMAリードリクエスト信号122のデアサート回数により、処理するブロック数のカウントを行う。ブロックカウンタA137のカウント値をBCAとすると、ここでBCAは1となる。そして同じくT024において、メッセージ保持部A101がブロックA0を保持する。
T025において、ハッシュ処理制御部113がブロックAロード信号124をアサートする。
T026において、拡張メッセージ保持部A102はブロックAロード信号124のアサートを検知し、メッセージ保持部A101に保持されたブロックA0を読み込む。このとき、拡張メッセージ保持部A102は、ブロックA0を16個の32ビットデータEA0_W00〜EA0_W15に分割して保持する。ブロックAロード信号124アサート後に、ステップカウンタA138は基本処理期間T毎の不図示のクロックにより、ステップ数をカウントする。ステップカウンタA138のカウント値をSCAとすると、ここでSCAは1となる。以降、ステップカウンタA138はカウンタ値SCAが80になるまで、1ステップ処理の単位の基本処理期間Tのクロック毎にカウントアップする。ハッシュ処理制御部113は、メッセージ保持部A101が保持していたデータが拡張メッセージ保持部A102にロードされたことを受けて、次のブロックのデータをリードするためにDMAリードリクエスト信号122をアサートする。
同じくT026においてセレクタ144は、メッセージA選択信号Y145のアサートを受けて、セレクタ144の入力である拡張メッセージA149と拡張メッセージB150のうち、拡張メッセージA149を拡張メッセージ133とする。そして、この拡張メッセージ133をメッセージ拡張処理部103に出力する。
同じくT026においてメッセージ拡張処理部103は、セレクタ144を介して、拡張メッセージ保持部A102が保持する拡張メッセージ133(EA0_W00〜EA0_W15)を入力して、32ビットデータEA0_W16を求める。
同じくT026においてハッシュ処理制御部113は、
・入力データアトリビュート信号139の部分信号である処理継続信号が“内部状態変数値の初期値を用いる”ことを示す“0”となっていること。並びに、
・ステップカウンタA138のカウント値SCAが“1”であること。
に応じて、ハッシュ初期値選択信号X127をアサートする。また、T026においてハッシュ処理制御部113は、ステップカウンタA138のカウント値SCAが“1”であることを受けて、ハッシュ中間値選択信号125をアサートする。
同じくT026においてセレクタ112は、ハッシュ初期値選択信号X127がアサートされているので、セレクタ112の入力であるハッシュ中間値119とハッシュ初期値126のうち、ハッシュ初期値126を出力する。また、セレクタ105は、ハッシュ中間値選択信号125のアサートを受けて、セレクタ105の入力であるセレクタ112の出力と内部状態変数値134のうち、セレクタ112の出力を出力する。その結果、セレクタ105はハッシュ初期値126を出力する。
同じくT026においてステップ処理部104は、拡張メッセージ保持部A102が保持するEA0_W00とハッシュ初期値126を入力し、SHA−1のステップ0の処理をして内部状態変数値SA0_00を求める。
T027において、ステップカウンタA138はカウントアップし、カウンタ値SCAは“2”となる。
同じくT027において拡張メッセージ保持部A102は、EA0_W01〜EA0_W15およびT026においてメッセージ拡張処理部103で求めたEA0_W16を保持する。
同じくT027において内部状態変数値保持部A106は、メッセージA選択信号Y145のアサートを受けて、T026において求めた内部状態変数値SA0_00を保持する。
同じくT027においてメッセージ拡張処理部103は、セレクタ144を介して、拡張メッセージ保持部A102が保持する拡張メッセージ133(EA0_W01〜EA0_W16)を入力して、32ビットデータEA0_W17を求める。
同じくT027においてハッシュ処理制御部113は、ステップカウンタA138のカウント値SCAが“1”ではないことを受けて、ハッシュ初期値選択信号X127とハッシュ中間値選択信号125をデアサートする。
同じくT027においてセレクタ105は、ハッシュ中間値選択信号125のデアサートを受けて、セレクタ105の入力であるセレクタ112の出力と内部状態変数値134のうち、内部状態変数値134を出力する。その結果、セレクタ105は内部状態変数値SA0_00を出力する。
同じくT027においてステップ処理部104は、拡張メッセージEA0_W01と内部状態変数値SA0_00を入力し、SHA−1のステップ1の処理をして内部状態変数値SA0_01を求める。
同じくT027においてDMAC203は、DMAリードアクノレッジ信号123を返すと同時に、メモリ202から64ビットデータA1_W00−W01をハッシュ処理装置100に転送する。
T028において、ステップカウンタA138はカウントアップし、カウンタ値SCAは“3”となる。
同じくT028において拡張メッセージ保持部A102は、EA0_W02〜EA0_W16およびT027においてメッセージ拡張処理部103で求めたEA0_W17を保持する。
同じくT028において内部状態変数値保持部A106は、メッセージA選択信号Y145のアサートを受けて、T027において求めた内部状態変数値SA0_01を保持する。
同じくT028においてメッセージ拡張処理部103は、セレクタ144を介して、拡張メッセージ保持部A102が保持する拡張メッセージA149(EA0_W02〜EA0_W17)を入力して、32ビットデータEA0_W18を求める。
同じくT028においてセレクタ105は、ハッシュ中間値選択信号125のデアサートを受けて、セレクタ105の入力であるセレクタ112の出力と内部状態変数値134のうち、内部状態変数値134を出力する。その結果、セレクタ105は内部状態変数値SA0_01を出力する。
同じくT028においてステップ処理部104は、拡張メッセージ保持部A102が保持するEA0_W02と内部状態変数値SA0_01を入力し、SHA−1のステップ2の処理をして内部状態変数値SA0_02を求める。
同じくT028においてメッセージ保持部A101は、64ビットデータA1_W00−W01を保持する。
以下、T029〜T041まで、DMAC203はメモリ202からハッシュ処理装置100へブロックA1のDMA転送を行う。この間、ハッシュ処理制御部113は、DMAC203がDMAリードアクノレッジ信号123をアサートする回数をカウントする。ハッシュ処理制御部113はT041までにDMAC203がDMAアクノレッジ信号123を8回アサートしたことを確認し、T042においてDMAリードリクエスト信号122をデアサートする。そしてT042において、メッセージ保持部A101はブロックA1を保持する。また、DMAリードリクエスト信号122のデアサートを受けて、ブロックカウンタA137はカウントアップし、カウンタ値BCAは2になる。
また、T029〜T105まで、ハッシュ処理回路100は、SHA−1のステップ2〜79の処理を行う。この間、ステップカウンタA138はカウント値SCAを“3”から“80”までカウントアップする。その結果、T106において内部状態変数値保持部A106は、SHA−1のステップ79の処理結果である内部状態変数値SA0_79を保持する。
T105までに所定の80ステップまでカウントした為、T106においてステップカウンタA138はカウンタ値SCAをクリアし、SCAは“0”となる。
同じくT106においてハッシュ処理制御部113は、
・入力データアトリビュート信号139の部分信号である処理継続信号が“内部状態変数値の初期値を用いる”ことを示す0となっていること。並びに、
・T105のステップカウンタA138のカウント値SCAが“80”であること。
に応じて、ハッシュ初期値選択信号Y128をアサートする。
同じくT106においてセレクタ108は、ハッシュ初期値選択信号Y128のアサートを受けて、セレクタ108の入力であるハッシュ初期値126とハッシュ中間値119のうち、ハッシュ初期値126を出力する。
同じくT106において加算処理部107は、内部状態変数値134(SA0_79)とハッシュ初期値126を入力して、ハッシュ中間値HA0を求める。
同じくT106においてハッシュ処理制御部113は、入力データアトリビュート信号139の部分信号であるメッセージA識別信号146が“メッセージA”を示す“1”となっているので、ハッシュ中間値Aロード信号129をアサートする。またハッシュ処理制御部113は、ブロックAロード信号124をアサートする。
ハッシュ中間値保持部A109はハッシュ中間値Aロード信号129のアサートを検知し、T107においてハッシュ中間値HA0を保持する。同じくT107において、ハッシュ処理制御部113は、入力データアトリビュート信号139の部分信号であるメッセージA識別子信号が“メッセージA”を示す“1”となっているので、メッセージA選択信号131をアサートする。そこでセレクタ111はハッシュ中間値保持部A109の出力とハッシュ中間値保持部B110の出力のうち、ハッシュ中間値保持部A109の出力(HA0)をハッシュ値出力部114へ出力する。
拡張メッセージ保持部A102はブロックAロード信号124のアサートを検知し、同じくT107において、メッセージ保持部A101が保持するブロックA1を読み込む。このとき、拡張メッセージ保持部A102は、ブロックA1を16個の32ビットデータEA1_W00〜EA1_W15に分割して保持する。ハッシュ処理制御部113は、メッセージ保持部A101が保持していたデータを拡張メッセージ保持部A102が保持したことを受けて、次のブロックのデータをリードするためにDMAリードリクエスト信号122をアサートする。
同じくT107において、ハッシュ処理制御部113は、ブロックA0のハッシュ処理が終わったことを受けて、ハッシュ初期値選択信号Y128をデアサートする。
同じくT107において、ブロックAロード信号124のアサートを受けて、ステップカウンタA138はカウントアップを開始し、カウンタ値SCAは“1”となる。
同じくT107においてメッセージ拡張処理部103は、拡張メッセージ保持部A102が保持する拡張メッセージ133(EA1_W00〜EA1_W15)を入力して、32ビットデータEA1_W16を求める。
ブロックA1の処理であるため、T107においてハッシュ処理制御部113は、ハッシュ初期値選択信号X127をアサートしない。
同じくT107においてセレクタ112は、ハッシュ初期値信号X127のデアサートを受けて、セレクタ112の入力であるハッシュ中間値119とハッシュ初期値126のうち、ハッシュ中間値119(HA0)を出力する。また、セレクタ105は、ハッシュ中間値選択信号125のアサートを受けて、セレクタ105の入力であるセレクタ112の出力と内部状態変数値134のうち、セレクタ112の出力を出力する。その結果、セレクタ105はハッシュ中間値119(HA0)を出力する。
同じくT107においてセレクタ144は、メッセージA選択信号Y145のアサートを受けて、セレクタ144の入力である拡張メッセージA149と拡張メッセージB150のうち、拡張メッセージA149を拡張メッセージ133とする。そして、この拡張メッセージ133をメッセージ拡張処理部103に出力する。
同じくステップ107においてステップ処理部104は、セレクタ144を介して拡張メッセージ保持部A102が保持するEA1_W00とハッシュ中間値119(HA0)を入力する。そして、SHA−1のステップ0の処理をして内部状態変数値SA1_00を求める。
以下、T027〜T041におけるブロックA1のDMA転送と同様に、T108〜T122において、ブロックA2のDMA転送を行う。T123においてハッシュ処理制御部113は、ブロックA1に対するDMAリードリクエスト信号122をデアサートする。DMAリードリクエスト信号122のデアサートを受けて、ブロックカウンタA137をカウントアップし、カウンタ値BCAは3となる。また、T027〜T105におけるブロックA0に対するSHA−1のステップ1〜79の処理と同様に、T108〜T186において、ブロックA1に対するSHA−1のステップ1〜79の処理を行う。この間ステップカウンタA138はカウンタ値SCAを“2”から“80”までカウントアップする。その結果、T187において内部状態変数値A保持部106は、SHA−1のステップ79の処理結果である内部状態変数値SA1_79を保持する。
同じくT187において、ブロックA1の処理であるため、ハッシュ処理制御部113は、ハッシュ初期値選択信号Y128をアサートしない。
同じくT187においてセレクタ108は、ハッシュ初期値選択信号Y126のデアサートを受けて、セレクタ108の入力であるハッシュ初期値126とハッシュ中間値119(HA0)のうち、ハッシュ中間値119(HA0)を出力する。
同じくT187において加算処理部107は、内部状態変数値134(SA1_79)とハッシュ中間値119(HA0)を入力して、ハッシュ中間値HA1を求める。
同じくT187においてハッシュ処理制御部113は、入力データアトリビュート信号139の部分信号であるメッセージA識別信号146が“メッセージA”を示す“1”となっているので、ハッシュ中間値Aロード信号129をアサートする。ハッシュ中間値保持部A109は、T188においてハッシュ中間値Aロード信号129のアサートを検知し、ハッシュ中間値HA1を保持する。ここで、ハッシュ処理制御部113は、入力データアトリビュート信号139の部分信号であるメッセージA識別信号146が“メッセージA”を示す“1”となっているので、メッセージA選択信号131をアサートする。そこでセレクタ111は、ハッシュ中間値保持部A109の出力とハッシュ中間値保持部B110の出力のうち、ハッシュ中間値保持部A109の出力(HA1)をハッシュ出力部114へ出力する。
以下、
・レジスタ116の入力データアトリビュート信号139の部分信号であるメッセージA識別信号146が“メッセージA”を示す“1”となっていること。
・レジスタ116のメッセージAの『ブロック数』領域が“96ブロック分処理する”ことを示していること。
に応じて、CPU201の制御のもとDMAC203が転送すべきデータをメッセージAからメッセージBに切替えるまで、ハッシュ処理回路100は、メッセージAのブロックA3からブロックA52までをDMAC203より受信する。そして、ブロックごとにハッシュ処理を行う。
(メッセージの切り替え)
次に、図30のメッセージAからメッセージBに切替わる際の動作について説明する。
T4237において加算処理部107は、内部状態変数値SA51_79とハッシュ中間値HA50を入力して加算処理をし、ハッシュ中間値HA51を出力する。そしてT4238において、ハッシュ中間値保持部A109がハッシュ中間値HA51を保持する。
T4237において、ハッシュ処理制御部113がブロックAロード信号124をアサートする。拡張メッセージ保持部A102はブロックAロード信号124のアサートを検知し、T4238において、メッセージ保持部A101が保持するブロックA52を読み込む。
ここでブロックA52の転送終了後にメモリ202からハッシュ処理回路100にメッセージBの転送を開始するように、CPU201がDMAC203を制御したとする。T4238においてハッシュ処理制御部113は、メッセージ保持部A101が保持していたブロックA52のデータを拡張メッセージ保持部A102が保持したことを受けて、DMAリードリクエスト信号122をアサートする。これにより、次のブロックのデータをリードするためである。このとき、拡張メッセージ保持部A102は、ブロックA52を16個の32ビットデータEA52_W00〜EA52_W15に分割して保持する。ハッシュ処理回路100はT4238からT4255までメッセージAのブロックA52に対するステップ0からステップ17の処理を行う。
一方、T4239からT4253においてDMAC203は、DMAデータリードアクノレッジ信号123を返すと同時に、メモリ202からブロックB0をハッシュ処理回路100に転送する。ブロックB0の読み込みと同時に、ハッシュ処理制御部113は、“メッセージBである”こと、“内部状態変数値の初期値を用いる”ことを識別する。さらに、レジスタ116の『メッセージ優先度』領域の情報によりメッセージBが“高優先”であることを検知する。そして、T4255まで処理していたメッセージAのブロック52に対するステップ処理を中断して、高優先のメッセージBのハッシュ処理を先に行うべきことを判断する。入力データアトリビュート信号139の部分信号であるメッセージA識別信号146が“0”であることより、その反転信号のメッセージB識別信号148が“1”となり、T4254においてメッセージ保持部B141が、ブロックB0を保持する。また、ブロックカウンタB140はカウンタ値をBCBとすると、メッセージBのブロックB0に対応するカウンタ値BCBを“1”にカウントアップする。ブロックカウンタA137はメッセージAのブロックA52に対応するカウンタ値BCAとして“53”を保持する。
T4255においてハッシュ処理制御部113は、メッセージ保持部B141に保持したメッセージBのブロックB0のデータを拡張メッセージ保持部B146にロードするために、ブロックBロード信号142をアサートする。
T4256において内部状態変数保持部A106は、メッセージAのブロック52に対するSHA−1のステップ17の処理結果である内部状態変数値SA52_17を保持する。
同じくT4256において、ステップカウンタA138は、カウンタ値SCAとしてT4255においてカウントアップしたステップ17に対応する“18”を保持する。
T4256において拡張メッセージ保持部B146は、ブロックBロード信号142のアサートを受けて、メッセージ保持部B141に保持されたブロックB0を読み込む。このとき、拡張メッセージ保持部B146は、ブロックB0を16個の32ビットデータEB0_W00〜EB0_W15に分割して保持する。ハッシュ処理制御部113は、メッセージ保持部B141が保持していたデータを拡張メッセージ保持部B146が保持したことを受けて、次のブロックのデータをリードするためにDMAリードリクエスト信号122をアサートする。
同じくT4256において、ブロックBロード信号142のアサートを受けて、ステップカウンタB157はカウントアップを開始し、カウンタ値SCBは1となる。
同じくT4256においてハッシュ処理制御部113は、メッセージ拡張処理部103の処理する対象をメッセージAからメッセージBに切替える為に、メッセージA選択信号Yをデアサートする。
同じくT4256においてセレクタ144は、メッセージA選択信号Y145のデアサートを受けて、セレクタ144の入力である拡張メッセージA149と拡張メッセージB150のうち、拡張メッセージB150を拡張メッセージ133とする。そして、この拡張メッセージ133をメッセージ拡張処理部103に出力する。
同じくT4256においてメッセージ拡張処理部103は、セレクタ144を介して拡張メッセージ保持部B146が保持する拡張メッセージ133(EB0_W00〜EB0_W15)を入力して、32ビットデータEB0_W16を求める。
ブロックB0の処理であるため、T4256においてハッシュ処理制御部113は、ハッシュ初期値選択信号X127をアサートする。
同じくT4256においてセレクタ112は、ハッシュ初期値選択信号X127のアサートを受けて、セレクタ112の入力であるハッシュ中間値119とハッシュ初期値126のうち、ハッシュ初期値126を出力する。また、セレクタ105は、ハッシュ中間値選択信号125のアサートを受けて、セレクタ105の入力であるセレクタ112の出力と内部状態変数値134のうち、セレクタ112の出力を出力する。その結果、セレクタ105はハッシュ初期値126を出力する。
同じくT4256においてステップ処理部104は、セレクタ144を介して拡張メッセージ保持部B146が保持するEB0_W00とハッシュ初期値126を入力し、SHA−1のステップ0の処理をして内部状態変数値SB0_00を求める。
以下、T4257〜T4271において、DMAC203はブロックB1のDMA転送を行う。T4272においてハッシュ処理制御部113は、ブロックA1に対するDMAリードリクエスト信号122をデアサートする。DMAリードリクエスト信号122のデアサートを受けて、ブロックカウンタB140をカウントアップし、カウンタ値BCBは2となる。また、T4257〜T4335において、ハッシュ処理回路100はブロックB0に対するSHA−1のステップ1〜79の処理を行う。この間ステップカウンタB157はカウンタ値SCBを2から80までカウントアップする。その結果、T4336において内部状態変数値保持部B151は、SHA−1のステップ79の処理結果である内部状態変数値SB0_79を保持する。
また、入力データアトリビュート信号139の部分信号である処理継続信号が“内部状態変数値の初期値を用いる”ことを示す“0”となっており、かつ、ブロックB0の処理である。このため、同じくT4336において、ハッシュ処理制御部113は、ハッシュ初期値選択信号Y128をアサートする。
同じくT4336においてセレクタ108は、ハッシュ初期値選択信号Y128のアサートを受けて、セレクタ108の入力であるハッシュ初期値126とハッシュ中間値119(HA51)のうち、ハッシュ初期値126を出力する。
同じくT4336において加算処理部107は、内部状態変数値134(SB0_79)とハッシュ初期値126を入力して、ハッシュ中間値HB0を求める。
同じくT4336においてハッシュ処理制御部113は、入力データアトリビュート信号139の部分信号であるメッセージA識別信号146の反転信号であるメッセージB識別信号148が“メッセージB”を示す“1”となっている。このため、ハッシュ中間値Bロード信号130をアサートする。またハッシュ処理制御部113は、ブロックBロード信号142をアサートする。
ハッシュ中間値保持部B110はハッシュ中間値Bロード信号130のアサートを検知し、T4337においてハッシュ中間値HB0を保持する。同じくT4337において、入力データアトリビュート信号139の部分信号であるメッセージA識別子信号146の反転信号であるメッセージB識別信号148が“メッセージB”を示す“1”となっている。このため、ハッシュ処理制御部113は、メッセージA選択信号X131をデアサートする。そこでセレクタ111はハッシュ中間値保持部A109の出力とハッシュ中間値保持部B110の出力のうち、ハッシュ中間値保持部B110の出力(HB0)をハッシュ値出力部114へ出力する。
拡張メッセージ保持部B146はブロックBロード信号142のアサートを検知し、同じくT4337において、メッセージ保持部B141が保持するブロックB1を読み込む。このとき、拡張メッセージ保持部B146は、ブロックB1を16個の32ビットデータEB1_W00〜EB1_W15に分割して保持する。ハッシュ処理制御部113は、メッセージ保持部B141が保持していたデータを拡張メッセージ保持部B146が保持したことを受けて、次のブロックのデータをリードするためにDMAリードリクエスト信号122をアサートする。
同じくT4337において、ハッシュ処理制御部113は、ブロックB0のハッシュ処理が終わったことを受けて、ハッシュ初期値選択信号Y128をデアサートする。
同じくT4337において、ブロックBロード信号142のアサートを受けて、ステップカウンタB157はカウントアップを開始し、カウンタ値SCBは1となる。
同じくT4337においてセレクタ144は、メッセージA選択信号Y145のデアサートを受けて、セレクタ144の入力である拡張メッセージA149と拡張メッセージB150のうち、拡張メッセージB150を拡張メッセージ133とする。そして、この拡張メッセージ133をメッセージ拡張処理部103に出力する。
同じくT4337においてメッセージ拡張処理部103は、セレクタ144を介して拡張メッセージ保持部B146が保持する拡張メッセージ133(EB1_W00〜EB1_W15)を入力して、32ビットデータEB1_W16を求める。
ブロックB1の処理であるため、T4337においてハッシュ処理制御部113は、ハッシュ初期値選択信号X127をアサートしない。
同じくT4337においてセレクタ112は、ハッシュ初期値信号X127のデアサートを受けて、セレクタ112の入力であるハッシュ中間値119とハッシュ初期値126のうち、ハッシュ中間値119(HB0)を出力する。また、セレクタ105は、ハッシュ中間値選択信号125のアサートを受けて、セレクタ105の入力であるセレクタ112の出力と内部状態変数値134のうち、セレクタ112の出力を出力する。その結果、セレクタ105はハッシュ中間値119(HB0)を出力する。
以下、T4338〜T4352において、DMAC203はブロックB2のDMA転送を行う。T4353においてハッシュ処理制御部113は、ブロックB2に対するDMAリードリクエスト信号122をデアサートする。DMAリードリクエスト信号122のデアサートを受けて、ブロックカウンタB140をカウントアップし、カウンタ値BCBは3となる。また、T4257〜T4335におけるブロックB0に対するSHA−1のステップ1〜79の処理と同様に、T4338〜T4416において、ハッシュ処理回路100はブロックB1に対するSHA−1のステップ1〜79の処理を行う。この間ステップカウンタB157はカウンタ値SCBを“2”から“80”までカウントアップする。その結果、T4417において内部状態変数値保持部B151は、SHA−1のステップ79の処理結果である内部状態変数値SB1_79を保持する。
同じくT4417において、ブロックB1の処理であるため、ハッシュ処理制御部113は、ハッシュ初期値選択信号Y128をアサートしない。
同じくT4417においてセレクタ108は、ハッシュ初期値選択信号Y126のデアサートを受けて、セレクタ108の入力であるハッシュ初期値126とハッシュ中間値119(HB0)のうち、ハッシュ中間値119(HB0)を出力する。
同じくT4417において加算処理部107は、内部状態変数値134(SB1_79)とハッシュ中間値119(HB0)を入力して、ハッシュ中間値HB1を求める。
同じくT4417においてハッシュ処理制御部113は、入力データアトリビュート信号139の部分信号であるメッセージA識別信号146の反転信号であるメッセージB識別信号148が“メッセージB”を示す“1”となっている。このため、ハッシュ中間値Bロード信号130をアサートする。ハッシュ中間値保持部B110は、T4418においてハッシュ中間値Bロード信号130のアサートを検知し、ハッシュ中間値HB1を保持する。ここで、ハッシュ処理制御部113は、入力データアトリビュート信号139の部分信号であるメッセージA識別信号146の反転信号であるメッセージB識別信号148が“メッセージB”を示す“1”となっている。このため、メッセージA選択信号131をデアサートする。そこでセレクタ111は、ハッシュ中間値保持部A109の出力とハッシュ中間値保持部B110の出力のうち、ハッシュ中間値保持部B110の出力(HB1)をハッシュ出力部114へ出力する。
以下、
・レジスタ116の入力データアトリビュート信号139の部分信号であるメッセージA識別信号146の反転信号であるメッセージB識別信号148が“メッセージB”を示す“1”となっていること。
・レジスタ116のメッセージBの『ブロック数』領域が“4ブロック分処理する”ことを示していること。
を受けて、ハッシュ処理回路100はブロックB2からB3までメッセージBのブロックをDMACより受信し、ブロックごとにハッシュ処理を行う。
以下、図31のメッセージBからメッセージAに切替わる部分の説明を行う。
T4498において加算処理部107は、内部状態変数値134(SB02_79)とハッシュ中間値HB1を入力して加算処理をし、ハッシュ中間値HB2を出力する。
同じくT4498においてハッシュ処理制御部113は、入力データアトリビュート信号139の部分信号であるメッセージA識別信号146の反転信号であるメッセージB識別信号148が“メッセージB”を示す“1”となっている。このため、ハッシュ中間値Bロード信号130をアサートする。また、ハッシュ処理制御部113がブロックBロード信号142をアサートする。
ハッシュ中間値保持部B110はハッシュ中間値Bロード信号130のアサートを検知し、T4499においてハッシュ中間値HB2を保持する。同じくT4499において、ハッシュ処理制御部113は、入力データアトリビュート信号139の部分信号であるメッセージA識別子信号146の反転信号であるメッセージB識別信号148が“メッセージB”を示す“1”となっている。このため、メッセージB選択信号131をアサートする。そこでセレクタ111はハッシュ中間値保持部A109の出力とハッシュ中間値保持部B110の出力のうち、ハッシュ中間値保持部B110の出力(HB2)をハッシュ値出力部114へ出力する。
拡張メッセージ保持部B146はブロックBロード信号142のアサートを検知し、T4499において、メッセージ保持部B141が保持するブロックB03を読み込む。このとき、拡張メッセージ保持部B146は、ブロックB03を16個の32ビットデータEB3_W00〜EB3_W15に分割して保持する。ハッシュ処理制御部113は、メッセージ保持部B141が保持していたデータを拡張メッセージ保持部B146が保持したことを受けて、次のブロックのデータをリードするためにDMAリードリクエスト信号122をアサートする。
ここで、ブロックB3の転送終了後にメモリ202からハッシュ処理回路100に対してメッセージAの残りのデータ転送を再開するように、CPU201がDMAC203を制御したとする。
T4500からT4514においてDMAC203は、DMAデータリードアクノレッジ信号123を返すと同時に、メモリ202からブロックA53をハッシュ処理回路100に転送する。ブロックA53の読み込みと同時に、ハッシュ処理制御部113は、“メッセージAである”こと、“ハッシュ中間値を用いる”ことを識別する。さらに、
・レジスタ116の『メッセージ優先度』領域の情報によりメッセージAが“低優先”であること。
・ブロックカウンタA137のカウンタ値BCAが“53”であること。
・ステップカウンタA138のカウンタ値SCAが“18”であること。
を検知する。そして、メッセージAのブロック52に関してステップ17まで処理したところで中断しており、メッセージAのブロック52に対するステップ18から処理を継続すべきことを判断する。
T4515においてハッシュ処理制御部113は、ブロックA53に対するDMAリードリクエスト信号122をデアサートする。DMAリードリクエスト信号122のデアサートを受けて、入力データアトリビュート信号139の部分信号であるメッセージA識別信号146が“1”であることより、T4515においてメッセージ保持部A101が、ブロックA53を保持する。また、DMAリードリクエスト信号122のデアサートを受けて、ブロックカウンタA137は、メッセージAのブロックA53に対応するカウンタ値BCBを“54”にカウントアップする。
一方、T4499からT4578において、ハッシュ処理回路100はメッセージBのブロックB03に対するSHA−1のステップ0からステップ79の処理を行う。この間ステップカウンタB157はカウンタ値SCBを2から80までカウントアップする。その結果、T4579において内部状態変数値B保持部151は、SHA−1のステップ79の処理結果である内部状態変数値SB3_79を保持する。
同じくT4579において、ブロックB3の処理であるため、ハッシュ処理制御部113は、ハッシュ初期値選択信号Y128をアサートしない。
同じくT4579においてセレクタ108は、ハッシュ初期値選択信号Y128のデアサートを受けて、セレクタ108の入力であるハッシュ初期値126とハッシュ中間値119(HB2)のうち、ハッシュ中間値119(HB2)を出力する。
同じくT4579において加算処理部107は、内部状態変数値134(SB3_79)とハッシュ中間値119(HB2)を入力して、ハッシュ中間値HB3を求める。
同じくT4579においてハッシュ処理制御部113は、入力データアトリビュート信号139の部分信号であるメッセージA識別信号146の反転信号であるメッセージB識別信号148が“メッセージB”を示す“1”となっている。このため、ハッシュ中間値Bロード信号130をアサートする。
ハッシュ中間値保持部B110はハッシュ中間値Bロード信号130のアサートを検知し、T4580においてハッシュ中間値HB3を保持する。同じくT4580において、ハッシュ処理制御部113は、入力データアトリビュート信号139の部分信号であるメッセージA識別子信号146の反転信号であるメッセージB識別信号148が“メッセージB”を示す“1”となっている。このため、メッセージB選択信号131をアサートする。そこでセレクタ111はハッシュ中間値保持部A109の出力とハッシュ中間値保持部B110の出力のうち、ハッシュ中間値保持部B110の出力(HB3)をハッシュ値出力部114へ出力する。メッセージBは図5に示すようにブロックB0〜B3で構成されるので、ハッシュ中間値HB3はメッセージBのハッシュ値HBとなる。
ここで、レジスタ116のメッセージBに関する『ブロック数』領域が保持する“4ブロック分処理する”要求を満したことになる。そこでハッシュ処理制御部113は、T4580においてレジスタ116の『ジョブ開始』領域が保持する“ハッシュ処理を開始する”フラグと、『処理継続』領域が保持する“内部状態変数値の初期値を用いる”フラグをクリアする。また、ハッシュ処理制御部113は、T4580においてDMAC203に対してDMAライトリクエスト信号122をアサートする。DMAC203はDMAライトアクノレッジ信号123を返すと共に、ハッシュ値HBをハッシュ値出力部114からメモリ202へ転送する。ハッシュ処理制御部113は、DMA203がDMAライトアクノレッジ信号123をアサートする回数をカウントする。T4586においてハッシュ処理制御部113は、DMAC203がDMAライトアクノレッジ信号123を3回アサートしたことを確認して、DMAライトリクエスト信号122をデアサートする。
そして、DMAC203は、ハッシュ処理装置100がDMAライトリクエスト信号122をデアサートしたのを検知し、割込信号206をアサートし、割込み制御部204に割込みを通知する。そして割込み制御部204は、不図示の割込信号によりCPU201にメモリ202へのハッシュ値HBの格納を通知する。
一方、T4579において、ハッシュ処理制御部113はメッセージAに対するステップ処理を再開するために、メッセージA選択信号Y145をアサートする。ステップカウンタB157はカウンタ値SCBをステップ18に対応する“19”にカウンタアップする。
同じくT4579においてセレクタ144は、メッセージA選択信号Y145のアサートを受けて、セレクタ144の入力である拡張メッセージA149と拡張メッセージB150のうち、拡張メッセージA149を拡張メッセージ133とする。そしてこの拡張メッセージ133をメッセージ拡張処理部103に出力する。
同じくT4579においてメッセージ拡張処理部103は、セレクタ144を介して拡張メッセージ保持部A102が保持する拡張メッセージ133(EA52_W18〜EA52_W33)を入力して、32ビットデータEA52_W34を求める。
以降、T4580からT4640において、ハッシュ処理回路100はブロックA52に対するSHA−1のステップ19〜79の処理を行う。
この間、ステップカウンタA138はカウント値SCAを“20”から“80”までカウントアップする。その結果、T4641において内部状態変数値保持部A106は、ブロックA52に対するSHA−1のステップ79の処理結果である内部状態変数値SA52_79を保持する。
ブロックA52の処理であるため、T4641においてハッシュ処理制御部113は、ハッシュ初期値選択信号X127をアサートしない。
同じくT4641においてセレクタ112は、ハッシュ初期値信号X127のデアサートを受けて、セレクタ112の入力であるハッシュ中間値119とハッシュ初期値126のうち、ハッシュ中間値119(HA51)を出力する。また、セレクタ105は、ハッシュ中間値選択信号125のアサートを受けて、セレクタ105の入力であるセレクタ112の出力と内部状態変数値134のうち、セレクタ112の出力を出力する。その結果、セレクタ105はハッシュ中間値119(HA51)を出力する。
また、入力データアトリビュート信号139の部分信号である処理継続信号が“ハッシュ中間値を用いる”ことを示す“1”となっており、かつ、ブロックA52の処理である。このため、同じくT4641において、ハッシュ処理制御部113は、ハッシュ初期値選択信号Y128をアサートしない。
同じくT4641においてセレクタ108は、ハッシュ初期値選択信号Y128のデアサートを受けて、セレクタ108の入力であるハッシュ初期値126とハッシュ中間値119(HA51)のうち、ハッシュ中間値119を出力する。
同じくT4641において加算処理部107は、内部状態変数値134(SA52_79)とハッシュ中間値119(HA51)を入力して、ハッシュ中間値HA52を求める。
同じくT4641においてハッシュ処理制御部113は、入力データアトリビュート信号139の部分信号であるメッセージA識別信号146が“メッセージA”を示す“1”となっているので、ハッシュ中間値Aロード信号129をアサートする。またハッシュ処理制御部113は、ブロックAロード信号124をアサートする。
ハッシュ中間値保持部A109はハッシュ中間値Aロード信号129のアサートを検知し、T4642においてハッシュ中間値HA52を保持する。同じくT4642において、ハッシュ処理制御部113は、入力データアトリビュート信号139の部分信号であるメッセージA識別子信号146が“メッセージA”を示す“1”となっているので、メッセージA選択信号X131をアサートする。そこでセレクタ111はハッシュ中間値保持部A109の出力とハッシュ中間値保持部B110の出力のうち、ハッシュ中間値保持部A109の出力(HA52)をハッシュ値出力部114へ出力する。
拡張メッセージ保持部A102はブロックAロード信号124のアサートを検知し、同じくT4642において、メッセージ保持部A101が保持するブロックA53を読み込む。このとき、拡張メッセージ保持部A102は、ブロックA53を16個の32ビットデータEA53_W00〜EA53_W15に分割して保持する。ハッシュ処理制御部113は、メッセージ保持部A101が保持していたデータを拡張メッセージ保持部A102が保持したことを受けて、次のブロックのデータをリードするためにDMAリードリクエスト信号122をアサートする。
同じくT4642において、ハッシュ処理制御部113は、ブロックA52のハッシュ処理が終わったことを受けて、ハッシュ初期値選択信号Y128をデアサートする。
同じくT4642において、ブロックAロード信号124のアサートを受けて、ステップカウンタA138はカウントアップを開始し、カウンタ値SCAは1となる。
同じくT4642においてセレクタ144は、メッセージA選択信号Y145のアサートを受けて、セレクタ144の入力である拡張メッセージA149と拡張メッセージB150のうち、拡張メッセージA149を拡張メッセージ133とする。そして、この拡張メッセージ133をメッセージ拡張処理部103に出力する。
同じくT4642においてメッセージ拡張処理部103は、セレクタ144を介して拡張メッセージ保持部A102が保持する拡張メッセージ133(EA53_W00〜EA53_W15)を入力して、32ビットデータEA53_W16を求める。
ブロックB1の処理であるため、T4337においてハッシュ処理制御部113は、ハッシュ初期値選択信号X127をアサートしない。
同じくT4642においてセレクタ112は、ハッシュ初期値信号X127のデアサートを受けて、セレクタ112の入力であるハッシュ中間値119とハッシュ初期値126のうち、ハッシュ中間値119(HA52)を出力する。また、セレクタ105は、ハッシュ中間値選択信号125のアサートを受けて、セレクタ105の入力であるセレクタ112の出力と内部状態変数値134のうち、セレクタ112の出力を出力する。その結果、セレクタ105はハッシュ中間値119(HA52)を出力する。
以下、T4643〜T4657において、DMAC203はブロックA54のDMA転送を行う。T4658においてハッシュ処理制御部113は、ブロックA54に対するDMAリードリクエスト信号122をデアサートする。DMAリードリクエスト信号122のデアサートを受けて、ブロックカウンタA137をカウントアップし、カウンタ値BCAは“55”となる。また、T4643〜T4721において、ブロックA53に対するSHA−1のステップ1〜79の処理を行う。この間ステップカウンタA138はカウンタ値SCAを“2”から“80”までカウントアップする。その結果、T4722において内部状態変数値A保持部106は、ブロックA53に対するSHA−1のステップ79の処理結果である内部状態変数値SA53_79を保持する。
同じくT4722において、ブロックA53の処理であるため、ハッシュ処理制御部113は、ハッシュ初期値選択信号Y128をアサートしない。
同じくT4722においてセレクタ108は、ハッシュ初期値選択信号Y126のデアサートを受けて、セレクタ108の入力であるハッシュ初期値126とハッシュ中間値119(HA52)のうち、ハッシュ中間値119(HA52)を出力する。
同じくT4722において加算処理部107は、内部状態変数値134(SA53_79)とハッシュ中間値119(HA52)を入力して、ハッシュ中間値HA53を求める。
同じくT4722においてハッシュ処理制御部113は、入力データアトリビュート信号139の部分信号であるメッセージA識別信号146が“メッセージA”を示す“1”となっているので、ハッシュ中間値Aロード信号129をアサートする。ハッシュ中間値保持部A109は、T4723においてハッシュ中間値Aロード信号129のアサートを検知し、ハッシュ中間値HA53を保持する。ここで、ハッシュ処理制御部113は、入力データアトリビュート信号139の部分信号であるメッセージA識別信号146が“メッセージA”を示す“1”となっているので、メッセージA選択信号131をアサートする。そこでセレクタ111は、ハッシュ中間値保持部A109の出力とハッシュ中間値保持部B110の出力のうち、ハッシュ中間値保持部A109の出力(HA53)をハッシュ出力部114へ出力する。
以降、
・レジスタ116の入力データアトリビュート信号139の部分信号であるメッセージA識別信号146が“メッセージA”を示す“1”となっていること。
・レジスタ116のメッセージBの『ブロック数』領域が“96ブロック分処理する”こと。
を示しているのを受けて、ハッシュ処理回路100はメッセージAのブロックA55からブロックA95までをDMAC203より受信し、ブロックごとにハッシュ処理を行う。
(ブロック単位の動作)
図32Aと図32B(以下、まとめて図32)は本実施形態の、ハッシュ処理の各ブロック単位の動作を示したタイミングチャートである。なお、TBXXXは基本的にブロック処理の単位となっている期間Tの81個分の期間を表している。先述のT026〜T106はTB0にあたり、T107〜T187はTB1にあたる。但し、TB52はメッセージAのブロック52に対してステップ0〜17の処理の後、メッセージBのブロックB0に対してステップ0〜ステップ79の処理を行っているため、T4238〜T4336の99個分の期間となる。また、TB56はメッセージAのブロック52に対してステップ19〜79の処理を行っているため(ステップ18の処理期間はTB55内に隠蔽)、T4580〜T4641の62個分の期間となる。また、入力メッセージA0_W00〜W15はA0(t)、拡張メッセージEA0_W00〜EA_W79はEA0(t)、内部状態変数値SA0_00〜SA0_79はSA0(t)とあらわしている。ここで、tはステップ数を示し、XX(t)はステップ数tにより値が変化することを示す。
以下、ブロック処理期間毎の各部の動作を説明する。尚、一部ステップ処理期間毎の詳細動作も説明する。
前述したように、TB0においてDMAC203が、メモリ202からハッシュ処理回路100にブロックA1をDMA転送する。ブロックA1のDMA転送終了後、ブロックカウンタA137はカウントアップし、カウンタ値BCAは2となる。TB1においてDMAC203が、メモリ202からハッシュ処理回路100にブロックA2をDMA転送する。ブロックA2のDMA転送終了後、ブロックカウンタA137はカウントアップし、カウンタ値BCAは3となる。
また、前述したように、ハッシュ処理回路100は、TB0においてメッセージAの先頭ブロックであるブロックA0を入力して拡張メッセージEA0(t)を求めると共に内部状態変数値SA0(t)を求める。SA(t)を更新するステップ処理においてはステップt毎にt番目の拡張メッセージと(t−1)番目の内部状態変数値を用いて内部状態変数値を更新し、ステップ79で内部状態変数値SA0_79を求める。そして最終的にハッシュ初期値と加算してハッシュ中間値HA0を求める。TB1において、ハッシュ中間値保持部A109はハッシュ中間値HA0を保持する。そして、ハッシュ処理回路100はブロックA1を入力して拡張メッセージEA1(t)と内部状態変数値SA1(t)を求め、ステップ79で内部状態変数値SA1_79を求める。そして最終的に内部状態変数値SA1_79とハッシュ中間値HA0を加算して、ハッシュ中間値HA1を求める。
以下、TB2〜TB51においてDMAC203は、ブロックA3〜A52をメモリ202からハッシュ処理回路100にDMA転送する。このとき、ブロックカウンタA137のカウンタ値BCAは4〜53までカウントアップする。また、TB2〜TB51においてハッシュ処理回路100は、ブロックA2〜A51のハッシュ処理をする。
前述したように、TB52において、DMAC203はブロックB0をメモリ202からハッシュ処理回路100にDMA転送する。同じくTB52において、ハッシュ処理回路はブロックA52に対してステップ0〜17の処理をした後、
・1つ前のハッシュ中間値HA52。
・ステップ処理の途中結果である内部状態変数値SA52_17。
・メッセージAに対する処理ブロックのカウンタ値BCA“52”。
・処理ステップのカウンタ値SCA“17”。
を保持して中断し、ブロックB0のハッシュ処理を行う。同じくTB52において、DMAC203はブロックB1をメモリ202からハッシュ処理回路100にDMA転送する。
TB53〜TB54において、DMAC203はブロックB2〜B3をメモリ202からハッシュ処理回路100にDMA転送する。同じくTB53〜54において、ハッシュ処理回路100はブロックB2〜B3のハッシュ処理を行う。
TB55において、DMAC203はブロックA53をメモリ202からハッシュ処理回路100にDMA転送する。同じくTB55において、ハッシュ処理回路100はブロックB3のハッシュ処理を行う。
メッセージBのメッセージ長は4のため、ハッシュ中間値HB3はメッセージBのハッシュ値HBとなる。TB56において、DMAC203はハッシュ値HBをハッシュ処理回路100からメモリ202にDMA転送する。
同じくTB56においてハッシュ処理回路100は、TB52において中断したメッセージAのブロックA52に対して途中結果の内部状態変数値SA52_17、ハッシュ中間値HA51を用いて、ステップ18の処理から再開する。以降、ステップ19〜79の処理を行う。
TB57において、DMAC203はブロックA54をメモリ202からハッシュ処理回路100にDMA転送する。同じくTB57において、ハッシュ処理回路100はブロックA53のハッシュ処理を行う。
以降、DMAC203は、TB58〜TB98においてブロックA55〜A95をメモリ202からハッシュ処理回路100にDMA転送する。このとき、ブロックカウンタA137はカウンタ値BCAを55〜96までカウントアップする。また、ハッシュ処理回路100は、TB58〜TB99においてブロックA54〜A95に対するハッシュ処理を行う。この間、ハッシュ処理制御部113は、レジスタ116の『メッセージ識別子』領域が“メッセージAを処理する”旨を示しているのでハッシュ値Bロード信号130をアサートせず、ハッシュ値Aロード信号129を適宜アサートする。そのため、ハッシュ中間値保持部B110はメッセージAのハッシュ中間値を保持せず、ハッシュ中間値保持部A109がメッセージAのハッシュ中間値を保持する。また、ハッシュ処理制御部113は、レジスタ116の『メッセージ識別子』領域が“メッセージAを処理する”旨を示しているのでメッセージ選択信号A131をアサートしている。そのため、セレクタ111は、ハッシュ中間値保持部A109の出力とハッシュ中間値保持部B110の出力のうち、ハッシュ中間値保持部A109の出力を出力する。その他の処理は他のブロックに対する処理と同様である。
この結果、TB100においてハッシュ中間値保持部A109は、メッセージAのブロックA0〜ブロックA95に対するハッシュ中間値HA95を保持する。メッセージAは図5に示すようにブロックA0〜A95で構成されるので、ハッシュ中間値HA95はメッセージAのハッシュ値HAとなる。TB100においてハッシュ処理制御部113はメッセージA選択信号131をアサートしている。そのためセレクタ111は、セレクタ111の入力であるハッシュ中間値保持部A109の出力(HA)とハッシュ中間値保持部B110の出力(HB)のうち、ハッシュ中間値保持部A109の出力(HA)をハッシュ値出力部114へ出力する。
ここで、レジスタ116の『メッセージ識別子』領域および『ブロック数』領域が保持する“メッセージAを処理する”および“96ブロック分処理する”要求を満したことになる。そこでハッシュ処理制御部113は、TB100においてレジスタ116の『ジョブ開始』領域が保持する“ハッシュ処理を開始する”フラグと、『処理継続』領域が保持する“ハッシュ中間値を用いる”フラグをクリアする。また、ハッシュ処理制御部113は、TB100においてDMAC203に対してDMAライトリクエスト信号122をアサートする。DMAC203はDMAライトアクノレッジ信号123を返すと共に、ハッシュ値HAをハッシュ値出力部114からメモリ202へ転送する。ハッシュ処理制御部113は、DMAC203がDMAライトアクノレッジ信号123をアサートする回数をカウントする。ハッシュ処理制御部113は、DMAC203がDMAライトアクノレッジ信号123を3回アサートしたことを確認して、DMAライトリクエスト信号122をデアサートする。
同じくTB100においてDMAC203は、ハッシュ処理装置100がDMAライトリクエスト信号122をデアサートしたのを検知し、割込信号206をアサートし、割込み制御部204に割込みを通知する。そして割込み制御部204は、不図示の割込信号によりCPU201にメモリ202へのハッシュ値HAの格納を通知する。
同じくTB100において、CPU201はDMAC203からの割込みによって“メッセージA”を“96ブロック分”、“内部状態変数値の初期値を用いて”処理し終わったことを検知する。
また、本実施形態においては、メッセージBのメッセージ優先度は高優先としたが、これに限られない。例えば、メッセージBのメッセージ優先度がメッセージAと同様に低優先の場合は、ハッシュ処理回路100はブロックA52に対するハッシュ処理を途中で中断せずに、ブロックA52のハッシュ中間値を生成後に、ブロックB0に対するハッシュ処理を行う。
以上説明したように、本実施形態においては、メッセージ識別子、処理継続の情報をメッセージのデータに付帯する入力データアトリビュート信号から抽出して識別する。そして、各メッセージに対するハッシュ処理回路のステップ処理のステップの区切りの処理結果である内部状態変数値とそのステップ数、ブロック処理の区切りの処理結果であるハッシュ中間値を保持する。このようにして、2種類のメッセージに対してメッセージ、ハッシュ中間値、内部状態変数値を切替えてハッシュ処理を行う。
従来の構成では、第一のメッセージに対するハッシュ処理を途中で中断して、別の第二のメッセージに対するハッシュ処理を先に行う場合、ハッシュ中間値を外部のメモリに一旦書き出して、再び読込んでいた。ここで、第一のメッセージの処理途中結果のハッシュ中間値あるいは内部状態変数値を外部メモリに書き出すのに本実施形態の構成を仮定する。すると、この場合、第一のメッセージから第二のメッセージに対して切替える時に、12基本処理期間、その他、レジスタ設定等に更に2基本処理期間オーバーヘッドを要する。
同様に、第二のメッセージのハッシュ処理完了後に、第一のメッセージのハッシュ処理を再開するにも、処理途中結果のハッシュ中間値あるいは内部状態変数値を外部メモリから読み出すのに12基本処理期間要する。その他、レジスタ設定等に更に2基本処理期間のオーバーヘッドを要する。合わせて、少なくとも、28基本処理期間のオーバーヘッドを要する。
従って、本実施形態は、第一のメッセージに対するハッシュ処理を途中で中断して、別の第二のメッセージに対するハッシュ処理を先に行う場合、従来の構成に比して、少なくとも28基本処理期間分、ハッシュ処理期間を短縮可能な構成である。実際には、本実施形態においては、ハッシュ処理をおこなっている間に次に処理すべきメッセージのブロックのデータをメモリからDMA転送している。従来の構成がメッセージのデータ転送期間をハッシュ処理期間に吸収する構成を取っていない場合は、更に、512ビットのブロックのデータのDMA転送期間とレジスタ設定期間の16+2=18基本処理期間分、本実施形態の方が処理期間を短縮している。
また、従来はステップ処理の区切りでの中断に対応していない。このため、第一のメッセージ処理を中断して、第二のメッセージの処理を先に行う場合、第一のメッセージのブロック処理の区切りまで待つか、あるいは、当該処理中のブロックに対する当該ステップまでのステップ処理の結果を破棄する必要があった。上記いずれの場合でも、第一のメッセージのあるブロックに対するステップ0〜79のどのステップの時点で切り替えるかにより、処理時間を短縮できる。すなわち、本実施形態は従来例に比して、さらに0〜79の基本処理期間分、第二のメッセージ開始時期および完了時期あるいは第一のメッセージの処理完了時期を早くすることができる。
このように、本実施形態によれば、ハッシュ中間値を外部のメモリに一旦書き出して、再び読込んでいた従来例に比較して、処理時間を大幅に短縮できる。外部メモリとのハッシュ中間値の送受信のために要していたオーバーヘッド分が軽減され、所定の応答時間を保証することが可能な、効率的なハッシュ処理を実現することができる。
また、本実施形態においては、メッセージの1ブロック分をハッシュ処理回路内に保持することにより、外部メモリからメッセージの各ブロックデータを転送するのに必要なオーバーヘッド時間を隠蔽し、より効率的なハッシュ処理を実現することができる。
なお、本実施形態においては、1つ前のブロックに対するハッシュ処理を完了した時点で、上記回路内に保持した1ブロック分のデータを拡張処理部にロードし、その後に、外部メモリから次の1ブロック分のデータ転送を要求している。ここで、当該ロードしたブロック分に対するハッシュ処理が完了するまで保持部で保持して、その後、次の1ブロック分のデータの転送要求をするようにしてもよい。この場合、当該ブロックに対するハッシュ処理を途中で破棄した場合も、当該ブロックのデータが回路内に保持されているので、外部メモリから再度読込むオーバーヘッドを削減することができる。
また、本実施形態においては、ハッシュ関数としてはSHA−1を用いたが、ハッシュ関数はMD5、SHA−256等、他のアルゴリズムであってもよいことは言うまでもない。
また、本実施形態においては、拡張メッセージはステップ毎に順次生成する構成としたが、最初に一括で生成する構成としても構わない。
また、本実施形態においては、2種類のメッセージに対するハッシュ中間値を保持可能な構成としたが、これに限られない。例えば、3以上のハッシュ中間値保持部、内部状態変数値保持部、ブロックカウンタ、レジスタ設定領域等を設けることにより、3種類以上のメッセージに対するハッシュ処理を中断して、再開することできる。
また、本実施形態においては、1つのハッシュ中間値を保持可能なハッシュ中間値保持領域を有するハッシュ中間値保持部を複数備える構成としたが、これに限られない。例えば、複数のハッシュ中間値を保持可能なハッシュ中間値保持領域を有するハッシュ中間値保持部を1つあるいは複数備える構成としてもよい。内部状態変数値保持部に関しても同様である。
また、本実施形態においては、メッセージA、Bのハッシュ中間値をそれぞれハッシュ中間値保持部A、Bに保持するというように、各メッセージのハッシュ中間値とハッシュ中間値保持部の対応は固定的であるものとしたが、これに限られない。例えば、どのハッシュ中間値保持領域にどのメッセージのハッシュ中間値を保持するかの対応情報を保持するハッシュ中間値保持情報保持部を設け、当該ハッシュ中間値保持情報保持部に保存した対応情報に基づいてハッシュ中間値保持領域を決定してもよい。内部状態変数値保持部に関しても同様である。
また、本実施形態においては、メッセージ優先度は高優先、低優先の2段階としたが、メッセージ優先度は3段階以上にして、より優先度の高いメッセージの処理を優先的にハッシュ処理するような構成にしてもよい。
また、本実施形態においては、第一、第二のメッセージを各々第一、第二のメッセージ保持部に保持する構成としたが、これに限られない。例えば、優先度の段階数、ハッシュ中間値保持部の数に応じて、所定数のメッセージ保持部あるいは所定数のメッセージ保持領域を設けて、当該所定数以下のメッセージを保持可能な構成としてもよい。例えば、3つのメッセージ保持領域(P、Q、R)を設け、A、B、C、D,Eの5つのメッセージに対してハッシュ処理を行う場合を考える。この場合、メッセージの入力状況と、メッセージ保持領域の空き状況に応じて、PにA,QにB、RにE、A処理完了後に空いたPにD、E処理完了後に空いたRにCを使用するようにしてもよい。
また、本実施形態においては、ハッシュ処理のうち、パディング処理はハッシュ回路の外部で、CPUが処理する構成としたが、ハッシュ回路内で処理する構成としても構わない。
また、本実施形態においては、ハッシュ処理回路と外部メモリとの間でメッセージ、ハッシュ値を入出力する手段としてDMACを用いたが、他の転送手段を用いてもよい。
また、本実施形態においては、DMA入出力データは64ビットであるとしたが、他のビット数であってもよいことは言うまでもない。
また、本実施形態においては、ハッシュ処理のステップ毎の処理と、DMA転送処理の基本処理期間Tは同一としたが、ステップ処理とDMA転送処理の基本処理期間は異なっていても構わない。
また、本実施形態においては、メッセージ優先度は予め処理要求の情報としてCPUがレジスタの所定領域に設定するものとしたが、入力データアトリビュート信号にメッセージ優先度を含めてもよい。
また、本実施形態においては、入力データアトリビュート信号にはメッセージ識別、処理継続の情報を含むものとし、データ幅は8ビットであるとしたが、これに限られない。例えば、入力データアトリビュート情報としては他のメッセージ優先度、ブロック識別子等の情報を含んでもよく、情報に応じて信号のデータ幅が変わってもよい。
また、本実施形態においては、ハッシュ処理回路が入力メッセージのブロック番号をメッセージ毎の入力ブロック数をカウントして識別するものとしたが、入力データアトリビュート信号としてブロック番号が付帯している構成としてもよい。
また、本実施形態では、CPUがメッセージのブロック数をハッシュ処理回路のレジスタに設定し、ハッシュ処理回路はメッセージ毎にDMAアクノレッジ信号をカウントすることにより、CPUが設定したブロック数のメッセージの供給を認識するものとした。しかし、これに限られず、例えば、メッセージの転送完了をCPUからレジスタ設定で通知する等他の方法を用いてもよい。
また、本実施形態においては、レジスタの所定領域が保持するメッセージ優先度の情報により、低優先のメッセージのブロックに対するハッシュ処理を途中で中断するようにしたが、これに限られない。例えば、アトリビュート信号に含まれるメッセージ識別子にメッセージ優先度の意味を兼ねさせる、あるいは、他の処理中断指示信号を入力することにより高優先のメッセージを優先して処理中のメッセージに対するハッシュ処理の中断を判断してもよい。
また、本実施形態では、ハッシュ処理対象のメッセージとしてメッセージAとメッセージBに関して最初にレジスタ設定してそれ以降入力メッセージに応じてメッセージAあるいはメッセージBに対するハッシュ処理を行うものとしたが、これに限られない。例えば、上記メッセージAあるいはメッセージBに対するハッシュ処理の途中でメッセージCに対するハッシュ処理を開始する必要が生じたとする。この場合、メッセージCに対するハッシュ処理要求のレジスタ設定を途中で追加すれば、以降、入力メッセージに応じてメッセージA、メッセージB、メッセージCに対するハッシュ処理を行うことができる。
なお、本発明の実施形態は上記に限定されるものでなく、種々に変更可能である。
上記のように、本実施形態ではハッシュ中間値保持部と内部状態変数値保持部とステップ数保持部とを複数設け、複数のメッセージを処理して得られた各々のハッシュ中間値、内部状態変数値、ステップ数の一時保持領域として使っている。これにより、ハッシュ処理の対象となるメッセージの切替え時の時間的オーバーヘッドを軽減することができる。
<<実施形態5>>
本実施形態ではハッシュ・アルゴリズムとしてMD5、SHA1、SHA512に対応し、最大2つのメッセージを並列に処理するハッシュ処理処置を説明する。並列に行う2つの処理を以下、処理A、処理Bと呼ぶ。
ハッシュ処理は、メッセージを16ワードのブロック単位で処理し、ハッシュ処理の最終結果としてNワードのハッシュ値を出力する。ハッシュ処理は下記の一連の処理から構成される。
・メッセージを16ワードのブロックに区切り、最後のブロックも16ワードになるように、メッセージの最後尾に所定のデータを付け加える。(以下、パディング処理と呼ぶ。)
・16ワードのブロック毎に、後述するメッセージ拡張処理と、ステップ処理と、加算処理を行い、ハッシュ中間値を生成する。
メッセージ拡張処理は、16ワードのデータを使って、1ワードの拡張メッセージを生成する演算処理である。最初に入力したメッセージは、そのまま1番目から16番目の拡張メッセージとなる。17番目以降の拡張メッセージに関しては、(n−16)から(n−1)番目の16ワードの拡張メッセージを使ってn番目の拡張メッセージ1ワードを生成する。これを繰り返しN番目の拡張メッセージまで生成する。Nはアルゴリズムで既定されている所定のステップ数とする。
ステップ処理は、Wワード(Wはハッシュ・アルゴリズムで既定されている整数)で構成される所定の内部状態変数値と1ワードの拡張メッセージを使って次の内部状態変数値を生成する演算処理である。。1番目の内部状態変数値の生成は、ハッシュ初期値と1番目の拡張メッセージを使って1番目の内部状態変数値を生成する。n番目の内部状態変数値の生成では、(n−1)番目の内部状態変数値とn番目の拡張メッセージを使ってn番目の内部状態変数値を生成する。これを繰り返しN番目の内部状態変数値まで生成する。
加算処理は、先頭ブロックから1つ前のブロックまでのハッシュ中間値と、当該ブロックのN番目の内部状態変数値を加算する演算処理である。最初のブロックのハッシュ中間値生成は、ハッシュ初期値と最初のブロックのN番目の内部状態変数値を加算して生成する。最終ブロックで得られるハッシュ中間値が当該メッセージ全体に対するハッシュ値となる。
1ワードを構成するビット数はハッシュ・アルゴリズム毎に既定されており、MD5は32ビット、SHA1は32ビット、SHA512は64ビットである。
内部状態変数値及びハッシュ値のワード数はハッシュ・アルリズムごとに既定されており、MD5は4ワード(128ビット)、SHA1は5ワード(160ビット)、SHA512は8ワード(256ビット)である。
所定のステップ数Nはハッシュ・アルゴリズム毎に既定されており、MD5はN=64、SHA1はN=80、SHA512はN=80である。
(ハッシュ処理回路)
図33は本実施形態に係るハッシュ処理回路の構成を示した図である。100はハッシュ処理回路である。
101は処理A、処理Bを制御するハッシュ処理制御部であり、ハッシュ処理を制御するためのレジスタを備える。レジスタは、ハッシュ処理回路100の外部に存在するCPU等からシステムバス102を介してアクセスすることが可能である。
ハッシュ処理制御部101は以下の信号を生成する。
・処理Aが実行中であることを示す信号A_EXE。
・処理Aが実行中のハッシュ・アルゴリズムを示す信号A_ALG。
・処理Aが実行中のステップ数を示す信号A_STP_CNT。
・処理Aが実行中のブロック数を示す信号A_BLK_CNT。
・処理Aが使用するハッシュ初期値を示す信号A_IV。
A_EXEは”1”のとき実行中であることを示し、A_ALGはMD5、SHA1、SHA512のいずれかを示す。A_STP_CNTは、A_EXE=”1”になったとき0に初期化し、入力メッセージの入力転送要求に対する1番目のアクノリッジを受信したときにカウントを開始する。クロック1サイクル毎に0〜N+1までカウントアップし、0に戻る。メッセージ拡張処理は、A_STP_CNTが0〜N−1のとき、1番目〜N番目の処理を行い、ステップ処理は、A_STP_CNTが1〜Nのとき、1番目〜N番目の処理を行う。加算処理はA_STP_CNTが2〜N+1のとき、1番目〜N番目の処理を行う。A_BLK_CNTはA_EXE=”1”になったとき0に初期化し、A_STP_CNTがN+1になったときに+1カウントアップする。入力するメッセージのブロック数-1までカウントアップし、0に戻る。
また、ハッシュ処理制御部101は、ハッシュ処理回路100の外部に存在する処理Aが使用する入出力データを転送するDMAコントローラ(以下DMACと呼ぶ)DMAC Aに対し、データ転送を要求する信号A_DMA_REQを生成する。そして、DMAC Aからのアクノジッリ信号A_DMA_ACKを受信する。A_DMA_REQ、A_DMA_ACKは夫々2ビットの信号である。A_DMA_REQ[0]/A_DMA_ACK[0]は被処理データである入力メッセージを入力する入力転送用、A_DMA_REQ[1]/A_DMA_ACK[1]はハッシュ処理結果として得られたハッシュ値を出力する出力転送用とする。
さらに、ハッシュ処理制御部101は以下の信号を生成する。
・処理Bが実行中であることを示す信号B_EXE。
・処理Bが実行中のハッシュ・アルゴリズムを示す信号B_ALG。
・処理Bが実行中のステップ数を示す信号B_STP_CNT。
・処理Bが実行中のブロック数を示す信号B_BLK_CNT。
・処理Bが使用するハッシュ初期値を示す信号B_IV。
B_EXEは”1”のとき実行中であることを示し、B_ALGはMD5、SHA1、SHA512のいずれかを示す。B_STP_CNTは、B_EXE=”1”になったとき0に初期化し、入力メッセージの入力転送要求に対する1番目のアクノリッジを受信したときにカウントを開始する。1サイクル毎に0〜N+1までカウントアップし、0に戻る。メッセージ拡張処理は、B_STP_CNTが0〜N−1のとき、1番目〜N番目の処理を行い、ステップ処理は、B_STP_CNTが1〜Nのとき、1番目〜N番目の処理を行う。加算処理はB_STP_CNTが2〜N+1のとき、1番目〜N番目の処理を行う。B_BLK_CNTはB_EXE=”1”になったとき0に初期化し、B_STP_CNTがN+1になったときに+1カウントアップする。入力するメッセージのブロック数-1までカウントアップし、0に戻る。
また、ハッシュ処理制御部101は、ハッシュ処理回路100の外部に存在する処理Bが使用する入出力データを転送するDMAC Bに対し、データ転送を要求する信号B_DMA_REQを生成する。そして、DMAC Bからのアクノジッリ信号B_DMA_ACKを受信する。B_DMA_REQ、B_DMA_ACKは夫々2ビットの信号である。B_DMA_REQ[0]/B_DMA_ACK[0]は被処理データである入力メッセージを入力する入力転送用、B_DMA_REQ[1]/B_DMA_ACK[1]はハッシュ処理結果として得られたハッシュ値を出力する出力転送用とする。
103はハッシュ処理回路100外部に存在するDMACとのインターフェースであるDMA IF部である。104は処理Aのデータを入出力転送するDMAC Aとのインターフェース信号である。入力データバスA_DMA_IDATAは64ビットで、被処理データである入力メッセージを64ビット単位で転送し、64ビットの入力メッセージA_MSGとして出力する。出力データバスA_DMA_ODATAは64ビットで、ハッシュ処理結果として得られたハッシュ値を64ビット単位で転送する。105は処理Bのデータを入出力転送するDMAC Bとのインターフェース信号である。入力データバスB_DMA_IDATAは64ビットで、被処理データである入力メッセージを64ビット単位で転送し、64ビットの入力メッセージB_MSGとして出力する。出力データバスB_DMA_ODATAは64ビットで、ハッシュ処理結果として得られたハッシュ値を64ビット単位で転送する。
(インタフェース信号)
図42は、インタフェース信号104,105による動作を例示するタイミングチャートである。
T100-T105に104の入力転送、T107-110に104の出力転送を示す。入力転送は、T100でDMA IF部103がDMAC Aへ入力転送要求信号A_DMA_REQ[0]をアサートする。
T101でDMAC AがDMA IF部103へ1番目の入力データDI0を転送し、アクノリッジ信号A_DMA_ACK[0]をアサートする。T102のクロックの立ち上がりでA_DMA_REQ[0]とA_DMA_ACK[0]が同時にアサートされて、DI0の入力転送は完了し、DMAC Aは2番目の入力データDI1を転送する。出力転送は、T107でDMA IF部103がDMAC Aへ1番目の出力データDO0を出力すると同時に出力転送要求信号A_DMA_REQ[1]をアサートする。T108でDMAC AがDMA IF部103へアクノリッジ信号A_DMA_ACK[1]をアサートし、出力データを受信する。
T109のクロックの立ち上がりでA_DMA_REQ[1]とA_DMA_ACK[1]がアサートされて、DO0の出力は転送は完了し、DMA IF部103は2番目の出力データDO1を転送する。本実施形態では処理Aが一度に転送要求するデータ量は決まっており、DAMC Aは一旦アクノリッジ信号をアサートすると、決められたデータ量を連続して転送する。入力転送は1回に1ワード分のデータを1ブロック分連続して転送するとする。1ワードが入力データバス幅64ビットに満たないときは下位ビットに詰めて転送する。出力転送は1ワード分のデータをハッシュ値のワード数連続して転送するとする。1ワードが入力データバス幅64ビットに満たないときは下位ビットに詰めて転送する。MD5、SHA1、SHA512は1ブロック16ワードなので16回連続して転送する。出力転送はハッシュ値を64ビット幅に区切り、連続して転送するとする。MD5のハッシュ値は128ビットなので2回、SHA1のハッシュ値は160ビットなので3回、SHA512のハッシュ値は512ビットなので8回連続して転送する。
T111-T116に105の入力転送、T118-122に105の出力転送を示す。入力転送は、T111でDMA IF部103がDMAC Bへ入力転送要求信号B_DMA_REQ[0]をアサートする。
T112でDMAC BがDMA IF部103へ1番目の入力データDI0を転送し、アクノリッジ信号B_DMA_ACK[0]をアサートする。T113のクロックの立ち上がりでB_DMA_REQ[0]とB_DMA_ACK[0]が同時にアサートされて、DI0の入力転送は完了し、DMAC Bは2番目の入力データDI1を転送する。出力転送は、T118でDMA IF部103がDMAC Bへ1番目の出力データDO0を出力すると同時に出力転送要求信号B_DMA_REQ[1]をアサートする。T119でDMAC BがDMA IF部103へアクノリッジ信号B_DMA_ACK[1]をアサートし、出力データを受信する。
T120のクロックの立ち上がりでB_DMA_REQ[1]とB_DMA_ACK[1]がアサートされて、DO0の出力転送は完了しDMA IF部103は2番目の出力データDO1を転送する。本実施形態では処理Bが一度に転送要求するデータ量は決まっており、DAMC Bは一旦アクノリッジ信号をアサートすると、決められたデータ量を連続して転送する。入力転送は1回に1ワード分のデータを1ブロック分連続して転送するとする。1ワードが入力データバス幅64ビットに満たないときは下位ビットに詰めて転送する。MD5、SHA1、SHA512は1ブロックは16ワードなので16回連続して転送する。出力転送はハッシュ値を64ビット幅に区切り、連続して転送するとする。MD5のハッシュ値は128ビットなので2回、SHA1のハッシュ値は160ビットなので3回、SHA512のハッシュ値は512ビットなので8回連続して転送する。
106は拡張メッセージ選択部である。拡張メッセージ選択部106は、外部からの入力メッセージA_MSG、B_MSGと拡張メッセージExMSG_Nとを、A_EXE、A_ALG、A_STP_CNT、B_EXE、B_ALG、B_STP_CNTに応じて選択する。そして、32ビットのデータExMSG_0、ExMSG_1を出力する。ここで、ExMSG_0は後述の拡張メッセージ保持部107の領域0に保持するデータ、ExMSG_1は拡張メッセージ保持部107の領域1に保持するデータである。
(ExMSG_0、ExMSG_1のデータ選択)
図43は、ExMSG_0、ExMSG_1のデータの選択指針を例示する図である。1001はExMSG_0のデータ選択指針である。
・1001−aは、処理AがMD5のハッシュ処理を実行中で、1番目〜16番目のメッセージ拡張処理のとき(A_EXE=1かつA_ALG=MD5かつA_STP_CNT=0〜15)を示している。この場合、DMAC Aの転送データの下位32ビットA_MSG[31:0]を選択する。
・1001−bは、処理AがSHA512のハッシュ処理を実行中で、1番目〜16番目のメッセージ拡張処理のとき(A_EXE=1かつA_ALG= SHA512かつA_STP_CNT=0〜15)を示している。この場合、DMAC Aの転送データの下位32ビットA_MSG[31:0]を選択する。
・1001−cは、処理BがMD5のハッシュ処理を実行中で、1番目〜16番目のメッセージ拡張処理のとき(B_EXE=1かつB_ALG=MD5かつB_STP_CNT=0〜15)を示している。この場合、DMAC Bの転送データの下位32ビットB_MSG[31:0]を選択する。
・1001−dは、処理BがSHA512のハッシュ処理を実行中で、1番目〜16番目のメッセージ拡張処理のとき(B_EXE=1かつB_ALG=SHA512かつB_STP_CNT=0〜15)を示している。この場合、DMAC Bの転送データの下位32ビットB_MSG[31:0]を選択する。
・1001−eは上記以外のときであり、は後述する拡張メッセージの下位32ビットExMSG_N [31:0]を選択する。
1002はExMSG_1のデータ選択指針である。
・1002-aは、処理AがMD5のハッシュ処理を実行中で、1番目〜16番目のメッセージ拡張処理のとき(A_EXE=1かつA_ALG=MD5かつA_STP_CNT=0〜15)を示している。この場合、DMAC Aの転送データの下位32ビットA_MSG[31:0]を選択する。
・1002-bは、処理AがSHA512のハッシュ処理を実行中で、1番目〜16番目のメッセージ拡張処理のとき(A_EXE=1かつA_ALG= SHA512かつA_STP_CNT=0〜15)を示している。この場合、DMAC Aの転送データの上位32ビットA_MSG[63:32]を選択する。
・1002-cは、処理BがMD5のハッシュ処理を実行中で、1番目〜16番目のメッセージ拡張処理のとき(B_EXE=1かつB_ALG=MD5かつB_STP_CNT=0〜15)を示している。この場合、DMAC Bの転送データの下位32ビットB_MSG[31:0]を選択する。
・1002-dは、処理BがSHA512のハッシュ処理を実行中で、1番目〜16番目のメッセージ拡張処理のとき(B_EXE=1かつB_ALG=SHA512かつB_STP_CNT=0〜15)を示している。この場合。DMAC Bの転送データの上位32ビットB_MSG[63:32]を選択する。
・1002-eは上記以外のときを示しており、後述する拡張メッセージの上位32ビットExMSG_N [63:32]を選択する。
図43の選択指針によれば、処理A又は処理Bがハッシュ処理を実行中のときは処理に使用するデータを選択し、実行中でないときは拡張メッセージExMSG_Nを出力し、拡張メッセージ保持部107に保持する。
107は拡張メッセージ選択部105の出力データを保持する拡張メッセージ保持部である。1024ビットのフリップフロップで構成し、0〜511ビット目を領域0、512〜1023ビット目を領域1とする。1024ビットのフリップフロップの出力信号をExMSG[1023:0]とする。
(拡張メッセージ保持部)
図44は、拡張メッセージ保持部107の内部構成を例示する図である。1101は領域0のフリップフロップである。1101は1クロック毎に保持しているデータを32ビット下位にシフトし、32ビットデータExMSG_0を最上位32ビットExMSG[511:480]に保持する。1102は領域1のフリップフロップである。502は1クロック毎に保持しているデータを32ビットずつ下位にシフトし、32ビットデータExMSG_1を最上位32ビットExMSG[1023:992]に保持する。
108-1、108-2、108-3はハッシュ関数のメッセージ拡張処理を行うメッセージ拡張処理部である。メッセージ拡張処理はハッシュ・アルゴリズムにより異なるので、ハッシュ・アルゴリズム夫々に対応した拡張メッセージ処理部を備える。108-1はMD5の拡張メッセージ処理部である。108-2はSHA1の拡張メッセージ処理部である。108-3はSHA512の拡張メッセージ処理部である。拡張メッセージ処理部108-1,108-2,108-3の被処理データを置く拡張メッセージ保持部107の領域は予め決めておく。
MD5拡張メッセージ処理部108-1は領域0を、被処理データを置く領域とする。領域0のデータExMSG[511:0]を入力し、1ワード(32ビット)の拡張メッセージMD5_ExMSG[31:0]を出力する。
SHA1拡張メッセージ処理部108-2は領域1を、被処理データを置く領域とする。領域1のデータExMSG[1023:512]を入力し、1ワード(32ビット)の拡張メッセージSHA1_ExMSG[31:0]を出力する。
SHA512拡張メッセージ処理部108-3は領域0、1を、被処理データを置く領域とする。SHA512の1ワードは64ビットであり、領域0に1ワードの下位32ビットデータを格納し、領域1に1ワードの上位32ビットデータを格納する。領域0、1のデータExMSG[1023:0]を入力し、1ワード(64ビット)の拡張メッセージSHA512_ExMSG[63:0]を出力する。
拡張メッセージ処理部108-1,108-2,108-3の被処理データを置く拡張メッセージ保持部107の領域を予め決めて、拡張メッセージ保持部107を拡張メッセージ処理部108-1,108-2,108-3の入力として接続している。このため、拡張メッセージ処理部108-1、108-2、108-3は常に、決められた拡張メッセージ保持部107の領域のデータを入力としてメッセージ拡張処理を行っている。
109はメッセージ拡張処理データ選択部である。メッセージ拡張処理データ選択部109は、
・MD5のメッセージ拡張処理部108-1の出力データMD5_ExMSG。
・SHA1のメッセージ拡張処理部108-2の出力データSHA1_ExMSG。
・SHA512のメッセージ拡張処理部108-3の出力データSHA512_ExMSG。
を、A_EXE、A_ALG、B_EXE、B_ALGに応じて選択し、64ビットデータの拡張メッセージExMSG_Nに出力する。なお、ExMSG_N[31:0]は拡張メッセージ保持部107の領域0に保持する拡張メッセージ、ExMSG_N[63:32]は拡張メッセージ保持部107の領域1に保持する拡張メッセージである。
(ExMSG_N[31:0]、ExMSG_N[63:32]のデータ選択)
図45は、ExMSG_N[31:0]、ExMSG_N[63:32]のデータの選択指針を例示する図である。1201はExMSG_N[31:0]のデータ選択指針である。
・1201−aは、処理AでMD5のハッシュ処理を実行中のとき(A_EXE=1かつA_ALG=MD5)を示している。この場合、MD5のメッセージ拡張処理部108-1の出力データMD5_ExMSG[31:0]を選択する。
・1201−bは、処理BでMD5のハッシュ処理を実行中のとき(B_EXE=1かつB_ALG=MD5)を示している。この場合、MD5のメッセージ拡張処理部108-1の出力データMD5_ExMSG[31:0]を選択する。
・1201−cは上記以外のときを示しており、SHA512のメッセージ拡張処理部108-3の出力データSHA512_ExMSG下位32ビット[31:0]を選択する。
1202はExMSG_N[63:32]のデータ選択指針である。
・1202-aは、処理AでSHA1のハッシュ処理を実行中のとき(A_EXE=1かつA_ALG=SHA1)を示している。この場合、SHA1のメッセージ拡張処理部108-2の出力データSHA1_ExMSG[31:0]を選択する。
・1202-bは、処理BでSHA1のハッシュ処理を実行中のとき(B_EXE=1かつB_ALG =SHA1)を示している。この場合、SHA1のメッセージ拡張処理部108-2の出力データSHA1_ExMSG[31:0]を選択する。
・1202-cは上記以外のときを示しており、SHA512のメッセージ拡張処理部108-3の出力データSHA512_ExMSG上位32ビット[63:32]を選択する。
図45の選択指針によれば、処理A又は処理Bがハッシュ処理を実行中のときは処理に使用するメッセージ拡張処理部108-1,108-2,108-3の出力を選択する。実行中でないときはSHA512のメッセージ拡張処理部108-3の出力データSHA_512ExMSGを出力し、拡張メッセージ保持部107に保持する。
110は内部状態変数値データ選択部である。内部状態変数値データ選択部110は、
・ハッシュ初期値A_IV、B_IV。
・ステップ処理結果TEMP_N。
・ハッシュ中間値保持データIHASH。
をA_EXE、A_ALG、A_STP_CNT、A_BLK_CNT、B_EXE、B_ALG、B_STP_CNT、B_BLK_CNTに応じて選択し、256ビットのデータTEMP_0、TEMP_1を出力する。
TEMP_0は後述の内部状態変数値保持部111の領域0に保持するデータ、TEMP_1は内部状態変数値保持部111の領域1に保持するデータである。
(TEMP_0、TEMP_1のデータの選択)
図46は、TEMP_0、TEMP_1のデータの選択指針を例示する図である。1301はTEMP_0のデータ選択指針である。
・1301−aは、処理AでMD5のハッシュ処理を実行中で、最初のブロックで1番目のステップ処理迄(A_EXE=1かつA_ALG=MD5かつA_BLK_CNT=0かつA_STP_CNT=0)を示している。この場合、処理Aハッシュ初期値の下位256ビットA_IV[255:0]を選択する。
・1301−bは、処理AでSHA512のハッシュ処理を実行中で、最初のブロックで1番目のステップ処理迄 (A_EXE=1かつSHA512かつA_BLK_CNT=0かつA_STP_CNT=0)を示している。この場合、処理Aハッシュ初期値の下位256ビットA_IV[255:0]を選択する。
・1301−cは、処理AでMD5のハッシュ処理を実行中で、最初のブロック以降で1番目のステップ処理迄(A_EXE=1かつA_ALG=MD5かつA_BLK_CNT≠0かつA_STP_CNT=0)を示している。この場合、1つ前のブロックの処理で得たハッシュ中間値保持データの下位256ビットIHASH[255:0]を選択する。
・1301−dは、処理AでSHA512のハッシュ処理を実行中で、最初のブロック以降で1番目のステップ処理迄(A_EXE=1かつA_ALG= SHA512かつA_BLK_CNT≠0かつA_STP_CNT=0)を示している。この場合、1つ前のブロックの処理で得たハッシュ中間値データの下位256ビットIHASH[255:0]を選択する。
・1301−eは、処理BでMD5のハッシュ処理を実行中で、最初のブロックで1番目のステップ処理迄(B_EXE=1かつB_ALG=MD5かつB_BLK_CNT=0かつB_STP_CNT=0)を示している。この場合、処理Bハッシュ初期値の下位256ビットB_IV[255:0]を選択する。
・1301−fは、処理BでSHA512のハッシュ処理を実行中で、最初のブロックで1番目のステップ処理迄(B_EXE=1かつB_ALG=SHA512かつB_BLK_CNT=0かつB_STP_CNT=0)を示している。この場合、処理Bハッシュ初期値の下位256ビットB_IV[255:0]を選択する。
・1301−gは、処理BでMD5のハッシュ処理を実行中で、最初のブロック以降で1番目のステップ処理迄(B_EXE=1かつB_ALG=MD5かつB_BLK_CNT≠0かつB_STP_CNT=0)を示している。この場合、1つ前のブロックの処理で得たハッシュ中間値データの下位256ビットIHASH[255:0]を選択する。
・1301−hは、処理BでSHA512のハッシュ処理を実行中で、最初のブロック以降で1番目のステップ処理迄(B_EXE=1かつB_ALG= SHA512かつB_BLK_CNT≠0かつB_STP_CNT=0)を示している。この場合、1つ前のブロックの処理で得たハッシュ中間値データの下位256ビットIHASH[255:0]を選択する。
・1301−iは上記以外のときを示しており、後述する内部状態変数値データの下位256ビットTEMP_N[255:0]を選択する。
1302はTEMP_1のデータ選択指針である。
・1302-aは、処理AでMD5のハッシュ処理を実行中で、最初のブロックで1番目のステップ処理迄(A_EXE=1かつA_ALG=MD5かつA_BLK_CNT=0かつA_STP_CNT=0)を示している。この場合、処理Aハッシュ初期値の下位256ビットA_IV[255:0]を選択する。
・1302-bは、処理AでSHA512のハッシュ処理を実行中で、最初のブロックで1番目のステップ処理迄(A_EXE=1かつSHA512かつA_BLK_CNT=0かつA_STP_CNT=0)を示している。この場合、処理Aハッシュ初期値の上位256ビットA_IV[512:256]を選択する。
・1302-cは、処理AでMD5のハッシュ処理を実行中で、最初のブロック以降で1番目のステップ処理迄(A_EXE=1かつA_ALG=MD5かつA_BLK_CNT≠0かつA_STP_CNT=0)を示している。この場合、1つ前のブロックの処理で得たハッシュ中間値データの上位256ビットIHASH[511:256]を選択する。
・1302-dは、処理AでSHA512のハッシュ処理を実行中で、最初のブロック以降で1番目のステップ処理迄(A_EXE=1かつA_ALG= SHA512かつA_BLK_CNT≠0かつA_STP_CNT=0)を示している。この場合、1つ前のブロックの処理で得たハッシュ中間値データの上位256ビットIHASH[511:256]を選択する。
・1302-eは、処理BでMD5のハッシュ処理を実行中で、最初のブロックで1番目のステップ処理迄(B_EXE=1かつB_ALG=MD5かつB_BLK_CNT=0かつB_STP_CNT=0)を示している。この場合、処理Bハッシュ初期値の下位256ビットB_IV[255:0]を選択する。
・1302-fは、処理BでSHA512のハッシュ処理を実行中で、最初のブロックで1番目のステップ処理迄(B_EXE=1かつB_ALG=SHA512かつB_BLK_CNT=0かつB_STP_CNT=0)を示している。この場合、処理Bハッシュ初期値の上位256ビットB_IV[512:256]を選択する。
・1302-gは、処理BでMD5のハッシュ処理を実行中で、最初のブロック以降で1番目のステップ処理迄(B_EXE=1かつB_ALG=MD5かつB_BLK_CNT≠0かつB_STP_CNT=0)を示している。この場合、1つ前のブロックの処理で得たハッシュ中間値データの上位256ビットIHASH[511:256]を選択する。
・1302-hは、処理BでSHA512のハッシュ処理を実行中で、最初のブロック以降で1番目のステップ処理迄(B_EXE=1かつB_ALG= SHA512かつB_BLK_CNT≠0かつB_STP_CNT=0)を示している。この場合、1つ前のブロックの処理で得たハッシュ中間値データの上位256ビットIHASH[511:256]を選択する。
・1302-iは上記以外のときを示しており、後述する内部状態変数値データの上位256ビットTEMP_N[511:256]を選択する。
図46の選択指針によれば、処理A又は処理Bがハッシュ処理を実行中のときは処理で使用するデータを選択し、実行中でないときは内部状態変数値TEMP_Nを出力し、内部状態変数値保持部111に保持する。
111は内部状態変数値データ選択部109の出力データを保持する内部状態変数値保持部である。512ビットのフリップフロップで構成し、0〜255ビット目を領域0、256〜511ビット目を領域1とする。512ビットのフリップフロップの出力信号をTEMP[511:0]とする。領域0はTEMP_0を保持し、領域1はTEMP_1を保持する。
112-1、112-2、112-3はステップ処理を行うステップ処理部である。ステップ処理はハッシュ・アルゴリズムにより異なるので、ハッシュ・アルゴリズム夫々に対応したステップ処理部を備える。112-1はMD5のステップ処理部である。112-2はSHA1のステップ処理部である。112-3はSHA512のステップ処理部である。ステップ処理部112-1,112-2,112-3の被処理データを置く内部状態変数値保持部111の領域は予め決めておく。
MD5ステップ処理部112-1は領域0を被処理データを置く領域とする。領域0のデータTEMP[127:0]と、拡張メッセージ保持部107の出力データExMSG [511:480]を入力し、128ビットの内部状態変数値MD5_TEMP[127:0]を出力する。
SHA1ステップ処理部112-2は領域1を被処理データを置く領域とする。領域1のデータTEMP[255:128]と拡張メッセージ保持部106出力データExMSG [1023:992]を入力し、160ビットの内部状態変数値SHA1_TEMP[159:0]を出力する。
SHA512ステップ処理部112-3は領域0、1を被処理データを置く領域とする。領域0、1のデータTEMP[511:0]と拡張メッセージ保持部106の出力データExMSG[511:480]、ExMSG[1023:992]を入力し、512ビットの内部状態変数値SHA512_TEMP[511:0]を出力する。
ステップ処理部112-1,112-2,112-3が被処理データを置く内部状態変数値保持部111の領域を予め決めて内部状態変数値保持部111を、ステップ処理部の入力として接続する。このため、ステップ処理部112-1,112-2,112-3は常に、決められた内部状態変数値保持部111の領域のデータを入力としてステップ処理を行っている。
113はステップ処理データ選択部である。
ステップ処理データ選択部である113は、
・MD5のステップ処理部112-1の出力データMD5_TEMP。
・SHA1のステップ処理部112-2の出力データSHA1_TEMP。
・SHA512のステップ処理部112-3の出力データSHA512_TEMP。
を、A_EXE、A_ALG、B_EXE、B_ALGに応じて選択し、TEMP_Nに出力する。TEMP_N[255:0]は内部状態変数値保持部111の領域0に保持する内部状態変数値データ、TEMP_N[511:256]は内部状態変数値保持部111の領域1に保持する内部状態変数値データである。
(TEMP_N[255:0]、TEMP_N[511:256]のデータの選択)
図47は、TEMP_N[255:0]、TEMP_N[511:256]のデータの選択指針を例示する図である。
1401はTEMP_N[255:0]のデータ選択指針である。
・1401−aは、処理AでMD5のハッシュ処理を実行中のとき(A_EXE=1かつA_ALG=MD5)を示している。この場合、下位128ビットはMD5のステップ処理部112-1の出力データMD5_TEMP[127:0]を選択する。
・1401−bは、処理BでMD5のハッシュ処理を実行中のとき(B_EXE=1かつB_ALG=MD5)を示している。この場合、下位128ビットはMD5のステップ処理部112-1の出力データMD5_TEMP[127:0]を選択する。
・1401−cは上記以外を示しており、SHA512のステップ処理部112-3の出力データSHA512_TEMP [127:0]を選択する。
TEMP_N[255:128]は常にSHA512_TEMP[255:128]を出力する。
1402はTEMP_N[511:256]のデータ選択指針である。
・1402-aは、処理AでSHA1のハッシュ処理を実行中のとき(A_EXE=1かつA_ALG=SHA1)を示している。この場合、下位160ビットはSHA1のステップ処理部112-2の出力データSHA1_TEMP [159:0]を選択する。
・1402-bは、処理BでSHA1のハッシュ処理を実行中のとき(B_EXE=1かつB_ALG=SHA1)を示している。この場合、下位160ビットはSHA1のステップ処理部112-2の出力データSHA1_TEMP [159:0]を選択する。
・1402-cは上記以外を示しており、SHA512のステップ処理部112-3の出力データSHA512_TEMP [415:256]を選択する。
TEMP_N[511:416]は常にSHA512_TEMP[511:416]を出力する。
図47の選択指針によれば、処理A又は処理Bがハッシュ処理を実行中のときはそれぞれの処理に使用するステップ処理部の出力を選択する。実行中でないときはSHA512のステップ処理部112-3の出力データSHA512_TEMPを出力し、内部状態変数値保持部111に保持する。
114はハッシュ中間値データ選択部である。ハッシュ中間値データ選択部114は、ハッシュ初期値A_IV、B_IVとハッシュ中間値結果IHASH_NとをA_EXE、A_ALG、A_BLK_CNT、B_EXE、B_ALG、B_BLK_CNTに応じて選択する。そして、256ビットのデータIHASH_0、IHASH_1を出力する。
IHASH_0は後述のハッシュ中間値保持部115の領域0に保持するデータ、IHASH_1はハッシュ中間値保持部115の領域1に保持データである。
(IHASH_0、IHASH_1のデータ選択)
図48は、IHASH_0、IHASH_1のデータの選択指針を例示する図である。
1501はIHASH_0のデータ選択指針である。
・1501−aは、処理AでMD5のハッシュ処理を実行中で、最初のブロックでN番目の加算処理以外のとき(A_EXE=1かつA_ALG=MD5かつA_BLK_CNT=0かつA_STP_CNT≠65)を示している。この場合、処理Aハッシュ初期値の下位256ビットA_IV[255:0]を選択する。
・1501−bは、処理AでSHA512のハッシュ処理を実行中で、最初のブロックでN番目の加算処理以外のとき(A_EXE=1かつA_ALG=SHA512かつA_BLK_CNT=0かつA_STP_CNT≠81)を示している。この場合、処理Aハッシュ初期値の下位256ビットA_IV[255:0]を選択する。
・1501−cは、処理BでMD5のハッシュ処理を実行中で、最初のブロックでN番目の加算処理以外のとき(B_EXE=1かつB_ALG=MD5かつB_BLK_CNT=0かつB_STP_CNT≠65)を示している。この場合、処理Bハッシュ初期値の下位256ビットB_IV[255:0]を選択する。
・1501−dは、処理BでSHA512のハッシュ処理を実行中で、最初のブロックでN番目の加算処理以外のとき(B_EXE=1かつB_ALG=SHA512かつB_BLK_CNT=0かつB_STP_CNT≠81)を示している。この場合、処理Bハッシュ初期値の下位256ビットB_IV[255:0]を選択する。
・1501−eは上記以外を示しており、後述するハッシュ中間値データの下位256ビットIHASH_N [255:0]を選択する。
1502はTEMP_1のデータ選択指針である。
・1502-aは、処理AでMD5のハッシュ処理を実行中で、最初のブロックでN番目の加算処理以外のとき(A_EXE=1かつA_ALG=MD5かつA_BLK_CNT=0かつA_STP_CNT≠65)を示している。この場合、処理Aハッシュ初期値の下位256ビットA_IV[255:0]を選択する。
・1502-bは、処理AでSHA512のハッシュ処理を実行中で、最初のブロックでN番目の加算処理以外のとき(A_EXE=1かつA_ALG=SHA512かつA_BLK_CNT=0かつA_STP_CNT≠81)を示している。この場合、処理Aハッシュ初期値の上位256ビットA_IV[512:256]を選択する。
・1502-cは、処理BでMD5のハッシュ処理を実行中で、最初のブロックでN番目の加算処理以外のとき(B_EXE=1かつB_ALG=MD5かつB_BLK_CNT=0かつA_STP_CNT≠65)を示している。この場合、処理Bハッシュ初期値の下位256ビットB_IV[255:0]を選択する。
・1502-dは、処理BでSHA512のハッシュ処理を実行中で、最初のブロックでN番目の加算処理以外のとき(B_EXE=1かつB_ALG=SHA512かつB_BLK_CNT=0かつB_STP_CNT≠81)を示している。この場合、処理Bハッシュ初期値の上位256ビットB_IV[512:256]を選択する。
・1502-eは上記以外を示しており、後述するハッシュ中間値データの上位256ビットIHASH_N[511:256]を選択する。
図48の選択指針によれば、処理A又は処理Bがハッシュ処理を実行中のときは処理に使用するデータを選択し、実行中でないときはハッシュ中間値IHASH_Nを出力する。
115はハッシュ中間値データ選択部114の出力データを保持するハッシュ中間値保持部である。512ビットのフリップフロップで構成し、0〜255ビット目を領域0、256〜511ビット目を領域1とする。512ビットのフリップフロップの出力信号をIHASH[511:0]とする。領域0はIHASH_0を保持し、領域1はIHASH_1を保持する。
前述したように、加算処理は所定回数のステップ処理後の内部状態変数値を加算し、結果を新たなハッシュ中間値とする処理である。本実施形態においては1番目からN番目のステップ処理後の内部状態変数値に毎サイクル加算するが、ハッシュ中間値保持部には、N番目のステップ処理後の内部状態変数値に加算した値のみ保持する。
IHASH_0を保持する条件は以下である。
・処理AでMD5又はSHA512のハッシュ処理を実行中で、処理開始時又はN番目の加算処理のとき。
・処理BでMD5又はSHA512のハッシュ処理を実行中で、処理開始時又はN番目の加算処理のとき。
IHASH_1を保持する条件は以下である。
・処理AでSHA1又はSHA512のハッシュ処理を実行中で、処理開始時又はN番目の加算処理のとき。
・処理BでSHA1又はSHA512のハッシュ処理を実行中で、処理開始時又はN番目の加算処理のとき。
116-1、116-2、116-3は加算処理部であり、ステップ処理部112-1、112-2、112-3において生成し、内部状態変数値保持部111に保持したデータとハッシュ中間値保持部113の出力を加算して次のハッシュ中間値を生成する。加算処理部はハッシュ・アルゴリズムによりビット巾が異なるので、ハッシュ・アルゴリズム夫々に対応した加算処理部を備える。116-1はMD5の加算処理部である。116-2はSHA1の加算処理部である。116-3はSHA512の加算処理部である。加算処理部116-1,116-2,116-3の被処理データを置くハッシュ中間値保持部115の領域、及び内部状態変数値保持部111の領域は予め決めておく。
MD5加算処理部116-1は32ビットの加算器4個で構成し、ハッシュ中間値保持部115の領域0に被処理データを置くとする。ハッシュ中間値保持部115の領域0のデータIHASH[127:0]と内部状態変数値保持部111の出力データTEMP [127:0]を加算し、128ビットのハッシュ中間値MD5_IHASH[127:0]を出力する。
SHA1加算処理部116-2は32ビットの加算器5個で構成し、ハッシュ中間値保持部115の領域1に被処理データを置くとする。ハッシュ中間値保持部115の領域1のデータIHASH[415:256]と内部状態変数値保持部111の出力データTEMP[415:256]を加算し、160ビットのハッシュ中間値SHA1_IHASH[159:0]を出力する。
SHA512加算処理部116-3は64ビットの加算器8個で構成し、ハッシュ中間値保持部115の領域0、1に被処理データを置くとする。ハッシュ中間値保持部115領域0、1のデータIHASH[511:0]と内部状態変数値保持部111の出力データTEMP[511:0]を加算し、512ビットのハッシュ中間値SHA512_IHASH[255:0]を出力する。
加算処理部116-1,116-2,116-3は被処理データを置く内部状態変数値保持部111の領域を予め決めてあり、加算処理部の入力として接続する。このため、加算処理部116-1、116-2、116-3は常に決められた内部状態変数値保持部111の領域、及び内部状態変数値保持部111領域のデータを入力として加算処理を行う。
117はハッシュ中間値結果選択部である。ハッシュ中間値結果選択部117は、
・MD5の加算処理部116-1の出力データMD5_IHASH。
・SHA1の加算処理部116-2の出力データSHA1_IHASH。
・SHA512の加算処理部116-3の出力データSHA512_IHASH。
を、A_EXE、A_ALG、B_EXE、B_ALGに応じて選択し、IHASH_Nに出力する。IHASH_N[255:0]はハッシュ中間値保持部115の領域0に保持するハッシュ中間値データ、IHASH_N[511:256]はハッシュ中間値保持部115の領域1に保持するハッシュ中間値データである。
(IHASH_N[255:0]、IHASH_N[511:256]のデータ選択)
図49は、IHASH_N[255:0]、IHASH_N[511:256]のデータの選択指針を例示する図である。
1601はIHASH_N[255:0]のデータ選択指針である。
・1601−aは、処理AでMD5のハッシュ処理を実行中のとき(A_EXE=1かつA_ALG=MD5)を示している。この場合、下位128ビットはMD5の加算処理部116-1の出力データMD5_IHASH[127:0]を選択する。
・1601−bは、処理BでMD5のハッシュ処理を実行中のとき(B_EXE=1かつB_ALG=MD5)を示している。この場合、下位128ビットはMD5の加算処理部116-1の出力データMD5_IHASH [127:0]を選択する。
・1601−cは上記以外を示しており、SHA512の加算処理部116-3の出力データSHA512_IHASH [127:0]を選択する。
IHASH_N[255:128]は常にSHA512_IHASH[255:128]を出力する。
1602はIHASH_N[511:256]のデータ選択指針である。
・1602-aは、処理AでSHA1のハッシュ処理を実行中のとき(A_EXE=1かつA_ALG=SHA1)を示している。この場合、下位160ビットはSHA1の加算処理部116-2の出力データSHA1_IHASH[159:0]を選択する。
・1602-bは、処理BでSHA1のハッシュ処理を実行中のとき(B_EXE=1かつB_ALG=SHA1)を示している。この場合、下位160ビットはSHA1の加算処理部116-2の出力データSHA1_IHASH [159:0]を選択する。
・1602-cは上記以外を示しており、SHA512の加算処理部116-3の出力データSHA512_TEMP [415:256]を選択する。
IHASH_N[511:416]は常にSHA512_IHASH[511:416]を出力する。
図49の選択指針によれば、処理A又は処理Bがハッシュ処理を実行中のときは処理に使用するステップ処理部の出力を選択する。実行中でないときはSHA512の加算処理部116-3の出力データSHA512_IHASHを出力し、ハッシュ中間値保持部115に保持する。
(制御部の内部構成)
図34は制御部101の内部構成を例示する図である。図34において、201は処理Aを制御する処理A制御部である。処理A制御部201はハッシュ処理に必要なパラメタを設定する処理Aレジスタ群202、実行中のブロック数をカウントするブロックカウンタA 203、実行中のステップ数をカウントするステップカウンタA 204で構成されている。
図35は、レジスタの仕様を例示する図である。処理Aレジスタ群202に備えるレジスタの仕様を図35の301〜304に示す。
301は処理Aのハッシュ処理の開始を要求するレジスタA_ENBである。1を設定することによりハッシュ処理の開始を指示する。ハッシュ処理終了時に自動クリアする。302はハッシュ・アルゴリズムを設定するレジスタA_ALGである。”00”を設定するとMD5、”01”を設定するとSHA1、”10”を設定するとSHA512を選択する。303はハッシュ処理するメッセージのブロック数を設定するレジスタA_BLKである。ハッシュ処理するメッセージのブロック数-1の値を設定する。304はハッシュ処理に使用する初期値を設定するレジスタである。初期値はハッシュ・アルゴリズムにより既定されている。
処理A制御部201は、301のレジスタA_ENBに1が設定されてハッシュ処理の開始を要求されると、レジスタA_ALGで設定されたハッシュ処理を行うために必要となる
・拡張メッセージ保持部の領域。
・内部状態変数保持部の領域。
・拡張メッセージ処理部。
・ステップ処理部。
・加算処理部
(以降まとめて処理エンジンと呼ぶ)を使用する要求を後述の共有リソース管理部209に出す。拡張メッセージ保持部の特定の領域を使用する要求を示す信号A_ExMSG_REQを発行し、共有リソース管理部209から使用許可を示す信号A_ExMSG_ACKを受信する。内部状態変数保持部の特定の領域を使用する要求を示す信号信号A_TEMP_REQを発行し、共有リソース管理部209から使用許可を示す信号A_TEMP_ACKを受信する。特定のハッシュ・アルゴリズムの処理エンジンを使用する要求を示す信号A_ENG_REQを発行し、共有リソース管理部209から使用許可を示す信号A_ENG_ACKを受信する。
205は処理Bを制御する処理B制御部である。処理B制御部205は処理A制御部201と同様に、処理Bレジスタ群206、ブロックカウンタB 207、ステップカウンタB 208で構成されている。処理Bレジスタ群206に備えるレジスタの仕様を図35の305〜308に示す。
305は処理Bのハッシュ処理の開始を要求するレジスタである。306はハッシュ・アルゴリズムを設定するレジスタである。307はハッシュ処理するメッセージのブロック数を設定するレジスタである。ハッシュ処理するメッセージのブロック数-1の値を設定する。309はハッシュ処理に使用する初期値を設定するレジスタである。各レジスタの仕様は処理Aレジスタ群202に備えるレジスタ301〜304の仕様と同様である。
処理B制御部205は305のレジスタB_ENBに1が設定されてハッシュ処理の開始を要求されると、レジスタB_ALGで設定されたハッシュ処理を行うために必要となる
・拡張メッセージ保持部の領域。
・内部状態変数保持部の領域。
・処理エンジン。
を使用する要求を共有リソース管理部209に出す。拡張メッセージ保持部の特定の領域を使用する要求を示す信号B_ExMSG_REQを発行し、共有リソース管理部209から使用許可を示す信号B_ExMSG_ACKを受信する。内部状態変数保持部の特定領域を使用する要求を示す信号B_TEMP_REQを発行し、共有リソース管理部209から使用許可を示す信号B_TEMP_ACKを受信する。特定のハッシュ・アルゴリズムの処理エンジンを使用する要求を示す信号B_ENG_REQを発行し、共有リソース管理部209から使用許可を示す信号B_ENG_ACKを受信する。
209は処理Aと処理Bが共有するリソースを管理する共有リソース管理部である。処理Aと処理Bが共有するリソースは、以下の通りである。
・拡張メッセージ保持部107。
・内部状態変数値保持部111。
・ハッシュ中間値保持部115。
・メッセージ拡張処理部180-1,108-2,108-3。
・ステップ処理部112-1,112-2,112-3。
・加算処理部116-1,116-2,116-3。
210は拡張メッセージ保持部107の使用領域を管理する拡張メッセージ保持領域アービタであり、処理Aと処理Bが同一の領域を使用する要求をしたとき、アービトレーションし、使用許可を与える。
211は内部状態変数値保持部111の使用領域を管理する内部状態変数値保持アービタであり、処理Aと処理Bが同一の領域を使用する要求をしたとき、アービトレーションし、使用許可を与える。ハッシュ中間値保持部115は内部状態変数値保持部111と同一の領域に区切られ、ハッシュ中間値保持部115の領域の使用許可が与えられると同時にハッシュ中間値保持部115の同一領域の使用許可も与えられる。
212はメッセージ拡張処理部180-1,108-2,108-3の使用を管理する処理エンジンアービタであり、処理Aと処理Bが同一のハッシュ・アルゴリズムのメッセージ拡張処理部を使用する要求したとき、アービトレーションし、使用許可を与える。メッセージ拡張処理部の使用許可が与えられると同時に同一のハッシュ・アルゴリズムのステップ処理部、加算処理部の使用許可も与えられる。
213は処理Aの実行状態を示すA_EXEである。1のとき実行中を示す。拡張メッセージ保持領域の使用許可A_ExMSG_ACK、内部状態変数値保持領域の使用許可A_TEMP_ACK、処理エンジンの使用許可A_ENG_ACKが与えられたときにA_EXE=1(実行中)となる。
214は処理Bの実行状態を示すB_EXEである。1のとき実行中を示す。拡張メッセージ保持領域の使用許可B_ExMSG_ACK、内部状態変数値保持領域の使用許可B_TEMP_ACK、処理エンジンの使用許可B_ENG_ACKが与えられたときB_EXE=1(実行中)となる。
(システム構成例)
図36はハッシュ処理回路100を動作させるためのシステムの構成例を示した図である。
400はハッシュ処理システムである。401はハッシュ処理システム400の動作を制御するCPUである。402はハッシュ処理するメッセージやハッシュ値などを保持するためのメモリである。403は処理Aの入力メッセージをメモリ402からハッシュ処理回路100に転送し、処理Aのハッシュ処理結果をハッシュ処理回路100からメモリ402に転送するDMAC Aである。404は処理Bの入力メッセージをメモリ402からハッシュ処理回路100に転送し、処理Bのハッシュ処理結果をハッシュ処理回路100からメモリ402に転送するDMAC Bである。405はハッシュ処理システム200の割り込み信号を制御する割り込み制御部である。
406はハッシュ処理回路100、CPU401、メモリ402、DMAC A403、DMAC B404、割り込み制御部405を接続するシステムバスであり、アドレス信号、データ信号、制御信号などから成る。407はDMAC A403から割り込み制御部405への割り込み信号であり、処理Aのハッシュ処理結果をハッシュ回路100からメモリ402に転送した後に割り込み信号を上げ、割り込み制御部405に通知する。408はDMAC B204から割り込み制御部405への割り込み信号であり、処理Bのハッシュ処理結果をハッシュ回路100からメモリ402に転送した後に割り込み信号を上げ、割り込み制御部405に通知する。割り込み制御部405は不図示の割り込み信号により、CPU401にハッシュ処理結果格納を通知する。
(CPUの動作)
図37は、本実施形態のハッシュ処理システムにおける、メッセージ受信毎のCPUの動作フローを示す図である。501はメッセージ受信時のフローである。CPUはメッセージを受信するとST001において、処理Aか処理Bかどちらで処理するか決定する。CPU401は内部に処理Aと処理Bの処理状況を示す処理状況テーブルを持つ。処理状況テーブルは「処理中」か「処理中でない」ことを示すテーブルである。CPUは処理A、処理Bのうち「処理中でない」方で処理することに決定する。ここで、両方「処理中でない」場合は処理Aの優先度が高いとする。両方「処理中」の場合は、どちらかが空くのを待つ。処理Aに決定するとST002において、処理状況テーブルの処理Aを「処理中」と更新し、処理Aスレッドを起動する。処理Bに決定するとST003において、処理状況テーブルの処理Bを「処理中」と更新し、処理Bスレッドを起動する。
502は処理Aスレッド起動時のフローである。処理Aスレッドが起動するとST004において、DMAC Aのレジスタにメッセージをメモリ402からハッシュ回路100へ転送する入力転送設定、ハッシュ値をハッシュ回路100からメモリ402へ転送する出力転送設定をし、起動する。そして、ST005においてハッシュ処理回路100の処理Aレジスタ群にハッシュ処理のための設定をし、処理の開始を要求する。DMAC Aのデータ出力転送が終了するのを待ち(ST006)、処理Aスレッドを終了する。
503は処理Bスレッド起動時のフローである。処理Bスレッドが起動するとST009において、DMAC Bのレジスタにメッセージをメモリ402からハッシュ回路100へ入力する入力転送設定、ハッシュ値をハッシュ回路100からメモリ402へ転送する出力転送設定をし、起動する。そして、ST010においてハッシュ処理回路100の処理Bレジスタ群にハッシュ処理のための設定をし、処理の開始を要求する。DMAC Bのデータ出力転送が終了するのを待ち(ST011)、処理Bスレッドを終了する。
504は処理Aスレッド終了通知受信時のフローである。ST014において処理状況テーブルの処理Aを「処理中でない」と更新する。505は処理Bスレッド終了通知受信時のフローである。ST015において処理状況テーブルの処理Bを「処理中でない」と更新する。
(ハッシュ回路の動作)
図38は、本実施形態のハッシュ処理システムにおける、ハッシュ回路100の動作フローを示す図である。
600は処理Aの開始要求受信時のフローである。CPUが処理Aのジョブ開始設定レジスタ301に’1’を設定したとき処理Aの開始要求を受信する。処理Aの開始要求を受信すると処理A制御部201は、処理Aのハッシュ・アルゴリズム設定レジスタ302の値A_ALGに応じて共有リソース使用要求A_ExMSG_REQ、A_TEMP_REQ、A_ENG_REQを発行する(ST101−A)。
共有リソース管理部209がA_ExMSG_ACK、A_TEMP_ACK、A_ENG_ACKを与えるのを待つ(ST102-A)。A_ExMSG_ACK、A_TEMP_ACK、A_ENG_ACKが与えられるとDMAC Aに対してデータ入力転送要求を出す(ST103-A)。ST102-Aでアクノリッジを受信すると処理が開始し、ステップカウンタA_STP_CNTを+1更新する(ST105-A)。ST106−Aにおいてハッシュ・アルゴリズムで既定されている1ブロック分のデータ転送が終了したか判断し、終了していなければST103-Aへ戻り再びデータ入力転送要求を出す。終了していればデータ入力転送は終了し、ST107-Aへ進む。ST107-Aにおいて、ステップカウンタを+1更新する。
ST108-Aにおいて、A_STP_CNTがハッシュ・アルゴリズムで既定されている値+1を超えたかを判断する。規定値+1を超えるまでST107-Aを繰り返す。規定値+1を超えるとステップカウンタをクリアし、ブロックカウンタA_BLK_CNTを+1更新する(ST109-A)。ST108-AでA_BLK_CNTが処理Aブロック数設定レジスタ303で設定した値A_BLK-1を超えたかを判断する。A_BLK-1を超えるまでデータを入力し、ハッシュ処理を行う。A_BLK_CNTがA_BLK-1を超えるとブロックカウンタをクリアする(ST111−A)。ハッシュ値を出力するためST112-AにおいてDMAC Aに対してデータ出力転送要求を出し、ST113-Aでアクノリッジを待つ。ハッシュ値分データ転送が終了するまでST112-A,ST113-Aを繰り返す。
ハッシュ値分データ転送が終了すると処理Aのジョブ開始設定レジスタ301をクリアし(ST115-A)、共有リソース使用要求A_ExMSG_REQ、A_TEMP_REQ、A_ENG_REQを取り下げて(ST116-A)、処理を終了する。
601は処理Bの開始要求受信時のフローである。CPUが処理Bのジョブ開始設定レジスタ301に’1’を設定したとき処理Bの開始要求を受信する。処理Bの開始要求を受信すると処理B制御部201は、処理Bのハッシュ・アルゴリズム設定レジスタ302の値B_ALGに応じて共有リソース使用要求B_ExMSG_REQ、B_TEMP_REQ、B_ENG_REQを発行する(ST101−B)。共有リソース管理部209がB_ExMSG_ACK、B_TEMP_ACK、B_ENG_ACKを与えるのを待つ(ST102−B)。B_ExMSG_ACK、B_TEMP_ACK、B_ENG_ACKが与えられるとDMAC Bに対してデータ入力転送要求を出す(ST103−B)。ST102−Bにおいてアクノリッジを受信すると処理が開始し、ステップカウンタB_STP_CNTを+1更新する(ST105−B)。
ST106−Bにおいてハッシュ・アルゴリズムで既定されている1ブロック分のデータ転送が終了したか判断し、終了していなければST103−Bへ戻り再びデータ入力転送要求を出す。終了していればデータ入力転送は終了し、ST107−Bへ進む。ST107−Bにおいて、ステップカウンタを+1更新する。ST108−Bで、B_STP_CNTがハッシュ・アルゴリズムで既定されている値+1を超えたかを判断する。規定値+1を超えるまでST107−Bを繰り返す。規定値+1を超えるとステップカウンタをクリアし、ブロックカウンタB_BLK_CNTを+1更新する(ST109−B)。ST108−BにおいてB_BLK_CNTが処理Bブロック数設定レジスタ303で設定した値B_BLK-1を超えたかを判断する。B_BLK-1を超えるまでデータを入力し、ハッシュ処理を行う。B_BLK_CNTがB_BLK-1を超えるとブロックカウンタをクリアする(ST111−B)。ハッシュ値を出力するためST112−BにおいてDMAC Bに対してデータ出力転送要求を出し、ST113−Bでアクノリッジを待つ。ハッシュ値分データ転送が終了するまでST112-B,ST113−Bを繰り返す。ハッシュ値分データ転送が終了すると処理Bのジョブ開始設定レジスタ301をクリアし(ST115−B)、共有リソース使用要求B_ExMSG_REQ、B_TEMP_REQ、B_ENG_REQを取り下げて(ST116−B)、処理を終了する。
(メッセージ例)
図39は本実施形態において、ハッシュ処理する3つのメッセージであるメッセージA、メッセージB、メッセージCを例示した図である。メッセージAはハッシュ・アルゴリズムMD5でハッシュ処理する要求とする。16ワード(512bit)を1ブロックとし、合計2ブロックのメッセージである。メッセージBはハッシュ・アルゴリズムSHA1でハッシュ処理する要求とする。16ワード(512bit)を1ブロックとし、合計1ブロックのメッセージである。メッセージCはハッシュ・アルゴリズムSHA512でハッシュ処理する要求とする。16ワード(1024bit)を1ブロックとし、合計8ブロックのメッセージである。
(処理詳細)
図40、図41にCPU401がメッセージA、メッセージB、メッセージCの順に受信したときのタイミングチャートを示す。
メッセージAをT00以前に受信したとする。CPU401はメッセージAを受信すると図37のCPUの動作フローに従い動作し、ST001において処理Aでハッシュ処理すると決定する。ST005において、ハッシュ処理回路100の処理Aレジスタ群に設定する。A_ALG(302)にMD5を示す”00”、A_BLK(303)に”1”、A_IV(304)にMD5のアルゴリズムで既定されている値を設定し、A_ENB(301)に”1”を設定し、ハッシュ処理の開始を要求する。ハッシュ処理回路100は処理Aの開始要求を受信すると図38のハッシュ処理回路の動作フローに従い動作しST101−Aにて、MD5のハッシュ処理に必要な
・拡張メッセージ保持部107の領域0の使用要求。
・内部状態変数値保持部111の領域0の使用要求。
・MD5の処理エンジンの使用要求。
を共有リソース管理部209に出す。共有リソース管理部209は、処理Bが使用していないので使用許可A_ExMSG_ACK、A_TEMP_ACK、A_ENG_ACKを与え、処理が開始する。A_ExMSG_ACK、A_TEMP_ACK、A_ENG_ACKが与えられるとA_EXEは1になる(T00)。
T00で、A_EXE=”1”、A_ALG=MD5となる。このため、メッセージ拡張処理結果選択部109はExMSG_N[31:0]の出力としてMD5のメッセージ拡張処理部108-1の処理結果MD5_ExMSG[31:0]を選択する。そして、ステップ処理結果選択部113はTEMP_N[127:0]の出力としてMD5のステップ処理部112-1の処理結果MD5_TEMP[127:0]を選択する。また、加算処理結果選択部117はIHASH_N[127:0]の出力としてMD5の加算処理部116-1の処理結果MD5_IHASH[127:0]を選択する。また、DMAC Aに対してデータ入力転送要求A_DMA_REQ[0]を発行する。
T01で、A_DMA_ACK[0]がアサートされると次クロックの立ち上がりからステップカウンタA_STP_CNTの更新を開始する。A_STP_CNTは毎クロックサイクル+1更新し、65までカウントするとクリアし、ゼロに戻る。
T01-T06で、最初のブロックの入力メッセージ16ワードが転送され、DMA IF部103はA_DMA_IDATA[63:0]をA_MSG[63:0]として出力する。拡張メッセージ保持データ選択部106はExMSG_0[31:0]の出力として入力メッセージであるA_MSG[31:0]を選択する。
MD5のメッセージ拡張処理部108-1はT01-T06で拡張メッセージ保持部107の領域0を被処理データとし、処理を行う。ただし、拡張メッセージ保持データ選択部106は処理結果ExMSG_N[31:0]を選択しないので拡張メッセージ保持部107に保持しない。拡張メッセージ保持部107にT02-T07で1〜16番目の拡張メッセージ(入力メッセージ)を保持する。
MD5のステップ処理部112-1はT02-T07で拡張メッセージ保持部107に保持した1〜16番目の拡張メッセージを被処理データとし、処理を行い、1〜16番目の内部状態変数値を生成する。処理結果はT03-T08で内部状態変数値保持部111に保持する。内部状態変数値保持データ選択部110はT0-T1でTEMP_0[255:0]にハッシュ初期値A_IV[255:0]を出力し、T02以降MD5のステップ処理結果を選択したTEMP_N[255:0]を出力する。従ってMD5のステップ処理部112-1は、T02で、ハッシュ初期値と1番目の入力メッセージを使って1番目の内部状態変数値を生成しする。また、T03-T08で、n−1番目の内部状態変数値とn番目の入力メッセージを使ってn番目の内部状態変数値を生成する(n=2〜16)。
MD5の加算処理部116-1はT03-T8で内部状態変数値保持部111に保持した1〜16番目のステップ処理データを被処理データとし、1〜16番目の内部状態変数値に対する加算処理を行う。ただし、ハッシュ中間値保持データ選択部114は処理結果IHASH_N[255:0]は選択しないのでハッシュ中間値保持部115に保持しない。
T07-T17で拡張メッセージ保持データ選択部106はExMSG_0[31:0]の出力として、MD5のメッセージ拡張処理部108-1の処理結果であるExMSG_N[31:0]を選択する。
MD5のメッセージ拡張処理部108-1はT07-T17で拡張メッセージ保持部107領域0に保持した16ワードのデータを被処理データとし、17番目〜64番目の拡張メッセージを生成する。処理結果はT08-T20で拡張メッセージ保持部107に保持する。拡張メッセージ保持データ選択部106はMD5の拡張処理結果を選択したExMSG_N[31:0]を出力する。そこで、MD5のメッセージ拡張処理部108-1は、n−16番目からn−1番目の16ワードの拡張メッセージを使ってn番目の拡張メッセージを生成する(n=17〜64)。
MD5のステップ処理部112-1はT08-T18で拡張メッセージ保持部107に保持した17〜64番目の拡張メッセージを被処理データとし、処理を行い、17〜64番目の内部状態変数値を生成する。処理結果はT09-T19で内部状態変数値保持部111に保持する。内部状態変数値保持データ選択部110はMD5のステップ処理結果を選択したTEMP_N[255:0]を出力する。従ってMD5のステップ処理部112-1は、T08-T18でn−1番目の内部状態変数値とn番目の入力メッセージを使ってn番目の内部状態変数値を生成する(n=17〜64)。
MD5の加算処理部116-1はT09-T19で内部状態変数値保持部111に保持した17〜64番目のステップ処理データを被処理データとし、17〜64番目の内部状態変数値に対する加算処理を行う。T19で生成した64番目の内部状態変数値に対する加算処理結果が1ブロック目のハッシュ中間値である。ハッシュ中間値保持データ選択部114はT0-T18でハッシュ初期値A_IV[255:0]を出力し、T19以降IHASH_N[255:0]を出力する。従ってMD5の加算処理部116-1は、T19で、ハッシュ初期値と64番目の内部状態変数値の加算処理を行い、処理結果はT20でハッシュ中間値保持部115に保持する。
T20でステップカウンタA_STP_CNTはゼロに戻り、ブロックカウンタA_BLK_CNTが1になる。A_BLK_CNTはA_BLKの値”1”を超えないのでDMAC Aに対して次ブロックのデータ入力転送要求A_DMA_REQ[0]を発行する。
T21で、A_DMA_ACK[0]がアサートされると次クロックの立ち上がりからステップカウンタA_STP_CNTの更新を開始する。A_STP_CNTは毎クロックサイクル+1更新し、65までカウントするとクリアし、ゼロに戻す。
T21-T26で、2番目のブロックの入力メッセージ16ワードが転送され、DMA IF部103はA_DMA_IDATA[63:0]をA_MSG[63:0]として出力する。拡張メッセージ保持データ選択部106はExMSG_0[31:0]の出力として入力メッセージであるA_MSG[31:0]を選択する。
MD5のメッセージ拡張処理部108-1はT21-T26で拡張メッセージ保持部107の領域0を被処理データとし、処理を行う。ただし、拡張メッセージ保持データ選択部106は処理結果ExMSG_N[31:0]を選択しないので拡張メッセージ保持部107に保持しない。拡張メッセージ保持部107にT22-T27で1〜16番目の拡張メッセージ(入力メッセージ)を保持する。
MD5のステップ処理部112-1はT22-T27で拡張メッセージ保持部107に保持した1〜16番目の拡張メッセージを被処理データとし、処理を行い、1〜16番目の内部状態変数値を生成する。処理結果はT23-T28で内部状態変数値保持部111に保持する。内部状態変数値保持データ選択部110はT20-T21でTEMP_0[255:0]にIHASH[255:0]を出力し、T02以降MD5のステップ処理結果を選択したTEMP_N[255:0]を出力する。従ってMD5のステップ処理部112-1は、T22で、前のブロックのハッシュ中間値と1番目の入力メッセージを使って1番目の内部状態変数値を生成する。また、T23-T28で、n−1番目の内部状態変数値とn番目の入力メッセージを使ってn番目の内部状態変数値を生成する(n=2〜16)。
MD5の加算処理部116-1はT23-T28で内部状態変数値保持部111に保持した1〜16番目のステップ処理データを被処理データとし、1〜16番目の内部状態変数値に対する加算処理を行う。ただし、ハッシュ中間値保持115が保持する条件に一致しないので保持しない。
T27-T42で拡張メッセージ保持データ選択部106はExMSG_0[31:0]の出力として、MD5のメッセージ拡張処理部108-1の処理結果であるExMSG_N[31:0]を選択する。
MD5のメッセージ拡張処理部108-1はT27-T42で拡張メッセージ保持部107領域0に保持した16ワードのデータを被処理データとし、17番目〜64番目の拡張メッセージを生成する。処理結果はT28-T43で拡張メッセージ保持部107に保持する。拡張メッセージ保持データ選択部106はMD5の拡張処理結果を選択したExMSG_N[31:0]を出力する。そこで、MD5のメッセージ拡張処理部108-1は、n−16番目からn−1番目の16ワードの拡張メッセージを使ってn番目の拡張メッセージを生成する(n=17〜64)。
MD5のステップ処理部112-1はT28-T43で拡張メッセージ保持部107に保持した17〜64番目の拡張メッセージを被処理データとし、処理を行い、17〜64番目の内部状態変数値を生成する。処理結果はT29-T44で内部状態変数値保持部111に保持する。内部状態変数値保持データ選択部110はMD5のステップ処理結果を選択したTEMP_N[255:0]を出力する。従ってMD5のステップ処理部112-1は、T28-43でn−1番目の内部状態変数値とn番目の入力メッセージを使ってn番目の内部状態変数値を生成する(n=17〜64)。
MD5の加算処理部116-1はT29-T44で内部状態変数値保持部111に保持した17〜64番目のステップ処理データを被処理データとし、17〜64番目の内部状態変数値に対する加算処理を行う。T44で生成した64番目の内部状態変数値に対する加算処理結果が2ブロック目のハッシュ中間値である。ハッシュ中間値保持部115に前のブロックのハッシュ中間値が保持されているので、前のブロックのハッシュ中間値と64番目の内部状態変数値の加算処理を行い、処理結果はT45でハッシュ中間値保持部115に保持する。
T45でステップカウンタA_STP_CNTはゼロに戻し、ブロックカウンタA_BLK_CNTが2になる。A_BLK_CNTはA_BLKの値”1”を超えたのでブロックカウンタA_BLK_CNTをクリアし、DMAC Aに対してハッシュ値のデータ出力転送要求A_DMA_REQ[1]を発行する。
T46-T47でA_DMA_ACK[1]がアサートされ、MD5のハッシュ値128ビットを出力転送する。
ハッシュ処理回路100は図38のハッシュ処理100の動作フローに従い動作しST116-Aにて、MD5のハッシュ処理に必要な
・拡張メッセージ保持部107の領域0の使用要求。
・内部状態変数値保持部111の領域0の使用要求。
・MD5の処理エンジン108-1,112-1,116-1の使用要求
を取り下げ、メッセージAのハッシュ処理を完了する。使用要求が取り下げられたので使用許可A_ExMSG_ACK、A_TEMP_ACK、A_ENG_ACKも取り下げられて、A_EXE=0になる(T48)。
一方、メッセージBをT05に受信したとする。CPU401はメッセージAを受信すると図37のCPUの動作フローに従い動作する。ST001において処理Aでメッセージを処理中なので、処理Bでハッシュ処理すると決定する。ST011において、ハッシュ処理回路100の処理Bレジスタ群に設定する。B_ALG(306)にSHA1を示す”01”、B_BLK(307)に”0”、B_IV(308)にSHA1のアルゴリズムで既定されている値を設定し、B_ENB(305)に”1”を設定し、ハッシュ処理の開始を要求する。ハッシュ処理回路100は処理Bの開始要求を受信すると図38のハッシュ処理回路の動作フローに従い動作しST101-Bにて、SHA1のハッシュ処理に必要な
・拡張メッセージ保持部107の領域1の使用要求。
・内部状態変数値保持部111の領域1の使用要求。
・SHA1の処理エンジンの使用要求。
を共有リソース管理部209に出す。共有リソース管理部209は、処理Aが使用していないので使用許可B_ExMSG_ACK、B_TEMP_ACK、B_ENG_ACKを与え、処理が開始する。B_ExMSG_ACK、B_TEMP_ACK、B_ENG_ACKが与えられるとB_EXEは1になる(T06)。
T06で、B_EXE=”1”、B_ALG=SHA1となる。これに応じて、メッセージ拡張処理結果選択部109はExMSG_N[63:32]の出力としてSHA1のメッセージ拡張処理部108-2の処理結果SHA1_ExMSG[31:0]を選択する。そして、ステップ処理結果選択部113はTEMP_N[255:128]の出力としてSHA1のステップ処理部112-2の処理結果SHA1_TEMP[127:0]を選択する。また、加算処理結果選択部117はIHASH_N[415:256]の出力としてSHA1の加算処理部116-1の処理結果SHA1_IHASH[159:0]を選択する。また、DMAC Bに対してデータ入力転送要求B_DMA_REQ[0]を発行する。
T07で、B_DMA_ACK[0]がアサートされると次クロックの立ち上がりからステップカウンタB_STP_CNTの更新を開始する。B_STP_CNTは毎クロックサイクル+1更新し、81までカウントするとクリアし、ゼロに戻す。
T06-T12で、最初のブロックの入力メッセージ16ワードが転送され、DMA IF部103はB_DMA_IDATA[63:0]をB_MSG[63:0]として出力する。拡張メッセージ保持データ選択部106はExMSG_1[31:0]の出力として入力メッセージであるB_MSG[31:0]を選択する。
SHA1のメッセージ拡張処理部108-2はT06-T12で拡張メッセージ保持部107の領域1を被処理データとし、処理を行う。ただし、拡張メッセージ保持データ選択部106は処理結果ExMSG_N[63:32]を選択しないので拡張メッセージ保持部107に保持しない。拡張メッセージ保持部107にT07-T13で1〜16番目の拡張メッセージ(入力メッセージ)を保持する。
SHA1のステップ処理部112-2はT07-T13で拡張メッセージ保持部107に保持した1〜16番目の拡張メッセージを被処理データとし、処理を行い、1〜16番目の内部状態変数値を生成する。処理結果はT08-T14で内部状態変数値保持部111に保持する。内部状態変数値保持データ選択部110はT06-T07でTEMP_1[255:0]にハッシュ初期値B_IV[255:0]を出力し、T08以降SHA1のステップ処理結果を選択したTEMP_N[511:256]を出力する。従ってSHA1のステップ処理部112-2は、T08で、ハッシュ初期値と1番目の入力メッセージを使って1番目の内部状態変数値を生成する。また、T09-T13で、n−1番目の内部状態変数値とn番目の入力メッセージを使ってn番目の内部状態変数値を生成する(n=2〜16)。
SHA1の加算処理部116-2はT08-T14で内部状態変数値保持部111に保持した1〜16番目のステップ処理データを被処理データとし、1〜16番目の内部状態変数値に対する加算処理を行う。ただし、ハッシュ中間値保持データ選択部114は処理結果IHASH_N[511:256]は選択しないのでハッシュ中間値保持部115に保持しない。
T13-T32で拡張メッセージ保持データ選択部106はExMSG_1[31:0]の出力として、SHA1のメッセージ拡張処理部108-2の処理結果であるExMSG_N[63:32]を選択する。
SHA1のメッセージ拡張処理部108-2はT13-T32で拡張メッセージ保持部107領域1に保持した16ワードのデータを被処理データとし、17番目〜80番目の拡張メッセージを生成する。処理結果はT14-T33で拡張メッセージ保持部107に保持する。拡張メッセージ保持データ選択部106はSHA1の拡張処理結果を選択したExMSG_N[31:0]を出力する。そこで、SHA1のメッセージ拡張処理部108-2は、n−16番目からn−1番目の16ワードの拡張メッセージを使ってn番目の拡張メッセージを生成する(n=17〜80)。
SHA1のステップ処理部112-2はT14-T33で拡張メッセージ保持部107に保持した17〜80番目の拡張メッセージを被処理データとし、処理を行い、17〜80番目の内部状態変数値を生成する。処理結果はT15-T34で内部状態変数値保持部111に保持する。内部状態変数値保持データ選択部110はSHA1のステップ処理結果を選択したTEMP_N[511:256]を出力する。従ってSHA1のステップ処理部112-2は、T14-33でn−1番目の内部状態変数値とn番目の入力メッセージを使ってn番目の内部状態変数値を生成する(n=17〜80)。
SHA1の加算処理部116-2はT15-T34で内部状態変数値保持部111に保持した17〜80番目のステップ処理データを被処理データとし、17〜80番目の内部状態変数値に対する加算処理を行う。T34で生成した80番目の内部状態変数値に対する加算処理結果が1ブロック目のハッシュ中間値である。ハッシュ中間値保持データ選択部114はT06-T33でハッシュ初期値B_IV[255:0]を出力し、T34以降IHASH_N[255:0]を出力する。従ってSHA1の加算処理部116-2は、T34で、ハッシュ初期値と80番目の内部状態変数値の加算処理を行い、処理結果はT35でハッシュ中間値保持部115に保持する。
T35でステップカウンタB_STP_CNTはゼロに戻り、ブロックカウンタB_BLK_CNTは1になる。B_BLK_CNTはB_BLKの値”0”を超えたのでブロックカウンタB_CLK_CNTをクリアし、DMAC Bに対してハッシュ値のデータ出力転送要求B_DMA_REQ[1]を発行する。
T36-T38でB_DMA_ACK[1]がアサートされ、SHA1のハッシュ値160ビットを出力転送する。ハッシュ処理回路100は図38のハッシュ処理100の動作フローに従い動作しST116-Bにて、SHA1のハッシュ処理に必要な
・拡張メッセージ保持部107の領域1の使用要求。
・内部状態変数値保持部111の領域1の使用要求。
・SHA1の処理エンジン108-2,112-2,116-2の使用要求。
を取り下げ、メッセージBのハッシュ処理を完了する。B_ExMSG_ACK、B_TEMP_ACK、B_ENG_ACKが下がるとB_EXE=0になる(T39)。
さらに、メッセージCを、メッセージBのハッシュ処理を完了した後で、且つ、メッセージAのハッシュ処理が完了する前に受信したとする。CPU401はメッセージAを受信すると図37のCPUの動作フローに従い動作する。ST001において処理Aでメッセージを処理中なので、処理Bでハッシュ処理すると決定する。ST011において、ハッシュ処理回路100の処理Bレジスタ群に設定する。B_ALG(306)にSHA512を示す”10”、B_BLK(307)に”7”、B_IV(308)にSHA512のアルゴリズムで既定されている値を設定し、B_ENB(305)に”1”を設定し、ハッシュ処理の開始を要求する。
ハッシュ処理回路100は処理Bの開始要求を受信すると図38のハッシュ処理回路の動作フローに従い動作し、ST101-Bにて、SHA512のハッシュ処理に必要な
・拡張メッセージ保持部107の領域0,1の使用要求。
・内部状態変数値保持部111の領域0,1の使用要求。
・SHA512の処理エンジンの使用要求。
を共有リソース管理部209に出す。共有リソース管理部209は、処理Aが拡張メッセージ保持部107の領域0、内部状態変数値保持部111の領域0を使用しているのでB_ExMSG_ACK、B_TEMP_ACKを与えない。エンジン108-3,112-3,116-3は処理Aが使用していないのでB_ENG_ACKを与える。共有リソース管理部209がB_ExMSG_ACK、B_TEMP_ACKを与えるまで処理は開始しない。
T48で処理AがメッセージAのハッシュ処理を完了し、拡張メッセージ保持部107の領域1の使用要求、内部状態変数値保持部111の領域1の使用要求を取り下げるとB_ExMSG_ACK、B_TEMP_ACKが与えられ、B_EXEは1になる。
T48ではB_EXE=”1”、B_ALG=SHA512となる。そこで、メッセージ拡張処理結果選択部109はExMSG_N[63:0]の出力としてSHA512のメッセージ拡張処理部108-3の処理結果SHA512_ExMSG[63:0]を選択する。そして、ステップ処理結果選択部113はTEMP_N[511:0]の出力としてSHA512のステップ処理部112-3の処理結果SHA512_TEMP[511:0]を選択する。また、加算処理結果選択部117はIHASH_N[511:0]の出力としてSHA512の加算処理部116-3の処理結果SHA512_IHASH[511:0]を選択する。T48でDMAC Bに対してデータ入力転送要求B_DMA_REQ[0]を発行する。
T49でB_DMA_ACK[0]がアサートされると次クロックの立ち上がりからステップカウンタB_STP_CNTの更新を開始する。B_STP_CNTは毎クロックサイクル+1更新し、81までカウントするとクリアし、ゼロに戻す。
T49-T54で、最初のブロックの入力メッセージ16ワードが転送され、DMA IF部103はB_DMA_IDATA[63:0]をB_MSG[63:0]として出力する。拡張メッセージ保持データ選択部106はExMSG_0[31:0]の出力として入力メッセージであるB_MSG[31:0]を、ExMSG_1[31:0]の出力として入力メッセージであるB_MSG[63:32]を選択する。
SHA512のメッセージ拡張処理部108-3はT49-T54で拡張メッセージ保持部107の領域0,1を被処理データとし、処理を行う。ただし、拡張メッセージ保持データ選択部106は処理結果ExMSG_N[63:0]を選択しないので拡張メッセージ保持部107に保持しない。拡張メッセージ保持部107にT50-T55で1〜16番目の拡張メッセージ(入力メッセージ)を保持する。
SHA512のステップ処理部112-3はT50-T55で拡張メッセージ保持部107に保持した1〜16番目の拡張メッセージを被処理データとし、処理を行い、1〜16番目の内部状態変数値を生成する。処理結果はT51-T56で内部状態変数値保持部111に保持する。内部状態変数値保持データ選択部110はT48-T49でTEMP_0[255:0]にハッシュ初期値の下位256ビットB_IV[255:0]を出力する。また、TEMP_1[255:0]に上位256ビットB_IV[511:256]を選択する。T50以降TEMP_0[255:0]にSHA512のステップ処理結果の下位256ビットを選択したTEMP_N[255:0]を出力する。また、TEMP_1[255:0]にSHA512のステップ処理結果の上位256ビットを選択したTEMP_N[511:256]を出力する。従ってSHA512のステップ処理部112-3は、T50で、ハッシュ初期値と1番目の入力メッセージを使って1番目の内部状態変数値を生成する。そして、T51-T55で、n−1番目の内部状態変数値とn番目の入力メッセージを使ってn番目の内部状態変数値を生成する(n=2〜16)。
SHA512の加算処理部116-3はT51-T56で内部状態変数値保持部111に保持した1〜16番目のステップ処理データを被処理データとし、1〜16番目の内部状態変数値に対する加算処理を行う。ただし、ハッシュ中間値保持データ選択部114は処理結果IHASH_N[511:0]は選択しないのでハッシュ中間値保持部115に保持しない。
T55-T60で拡張メッセージ保持データ選択部106はExMSG_0[31:0]にSHA512のメッセージ拡張処理部108-3の処理結果の上位ビットであるExMSG_N[31:0]を出力する。また、ExMSG_1[31:0]に、SHA512のメッセージ拡張処理部108-3の処理結果の下位ビットであるExMSG_N[63:32]を出力する。
SHA512のメッセージ拡張処理部108-3はT55-T60で拡張メッセージ保持部107領域0,1に保持した16ワードのデータを被処理データとし、17番目〜80番目の拡張メッセージを生成する。処理結果はT56-T61で拡張メッセージ保持部107に保持する。拡張メッセージ保持データ選択部106は、ExMSG_0[31:0]にSHA512のメッセージ拡張処理部108-3の処理結果の上位ビットであるExMSG_N[31:0]を出力する。そして、ExMSG_1[31:0]に、SHA512のメッセージ拡張処理部108-3の処理結果の下位ビットであるExMSG_N[63:32]を出力する。これに応じて、SHA512のメッセージ拡張処理部108-3は、n−16番目からn−1番目の16ワードの拡張メッセージを使ってn番目の拡張メッセージを生成する(n=17〜80)。
SHA512のステップ処理部112-3はT56-T61で拡張メッセージ保持部107に保持した17〜80番目の拡張メッセージを被処理データとし、処理を行い、17〜80番目の内部状態変数値を生成する。処理結果はT57-T62で内部状態変数値保持部111に保持する。内部状態変数値保持データ選択部110は、TEMP_0[255:0]にSHA512のステップ処理結果を選択したTEMP_N[511:0]の下位256ビットTEMP_N[255:0]を出力する。また、TEMP_1[255:0]に上位256ビットTEMP_N[511:256]を出力する。従ってSHA512のステップ処理部112-3は、T56-61でn−1番目の内部状態変数値とn番目の入力メッセージを使ってn番目の内部状態変数値を生成する(n=17〜80)。
SHA512の加算処理部116-3はT57-T62で内部状態変数値保持部111に保持した17〜80番目のステップ処理データを被処理データとし、17〜80番目の内部状態変数値に対する加算処理を行う。T62で生成した80番目の内部状態変数値に対する加算処理結果が1ブロック目のハッシュ中間値である。ハッシュ中間値保持データ選択部114はT48-T61でIHASH_0[255:0]にハッシュ初期値の下位256ビットB_IV[255:0]を出力し、IHASH_1[511:256]に上位256ビットB_IV[511:256]を選択する。T62以降IHASH_0[255:0]の出力としてIHASH_N[255:0]、IHASH_1[511:256]の出力としてIHASH_N[511:256]を出力する。従ってSHA512の加算処理部116-3は、T62で、ハッシュ初期値と80番目の内部状態変数値の加算処理を行い、処理結果はT63でハッシュ中間値保持部115に保持する。
T63でステップカウンタB_STP_CNTはゼロに戻し、ブロックカウンタB_BLK_CNTは1になる。B_BLK_CNTはB_BLKの値”7”を超えないのでDMAC Bに対して次ブロックのデータ入力転送要求A_DMA_REQ[0]を発行する。
ブロック数分以上の処理を同様に繰り返す。
T66で最終ブロックの80番目の内部変数値に対する加算処理結果を得、T67で処理結果をハッシュ中間値保持部115に保持する。
T67でステップカウンタB_STP_CNTはゼロに戻り、ブロックカウンタB_BLK_CNTが8になる。A_BLK_CNTはA_BLKの値”7”を超えたのでブロックカウンタB_BLK_CNTをクリアし、DMAC Bに対してハッシュ値のデータ出力転送要求B_DMA_REQ[1]を発行する。
T81-T88でB_DMA_ACK[1]がアサートされ、SHA512のハッシュ値512ビットを出力転送する。ハッシュ処理回路100は図38のハッシュ処理100の動作フローに従い動作しST116-Bにて、SHA512のハッシュ処理に必要な
・拡張メッセージ保持部107の領域0,1の使用要求。
・内部状態変数値保持部111の領域0,1の使用要求。
・SHA512の処理エンジン108-3,112-3,116-3の使用要求。
を取り下げ、メッセージCのハッシュ処理を完了する。B_ExMSG_ACK、B_TEMP_ACK、B_ENG_ACKが下がるとB_EXE=0になる(T89)。
以上のように、上記構成はMD5,SHA1,SHA512の複数のハッシュ・アルゴリズムのメッセージを処理することが可能である。また、拡張メッセージ保持部、内部状態変数値保持部、ハッシュ中間値保持部はハッシュ・アルゴリズム毎に占有して使用しないため回路規模の増大を抑えることができる。
さらに、メッセージAとメッセージBの処理は並列に動作させることができ、共有リソースが他の処理に使われているため並列に処理することができないメッセージCは先に処理中のメッセージAの処理が終了したとき、ハッシュ処理を開始し、実行できる。
また、メッセージの処理が行われていないときにも処理エンジンは常に被処理データ領域に対して処理を行い、且つ、被処理データ領域は常に更新する。このため、特定のハッシュ・アルゴリズム処理が要求されて実行するとき、消費電力の変動を抑えることができ、耐タンパ性に優れた安全性の高いハッシュ処理装置を提供することを可能にした。
上記構成によれば、回路規模の増大を抑えながら複数の相異なるハッシュ・アルゴリズムのハッシュ処理が実行可能で、且つ、より少ない制約条件下で複数のメッセージに対するハッシュ処理を同時に実行することが可能である。さらには、どのハッシュ・アルゴリズムが選択される場合でも消費電力の変動を抑えることができ、耐タンパ性に優れた安全性の高いハッシュ処理装置を提供することができる。
また、中間値保持部は、複数のハッシュ処理部の出力データの中でビット幅が最も大きいものを格納可能である。すなわち、最大ビット幅で上記構成は実現されている。このため、処理しているハッシュアルゴリズムの特定を困難にすることができる。また、最大ビット幅を必要としないハッシュアルゴリズム処理時には、使用していないビット領域を利用することでハッシュ処理の中断再開時のオーバーヘッドを削減したり、入力ブロックの先読みにより処理を高速化したりすることができる。