(57)【要約】【課題】ＣＰＵに対して負荷をかけずにパディング付加や長さ付加を行うことができるようにする。【解決手段】メッセージ入力回路１００によって、メッセージが所定のデータ長のデータに分割され、先頭から順に入力される。また、メッセージ入力回路１００によって、メッセージの長さを示す長さ情報が入力される。すると、パディング回路２１０によって、メッセージ入力回路１００で入力されたデータの総量と長さ情報とに応じてメッセージの最後のデータが判断され、最後のデータに続けてパディングが出力される。その後、長さ付加回路２２０により、パディング回路２１０で出力されたパディングの総量に応じてパディングの終了位置が判断され、パディングに続けて長さ情報が出力される。【選択図】        図１
2004157164.tif 000002
【特許請求の範囲】
【請求項１】
メッセージダイジェストを生成するメッセージダイジェスト生成回路において、
メッセージを所定のデータ長のデータに分割して先頭から順に入力するとともに、前記メッセージの長さを示す長さ情報を入力するメッセージ入力回路と、
前記メッセージ入力回路で入力された前記データの総量と前記長さ情報とに応じて前記メッセージの最後の前記データを判断し、前記最後の前記データに続けてパディングを出力するパディング回路と、
前記メッセージ入力回路で入力された前記データと前記パディング回路で出力された前記パディングとの総量に応じて前記パディングの終了位置を判断し、前記パディングに続けて前記長さ情報を出力する長さ付加回路と、
を有することを特徴とするメッセージダイジェスト生成回路。
【請求項２】
前記パディング回路は、前記長さ情報から、前記メッセージ入力回路から入力された前記データの容量を順次減算する減算器と、前記減算器の減算結果が１ブロック分のデータ長以下になったときにパディング対象ブロックを示す信号を出力する比較器とを有することを特徴とする請求項１記載のメッセージダイジェスト生成回路。
【請求項３】
前記メッセージ入力回路は、１ブロック分の前記データを入力する毎にブロック切替を示す信号を出力し、
前記減算器は、前記ブロック切替を示す信号が出力されると、前記長さ情報から前記１ブロック分のデータ長を減算することを特徴とする請求項２記載のメッセージダイジェスト生成回路。
【請求項４】
前記メッセージ入力回路は、前記データのサイズをＮバイト（Ｎは自然数）とし、
前記パディング回路は、前記比較器より前記パディング対象ブロックを示す信号が出力されたとき、前記減算器の前記減算結果をＮで除算し、その後前記データが入力された回数をカウントし、カウントした値が前記除算による商の値に達すると、入力された前記データに続けて前記除算による剰余の値に応じたパディングを出力することを特徴とする請求項２記載のメッセージダイジェスト生成回路。
【請求項５】
前記メッセージ入力回路は、前記データのサイズを２ｎバイト（ｎは自然数）とし、
前記パディング回路は、前記減算器の前記減算結果の右ｎビットシフトするビットシフト回路を有しており、前記ビットシフト回路によるシフト結果を前記除算結果とすることを特徴とする請求項４記載のメッセージダイジェスト生成回路。
【請求項６】
前記メッセージ入力回路は、前記データのサイズを２ｎバイト（ｎは自然数）とし、
前記パディング回路は、ｎビットで表せる数値それぞれに対応付けて前記パディング値が格納された記憶装置と、前記減算器の前記減算結果の下位ｎビットの値に応じて前記記憶装置から出力するパディング値を選択するセレクタとを有することを特徴とする請求項４記載のメッセージダイジェスト生成回路。
【請求項７】
前記長さ付加回路は、１ブロック分のデータ長の倍数から前記長さ情報のデータ長の分を減算したデータ量に相当する前記データおよび前記パディングが出力された後、前記長さ情報を出力することを特徴とする請求項１記載のメッセージダイジェスト生成回路。
【請求項８】
メッセージにパディングを付加するパディング回路において、
前記メッセージが所定のデータ長のデータに分割され先頭から順に入力されるとともに、前記メッセージの長さを示す長さ情報が入力されると、入力された前記データの総量と前記長さ情報とに応じて前記メッセージの最後の前記データを判断する判断回路と、
前記判断回路で判断された前記最後の前記データに続けてパディングを出力するパディング出力回路と、
を有することを特徴とするパディング回路。
【請求項９】
前記判断回路は、前記長さ情報から、入力された前記データの容量を順次減算する減算器と、前記減算器の減算結果が１ブロック分のデータ長以下になったときにパディング対象ブロックを示す信号を出力する比較器とを有することを特徴とする請求項８記載のパディング回路。
【請求項１０】
前記データは、Ｎバイト（Ｎは自然数）単位であり、
前記判断回路は、前記比較器より前記パディング対象ブロックを示す信号が出力されたとき、前記減算器の前記減算結果をＮで除算し、その後前記データが入力された回数をカウントし、
前記パディング出力回路は、カウントした値が前記除算による商の値に達すると、入力された前記データに続けて前記除算による剰余の値に応じたパディングを出力することを特徴とする請求項９記載のパディング回路。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はメッセージダイジェストを生成するメッセージダイジェスト生成回路およびメッセージ認証の際のパディングを行うパディング回路に関し、特にハッシュ関数のメッセージダイジェストアルゴリズムに沿った処理を行うメッセージダイジェスト生成回路およびパディング回路に関する。
【０００２】
【従来の技術】
情報通信の利用範囲が広がるのに伴い、通信データに関する高い安全性が求められている。そのため、データのセキュリティ技術の重要性が増している。
【０００３】
データのセキュリティ技術の１つに、データの改竄等を防ぐための認証技術がある。認証技術では、受け取ったデータが、正しい送信元から送られたものであることや、第三者により改竄されていないことを認証するための技術である。
【０００４】
データ認証技術には、ハッシュ関数を用いる技術がある。ハッシュ関数アルゴリズムとしては、ＭＤ（Ｍｅｓｓａｇｅ  Ｄｉｇｅｓｔ  ａｌｇｏｒｉｔｈｍ）５やＳＨＡ（Ｓｅｃｕｒｅ  Ｈａｓｈ  Ａｌｇｏｒｉｔｈｍ）１などがある。ＭＤ５は、ＩＥＴＦ（Ｉｎｔｅｒｎｅｔ  Ｅｎｇｉｎｅｅｒｉｎｇ  Ｔａｓｋ  Ｆｏｒｃｅ）で発行されたＲＦＣ（Ｒｅｑｕｅｓｔｓ  Ｆｏｒ  Ｃｏｍｍｅｎｔ）１３２１に規定されている。また、ＳＨＡ１は、ＲＦＣ２８４１に規定されている。これらのハッシュ関数アルゴリズムは、ネットワークで使われるメッセージ認証、デジタル署名法などの通信暗号技術に最も使われているハッシュ関数である。
【０００５】
ハッシュ関数を用いたメッセージ認証では、大きな文章にデジタル署名を施すとき、元になる長いメッセージ（文書、データファイルといった可変長のメッセージ）に対してハッシュ関数を適用し、固定長の文字列を生成する。この固定長の文字列をメッセージダイジェストという。これは、長いメッセージや文書をコンピュータ処理することによって、簡潔なダイジェストとして表すという考え方で、元の入力情報（メッセージ）の「デジタル指紋」ととらえることもできる。
【０００６】
メッセージダイジェストを用いる場合には、使用する通信路の安全性やメッセージ自体の重要性を考慮して利用形態が決定される。たとえば、メッセージ自体は公になっても問題が少ないが、改竄されると問題が生じるような情報（例えば、電子商取引での発注数量など）を扱う場合、メッセージ認証のためにハッシュ関数を利用する。また、メッセージ自身も公になると問題が生じるような情報（例えば、電子商取引でのクレジットカード番号など）を扱う場合、メッセージダイジェストを付加した後に暗号化を行う。これにより、送信する情報全体が保護される。
【０００７】
ところで、ＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）ｓｅｃ（ｓｅｃｕｒｉｔｙ）というＩＰプロトコルにセキュリティ機能を追加したプロトコルがある。ＩＰｓｅｃは、次世代ＩＰであるＩＰｖ６において、実装が必須とされている。そのため、ＩＰｓｅｃは、現時点でも最も将来性を約束されたセキュリティプロトコルである。
【０００８】
ＩＰｓｅｃを用いれば、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、私的もしくは公共のＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、およびインターネット経由の通信の安全性を、ＩＰレベルで確保することができる。ＩＰレベルでの安全性を確保することによって、ネットワークの運営者はセキュリティ機構を備えたアプリケーションだけでなく、セキュリティに関する備えの無い多くのアプリケーションに対しても安全なネットワーク環境を提供できる。すなわち、個々のアプリケーションに対してはセキュリティ関連機能を実装せずに、安全な通信を行うことができる。
【０００９】
ＩＰレベルのセキュリティは、認証、秘密性、鍵管理の三要素を含む。認証機構は受け取ったパケットが実際にパケットヘッダに記載してある送り主から来ていることを確認する。さらにこのパケットが送信中に外部からの改竄を受けていないことも保証する。秘密性を保つ機能は通信ノードが第三者からの盗聴を防ぐため、メッセージを暗号化する。鍵管理は鍵の安全な交換に関するものである。
【００１０】
このように、ハッシュ関数を用いた技術は今後益々必要度が高まる技術である。ハッシュ関数を用いたメッセージ認証技術では、一般的にパディングの付加処理と長さ情報の付加（以下、単に長さの付加という）処理とが行われる。
【００１１】
例えば代表的なハッシュ関数であるＳＨＡ１メッセージダイジェストアルゴリズムでは、任意の長さのメッセージが入力されると、入力されたメッセージに対する１６０ビットのメッセージダイジェストを生成し、出力する。ＳＨＡ１アルゴリズムは、大別して以下の５つの構成となっている。
［第１の処理］パディングビットの付加
［第２の処理］長さの付加
［第３の処理］メッセージダイジェストバッファの初期化
［第４の処理］１６ワード（５１２ビット）長のブロックメッセージの処理
［第５の処理］出力
ここで、［第１の処理］パディングビットの付加、［第２の処理］長さの付加に着目する。以下、１ワードは３２ビットを指すものとする。
【００１２】
ハッシュ関数としてＳＨＡ１を使用する場合、メッセージに対するパディング処理は以下のように行われる。
メッセージは、２６４バイト未満の長さＬであるとする。ＳＨＡ１に入力される前に、メッセージは以下のようにして右側にパディングが付加される。
【００１３】
まず１つの“１”が追加される。続いて０個以上の“０”が追加される（［第１の処理］）。“０”の数は、元のメッセージの長さに依存する。すなわち、パディング付加後のメッセージの長さ（ビット）が４４８ｍｏｄｕｌｏ５１２に適合するように（５１２の倍数より４４８だけ長いビット長となる）、付加する“０”の個数が決定される。
【００１４】
なお、たとえメッセージ長が４４８ｍｏｄｕｌｏ５１２に適合していても、パディングは常に実行される。たとえば、メッセージの長さが４４８ビットであった場合、９６０ビットになるように５１２ビット分のパディングが付加される。従って、全体で最低でも１ビット、最大で５１２ビットのパディングが付加される。
【００１５】
次に前記パディングの結果に元データの長さを示す６４ビットが付加される（［第２の処理］）。パディング付加後のメッセージ長が４４８ｍｏｄｕｌｏ５１２に適合しているため、長さ情報である６４ビットのデータを付加すると、長さ情報を付加したメッセージのビット長が５１２の倍数となる。
【００１６】
ここで、パディング付加、長さ付加処理の具体例を示す。たとえば、元のメッセージを、次のビット・ストリングとする。
「０１１００００１  ０１１０００１０  ０１１０００１１  ０１１００１００  ０１１００１０１」
［第１の処理］により、ビット・ストリングは次のようになる。
【００１７】
まず、“１”が追加される。
「０１１００００１  ０１１０００１０  ０１１０００１１  ０１１００１００  ０１１００１０１  １」
長さＬ（Ｌは０以上の整数）が４０（ビット）の時、“１”を追加後のビット数は４１である。そこで、４４８ｍｏｄｕｌｏ５１２に適合するように４０７個の“０”が追加され、ビット数は全部で４４８になる。これは、１６進数表記で次のようになる。
６１６２６３６４  ６５８０００００  ００００００００  ００００００００
００００００００  ００００００００  ００００００００  ００００００００
００００００００  ００００００００  ００００００００  ００００００００
００００００００  ００００００００
［第２の処理］元のメッセージのビット数である長さＬの２ワード表現（１ワードは３２ビット）を得る。もし長さＬ＜２３２であれば、最初のワードはすべて０になる。パディングされたメッセージにその２ワードを追加する。
【００１８】
この例では、Ｌ＝４０である。４０の２ワード表記は１６進数で００００００００  ００００００２８である。その結果、最終的に当て物されたメッセージは１６進数で次のようになる。
６１６２６３６４  ６５８０００００  ００００００００  ００００００００
００００００００  ００００００００  ００００００００  ００００００００
００００００００  ００００００００  ００００００００  ００００００００
００００００００  ００００００００  ００００００００  ００００００２８
この時に、結果として生じるメッセージの長さは、５１２ビットの正確な倍数である。５１２ビットは３２ビットのワード１６個分であるため、このメッセージの長さは１６個のワードの正確な倍数でもある。
【００１９】
このようなハッシュ関数を用いたメッセージ認証技術は、たとえば、非特許文献１や非特許文献２に詳しく述べられている。
また、ハッシュ関数を用いたセキュリティ技術の例としては、特許文献１がある。
【００２０】
【非特許文献１】
池野信一、小山謙二著、「現代暗号理論」、電子通信学会、１９８６年９月１日
【非特許文献２】
Ｂｒｕｃｅ  Ｓｃｈｎｅｉｅｒ，「Ａｐｐｌｉｅｄ  Ｃｒｙｐｔｏｇｒａｐｈｙ  （Ｓｅｃｏｎｄ  Ｅｄｉｔｉｏｎ）」，  Ｊｏｈｎ  Ｗｉｅｌｙ  ＆  Ｓｏｎｓ，  Ｉｎｃ  １９９６，  Ｐ４２９〜Ｐ４５９
【特許文献１】
特表２００１−５２７３２５号公報（第２７頁〜第３０頁）
【００２１】
【発明が解決しようとする課題】
ところで、従来は、ハッシュ関数による処理全般や、ある特定のハッシュ関数を使用してＨＭＡＣ（エイチ・マック：Ｈａｓｈ−ｂａｓｅｄ  Ｍｅｓｓａｇｅ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｃｏｄｅ）メッセージ認証関数を構成する処理は、処理内容がソフトウェアで定義されＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）が実行していた。そこで、ＣＰＵによるソフトウェア実行の効率化のため、ＭＤ５，ＳＨＡ１アルゴリズムがコード化されていた。そして、そのコードは３２ビットマシンでも効率良く動作するように設計されていた。
【００２２】
なお、ＨＭＡＣは暗号ハッシュ関数を使用してメッセージ認証を行う仕組みである。ＨＭＡＣはＭＤ５やＳＨＡ１などの反復暗号ハッシュ関数を秘密の共有鍵と組み合わせて使用する。
【００２３】
しかし、パディング処理が効率良く動作するように設計されていても、その速度はＣＰＵ占有率とＣＰＵのパフォーマンスに完全に依存する。そのため、十分な速度が得られないことがある上に、他のアプリケーション等の処理と組み合わせた状況下では、より一層の処理速度の低下が発生していた。しかも、ＩＰｓｅｃのＩＰパケット認証のような大きなデータの処理をソフトウェア的に実行すると、膨大な時間がかかる。
【００２４】
さらに、ＣＰＵにおいてパディングの付加や長さの付加を行うには、送信対象のメッセージをメモリに格納しておく必要があり、メモリの記憶領域が消費される。メモリ内の記憶容量でパディング付加等に使用されると、他のアプリケーション実行のために使用できるメモリ容量が減少し、処理効率が低下してしまう。
【００２５】
このように、従来のパディング付加等の処理はＣＰＵによるソフトウェア的な処理であったため、ＣＰＵにかかる処理負担が重く、十分な処理速度を得るのが難しかった。しかも、パディング付加の処理をＣＰＵに実行させることで、他のアプリケーションの処理にも支障を来す場合があり、システム全体の処理能力に大きな影響を及ぼしていた。
【００２６】
本発明はこのような点に鑑みてなされたものであり、ＣＰＵに対して負荷をかけずにパディング付加や長さ付加を行うことができるメッセージダイジェスト生成回路を提供することを目的とする。
【００２７】
また、本発明の他の目的は、ＣＰＵに対して負荷をかけずにパディング付加を行うことができるパディング回路を提供することを目的とする。
【００２８】
【課題を解決するための手段】
本発明では上記課題を解決するために、図１に示すようなメッセージダイジェスト生成回路が提供される。本発明に係るメッセージダイジェスト生成回路は、メッセージの認証処理を行うものである。メッセージダイジェスト生成回路は、メッセージ入力回路１００、パディング回路２１０、および長さ付加回路２２０を有する。メッセージ入力回路１００は、メッセージを所定のデータ長のデータに分割して先頭から順に入力するとともに、メッセージの長さを示す長さ情報を入力する。パディング回路２１０は、メッセージ入力回路１００で入力されたデータの総量と長さ情報とに応じてメッセージの最後のデータを判断し、最後の前記データに続けてパディングを出力する。長さ付加回路２２０は、前記メッセージ入力回路で入力された前記データと前記パディング回路で出力された前記パディングとの総量に応じてパディングの終了位置を判断し、パディングに続けて前記長さ情報を出力する。
【００２９】
このようなメッセージダイジェスト生成回路によれば、メッセージ入力回路１００によって、メッセージが所定のデータ長のデータに分割され、先頭から順に入力される。また、メッセージ入力回路１００によって、メッセージの長さを示す長さ情報が入力される。すると、パディング回路２１０によって、メッセージ入力回路１００で入力されたデータの総量と長さ情報とに応じてメッセージの最後のデータが判断され、最後のデータに続けてパディングが出力される。その後、長さ付加回路２２０により、メッセージ入力回路で入力されたデータと前記パディング回路で出力されたパディングとの総量に応じてパディングの終了位置が判断され、パディングに続けて長さ情報が出力される。
【００３０】
また、上記課題を解決するために本発明では、メッセージにパディングを付加するパディング回路において、前記メッセージが所定のデータ長のデータに分割され先頭から順に入力されるとともに、前記メッセージの長さを示す長さ情報が入力されると、入力された前記データの総量と前記長さ情報とに応じて前記メッセージの最後の前記データを判断する判断回路と、前記判断回路で判断された前記最後の前記データに続けてパディングを出力するパディング出力回路と、を有することを特徴とするパディング回路が提供される。
【００３１】
このようなパディング回路によれば、メッセージが所定のデータ長のデータに分割され先頭から順に入力されるとともに、メッセージの長さを示す長さ情報が入力されると、判断回路により、入力されたデータの総量と長さ情報とに応じてメッセージの最後の前記データが判断される。そして、パディング出力回路により、判断回路で判断された最後のデータに続けてパディングが出力される。
【００３２】
【発明の実施の形態】
以下、本発明の実施の形態を図面を参照して説明する。
図１は、本実施の形態に係るメッセージダイジェスト生成回路の概略構成を示す図である。メッセージダイジェスト生成回路は、大別してメッセージ入力回路１００、情報付加回路２００、およびメッセージ処理回路３００で構成される。
【００３３】
メッセージ入力回路１００は、メッセージを所定のデータ長のデータに分割して先頭から順に入力するとともに、メッセージの長さを示す長さ情報を情報付加回路２００に入力する。また、メッセージ入力回路１００は、１ブロック分のデータを入力する毎にブロック切替を示す信号を出力する。
【００３４】
情報付加回路２００は、メッセージダイジェスト生成処理のうちの前半を実行する。具体的には、情報付加回路２００は、パディングの付加および長さの付加を行う。情報付加回路２００は、パディングを付加するパディング回路２１０と長さを付加する長さ付加回路２２０とを有している。
【００３５】
パディング回路２１０は、メッセージ入力回路１００で入力されたデータの総量と長さ情報とに応じてメッセージの最後のデータを判断し、最後のデータに続けてパディングを出力する。入力されたデータの総量と長さ情報とに応じた情報は、たとえば、長さ情報の数値から入力されたデータ量を減算することで数値化できる。
【００３６】
具体的には、パディング回路２１０は、長さ情報から、メッセージ入力回路１００から入力されたデータの容量を順次減算する減算器と、減算器の減算結果が１ブロック分のデータ長（たとえば、６４バイト）以下になったときにパディング対象ブロックを示す信号を出力する比較器とを有する。たとえば、減算器は、ブロック切替を示す信号が出力されると、長さ情報から１ブロック分のデータ長を減算する。減算結果が１ブロック分のデータ長以下になったことで、次に入力されるブロックがパディングするべきブロックであることが分かる。
【００３７】
そして、パディング回路２１０は、比較器からパディング対象ブロックを示す信号が出力されると、その後、１ブロックの間のデータの中から最後のデータを判断する。
【００３８】
たとえば、メッセージ入力回路１００が入力するデータのサイズがＮバイト（Ｎは自然数）の場合、パディング回路２１０は、比較器よりパディング対象ブロックを示す信号が出力されたとき、減算器の減算結果をＮで除算し、その後データが入力された回数をカウントする。カウントした値が除算による商の値に達すると、そのとき入力されたデータがメッセージの最後のデータであると判断し、パディング回路２１０は、最後のデータに続けて除算による剰余の値に応じたパディングを出力する。
【００３９】
すなわち、パディングを付加すべきブロック内の残りのメッセージのデータ長を、入力されるデータのサイズＮ（１ワードであれば４）で割ることで、ブロック内の元のメッセージを含む最後尾のワードが特定される。また、Ｎで割ったときの剰余（残りデータ長の下位２ビット）は、パディングを開始する３２ビットワード中の何バイト目からパディングが行われるのかを示している。
【００４０】
なお、データ長の除算処理は、ビットシフト回路で実現可能である。メッセージ入力回路１００により入力されるデータのサイズが２ｎバイト（ｎは自然数）の場合、パディング回路２１０は、減算器の減算結果の右ｎビットシフトするビットシフト回路を有しており、ビットシフト回路によるシフト結果を除算結果とする。１ワード（２２バイト）のデータが入力される場合、残りデータ長の値の２ビット右シフトで商を求めればよい。ビットシフト回路により除算を行うことで、効率的に回路化できる。
【００４１】
また、パディングを開始する２３ビットのワードに対するパディングの付加処理は、そのワードとパディング値を示すワードとの論理和演算を行うことで実現できる。すなわち、論理和演算回路を用いて実現可能である。
【００４２】
このとき、論理和演算回路に入力するパディングの値は、たとえば、以下のように決定する。なお、メッセージ入力回路１００により入力されるデータのサイズを２ｎバイト（ｎは自然数）とする。
【００４３】
すなわち、パディング回路２１０は、ｎビットで表せる数値それぞれに対応付けてパディング値を記憶装置に予め格納しておく。そして、パディング回路２１０は、セレクタにより、減算器の減算結果（メッセージの残りのバイト単位のデータ長）の下位ｎビットの値に応じて記憶装置から出力するパディング値を選択する。
【００４４】
なお、減算器がブロック長（たとえば、６４バイト）単位で減算を行っていれば、元のメッセージのデータ長を示す長さ情報の下位２ビットの値は、減算処理によっては変化しない。したがって、その場合、元のメッセージのデータ長を示す長さ情報の下位２ビットに基づいて、パディング値を選択することもできる。
【００４５】
ここで選択されるパディング値は、メッセージの最後尾を含むデータに論理和演算で加える値である。その後、所定のデータ長（４４８ｍｏｄｕｌｏ５１２）になるまで、“０”の値のパディングが付加される。
【００４６】
長さ付加回路２２０は、メッセージ入力回路で入力されたデータとパディング回路で出力されたパディングとの総量に応じてパディングの終了位置を判断し、パディングに続けて長さ情報を出力する。たとえば、長さ付加回路２２０は、１ブロック分のデータ長の倍数から長さ情報のデータ長の分を減算したデータ量に相当するデータ（たとえば４４８ｍｏｄｕｌｏ５１２）とパディングとが出力された後、長さ情報を出力する。
【００４７】
具体的には、１ブロックのデータ長が６４バイトであり、長さ情報のデータ長が８バイト（メッセージの最大長（２６４バイト）までの数値を表現可能なデータ長）であれば、メッセージとパディングとの合計のデータ長が、６４バイトの倍数から８バイトを減算した値（８バイトを加算することで６４バイトとなる）になったとき（４４８ｍｏｄｕｌｏ５１２に適合したとき）に、パディングの終了位置と判断される。
【００４８】
すなわち、長さ情報を示すワードは、１つのブロックの最後の２ワードとして追加される。従って、メッセージの最後尾のデータを含むブロックにパディングを付加後、２ワード分の領域が確保できないときは、次のブロックに長さ情報が付加される。
【００４９】
たとえば、残りのデータ長が５６バイト以上であった場合、メッセージの最後尾のデータを含むブロックの次のブロックの５６バイトまでパディングが行われ、その後に、長さ情報を示す２ワードが付加される。残りデータ長が５５バイト以下であった場合、メッセージの最後尾のデータを含むブロックの５６バイトまでパディングが行われ、その後に、長さ情報を示す２ワードが付加される。
【００５０】
メッセージ処理回路３００は、メッセージダイジェスト生成処理のうちの後半を実行し、最終的なメッセージダイジェストを生成する。具体的には、メッセージ処理回路３００は、メッセージダイジェストバッファの初期化、１６ワード長のブロックメッセージの処理、メッセージダイジェストの出力を行う。なお、１６ワード長のブロックメッセージの処理は、４つの「ラウンド」と呼ばれる処理からなる圧縮関数である。
【００５１】
このようなメッセージダイジェスト生成回路によれば、メッセージ入力回路１００が、他のＣＰＵ等からの２６４バイト以下のメッセージの入力を待つ。
なお、一般に、メッセージのビット長は、０以上の正の整数であり、必ずしも８の倍数（バイト単位）である必要は無い。しかし、以下の実施の形態では、メッセージダイジェストを文字コードに適応する場合を想定し、バイト単位のメッセージに基づくメッセージダイジェストの生成例を具体的に説明する。
【００５２】
メッセージを受け取ったメッセージ入力回路１００は、そのメッセージを先頭から順に３２ビット（１ワード）ずつ情報付加回路２００に入力する。
図２は、分割されたメッセージのデータ構造を示す図である。メッセージ１０は、理論上、５１２ビット毎のブロック１１単位で扱われる。すなわち、メッセージ１０は、１以上のブロック１１で構成されることとなる。各ブロック１１は、３２ビットデータで構成される１６段のワード１２に分けられる。そして、メッセージ入力回路１００から情報付加回路２００に、ワード単位でデータが入力される。
【００５３】
なお、ここでは詳しく述べないが、例えば６４ビット、または１２８ビット以上の単位で処理を行うＣＰＵを用いる場合は、メッセージ入力回路１００から入力されるデータは、それぞれ６４ビットの８段、１２８ビットの４段となる。処理単位のデータ長が変わっても、後述するハードウェア構成に関しては、基本的には変更の必要はない。
【００５４】
但し、６４ビット単位のデータであれば、除算するときの右シフトが３ビットとなる（８で除算）。また、除算の剰余は、０〜７の値であるため、それぞれの値に応じたパディング値が予め用意される。そして、データ長の下位３ビットに応じたパディング値が出力される。
【００５５】
同様に、１２８ビット単位のデータであれば、除算するときの右シフトが４ビットとなる（１６で除算）。また、除算の剰余は、０〜１５の値であるため、それぞれの値に応じたパディング値が予め用意される。そして、データ長の下位４ビットに応じたパディング値が出力される。
【００５６】
分割されたワードが情報付加回路２００に入力されると、パディング回路２１０において、パディングが付加される。パディングは、１つの“１”のビットと必要な数（０以上）の“０”のビットである。パディングは、１以上５１２以下のビット長である。パディングが付加された後、長さ付加回路２２０によって、メッセージ長を示す６４ビットのデータ（長さ情報）が付加される。パディングと長さ情報とが付加されたメッセージの長さは５１２ビットの倍数に適合する。
【００５７】
パディングと長さ情報とが付加されたデータは、先頭のワードから順に、メッセージ処理回路３００に渡される。メッセージ処理回路３００は、ワード長のブロックメッセージの処理を行い、メッセージダイジェストを出力する。
【００５８】
以下、情報付加回路２００の処理を詳細に説明する。
図３は、情報付加回路で行われる処理の概略フローチャートである。以下、図３に示す処理をステップ番号に沿って説明する。
【００５９】
［ステップＳ１１］情報付加回路２００では、バイト単位のメッセージの入力と、メッセージのデータ長を示す情報（長さ情報）の入力とを受け付け、パディング回路２１０がメッセージの最後尾を検出する。すなわち、入力されたメッセージのバイト数が、メッセージのデータ長に達したことを検出する。
【００６０】
［ステップＳ１２］パディング回路２１０は、メッセージの最後尾に続けて、パディング（１０００・・・０００）を付加する。
［ステップＳ１３］長さ付加回路２２０は、パディングの後に続けて、パディングが付加される前のメッセージ長を示す６４ビットのデータ（長さ情報）を付加する。これにより、５１２ビットの倍数の長さのメッセージが生成され、メッセージ処理回路３００に入力される。
【００６１】
ここで、パディングの付加処理について詳細に説明する。
まず、ステップＳ１１に示したメッセージの最後尾の検出処理について説明する。本実施の形態では、３２ビットワード単位でデータが入力される。パディング回路２１０は、元のメッセージのバイト単位のデータの長さ情報と、比較器、減算器等を用いてパディングする位置を検出する。すなわち、パディング回路２１０は、入力されたワード数（１ワードは３２ビット）をカウントしメッセージの最後のワードおよびワード内のパディング開始位置を判断する。
【００６２】
具体的には、パディング回路２１０は、ハッシュ対象の元のメッセージの長さ（バイト数）を表すビット列（６４ビット）によって、メッセージのワード数と、そのワード内のパディングを開始する位置を判断する。すなわち、長さを４で割り、商と剰余を求める。ビットシフト回路を用いる場合、長さを表すビット列の下位２ビットを除く上位のビット（６２ビット）を、４で割ったときの商と判断し、下位２ビットが剰余と判断する。
【００６３】
除算の結果得られる商が、パディングを開始するワードを示している。具体的には、商と同数のワードが入力されたとき、次に入力されるワードからパディングを行うことが分かる。
【００６４】
除算の結果得られる剰余は、パディングを開始するワード中の何バイト目からパディングを行うかを示している。すなわち、パディング対象のワード内に、剰余で表されるバイト数だけメッセージのデータが残存するため、剰余と同数のバイトデータが入力されたとき、次のバイトデータからパディングを行うべきことが分かる。
【００６５】
次に、ステップＳ１２のパディング処理について詳細に説明する。パディング回路２１０は、パディングを開始するワードのパディング開始位置の先頭に、“１”のビットを付加する。次に、パディングの終了位置まで、“０”のビットを付加し続ける。なお、回路的には、入力されるメッセージが終了すると、その後、０の値のワードがメッセージ入力回路１００から入力される。そのため、パディング開始ワードのパディング開始位置に“１”を設定し、その後はメッセージ入力回路１００からの入力データの“０”を維持すればよい。
【００６６】
図４は、パディング付加および長さ付加処理の例を示す図である。図の例では、４０ビットのメッセージ１０が入力されている。メッセージ１０は、先頭から順番に３２ビットワードずつパディング回路２１０に渡される。４０ビットのメッセージ１０の場合、１つのワード１３，１４に分割して、パディング回路２１０に渡される。最初のワード１３は、パディング対象ではないため、パディング回路２１０において処理は行われない。次のワード１４は、パディング対象のワードであるため、有効なメッセージのデータ（図４の例では”０１１００１０１”）の後に、パディングが付加される。その後、全体で４４８ビットになるまで“０”の値のワード１６が付加される。
【００６７】
パディング付加後のメッセージ２０では、４４８ビットのデータ長となっている（メッセージ２０は、１６進表記）。
そして、長さ付加回路２２０が、元データ長を表す２ワード（６４ビット）を、パディングされたメッセージの後に追加する。図４の例では、４０ビットのデータ長であるため”００００００００  ００００００２８”の値が付加されている。
【００６８】
もし、Ｌ＜２３２であれば、パディング開始ワードが属するブロックは、最後のワードまで“０”が設定される。次のブロックの最初のワードから１４番目のワードまで“０”が設定される。そして、最後の２ワードに、データ長を示す値が設定される。
【００６９】
本実施の形態では、このようなパディング付加と長さ付加の処理が、ＣＰＵを経由せずに情報付加回路２００内の電子回路によって行われる。
図５は、情報付加回路の内部構成を示す図である。情報付加回路２００には、メッセージ入力回路１００は、データ長１１０（メッセージのバイト数（長さ情報））、ＤＲＥＱ信号１２０、入力データ１３０が入力され、出力データ３１０がメッセージ処理回路３００に対して出力される。
【００７０】
なお、ＤＲＥＱ信号１２０は、メッセージ入力回路１００が１ブロック（本実施の形態では６４バイト）のデータを入力する毎に出力する信号である。このＤＲＥＱ信号１２０は、次のブロックの入力開始を示している。すなわち、メッセージ入力回路１００は、ＤＲＥＱ信号１２０により、メッセージをブロック単位に分割したときのブロックの切替位置を、パディング回路２１０に通知している。
【００７１】
情報付加回路２００には、パディング回路２１０、長さ付加回路２２０、および論理和演算回路２０１が設けられている。
パディング回路２１０は、データ長カウントダウンレジスタ２１１、減算器２１２、比較器２１３、ビットシフト回路２１４、カウンタ回路２１５、残りデータ長レジスタ２１６、セレクタ２１７およびパディング値定数ＲＯＭ２１８で構成される。
【００７２】
なお、パディング回路２１０は、大別して、判断回路とパディング出力回路とに分けることができる。判断回路は、入力されたデータ（ワード単位）の総量とメッセージの長さ情報とに応じて、メッセージの最後のデータを判断する回路である。図５の例では、判断回路には、データ長カウントダウンレジスタ２１１、減算器２１２、比較器２１３、ビットシフト回路２１４およびカウンタ回路２１５が含まれる。パディング出力回路は、メッセージの最後のデータに続けてパディングを出力する回路である。図５の例では、パディング出力回路には、残りデータ長レジスタ２１６、セレクタ２１７およびパディング値定数ＲＯＭ２１８が含まれる。
【００７３】
また、長さ付加回路２２０は、比較器２２１、比較器２２２、カウンタ＋セレクタ回路２２３、データ長格納レジスタ２２４、およびビットシフト回路２２５で構成される。
【００７４】
データ長１１０は、データ長カウントダウンレジスタ２１１とデータ長格納レジスタ２２４に入力される。ＤＲＥＱ信号１２０は、減算器２１２に入力される。入力データ１３０は、論理和演算回路２０１、カウンタ回路２１５、およびカウンタ＋セレクタ回路２２３に入力される。
【００７５】
まず、パディング回路２１０の内部構成を説明する。
データ長カウントダウンレジスタ２１１は、初期値としてデータ長（バイト数）が入力される。入力された初期値は、ビットシフト回路２１４に渡される。そして、減算器２１２で減算が行われる毎に、減算結果に更新される。これにより、データ長カウントダウンレジスタ２１１には、処理対象メッセージのデータ残量が保持される。
【００７６】
減算器２１２は、データ長カウントダウンレジスタ２１１に接続されている。減算器２１２は、ＤＲＥＱ信号１２０が入力される毎に、データ長カウントダウンレジスタ２１１の値を取得し、入力されたデータ量（１ブロック）に相当する値（バイト数）を減算する。本実施の形態では、６４（バイト）を減算する。そして、減算器２１２は、減算結果をデータ長カウントダウンレジスタ２１１に格納する。
【００７７】
比較器２１３は、データ長カウントダウンレジスタ２１１とビットシフト回路２１４とに接続されている。比較器２１３は、データ長カウントダウンレジスタ２１１に格納されている値（処理対象メッセージのデータ残量（バイト数））と、１ブロックのバイト数Ｍ（本実施の形態では６４（バイト））とを比較する。そして、比較器２１３は、入力データ１３０の１ブロックのバイト数Ｍの方が大きくなると、ビットシフト回路２１４に対してパディング対象ブロックを示す信号を出力する。
【００７８】
ビットシフト回路２１４は、データ長カウントダウンレジスタ２１１、比較器２１３、およびカウンタ回路２１５に接続されている。ビットシフト回路２１４は、２の累乗の割り算を、右ビットシフトで実現する回路である。本実施の形態では、右２ビットシフトを行う（下位２ビットを破棄する）ことで、４で割った商を求める。
【００７９】
すなわち、ビットシフト回路２１４は、比較器２１３からパディング対象ブロックを示す信号を受け取ると、そのときデータ長カウントダウンレジスタ２１１に格納されている処理対象メッセージのデータ残量を取得する。そして、ビットシフト回路２１４は、取得したデータ残量の値を右２ビットシフトし、データ残量（バイト数）を４で割った商を生成する。ビットシフト回路２１４は、生成した値を、カウンタ回路２１５に渡す。これにより、パディング対象ブロックのデータ残量が、何ワード分のデータかを示す値がカウンタ回路２１５に渡される。
【００８０】
カウンタ回路２１５は、入力データ１３０、ビットシフト回路２１４、およびパディング値設定ＲＯＭ２１８に接続されている。カウンタ回路２１５は、ビットシフト回路２１４により除算の商が入力される毎（パディング対象ブロックが検出されたとき）に“０”クリアされるカウンタ値を保持している。そして、カウンタ回路２１５は、入力データ１３０が１ワード入力される毎に、カウンタ値を１ずつカウントアップする。カウンタ回路２１５は、カウンタ値をカウントアップする毎に、保持しているカウンタ値とビットシフト回路２１４の値とを比較する。両方の値が等しくなると、カウンタ回路２１５は、パディング開始を示す信号を出力する。
【００８１】
残りデータ長レジスタ２１６は、データ長カウントダウンレジスタ２１１とセレクタ２１７とに接続されている。残りデータ長レジスタ２１６は、データ長カウントダウンレジスタ２１１に格納されている残りデータ長（バイト数）を取得し、保持する。そして、残りデータ長レジスタ２１６は、残りデータ長の下位２ビットの値をセレクタ２１７に渡す。図５において、最下位のビットをＬＡ［０］と示し、下位から２ビット目のビットをＬＡ［１］と示している。残りデータ長の下位２ビットは、残りデータ長を４で割った剰余を示している。
【００８２】
セレクタ２１７は、残りデータ長レジスタ２１６とパディング値設定ＲＯＭ２１８に接続されている。セレクタ２１７は、残りデータ長レジスタ２１６から入力された残りデータ長の下位２ビットに応じた選択信号を、パディング値設定ＲＯＭ２１８に出力する。
【００８３】
パディング値設定ＲＯＭ２１８は、カウンタ回路２１５、セレクタ２１７および論理和演算回路２０１に接続されている。パディング値設定ＲＯＭ２１８は、残りデータ長の下位２ビットの値毎のパディング値が格納されている。パディング値設定ＲＯＭ２１８は、カウンタ回路２１５からパディング開始を示す信号が入力されると、セレクタ２１７から入力される選択信号で選択されたパディング値を論理和演算回路２０１に出力する。
【００８４】
次に、長さ付加回路２２０の内部構成を説明する。
比較器２２１は、データ長カウントダウンレジスタ２１１とカウンタ＋セレクタ回路２２３とに接続されている。比較器２２１には、１ブロックのデータ長（バイト数）Ｗと、１ブロックのデータ長Ｗから、メッセージ長を示すデータのデータ長＋１を減算した値（バイト数）Ｚとが予め設定されている。本実施の形態では、１ブロックのデータ長は６４バイトであり、メッセージのデータ長は８バイト（６４ビット）のデータで表現される。したがって、Ｗ＝６４、Ｚ＝５５が設定される。
【００８５】
比較器２２１は、データ長カウントダウンレジスタ２１１に格納されている処理対象メッセージのデータ残量ＬＡが更新される毎に、ＬＡと、Ｗ、Ｚそれぞれとを比較する。そして、Ｚ＜ＬＡ＜Ｗであれば、カウンタ＋セレクタ回路２２３に対して長さ付加位置選択信号を出力する。
【００８６】
比較器２２２は、データ長カウントダウンレジスタ２１１とカウンタ＋セレクタ回路２２３とに接続されている。また、比較器２２２には、データ長Ｚが予め設定されている。比較器２２２は、データ長カウントダウンレジスタ２１１に格納されている処理対象メッセージのデータ残量ＬＡが更新される毎に、ＬＡとＺとを比較する。そして、ＬＡ≦Ｚであれば、カウンタ＋セレクタ回路２２３に対して長さ付加位置選択信号を出力する。
【００８７】
カウンタ＋セレクタ回路２２３は、入力データ１３０が入力されると共に、比較器２２１、比較器２２２、およびビットシフト回路２２５に接続されている。カウンタ＋セレクタ回路２２３は、比較器２２１もしくは比較器２２２から長さ付加開始信号が出力されると“０”クリアされるカウンタ値を保持している。そして、カウンタ＋セレクタ回路２２３は、入力データ１３０が１ワード入力される毎に、カウンタ値を１ずつカウントアップする。
【００８８】
また、カウンタ＋セレクタ回路２２３は、２種類の長さ付加開始位置情報を有している。
一方の長さ付加開始位置指定情報は、比較器２２１から長さ付加位置選択信号が出力されたときに有効となる情報である。この長さ付加開始位置指定情報は、パディング対象ブロックの次のブロックの最後の２ワードの位置を指定する情報である。たとえば、１ブロックが１６ワードであれば、ワード単位で３１が設定される。
【００８９】
他方の長さ付加開始位置指定情報は、比較器２２２から長さ付加位置選択信号が出力されたときに有効となる情報である。この長さ付加開始位置指定情報は、パディング対象ブロックの最後の２ワードの位置を指定する情報である。たとえば、１ブロックが１６ワードであれば、ワード単位で１５が設定される。
【００９０】
カウンタ＋セレクタ回路２２３は、カウンタ値がカウントアップされる毎に、有効な長さ付加位置指定情報とカウンタ値とを比較する。比較の結果、値が一致すると、カウンタ＋セレクタ回路２２３は、ビットシフト回路２２５に対して長さ付加開始を示す信号を出力する。
【００９１】
データ長格納レジスタ２２４は、データ長１１０が入力されると共に、ビットシフト回路２２５に接続されている。データ長格納レジスタ２２４は、入力されたデータ長１１０を保持し、ビットシフト回路２２５へ出力する。
【００９２】
ビットシフト回路２２５は、２の累乗の掛け算を左ビットシフトで実現する回路である。本実施の形態では、バイト単位の値をビット単位に変換するために、左３ビットシフトを行う。左３ビットシフトにより、元の値が８倍される。すなわち、バイト単位の値がビット単位の値に変換される。
【００９３】
具体的には、ビットシフト回路２２５は、カウンタ＋セレクタ回路２２３から長さ付加開始を示す信号を受け取ると、データ長格納レジスタ２２４に格納されたデータを取得し、左３ビットシフトの処理を施す。これにより、バイト単位で設定されたデータ長がビット単位に変換される。ビットシフト回路２２５は、ビット単位のデータ長を表す２ワードのデータを、１ワードずつ２回に分けて論理和演算回路２０１に対して出力する。
【００９４】
以上が、パディング回路２１０と長さ付加回路２２０の内部構成である。入力データ１３０、パディング回路２１０のパディング値定数ＲＯＭ２１８からの出力値、および長さ付加回路２２０のビットシフト回路２２５からの出力値が論理和演算回路２０１に入力されている。論理和演算回路２０１は、入力されたデータの論理和を演算し、出力データ３１０としてメッセージ処理回路３００へ出力する。
【００９５】
以上のような構成の電子回路によって、パディングの付加と長さの付加とが行われる。
ここで、セレクタ２１７に入力される値とパディング値設定ＲＯＭ２１８との対応関係について説明する。
【００９６】
図６は、データ長の下位２ビットとパディング開始ワードの中身との対応関係を示す図である。
残りデータ長の下位２ビットが“００”の場合、余りは０（バイト）である。すなわち、パディング対象ワードの先頭がパディング開始位置となる。従って、論理和演算で加算すべきパディング値の中身は、“８０００００００”（１６進表記）となる。これをビット表記に直すと、“１０００００００  ００００００００  ００００００００  ００００００００”となる。
【００９７】
残りデータ長の下位２ビットが“０１”の場合、余りは１（バイト）である。すなわち、パディング対象ワードの２バイト目がパディング開始位置となる。従って、論理和演算で加算すべきパディング値の中身は、“００８０００００”（１６進表記）となる。これをビット表記に直すと、“００００００００  １０００００００  ００００００００  ００００００００”となる。
【００９８】
残りデータ長の下位２ビットが“１０”の場合、余りは２（バイト）である。すなわち、パディング対象ワードの３バイト目がパディング開始位置となる。従って、論理和演算で加算すべきパディング値の中身は、“００００８０００”（１６進表記）となる。これをビット表記に直すと、“００００００００  ００００００００  １０００００００  ００００００００”となる。
【００９９】
残りデータ長の下位２ビットが“１１”の場合、余りは３（バイト）である。すなわち、パディング対象ワードの４バイト目がパディング開始位置となる。従って、論理和演算で加算すべきパディング値の中身は、“００００００８０”（１６進表記）となる。これをビット表記に直すと、“００００００００  ００００００００  ００００００００  １０００００００”となる。
【０１００】
以上のような構成の情報付加回路２００により、パディングの付加と長さの付加とが行われる。ここで、図４に示した４０ビットのメッセージ１０が入力された場合の例を用いながら、情報付加回路２００の動作を説明する。
【０１０１】
メッセージ１０が入力される場合、データ長１１０として、メッセージ１０の長さ（４０ビット）のバイト単位の値“５”が入力される。入力データ１３０として、メッセージ１０の最初のワード１３が入力される。
【０１０２】
まず、データ長１１０を示す値“５”が、データ長カウントダウンレジスタ２１１とデータ長格納レジスタ２２４とに格納される。データ長カウントダウンレジスタ２１１に格納された値は、比較器２１３で１ブロックのバイト数Ｍ“６４”と比較される。この例では、Ｍの方が大きいため、比較器２１３からビットシフト回路２１４に対してパディング対象ブロックであることを示す信号が出力される。
【０１０３】
その信号を受け取ったビットシフト回路２１４は、メッセージ１０の残りデータ長を示す値“５”をデータ長カウントダウンレジスタ２１１から取得し、右２ビットシフトの処理を行う。これにより、残りデータ長を“４”で除算したときの商“１”が得られる。商“１”は、カウンタ回路２１５に渡される。
【０１０４】
また、最初のワード１３が入力されたときはパディング対象ブロックが検出され、カウンタ回路２１５の値に０が設定される。このときビットシフト回路２１４からは“１”が入力されているため、パディング開始を示す信号は出力されない。この結果、パディング回路２１０からパディング値は出力されない。
【０１０５】
一方、長さ付加回路２２０では、２つの比較器２２１，２２２において、残りのデータ長ＬＡと所定のデータとの大小の比較が行われる。この例では、残りのデータ長ＬＡが“５”、Ｚが“５５”、Ｗが“６４”である。従って、比較器２２１の比較結果は偽（要件（Ｚ＜ＬＡ＜Ｗ）を満たさない）であるが、比較器２２２の比較結果は真（要件（ＬＡ≦Ｚ）を満たす）となる。従って、比較器２２２からカウンタ＋セレクタ回路２２３に対して、長さ付加位置選択信号が出力される。
【０１０６】
カウンタ＋セレクタ回路２２３は、入力データ１３０から最初のワード１３が入力されたことで、カウンタ値に“１”を設定する。そして、比較器２２２から長さ付加位置選択信号が出力されたことにより、カウンタ＋セレクタ回路２２３において、比較器２２２に予め対応付けられていた長さ付加開始位置指定情報“１５”とカウンタ値“１”とが比較される。比較の結果、値が一致しないため、長さ付加開始を示す信号は出力されない。その結果、長さ付加回路２２０からは、長さのデータは出力されない。
【０１０７】
以上のようなパディング回路２１０と長さ付加回路２２０との動作により、論理和演算回路２０１には、ワード１３のみが入力される。その結果、ワード１３がそのまま出力データ３１０として出力される。
【０１０８】
次のワード１４が入力データ１３０として入力されると、カウンタ回路２１５のカウンタ値がカウントアップされ“１”となる。すると、カウンタ回路２１５は、パディング値設定ＲＯＭ２１８に対してパディング開始を示す信号を出力する。
【０１０９】
このとき、残りデータ長レジスタ２１６には、データ長カウントダウンレジスタ２１１の値“５”が設定されている。この値をビット列で表すと”１０１”となる。この場合、最下位のビットＬＡ［０］の値が“１”、下位から２番目のビットＬＡ［１］の値が“０”である。すなわち、データ長下位２ビットは“０１”となる“０１”の値がセレクタ２１７に入力されると、その値に対応する選択信号が、セレクタ２１７からパディング値設定ＲＯＭ２１８に対して出力される。
【０１１０】
パディング値設定ＲＯＭ２１８は、データ長を４で割ったときの余り１（下位２ビットが“０１”）に予め関連付けて格納しているパディング値“００００００００  １０００００００  ００００００００  ００００００００”を論理和演算回路２０１に対して出力する。
【０１１１】
一方、長さ付加回路２２０では、ワード１４の入力に応じて、カウンタ＋セレクタ回路２２３のカウンタ値がカウントアップされ“２”となる。このカウンタ値は、所定の値“１５”に達していないため、カウンタ＋セレクタ回路２２３から長さ付加開始を示す信号は出力されない。その結果、長さ付加回路２２０からは、長さのデータは出力されない。
【０１１２】
以上のようなパディング回路２１０と長さ付加回路２２０との動作により、論理和演算回路２０１には、ワード１４とパディング回路２１０から出力されたパディング値が入力される。これらの値の論理和が論理和演算回路２０１で算出され、“０１１００１０１  １０００００００  ００００００００  ００００００００”という内容の出力データ３１０が出力される。
【０１１３】
その後、メッセージ１０の内容が終了したため、全てのビットに“０”が設定されたワードが、順次、入力データ１３０として入力される。ワード１３から順番に数えて、３番目のワードから１４番目のワードまでは、そのままのデータが出力データ３１０として出力される。この間、カウンタ＋セレクタ回路２２３のカウンタ値が逐次カウンタとアップされる。
【０１１４】
ワード１３から数えて１５番目のワードが入力されると、カウンタ＋セレクタ回路２２３のカウンタ値が“１５”にカウントアップされる。すると、カウンタ＋セレクタ回路２２３において比較器２２２に関連付けて設定されていた値“１５”とカウンタ値とが一致し、カウンタ＋セレクタ回路２２３から長さ付加開始を示す信号が出力される。
【０１１５】
すると、ビットシフト回路２２５から論理和演算回路２０１へ、メッセージ１０のビット単位の長さを示す２ワードのデータの上位１ワード分“００００００００”（１６進表記）が出力される。長さを示す上位１ワードのデータと、入力データ１３０として入力されたワードとの論理和が論理和演算回路２０１で計算され、出力データ３１０として出力される。
【０１１６】
次に、ワード１３から数えて１６番目のワードが入力されると、ビットシフト回路２２５から論理和演算回路２０１へ、メッセージ１０のビット単位の長さを示す２ワードのデータの下位１ワード分“００００００２８”（１６進表記）が出力される。長さを示す下位１ワードのデータと、入力データ１３０として入力されたワードとの論理和が論理和演算回路２０１で計算され、出力データ３１０として出力される。
【０１１７】
このようにして、ハードウェア的な電子回路で、認証対象のメッセージに対し、パディング付加、および長さ付加を行うことができる。その結果、ＣＰＵに負担をかけずに、メッセージ認証処理を高速に行うことができる。しかも、コンピュータのメインメモリの消費量も少なくてすむ。
【０１１８】
本実施の形態を利用したメッセージ認証処理を行う回路は、ネットワークを介した通信を行う各種機器に実装することができる。たとえば、インターネットに接続されたコンピュータ（パーソナルコンピュータやサーバコンピュータ等）やルータ等に対して、本実施の形態を適用できる。
【０１１９】
以下、本実施の形態に係るメッセージ認証機能を有するコンピュータのハードウェア構成例について説明する。
図７は、本実施の形態の回路を適用したコンピュータのハードウェア構成例を示す図である。コンピュータ４００は、ＣＰＵ４０１によって装置全体が制御されている。ＣＰＵ４０１には、バス４０８を介してＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）４０２、ハードディスクドライブ（ＨＤＤ：Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）４０３、グラフィック処理装置４０４、入力インタフェース４０５、通信インタフェース４０６、およびＨＭＡＣ演算回路４０７が接続されている。
【０１２０】
ＲＡＭ４０２には、ＣＰＵ４０１に実行させるＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭ４０２には、ＣＰＵ４０１による処理に必要な各種データが格納される。ＨＤＤ４０３には、ＯＳやアプリケーションプログラムが格納される。
【０１２１】
グラフィック処理装置４０４には、モニタ１１が接続されている。グラフィック処理装置４０４は、ＣＰＵ４０１からの命令に従って、画像をモニタ１１の画面に表示させる。入力インタフェース４０５には、キーボード１２とマウス１３とが接続されている。入力インタフェース４０５は、キーボード１２やマウス１３から送られてくる信号を、バス４０８を介してＣＰＵ４０１に送信する。
【０１２２】
通信インタフェース４０６は、ネットワーク１０に接続されている。通信インタフェース４０６は、ネットワーク１０を介して、他のコンピュータとの間でデータの送受信を行う。
【０１２３】
ＨＭＡＣ演算回路４０７は、入力されたメッセージに対してＨＭＡＣの演算を行い、認証後のメッセージを出力する回路である。たとえば、ネットワーク１０を介して送信すべきメッセージがＨＭＡＣ演算回路４０７に入力されると、パディング付加、長さ付加後、１ワード毎の所定のメッセージ処理が行われ、メッセージダイジェストが生成される。生成されたメッセージダイジェストは、通信インタフェース４０６を介してネットワーク１０上へ送出される。
【０１２４】
以上のようなハードウェア構成によって、本実施の形態の処理機能を実現することができる。たとえば、ＩＰｓｅｃ処理をハードウェア回路で実行するコンピュータが提供される。
【０１２５】
以下、図８、図９、図１０を参照して、ＩＰｓｅｃの認証範囲とＩＰパケットのサイズについて説明する。ＩＰｓｅｃではＩＰパケットの改竄、なりすましを防ぐために認証機能を必須としている。ＩＰｓｅｃはプロトコル群であり、ＥＳＰ（Ｅｎｃａｐｓｕｌａｔｉｎｇ  Ｓｅｃｕｒｉｔｙ  Ｐａｙｌｏａｄ）とＡＨ（Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｈｅａｄｅｒ）とからなる。
【０１２６】
図８は、トランスポートモードＥＳＰの認証範囲を示す図である。図８（Ａ）はＩＰｖ４のパケットを示し、図８（Ｂ）はＩＰｖ６のパケットを示す。
ＩＰｖ４のパケット４０は、ＩＰヘッダ４１、ＥＳＰヘッダ４２、ＴＣＰヘッダ４３、データ４４、ＥＳＰトレーラ４５、ＥＳＰ認証ヘッダ４６で構成される。そのうち、ＥＳＰヘッダ４２、ＴＣＰヘッダ４３、データ４４、ＥＳＰトレーラ４５が認証範囲である。
【０１２７】
ＩＰｖ６のパケット５０は、ＩＰｖ６ヘッダ５１、経路制御ヘッダ５２、ＥＳＰヘッダ５３、終点オプションヘッダ５４、ＴＣＰヘッダ５５、データ５６、ＥＳＰトレーラ５７、ＥＳＰ認証ヘッダ５８で構成される。そのうち、ＥＳＰヘッダ５３、終点オプションヘッダ５４、ＴＣＰヘッダ５５、データ５６、ＥＳＰトレーラ５７が認証範囲である。
【０１２８】
例えばトランスポートＥＳＰを用いる際のパケット生成時には、範囲の情報に関して、鍵付きハッシュ関数（ＨＭＡＣ−ＳＨＡ１，ＨＭＡＣ−ＭＤ５）を用いた認証処理が行われる。
【０１２９】
図９は、ＡＨの認証範囲を示す図である。ＡＨのパケット６０の構成は、ＩＰｖ４、ＩＰｖ６、共に同じである。ＡＨのパケット６０は、ＩＰヘッダ６１、ＡＨヘッダ６２、ＴＣＰヘッダ６３、データ６４で構成される。ＡＨのパケット６０では、全てが認証範囲となる。すなわち、パケット全体の鍵付きハッシュ関数（ＨＭＡＣ−ＳＨＡ１，ＨＭＡＣ−ＭＤ５）を用いた認証処理が必要となる。
【０１３０】
また、最大パケットサイズはネットワークの接続媒体によって決定される。たとえば、ネットワークの接続物理媒体としてイーサネット（登録商標）と呼ばれるネットワーク（ＩＥＥＥ８０２．３）を用いた場合のＩＰパケットのサイズを説明する。
【０１３１】
なお、ＩＥＥＥ８０２．３のネットワークの一例として、１パケットの認証処理を例に発明の作用を説明する。認証処理においては、最初と最後にＨＭＡＣ処理を行うため機能的には、ＣＰＵにて設定（ＨＭＡＣ処理かどうか、ＭＤ５／ＳＨＡ１かどうかなどのモード設定）を行った後、シームレスにハードウェア処理が行われる。これにより、ＣＰＵ負荷を軽減し、またハードウェアの持つパフォーマンス値を引き出すことが可能となる。また、ＤＭＡＣ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌｌｅｒ）を用いてＣＰＵにおいて処理を行う認証処理を独立して実行することもできる。
【０１３２】
図１０は、ＩＰパケットサイズを示す図である。図１０に示すように、ＩＰパケット７０は、ＩＰｖ６ヘッダ７１、経路制御ヘッダ７２、終点オプションヘッダ７３、ＴＣＰヘッダ７４、データ７５で構成される。このような構成のＩＥＥＥ８０２．３に従ったネットワークの最大ＩＰパケットサイズは、約１５００バイト（ＩＰｖ６ヘッダ４０バイト、その他１４６０バイト以下）である。
【０１３３】
認証アルゴリズムであるハッシュ関数のＭＤ５とＳＨＡ１は、６４バイト（５１２ビット）ブロック関数である。従って、１パケットの処理でさえ、最大約２０回を超えるハッシュ処理が行われる。また、鍵管理においてもハッシュ関数が使用される。
【０１３４】
このようなデータ構造のＩＰパケットに本実施の形態を適用すれば、インターネット等のデータ通信能力を高めることができる。例えば、次世代プロトコルＩＰｓｅｃの認証処理はハッシュ関数を用いており、そのＩＰパケット生成処理で、図１０に示したＩＰパケットの認証作業を行う。ＩＰパケットレベルでの認証だけでなく、暗号化して送信する場合はＥＳＰヘッダを使用する。ＩＰｓｅｃではパケットごとに暗号化がなされ、ＥＳＰと呼ばれる入れ物にパックされ送信される。なお、最新のＩＰｓｅｃ  ｖｅｒｓｉｏｎ２．０では認証と暗号化の両方をＥＳＰで行えるように改訂されている。
【０１３５】
ＥＳＰはトンネリングモードとトランスポート・モードの２方式がある。トンネリングモードはＩＰパケットをヘッダごと暗号化する手順である。トランスポート・モードはＩＰパケットのデータ部だけを暗号化する手順である。
【０１３６】
ＩＰｓｅｃでは、暗号化する対象部分によって、「トランスポート・モード」と「トンネル・モード」という２つの方法が提供されている。トランスポート・モードでは、ＩＰパケットで運ぶデータ部分のみを暗号化し、これにあて先などを指定したＩＰヘッダを付けて送信をする。一方、トンネル・モードでは、ほかのホストからいったん受信したＩＰヘッダとデータ部分を合わせたものをまとめて暗号化したうえで、新たにＩＰヘッダを再度付け直して送信を行う。送信時にはこの暗号化の後に認証処理を施し、受信時には最初に認証処理を行う。
【０１３７】
基本的に、上位プロトコルのデータ・サイズは、下位プロトコルのデータ・サイズに制限される。従って、下位がイーサネット（登録商標）なら、中に入るＩＰパケットの最大サイズは、ＩＰパケットがフラグメントしない場合、ＭＡＣフレームのデータ部分の最大サイズ（１５００バイト）になる。
【０１３８】
図１１は、ＩＰｓｅｃによる送信処理の手順を示すフローチャートである。以下、図１１に示す処理をステップ番号に沿って説明する。
［ステップＳ２１］ＣＰＵ４０１は、送信メッセージを含む送信用のパケットを生成する。
【０１３９】
［ステップＳ２２］ＣＰＵ４０２は、パケットの暗号化処理を行う。暗号化されたメッセージは、ＨＭＡＣ演算回路４０７に渡される。
［ステップＳ２３］ＨＭＡＣ演算回路４０７は、渡されたメッセージの認証処理（ＨＭＡＣ）を行う。これにより、ＣＰＵ４０１で暗号化されたメッセージに、認証のためのメッセージダイジェストが付加される。暗号化されたメッセージとメッセージダイジェストとは、共に通信インタフェース４０６に渡される。
【０１４０】
［ステップＳ２４］通信インタフェース４０６は、通信用のフレームを生成する。
［ステップＳ２５］通信インタフェース４０６、生成したフレームをネットワーク１０経由で送信する。
【０１４１】
図１２は、ＩＰｓｅｃによる受信処理の手順を示すフローチャートである。以下、図１２に示す処理をステップ番号に沿って説明する。
［ステップＳ３１］通信インタフェース４０６は、ネットワーク１０経由で送られたフレームを受信する。受信したフレームは、ＨＭＡＣ演算回路４０７に渡される。
【０１４２】
［ステップＳ３２］ＨＭＡＣ演算回路４０７は、受信したフレームのメッセージダイジェストに基づいて、フレーム内のメッセージを認証する。すなわち、メッセージが改竄されていないことを確認する。正しく認証されたメッセージ（暗号化されている）は、ＣＰＵ４０１に渡される。
【０１４３】
［ステップＳ３３］ＣＰＵ４０１は、暗号化されたメッセージを復号し、元の平文のメッセージを再現する。
このように、本実施の形態に係る回路が実装されたコンピュータでは、送信時にも受信時にも、認証処理が行われる。なお、ＣＰＵ４０１は暗号化処理や認証処理のほかに複雑なプロトコル処理も行う。
【０１４４】
このように、ハードウェア回路によってメッセージ認証を行うことで、メッセージ認証を高速に行うことができると共に、コンピュータ全体としての処理能力を高めることができる。
【０１４５】
すなわち、ＣＰＵに対してソフトウェア的な負担をかけることなく、独立したハードウェアでハッシュ関数アルゴリズムの処理を行うことができる。このような専用ハードウェア化により、ＣＰＵの占有率も低減させ、例えば上記システム全体のパフォーマンスも向上させることができる。
【０１４６】
具体的には、ソフトウェアで認証処理を行う場合、ＣＰＵ４０１が認証処理を終了するまで他の処理はできず待たされたままである。一方、図７に示したＨＭＡＣ演算回路４０７（ハッシュ関数専用ハードウェア回路）を実装することで、ＣＰＵ４０１は認証処理を専用ハードウェアに行わせている間に、他の処理を行うことができる。その結果、コンピュータにおける他のアプリケーションの処理時間が短縮される。
【０１４７】
しかも、ＨＭＡＣ演算回路４０７は入力されたメッセージを逐次処理して、出力するため、ＣＰＵ４０１による演算のようにＲＡＭ４０２内にデータをロードする必要がない。そのため、ＲＡＭ４０２の記憶容量を余計に使用することも無く、システムとして安定したパフォーマンスを提供できる。
【０１４８】
なお、ＨＭＡＣ演算回路４０７のような認証回路は、様々な機器にも組み込み可能である。そのため、高度な演算能力を有さないＣＰＵで制御される機器でも、ＩＰｓｅｃ通信を提供できる。たとえば、認証回路を、ＰＤＡ（Ｐｅｒｓｏｎａｌ  Ｄｉｇｉｔａｌ（Ｄａｔａ）  Ａｓｓｉｓｔａｎｔｓ）や移動体電話機などに組み込むことができる。
【０１４９】
次に、パディングの付加と長さの付加とを電子回路で実行することによる処理時間の短縮効果について説明する。
以下の例では、ＣＰＵコアに３２ビットＲＩＳＣプロセッサを採用したマイクロコンピュータと、本実施の形態に係る「パディング付加」「長さの付加」専用ハードウェア回路を実装したＰＬＤ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）／ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）を用いて実装評価を行った。
【０１５０】
実装評価では、テストデータを本実施の形態を適用したハードウェアに入力し、出力データを公知データ（ＲＦＣ１３２１、ＦＩＰＳ１８０−１）と比較し、正しく動作していることを確認した。その際、従来技術（ソフトウェアでパディング付加、および長さ付加を実行）と本実施の形態（ハードウェアでパディング付加、および長さ付加を実行）とを比較した。具体的には、１２８０バイトのデータに対して１０００回処理を行った処理速度をＣＰＵによるソフトウェア実行とハードウェア実行とのそれぞれでの処理の所要時間を、ハードマクロへのレジスタライトも含めてトータルで比較を行ったものである。
【０１５１】
１．アルゴリズムＭＤ５のとき
［ソフトウェア実行所要時間］１１６６７（ミリ秒）
［ハードウェア実行所要時間］１１７８（ミリ秒）
この場合、ソフトウェア実行所要時間／ハードウェア実行所要時間＝９．９２である。すなわち、専用ハードウェアで実行した場合の方が９．９２倍速い。
【０１５２】
２．アルゴリズムＨＭＡＣ−ＭＤ５のとき
［ソフトウェア実行所要時間］１４０６７（ミリ秒）
［ハードウェア実行所要時間］１２０６（ミリ秒）
この場合、ソフトウェア実行所要時間／ハードウェア実行所要時間＝１１．６６である。すなわち、専用ハードウェアで実行した場合の方が１１．６６倍速い。
【０１５３】
３．アルゴリズムＳＨＡ１のとき
［ソフトウェア実行所要時間］３２０００（ミリ秒）
［ハードウェア実行所要時間］１４７３（ミリ秒）
この場合、ソフトウェア実行所要時間／ハードウェア実行所要時間は２１．７３である。すなわち、専用ハードウェアで実行した場合の方が２１．７３倍速い。
【０１５４】
４．アルゴリズムＨＭＡＣ−ＳＨＡ１のとき
［ソフトウェア実行所要時間］３８６４３（ミリ秒）
［ＨＭＡＣをソフトウェア実行−ＳＨＡ１をハードウェア実行の所要時間］３３７２（ミリ秒）
［ハードウェア実行所要時間］１５００（ミリ秒）
この場合、ソフトウェア実行所要時間／ハードウェア実行所要時間は２５．７６である。すなわち、ＨＭＡＣ−ＳＨＡ１の両方を専用ハードウェアで実行した場合の方が、両方ソフトウェアで実行した場合より２５．７６倍速い。
【０１５５】
本結果から、本実施の形態に関する専用ハードウェアの従来技術に対する有効性が明確に分かる。以上の結果よりＩＰパケット長が長いほど、ＩＰｓｅｃの本ハード処理が効果的になるといえる。
【０１５６】
以上、説明したように本実施の形態によれば、ハッシュ関数、ＨＭＡＣを用いる処理における「パディング付加」、「長さの付加」を専用ハードウェアによって実行することができる。そのため、ハッシュ関数処理、ハッシュ関数を用いた認証処理の際に、ＣＰＵに負荷をかけることなく処理を高速化でき、ＣＰＵの処理負荷を大幅に軽減することができる。
【０１５７】
また、パディングや長さ付加のために必要なメモリ容量を削減することができる。
さらに、パディングや長さ付加のためのＣＰＵ占有率を軽減することから、システムとして機能させる際にも確実なパフォーマンスを保障することができる。しかも、安価なマイコンでも高速処理が可能となるため、コスト削減に効果がある。
【０１５８】
（付記１）  メッセージダイジェストを生成するメッセージダイジェスト生成回路において、
メッセージを所定のデータ長のデータに分割して先頭から順に入力するとともに、前記メッセージの長さを示す長さ情報を入力するメッセージ入力回路と、
前記メッセージ入力回路で入力された前記データの総量と前記長さ情報とに応じて前記メッセージの最後の前記データを判断し、前記最後の前記データに続けてパディングを出力するパディング回路と、
前記メッセージ入力回路で入力された前記データと前記パディング回路で出力された前記パディングとの総量に応じて前記パディングの終了位置を判断し、前記パディングに続けて前記長さ情報を出力する長さ付加回路と、
を有することを特徴とするメッセージダイジェスト生成回路。
【０１５９】
（付記２）  前記パディング回路は、前記長さ情報から、前記メッセージ入力回路から入力された前記データの容量を順次減算する減算器と、前記減算器の減算結果が１ブロック分のデータ長以下になったときにパディング対象ブロックを示す信号を出力する比較器とを有することを特徴とする付記１記載のメッセージダイジェスト生成回路。
【０１６０】
（付記３）  前記メッセージ入力回路は、１ブロック分の前記データを入力する毎にブロック切替を示す信号を出力し、
前記減算器は、前記ブロック切替を示す信号が出力されると、前記長さ情報から前記１ブロック分のデータ長を減算することを特徴とする付記２記載のメッセージダイジェスト生成回路。
【０１６１】
（付記４）  前記メッセージ入力回路は、前記データのサイズをＮバイト（Ｎは自然数）とし、
前記パディング回路は、前記比較器より前記パディング対象ブロックを示す信号が出力されたとき、前記減算器の前記減算結果をＮで除算し、その後前記データが入力された回数をカウントし、カウントした値が前記除算による商の値に達すると、入力された前記データに続けて前記除算による剰余の値に応じたパディングを出力することを特徴とする付記２記載のメッセージダイジェスト生成回路。
【０１６２】
（付記５）  前記メッセージ入力回路は、前記データのサイズを２ｎバイト（ｎは自然数）とし、
前記パディング回路は、前記減算器の前記減算結果の右ｎビットシフトするビットシフト回路を有しており、前記ビットシフト回路によるシフト結果を前記除算結果とすることを特徴とする付記４記載のメッセージダイジェスト生成回路。
【０１６３】
（付記６）  前記メッセージ入力回路は、前記データのサイズを２ｎバイト（ｎは自然数）とし、
前記パディング回路は、ｎビットで表せる数値それぞれに対応付けて前記パディング値が格納された記憶装置と、前記減算器の前記減算結果の下位ｎビットの値に応じて前記記憶装置から出力するパディング値を選択するセレクタとを有することを特徴とする付記４記載のメッセージダイジェスト生成回路。
【０１６４】
（付記７）  前記長さ付加回路は、１ブロック分のデータ長の倍数から前記長さ情報のデータ長の分を減算したデータ量に相当する前記データおよび前記パディングが出力された後、前記長さ情報を出力することを特徴とする付記１記載のメッセージダイジェスト生成回路。
【０１６５】
（付記８）  メッセージにパディングを付加するパディング回路において、
前記メッセージが所定のデータ長のデータに分割され先頭から順に入力されるとともに、前記メッセージの長さを示す長さ情報が入力されると、入力された前記データの総量と前記長さ情報とに応じて前記メッセージの最後の前記データを判断する判断回路と、
前記判断回路で判断された前記最後の前記データに続けてパディングを出力するパディング出力回路と、
を有することを特徴とするパディング回路。
【０１６６】
（付記９）  前記判断回路は、前記長さ情報から、入力された前記データの容量を順次減算する減算器と、前記減算器の減算結果が１ブロック分のデータ長以下になったときにパディング対象ブロックを示す信号を出力する比較器とを有することを特徴とする付記８記載のパディング回路。
【０１６７】
（付記１０）  前記データは、Ｎバイト（Ｎは自然数）単位であり、
前記判断回路は、前記比較器より前記パディング対象ブロックを示す信号が出力されたとき、前記減算器の前記減算結果をＮで除算し、その後前記データが入力された回数をカウントし、
前記パディング出力回路は、カウントした値が前記除算による商の値に達すると、入力された前記データに続けて前記除算による剰余の値に応じたパディングを出力することを特徴とする付記９記載のパディング回路。
【０１６８】
（付記１１）  認証されたメッセージを送信する通信装置において、
送信すべきメッセージを生成するＣＰＵと、
前記ＣＰＵで生成されたメッセージを所定のデータ長のデータに分割して先頭から順に入力するとともに、前記メッセージの長さを示す長さ情報を入力するメッセージ入力回路と、
前記メッセージ入力回路で入力された前記データの総量と前記長さ情報とに応じて前記メッセージの最後の前記データを判断し、前記最後の前記データに続けてパディングを出力するパディング回路と、
前記メッセージ入力回路で入力された前記データと前記パディング回路で出力された前記パディングとの総量に応じて前記パディングの終了位置を判断し、前記パディングに続けて前記長さ情報を出力する長さ付加回路と、
前記メッセージ入力回路から入力された前記メッセージ、前記パディング回路から出力されたパディング、および前記長さ付加回路から出力された長さ情報に基づいてメッセージダイジェストを生成するメッセージ処理回路と、
を有することを特徴とする通信装置。
【０１６９】
（付記１２）  メッセージの認証処理を行うためのメッセージ認証方法において、
ＣＰＵにより、送信すべきメッセージを生成し、
メッセージ入力回路により、前記ＣＰＵで生成されたメッセージを所定のデータ長のデータに分割して先頭から順にパディング回路に入力するとともに、前記メッセージの長さを示す長さ情報を前記パディング回路に入力し、
前記パディング回路により、前記メッセージ入力回路で入力された前記データの総量と前記長さ情報とに応じて前記メッセージの最後の前記データを判断し、前記最後の前記データに続けてパディングを出力し、
長さ付加回路により、前記メッセージ入力回路で入力された前記データと前記パディング回路で出力された前記パディングとの総量に応じて前記パディングの終了位置を判断し、前記パディングに続けて前記長さ情報を出力し、
メッセージ処理回路によって、前記メッセージ入力回路から入力された前記メッセージ、前記パディング回路から出力されたパディング、および前記長さ付加回路から出力された長さ情報に基づいてメッセージダイジェストを生成する、
ことを特徴とするメッセージ認証方法。
【０１７０】
【発明の効果】
以上説明したように本発明では、パディング回路がメッセージの最後のデータを判断し、最後のデータに続けてパディングを出力するとともに、長さ付加回路がパディングの終了位置を判断し、パディングに続けて長さ情報を出力するようにした。これにより、ＣＰＵに負荷をかけずに、入力されたメッセージに対してパディングと長さ情報とを付加することができる。
【図面の簡単な説明】
【図１】本実施の形態に係るメッセージダイジェスト生成回路の概略構成を示す図である。
【図２】分割されたメッセージのデータ構造を示す図である。
【図３】情報付加回路で行われる処理の概略フローチャートである。
【図４】パディング付加および長さ付加処理の例を示す図である。
【図５】情報付加回路の内部構成を示す図である。
【図６】データ長の下位２ビットとパディング開始ワードの中身との対応関係を示す図である。
【図７】本実施の形態の回路を適用したコンピュータのハードウェア構成例を示す図である。
【図８】トランスポートモードＥＳＰの認証範囲を示す図である。図８（Ａ）はＩＰｖ４のパケットを示し、図８（Ｂ）はＩＰｖ６のパケットを示す。
【図９】ＡＨの認証範囲を示す図である。
【図１０】ＩＰパケットサイズを示す図である。
【図１１】ＩＰｓｅｃによる送信処理の手順を示すフローチャートである。
【図１２】ＩＰｓｅｃによる受信処理の手順を示すフローチャートである。
【符号の説明】
１００  メッセージ入力回路
２００  情報付加回路
２１０  パディング回路
２２０  長さ付加回路
３００  メッセージ処理回路
【図１】
2004157164.tif 000003
【図２】
2004157164.tif 000004
【図３】
2004157164.tif 000005
【図４】
2004157164.tif 000006
【図５】
2004157164.tif 000007
【図６】
2004157164.tif 000008
【図７】
2004157164.tif 000009
【図８】
2004157164.tif 000010
【図９】
2004157164.tif 000011
【図１０】
2004157164.tif 000012
【図１１】
2004157164.tif 000013
【図１２】
2004157164.tif 000014