説明

情報処理装置

【課題】複数のメッセージデータについてHMACを効率よく演算することができる。
【解決手段】HMAC演算回路100は、処理状態を管理するHMAC制御回路129と、秘密鍵データK、メッセージデータMそれぞれに関するダイジェスト値を算出するハッシュ演算回路128とを備える。ハッシュ演算回路128は、ダイジェスト値の算出処理を中断する場合に、途中経過を記憶部300に出力する。ハッシュ演算回路128が、ダイジェスト値の算出を再開する場合、途中経過が入力され、途中経過を用いて算出処理を行う。秘密鍵データKのダイジェスト値の算出再開のためには、再開信号を1、秘密鍵・メッセージ指定信号を0とした信号を、メッセージデータMに関するダイジェスト値の算出再開のためには、再開信号を1、秘密鍵・メッセージ指定信号を0とした信号をHMAC制御回路129に入力する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理装置にかかわり、特にデータの改ざん検出機能を有する情報処理装置に関する。
【背景技術】
【0002】
インターネットを介してデータの送受信を行う場合に、データの改ざんが行われていないことを確認するために、メッセージ認証コード(Message Authentication Code :MAC)が用いられている。
【0003】
メッセージ認証コードのアルゴリズムの1つとして、メッセージ認証コードのための鍵つきハッシング(Keyed-Hashing for Message Authentication Code :HMAC)というアルゴリズムがある(非特許文献1)。
【0004】
また、HMACを生成するための回路構成の例については、例えば、特許文献1や特許文献2に開示されている。
【0005】
送信側端末が、インターネットを介して秘密鍵とメッセージデータとHMACとを送信し、受信側端末が、秘密鍵とメッセージデータと送信側端末が生成したHMACとを受け取ると、受信側端末は、秘密鍵とメッセージデータとを用いてHMACの演算を行うことができる。
【0006】
受信側端末が受信したHMACの値と受信側端末自身が演算して求めたHMACの値とが一致しなかった場合、受けとったメッセージデータが、送信側端末から受信側端末に渡る前に改ざんされたか、あるいはメッセージデータが正しく受信できなかったか、あるいはメッセージデータの送信側端末は受信側端末が想定していない端末であったことなどが考えられる。いずれの場合においても、受信側端末が受け取ったメッセージデータは信頼できないデータであることを判断することができる。
【0007】
一方、受信したHMACの値と受信側端末自身が演算して求めたHMACの値とが一致した場合、受け取ったメッセージデータは受信側端末が想定する者から送られたメッセージデータであることを確認でき、信頼できるメッセージデータであることを判断できる。このようにHMACを用いることで、インターネットを介してメッセージデータの受け渡しを安全に行うことが可能となる。
【0008】
図4に、非特許文献1で示されたHMACの演算手順のフローチャートを示す。以下では、図4を用いて、非特許文献1で示されたHMACの演算手順を説明する。ステップS1からステップS3のいずれかのステップで、受信した秘密鍵Kから鍵データK0を生成する。ステップS0で秘密鍵Kのサイズ(Length(K))とハッシュ関数のブロック長(Length(B))を比較する。
【0009】
ステップS1では、秘密鍵Kのサイズ(Length(K))とハッシュ関数のブロック長(Length(B))が等しい場合、秘密鍵Kを鍵データK0として、ステップS4に進む。
【0010】
ステップS2で、秘密鍵Kのサイズ(Length(K))がハッシュ関数のブロック長(Length(B))よりも長い場合に、秘密鍵Kをハッシュ関数Hで演算して秘密鍵のダイジェスト(H(K))を求め、得られた結果H(K)に対してハッシュ関数のブロック長となるまで0を追加し鍵データK0を生成する。K0を生成すると、ステップS4に進む。ハッシュ関数のブロック長(Length(B))のほうが、秘密鍵Kのサイズ(Length(K))よりも長い場合(Length(B) > Length(K))にはステップS3に進む。
【0011】
ステップS3では、Length(B) > Length(K)なので、秘密鍵K にLength(B)となるまでに0を付加して、その結果を鍵データK0とする。K0を生成すると、ステップ4に進む。
【0012】
ステップS4では、定数ipadとステップS1からステップS3いずれかで生成した鍵データK0とを排他的論理和演算(xor)して、データ(K0 xor ipad)を求める。
【0013】
ステップS5では、ステップ4の演算結果(K0 xor ipad)にHMACを求めたいメッセージデータtextを連接したデータ(K0 xor ipad||text)を生成する。
【0014】
ステップS6では、ステップS5で生成したデータ(K0 xor ipad||text)をハッシュ関数Hで演算し、そのダイジェストH(K0 xor ipad||text)を求める。
【0015】
ステップS7では、K0と定数opadとの値を排他的論理和演算して、データ(K0 xor opad)を求める。
【0016】
ステップS8では、ステップ7の演算結果(K0 xor opad)にステップS6の演算結果H(K0 xor ipad||text)を連接したデータ( K0 xor opad )||H( K0 xor ipad || text)を生成する。
【0017】
ステップS9では、ステップS8で生成したデータ( K0 xor opad )||H( K0 xor ipad || text)のダイジェストH(( K0 xor opad )||H( K0 xor ipad || text))を作成する。
【0018】
ステップS10では、ステップS9で求めたデータH(( K0 xor opad )||H( K0 xor ipad || text))の左側からtバイトの値を求め、その値をHMACとする。
【先行技術文献】
【特許文献】
【0019】
【特許文献1】特開2007-164589号公報
【特許文献2】特開2002-162904号公報
【非特許文献】
【0020】
【非特許文献1】NIST, FIPS PUB 198. FEDERAL INFORMATION PROCESSING STANDARDS PUBLICATION.“The keyed-Hash Message Authentication Code(HMAC)”
【発明の概要】
【発明が解決しようとする課題】
【0021】
ところで、受信側端末は、複数のメッセージデータを受信した場合には、メッセージデータ毎に上記S1〜S10の手順にしたがって、HMACを求める。このような場合、複数のメッセージデータのHMAC演算を同時に行うことができるようにHMAC回路が対応していない場合には、ある一つのメッセージデータのHMACの計算をしている間は、別のメッセージデータについてのHMACの計算を行うことができない。
【0022】
前述したように、受信側端末は、秘密鍵とメッセージデータとを用いてHMACの演算を行い、秘密鍵とメッセージデータいずれも全てのデータの受信を完了しないと、HMACの算出完了することができない。一方、送信側端末は、1つの秘密鍵を複数のパケットに分けて送信する場合や1つのメッセージデータを複数のパケットに分けて送信する場合がある。
【0023】
ネットワークの状況によっては、HMAC算出のための演算中に、秘密鍵の一部のパケットやメッセージデータの一部のパケットの到着に時間がかかり、HMAC回路が次のパケットを待つ状態のままになって、既に到着している別のメッセージデータのHMACの計算が待たされ、演算効率が低下するという問題がある。
【0024】
本発明は、上記の問題点を解決するためになされたものであって、複数のメッセージデータについてそれぞれのHMACを効率よく演算することができる情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【0025】
本発明の一観点にかかる情報処理装置は、HMACを求める情報処理装置であって、入力された秘密鍵データKの秘密鍵長(Length(K))がハッシュ関数のブロック長(Length(B)よりも短い場合に、前記秘密鍵データKに対して、0を連接して第1の鍵データK0を生成し、前記秘密鍵長(Length(K))が前記ハッシュ関数のブロック長(Length(B)と等しい場合、前記秘密鍵データKを第2の鍵データK0とし、前記秘密鍵長(Length(K))が前記ハッシュ関数のブロック長(Length(B)よりも長い場合に、前記秘密鍵データKのダイジェスト値である第1のダイジェスト値H(K)に対して0を連接して第3の鍵データK0を生成し、前記第1の鍵データK0、前記第2の鍵データK0、又は前記第3の鍵データK0のいずれかに対して第1の定数ipadとの排他的論理和を行い第1のデータ(K0 xor ipad)を算出するパディング回路と、前記秘密鍵長(Length(K))が前記ハッシュ関数のブロック長(Length(B)より長い場合に、前記第1のダイジェスト値H(K)を求めるとともに、前記第1のデータ(K0 xor ipad)と入力されたメッセージデータMとを連接したデータ(K0 xor ipad) || M)のダイジェスト値である第2のダイジェスト値H(K0 xor ipad) || M)を求めるハッシュ演算回路と、前記秘密鍵データK、または前記第1のダイジェスト値H(K)を記憶する保持回路と、HMAC算出のための処理状態を管理する制御部とを備え、前記ハッシュ演算回路は、前記第1のダイジェスト値H(K)の算出処理を途中で中断する場合に、前記中断までに算出した前記第1のダイジェスト値H(K)の途中経過を外部に出力し、前記第1のダイジェスト値H(K)の算出処理を再開する場合、前記第1のダイジェスト値H(K)の途中経過が入力され、前記第1のダイジェスト値H(K)の途中経過を用いて、前記第1のダイジェスト値H(K)を算出し、前記ハッシュ演算回路は、前記第2のダイジェスト値H(K0 xor ipad) || M)の算出処理を途中で中断する場合に、前記中断までに算出した前記第2のダイジェスト値H(K0 xor ipad) || M)の途中経過を外部に出力し、前記第2のダイジェスト値H(K0 xor ip
ad) || M)の算出処理を再開する場合、前記第2のダイジェスト値H(K0 xor ipad) || M)の途中経過が入力され、前記第2のダイジェスト値H(K0 xor ipad) || M)の途中経過を用いて、前記第2のダイジェスト値H(K0 xor ipad) || M)を算出し、前記保持回路は、前記ハッシュ演算回路が、前記第2のダイジェスト値H(K0 xor ipad) || M)の算出処理を途中で中断する場合に、前記秘密鍵データK、又は前記第1のダイジェスト値H(K)を外部に出力し、前記ハッシュ演算回路が、前記第2のダイジェスト値H(K0 xor ipad) || M)の算出処理を再開する場合に、前記秘密鍵データK又は前記第1のダイジェスト値H(K)が入力され、前記制御部に前記第1のダイジェスト値H(K)の算出処理の再開指示を示す信号を入力した場合に、前記ハッシュ演算回路は、前記第1のダイジェスト値H(K)の算出処理を再開し、前記制御部に前記第2のダイジェスト値H(K0 xor ipad) || M)の算出処理の再開指示を示す信号を入力した場合に、前記ハッシュ演算回路は、前記第2のダイジェスト値H(K0 xor ipad) || M)の算出処理を再開することを特徴とする。
【発明の効果】
【0026】
本発明によれば、複数のメッセージデータについてそれぞれのHMACを効率よく演算することができる情報処理装置が得られる効果がある。
【図面の簡単な説明】
【0027】
【図1】本発明の一実施例にかかわる通信システムの構成を示すブロック図である。
【図2】本発明の実施例にかかわるHMAC演算回路100の構成例を示すブロック図である。
【図3】本発明の実施例にかかわるHMAC演算回路100の状態を示すステートマシンの状態遷移グラフである。
【図4】FIPS PUB 198で定められている従来のHMACの演算手順を示すフローチャートを示す図である。
【発明を実施するための形態】
【0028】
以下、本発明の実施例について説明する。
図1は、本発明の一実施例の情報処理装置にかかわる通信システムの構成を示すブロック図である。
【0029】
この通信システムにおいて通信装置1000は、複数の通信装置500、600とネットワーク400により接続されている。通信装置1000は、HMAC演算回路100とインターフェース200と記憶部300を含む構成である。
【0030】
通信装置1000のインターフェース200は、ネットワークを介して、通信装置500や通信装置600から秘密鍵及び秘密鍵のデータ長とメッセージデータ及びメッセージデータのデータ長とメッセージデータに対応するHMACを受信する。
【0031】
HMAC演算回路100は、受信した秘密鍵とメッセージデータとからHMACを算出し、受信したHMACと算出したHMACとを比較し、一致する場合は、メッセージデータが信頼できるものと判断し、異なる場合は、メッセージデータが信頼できないものと判断する。
【0032】
この実施形態に係わるHMAC演算回路100の構成例を、図2に示す。図3にHMAC演算回路100の状態遷移グラフを示す。HMAC演算回路の状態遷移は、HMAC制御回路129が管理する。
【0033】
後で詳しく説明するが、図3に示すHMACの演算において、ネットワークを介してデータを得る場合、処理が進まない2つの場合が考えられる。1つは、ステップS12において秘密鍵Kがハッシュ関数のブロック長Bよりも長くかつ秘密鍵Kのデータが受信に時間がかかる場合であり、もう1つは、ステップS18においてメッセージデータがハッシュ関数のブロック長Bよりも長くメッセージデータの受信に時間がかかる場合である。これらを解決するために、図2に示す本発明一実施例のHMAC演算回路100は、秘密鍵・メッセージデータ指定信号線126と再開信号線127を備えている。
【0034】
以下では、図2のHMAC演算回路100の構成について説明する。
【0035】
HMAC演算回路100は、セレクタ120と、パディング回路121と、メッセージデータ拡張回路122と、セレクタ123と、K保持回路124と、メッセージデータ保持回路125と、ハッシュ演算回路128と、HMAC制御回路129と、セレクタ140と、セレクタ141と定数回路142とを有する。
【0036】
セレクタ120は、外部から入力される制御信号(図示はせず。)が“0”である場合、秘密鍵・メッセージ入力信号線119により入力された信号をパディング回路121に出力し、外部から入力される制御信号が“1”である場合、K保持回路124から入力されたデータをパディング回路121に出力する。
【0037】
パディング回路121は、入力された秘密鍵データKの秘密鍵長(Length(K))がハッシュ関数のブロック長(Length(B))よりも短い場合に、秘密鍵データKに対して0を連接(パディング)して、データ長が、ハッシュ関数のブロック長(Length(B))と等しい鍵データK0を生成する回路である。また、秘密鍵Kのダイジェスト値H(K)(ダイジェスト値H(K)については、後述する。)に対して、0を連接(パディング)して、データ長が、ハッシュ関数のブロック長(Length(B))と等しい鍵データK0を生成する回路である。また、秘密鍵データKをn個のデータ(分割秘密鍵と称する。)( K0, K1, K2,…,Kn)に分割した場合のn番目のデータである分割秘密鍵(Kn)のデータ長が、ハッシュ関数のブロック長(Length(B))よりも短い場合に、分割秘密鍵(Kn)に対して、0を連接(パディング)する回路である。また、メッセージデータのデータ長Length(M)が、ハッシュ関数のブロック長Length(B)より短い場合に、メッセージデータMに対して、データ長がLength(B)となるまで0を連接(パディング)する回路である。また、メッセージデータMをn個のメッセージデータブロックM0, M1, M2,…,Mnに分割した場合のn番目のデータであるメッセージデータブロックMnのデータ長が、Length(B)より短い場合に、メッセージデータブロックMnに対して、データ長がLength(B)となるまで0を連接(パディング)する回路である。また、H(K0 xor ipad) || M)(H(K0 xor ipad) || M)については後述する。)に対して、データ長が、Length(B)となるまで0を連接(パディング)する回路である。また、鍵データ(K0)に対して仕様で定められた定数ipadとの排他的論理和演算を行い、(K0 xor ipad)を生成する回路である。また、鍵データ(K0)に対して仕様で定められた定数opadとの排他的論理和演算を行い、(K0 xor opad)を生成する回路である。尚、鍵データK0は、秘密鍵データKの秘密鍵長(Length(K))がハッシュ関数のブロック長(Length(B))と等しい場合は、秘密鍵データKであり、鍵データK0は、秘密鍵データKの秘密鍵長(Length(K))がハッシュ関数のブロック長(Length(B))より短い場合は、秘密鍵データKに対して0を連接(パディング)したデータであり、秘密鍵データKの秘密鍵長(Length(K))がハッシュ関数のブロック長(Length(B))より長い場合は、秘密鍵Kのダイジェスト値H(K)に対して、0を連接(パディング)したデータである。
【0038】
メッセージデータ拡張回路122は、後述するメッセージデータ保持回路125に保持されたデータを入力として受け取ると、メッセージデータの拡張演算を行った結果を、セレクタ123を介して再びメッセーデータ保持回路125に出力する。ここで、拡張演算とは、ハッシュアルゴリズムで定義された入力されたメッセージデータに対する演算であり、この具体的な演算はハッシュアルゴリズム毎に応じて決められている。
【0039】
セレクタ123は、HMAC制御回路129から入力される制御信号(図示はせず。)が“1”である場合、パディング回路121から入力されたデータをメッセージデータ保持回路125に出力し、HMAC制御回路129から入力される制御信号が“0”である場合、メッセージデータ拡張回路122から入力されたデータをメッセージデータ保持回路125に出力する。
【0040】
K保持回路124は、秘密鍵データK、秘密鍵データKのダイジェスト値H(K)が書き込まれ、それらのデータを保持する回路である。また、K保持回路124は、H((K0 xor ipad) || M)を、一旦ハッシュ演算回路128から書き込み、ハッシュ演算回路128から一時的に退避させる回路である。
【0041】
また、K保持回路124は、ある秘密鍵データとあるメッセージデータについてダイジェストH((K0 xor ipad) || M)を求めている途中で、別の秘密鍵データKと別のメッセージデータMの演算が先に実行することができる場合に、保持している秘密鍵データK又はH(K)を、K出力信号線133を用いて、記憶部300の秘密鍵データ記憶回路300aに出力する。また、この記憶部300の秘密鍵データ記憶回路300aに退避しておいたKまたはH(K)は、秘密鍵・メッセージ入力信号線119により再び入力され、セレクタ140に、K書き込み信号線135を用いてK書き込み信号を1とした信号を入力することにより、K保持回路124に再び入力される。
【0042】
メッセージデータ保持回路125は、パディング回路121によって書き込まれる(K0 xor ipad)、(K0 xor opad)を保持する回路である。また、分割秘密鍵Ki (i=0,…,n)が書きこまれて保持する回路である。また、分割秘密鍵(Kn)に0を連接したデータを保持する回路である。また、メッセージデータMに対して、0を連接したデータが書き込まれ、保持する回路である。また、H(K0 xor ipad) || M)に対して、0を連接したデータが書き込まれ、保持する回路である。また、メッセージデータ保持回路125は、メッセージデータ拡張演算回路122の演算結果をセレクタ123経由で受け取り保持する回路である。
【0043】
ハッシュ演算回路128は、秘密鍵長(Length(K))がハッシュ関数のブロック長(Length(B))より長い場合に、秘密鍵Kのダイジェスト(H(K))を求める。この場合、秘密鍵Kをn個のデータ(分割秘密鍵と称する。)(K0, K1, K2,…,Kn)に分割し、K0, K1, K2,…Kn-1,Kn(若しくはKnに0を連接したデータ)の順番でハッシュ演算回路128に入力し、ハッシュ演算を繰り返し行う。その結果、秘密鍵Kのダイジェスト値H(K)(=H(K0, K1, K2,…,Kn)を求めることができる。ここで、K0, K1, K2,…,Kn-1のデータ長はハッシュ関数のブロック長と等しい。Knのデータ長は、ハッシュ関数のブロック長以下である。
【0044】
また、ハッシュ演算回路128は、秘密鍵KのダイジェストH(K)を求めている時に、分割秘密鍵(K0, K1, K2,…,Kn)のうち、Kiまで到着し、H(K)を求めるための次のデータKi+1が到着する前に、別の秘密鍵K(K2とする。)のデータが揃った場合、HMAC出力信号線130によりH(K)の中間結果(H(K0, K1, K2,…,Ki)を出力し、記憶装置300の秘密鍵データ記憶回路300aに記録しておく。記憶装置300に記録された秘密鍵Kの途中結果H(K0, K1, K2,…,Ki)は、秘密鍵Kのダイジェストの演算途中から再開させる場合に、ハッシュ演算回路128に戻される。そのために、ハッシュ初期値入力信号線132にH(K0, K1, K2,…,Ki)を入力し、再開信号線127に流す再開信号を1としてセレクタ141に入力することにより、途中結果H(K0, K1, K2,…,Ki)は、ハッシュ演算回路128内にあるダイジェスト値記憶回路143に書き込まれる。
【0045】
また、ハッシュ演算回路128は、メッセージデータ保持回路125に書き込まれたK0 xor ipadに対してハッシュ演算を行うことにより、ダイジェストH(K0 xor ipad)を求める。また、ハッシュ演算回路128は、メッセージデータ保持回路125に書き込まれたK0 xor opadに対してハッシュ演算を行うことにより、ダイジェストH(K0 xor opad)を求める。
【0046】
また、ハッシュ演算回路128は、HMACの中間値H((K0 xor ipad) || M)を求める。ここで、メッセージデータのデータ長(Length(M))が、ハッシュ関数のブロック長(Length(B))より長い場合には、メッセージデータMをn個のメッセージデータブロック(M0, M1, M2,…,Mn)に分割し、M0, M1, M2,…,Mn(若しくはMnに0を連接したデータ)の順番でハッシュ演算回路128に入力し、ハッシュ演算を繰り返し行う。その結果、H((K0 xor ipad) ||M0, M1, M2,…,Mn)(=H((K0 xor ipad) || M))を求めることができる。
【0047】
また、ハッシュ演算回路128は、H((K0 xor ipad) ||M)を求めている時に、メッセージデータMのn個のメッセージデータブロック( M0, M1, M2,…,Mn)のうち、Miまで到着し、H((K0 xor ipad) ||M0, M1, M2,…,Mn)を求めるための次のデータMi+1が到着する前に、別のメッセージデータM(M2とする。)及び秘密鍵K(K2とする。) のデータが揃った場合、H((K0 xor ipad) ||M)の中間結果H((K0 xor ipad) ||M0, M1, M2,…,Mi)をHMAC出力信号線130より出力し、記憶装置300のメッセージデータ記憶回路300bに記録しておく。記憶装置300のメッセージデータ記憶回路300bに記録したH((K0 xor ipad) || M0, M1, M2,…,Mi))は、H((K0 xor ipad) ||M)の演算途中から演算を再開する場合に、中断再開ステップで、ハッシュ演算回路128に戻される。そのために、ハッシュ初期値入力信号線132に退避しておいたH((K0 xor ipad) || M0, M1, M2,…,Mi))を入力し、かつ再開信号線127により再開信号を1とした信号をセレクタ141に入力することにより、H((K0 xor ipad) || M0, M1, M2,…,Mi))はハッシュ演算回路128内にあるダイジェスト値記憶回路143に書き込まれる。
【0048】
HMAC制御回路129のステートマシンは、HMAC演算回路100の状態遷移を管理する。
【0049】
HMAC制御回路129にあるステートマシンは、HMAC演算回路100の外部よりHMAC信号線131と、再開信号線127と、秘密鍵・メッセージ指定信号線126により状態を制御することができる。
【0050】
例えば、HMAC制御回路129に、HMAC信号を1クロックサイクル以上0にした信号を入力することで、HMAC制御回路129にあるステートマシンを初期状態へ遷移させることができる。
【0051】
また、再開信号を1、秘密鍵・メッセージ指定信号を0とすることで、HMAC制御回路129にあるステートマシンの状態を秘密鍵のダイジェストの算出を再開する状態にすることができる。また、再開信号を1、秘密鍵・メッセージ指定信号を1とすることで、HMAC制御回路129にあるステートマシンは、H((K0 xor ipad) ||M)の算出を再開する状態に遷移する。
【0052】
セレクタ140は、K書き込み信号線135により入力されるK書き込み信号が“1”である場合、記憶部300の秘密鍵データ記憶回路300aに退避しておいたデータKまたはH(K)を秘密鍵・メッセージ入力信号線119を通じてK保持回路124に出力し、K書き込み信号線135により入力されるK書き込み信号が“0”である場合、ハッシュ演算回路128の出力をK保持回路124に出力する。
【0053】
セレクタ141は、再開信号線127により入力される再開信号が“1”である場合、ハッシュ初期値入力信号線127により入力された信号をハッシュ演算回路143に出力し、再開信号が“0”である場合、後述する定数回路142により入力された信号をハッシュ演算回路128に出力する。例えば、ハッシュ初期値入力信号線132にH(K,K, K, …, K i)を入力し、再開信号を1とすることにより、H (K)の途中結果H(K,K, K, …, K i)をハッシュ演算回路128に出力する。また、ハッシュ初期値入力信号線132にH((K0 xor ipad) || M0, M1, M2,…,Mi))を入力し、再開信号を1とすることにより、H((K0 xor ipad) ||M)の途中結果H((K0 xor ipad) || M0, M1, M2,…,Mi))をハッシュ演算回路128に出力する。
【0054】
定数回路142は、ハッシュアルゴリズムで定められた初期値を出力する。再開信号“0”がセレクタ141に入力された場合に、定数回路142の出力はセレクタク141を通じて、セレクタ141からハッシュ演算回路128に入力される。ここで、初期値とは、ハッシュ演算回路128が、あるデータに対してダイジェストを求める際に、ハッシュ演算の初期値として用いる値である。
【0055】
次に、図3に示す状態遷移グラフに従って、図2のHMAC演算回路100の処理について説明する。また、HMAC制御回路129の状態遷移についても併せて説明する。
【0056】
まず、0にセットしたHMAC信号をHMAC信号線131によりHMAC制御回路129に入力する。0にセットしたHMAC信号が入力されると、HMAC制御回路129が管理するHMAC演算回路の状態は初期状態(S10)となる。HMAC制御回路131により、HMAC演算回路100の状態が初期状態となる。
【0057】
次に、1にセットしたHMAC信号をHMAC信号線131によりHMAC制御回路129に入力する。1にセットしたHMAC信号が入力されると、HMAC制御回路129が動作を開始する。
【0058】
これからHMACを演算するために用いる秘密鍵のデータ長(秘密鍵長)(Length(K))を秘密鍵・メッセージ入力信号線118によりパディング回路121に入力する。パディング回路121は、入力されたLength(K)により、図3のステップS11、ステップS12、ステップS13のいずれの処理を行うかを判断することができる。
秘密鍵長(Length(K)の値によって、ステップS11、S12またはS13、S14A、S14Bの処理が行われる。これらの処理では、秘密鍵Kのデータを用いてハッシュ関数のブロック長(Length(B))と等しい長さのK0を生成し、さらに生成したK0に定数ipadとの排他的論理和演算を行う。例えば、Length(K)<Length(B)の場合には、秘密鍵長がハッシュ関数のブロック長より短いので、パディング処理、すなわちBの長さになるまでKの値に0を付加する処理(連接処理)を行う。一方、Length(K)>Length(B)の場合には、秘密鍵長がブロック長より長いため、秘密鍵のハッシュ値H(K)を求め、このH(K)に対して上記パディング処理を行いK0とする。Length(K) とLength(B)が等しいときにはKは、そのままK0とする。
【0059】
このようにして得られたブロック長と長さが等しいK0に、定数ipadとの排他的論理和演算を行う。これらの具体的な処理を述べる。
【0060】
<(1)Length(K)=Length(B)の場合;S11>
秘密鍵長(Length(K))がハッシュ関数のブロック長(Length(B))と等しい場合には、パディング回路121は、ステップS11の処理を行うと判断する。また、HMAC制御回路129の状態もステップS11に遷移する。
【0061】
パディング回路121は、秘密鍵・メッセージ入力信号線119を通じて入力された秘密鍵データKを鍵データK0として、K0に対して仕様で定められた定数ipadとの排他的論理和演算を行う。その演算結果をメッセージデータ保持回路125に書き込む。同時に、入力されたKをK保持回路124に書き込む。ここで、KをK保持回路124に書き込むことにより、図3のステップS17における演算時に、秘密鍵データを再び入力する必要がなくなる。
【0062】
Kとipadとの排他的論理和演算を完了すると、パディング回路121は、HMAC制御回路129に、Kとipadとの排他的論理和演算が完了した旨を通知する。HMAC制御回路129の状態は、S15に遷移する。
【0063】
<(2)Length(K)<Length(B)の場合;S13>
秘密鍵長(Length(K))がハッシュ関数のブロック長(Length(B))よりも短いときには、パディング回路121は、ステップS13の処理を行うと判断する。また、HMAC制御回路129の状態もS13に遷移する。パディング回路121は、入力されたKに対してブロック長(Length(B))と等しくなるまで0で連接(パディング)し、鍵データK0を生成する。したがって、パディング回路121がパディングする0の個数は、ハッシュ関数のブロック長(Length(B))とパディング回路に入力されたLength(K)との差分により求めることができる。
【0064】
なお、パディング回路121は、入力されたKをK保持回路124に書き込む。また、パディング回路121は、鍵データK0に対して仕様で定められた定数ipadとの排他的論理和演算を行い、その演算結果(K0 xor ipad)をメッセージデータ保持回路125に書き込む。K0とipadとの排他的論理和の演算を完了すると、パディング回路121は、HMAC制御回路129に、K0とipadとの排他的論理和演算が完了した旨を通知する。HMAC制御回路129の状態は、S15に遷移する。
【0065】
<(3)Length(K)>Length(B)の場合;S12>
秘密鍵長(Length(K))がハッシュ関数のブロック長(Length(B))より大きい場合は、パディング回路121は、ステップS12の処理を行うと判断する。また、HMAC制御回路129の状態もS12に遷移する。
【0066】
この場合のように、Length(K)がLength(B)よりも長いときには、秘密鍵Kのハッシュ値(ダイジェスト値)(H(K))を求める。H(K)を求めるために、秘密鍵Kをn個のデータ(分割秘密鍵と称する。)( K0, K1, K2,…,Kn)に分割し、K0, K1, K2,…,Knの順番でハッシュ演算回路128に入力し、ハッシュ演算を繰り返し行う。ここで、K0, K1, K2,…,Kn-1のデータ長はハッシュ関数のブロック長と等しく、Knのデータ長はハッシュ関数のブロック長以下となる。
【0067】
まず、分割秘密鍵Ki (i=0,…,n)をK0から順番に秘密鍵・メッセージ入力信号線119を介してHMAC演算回路100へ入力する。入力されたKi はパディング回路121を通り、メッセージデータ保持回路125に書き込まれ、ハッシュ演算回路128へと入力される。Kiの入力が終わると自動的にハッシュ演算回路128を使ったハッシュ演算が行われる。この結果、Kiまでの入力が終わった時点でハッシュ演算回路128から出力されるダイジェスト値は、H(K0, K1, K2,…Ki)と表す。
【0068】
ハッシュ演算回路128は、ダイジェスト値H(K0, K1, K2,…Ki)の算出を完了すると、算出を完了した旨を、インターフェース200に通知する。ハッシュ演算回路128は、次のデータKi+1が入力されるまで待機する。以上の演算をK0〜Kn-1について繰り返し行う。以上の手順で、H(K0, K1, K2,…,Kn-1)を求めることができる。
【0069】
次に、Knが入力されると、パディング回路121は秘密鍵・メッセージ演算処理長入力信号線118を通じて入力された秘密鍵のデータ長を元に、秘密鍵・メッセージ入力信号線119から入力されたKnに必要があれば0を連接してメッセージデータ保持回路125に書き込む。
【0070】
メッセージデータ保持回路125へのデータの書き込みが終わると、そのことをHMAC制御回路129に通知する。HMAC制御回路129は、パディング回路121から0の連接およびメッセージデータ保持回路125へのデータの書き込みが終わった通知を受け取ると、ハッシュ演算回路128に対して演算を開始することを通知する。
【0071】
以上の演算によってステップS12のH(K)の処理が終了する。秘密鍵Kの最後のデータブロックKnの演算が終わると、秘密鍵Kのダイジェスト値H(K)(=H(K0, K1, K2,…,Kn)を求めることができる。
【0072】
尚、K0からKnのうちK0からKn-1までは、データのブロック長はLength(B)である。したがって、パディング回路125は入力されたKiに対して、0のパディング処理を行わない。したがって、この場合、K0からKn-1までを入力する間は秘密鍵・メッセージ演算処理長入力信号線118を通じて残りの秘密鍵のデータ長を入力しなくともよい。
【0073】
一方、Knは、データのブロック長はLength(B)より小さい場合がある。この場合、KnをHMAC演算回路100に入力する前に、秘密鍵・メッセージ演算処理長入力信号線118を通じてKnの長さをパディング回路121に入力しなければならない。なぜなら、パディング回路121では、Length(Kn)とLength(B)が等しくなるまで0を連接するので、Knの長さが必要となるためである。
【0074】
Length(Kn)とLength(B)が等しい場合には、パディング回路121では0を連接する必要がないために、0を秘密鍵・メッセージ演算処理長入力信号線118に入力する。
【0075】
以上の演算によってステップS12のH(K)の処理が終了する。ハッシュ演算回路128は、HMAC制御回路129に、H(K)の算出が完了した旨を通知する。HMAC制御回路129の状態は、S14Aに遷移する。
【0076】
次に、S14Aにおいて、HMAC制御回路129はハッシュ演算回路128の演算結果H(K)を、セレクタ140を介してK保持回路124に書き込ませる。また、S14Bにおいて、演算結果H(K)をセレクタ120を介してパディング回路121に出力し、パディング回路121は、H(K)に0を連接し、鍵データK0を生成し、鍵データK0と定数ipadとの排他的論理和を行う。また、その演算結果(K0 xor ipad)を、セレクタ123を経由してメッセージデータ保持回路125に書き込む。K保持回路124およびメッセージデータ保持回路125への書き込みが終了すると、HMAC制御回路129は状態S15に遷移する。
【0077】
<S15〜S16>
上述のステップS11からS14Aの処理により、秘密鍵のデータからK0を生成され、メッセージデータ保持回路125にK0 xor ipadが書き込まれた状態となる。
【0078】
次に生成したK0 xor ipadを用いてH((K0 xor ipad) || M)の演算を行う。まず、HMAC制御回路129のステートマシンが状態S15に遷移することで、ハッシュ演算回路128を用いて、メッセージデータ保持回路125に書き込まれたK0 xor ipadに対してハッシュ演算を行うことにより、ダイジェストH(K0 xor ipad)を求める。
【0079】
なお、ハッシュアルゴリズムによっては、ダイジェストを取る際にメッセージデータの拡張演算を行うことがある。この場合、メッセージデータ拡張回路122は、メッセージデータ保持回路125の出力に対して拡張演算を行い、演算結果を、セレクタ123を介してメッセージデータ保持回路125に出力する。メッセージデータ保持回路125は、メッセージデータ拡張演算回路122の演算結果を受け取ると、ハッシュ演算回路128からの要求に応じて保持しているデータを出力する。
【0080】
ハッシュ演算回路128が、H(K0 xor ipad)を算出する演算を終了すると、ハッシュ演算回路128から図示していない信号線を通じてHMAC制御回路129にH(K0 xor ipad)を算出するハッシュ演算が終了したことを通知する。これにより、HMAC制御回路129のHMAC制御回路129のステートマシンはメッセージデータの演算待ち状態S16となる。
【0081】
次に、H((K0 xor ipad) || M)の演算を行うため、HMACを求めたいメッセージデータを秘密鍵・メッセージ入力信号線119を通じてHMAC演算回路100に入力しなければならない。以下にその手順を説明する。
【0082】
まず、これから演算するメッセージデータのデータ長さ(Length(M))を秘密鍵・メッセージ長入力信号線118を用いて、パディング回路121に入力する。
【0083】
メッセージデータをMとするとき、Length(B)≧Length(M)であれば、Length(M)を総メッセージデータ長入力信号線134と秘密鍵・メッセージ演算長入力信号線118によりパディング回路121に入力した後、メッセージデータを秘密鍵・メッセージ入力信号線119を通じてパディング回路121に入力する。パディング回路121は、メッセージデータが入力されると、Length(B)となるまででメッセージデータに0を連接してメッセージデータ保持回路125に0パディングしたデータを書き込む。
【0084】
一方、Length(B)<Length(M)である場合には、Mをn個のメッセージデータブロックM0, M1, M2,…,Mnに分割して、先頭から順番に秘密鍵・メッセージ入力信号線119を通じて入力する。ここで、M0, M1, M2,…,Mn-1は、Length(B)と同じデータ長に分割する。Mnのデータ長はLength(B)以下の長さである。
【0085】
Mi (i=0,…,n-1)の演算の際には、パディング回路121を用いて入力データに対する0の連接を行う必要がないため、秘密鍵・メッセージ演算長入力信号線118にメッセージ長を入力しなくてもよい。しかし、Mn のデータサイズが、Length(B)より小さい場合は、パディング回路121はMnに対して0パディング処理を行う必要があるため、パディング回路は、データMnの長さが必要がとなる。したがって、例えば、Mi まで演算している場合に、秘密鍵・メッセージ演算長入力信号線118を用いて、Mi+1 からMnまでのデータ長を入力する。Length(M)も同様に、Mnの演算を行う前までに総メッセージデータ長入力信号線134にセットする必要がある。
【0086】
メッセージデータブロックMi がメッセージデータ保持回路125に入力されると、自働的にハッシュ演算回路128が演算を開始し、H(K0 xor ipad) || Mi ) (i=0,…,n)の結果が得られる。
【0087】
すべてのメッセージデータブロックMi(i=0,…,n)の入力を終えると、図3のステップ16の演算が終わり、HMACの中間値H((K0 xor ipad) || M)が得られる。このH((K0 xor ipad) || M)の演算が終了することで、HMAC制御回路129のステートマシンは次の状態S17に遷移する。以上で、図3のステップ16までの演算が終わる。図3のS17以降は、すでにHMAC回路17が保持しているデータを用いて演算を行うことができるため、外部からの入力データ待ちは発生しない。
【0088】
<S17>
HMAC制御回路129のステートマシンの状態S17では、HMAC演算回路100はK0 xor opadの演算を行うため、HMAC演算回路100は、K保持回路124に保持されているKを読み出し、セレクタ120を介してパディング回路121に入力する。パディング回路は、K に対して0パディングを行い、Length(K0)がLength(B)となる鍵データK0を生成する。 また、パディング回路121では0パディングすると同時にK0 xor opadの演算を行い、演算結果をメッセージデータ保持回路125に書き込む。データの書き込みが終了すると、HMAC制御回路129のステートマシンは状態S18に遷移する。
【0089】
<S18>
HMAC制御回路129のステートマシンの状態S18では、S16で算出した演算結果H((K0 xor ipad) || M)を、一旦ハッシュ演算回路128からセレクタ140を介してK保持回路124に書き込み、ハッシュ演算回路128の演算結果H((K0 xor ipad) || M)をK保持回路124へ退避させる。
【0090】
H((K0 xor ipad) || M)のK保持回路124への退避が完了すると、HMAC制御回路129内のステートマシンが状態S19 へ遷移する。
【0091】
<S19>
S19では、H(K0 xor opad)の演算が行われる。すなわち、ハッシュ演算回路128を用いて、メッセージデータ保持回路125に書き込まれたK0 xor opadに対してハッシュ演算を行うことにより、ダイジェストH(K0 xor opad)を求める。
【0092】
H(K0 xor opad)の演算が終了すると、HMAC制御回路129のステートマシンは状態S20 へ遷移する。
【0093】
<S20、S21>
S20では、S18でK保持回路124に退避したH(K0 xor ipad) || M)を、セレクタ120を介してパディング回路121に読み出す。そして、パディング回路121が、H(K0 xor ipad) || M)に対して0パディング処理を行い、メッセージデータ保持回路125へ書き込む。
【0094】
この書き込みが終了すると、HMAC制御回路129のステートマシンは状態S21へ遷移し、H((K0 xor opad )|| H((K0 xor ipad) || M))の演算を開始する。この演算が終了すると、求めたい情報のHMAC値がHMAC出力信号線130に出力される。
【0095】
<データがネットワークで送られてくる場合の問題>
以上のようなS11からS21の手順でHMAC演算回路100が演算を進めてゆく場合に、HMAC演算回路100が必要とするとき即時に、秘密鍵データとメッセージデータが入力されるならば問題はない。しかし、これらのデータがネットワーク経由で送られてくる場合に問題が起こり得る。
【0096】
例えば、S12で、秘密鍵KのダイジェストH(K)を生成のため演算を行っているとき、秘密鍵Kを分割した分割秘密鍵K0 からKのうち、K0 からKi まではネットワーク400経由で滞りなくデータが送信されてきたが、次のKi+1が到着しないということがあり得る。
【0097】
この場合には、HMACの演算はKi+1の入力待ち状態となり、HMACの演算が中断したままとなる。あるシステムの中でHMACを1つしか利用しない場合には、次の秘密鍵データKi+1が到着するまで待つこともできる。しかし、HMACを複数必要とする場合、1つのHMACの処理だけでHMAC演算回路を占有するよりも、演算が可能となったデータから順次処理していくことによりシステム全体の処理時間は短くすることが可能となる。
【0098】
HMACの演算において、データの待ち状態となる可能性のある場合は2つある。1つは、図3のステップS12において秘密鍵Kがハッシュ関数のブロック長Bよりも長い場合である。もう1つは、ステップS18においてメッセージデータがハッシュ関数のブロック長Bよりも長い場合である。それ以外の処理においては、演算に必要なデータはHMAC演算回路100に保持されているため、外部からのデータ入力待ちは発生しない。
【0099】
なお、ステップ12とステップ18において、インターフェース200がデータの入力待ちとなることはインターフェース200が検知する。
【0100】
<データがネットワークで送られてくる場合の問題の解決>
そこで、HMACを求める際にステップS12とステップS18の演算において、データの入力待ちとなった場合に、演算を再開する際に必要となる情報をHMAC演算回路100の内部で退避しておくか、あるいはHMAC演算回路100の外部の記憶部300で保持する構成とする。 これと共に、必要なデータが揃ったところでステップS12またはステップS18から再開できるように、HMAC演算回路100の内部又は外部の記憶部300に退避していたデータをセットするとともに、HMACの演算を制御するHMAC制御回路129のステートマシンの状態を、演算を中断した状態にセットすることができるような構成とする。これにより演算に必要なデータが揃ったものから順番にHMACの演算を進めていくことが可能となる。
【0101】
以上のような再開に必要な条件を満たすことができるようにするため、HMAC演算回路100には再開信号線27と秘密鍵・メッセージデータ指定信号線126を備えている。
【0102】
<解決するための詳細>
以下でこれらの信号線の説明を行う。まず、S12で秘密鍵のデータ長(Length(K))がLength(B)よりも長い場合において、H(K)を求める際に、別のHMACの演算を行うため、一度中断し、再びH(K)を求める演算S12を再開する手順について説明する。
【0103】
まず、S12を中断する手順を説明する。秘密鍵K1のダイジェストH(K1)を求めている時に、分割秘密鍵(K0, K1, K2,…,Kn)のうち、Kiまで到着し、H(K1)を求めるための次のデータKi+1が到着する前に、別の秘密鍵K2のデータが揃ったとする。この場合、HMAC演算回路100のHMAC出力信号線130にそれまでのH(K1)の中間結果(K0, K1, K2,…,Ki)が出力されている。そこで、HMAC出力信号線130により出力する信号の値を読み出して記憶装置300に記録しておくとともに、秘密鍵K1のダイジェストを求めるために必要な残りデータのバイト数を記憶装置300に記録しておく。
【0104】
そして、秘密鍵K2のダイジェストを求めるために、HMAC制御回路129にあるステートマシンを初期状態に戻しておく必要があるため、HMAC信号線131が出力するHMAC信号を1クロックサイクル以上の間0にし、再びHMAC信号を1にする。このHMAC信号を1クロックサイクル以上0にすることで、HMAC制御回路129にあるステートマシンを初期状態へ遷移させることができる。
【0105】
HMAC制御回路129にあるステートマシンを初期状態へ遷移させたのち、秘密鍵K2の演算を開始する。ここで、秘密鍵K2の演算を行うにあたり、秘密鍵K2のデータ長を入力するなどの手順は通常の演算と同様であることからここでの説明は省略し、秘密鍵K2およびメッセージデータM2を使ってHMACの演算を求めることができたとする。このメッセージデータM2のHMACが求まったところで、先に中断した秘密鍵K1のダイジェストを求めるための再開手順を以下で説明する。
【0106】
HMAC制御回路129にあるステートマシンの状態を秘密鍵のダイジェスト生成状態にするために、再開信号を1、秘密鍵・メッセージ指定信号を0とし、秘密鍵・メッセージ入力信号線119から秘密鍵K1の残りのデータを入力してHMAC演算回路100を起動する。再開信号を1、秘密鍵・メッセージ指定信号を0と入力すると、HMAC制御回路129にあるステートマシンを初期状態から、ステートマシンは状態S12に遷移する。さらに、ハッシュアルゴリズムでは1つ前のブロックの演算結果を、つぎのブロックの演算の初期値として用いる。そのため、秘密鍵K1のダイジェストの演算途中から再開させるために、中断再開ステップで記憶装置300に記録されていた秘密鍵K1の途中結果H(K0, K1, K2,…,Ki)をハッシュ演算回路128に戻さなければならない。再開信号を1、秘密鍵・メッセージ指定信号を0として、ハッシュ初期値入力信号線132に、秘密鍵K1のダイジェストの途中経過H(K0, K1, K2,…,Ki)を入力する。このように再開信号を1として、セレクタ141に入力することで、ハッシュ初期値入力信号線132から入力された秘密鍵K1のダイジェストの途中経過H(K0, K1, K2,…,Ki)は、セレクタ141を経由して、ハッシュ演算回路128内にあるダイジェスト値記憶回路143に書き込まれる。さらに、残りの秘密鍵K1のデータ長が分かっているときには、秘密鍵・メッセージ長入力信号線118に秘密鍵K1の残りのデータ長を入力する。
【0107】
なお、これ以降、H(K1)が求まるまで、残りの分割秘密鍵(Ki+1, K i+2, K i+3,…,Kn)を入力する。以降の処理において中断することがないならば、通常の処理と同じようにメッセージデータM1を入力することで秘密鍵K1を用いたHMACを得ることができる。
【0108】
次に秘密鍵K3、メッセージデータM3のHMACを求める際に、メッセージデータM3のH((K0 xor ipad) ||M3)を求めている時に、メッセージデータM3のn個のメッセージデータブロック( M0, M1, M2,…,Mn)のうち、Miまで到着し、H((K0 xor ipad) ||M0, M1, M2,…,Mn)を求めるための次のデータMi+1が到着する前に、秘密鍵K4、メッセージデータM4のHMACのデータが先に準備できたことから、先にそちらの演算を行った後、メッセージデータM3のH((K0 xor ipad) ||M3)の演算を再開する手順について説明する。
【0109】
秘密鍵K3、メッセージデータM3を用いたHMACの演算において、メッセージデータM3の演算が行われるまでの手順は通常処理と同じであるため省略する。メッセージデータM3を使ったダイジェストを求めている途中で、秘密鍵K4、メッセージデータM4の演算が先に実行することができたため、K保持回路124に保持されている値を、K出力信号線133を用いてK保持回路124から読み出し、記憶部300の秘密鍵データ記憶回路300aに記憶させる。さらに、メッセージデータM3のHMACの演算途中の値H((K0 xor ipad) ||M0, M1, M2,…,Mi)がHMAC出力信号線130に出力されているので、この値をメッセージデータ記憶回路300bに記録しておく。
【0110】
以上のように、再開時に必要な情報を読み出した後、HMAC信号を0にしてHMAC制御回路129にあるステートマシンの状態を初期状態に戻す。以降、秘密鍵K4、メッセージデータM4を使って通常の処理手順で演算を行うことでHMACを得ることができる。
【0111】
次に、秘密鍵K4、メッセージデータM4を使ったHMACの演算が終了した後で、秘密鍵K3、メッセージデータM3を使った演算を再開する方法について説明する。
【0112】
HMAC制御回路129にあるステートマシンの状態をメッセージデータのダイジェスト演算待ち状態とするために、再開信号を1、秘密鍵・メッセージ指定信号線126が出力する秘密鍵・メッセージ指定信号を1、HMAC信号を1とし、メッセージデータM3の残りのデータをHMAC演算回路100に入力する。再開信号を1、秘密鍵・メッセージ指定信号を1にすることにより、HMAC制御回路129にあるステートマシンは、メッセージデータの演算待ち状態S16に遷移する。
【0113】
中断再開ステップにおいて、再開信号を1、秘密鍵・メッセージ指定信号を1にして、ハッシュ初期値入力信号線132に、メッセージデータ記憶回路300bに退避しておいたH((K0 xor ipad) || M0, M1, M2,…,Mi)の値を入力する。再開信号を1としてセレクタ141に入力することで、ハッシュ初期値入力信号線132から入力されたH((K0 xor ipad) || M0, M1, M2,…,Mi)は、セレクタ141を経由して、ハッシュ演算回路128内にあるダイジェスト値記憶回路143に書き込まれる。
【0114】
上記で示したように再開信号と秘密鍵・メッセージ指定信号を用いることで、中断時に退避していたデータH((K0 xor ipad) || M0, M1, M2,…,Mi)をハッシュ演算の初期値として与えることが可能となるため、ハッシュ演算を中断したところから再開することが可能となる。
【0115】
次に、メッセージデータM3で残っているデータ長を秘密鍵・メッセージ長入力信号線118に入力する。このとき、メッセージデータM3の残りのメッセージ長が不明の場合には最後のメッセージデータブロックをHMAC演算回路100に入力する前までに、メッセージデータM3の残りメッセージデータ長を入力すればよい。さらに、メッセージデータM3のデータ長を総メッセージ長入力信号線133に入力する。
【0116】
さらに、K書き込み信号線135が出力するK書き込み信号を1にして、秘密鍵・メッセージ入力信号線119から記憶部300に退避しておいたKまたはH(K)を入力する。K書き込み信号線135により入力されるK書き込み信号が1になったとき、セレクタ140は、秘密鍵・メッセージ入力信号線119から入力されたデータをK保持回路124に送る。また、秘密鍵・メッセージ演算長入力信号線134に、メッセージデータM3の残りのメッセージ長を入力し、総メッセージ長入力信号線134に、メッセージデータM3のメッセージ長を入力する。
【0117】
以上で、再開に必要なデータのHMAC演算回路100への準備が終わる。後は、メッセージデータM3の残りのデータ( Mi+1, Mi+2, Mi+3,…,Mn)をHMAC演算回路100に入力することで、秘密鍵K3、メッセージデータK3のHMACを求めることができる。
【0118】
このようにして、本発明のこの実施例によれば、ネットワークを介してデータを受ける場合にも、効率的にHMACを得ることが可能となる。
【0119】
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【符号の説明】
【0120】
100・・・HMAC演算回路、
200・・・インターフェース、
300・・・記憶部、
400・・・ネットワーク、
500,600,1000・・・通信装置、
118・・・秘密鍵・メッセージ長入力信号線、
119・・・秘密鍵・メッセージ入力信号線、
120,123,140,141・・・セレクタ、
121・・・パディング回路、
122・・・メッセージデータ拡張回路、
124・・・K保持回路、
125・・・メッセージ保持回路、
126・・・秘密鍵・メッセージ指定信号線、
127・・・再開信号線、
128・・・ハッシュ演算回路、
129・・・HMAC制御回路、
130・・・HMAC出力信号線、
131・・・HMAC信号線、
132・・・ハッシュ初期値入力信号線、
133・・・K出力信号線、
134・・・総メッセージ長入力信号線、
135・・・K書き込み信号線、
142・・・定数回路、
143・・・ダイジェスト値記憶回路、
300a・・・秘密鍵データ記憶回路、
300b・・・メッセージデータ記憶回路。

