(57)【特許請求の範囲】
【請求項１】
所定の乱数列生成アルゴリズムに従って乱数列を順序付けて生成し、データ順序が定められている平文データに対して順序が一致する乱数列を用いて平文データを暗号化する暗号装置から、平文データが暗号化された暗号文データを受信する復号装置であって、
前記暗号装置が用いる乱数列生成アルゴリズムと同じ乱数列生成アルゴリズムに従って乱数列を順序付けて生成する乱数生成部と、
前記乱数生成部により生成されたＮ（Ｎ≧２）個の乱数列をその順序と対応付けて記憶する乱数記憶部と、
前記暗号装置から送信された暗号文データを受信し、受信した暗号文データのデータ順序に一致する順序の乱数列が前記乱数記憶部に記憶されていない場合に、受信した暗号文データのデータ順序が前記乱数記憶部における先頭の順序よりも前の順序であるか最後尾の順序よりも後の順序であるかを判断し、受信した暗号文のデータ順序が前記乱数記憶部における最後尾の順序よりも後の順序の場合は、前記暗号文データのデータ順序に一致する順序の乱数列を含むＮ個の乱数列を生成するよう前記乱数生成部に対して要求する受信部とを有し、
前記乱数生成部は、
前記受信部からＮ個の乱数列の生成を要求された場合に、前記暗号装置が用いる乱数列生成アルゴリズムと同じ乱数列生成アルゴリズムに従って、前記受信部が受信した暗号文データのデータ順序に一致する順序の乱数列を含むＮ個の乱数列を生成し、
前記乱数記憶部は、
記憶しているＮ個の乱数列に代えて、前記乱数生成部により生成された新たなＮ個の乱数列を記憶することを特徴とする復号装置。
【請求項２】
前記受信部は、
前記乱数生成部によりＮ個の乱数列が新たに生成され、前記乱数記憶部により新たなＮ個の乱数列が記憶された後に、受信した暗号文データのデータ順序に一致する順序の乱数列を前記乱数記憶部から読み出すことを特徴とする請求項１に記載の復号装置。
【請求項３】
前記受信部は、
受信した暗号文のデータ順序が前記乱数記憶部における先頭の順序よりも前の順序の場合は、受信した暗号文データを破棄することを特徴とする請求項１又は２に記載の復号装置。
【請求項４】
所定の乱数列生成アルゴリズムに従って乱数列を順序付けて生成し、データ順序が定められている平文データに対して順序が一致する乱数列を用いて平文データを暗号化する暗号装置から、平文データが暗号化された暗号文データを受信する復号装置であって、
前記暗号装置が用いる乱数列生成アルゴリズムと同じ乱数列生成アルゴリズムに従って乱数列を順序付けて生成する乱数生成部と、
前記乱数生成部により生成されたＮ（Ｎ≧２）個の乱数列をその順序と対応付けて記憶する乱数記憶部と、
前記暗号装置から送信された暗号文データを受信し、受信した暗号文データのデータ順序に一致する順序の乱数列を前記乱数記憶部から読み出すとともに、受信した暗号文データのデータ順序から値Ｎを減じた値よりも前の順序の乱数列が前記乱数記憶部に記憶されているか否かを判定し、当該乱数列が前記乱数記憶部に記憶されている場合に、当該乱数列を無効化し、前記乱数生成部に対して、受信した暗号文データに対して読み出した乱数列の代わりとなる新たな乱数列の生成を要求するとともに、無効化した乱数列の代わりとなる新たな乱数列の生成を要求する受信部とを有し、
前記乱数生成部は、
前記受信部から新たな乱数列の生成が要求された場合に、前記暗号装置が用いる乱数列生成アルゴリズムと同じ乱数列生成アルゴリズムに従って、前記乱数記憶部における最後尾の順序の後の順序に対応する乱数列を生成し、
前記乱数記憶部は、
前記受信部が前記暗号文データに対して読み出した乱数列及び前記受信部が無効化した乱数列に代えて、前記乱数生成部により新たに生成された乱数列を記憶することを特徴とする復号装置。
【請求項５】
前記乱数生成部は、
一つ前の順序の乱数列の生成過程において生成された中間鍵を更新して次の中間鍵を生成し、生成した次の中間鍵の少なくとも一部を用いて次の順序の乱数列を生成し、以降、中間鍵の更新と乱数列の生成を繰り返して、乱数列を順序付けて生成することを特徴とする請求項１〜４のいずれかに記載の復号装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号化された暗号文データを復号して平文データを抽出する復号装置に関する。
【背景技術】
【０００２】
共通鍵を用いた暗号化方式は、一定のブロック単位で暗号化するブロック暗号と、ビット単位のストリーム暗号に大別される。
これらの暗号化方式に対して、ネットワーク上のパケットをルータ等の中継装置で暗号化する方式としてはブロック暗号を利用することが多く、例えばブロック暗号を用いたＩＰｓｅｃ（ＩＰ  ｓｅｃｕｒｉｔｙ）で高速にパケットを暗号化する方式として特許文献１（特開２００４−１８０２３４号公報）に記載の技術がある。
【０００３】
他方、ストリーム暗号は共通鍵やＩＶ（Ｉｎｉｔｉａｌｉｚａｔｉｏｎ  Ｖｅｃｔｏｒ）の設定等の初期化を一度実施した後は高いスループットで乱数を生成できる、ブロックサイズを一致させるためのパディングが不要なため伝送効率が高いといった利点があり、ネットワークの中継装置に用いる場合もある。
以下、一般的なストリーム暗号と、ネットワーク上のパケットをストリーム暗号で暗号化する中継装置を説明する。
【０００４】
図６は、一般的なストリーム暗号の構造を示すものである。
【０００５】
最初に、構成を説明する。
１０１は、乱数生成部である。乱数生成部１０１は、中間鍵１１１、更新関数１１２、出力関数１１３で構成される。
１０２は、平文データである。
１０３は、暗号文データである。
１０４は、共通鍵とＩＶである。
１０５は、クロックである。
１０６は、乱数列である。乱数列１０６は、出力関数１１３から出力される乱数性の高いビット列である。
１０７はＸＯＲ（ｅＸｃｌｕｓｉｖｅ  ＯＲ）部である。ＸＯＲ部１０７は、乱数列と平文データの排他的論理和を行うことで暗号文データを生成する。
【０００６】
なお、図６は平文データを暗号化する際の構成を表しているが、暗号文データを復号する際も構成は同一で、図６中の平文データ１０２と暗号文データ１０３の位置を入れ替えた構成となる。
【０００７】
次に、動作を説明する。
まず共通鍵とＩＶ１０４、及び中間鍵１１１に適切な初期値を設定する。
次に、更新関数１１２は、共通鍵とＩＶ１０４、中間鍵１１１を入力として、クロック１０５が与えられる都度、新たな中間鍵１１１を出力として生成し、それまでの中間鍵１１１を更新していく。
出力関数１１３は、中間鍵１１１の一部を乱数列１０６として出力する。
ＸＯＲ部１０７は、乱数列１０６と平文データ１０２の排他的論理和を行い暗号文データ１０３として出力する。
このようにクロック１０５が与えられる都度、更新関数１１２で中間鍵１１１を更新しながら乱数列１０６を生成し、それと平文データ１０２の排他的論理和をとることで暗号文パケット１０３を出力する。
【０００８】
ストリーム暗号は、一度出力した乱数を再度出力するためには再度中間鍵とＩＶを与えて所定の回数のクロックを与える必要がある。
当該の乱数を再出力するために与えるクロックの回数は一連の乱数列から当該の乱数を取り出した位置によって増減し、乱数列の生成を続けて後方に進むほど再度出力するのに時間が必要となる。
【０００９】
またストリーム暗号は、一連の乱数列を順番に出力していくため一部の乱数を飛ばしてその先の乱数を生成するような動作は困難である。
このような場合は、まず飛ばしたい部分の乱数を生成し、次に所望の乱数を生成する。飛ばした部分の乱数を後に使用する場合は、これを保管しておく必要がある。
【００１０】
図７は、ストリーム暗号で暗号化されたパケットを中継する一般的なストリーム暗号パケット中継装置を示すものである。
【００１１】
最初に、構成を説明する。
２０１は、パケットを暗号化する中継装置である（以下、単に暗号装置ともいう）。
２１１は、パケットを復号する中継装置である（以下、単に復号装置ともいう）。
２０２と２１２は、それぞれ暗号装置と復号装置の受信部である。
２０３と２１３は、それぞれ暗号装置と復号装置のＸＯＲ部である。
２０４と２１４は、それぞれ暗号装置と復号装置の送信部である。
２０５と２１５は、それぞれ暗号装置と復号装置のクロック生成部である。
２０６と２１６は、それぞれ暗号装置と復号装置の乱数生成部である。乱数生成部
２０６、２１６の構造と動作は図６の乱数生成部１０１で説明した通りである。
２０７と２１７は、それぞれ暗号装置と復号装置の乱数列である。
２０８と２１８は、それぞれ暗号装置と復号装置が使用する共通鍵とＩＶである。
２１９は、復号装置の順序制御部である。
２２０は、復号装置の乱数バッファである。
２３１は、平文パケットである。
２３２は、暗号文パケットである。
２３３は、暗号文パケット２３２を転送するネットワークである。
【００１２】
次に、暗号装置２０１と復号装置２１１の動作を説明する。
【００１３】
まず、暗号装置２０１と復号装置２１１は暗号化されたパケットで通信を行なう前に両装置の間で共通鍵とＩＶ２０８及び２１８を共有しておく。
なお、両装置が互いに正しく暗号化と復号を行なうために前提となる動作として、暗号装置２０１と復号装置２１１は、ここで共有した単一の共通鍵と単一のＩＶをもとにして生成される一連の乱数列から、受信したパケットの暗号化及び復号に必要な量の乱数を順番に使用していく。
従って、暗号装置２０１と復号装置２１１の両装置において、暗号化するパケットの順番と復号するパケットの順番が一致している必要がある。
【００１４】
次に、暗号装置２０１の動作を説明する。
はじめに、受信部２０２は、平文パケット２３１を受信するとクロック生成部２０５にパケット一個分の乱数列の生成を要求するとともに平文パケット２３１をＸＯＲ部２０３に転送する。
次に、クロック生成部２０５は、パケット一個分のクロックを生成して乱数生成部２０６に出力する。
次に、乱数生成部２０６は、乱数列２０７を出力しＸＯＲ部２０３に転送する。
次に、ＸＯＲ部２０３は、乱数列２０７と平文パケット２３１の排他的論理和をとり暗号文パケット２３２を生成し送信部２０４に転送する。
次に、送信部２０４は、暗号文パケット２３２のヘッダ部分に、パケット毎の転送順序番号（以下、転送番号ともいう）を付与してネットワーク２３３に送信する。
【００１５】
次に、復号装置２１１の動作を説明する。
はじめに、受信部２１２は、暗号文パケット２３２を受信するとパケット毎の転送順序を確認する。
ここでパケットを順序通り受信した場合と、順序が入れ替わって受信した場合の２通りがある。
【００１６】
第一に、パケットを順序通り受信した場合の復号装置２１１の動作を説明する。
はじめに、受信部２１２は、パケットを順序通り受信したことを順序制御部２１９に通知する。加えて受信部２１２は、クロック生成部２１５にパケット一個分の乱数列の生成を要求するとともに暗号文パケット２３２をＸＯＲ部２１３に転送する。
次に、クロック生成部２１５は、パケット一個分のクロックを生成して乱数生成部２１６に出力する。
次に、乱数生成部２１６は、乱数列２１７を出力し順序制御部２１９に転送する。
次に、順序制御部２１９は、受信部２１２からパケットを順序通り受信した通知を受けているため、乱数列２１７をそのままＸＯＲ部２１３に転送する。
次に、ＸＯＲ部２１３は、乱数列２１７と暗号文パケット２３２の排他的論理和をとり平文パケット２３１を生成し送信部２１４に転送する。
次に、送信部２１４は、平文パケット２３１を装置外に送信する。この際、ヘッダ部分に付与されたパケット毎の転送順序番号は削除して元に戻しておく。
【００１７】
第二に、パケットの順序が入れ替わって受信した場合の復号装置２１１の動作を説明する。
なお、この場合の動作は、ネットワーク２３３にて転送経路の切り替えや中継機器のバッファの枯渇等の理由で、パケットの転送順序が入れ替わったり、パケットが消失した場合を想定している。
ここで、あるパケットが他のパケットを追い越して受信した場合と、追い越されたパケットを後になって受信した場合の２通りがある。
【００１８】
第一に、パケットを追い越して受信した場合の復号装置２１１の動作を説明する。
はじめに、受信部２１２は、パケットを追い越して受信したことを順序制御部２１９に通知する。加えて受信部２１２は、クロック生成部２１５に、受信順序が入れ替わって追い抜かされたパケットの個数分の乱数列と、受信したパケット一個分の乱数列の生成を要求するとともに、暗号文パケット２３２をＸＯＲ部２１３に転送する。
次に、クロック生成部２１５は、受信順序が入れ替わって追い抜かされたパケットの個数分のクロックとパケット一個分のクロックを生成して乱数生成部２１６に出力する。
次に、乱数生成部２１６は、乱数列２１７を出力し順序制御部２１９に転送する。ここではパケットの転送順序の追い越しが発生しているため、まず追い抜かれたパケットの復号に必要な乱数列２１７を生成し、次に当該のパケットの復号に必要な乱数列２１７を生成する。
次に、順序制御部２１９は、受信部２１２からパケットを追い越して受信した通知を受けているため、まず追い抜かれたパケットの復号に必要な乱数列２１７を乱数バッファ２２０に格納し、続いて当該のパケットの復号に必要な乱数列２１７をＸＯＲ部２１３に転送する。
次に、ＸＯＲ部２１３は、当該のパケットの復号に必要な乱数列２１７と暗号文パケット２３２の排他的論理和をとり平文パケット２３１を生成し送信部２１４に転送する。
次に、送信部２１４は、平文パケット２３１を装置外に送信する。この際、ヘッダ部分に付与されたパケット毎の転送順序番号は削除して元に戻しておく。
【００１９】
第二に、追い越されたパケットを後になって受信した場合の復号装置２１１の動作を説明する。
はじめに、受信部２１２は、追い越されたパケットを受信したことを順序制御部２１９に通知する。加えて受信部２１２は、暗号文パケット２３２をＸＯＲ部２１３に転送する。なお当該のパケットの復号に必要な乱数列２１７は乱数バッファ２２０に既に格納されているため、受信部２１２はクロック生成部２１５に乱数列の生成を要求しない。
次に、順序制御部２１９は、受信部２１２から追い越されたパケットを受信した通知を受けているため、当該のパケットの復号に必要な乱数列２１７を乱数バッファ２２０から読み出してＸＯＲ部２１３に転送する。
次に、ＸＯＲ部２１３は、当該のパケットの復号に必要な乱数列２１７と暗号文パケット２３２の排他的論理和をとり平文パケット２３１を生成し送信部２１４に転送する。
次に、送信部２１４は、平文パケット２３１を装置外に送信する。この際、ヘッダ部分に付与されたパケット毎の転送順序番号は削除して元に戻しておく。
【特許文献１】特開２００４−１８０２３４号公報
【発明の開示】
【発明が解決しようとする課題】
【００２０】
ネットワーク上に配置された中継装置間をストリーム暗号によって暗号化されたパケットで通信する際に、暗号装置がパケットを送信する順序と、復号装置がパケットを受信する順序が入れ替わり、復号装置においてあるパケットが他のパケットを追い越して受信すると、復号装置は受信したパケットの復号に必要な乱数列の生成に加えて、追い抜かされたパケットの復号に必要な乱数列も生成する必要がある。
このように追い越しが発生した場合、追い越しが発生しない通常の状態に比較して遅延が著しく増加して中継性能が落ち込むという課題がある。
【００２１】
この発明は上記のような課題を解決することを主な目的の一つとしており、暗号文データの到着順序が入れ替わっても復号装置において遅延なく暗号文データを復号することを主な目的とする。
【課題を解決するための手段】
【００２２】
本発明に係る復号装置は、
所定の乱数列生成アルゴリズムに従って乱数列を順序付けて生成し、データ順序が定められている平文データに対して順序が一致する乱数列を用いて平文データを暗号化する暗号装置から、平文データが暗号化された暗号文データを受信する復号装置であって、
前記暗号装置が用いる乱数列生成アルゴリズムと同じ乱数列生成アルゴリズムに従って乱数列を順序付けて生成する乱数生成部と、
前記乱数生成部により生成された複数の乱数列をその順序と対応付けて記憶する乱数記憶部と、
乱数列を用いて暗号文データを復号して平文データを抽出する復号部と、
前記暗号装置から送信された暗号文データを受信し、受信した暗号文データのデータ順序に一致する順序の乱数列を前記乱数記憶部から読み出し、読み出した乱数列と前記暗号文データとを前記復号部に出力するとともに、前記乱数生成部に対して新たな乱数列の生成を要求する受信部とを有し、
前記乱数生成部は、
前記受信部から新たな乱数列の生成が要求された場合に、前記暗号装置が用いる乱数列生成アルゴリズムと同じ乱数列生成アルゴリズムに従って、前記乱数記憶部における最後尾の順序の後の順序に対応する乱数列を生成し、
前記乱数記憶部は、
前記受信部が前記暗号文データに対して読み出した乱数列に代えて、前記乱数生成部により新たに生成された乱数列を記憶することを特徴とする。
【発明の効果】
【００２３】
本発明によれば、複数の乱数列を保持するとともに、受信した暗号文データの復号に用いるために乱数列を読み出した場合には、新たに乱数列を生成して補充することによって暗号文データの復号に使用すると予想される複数の乱数列を常に保持することができ、暗号文データの到着順序が入れ替わっても遅延なく暗号文データを復号することができる。
【発明を実施するための最良の形態】
【００２４】
実施の形態１．
図１は、本実施の形態に係る復号装置３１１の構成例を示す。
本実施の形態に係る復号装置３１１は、ストリーム暗号で暗号化されたパケットを中継するストリーム暗号パケット中継装置において用いられる。
なお、本復号装置３１１と対になる暗号装置の構成と動作は、図６及び図７を参照して背景技術において説明した通りである。
つまり、本実施の形態に係る復号装置３１１と対になる暗号装置は、所定の乱数列生成アルゴリズムに従って乱数列を順序付けて生成し、データ順序が定められている平文パケット（平文データ）に対して順序が一致する乱数列を用いて平文パケットを暗号化する暗号装置である。
そして、本実施の形態に係る復号装置３１１は、当該暗号装置から、平文パケットが暗号化された暗号文パケット（暗号文データ）を受信し、暗号文パケットのデータ順序に一致する順序の乱数列を用いて復号処理を行う。
【００２５】
最初に、本実施の形態における復号装置３１１の構成を説明する。
３１２は、復号装置３１１の受信部である。
３１３は、復号装置３１１のＸＯＲ部である。
３１４は、復号装置３１１の送信部である。
３１５は、復号装置３１１のクロック生成部である。
３１６は、復号装置３１１の乱数生成部である。乱数生成部３１６の構造と動作は図６の乱数生成部１０１で説明した通りである。
【００２６】
３１７は、復号装置３１１の乱数列である。
３１８は、復号装置３１１の共通鍵とＩＶである。
３２０は、復号装置３１１の乱数バッファである。乱数バッファ３２０はパケットを復号するための乱数列を格納するためのバッファであり、Ｎ（Ｎ≧２）個のパケットの乱数列を格納できるものとする。
３２１は、復号装置３１１の転送番号管理バッファである。転送番号管理バッファ３２１はパケットの転送番号を格納するためのバッファであり、Ｎ個のパケットの転送番号を格納できるものとする。
３２２は、復号装置３１１の最大転送番号レジスタである。最大転送番号レジスタ３２２はその内容が転送番号管理バッファ３２１に格納されたＮ個の転送番号の中で最も大きい番号（最後尾の順序の番号）を示すレジスタである。なお、最大転送番号レジスタで管理されているＮ個の転送番号の中で最も大きい番号をｉｍａｘとも表記する。
３３１は、平文パケットである。
３３２は、暗号文パケットである。暗号文パケット３３２には、ヘッダ部分に転送番号が示されている。
【００２７】
図１の構成において、乱数生成部３１６は、暗号装置が用いる乱数列生成アルゴリズムと同じ乱数列生成アルゴリズムに従って乱数列３１７を順序付けて生成する。つまり、乱数生成部３１６は、背景技術において説明したように、一つ前の乱数列の生成過程において生成された中間鍵を更新して次の中間鍵を生成し、生成した次の中間鍵の少なくとも一部を用いて次の乱数列を生成し、以降、中間鍵の更新と乱数列の生成を繰り返して、乱数列を順序付けて生成する。
乱数バッファ３２０は、乱数生成部３１６により生成された複数の乱数列３１７をその順序と対応付けて記憶する。乱数バッファ３２０は、乱数記憶部の例である。
受信部３１２は、暗号装置から送信された暗号文パケット３３２を受信し、受信した暗号文パケットの転送番号（データ順序）に一致する順序の乱数列を乱数バッファ３２０から読み出し、読み出した乱数列と暗号文パケット３３２とをＸＯＲ部３１３に出力するとともに、クロック生成部３１５を介して乱数生成部３１６に対して新たな乱数列の生成を要求する。
ＸＯＲ部３１３は、受信部３１２から出力された乱数列を用いて暗号文パケット３３２を復号して平文パケット３３１を抽出する。ＸＯＲ部３１３は、復号部の例である。
また、乱数生成部３１６は、受信部３１２から新たな乱数列の生成が要求された場合に、暗号装置が用いる乱数列生成アルゴリズムと同じ乱数列生成アルゴリズムに従って、乱数バッファ３２０における最後尾の順序の後の順序に対応する乱数列を生成し、乱数バッファ３２０は、受信部３１２が暗号文パケット３３２に対して読み出した乱数列に代えて、乱数生成部３１６により新たに生成された乱数列を記憶する。
【００２８】
図２は、本実施の形態に係る復号装置の、乱数バッファ３２０と転送番号管理バッファ３２１の関係を示すものである。
転送番号管理バッファ３２１では、パケットの転送番号を記憶しており、乱数バッファでは転送番号管理バッファ３２１における転送番号の順序に対応させて、それぞれの転送番号のパケットの復号に用いられる乱数列が記憶されている。
このように、乱数バッファ３２０では、複数の乱数列を、パケットの転送番号（データ順序）に対応させて、順序付けて記憶している。
【００２９】
次に、本実施の形態における復号装置３１１の動作を説明する。
【００３０】
まず、復号装置３１１は暗号化されたパケットで通信を行う前に対となる暗号装置との間で共通鍵とＩＶ３１８を共有しておく。
また、復号装置３１１が対となる暗号装置と互いに正しく暗号化と復号を行うために前提となる動作として、復号装置３１１は、ここで共有した単一の共通鍵と単一のＩＶをもとにして生成される一連の乱数列から、受信したパケットの復号に必要な量の乱数列を順番に使用していく。
【００３１】
さらに、パケットの通信を行う前の準備として、復号装置３１１は最初に受信するＮ個分のパケットの乱数列を事前に生成し乱数バッファ３２０に格納しておく。
そして、復号装置３１１は、転送番号管理バッファ３２１に、乱数を準備したＮ個のパケットのそれぞれの転送番号を格納しておく。
【００３２】
以上の手順が完了すると、復号装置３１１は、暗号装置から送信された暗号文パケット３３２を受信することができる。
以下、復号装置３１１が暗号文パケット３３２を受信し、暗号文パケット３３２の復号を行う際の処理例を図３及び図４を参照して説明する。
【００３３】
まず、復号装置３１１が暗号文パケット３３２を受信する（Ｓ１０１）と、受信部３１２は受信したパケット毎の転送順序（ここではｉとする）を転送番号管理バッファ３２１に存在するか否かを確認する（Ｓ１０２）。
ここで、確認の結果、（１）受信したパケットの転送番号と一致する転送番号が転送番号管理バッファ３２１に存在する場合と、（２）受信したパケットの転送番号と一致する転送番号が存在せずかつ受信したパケットの転送番号が転送番号管理バッファ３２１に格納されたＮ個の転送番号のいずれかよりも小さい場合（受信したバケットの転送番号がＮ個の転送番号のうちの先頭の順序のものよりも前の順序である場合）と、（３）受信したパケットの転送番号と一致する転送番号が存在せずかつ受信したパケットの転送番号が当該のバッファに格納されたＮ個の転送番号のいずれかよりも大きい場合（受信したバケットの転送番号がＮ個の転送番号のうちの最後尾の順序のものよりも後の順序である場合）の、３通りがある。
【００３４】
第一に、受信したパケットの転送番号に一致する転送番号が転送番号管理バッファ３２１に存在する場合（Ｓ１０２でＹＥＳ）は、受信部３１２は、転送番号管理バッファ３２１のなかに転送番号がｉからＮを引いた数より小さいものがある場合（Ｓ１０３でＹＥＳ）は、それを無効にする（ここではｊ個が無効化されたとする）（Ｓ１０４）。
なお、この場合の動作は、暗号装置が送信したパケットが何らかの理由でネットワーク上から消失したり、悪意を持った第三者が一度ネットワーク上に転送されたパケットを再送したりするような状況を想定している。復号装置３１１が一定時間を経過しても受信できなかったパケットの乱数列を無効にする動作である。
【００３５】
例えば、図５（ａ）〜（ｃ）に示す経緯で暗号文パケットが受信された場合は、図５（ｃ）において転送番号１１に対応する乱数列は無効化される。
具体的には、Ｎ＝５の場合に、転送番号１１〜１５に対応する乱数列が乱数バッファ３２０に格納されているときに転送番号１２（ｉ＝１２）のパケットを受信した場合（図５（ａ））は、（ｉ−Ｎ）は、１２−５＝７となり、すべての転送番号が（ｉ−Ｎ）よりも値が大きいので、無効化される乱数列はない。
そして、次の番号である転送番号１６に対応する乱数列が生成され、転送番号１２の乱数列が格納されていた位置に転送番号１６に対する乱数列が格納される。そして、この状態で、転送番号１３（ｉ＝１３）のパケットを受信した場合（図５（ｂ））も、（ｉ−Ｎ）は、１３−５＝８となり、すべての転送番号が（ｉ−Ｎ）よりも値が大きいので、無効化される乱数列はない。
そして、次の番号である転送番号１７に対応する乱数列が生成され、転送番号１３の乱数列が格納されていた位置に転送番号１７に対する乱数列が格納される。そして、この状態で、転送番号１７（ｉ＝１７）のパケットを受信した場合（図５（ｃ））は、（ｉ−Ｎ）は、１７−５＝１２となり、転送番号１１が（ｉ−Ｎ）の値よりも小さいので、転送番号１１に対する乱数列が無効化される。
【００３６】
一方、転送番号が（ｉ−Ｎ）よりも小さいものがない場合（Ｓ１０３でＮＯ）は、受信部３１２は、当該のパケットの復号に必要な乱数列をパケットの転送番号をもとにして乱数バッファ３２０から読みだしＸＯＲ部３１３に転送する（Ｓ１０５）。
さらに、受信部３１２は、クロック生成部３１５にパケット一個分の乱数列の生成を要求する（Ｓ１０６）とともに暗号文パケット３３２をＸＯＲ部３１３に転送する（Ｓ１０７）。
ここで生成を要求する乱数列は、今後受信することとなるパケット一個分の復号に必要な乱数列であるが、もしＳ１０４の動作において無効化した転送番号がある場合は、さらにパケットｊ個分の乱数列も要求する。
【００３７】
次に、受信部３１２は、転送番号管理バッファ３２１のなかで転送番号がｉの要素（領域）を、最大転送番号レジスタ３２２が示す値（ｉｍａｘ）にさらに１を加えた値に変更する（Ｓ１０８）。
もしＳ１０４の動作において無効化した転送番号がある場合は、無効化したｊ個の要素を、最大転送番号レジスタ３２２が示す値（ｉｍａｘ）にそれぞれ２からｊ＋１ずつ加えた値に変更する。
【００３８】
次に、受信部３１２は、最大転送番号レジスタ３２２の値（ｉｍａｘ）に１を加える（Ｓ１０９）。
もしＳ１０４の動作において無効化した転送番号がある場合は、さらにｊを加える。
【００３９】
次に、ＸＯＲ部３１３は、当該のパケットの復号に必要な乱数列と暗号文パケット３３２の排他的論理和をとり平文パケット３３１を生成し送信部３１４に転送する（Ｓ１１０）。
次に、送信部３１４は、平文パケット３３１を装置外に送信する。この際、ヘッダ部分に付与されたパケット毎の転送順序番号は削除して元に戻しておく。
【００４０】
次に、クロック生成部３１５は、パケット一個分のクロックを生成して乱数生成部３１６に出力する。なお、もしＳ１０４の動作において無効化した転送番号がある場合は、これにパケットｊ個分のクロックを加えて生成する。
【００４１】
次に、乱数生成部３１６は、乱数列３１７を生成し（Ｓ１１１）、受信部３１２に転送する。
【００４２】
次に、受信部３１２は、乱数列３１７を乱数バッファ３２０に書き込む（Ｓ１１２）。
このときに乱数バッファ３２０のなかで乱数列３１７を書き込む場所は、これまでパケットの転送番号がｉのパケットの乱数列が格納されていた場所である。
もしＳ１０４の動作において無効化した転送番号がある場合は乱数列３１７にはさらにパケットｊ個分の乱数列が含まれるが、乱数バッファ３２０のなかでこれらのパケットｊ個分の乱数列を書き込む場所は、転送番号管理バッファ３２１で新たに２からｊ＋１の値を書き込んだ要素に対応する乱数バッファ内の位置で、受信部３１２はそれぞれの位置にｊ個の乱数列を生成した順に書き込む。
【００４３】
第二に、受信したパケットの転送番号が転送番号管理バッファ３２１に格納されたＮ個の転送番号のいずれかよりも小さい場合、すなわちＳ１０２でＮＯであり、Ｓ１１３で小の場合は、受信部３１２は受信したパケットを復号せずに廃棄する（Ｓ１１４）。
なお、この場合の動作は、当該のパケットが暗号装置から送信されてから必要以上の時間を経過した後に復号装置が受信したもので通常起こりうる状況ではない。
悪意を持った第三者がパケットを再送したりすることを考慮して当該のパケットを廃棄する動作である。
【００４４】
第三に、受信したパケットの転送番号が転送番号管理バッファ３２１に格納されたＮ個の転送番号のいずれかよりも大きい場合、すなわちＳ１０２でＮＯであり、Ｓ１１３で大の場合は、受信部３１２は、受信したパケットを復号するための乱数列を含み、かつ転送番号が連続するパケットＮ個分の乱数列を新たに生成し、乱数バッファ３２０の内容を入れ替える。
なお、この場合の動作は、ケーブルの断線等で暗号装置から送信された暗号文パケットが一定の期間ネットワーク上で廃棄されていたことを考慮した動作である。
以下、詳細に動作を説明する。
【００４５】
まず、受信部３１２は、クロック生成部３１５にパケットＮ個分の乱数列の生成を要求する（Ｓ１１５）。
ここで、生成を要求する乱数列は、受信した当該のパケットを復号するための乱数列を含み、かつ転送番号が連続するパケットＮ個分の乱数列である。
なお、転送番号が連続するＮ個のパケットのそれぞれの転送番号をＭ、Ｍ＋１、・・・、Ｍ＋Ｎ−１とする。
受信したパケットの転送番号ｉは、このうちのどれかに一致することになる。
さらに受信部３１２は、転送番号管理バッファ３２１に、新たに乱数を準備するＮ個のパケットのそれぞれの転送番号Ｍ、Ｍ＋１、・・・、Ｍ＋Ｎ−１を格納する（Ｓ１１６）。つまり、転送番号管理バッファ３２１のＮ個の要素をＭ〜Ｍ＋Ｎ−１の転送番号に対応させるように変更する。
【００４６】
このときの乱数生成部３１６は、それまでの自身の内部状態は、転送番号が最大転送番号レジスタ３２２が示す値となるパケットを復号するための乱数列を生成する状態を保持している。
これに対してクロック生成部３１５は、乱数生成部３１６にクロックを継続して与えて転送番号がＭのパケットを復号するための乱数列を生成する状態に遷移させる。
なお受信部３１２は、この間に生成される乱数列は破棄する。
次に、クロック生成部３１５は、パケットＮ個分のクロックを生成して乱数生成部３１６に出力する。
【００４７】
次に、乱数生成部３１６は、乱数列３１７を生成し（Ｓ１１７）、受信部３１２に転送する。
【００４８】
次に、受信部３１２は、乱数列３１７を乱数バッファ３２０に書き込む（Ｓ１１８）。
このときに乱数バッファ３２０のなかでパケットＮ個分の乱数に相当する乱数列３１７を書き込む場所は、転送番号管理バッファ３２１で新たにＭからＭ＋（Ｎ−１）の値を書き込んだ要素に対応する乱数バッファ内の位置で、乱数生成部はそれぞれの位置にＮ個の乱数列を生成した順に書き込む。
次に、受信部３１２は、最大転送番号レジスタ３２２の内容をＭ＋（Ｎ−１）に変更する（Ｓ１１９）。
【００４９】
次に、受信部３１２は暗号文パケット３３２をＸＯＲ部３１３に転送する。
また、受信部３１２は、当該のパケットの復号に必要な乱数列３１７をパケットの転送番号をもとにして乱数バッファ３２０から読みだしＸＯＲ部３１３に転送する（Ｓ１０５）。
【００５０】
次に、受信部３１２は、クロック生成部３１５にパケット一個分の乱数列の生成を要求する（Ｓ１０６）。
ここで生成を要求する乱数列は、今後受信することとなる転送番号がＭ＋Ｎのパケットの復号に必要な乱数列である。
さらに受信部３１２は、転送番号管理バッファ３２１のうち転送番号がｉの要素を、最大転送番号レジスタ３２２が示す値（ｉｍａｘ）にさらに１を加えた値に変更する（Ｓ１０８）。
【００５１】
次に、ＸＯＲ部３１３は、当該のパケットの復号に必要な乱数列と暗号文パケット３３２の排他的論理和をとり平文パケット３３１を生成し送信部３１４に転送する（Ｓ１１０）。
次に、送信部３１４は、平文パケット３３１を装置外に送信する。この際、ヘッダ部分に付与されたパケット毎の転送順序番号は削除して元に戻しておく。
【００５２】
次に、クロック生成部３１５は、パケット一個分のクロックを生成して乱数生成部３１６に出力する。
【００５３】
次に、乱数生成部３１６は、乱数列３１７を生成し（Ｓ１１１）、受信部３１２に転送する。
【００５４】
次に、受信部３１２は、乱数列３１７を乱数バッファ３２０に書き込む（Ｓ１１２）。
このときに乱数バッファ３２０のなかで乱数列３１７を書き込む場所は、これまでパケットの転送番号がｉのパケットの乱数列が格納されていた場所である。
【００５５】
復号装置３１１がパケットの復号する際の遅延を少なくするには、なるべくＳ１０２でＹＥＳとなる第一のケースで動作できるようにする必要がある。
このため、乱数バッファ３２０が格納する乱数列の量には、暗号装置から復号装置３１１にパケットが到着するまでの遅延や、両装置の間に存在するルータ等の中継機器等の影響を考慮して、それぞれのネットワークに適切となるように選択する。
【００５６】
以上のように、本実施の形態によれば、復号装置の、乱数バッファを複数のパケットの乱数列を格納できるように、転送番号管理バッファと最大転送番号を当該のパケットが既に受信済か否かを把握できるように、またそれを把握したことによって受信部が乱数バッファを更新できるように構成することで、復号装置でパケットの到着順序が入れ替わっても、当該パケットを復号するための乱数列が乱数バッファに用意されている範囲であれば、遅延を増すことなくパケットを復号して中継することができる。
【００５７】
以上、本実施の形態では、常に乱数生成部から生成された一定量の乱数列を所定のバッファに準備しておき、パケットを受信してバッファにある乱数列を復号で使用したら、乱数生成部で新たに乱数列を生成してバッファに補充することによって、パケットの到着順序が入れ替わっても遅延を増すことなくストリーム暗号で暗号化されたパケットを復号することができる復号装置について説明した。
【００５８】
なお、以上の説明では、復号装置としてＩＰｓｅｃ等における中継装置を例示しつつ説明を行ったが、復号装置はパケットの最終的な受信装置であってもよい。
【００５９】
最後に、本実施の形態に示した復号装置３１１のハードウェア構成例について説明する。
図８は、本実施の形態に示す復号装置３１１のハードウェア資源の一例を示す図である。
なお、図８の構成は、あくまでも復号装置３１１のハードウェア構成の一例を示すものであり、復号装置３１１のハードウェア構成は図８に記載の構成に限らず、他の構成であってもよい。
【００６０】
図８において、復号装置３１１は、プログラムを実行するＣＰＵ９１１（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサともいう）を備えている。
ＣＰＵ９１１は、バス９１２を介して、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）９１３、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）９１４、通信ボード９１５、表示装置９０１、キーボード９０２、マウス９０３、磁気ディスク装置９２０と接続され、これらのハードウェアデバイスを制御する。
更に、ＣＰＵ９１１は、ＦＤＤ９０４（Ｆｌｅｘｉｂｌｅ  Ｄｉｓｋ  Ｄｒｉｖｅ）、コンパクトディスク装置９０５（ＣＤＤ）、プリンタ装置９０６、スキャナ装置９０７と接続していてもよい。また、磁気ディスク装置９２０の代わりに、光ディスク装置、メモリカード（登録商標）読み書き装置などの記憶装置でもよい。
ＲＡＭ９１４は、揮発性メモリの一例である。ＲＯＭ９１３、ＦＤＤ９０４、ＣＤＤ９０５、磁気ディスク装置９２０の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置の一例である。
通信ボード９１５、キーボード９０２、マウス９０３、スキャナ装置９０７、ＦＤＤ９０４などは、入力装置の一例である。
また、通信ボード９１５、表示装置９０１、プリンタ装置９０６などは、出力装置の一例である。
【００６１】
通信ボード９１５は、ネットワークに接続されている。例えば、通信ボード９１５は、ＬＡＮ（ローカルエリアネットワーク）、インターネット、ＷＡＮ（ワイドエリアネットワーク）などに接続されている。
【００６２】
磁気ディスク装置９２０には、オペレーティングシステム９２１（ＯＳ）、ウィンドウシステム９２２、プログラム群９２３、ファイル群９２４が記憶されている。
プログラム群９２３のプログラムは、ＣＰＵ９１１がオペレーティングシステム９２１、ウィンドウシステム９２２を利用しながら実行する。
【００６３】
また、ＲＡＭ９１４には、ＣＰＵ９１１に実行させるオペレーティングシステム９２１のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。
また、ＲＡＭ９１４には、ＣＰＵ９１１による処理に必要な各種データが格納される。
【００６４】
また、ＲＯＭ９１３には、ＢＩＯＳ（Ｂａｓｉｃ  Ｉｎｐｕｔ  Ｏｕｔｐｕｔ  Ｓｙｓｔｅｍ）プログラムが格納され、磁気ディスク装置９２０にはブートプログラムが格納されている。
復号装置３１１の起動時には、ＲＯＭ９１３のＢＩＯＳプログラム及び磁気ディスク装置９２０のブートプログラムが実行され、ＢＩＯＳプログラム及びブートプログラムによりオペレーティングシステム９２１が起動される。
【００６５】
上記プログラム群９２３には、本実施の形態の説明において「〜部」として説明している機能を実行するプログラムが記憶されている。プログラムは、ＣＰＵ９１１により読み出され実行される。
【００６６】
ファイル群９２４には、本実施の形態の説明において、「〜の判断」、「〜の計算」、「〜の演算」、「〜の比較」、「〜の生成」、「〜の更新」、「〜の設定」、「〜の登録」、「〜の選択」等として説明している処理の結果を示す情報やデータや信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」の各項目として記憶されている。
「〜ファイル」や「〜データベース」は、ディスクやメモリなどの記録媒体に記憶される。ディスクやメモリなどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ９１１によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・処理・編集・出力・印刷・表示などのＣＰＵの動作に用いられる。
抽出・検索・参照・比較・演算・計算・処理・編集・出力・印刷・表示のＣＰＵの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリ、レジスタ、キャッシュメモリ、バッファメモリ等に一時的に記憶される。
また、本実施の形態で説明しているフローチャートの矢印の部分は主としてデータや信号の入出力を示し、データや信号値は、ＲＡＭ９１４のメモリ、ＦＤＤ９０４のフレキシブルディスク、ＣＤＤ９０５のコンパクトディスク、磁気ディスク装置９２０の磁気ディスク、その他光ディスク、ミニディスク、ＤＶＤ等の記録媒体に記録される。また、データや信号は、バス９１２や信号線やケーブルその他の伝送媒体によりオンライン伝送される。
【００６７】
また、本実施の形態の説明において「〜部」として説明しているものは、「〜回路」、「〜装置」、「〜機器」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。すなわち、「〜部」として説明しているものは、ＲＯＭ９１３に記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェアのみ、或いは、素子・デバイス・基板・配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、ＤＶＤ等の記録媒体に記憶される。プログラムはＣＰＵ９１１により読み出され、ＣＰＵ９１１により実行される。すなわち、プログラムは、本実施の形態の「〜部」としてコンピュータを機能させるものである。あるいは、本実施の形態の「〜部」の手順や方法をコンピュータに実行させるものである。
【００６８】
このように、本実施の形態に示す復号装置３１１は、処理装置たるＣＰＵ、記憶装置たるメモリ、磁気ディスク等、入力装置たるキーボード、マウス、通信ボード等、出力装置たる表示装置、通信ボード等を備えるコンピュータであり、上記したように「〜部」として示された機能をこれら処理装置、記憶装置、入力装置、出力装置を用いて実現するものである。
【図面の簡単な説明】
【００６９】
【図１】実施の形態１に係る復号装置の構成例を示す図。
【図２】実施の形態１に係る復号装置の乱数バッファと転送番号管理バッファとの関係を説明する図。
【図３】実施の形態１に係る復号装置の動作例を示すフローチャート図。
【図４】実施の形態１に係る復号装置の動作例を示すフローチャート図。
【図５】実施の形態１に係る復号装置において乱数列が無効化される例を説明する図。
【図６】一般的なストリーム暗号の暗号装置の構成例を示す図。
【図７】一般的なストリーム暗号パケット中継装置を示す図。
【図８】実施の形態１に係る復号装置のハードウェア構成例を示す図。
【符号の説明】
【００７０】
３１１  復号装置、３１２  受信部、３１３  ＸＯＲ部、３１４  送信部、３１５  クロック生成部、３１６  乱数生成部、３１７  乱数列、３１８  共通鍵・ＩＶ、３２０  乱数バッファ、３２１  転送番号管理バッファ、３２２  最大転送番号レジスタ、３３１  平文パケット、３３２  暗号文パケット。
【図１】
0005100497.tif 000002
【図２】
0005100497.tif 000003
【図３】
0005100497.tif 000004
【図４】
0005100497.tif 000005
【図５】
0005100497.tif 000006
【図６】
0005100497.tif 000007
【図７】
0005100497.tif 000008
【図８】
0005100497.tif 000009