送信装置及び送信方法
【課題】 受信側の復号処理に影響を与えることなく、送信処理の負荷を軽減できる送信装置を提供する。
【解決手段】 n個のデータブロックのうち(a)1番目のデータブロックについては、イニシャルベクトルと1番目のデータブロックとの排他的論理和に対し暗号演算を行うことにより暗号化し、2番目以降のデータブロックについては、該データブロックとその前のデータブロックを暗号化した結果との排他的論理和に対し前記暗号演算を行うことにより暗号化して、n個の暗号データブロックを生成し、(b)前記n個のデータブロックに基づくヘッダ情報を生成し、(c)前記イニシャルベクトルに対し前記暗号演算に対応する復号演算を行い、その結果と前記ヘッダ情報との排他的論理和を計算することにより、暗号ヘッダブロックを生成し、(d)前記暗号ヘッダブロック、前記イニシャルベクトル及び前記n個の暗号データブロックをこの順に含む暗号パケットを生成する。
【解決手段】 n個のデータブロックのうち(a)1番目のデータブロックについては、イニシャルベクトルと1番目のデータブロックとの排他的論理和に対し暗号演算を行うことにより暗号化し、2番目以降のデータブロックについては、該データブロックとその前のデータブロックを暗号化した結果との排他的論理和に対し前記暗号演算を行うことにより暗号化して、n個の暗号データブロックを生成し、(b)前記n個のデータブロックに基づくヘッダ情報を生成し、(c)前記イニシャルベクトルに対し前記暗号演算に対応する復号演算を行い、その結果と前記ヘッダ情報との排他的論理和を計算することにより、暗号ヘッダブロックを生成し、(d)前記暗号ヘッダブロック、前記イニシャルベクトル及び前記n個の暗号データブロックをこの順に含む暗号パケットを生成する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データをブロック暗号のCBCモードで暗号化して送信する送信装置に関する。
【背景技術】
【0002】
近年暗号通信が一般的に使用されつつあり、ネットワークシステムのさまざまな層で暗号処理が実施されている。非特許文献1乃至3に記載されているように、IPパケットの暗号化を行うIPsec(Security Architecture for Internet Protocol)におけるESP(Encapsulated Security Payload)パケットのペイロードには、トランスポートプロトコルヘッダ及びアプリケーションデータからなるパケットを一定の長さ単位のブロック毎に暗号化して挿入される。
【0003】
このようなブロック暗号に、CBC(Cipher Block Chaining)モードがある。CBCモードでは、最初のブロックを暗号化する場合は、イニシャルベクトル(initial vector)を当該最初のブロックに排他的論理和(XOR)演算によって重ね合わせ、その結果に対し暗号演算を行う。2番目以降のブロックでは、当該ブロックに、前のブロックを暗号化した結果を排他的論理和(XOR)演算によって重ね合わせ、その結果に対し暗号演算を行う。この結果得られる複数の暗号ブロックは、その先頭に上記イニシャルベクトルが付加されて、上記ペイロードに挿入される。このように、CBC暗号化は、送信するブロック列の先頭から順次暗号化する必要がある。
【0004】
一方、受信側では、CBCモードで暗号化されたペイロードは、その先頭のイニシャルベクトルを用いて、上記複数の暗号ブロックを順に復号する。すなわち、1番目の暗号ブロックは、当該暗号ブロックに対し上記暗号演算に対応する復号演算を行い、その結果と上記イニシャルベクトルとの排他的論理和を求めることで復号する。2番目以降の暗号ブロックは、当該暗号ブロック対し上記復号演算を行い、その結果と1つ前の暗号ブロックとの排他的論理和を求めることで復号する。復号の際には、どの暗号ブロックからでも(その1つ前の暗号ブロックがあれば)復号可能である。
【非特許文献1】IETF RFC 2451 : The ESP CBC-Mode Cipher Algorithms
【非特許文献2】IETF RFC 4303 : IP Encapsulating Security Payload (ESP)
【非特許文献3】IETF RFC 4835 : Cryptographic Algorithm Implementation
【発明の開示】
【発明が解決しようとする課題】
【0005】
トランスポートプロトコルヘッダが、それに続くアプリケーションデータが全て揃った時点で生成される場合、従来のCBCモードでは、トランスポートプロトコルヘッダが生成されないと、すなわち、トランスポートプロトコルヘッダ、及びそれに続くアプリケーションデータを含む複数のブロックが全て揃った時点(すなわち、ESPパケット構築の際)でないと暗号化を開始することができなかった。
【0006】
従って、送信すべき上記複数のブロックが揃ってから、これを送信するまでの送信処理において、この複数のブロックの暗号化処理の分、負荷が増大し、遅延時間が生ずるという問題点があった。
【0007】
この送信処理における負荷を軽減し、遅延時間を短縮するためには、上記暗号化処理は、ヘッダ情報を含む暗号化すべき複数のブロックが全て揃う前から、すなわち、ヘッダ情報が生成される前の(ヘッダ情報を含まない)途中のブロックから開始することが望ましい。
【0008】
そこで、本発明は上記問題点に鑑みなされたもので、CBCモード(Cipher Block Mode)において、受信側の復号処理に影響を与えることなく(受信側の復号処理に変更を加えることなく)、送信処理の負荷を軽減できる送信装置及び方法を提供することを目的とする。
【課題を解決するための手段】
【0009】
1番目からn(nは、2以上の整数)番目までのn個のデータブロック(例えば、1番目からn−1番目のデータブロックはアプリケーションデータ、n番目のデータブロックは、(残りのアプリケーションデータがあればそれと)ESPトレイラ)と、当該n個のデータブロックのヘッダ情報とを暗号化して送信する送信装置は、
(a)1番目のデータブロックについては、イニシャルベクトルと1番目のデータブロックとの排他的論理和に対し暗号演算を行うことにより暗号化し、2番目以降のデータブロックについては、該データブロックとその前のデータブロックを暗号化した結果との排他的論理和に対し前記暗号演算を行うことにより暗号化して、n個の暗号データブロックを生成し、
(b)少なくともn−1番目のデータブロックが得られたときに、前記ヘッダ情報を生成し、
(c)前記イニシャルベクトルに対し前記暗号演算に対応する復号演算を行い、その結果と前記ヘッダ情報との排他的論理和を計算することにより、暗号ヘッダブロックを生成し、
(d)前記暗号ヘッダブロック、前記イニシャルベクトル及び前記n個の暗号データブロックをこの順に含む暗号パケットを生成し、
(e)前記暗号パケットを送信する。
【発明の効果】
【0010】
受信側の復号処理に影響を与えることなく(受信側の復号処理に変更を加えることなく)、送信処理の負荷を軽減できる。
【発明を実施するための最良の形態】
【0011】
IPsecはネットワーク層でセキュリティ機能を提供する技術であり、暗号化技術や認証技術を用いて安全な通信を提供する。
【0012】
IPsecの暗号通信ではパケットごとに暗号化を施すことで実現され、平文のパケットと暗号文のパケットの変換はESP(Encapsulating Security Payload)と呼ばれる規定に従って行われる。暗号化処理に使用されるアルゴリズムの選択は通信者間に設定されたセキュリティアソシエーション(SA)の内容から行われる。
【0013】
IPsecのトランスポートモードの場合、パケットの暗号化処理はデータの送信者自身が行う。IPsecのトランスポートモードにおける暗号化処理では、トランスポートプロトコルヘッダ(例えばTCP(Transport Control Protocol)ヘッダ)からアプリケーションデータ、ESPトレイラ(パディング、パディング長、次ヘッダ)までが暗号化される。
【0014】
IPv6の場合は終点オプションの拡張ヘッダも暗号化される。通常、パケットの暗号化処理はパケットの送信処理内で行われる。これは、パケットの暗号化処理に必要なトランスポートヘッダやESPトレイラがパケットの送信処理中に生成されるためである。
【0015】
一般的に暗号化処理の処理負荷は大きいため、IPsecトランスポートモードでESPを実施した場合、パケットの送信処理負荷が大きくなり、パケットの送信処理時間が長くなってしまう。これによりデータ送信者のシステム全体の安定性やハードウェア選定に影響を与える可能性がある。そこで、パケット送信処理時の暗号化処理負荷を軽減するため、パケット送信処理に先だってアプリケーションデータの暗号化を実施する方法が考えられる。
【0016】
たとえば、音声通信のように、マイクデバイスから取得した音声データを複数個まとめて1つのパケットとして送信する場合、音声データを取得する度に暗号化処理を実施することにより、パケット送信処理時に暗号化を行うデータを小さくすることができる。このようにパケット送信処理に先だってアプリケーションデータの暗号化処理を行うことにより、パケット送信処理負荷を下げることができる。
【0017】
しかし、パケットの暗号化にブロック暗号のCBC(Cipher Block Chaining)モードを利用している場合には、パケット送信処理に先だってアプリケーションデータを暗号化することができない。これは、CBCモードでアプリケーションデータの暗号化を行うためにはトランスポートプロトコルヘッダが必要なためである。トランスポートプロトコルヘッダはアプリケーションデータが揃わなければ生成されないため、パケットの送信処理時にトランスポートプロトコルヘッダが生成されるまでアプリケーションデータの暗号化処理は実施できないことになる。
【0018】
このように、従来はIPsecトランスポートモードでブロック暗号のCBCモードによるパケット暗号化を行う際に、データの送信者がアプリケーションデータの暗号化をパケット送信処理に先だって実施することができなかった。
【0019】
本実施形態によれば、トランスポートプロトコルヘッダが生成されなければアプリケーションデータの暗号化を実施できないという制限を回避し、アプリケーションデータの暗号化をパケット送信処理に先だって実施できるようにする。
【0020】
これにより、パケット送信時の処理負荷を低減することができる。
【0021】
以下、本発明の実施形態について図面を参照して説明する。
【0022】
以下の実施形態では図1に示したネットワーク構成を仮定する。送信ノード11はネットワーク13を介して、受信ノード12に対しデータを送信する。データの送信に際して、送信ノード11はトランスポートモードで IPsec ESP を用い、ブロック暗号のCBCモードで送信パケットを暗号化する。パケットの暗号化で使用されるアルゴリズムや鍵情報は送信ノード11と受信ノード12の間で事前に設定されているものとする。
【0023】
図1では送信ノード11と受信ノード12の間にネットワーク13が存在しているが、送信ノード11と受信ノード12が同一ネットワークに接続していても構わない。
【0024】
また、本実施形態では図2に示したような構成のデータに対して送信ノード11がIPsec ESP処理を実施すると仮定する。送信ノード11が送信するデータのうち、データ22、23,及び24がアプリケーションデータにあたる。ヘッダ21はトランスポートプロトコルヘッダに相当する。
【0025】
本実施形態では、アプリケーションデータが、データ22〜24の順にそれぞれ異なる時刻に発生し、データ24が発生した後にアプリケーションデータ全体の送信処理が開始されるものとする。
【0026】
ここで、本実施形態について説明する前に、図3を参照して、従来方式によるデータの送信処理手順を表す。従来方式では、アプリケーションデータが発生すると、ステップS31でアプリケーションデータを取得し、ステップS32でアプリケーションデータをアプリケーションバッファに記憶する。つまり、このアプリケーションバッファ内にデータ22〜24がこの順に格納されていく。
【0027】
ステップS33では、受信ノード12へ送信すべきすべてのデータがアプリケーションバッファ内に揃ったかを判定する。すなわち、データ22〜24まですべてがバッファに格納されているかを判定する。ステップS33の判定の結果、必要なデータが揃っていない場合、処理が終了する。ステップS33の判定の結果、必要なデータが揃っている場合は、ステップS34においてアプリケーションバッファの内容を用いてトランスポートプロトコルヘッダを生成する。この時点で図2に示したデータが完成する。
【0028】
次に、ステップS35でIPsec ESPの暗号化処理を行うための前処理を実施する。具体的にはパケットの暗号化に必要なIV(イニシャルベクトルinitial vector)の生成やESPトレイラ(パディング、パディング長、次ヘッダ)の生成を行う。次に、ステップS36でトランスポートプロトコルヘッダおよびアプリケーションデータ、ESPトレイラの暗号化処理を行う。IPv6の場合、宛先オプションの拡張ヘッダも暗号化の対象となる。暗号化処理が完了すると、ステップS37でパケットの構築を行い、パケットの送信を実施する。ステップS37のパケットの構築では、ESPヘッダやIPヘッダの生成などが行われる。
【0029】
従来方式の送信処理手順では、ステップS36でアプリケーションデータ全体の暗号化が行われる。アプリケーションデータが大きくなればなるほど、ステップS36の処理時間が長くなる。これにより、アプリケーションデータがすべて揃ってから実際にパケットが送信されるまでの遅延が大きくなってしまう。
【0030】
従来方式においてデータ22〜24を取得する時点で暗号化すれば、アプリケーションデータが揃ってから実際にパケットが送信されるまでの時間を短縮することができる。しかし、データの暗号化にブロック暗号のCBCモードを利用している場合は、個々のデータを取得した時点でそれぞれのデータを暗号化することできない。その理由は、アプリケーションデータの先頭ブロック、つまりデータ22の先頭のブロックを暗号化するためにトランスポートプロトコルヘッダが必要になるが、データ22を取得した時点ではトランスポートプロトコルヘッダが生成されていないためである。
【0031】
図4は、ブロック暗号Ek( )を用いた従来のCBCモードの暗号化演算方法を説明するためのものである。mnは、暗号化を行うデータを規定の長さで区切ったときのn番目のブロックを示し、CnはmnをCBCモードで暗号化演算した結果の暗号文を示す。
【0032】
図4に示すように、CBCモードでは、n−1番目の暗号化演算の結果とn番目のブロックの排他的論理和演算(XOR演算)を行い、その結果に対し予め定められたアルゴリズムの暗号演算(Ek( ))を施すことで、n番目のブロックの暗号文が得られる。1番目のブロックを暗号化するためには、イニシャルベクトルC0を使用する。イニシャルベクトルは生成された乱数または直前に送信したIPsecESPパケットの最後の暗号ブロックである。イニシャルベクトルの生成はCBCモードの演算に先だって行われる。ブロックに区切る長さとトランスポートプロトコルヘッダの長さが等しい場合、図2のデータでは、トランスポートプロトコルヘッダ全体がC1になり、データ22の先頭のブロックがC2になる。このため、データ22の暗号化を行うためにはトランスポートプロトコルヘッダが必要となる。しかし、トランスポートプロトコルヘッダは、図2においてデータ22〜24までのアプリケーションデータが全て揃わないと生成できない。従って、データ22を取得した段階では、トランスポートプロトコルヘッダがまだ生成されていないがため、図4に示した従来のCBCモードの暗号化演算方法では、データ22を取得した段階で、データ22の暗号化を行うことはできない。
【0033】
そこで、本実施形態では、CBCモードの暗号化演算方法を図5に示すように変更する。従来はパケットの先頭にある1番目のブロック(トランスポートプロトコルヘッダ)の暗号化演算に使用していたイニシャルベクトルC0を、本実施形態では、パケットの先頭から2番目のブロックであり、しかも最初に取得されるブロックの暗号化演算に使用し、1番目のブロックがまだ生成されていない状態で2番目の暗号化演算を実施する。これにより、トランスポートプロトコルヘッダが生成されていない時点で、図2のデータ22に対し暗号化演算を実施することができ、データ22、データ23、そしてデータ24それぞれのデータが取得された時点で個々のデータの暗号化演算を実施することができる。
【0034】
データ24が取得され、1番目のブロックとなるトランスポートプロトコルヘッダ(例えば、図5ではm1)が生成されたとき、イニシャルベクトルC0に対し、ブロック暗号演算Ek( )に対応する復号演算(Ek−1( ))を行い、その結果と先頭のブロック、すなわち、トランスポートプロトコルヘッダ (m1)の排他的論理和演算(XOR演算)を実施する。これにより得られたC0´が従来のCBCモード演算方式で用いられるイニシャルベクトルに相当する値になる。
【0035】
送信時は、C0´、C0、2番目以降のブロックの暗号結果である暗号ブロックC2、C3、…、Cnの順で送信される。
【0036】
次に、図6及び図7を参照して、図5に示したCBCモードの暗号化演算方式を適用した図1の送信ノード(送信装置)11の構成及び送信処理動作について説明する。
【0037】
図6は、送信ノード11の構成例を示したものである。
【0038】
アプリケーションデータ取得部101は、上位層で発生したアプリケーションデータを取得する。
【0039】
ヘッダ情報抽出部102は、アプリケーションデータ取得部101で取得されたアプリケーションデータからトランスポートプロトコルヘッダを生成するために必要な情報を抽出し、ヘッダ情報バッファ103へ格納する。トランスポートプロトコルヘッダを生成するために必要な情報には、アプリケーションデータのチェックサム値やアプリケーションデータのデータ長などの情報が含まれる。ヘッダ情報抽出部102では、このような値を計算するために必要な情報を、アプリケーションデータ取得部101でアプリケーションンデータが取得される度に、当該アプリケーションデータから抽出する。
【0040】
先頭ブロック判定手段104は、アプリケーションデータ取得部101が取得したアプリケーションデータが送信すべきデータの先頭部分にあたるかどうかの判定を行う。
【0041】
イニシャルベクトル生成部105は乱数を発生させるなどして暗号化演算に必要なイニシャルベクトル(図5のC0)の生成を行い、生成したイニシャルベクトルをイニシャルベクトルバッファ106へ格納する。
【0042】
暗号化部107は、図5に示した排他的論理和演算と暗号化演算を行い、予め定められた一定の長さ(α)のブロック単位でCBCモードの暗号化演算処理を行う。暗号化演算処理の結果はアプリケーションバッファ108へ格納する。暗号化部107はCBCモードの暗号化処理を行うために、イニシャルベクトルC0や、暗号化対象のブロックの直前のブロックの暗号化処理結果を取得するためにイニシャルベクトルバッファ106やアプリケーションバッファ108にアクセスする。
【0043】
パケット送信判定部109は、受信ノード12へ送信すべきデータがすべて揃ったかどうかを判定する。受信ノード12へ送信すべきデータの長さが固定長で規定されている場合は、アプリケーションバッファ108を参照するなどして取得されているアプリケーションデータの長さが規定の長さに到達しているか否かで、受信ノード12へ送信すべきデータがすべて揃ったかどうかの判定を行うことができる。
【0044】
ヘッダ生成部110は、パケット送信判定部109で、受信ノード12へ送信すべきデータがすべて揃ったと判定されたときに、ヘッダ情報バッファ103の情報を利用して、トランスポートプロトコルヘッダを生成する。生成されたトランスポートプロトコルヘッダはヘッダバッファ711に格納する。
【0045】
暗号化後処理部113は、まず、ESPトレイラ(パディング、パディング長、次ヘッダ)を生成する。なお、ESPトレイラはパディング長が「0」の場合でも必要である。このESPトレイラは、(まだ暗号化されていないアプリケーションデータがあれば、それと合わせて)暗号処理単位のブロック長αの最後のブロック(図5のブロックmn)として、図5のn−1番目の暗号処理行い、最後の暗号ブロック(図5では、Cn)を生成する。
【0046】
また、暗号化後処理部113は、トランスポートプロトコルヘッダの長さが、暗号処理単位のブロック長αに一致する場合には、当該トランスポートプロトコルヘッダとイニシャルベクトル(図5のC0)とからCBCモードにおける本来のイニシャルベクトルになるべき値(図5のC0´)を図5に示した方法で計算する。
【0047】
すなわち、イニシャルベクトルC0に対し、ブロック暗号演算Ek( )に対応する復号演算(Ek−1( ))を行い、その結果とトランスポートプロトコルヘッダの排他的論理和演算(XOR演算)を実施することにより、C0´を求める。
【0048】
この結果、図8に示すように、トランスポートプロトコルヘッダ、アプリケーションデータ、及びESPトレイラ(図8(a)参照)に対し、図5に示したCBCモードの暗号化演算処理を用いることにより、図8(b)に示すような暗号ブロック列C0´、C0、C1、C2、…Cnが得られる。
【0049】
また、トランスポートプロトコルヘッダの長さが、暗号処理単位のブロック長αの整数倍である場合には、暗号化後処理部113は、当該トランスポートプロトコルヘッダの長さα毎の複数のブロックに分割し、そのうちの最後のブロックから順に、図5のn番目の暗号処理を繰り返す。
【0050】
図9には、トランスポートプロトコルヘッダの長さが、暗号処理単位のブロック長αの2倍である場合を示している。トランスポートプロトコルヘッダの長さがαの2倍である場合、トランスポートプロトコルヘッダを長さαの2つのブロック(m1−1、m1−2)に分割する。まず、後半のブロックm1−2の暗号化を行う(図9のn番目の暗号処理)。このn番目の暗号処理では、イニシャルベクトルC0に対し、ブロック暗号演算Ek( )に対応する復号演算(Ek−1( ))を行い、その結果と後半のブロックm1−2との排他的論理和演算(XOR演算)を実施することにより、C0´を求める。
【0051】
次に、前半のブロックm1−1の暗号化を行う(図9のn+1番目の暗号処理)。このn+1番目の暗号処理では、上記n番目の暗号処理で求めたC0´に対し、ブロック暗号演算Ek( )に対応する復号演算(Ek−1( ))を行い、その結果と前半のブロックm1−1との排他的論理和演算(XOR演算)を実施することにより、C0´´を求める。このC0´´がCBCモードにおける本来のイニシャルベクトルになるべき値である。
【0052】
この結果、図8に示すように、トランスポートプロトコルヘッダ、アプリケーションデータ、及びESPトレイラ(図8(a)参照)に対し、図9に示したCBCモードの暗号化演算処理を用いることにより、図8(c)に示すような暗号ブロック列C0´´、C0´、C0、C1、C2、…Cnが得られる。
【0053】
トランスポートプロトコルヘッダの長さが、暗号処理単位のブロック長αに一致する場合も、αの整数倍である場合も、得られる暗号ブロック列の先頭(図8(b)のC0´、図8(c)のC0´´)は、受信ノード12における復号処理では従来のCBCモードにおけるイニシャルベクトルとして用いられる。
【0054】
以下、説明の簡単のため、トランスポートプロトコルヘッダの長さがαであり、暗号ブロック列の先頭が図8(b)のC0´の場合を例にとり説明する。
【0055】
パケット構築部114は、暗号化部107及び暗号化後処理部113で求めた暗号ブロックC0´、イニシャルベクトルC0、アプリケーションデータ及びESPトレイラの暗号化処理結果の暗号ブロック列C1、C2、…Cn、をこの順に並べて、IPsecのESPパケットを構築する。その際、必要ならばIPv6の宛先オプションの拡張ヘッダの生成などを行う。例えば、図8(d)に示すように、SPI、シーケンス番号、認証データなどを生成する。
【0056】
なお、ここで、SPI(Security parameter Index)は、宛先IPアドレスとセキュリティプロトコル(ESP)とを組み合わせることにより、そのデータグラムに対するセキュリティアソシエーションを一意に識別する32ビットの値である。シーケンス番号はパケットにつける通し番号、次ヘッダは上位層プロトコルの識別子、認証データは、ESPパケットから認証データを抜いたものから計算された値である。また、パディングは必要に応じて付加され、パディング長は、付加されたパディングの長さを示す。
【0057】
パケット構築部114は、図8(e)に示すように、図8(d)のESPパケットに、さらにIPヘッダを付加してIPパケットを生成する。
【0058】
パケット構築部114が構築したパケットはパケット用バッファ115に格納される。
【0059】
パケット送信部116は、パケット用バッファ7115に格納されたパケットを受信ノード12に対して送信する。
【0060】
図7は、図6に示した送信ノード11の送信処理動作を説明するためのフローチャートである。なお、図7に示す送信処理動作は、アプリケーションデータ取得部101が上位層からアプリケーションデータを取得する度に実行される。
【0061】
まず、トランスポートプロトコルヘッダの長さがブロック暗号処理単位のブロック長αに等しい場合を例により説明する。
【0062】
アプリケーションデータ取得部101が、上位層で生成されたアプリケーションデータを取得すると(ステップS1)、ヘッダ情報抽出部102が当該アプリケーションデータからトランスポートプロトコルヘッダを生成するために必要な情報(例えば、チェックサムやデータ長など)を抽出し、これをヘッダ情報バッファ103に記憶する(ステップS2)。
【0063】
次に、先頭ブロック判定部104は、アプリケーションバッファ108に記憶されている、既に取得されているが暗号化されていない暗号処理待ち状態のアプリケーションデータ、及び、既に取得され暗号化されて送信待ち状態のアプリケーションデータの暗号データの量から、ステップS101でアプリケーションデータ取得部101で取得されたアプリケーションデータが、送信すべきデータの先頭部分にあたるかどうかの判定を行う(ステップS3)。例えば、上記暗号処理待ち及び上記送信待ち状態の暗号データが存在しないとき(空のとき)、当該取得されたアプリケーションデータが、送信すべきデータの先頭部分にあたると判定する。
【0064】
当該取得されたアプリケーションデータが、送信すべきデータの先頭部分にあたるとき、ステップS3からステップS4へ進む。
【0065】
ステップS4では、イニシャルベクトル生成部105が、イニシャルベクトル(図5のC0)を生成し、生成したイニシャルベクトルをイニシャルベクトルバッファ106へ格納する。その後、ステップS5へ進み、最初の暗号化を行う。すなわち、図5の1番目の暗号処理を行う。ここでは、ステップS1で取得したアプリケーションデータの先頭から予め定められた長さαのデータをブロックm2とする。そして、このブロックm2と、イニシャルベクトルバッファ106に記憶されたイニシャルベクトルC0との排他的論理和演算(XOR演算)を行い、この結果に対し暗号演算(Ek( ))を施すことで、ブロックm2の暗号ブロックC2が得られる。得られた暗号ブロックC2は、アプリケーションバッファ108に記憶される(ステップS6)。また、ステップS1で取得したアプリケーションデータがαより長いとき、その残りの部分は、次に発生するアプリケーションデータと合わせて暗号化する。そのため、当該残りの部分は上記暗号処理待ち状態のアプリケーションデータとしてアプリケーションバッファ108に記憶しておく。
【0066】
一方、ステップS3において、アプリケーションバッファ108に上記暗号処理待ち状態または上記送信待ち状態のアプリケーションデータまたはその暗号データ(暗号ブロック)が存在する場合には、ステップS3からステップS5へ進む。
【0067】
この場合、ステップS5では、図5の2番目から(n−2)番目のいずれかの暗号処理を行う。例えば、2番目の暗号処理の場合、アプリケーションバッファ108に記憶されている暗号処理待ちのアプリケーションデータに、データ長がαとなるように、今回取得したアプリケーションデータの先頭から追加し、ブロックm3を得る。このとき今回取得したアプリケーションデータの余った部分は、上記同様アプリケーションバッファ108に記憶する。このブロックm3と、アプリケーションバッファ108に記憶されている1つ前の暗号処理で得られた暗号ブロック、すなわち暗号ブロックC2との排他的論理和演算(XOR演算)を行い、この結果に対し暗号演算(Ek( ))を施すことで、ブロックm3の暗号ブロックC3が得られる。得られた暗号ブロックC3は、アプリケーションバッファ108に記憶される(ステップS6)。
【0068】
3番目以降n−2番目までの暗号処理も上記同様である。
【0069】
次に、ステップS7に進み、パケット送信判定部109が、アプリケーションバッファ108に格納されている送信待ち状態の暗号ブロックのデータ量が、受信ノード12へ送信すべきデータ長を満たす場合(例えば、暗号ブロックC2〜Cn−1がアプリケーションバッファ108に記憶されているとき)、ステップS7からステップS8へ進み、そうでない場合、処理を終了する。
【0070】
ステップS8では、ヘッダ生成部110が、ヘッダ情報バッファ103に記憶されている情報を利用して、トランスポートプロトコルヘッダを生成する。生成されたトランスポートプロトコルヘッダはヘッダバッファ711に格納される。
【0071】
次に、ステップS9へ進み、暗号化後処理部113は、まず、ESPトレイラ(パディング、パディング長、次ヘッダ)を生成する。例えば、アプリケーションバッファ108に上記暗号処理待ちのアプリケーションデータが記憶されている場合には、この暗号処理待ちのアプリケーションデータに、データ長がαとなるように、パディング、パディング長、及び次ヘッダを追加して、ブロックmnを得る。そして、図5のn−1番目の暗号処理を行う。すなわち、このブロックmnと、アプリケーションバッファ108に記憶されている1つ前の暗号処理で得られた暗号ブロック、すなわち、暗号ブロックCn−1との排他的論理和演算(XOR演算)を行い、この結果に対し暗号演算(Ek( ))を施すことで、ブロックmnの暗号ブロックCnが得られる。得られた暗号ブロックCnは、アプリケーションバッファ108に記憶する。
【0072】
次に、図5のn番目の暗号処理を行う。すなわち、ヘッダバッファ711に記憶されたトランスポートプロトコルヘッダ(これをm1とする)と、ステップS4でイニシャルベクトルバッファ106に記憶されたイニシャルベクトル(C0)とからCBCモードにおける本来のイニシャルベクトルになるべき値(C0´)を図5に示した方法で計算する。
【0073】
すなわち、イニシャルベクトルC0に対し、ブロック暗号演算Ek( )に対応する復号演算(Ek−1( ))を行い、その結果とトランスポートプロトコルヘッダの排他的論理和演算(XOR演算)を実施することにより、暗号ブロックC0´を求める。
【0074】
次に、ステップS10において、パケット構築部114は、暗号化部107及び暗号化後処理部113で求めた値暗号ブロックC0´、イニシャルベクトルC0、アプリケーションデータ及びESPトレイラの暗号処理結果の暗号ブロック列C1、C2、…Cn、をこの順に並べて、図8(d)のESPパケットを生成する。その際、例えば、図8(d)に示すように、SPI、シーケンス番号、認証データなどを生成する。また、パケット構築部114は、図8(d)のESPパケットに、さらにIPヘッダを付加して、図8(e)に示すようなIPパケットを生成する。
【0075】
以上のようにして生成されたIPパケットはパケット送信部116から送信される。
【0076】
次に、トランスポートプロトコルヘッダの長さがブロック暗号処理単位のブロック長αの整数倍である場合を例により説明する。この場合、図7のステップS9の処理が、上述のトランスポートプロトコルヘッダの長さがαに等しい場合と異なる。
【0077】
ステップS8で生成されるトランスポートプロトコルヘッダの長さがαの2倍である場合を例にとり、図9を参照して説明する。なお、図9において、図5と同一部分は同一符号を付している。
【0078】
この場合、まず、ステップS9において、暗号化後処理部113は、トランスポートプロトコルヘッダを長さαの2つのブロック(m1−1、m1−2)に分割する。まず、後半のブロックm1−2の暗号化を行う(図9のn番目の暗号処理)。このn番目の暗号処理では、イニシャルベクトルC0に対し、ブロック暗号演算Ek( )に対応する復号演算(Ek−1( ))を行い、その結果と前半のブロックm1−1との排他的論理和演算(XOR演算)を実施することにより、C0´を求める。
【0079】
次に、前半のブロックm1−1の暗号化を行う(図9のn+1番目の暗号処理)。このn+1番目の暗号処理では、上記n番目の暗号処理で求めたC0´に対し、ブロック暗号演算Ek( )に対応する復号演算(Ek−1( ))を行い、その結果と前半のブロックm1−2との排他的論理和演算(XOR演算)を実施することにより、C0´´を求める。このC0´´がCBCモードにおける本来のイニシャルベクトルになるべき値である。
【0080】
この結果、図8に示すように、トランスポートプロトコルヘッダ及びアプリケーションデータ(図2、図8(a)参照)に対し、図9に示したCBCモードの暗号化演算方式を用いることにより、図8(c)に示すような暗号ブロック列C0´´、C0´、C0、C1、C2、…Cnが得られる。
【0081】
ステップS10では、パケット構築部114は、暗号化部107及び暗号化後処理部113で求めた暗号ブロックC0´´、C0´、イニシャルベクトルC0、アプリケーションデータ及びESPトレイラの暗号処理結果の暗号ブロックC1、C2、…Cn、をこの順に並べて、さらにIPヘッダを付加して、図8(e)に示すようなIPパケットを生成する。
【0082】
以上のようにして生成されたIPパケットはパケット送信部116から送信される。
【0083】
受信ノード12では、上述のようにして送信ノード11から送信されたIPパケットを受信すると、その中のESPパケットのペイロードから図8(b)または図8(c)に示すような暗号ブロック列を取り出す。この暗号ブロック列の先頭(例えば、C0´またはC0´´)は、従来のCBCモードにおけるイニシャルベクトルと同じ扱いをすればよく、この暗号ブロック列は、従来のCBCモードにおける復号処理と全く同じ手順で復号することができる。
【0084】
すなわち、図5に示すように暗号化した結果得られる暗号ブロック列C0´、C0、C1、C2、…Cnに対しては、図10に示すように、まず、C0´をイニシャルベクトルとみなし、2番目の暗号ブロックC0に対し、ブロック暗号演算Ek( )に対応する復号演算(Ek−1( ))を行い、その結果とC0´との排他的論理和演算(XOR演算)を実施することにより、最初のブロックm1が得られる。次に、3番目の暗号データC2に対し復号演算(Ek−1( ))を行い、その結果と2番目の暗号ブロックC0との排他的論理和演算(XOR演算)を実施することにより、2番目のブロックm2が得られる。以下同様に復号して、m1〜mnまでのブロックを復号する。
【0085】
また、図9に示すように暗号化した結果得られる暗号ブロック列C0´´、C0´、C0、C1、C2、…Cnに対しては、図11に示すように、まず、C0´´をイニシャルベクトルとみなし、2番目の暗号ブロックC0´に対し、ブロック暗号演算Ek( )に対応する復号演算(Ek−1( ))を行い、その結果とC0´´との排他的論理和演算(XOR演算)を実施することにより、最初のブロックm1−1が得られる。次に、3番目の暗号ブロックC0に対し復号演算(Ek−1( ))を行い、その結果と2番目の暗号ブロックC0´との排他的論理和演算(XOR演算)を実施することにより、2番目のブロックm1−2が得られる。以下同様に復号して、m2〜m3までのブロックも復号する。
【0086】
この復号処理手順は、従来のCBCモードにおける復号処理手順と全く同じであり、受信側の構成及び処理動作を変更する必要がない。
【0087】
以上説明したように、上記実施形態によれば、1番目からN(Nは、2以上の整数)番目までの連続する複数の平文データブロック(例えば、1番目のデータブロックはヘッダ情報を含み、2番目からn−1番目のデータブロックはアプリケーションデータを含み、最後のn番目のデータブロックは、(残りのアプリケーションデータがあればそれと)ESPトレイラを含む)を暗号化して送信する際に、最初に得られた途中の(例えば2番目の)平文データブロックについては、該平文データブロックとイニシャルベクトルC0との排他的論理和に対し暗号演算を行うことにより暗号化し、3番目以降の平文データブロックは、該平文データブロックとその前の平文データブロックを暗号化した結果との排他的論理和に対し暗号演算を行うことにより暗号化し、2番目からN番目の暗号データブロックを生成する。
【0088】
一方、1番目の平文データブロックは、例えば送信すべきアプリケーションデータがそろったときに得られるヘッダ情報であり、この1番目の平文データブロックについては、上記イニシャルベクトルC0に対し上記暗号演算に対応する復号演算を行い、その結果と1番目の平文データブロックとの排他的論理和を計算することにより、1番目の暗号データブロックを生成する。
【0089】
そして、1番目の暗号データブロック、イニシャルベクトルC0、及び2番目からN番目の暗号データブロックをこの順に含むパケットを生成して、送信する。
【0090】
このような構成により、トランスポートプロトコルヘッダ及びアプリケーションデータをブロック暗号CBCモードで暗号化して送信する処理において、復号処理に変更を加えることなく、アプリケーションデータの暗号化処理をトランスポートプロトコルヘッダ生成前の途中のブロックから実施することが可能となり、送信遅延を短縮することができる。
【0091】
なお、本発明の実施の形態に記載した本発明の手法は、コンピュータに実行させることのできるプログラムとして、磁気ディスク(フレキシブルディスク、ハードディスクなど)、光ディスク(CD−ROM、DVDなど)、半導体メモリなどの記録媒体に格納して頒布することもできる。
【0092】
例えば、図6に示した各構成部の機能は、コンピュータに搭載されたプロセッサにプログラムを実行させることにより実現することができる。
【0093】
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【図面の簡単な説明】
【0094】
【図1】本実施形態に係るネットワークの構成例を示した図。
【図2】CBCモードで暗号化されるデータの構成例を示した図。
【図3】従来のブロック暗号CBCモードの暗号化手順を用いたデータの送信処理を説明するためのフローチャート。
【図4】従来のブロック暗号CBCモードの暗号化手順を説明するための図。
【図5】本実施形態に係る暗号化手順(トランスポートプロトコルヘッダ長とブロック長とが等しい場合)を説明するための図。
【図6】図1の送信ノード(送信装置)の構成例を示した図。
【図7】図6の送信ノードにおけるデータの送信処理を説明するためのフローチャート。
【図8】図7の送信処理により送信ノードで生成される暗号ブロック列、この暗号ブロック列を含むESP(Encapsulating Security Payload)パケットの構成例を示した図。
【図9】本実施形態に係る他の暗号化手順(トランスポートプロトコルヘッダ長がブロック長より長い場合)を説明するための図。
【図10】図5の暗号化手順に対応する復号手順を説明するための図。
【図11】図9の暗号化手順に対応する復号手順を説明するための図。
【符号の説明】
【0095】
11…送信ノード
12…受信ノード
13…ネットワーク
101…アプリケーションデータ取得部
102…ヘッダ情報抽出部
103…ヘッダ情報バッファ
104…先頭ブロック判定部
105…イニシャルベクトル生成部
106…イニシャルベクトルバッファ
107…暗号化部
108…アプリケーションバッファ
109…パケット送信判定部
110…ヘッダ生成部
111…ヘッダバッファ
113…暗号化後処理部
114…パケット構築部
115…パケット用バッファ
116…パケット送信部
【技術分野】
【0001】
本発明は、データをブロック暗号のCBCモードで暗号化して送信する送信装置に関する。
【背景技術】
【0002】
近年暗号通信が一般的に使用されつつあり、ネットワークシステムのさまざまな層で暗号処理が実施されている。非特許文献1乃至3に記載されているように、IPパケットの暗号化を行うIPsec(Security Architecture for Internet Protocol)におけるESP(Encapsulated Security Payload)パケットのペイロードには、トランスポートプロトコルヘッダ及びアプリケーションデータからなるパケットを一定の長さ単位のブロック毎に暗号化して挿入される。
【0003】
このようなブロック暗号に、CBC(Cipher Block Chaining)モードがある。CBCモードでは、最初のブロックを暗号化する場合は、イニシャルベクトル(initial vector)を当該最初のブロックに排他的論理和(XOR)演算によって重ね合わせ、その結果に対し暗号演算を行う。2番目以降のブロックでは、当該ブロックに、前のブロックを暗号化した結果を排他的論理和(XOR)演算によって重ね合わせ、その結果に対し暗号演算を行う。この結果得られる複数の暗号ブロックは、その先頭に上記イニシャルベクトルが付加されて、上記ペイロードに挿入される。このように、CBC暗号化は、送信するブロック列の先頭から順次暗号化する必要がある。
【0004】
一方、受信側では、CBCモードで暗号化されたペイロードは、その先頭のイニシャルベクトルを用いて、上記複数の暗号ブロックを順に復号する。すなわち、1番目の暗号ブロックは、当該暗号ブロックに対し上記暗号演算に対応する復号演算を行い、その結果と上記イニシャルベクトルとの排他的論理和を求めることで復号する。2番目以降の暗号ブロックは、当該暗号ブロック対し上記復号演算を行い、その結果と1つ前の暗号ブロックとの排他的論理和を求めることで復号する。復号の際には、どの暗号ブロックからでも(その1つ前の暗号ブロックがあれば)復号可能である。
【非特許文献1】IETF RFC 2451 : The ESP CBC-Mode Cipher Algorithms
【非特許文献2】IETF RFC 4303 : IP Encapsulating Security Payload (ESP)
【非特許文献3】IETF RFC 4835 : Cryptographic Algorithm Implementation
【発明の開示】
【発明が解決しようとする課題】
【0005】
トランスポートプロトコルヘッダが、それに続くアプリケーションデータが全て揃った時点で生成される場合、従来のCBCモードでは、トランスポートプロトコルヘッダが生成されないと、すなわち、トランスポートプロトコルヘッダ、及びそれに続くアプリケーションデータを含む複数のブロックが全て揃った時点(すなわち、ESPパケット構築の際)でないと暗号化を開始することができなかった。
【0006】
従って、送信すべき上記複数のブロックが揃ってから、これを送信するまでの送信処理において、この複数のブロックの暗号化処理の分、負荷が増大し、遅延時間が生ずるという問題点があった。
【0007】
この送信処理における負荷を軽減し、遅延時間を短縮するためには、上記暗号化処理は、ヘッダ情報を含む暗号化すべき複数のブロックが全て揃う前から、すなわち、ヘッダ情報が生成される前の(ヘッダ情報を含まない)途中のブロックから開始することが望ましい。
【0008】
そこで、本発明は上記問題点に鑑みなされたもので、CBCモード(Cipher Block Mode)において、受信側の復号処理に影響を与えることなく(受信側の復号処理に変更を加えることなく)、送信処理の負荷を軽減できる送信装置及び方法を提供することを目的とする。
【課題を解決するための手段】
【0009】
1番目からn(nは、2以上の整数)番目までのn個のデータブロック(例えば、1番目からn−1番目のデータブロックはアプリケーションデータ、n番目のデータブロックは、(残りのアプリケーションデータがあればそれと)ESPトレイラ)と、当該n個のデータブロックのヘッダ情報とを暗号化して送信する送信装置は、
(a)1番目のデータブロックについては、イニシャルベクトルと1番目のデータブロックとの排他的論理和に対し暗号演算を行うことにより暗号化し、2番目以降のデータブロックについては、該データブロックとその前のデータブロックを暗号化した結果との排他的論理和に対し前記暗号演算を行うことにより暗号化して、n個の暗号データブロックを生成し、
(b)少なくともn−1番目のデータブロックが得られたときに、前記ヘッダ情報を生成し、
(c)前記イニシャルベクトルに対し前記暗号演算に対応する復号演算を行い、その結果と前記ヘッダ情報との排他的論理和を計算することにより、暗号ヘッダブロックを生成し、
(d)前記暗号ヘッダブロック、前記イニシャルベクトル及び前記n個の暗号データブロックをこの順に含む暗号パケットを生成し、
(e)前記暗号パケットを送信する。
【発明の効果】
【0010】
受信側の復号処理に影響を与えることなく(受信側の復号処理に変更を加えることなく)、送信処理の負荷を軽減できる。
【発明を実施するための最良の形態】
【0011】
IPsecはネットワーク層でセキュリティ機能を提供する技術であり、暗号化技術や認証技術を用いて安全な通信を提供する。
【0012】
IPsecの暗号通信ではパケットごとに暗号化を施すことで実現され、平文のパケットと暗号文のパケットの変換はESP(Encapsulating Security Payload)と呼ばれる規定に従って行われる。暗号化処理に使用されるアルゴリズムの選択は通信者間に設定されたセキュリティアソシエーション(SA)の内容から行われる。
【0013】
IPsecのトランスポートモードの場合、パケットの暗号化処理はデータの送信者自身が行う。IPsecのトランスポートモードにおける暗号化処理では、トランスポートプロトコルヘッダ(例えばTCP(Transport Control Protocol)ヘッダ)からアプリケーションデータ、ESPトレイラ(パディング、パディング長、次ヘッダ)までが暗号化される。
【0014】
IPv6の場合は終点オプションの拡張ヘッダも暗号化される。通常、パケットの暗号化処理はパケットの送信処理内で行われる。これは、パケットの暗号化処理に必要なトランスポートヘッダやESPトレイラがパケットの送信処理中に生成されるためである。
【0015】
一般的に暗号化処理の処理負荷は大きいため、IPsecトランスポートモードでESPを実施した場合、パケットの送信処理負荷が大きくなり、パケットの送信処理時間が長くなってしまう。これによりデータ送信者のシステム全体の安定性やハードウェア選定に影響を与える可能性がある。そこで、パケット送信処理時の暗号化処理負荷を軽減するため、パケット送信処理に先だってアプリケーションデータの暗号化を実施する方法が考えられる。
【0016】
たとえば、音声通信のように、マイクデバイスから取得した音声データを複数個まとめて1つのパケットとして送信する場合、音声データを取得する度に暗号化処理を実施することにより、パケット送信処理時に暗号化を行うデータを小さくすることができる。このようにパケット送信処理に先だってアプリケーションデータの暗号化処理を行うことにより、パケット送信処理負荷を下げることができる。
【0017】
しかし、パケットの暗号化にブロック暗号のCBC(Cipher Block Chaining)モードを利用している場合には、パケット送信処理に先だってアプリケーションデータを暗号化することができない。これは、CBCモードでアプリケーションデータの暗号化を行うためにはトランスポートプロトコルヘッダが必要なためである。トランスポートプロトコルヘッダはアプリケーションデータが揃わなければ生成されないため、パケットの送信処理時にトランスポートプロトコルヘッダが生成されるまでアプリケーションデータの暗号化処理は実施できないことになる。
【0018】
このように、従来はIPsecトランスポートモードでブロック暗号のCBCモードによるパケット暗号化を行う際に、データの送信者がアプリケーションデータの暗号化をパケット送信処理に先だって実施することができなかった。
【0019】
本実施形態によれば、トランスポートプロトコルヘッダが生成されなければアプリケーションデータの暗号化を実施できないという制限を回避し、アプリケーションデータの暗号化をパケット送信処理に先だって実施できるようにする。
【0020】
これにより、パケット送信時の処理負荷を低減することができる。
【0021】
以下、本発明の実施形態について図面を参照して説明する。
【0022】
以下の実施形態では図1に示したネットワーク構成を仮定する。送信ノード11はネットワーク13を介して、受信ノード12に対しデータを送信する。データの送信に際して、送信ノード11はトランスポートモードで IPsec ESP を用い、ブロック暗号のCBCモードで送信パケットを暗号化する。パケットの暗号化で使用されるアルゴリズムや鍵情報は送信ノード11と受信ノード12の間で事前に設定されているものとする。
【0023】
図1では送信ノード11と受信ノード12の間にネットワーク13が存在しているが、送信ノード11と受信ノード12が同一ネットワークに接続していても構わない。
【0024】
また、本実施形態では図2に示したような構成のデータに対して送信ノード11がIPsec ESP処理を実施すると仮定する。送信ノード11が送信するデータのうち、データ22、23,及び24がアプリケーションデータにあたる。ヘッダ21はトランスポートプロトコルヘッダに相当する。
【0025】
本実施形態では、アプリケーションデータが、データ22〜24の順にそれぞれ異なる時刻に発生し、データ24が発生した後にアプリケーションデータ全体の送信処理が開始されるものとする。
【0026】
ここで、本実施形態について説明する前に、図3を参照して、従来方式によるデータの送信処理手順を表す。従来方式では、アプリケーションデータが発生すると、ステップS31でアプリケーションデータを取得し、ステップS32でアプリケーションデータをアプリケーションバッファに記憶する。つまり、このアプリケーションバッファ内にデータ22〜24がこの順に格納されていく。
【0027】
ステップS33では、受信ノード12へ送信すべきすべてのデータがアプリケーションバッファ内に揃ったかを判定する。すなわち、データ22〜24まですべてがバッファに格納されているかを判定する。ステップS33の判定の結果、必要なデータが揃っていない場合、処理が終了する。ステップS33の判定の結果、必要なデータが揃っている場合は、ステップS34においてアプリケーションバッファの内容を用いてトランスポートプロトコルヘッダを生成する。この時点で図2に示したデータが完成する。
【0028】
次に、ステップS35でIPsec ESPの暗号化処理を行うための前処理を実施する。具体的にはパケットの暗号化に必要なIV(イニシャルベクトルinitial vector)の生成やESPトレイラ(パディング、パディング長、次ヘッダ)の生成を行う。次に、ステップS36でトランスポートプロトコルヘッダおよびアプリケーションデータ、ESPトレイラの暗号化処理を行う。IPv6の場合、宛先オプションの拡張ヘッダも暗号化の対象となる。暗号化処理が完了すると、ステップS37でパケットの構築を行い、パケットの送信を実施する。ステップS37のパケットの構築では、ESPヘッダやIPヘッダの生成などが行われる。
【0029】
従来方式の送信処理手順では、ステップS36でアプリケーションデータ全体の暗号化が行われる。アプリケーションデータが大きくなればなるほど、ステップS36の処理時間が長くなる。これにより、アプリケーションデータがすべて揃ってから実際にパケットが送信されるまでの遅延が大きくなってしまう。
【0030】
従来方式においてデータ22〜24を取得する時点で暗号化すれば、アプリケーションデータが揃ってから実際にパケットが送信されるまでの時間を短縮することができる。しかし、データの暗号化にブロック暗号のCBCモードを利用している場合は、個々のデータを取得した時点でそれぞれのデータを暗号化することできない。その理由は、アプリケーションデータの先頭ブロック、つまりデータ22の先頭のブロックを暗号化するためにトランスポートプロトコルヘッダが必要になるが、データ22を取得した時点ではトランスポートプロトコルヘッダが生成されていないためである。
【0031】
図4は、ブロック暗号Ek( )を用いた従来のCBCモードの暗号化演算方法を説明するためのものである。mnは、暗号化を行うデータを規定の長さで区切ったときのn番目のブロックを示し、CnはmnをCBCモードで暗号化演算した結果の暗号文を示す。
【0032】
図4に示すように、CBCモードでは、n−1番目の暗号化演算の結果とn番目のブロックの排他的論理和演算(XOR演算)を行い、その結果に対し予め定められたアルゴリズムの暗号演算(Ek( ))を施すことで、n番目のブロックの暗号文が得られる。1番目のブロックを暗号化するためには、イニシャルベクトルC0を使用する。イニシャルベクトルは生成された乱数または直前に送信したIPsecESPパケットの最後の暗号ブロックである。イニシャルベクトルの生成はCBCモードの演算に先だって行われる。ブロックに区切る長さとトランスポートプロトコルヘッダの長さが等しい場合、図2のデータでは、トランスポートプロトコルヘッダ全体がC1になり、データ22の先頭のブロックがC2になる。このため、データ22の暗号化を行うためにはトランスポートプロトコルヘッダが必要となる。しかし、トランスポートプロトコルヘッダは、図2においてデータ22〜24までのアプリケーションデータが全て揃わないと生成できない。従って、データ22を取得した段階では、トランスポートプロトコルヘッダがまだ生成されていないがため、図4に示した従来のCBCモードの暗号化演算方法では、データ22を取得した段階で、データ22の暗号化を行うことはできない。
【0033】
そこで、本実施形態では、CBCモードの暗号化演算方法を図5に示すように変更する。従来はパケットの先頭にある1番目のブロック(トランスポートプロトコルヘッダ)の暗号化演算に使用していたイニシャルベクトルC0を、本実施形態では、パケットの先頭から2番目のブロックであり、しかも最初に取得されるブロックの暗号化演算に使用し、1番目のブロックがまだ生成されていない状態で2番目の暗号化演算を実施する。これにより、トランスポートプロトコルヘッダが生成されていない時点で、図2のデータ22に対し暗号化演算を実施することができ、データ22、データ23、そしてデータ24それぞれのデータが取得された時点で個々のデータの暗号化演算を実施することができる。
【0034】
データ24が取得され、1番目のブロックとなるトランスポートプロトコルヘッダ(例えば、図5ではm1)が生成されたとき、イニシャルベクトルC0に対し、ブロック暗号演算Ek( )に対応する復号演算(Ek−1( ))を行い、その結果と先頭のブロック、すなわち、トランスポートプロトコルヘッダ (m1)の排他的論理和演算(XOR演算)を実施する。これにより得られたC0´が従来のCBCモード演算方式で用いられるイニシャルベクトルに相当する値になる。
【0035】
送信時は、C0´、C0、2番目以降のブロックの暗号結果である暗号ブロックC2、C3、…、Cnの順で送信される。
【0036】
次に、図6及び図7を参照して、図5に示したCBCモードの暗号化演算方式を適用した図1の送信ノード(送信装置)11の構成及び送信処理動作について説明する。
【0037】
図6は、送信ノード11の構成例を示したものである。
【0038】
アプリケーションデータ取得部101は、上位層で発生したアプリケーションデータを取得する。
【0039】
ヘッダ情報抽出部102は、アプリケーションデータ取得部101で取得されたアプリケーションデータからトランスポートプロトコルヘッダを生成するために必要な情報を抽出し、ヘッダ情報バッファ103へ格納する。トランスポートプロトコルヘッダを生成するために必要な情報には、アプリケーションデータのチェックサム値やアプリケーションデータのデータ長などの情報が含まれる。ヘッダ情報抽出部102では、このような値を計算するために必要な情報を、アプリケーションデータ取得部101でアプリケーションンデータが取得される度に、当該アプリケーションデータから抽出する。
【0040】
先頭ブロック判定手段104は、アプリケーションデータ取得部101が取得したアプリケーションデータが送信すべきデータの先頭部分にあたるかどうかの判定を行う。
【0041】
イニシャルベクトル生成部105は乱数を発生させるなどして暗号化演算に必要なイニシャルベクトル(図5のC0)の生成を行い、生成したイニシャルベクトルをイニシャルベクトルバッファ106へ格納する。
【0042】
暗号化部107は、図5に示した排他的論理和演算と暗号化演算を行い、予め定められた一定の長さ(α)のブロック単位でCBCモードの暗号化演算処理を行う。暗号化演算処理の結果はアプリケーションバッファ108へ格納する。暗号化部107はCBCモードの暗号化処理を行うために、イニシャルベクトルC0や、暗号化対象のブロックの直前のブロックの暗号化処理結果を取得するためにイニシャルベクトルバッファ106やアプリケーションバッファ108にアクセスする。
【0043】
パケット送信判定部109は、受信ノード12へ送信すべきデータがすべて揃ったかどうかを判定する。受信ノード12へ送信すべきデータの長さが固定長で規定されている場合は、アプリケーションバッファ108を参照するなどして取得されているアプリケーションデータの長さが規定の長さに到達しているか否かで、受信ノード12へ送信すべきデータがすべて揃ったかどうかの判定を行うことができる。
【0044】
ヘッダ生成部110は、パケット送信判定部109で、受信ノード12へ送信すべきデータがすべて揃ったと判定されたときに、ヘッダ情報バッファ103の情報を利用して、トランスポートプロトコルヘッダを生成する。生成されたトランスポートプロトコルヘッダはヘッダバッファ711に格納する。
【0045】
暗号化後処理部113は、まず、ESPトレイラ(パディング、パディング長、次ヘッダ)を生成する。なお、ESPトレイラはパディング長が「0」の場合でも必要である。このESPトレイラは、(まだ暗号化されていないアプリケーションデータがあれば、それと合わせて)暗号処理単位のブロック長αの最後のブロック(図5のブロックmn)として、図5のn−1番目の暗号処理行い、最後の暗号ブロック(図5では、Cn)を生成する。
【0046】
また、暗号化後処理部113は、トランスポートプロトコルヘッダの長さが、暗号処理単位のブロック長αに一致する場合には、当該トランスポートプロトコルヘッダとイニシャルベクトル(図5のC0)とからCBCモードにおける本来のイニシャルベクトルになるべき値(図5のC0´)を図5に示した方法で計算する。
【0047】
すなわち、イニシャルベクトルC0に対し、ブロック暗号演算Ek( )に対応する復号演算(Ek−1( ))を行い、その結果とトランスポートプロトコルヘッダの排他的論理和演算(XOR演算)を実施することにより、C0´を求める。
【0048】
この結果、図8に示すように、トランスポートプロトコルヘッダ、アプリケーションデータ、及びESPトレイラ(図8(a)参照)に対し、図5に示したCBCモードの暗号化演算処理を用いることにより、図8(b)に示すような暗号ブロック列C0´、C0、C1、C2、…Cnが得られる。
【0049】
また、トランスポートプロトコルヘッダの長さが、暗号処理単位のブロック長αの整数倍である場合には、暗号化後処理部113は、当該トランスポートプロトコルヘッダの長さα毎の複数のブロックに分割し、そのうちの最後のブロックから順に、図5のn番目の暗号処理を繰り返す。
【0050】
図9には、トランスポートプロトコルヘッダの長さが、暗号処理単位のブロック長αの2倍である場合を示している。トランスポートプロトコルヘッダの長さがαの2倍である場合、トランスポートプロトコルヘッダを長さαの2つのブロック(m1−1、m1−2)に分割する。まず、後半のブロックm1−2の暗号化を行う(図9のn番目の暗号処理)。このn番目の暗号処理では、イニシャルベクトルC0に対し、ブロック暗号演算Ek( )に対応する復号演算(Ek−1( ))を行い、その結果と後半のブロックm1−2との排他的論理和演算(XOR演算)を実施することにより、C0´を求める。
【0051】
次に、前半のブロックm1−1の暗号化を行う(図9のn+1番目の暗号処理)。このn+1番目の暗号処理では、上記n番目の暗号処理で求めたC0´に対し、ブロック暗号演算Ek( )に対応する復号演算(Ek−1( ))を行い、その結果と前半のブロックm1−1との排他的論理和演算(XOR演算)を実施することにより、C0´´を求める。このC0´´がCBCモードにおける本来のイニシャルベクトルになるべき値である。
【0052】
この結果、図8に示すように、トランスポートプロトコルヘッダ、アプリケーションデータ、及びESPトレイラ(図8(a)参照)に対し、図9に示したCBCモードの暗号化演算処理を用いることにより、図8(c)に示すような暗号ブロック列C0´´、C0´、C0、C1、C2、…Cnが得られる。
【0053】
トランスポートプロトコルヘッダの長さが、暗号処理単位のブロック長αに一致する場合も、αの整数倍である場合も、得られる暗号ブロック列の先頭(図8(b)のC0´、図8(c)のC0´´)は、受信ノード12における復号処理では従来のCBCモードにおけるイニシャルベクトルとして用いられる。
【0054】
以下、説明の簡単のため、トランスポートプロトコルヘッダの長さがαであり、暗号ブロック列の先頭が図8(b)のC0´の場合を例にとり説明する。
【0055】
パケット構築部114は、暗号化部107及び暗号化後処理部113で求めた暗号ブロックC0´、イニシャルベクトルC0、アプリケーションデータ及びESPトレイラの暗号化処理結果の暗号ブロック列C1、C2、…Cn、をこの順に並べて、IPsecのESPパケットを構築する。その際、必要ならばIPv6の宛先オプションの拡張ヘッダの生成などを行う。例えば、図8(d)に示すように、SPI、シーケンス番号、認証データなどを生成する。
【0056】
なお、ここで、SPI(Security parameter Index)は、宛先IPアドレスとセキュリティプロトコル(ESP)とを組み合わせることにより、そのデータグラムに対するセキュリティアソシエーションを一意に識別する32ビットの値である。シーケンス番号はパケットにつける通し番号、次ヘッダは上位層プロトコルの識別子、認証データは、ESPパケットから認証データを抜いたものから計算された値である。また、パディングは必要に応じて付加され、パディング長は、付加されたパディングの長さを示す。
【0057】
パケット構築部114は、図8(e)に示すように、図8(d)のESPパケットに、さらにIPヘッダを付加してIPパケットを生成する。
【0058】
パケット構築部114が構築したパケットはパケット用バッファ115に格納される。
【0059】
パケット送信部116は、パケット用バッファ7115に格納されたパケットを受信ノード12に対して送信する。
【0060】
図7は、図6に示した送信ノード11の送信処理動作を説明するためのフローチャートである。なお、図7に示す送信処理動作は、アプリケーションデータ取得部101が上位層からアプリケーションデータを取得する度に実行される。
【0061】
まず、トランスポートプロトコルヘッダの長さがブロック暗号処理単位のブロック長αに等しい場合を例により説明する。
【0062】
アプリケーションデータ取得部101が、上位層で生成されたアプリケーションデータを取得すると(ステップS1)、ヘッダ情報抽出部102が当該アプリケーションデータからトランスポートプロトコルヘッダを生成するために必要な情報(例えば、チェックサムやデータ長など)を抽出し、これをヘッダ情報バッファ103に記憶する(ステップS2)。
【0063】
次に、先頭ブロック判定部104は、アプリケーションバッファ108に記憶されている、既に取得されているが暗号化されていない暗号処理待ち状態のアプリケーションデータ、及び、既に取得され暗号化されて送信待ち状態のアプリケーションデータの暗号データの量から、ステップS101でアプリケーションデータ取得部101で取得されたアプリケーションデータが、送信すべきデータの先頭部分にあたるかどうかの判定を行う(ステップS3)。例えば、上記暗号処理待ち及び上記送信待ち状態の暗号データが存在しないとき(空のとき)、当該取得されたアプリケーションデータが、送信すべきデータの先頭部分にあたると判定する。
【0064】
当該取得されたアプリケーションデータが、送信すべきデータの先頭部分にあたるとき、ステップS3からステップS4へ進む。
【0065】
ステップS4では、イニシャルベクトル生成部105が、イニシャルベクトル(図5のC0)を生成し、生成したイニシャルベクトルをイニシャルベクトルバッファ106へ格納する。その後、ステップS5へ進み、最初の暗号化を行う。すなわち、図5の1番目の暗号処理を行う。ここでは、ステップS1で取得したアプリケーションデータの先頭から予め定められた長さαのデータをブロックm2とする。そして、このブロックm2と、イニシャルベクトルバッファ106に記憶されたイニシャルベクトルC0との排他的論理和演算(XOR演算)を行い、この結果に対し暗号演算(Ek( ))を施すことで、ブロックm2の暗号ブロックC2が得られる。得られた暗号ブロックC2は、アプリケーションバッファ108に記憶される(ステップS6)。また、ステップS1で取得したアプリケーションデータがαより長いとき、その残りの部分は、次に発生するアプリケーションデータと合わせて暗号化する。そのため、当該残りの部分は上記暗号処理待ち状態のアプリケーションデータとしてアプリケーションバッファ108に記憶しておく。
【0066】
一方、ステップS3において、アプリケーションバッファ108に上記暗号処理待ち状態または上記送信待ち状態のアプリケーションデータまたはその暗号データ(暗号ブロック)が存在する場合には、ステップS3からステップS5へ進む。
【0067】
この場合、ステップS5では、図5の2番目から(n−2)番目のいずれかの暗号処理を行う。例えば、2番目の暗号処理の場合、アプリケーションバッファ108に記憶されている暗号処理待ちのアプリケーションデータに、データ長がαとなるように、今回取得したアプリケーションデータの先頭から追加し、ブロックm3を得る。このとき今回取得したアプリケーションデータの余った部分は、上記同様アプリケーションバッファ108に記憶する。このブロックm3と、アプリケーションバッファ108に記憶されている1つ前の暗号処理で得られた暗号ブロック、すなわち暗号ブロックC2との排他的論理和演算(XOR演算)を行い、この結果に対し暗号演算(Ek( ))を施すことで、ブロックm3の暗号ブロックC3が得られる。得られた暗号ブロックC3は、アプリケーションバッファ108に記憶される(ステップS6)。
【0068】
3番目以降n−2番目までの暗号処理も上記同様である。
【0069】
次に、ステップS7に進み、パケット送信判定部109が、アプリケーションバッファ108に格納されている送信待ち状態の暗号ブロックのデータ量が、受信ノード12へ送信すべきデータ長を満たす場合(例えば、暗号ブロックC2〜Cn−1がアプリケーションバッファ108に記憶されているとき)、ステップS7からステップS8へ進み、そうでない場合、処理を終了する。
【0070】
ステップS8では、ヘッダ生成部110が、ヘッダ情報バッファ103に記憶されている情報を利用して、トランスポートプロトコルヘッダを生成する。生成されたトランスポートプロトコルヘッダはヘッダバッファ711に格納される。
【0071】
次に、ステップS9へ進み、暗号化後処理部113は、まず、ESPトレイラ(パディング、パディング長、次ヘッダ)を生成する。例えば、アプリケーションバッファ108に上記暗号処理待ちのアプリケーションデータが記憶されている場合には、この暗号処理待ちのアプリケーションデータに、データ長がαとなるように、パディング、パディング長、及び次ヘッダを追加して、ブロックmnを得る。そして、図5のn−1番目の暗号処理を行う。すなわち、このブロックmnと、アプリケーションバッファ108に記憶されている1つ前の暗号処理で得られた暗号ブロック、すなわち、暗号ブロックCn−1との排他的論理和演算(XOR演算)を行い、この結果に対し暗号演算(Ek( ))を施すことで、ブロックmnの暗号ブロックCnが得られる。得られた暗号ブロックCnは、アプリケーションバッファ108に記憶する。
【0072】
次に、図5のn番目の暗号処理を行う。すなわち、ヘッダバッファ711に記憶されたトランスポートプロトコルヘッダ(これをm1とする)と、ステップS4でイニシャルベクトルバッファ106に記憶されたイニシャルベクトル(C0)とからCBCモードにおける本来のイニシャルベクトルになるべき値(C0´)を図5に示した方法で計算する。
【0073】
すなわち、イニシャルベクトルC0に対し、ブロック暗号演算Ek( )に対応する復号演算(Ek−1( ))を行い、その結果とトランスポートプロトコルヘッダの排他的論理和演算(XOR演算)を実施することにより、暗号ブロックC0´を求める。
【0074】
次に、ステップS10において、パケット構築部114は、暗号化部107及び暗号化後処理部113で求めた値暗号ブロックC0´、イニシャルベクトルC0、アプリケーションデータ及びESPトレイラの暗号処理結果の暗号ブロック列C1、C2、…Cn、をこの順に並べて、図8(d)のESPパケットを生成する。その際、例えば、図8(d)に示すように、SPI、シーケンス番号、認証データなどを生成する。また、パケット構築部114は、図8(d)のESPパケットに、さらにIPヘッダを付加して、図8(e)に示すようなIPパケットを生成する。
【0075】
以上のようにして生成されたIPパケットはパケット送信部116から送信される。
【0076】
次に、トランスポートプロトコルヘッダの長さがブロック暗号処理単位のブロック長αの整数倍である場合を例により説明する。この場合、図7のステップS9の処理が、上述のトランスポートプロトコルヘッダの長さがαに等しい場合と異なる。
【0077】
ステップS8で生成されるトランスポートプロトコルヘッダの長さがαの2倍である場合を例にとり、図9を参照して説明する。なお、図9において、図5と同一部分は同一符号を付している。
【0078】
この場合、まず、ステップS9において、暗号化後処理部113は、トランスポートプロトコルヘッダを長さαの2つのブロック(m1−1、m1−2)に分割する。まず、後半のブロックm1−2の暗号化を行う(図9のn番目の暗号処理)。このn番目の暗号処理では、イニシャルベクトルC0に対し、ブロック暗号演算Ek( )に対応する復号演算(Ek−1( ))を行い、その結果と前半のブロックm1−1との排他的論理和演算(XOR演算)を実施することにより、C0´を求める。
【0079】
次に、前半のブロックm1−1の暗号化を行う(図9のn+1番目の暗号処理)。このn+1番目の暗号処理では、上記n番目の暗号処理で求めたC0´に対し、ブロック暗号演算Ek( )に対応する復号演算(Ek−1( ))を行い、その結果と前半のブロックm1−2との排他的論理和演算(XOR演算)を実施することにより、C0´´を求める。このC0´´がCBCモードにおける本来のイニシャルベクトルになるべき値である。
【0080】
この結果、図8に示すように、トランスポートプロトコルヘッダ及びアプリケーションデータ(図2、図8(a)参照)に対し、図9に示したCBCモードの暗号化演算方式を用いることにより、図8(c)に示すような暗号ブロック列C0´´、C0´、C0、C1、C2、…Cnが得られる。
【0081】
ステップS10では、パケット構築部114は、暗号化部107及び暗号化後処理部113で求めた暗号ブロックC0´´、C0´、イニシャルベクトルC0、アプリケーションデータ及びESPトレイラの暗号処理結果の暗号ブロックC1、C2、…Cn、をこの順に並べて、さらにIPヘッダを付加して、図8(e)に示すようなIPパケットを生成する。
【0082】
以上のようにして生成されたIPパケットはパケット送信部116から送信される。
【0083】
受信ノード12では、上述のようにして送信ノード11から送信されたIPパケットを受信すると、その中のESPパケットのペイロードから図8(b)または図8(c)に示すような暗号ブロック列を取り出す。この暗号ブロック列の先頭(例えば、C0´またはC0´´)は、従来のCBCモードにおけるイニシャルベクトルと同じ扱いをすればよく、この暗号ブロック列は、従来のCBCモードにおける復号処理と全く同じ手順で復号することができる。
【0084】
すなわち、図5に示すように暗号化した結果得られる暗号ブロック列C0´、C0、C1、C2、…Cnに対しては、図10に示すように、まず、C0´をイニシャルベクトルとみなし、2番目の暗号ブロックC0に対し、ブロック暗号演算Ek( )に対応する復号演算(Ek−1( ))を行い、その結果とC0´との排他的論理和演算(XOR演算)を実施することにより、最初のブロックm1が得られる。次に、3番目の暗号データC2に対し復号演算(Ek−1( ))を行い、その結果と2番目の暗号ブロックC0との排他的論理和演算(XOR演算)を実施することにより、2番目のブロックm2が得られる。以下同様に復号して、m1〜mnまでのブロックを復号する。
【0085】
また、図9に示すように暗号化した結果得られる暗号ブロック列C0´´、C0´、C0、C1、C2、…Cnに対しては、図11に示すように、まず、C0´´をイニシャルベクトルとみなし、2番目の暗号ブロックC0´に対し、ブロック暗号演算Ek( )に対応する復号演算(Ek−1( ))を行い、その結果とC0´´との排他的論理和演算(XOR演算)を実施することにより、最初のブロックm1−1が得られる。次に、3番目の暗号ブロックC0に対し復号演算(Ek−1( ))を行い、その結果と2番目の暗号ブロックC0´との排他的論理和演算(XOR演算)を実施することにより、2番目のブロックm1−2が得られる。以下同様に復号して、m2〜m3までのブロックも復号する。
【0086】
この復号処理手順は、従来のCBCモードにおける復号処理手順と全く同じであり、受信側の構成及び処理動作を変更する必要がない。
【0087】
以上説明したように、上記実施形態によれば、1番目からN(Nは、2以上の整数)番目までの連続する複数の平文データブロック(例えば、1番目のデータブロックはヘッダ情報を含み、2番目からn−1番目のデータブロックはアプリケーションデータを含み、最後のn番目のデータブロックは、(残りのアプリケーションデータがあればそれと)ESPトレイラを含む)を暗号化して送信する際に、最初に得られた途中の(例えば2番目の)平文データブロックについては、該平文データブロックとイニシャルベクトルC0との排他的論理和に対し暗号演算を行うことにより暗号化し、3番目以降の平文データブロックは、該平文データブロックとその前の平文データブロックを暗号化した結果との排他的論理和に対し暗号演算を行うことにより暗号化し、2番目からN番目の暗号データブロックを生成する。
【0088】
一方、1番目の平文データブロックは、例えば送信すべきアプリケーションデータがそろったときに得られるヘッダ情報であり、この1番目の平文データブロックについては、上記イニシャルベクトルC0に対し上記暗号演算に対応する復号演算を行い、その結果と1番目の平文データブロックとの排他的論理和を計算することにより、1番目の暗号データブロックを生成する。
【0089】
そして、1番目の暗号データブロック、イニシャルベクトルC0、及び2番目からN番目の暗号データブロックをこの順に含むパケットを生成して、送信する。
【0090】
このような構成により、トランスポートプロトコルヘッダ及びアプリケーションデータをブロック暗号CBCモードで暗号化して送信する処理において、復号処理に変更を加えることなく、アプリケーションデータの暗号化処理をトランスポートプロトコルヘッダ生成前の途中のブロックから実施することが可能となり、送信遅延を短縮することができる。
【0091】
なお、本発明の実施の形態に記載した本発明の手法は、コンピュータに実行させることのできるプログラムとして、磁気ディスク(フレキシブルディスク、ハードディスクなど)、光ディスク(CD−ROM、DVDなど)、半導体メモリなどの記録媒体に格納して頒布することもできる。
【0092】
例えば、図6に示した各構成部の機能は、コンピュータに搭載されたプロセッサにプログラムを実行させることにより実現することができる。
【0093】
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【図面の簡単な説明】
【0094】
【図1】本実施形態に係るネットワークの構成例を示した図。
【図2】CBCモードで暗号化されるデータの構成例を示した図。
【図3】従来のブロック暗号CBCモードの暗号化手順を用いたデータの送信処理を説明するためのフローチャート。
【図4】従来のブロック暗号CBCモードの暗号化手順を説明するための図。
【図5】本実施形態に係る暗号化手順(トランスポートプロトコルヘッダ長とブロック長とが等しい場合)を説明するための図。
【図6】図1の送信ノード(送信装置)の構成例を示した図。
【図7】図6の送信ノードにおけるデータの送信処理を説明するためのフローチャート。
【図8】図7の送信処理により送信ノードで生成される暗号ブロック列、この暗号ブロック列を含むESP(Encapsulating Security Payload)パケットの構成例を示した図。
【図9】本実施形態に係る他の暗号化手順(トランスポートプロトコルヘッダ長がブロック長より長い場合)を説明するための図。
【図10】図5の暗号化手順に対応する復号手順を説明するための図。
【図11】図9の暗号化手順に対応する復号手順を説明するための図。
【符号の説明】
【0095】
11…送信ノード
12…受信ノード
13…ネットワーク
101…アプリケーションデータ取得部
102…ヘッダ情報抽出部
103…ヘッダ情報バッファ
104…先頭ブロック判定部
105…イニシャルベクトル生成部
106…イニシャルベクトルバッファ
107…暗号化部
108…アプリケーションバッファ
109…パケット送信判定部
110…ヘッダ生成部
111…ヘッダバッファ
113…暗号化後処理部
114…パケット構築部
115…パケット用バッファ
116…パケット送信部
【特許請求の範囲】
【請求項1】
1番目からn(nは、2以上の整数)番目までのn個のデータブロックと、当該n個のデータブロックのヘッダ情報とを暗号化して送信する送信装置であって、
1番目のデータブロックについては、イニシャルベクトルと該1番目のデータブロックとの排他的論理和に対し暗号演算を行うことにより暗号化し、2番目以降のデータブロックについては、該データブロックとその前のデータブロックを暗号化した結果との排他的論理和に対し前記暗号演算を行うことにより暗号化して、n個の暗号データブロックを生成する第1暗号化手段と、
前記ヘッダ情報を生成するヘッダ生成手段と、
前記イニシャルベクトルに対し前記暗号演算に対応する復号演算を行い、その結果と前記ヘッダ情報との排他的論理和を計算することにより、暗号ヘッダブロックを生成する第2暗号化手段と、
前記暗号ヘッダブロック、前記イニシャルベクトル及び前記n個の暗号データブロックをこの順に含む暗号パケットを生成するパケット生成手段と、
前記暗号パケットを送信する送信手段と、
を含む送信装置。
【請求項2】
前記第2暗号化手段は、
前記ヘッダ情報をM(Mは2以上の整数)個のヘッダブロックに分割することにより、1番目からM番目までのM個のヘッダブロックを生成し、
(a)M番目のヘッダブロックについては、前記イニシャルベクトルに対し前記復号演算を行い、その結果と前記M番目のヘッダブロックとの排他的論理和を計算することにより暗号化して、第M暗号ヘッダブロックを生成する処理と、(b)前記M個のヘッダブロックのうちm(mはM−1以下1以上の任意の整数)番目のヘッダブロックについては、第m+1番目の暗号ヘッダブロックに対し前記復号演算を行い、その結果と前記m番目のヘッダブロックとの排他的論理和を計算することにより暗号化して、第m暗号ヘッダブロックを生成する処理と、を実行することにより、第1暗号ヘッダブロック乃至第M暗号ヘッダブロックを生成し、
前記パケット生成手段は、
前記第1暗号ヘッダブロック乃至前記第M暗号ヘッダブロック、前記イニシャルベクトル、及び前記n個の暗号データブロックをこの順に含む暗号パケットを生成する請求項1記載の送信装置。
【請求項3】
前記送信手段は、前記暗号パケットを、IPsec(Security Architecture for Internet Protocol)におけるESP(Encapsulated Security Payload)パケット中のペイロードとして送信する請求項1記載の送信装置。
【請求項4】
前記第1暗号化手段は、各データブロックが得られた度に、該データブロックを暗号化し、
前記ヘッダ生成手段は、前記n個のヘッダブロックが全て得られたときに、前記ヘッダ情報を生成する請求項1記載の送信装置。
【請求項5】
1番目からn(nは、2以上の整数)番目までのn個のデータブロックと、当該n個のデータブロックのヘッダ情報とを暗号化して送信する送信方法であって、
1番目のデータブロックに対しては、イニシャルベクトルと1番目のデータブロックとの排他的論理和に対し暗号演算を行うことにより暗号化し、2番目以降のデータブロックについては、該データブロックとその前のデータブロックを暗号化した結果との排他的論理和に対し前記暗号演算を行うことにより暗号化して、n個の暗号データブロックを生成する第1暗号化ステップと、
前記ヘッダ情報を生成するヘッダ生成ステップと、
前記イニシャルベクトルに対し前記暗号演算に対応する復号演算を行い、その結果と前記ヘッダ情報との排他的論理和を計算することにより、暗号ヘッダブロックを生成する第2暗号化ステップと、
前記暗号ヘッダブロック、前記イニシャルベクトル及び前記n個の暗号データブロックをこの順に含む暗号パケットを生成するパケット生成ステップと、
前記暗号パケットを送信する送信ステップと、
を含む送信方法。
【請求項6】
前記第2暗号化ステップは、
前記ヘッダ情報をM(Mは2以上の整数)個のヘッダブロックに分割することにより、1番目からM番目までのM個のヘッダブロックを生成し、
(a)M番目のヘッダブロックについては、前記イニシャルベクトルに対し前記復号演算を行い、その結果と前記M番目のヘッダブロックとの排他的論理和を計算することにより暗号化して、第M暗号ヘッダブロックを生成する処理と、(b)前記M個のヘッダブロックのうちm(mはM−1以下1以上の任意の整数)番目のヘッダブロックについては、第m+1番目の暗号ヘッダブロックに対し前記復号演算を行い、その結果と前記m番目のヘッダブロックとの排他的論理和を計算することにより暗号化して、第m暗号ヘッダブロックを生成する処理と、を実行することにより、第1暗号ヘッダブロック乃至第M暗号ヘッダブロックを生成し、
前記パケット生成ステップは、前記第1暗号ヘッダブロック乃至前記第M暗号ヘッダブロック、前記イニシャルベクトル及び前記n個の暗号データブロックをこの順に含む暗号パケットを生成する請求項5記載の送信方法。
【請求項7】
コンピュータを、
1番目からn(nは、2以上の整数)番目までのn個のデータブロックと、当該n個のデータブロックのヘッダ情報とを暗号化して送信する送信装置として機能させるためのプログラムであって、
前記コンピュータを、
1番目のデータブロックについては、イニシャルベクトルと該1番目のデータブロックとの排他的論理和に対し暗号演算を行うことにより暗号化し、2番目以降のデータブロックは、該データブロックとその前のデータブロックを暗号化した結果との排他的論理和に対し暗号演算を行うことにより暗号化して、n個の暗号データブロックを生成する第1暗号化手段、
前記ヘッダ情報を生成するヘッダ生成手段、
前記イニシャルベクトルに対し前記暗号演算に対応する復号演算を行い、その結果と前記ヘッダ情報との排他的論理和を計算することにより、暗号ヘッダブロックを生成する第2暗号化手段、
前記暗号ヘッダブロック、前記イニシャルベクトル及び前記n個の暗号データブロックをこの順に含む暗号パケットを生成するパケット生成手段、
前記暗号パケットを送信する送信手段、
として機能させるためのプログラム。
【請求項8】
前記第2暗号化手段は、
前記ヘッダ情報をM(Mは2以上の整数)個のヘッダブロックに分割することにより、1番目からM番目までのM個のヘッダブロックを生成し、
(a)M番目のヘッダブロックについては、前記イニシャルベクトルに対し前記復号演算を行い、その結果と前記M番目のヘッダブロックとの排他的論理和を計算することにより暗号化して、第M暗号ヘッダブロックを生成する処理と、(b)前記M個のヘッダブロックのうちm(mはM−1以下1以上の任意の整数)番目のヘッダブロックについては、第m+1番目の暗号ヘッダブロックに対し前記復号演算を行い、その結果と前記m番目のヘッダブロックとの排他的論理和を計算することにより暗号化して、第m暗号ヘッダブロックを生成する処理と、を実行することにより、第1暗号ヘッダブロック乃至第M暗号ヘッダブロックを生成し、
前記パケット生成手段は、
前記第1暗号ヘッダブロック乃至前記第M暗号ヘッダブロック、前記イニシャルベクトル、及び前記n個の暗号データブロックをこの順に含む暗号パケットを生成する請求項7記載のプログラム。
【請求項1】
1番目からn(nは、2以上の整数)番目までのn個のデータブロックと、当該n個のデータブロックのヘッダ情報とを暗号化して送信する送信装置であって、
1番目のデータブロックについては、イニシャルベクトルと該1番目のデータブロックとの排他的論理和に対し暗号演算を行うことにより暗号化し、2番目以降のデータブロックについては、該データブロックとその前のデータブロックを暗号化した結果との排他的論理和に対し前記暗号演算を行うことにより暗号化して、n個の暗号データブロックを生成する第1暗号化手段と、
前記ヘッダ情報を生成するヘッダ生成手段と、
前記イニシャルベクトルに対し前記暗号演算に対応する復号演算を行い、その結果と前記ヘッダ情報との排他的論理和を計算することにより、暗号ヘッダブロックを生成する第2暗号化手段と、
前記暗号ヘッダブロック、前記イニシャルベクトル及び前記n個の暗号データブロックをこの順に含む暗号パケットを生成するパケット生成手段と、
前記暗号パケットを送信する送信手段と、
を含む送信装置。
【請求項2】
前記第2暗号化手段は、
前記ヘッダ情報をM(Mは2以上の整数)個のヘッダブロックに分割することにより、1番目からM番目までのM個のヘッダブロックを生成し、
(a)M番目のヘッダブロックについては、前記イニシャルベクトルに対し前記復号演算を行い、その結果と前記M番目のヘッダブロックとの排他的論理和を計算することにより暗号化して、第M暗号ヘッダブロックを生成する処理と、(b)前記M個のヘッダブロックのうちm(mはM−1以下1以上の任意の整数)番目のヘッダブロックについては、第m+1番目の暗号ヘッダブロックに対し前記復号演算を行い、その結果と前記m番目のヘッダブロックとの排他的論理和を計算することにより暗号化して、第m暗号ヘッダブロックを生成する処理と、を実行することにより、第1暗号ヘッダブロック乃至第M暗号ヘッダブロックを生成し、
前記パケット生成手段は、
前記第1暗号ヘッダブロック乃至前記第M暗号ヘッダブロック、前記イニシャルベクトル、及び前記n個の暗号データブロックをこの順に含む暗号パケットを生成する請求項1記載の送信装置。
【請求項3】
前記送信手段は、前記暗号パケットを、IPsec(Security Architecture for Internet Protocol)におけるESP(Encapsulated Security Payload)パケット中のペイロードとして送信する請求項1記載の送信装置。
【請求項4】
前記第1暗号化手段は、各データブロックが得られた度に、該データブロックを暗号化し、
前記ヘッダ生成手段は、前記n個のヘッダブロックが全て得られたときに、前記ヘッダ情報を生成する請求項1記載の送信装置。
【請求項5】
1番目からn(nは、2以上の整数)番目までのn個のデータブロックと、当該n個のデータブロックのヘッダ情報とを暗号化して送信する送信方法であって、
1番目のデータブロックに対しては、イニシャルベクトルと1番目のデータブロックとの排他的論理和に対し暗号演算を行うことにより暗号化し、2番目以降のデータブロックについては、該データブロックとその前のデータブロックを暗号化した結果との排他的論理和に対し前記暗号演算を行うことにより暗号化して、n個の暗号データブロックを生成する第1暗号化ステップと、
前記ヘッダ情報を生成するヘッダ生成ステップと、
前記イニシャルベクトルに対し前記暗号演算に対応する復号演算を行い、その結果と前記ヘッダ情報との排他的論理和を計算することにより、暗号ヘッダブロックを生成する第2暗号化ステップと、
前記暗号ヘッダブロック、前記イニシャルベクトル及び前記n個の暗号データブロックをこの順に含む暗号パケットを生成するパケット生成ステップと、
前記暗号パケットを送信する送信ステップと、
を含む送信方法。
【請求項6】
前記第2暗号化ステップは、
前記ヘッダ情報をM(Mは2以上の整数)個のヘッダブロックに分割することにより、1番目からM番目までのM個のヘッダブロックを生成し、
(a)M番目のヘッダブロックについては、前記イニシャルベクトルに対し前記復号演算を行い、その結果と前記M番目のヘッダブロックとの排他的論理和を計算することにより暗号化して、第M暗号ヘッダブロックを生成する処理と、(b)前記M個のヘッダブロックのうちm(mはM−1以下1以上の任意の整数)番目のヘッダブロックについては、第m+1番目の暗号ヘッダブロックに対し前記復号演算を行い、その結果と前記m番目のヘッダブロックとの排他的論理和を計算することにより暗号化して、第m暗号ヘッダブロックを生成する処理と、を実行することにより、第1暗号ヘッダブロック乃至第M暗号ヘッダブロックを生成し、
前記パケット生成ステップは、前記第1暗号ヘッダブロック乃至前記第M暗号ヘッダブロック、前記イニシャルベクトル及び前記n個の暗号データブロックをこの順に含む暗号パケットを生成する請求項5記載の送信方法。
【請求項7】
コンピュータを、
1番目からn(nは、2以上の整数)番目までのn個のデータブロックと、当該n個のデータブロックのヘッダ情報とを暗号化して送信する送信装置として機能させるためのプログラムであって、
前記コンピュータを、
1番目のデータブロックについては、イニシャルベクトルと該1番目のデータブロックとの排他的論理和に対し暗号演算を行うことにより暗号化し、2番目以降のデータブロックは、該データブロックとその前のデータブロックを暗号化した結果との排他的論理和に対し暗号演算を行うことにより暗号化して、n個の暗号データブロックを生成する第1暗号化手段、
前記ヘッダ情報を生成するヘッダ生成手段、
前記イニシャルベクトルに対し前記暗号演算に対応する復号演算を行い、その結果と前記ヘッダ情報との排他的論理和を計算することにより、暗号ヘッダブロックを生成する第2暗号化手段、
前記暗号ヘッダブロック、前記イニシャルベクトル及び前記n個の暗号データブロックをこの順に含む暗号パケットを生成するパケット生成手段、
前記暗号パケットを送信する送信手段、
として機能させるためのプログラム。
【請求項8】
前記第2暗号化手段は、
前記ヘッダ情報をM(Mは2以上の整数)個のヘッダブロックに分割することにより、1番目からM番目までのM個のヘッダブロックを生成し、
(a)M番目のヘッダブロックについては、前記イニシャルベクトルに対し前記復号演算を行い、その結果と前記M番目のヘッダブロックとの排他的論理和を計算することにより暗号化して、第M暗号ヘッダブロックを生成する処理と、(b)前記M個のヘッダブロックのうちm(mはM−1以下1以上の任意の整数)番目のヘッダブロックについては、第m+1番目の暗号ヘッダブロックに対し前記復号演算を行い、その結果と前記m番目のヘッダブロックとの排他的論理和を計算することにより暗号化して、第m暗号ヘッダブロックを生成する処理と、を実行することにより、第1暗号ヘッダブロック乃至第M暗号ヘッダブロックを生成し、
前記パケット生成手段は、
前記第1暗号ヘッダブロック乃至前記第M暗号ヘッダブロック、前記イニシャルベクトル、及び前記n個の暗号データブロックをこの順に含む暗号パケットを生成する請求項7記載のプログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【公開番号】特開2009−239641(P2009−239641A)
【公開日】平成21年10月15日(2009.10.15)
【国際特許分類】
【出願番号】特願2008−83433(P2008−83433)
【出願日】平成20年3月27日(2008.3.27)
【出願人】(000003078)株式会社東芝 (54,554)
【Fターム(参考)】
【公開日】平成21年10月15日(2009.10.15)
【国際特許分類】
【出願日】平成20年3月27日(2008.3.27)
【出願人】(000003078)株式会社東芝 (54,554)
【Fターム(参考)】
[ Back to top ]