【特許請求の範囲】
【請求項1】
HMACを求める情報処理装置であって、
入力された秘密鍵データKの秘密鍵長(Length(K))がハッシュ関数のブロック長(Length(B)よりも短い場合に、前記秘密鍵データKに対して、0を連接して第1の鍵データK0を生成し、前記秘密鍵長(Length(K))が前記ハッシュ関数のブロック長(Length(B)と等しい場合、前記秘密鍵データKを第2の鍵データK0とし、前記秘密鍵長(Length(K))が前記ハッシュ関数のブロック長(Length(B)よりも長い場合に、前記秘密鍵データKのダイジェスト値である第1のダイジェスト値H(K)に対して0を連接して第3の鍵データK0を生成し、前記第1の鍵データK0、前記第2の鍵データK0、又は前記第3の鍵データK0のいずれかに対して第1の定数ipadとの排他的論理和を行い第1のデータ(K0 xor ipad)を算出するパディング回路と、
前記秘密鍵長(Length(K))が前記ハッシュ関数のブロック長(Length(B)より長い場合に、前記第1のダイジェスト値H(K)を求めるとともに、前記第1のデータ(K0 xor ipad)と入力されたメッセージデータMとを連接したデータ(K0 xor ipad) || M)のダイジェスト値である第2のダイジェスト値H(K0 xor ipad) || M)を求めるハッシュ演算回路と、
前記秘密鍵データK、または前記第1のダイジェスト値H(K)を記憶する保持回路と、
HMAC算出のための処理状態を管理する制御部とを備え、
前記ハッシュ演算回路は、前記第1のダイジェスト値H(K)の算出処理を途中で中断する場合に、前記中断までに算出した前記第1のダイジェスト値H(K)の途中経過を外部に出力し、前記第1のダイジェスト値H(K)の算出処理を再開する場合、前記第1のダイジェスト値H(K)の途中経過が入力され、前記第1のダイジェスト値H(K)の途中経過を用いて、前記第1のダイジェスト値H(K)を算出し、
前記ハッシュ演算回路は、前記第2のダイジェスト値H(K0 xor ipad) || M)の算出処理を途中で中断する場合に、前記中断までに算出した前記第2のダイジェスト値H(K0 xor ipad) || M)の途中経過を外部に出力し、前記第2のダイジェスト値H(K0 xor ipad) || M)の算出処理を再開する場合、前記第2のダイジェスト値H(K0 xor ipad) || M)の途中経過が入力され、前記第2のダイジェスト値H(K0 xor ipad) || M)の途中経過を用いて、前記第2のダイジェスト値H(K0 xor ipad) || M)を算出し、
前記保持回路は、前記ハッシュ演算回路が、前記第2のダイジェスト値H(K0 xor ipad) || M)の算出処理を途中で中断する場合に、前記秘密鍵データK、又は前記第1のダイジェスト値H(K)を外部に出力し、前記ハッシュ演算回路が、前記第2のダイジェスト値H(K0 xor ipad) || M)の算出処理を再開する場合に、前記秘密鍵データK又は前記第1のダイジェスト値H(K)が入力され、
前記制御部に前記第1のダイジェスト値H(K)の算出処理の再開指示を示す信号を入力した場合に、前記ハッシュ演算回路は、前記第1のダイジェスト値H(K)の算出処理を再開し、
前記制御部に前記第2のダイジェスト値H(K0 xor ipad) || M)の算出処理の再開指示を示す信号を入力した場合に、前記ハッシュ演算回路は、前記第2のダイジェスト値H(K0 xor ipad) || M)の算出処理を再開することを特徴とする
情報処理装置。
【請求項2】
前記第1のダイジェスト値H(K)の途中経過の入力を指示する信号を入力した場合に、前記ハッシュ演算回路に前記第1のダイジェスト値H(K)の途中経過を入力することを特徴とする前記請求項1記載の情報処理装置。
【請求項3】
前記第2のダイジェスト値H(K0 xor ipad) || M)の途中経過の入力を指示する信号を入力した場合に、前記ハッシュ演算回路に前記第2のダイジェスト値H(K0 xor ipad) || M)の途中経過を入力することを特徴とする請求項2記載の情報処理装置。
【請求項4】
前記ハッシュ演算回路は、前記第1のダイジェスト値H(K)を求める際に、前記秘密鍵データKをn個に分割した分割秘密鍵( K0, K1, K2,…,Kn)に対して、K0, K1, K2,…Kn-1,Kn(若しくはKnに0を連接したデータ)の順番でハッシュ演算を繰り返し行うことにより、前記第1のダイジェスト値H(K)(=H(K0, K1, K2,…,Kn))を算出し、
前記ハッシュ演算回路は、前記第1のダイジェスト値H(K0, K1, K2,…,Kn)の算出処理を中断する場合であって、前記算出処理のうち分割秘密鍵K0, K1, K2,…Kiについてハッシュ演算を行っている場合、前記第1のダイジェスト値H(K0, K1, K2,…,Kn)の算出処理の途中経過としてH(K0, K1, K2,…,Ki)を出力し、
前記第1のダイジェスト値H(K)の算出処理を再開する場合、前記ハッシュ演算回路に前記途中経過H(K0, K1, K2,…,Ki)が入力され、分割秘密鍵Ki+1,…,Knが入力され、前記第1のダイジェスト値H(K0, K1, K2,…,Kn))を算出することを特徴とする
請求項3記載の情報処理装置。
【請求項5】
前記ハッシュ演算回路は、前記第2のダイジェスト値H(K0 xor ipad) || M)を求める際に、前記メッセージデータをn個に分割したメッセージデータブロック(M0, M1, M2,…,Mn)に対して、M0, M1, M2,…,Mn(若しくはMnに0を連接したデータ)の順番でハッシュ演算を繰り返し行い、第2のダイジェスト値H(K0 xor ipad) || M)(=H((K0 xor ipad) || M0, M1, M2,…,Mn))
を算出し、
前記ハッシュ演算回路は、前記第2のダイジェスト値H(K0 xor ipad) || M)の算出処理を途中で中断する場合であって、前記算出処理のうちメッセージデータブロック (M0, M1, M2,…,Mi)についてハッシュ演算を行っている場合、前記第2のダイジェスト値の算出処理の途中経過としてH((K0 xor ipad) || M0, M1, M2,…,Mi)を出力し、
前記第2のダイジェスト値の算出処理を再開する場合、前記途中経過H((K0 xor ipad) || M0, M1, M2,…,Mi)が入力され、メッセージデータブロックMi+1,…,Mnが入力され、前記第2のダイジェスト値H((K0 xor ipad) || M0, M1, M2,…,Mn)を算出することを特徴とする
請求項4記載の情報処理装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate


【公開番号】特開2011−254440(P2011−254440A)
【公開日】平成23年12月15日(2011.12.15)
【国際特許分類】
【出願番号】特願2010−128960(P2010−128960)
【出願日】平成22年6月4日(2010.6.4)
【出願人】(000003078)株式会社東芝 (54,554)
【Fターム(参考)】