(57)【特許請求の範囲】
【請求項１】
第１中間鍵から生成される第１鍵系列を用いて暗号化された暗号文データと、第２中間鍵から生成される第２鍵系列を用いて前記第１中間鍵が暗号化された暗号化第１中間鍵とを受信する受信部と、
暗号文データ及び暗号化第１中間鍵の受信に先立って生成されている第２中間鍵を保存する中間鍵保存部と、
前記中間鍵保存部に保存されている第２中間鍵を用いて第２鍵系列を生成する鍵系列生成部と、
前記鍵系列生成部により生成された第２鍵系列を用いて暗号化第１中間鍵を復号して第１中間鍵とする復号処理部とを有し、
前記鍵系列生成部は、
前記復号処理部により復号された第１中間鍵を用いて第１鍵系列を生成し、
前記復号処理部は、
前記鍵系列生成部により生成された第１鍵系列を用いて暗号文データを復号し、
前記受信部は、
データ順序が定められている複数の暗号文データを順不同に受信し、
前記中間鍵保存部は、
暗号文データのデータ順序に対応づけて複数の第２中間鍵を保存し、
前記復号装置は、更に、
前記受信部により受信された暗号文データのデータ順序を判断する中間鍵更新管理部を有し、
前記鍵系列生成部は、
前記中間鍵保存部に保存されている複数の第２中間鍵のうち前記中間鍵更新管理部により判断されたデータ順序に対応する第２中間鍵を用いて第２鍵系列を生成することを特徴とする復号装置。
【請求項２】
前記鍵系列生成部は、
前記受信部により受信された暗号文データが最新の暗号文データであると前記中間鍵更新管理部により判断された場合に、前記中間鍵保存部に保存されている第２中間鍵を用いて、前記受信部が以降に受信する暗号文データの復号に用いる第２中間鍵を１つ以上生成し、
前記中間鍵保存部は、
前記鍵系列生成部により生成された第２中間鍵を保存することを特徴とする請求項１に記載の復号装置。
【請求項３】
前記中間鍵保存部は、
Ｑ＋Ｓ＋１個（Ｑ≧１、Ｓ≧１）の第２中間鍵を保存可能であり、
前記鍵系列生成部は、
前記受信部が最新の暗号文データを受信する度に、前記受信部が受信した最新の暗号文データに対応する第２中間鍵からＳ個先までの第２中間鍵のうち未生成の第２中間鍵を生成し、
前記中間鍵保存部は、
前記鍵系列生成部により生成された第２中間鍵を、現在保存している末尾の第２中間鍵に続けて保存するとともに、前記受信部が受信した最新の暗号文データに対応する第２暗号鍵よりもＱ個以上前の第２中間鍵を破棄することを特徴とする請求項２に記載の復号装置。
【請求項４】
前記鍵系列生成部は、
前記中間鍵保存部に保存されている末尾の第２中間鍵を用いて新たな第２中間鍵を１つ生成し、以降、新たに生成した第２中間鍵から更に新たな第２中間鍵を生成することを繰り返して未生成の第２中間鍵を生成することを特徴とする請求項３に記載の復号装置。
【請求項５】
前記受信部は、
複数の仮想ネットワークの各々から暗号文データを受信し、
前記中間鍵保存部は、
仮想ネットワークごとに第２中間鍵を保存していることを特徴とする請求項１〜４のいずれかに記載の復号装置。
【請求項６】
前記鍵系列生成部は、
前記中間鍵保存部に保存されている第２中間鍵を用いて第２鍵系列を生成する第１の鍵系列生成部と、復号された第１中間鍵を用いて第１鍵系列を生成する第２の鍵系列生成部とを有し、
前記復号処理部は、
前記第１の鍵系列生成部により生成された第２鍵系列を用いて暗号化第１中間鍵を復号する第１の復号処理部と、前記第２の鍵系列生成部により生成された第１鍵系列を用いて暗号文データを復号する第２の復号処理部とを有することを特徴とする請求項１〜５のいずれかに記載の復号装置。
【請求項７】
コンピュータを、請求項１に記載された復号装置として機能させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パケット通信の際にパケットを秘匿するための暗号装置及び復号装置、更に、これを実現するための暗号方法、復号方法およびプログラムに関する。
【背景技術】
【０００２】
外部同期式ストリーム暗号装置は、その特徴として、通信データにビット誤りが発生した場合でも、そのビットだけが誤りとなり、その後の処理に影響を与えない。ただし、通信中は暗号装置と復号装置でその内部状態を常に同期させていなければならない。
【０００３】
図１０は、外部同期式ストリーム暗号処理方式を用いてパケットの暗号処理を行う暗号装置における暗号処理部を示すものである。
【０００４】
最初に構成について説明する。
Ａ０１は、平文データである（以下、単に平文と呼ぶ）。
Ａ０２は、平文Ａ０１を暗号化する秘密鍵とＩＶ（Ｉｎｉｔｉａｌ  Ｖｅｃｔｏｒ）の保存先アドレス等の鍵情報である。
Ａ０３は、暗号処理後の暗号文データである（以下、単に暗号文と呼ぶ）。
Ａ１は、秘密鍵とＩＶを保存する秘密鍵・ＩＶ保存メモリである。
Ａ２は、鍵系列を生成するための中間鍵ＭＫを保存する中間鍵保存メモリである。
Ａ３は、メモリアクセス管理部である。
Ａ４は、鍵系列生成部である。
Ａ５は、鍵系列と平文の排他的論理和を行うＸＯＲ（Ｅｘｃｌｕｓｉｖｅ  ＯＲ）部である。
ここで鍵系列とは、鍵系列生成部Ａ４から出力される乱数性の高いビット列のことで、暗号化側では平文のビット列と排他的論理和を行うことで暗号文を生成し、復号側では暗号文のビット列と排他的論理和を行うことで平文を生成するためのものである。
【０００５】
次に動作について説明する。
パケット通信前に、対向となる装置間で同じ秘密鍵とＩＶを共有し、それを秘密鍵・ＩＶ保存メモリＡ１に保存する。
パケット通信時は、平文Ａ０１を暗号化するにあたり、メモリアクセス管理部Ａ３は、鍵情報Ａ０２を受け取り、この情報を元に秘密鍵・ＩＶ保存メモリＡ１から該当する秘密鍵とＩＶを読み出し、これを鍵系列生成部Ａ４に渡す。
秘密鍵とＩＶを受け取った鍵系列生成部Ａ４は、平文Ａ０１の暗号化に使用する鍵系列を生成し、これをＸＯＲ部Ａ５に渡す。ＸＯＲ部Ａ５は平文Ａ０１と鍵系列の排他的論理和を行い、暗号文Ａ０３を出力する。
ここで、暗号化で使用した最後の鍵系列を生成する際に同時に生成された中間鍵は、中間鍵保存メモリＡ２に保存する。
尚、図１０は暗号装置における暗号処理部の構成を表しているが、復号装置においても構成は同一で、図１０中の平文Ａ０１と暗号文Ａ０３の位置を入れ替えた構成となる。
【０００６】
図１１は、図１０における鍵系列生成部Ａ４の内部を示すものである。
最初に構成について説明する。
Ｂ０は、鍵系列生成部である。
Ｂ１１は、鍵系列を生成するための秘密鍵とＩＶである。
Ｂ１２は、生成された鍵系列である。
Ｂ２は、入力データの乱数性を高めるための攪拌関数である。
Ｂ３は、中間鍵である。
ここで中間鍵について説明する。
攪拌関数Ｂ２は秘密鍵とＩＶ  Ｂ１１を入力とし、処理を実行して得られるデータを再び攪拌関数Ｂ２の入力として処理を行う。以降これを繰り返すことで攪拌関数Ｂ２による処理一回ごとに得られる鍵系列の乱数性を高める。この攪拌関数Ｂ２による１回の処理をラウンド処理と呼び、ラウンド間の攪拌関数Ｂ２の入力データを中間鍵と呼ぶ。
【０００７】
次に鍵系列生成部Ｂ０の動作について説明する。
図１２は、鍵系列生成部Ｂ０の鍵系列生成処理動作を示した図で、まず秘密鍵とＩＶ  Ｂ１１を入力として初期化を行う。
初期化とは、一定回数のラウンド処理を行うことで、攪拌関数Ｂ２の出力する鍵系列の乱数性を高めるためのものである。このラウンド処理回数はストリーム暗号アルゴリズムごとに推奨されている回数が異なる。
初期化完了後は、乱数性の高い鍵系列を得られるため、以降のラウンドごとに得られる鍵系列ＫＣ＃１，ＫＣ＃２，・・・を暗号処理に使用する。
また、鍵系列の生成と同時に、次のラウンドの入力データとなる中間鍵が得られ、初期化完了後の中間鍵をＭＫ＃１とし、以降のラウンドごとに得られる中間鍵をＭＫ＃２，ＭＫ＃３，・・・とする。
２回目以降のラウンドでは、秘密鍵とＩＶ  Ｂ１１は使用せず、前回のラウンドで得られた中間鍵のみを利用して鍵系列を生成する。
【０００８】
続いて、一般的な外部同期式ストリーム暗号装置のパケット通信時の動作について説明する。
パケット通信時は、１パケットにつき複数の鍵系列を使用する。鍵系列は、ＫＣ＃１，  ＫＣ＃２，・・・の順に使用される。
例えば、あるパケットでＫＣ＃１，ＫＣ＃２，・・・，ＫＣ＃３０まで使用して暗号化した場合、次のパケットではＫＣ＃３１，ＫＣ＃３２，・・・を使用して暗号化する。
同様に、復号装置でも暗号装置と同一の鍵系列を求めてパケットを復号する。
【０００９】
以上のように、パケットの暗号化と復号において同一の鍵系列を生成するために、暗号装置と復号装置では中間鍵を合わせる必要があり、これを「同期を取る」という。
ＶＰＮ（Ｖｉｒｔｕａｌ  Ｐｒｉｖａｔｅ  Ｎｅｔｗｏｒｋ）装置等の中継装置で暗号通信を行う場合、同期を取るために中間鍵をメモリ等で管理する方法がある。
その理由は、通信トンネルごとに秘密鍵とＩＶを変えて鍵系列ＫＣを生成する必要があるためである。
ここで通信トンネルとは、インターネットのような公衆通信網の中で、暗号通信によって仮想的にＰｏｉｎｔ−ｔｏ−Ｐｏｉｎｔの通信を行うこと及びＰｏｉｎｔ−ｔｏ−Ｐｏｉｎｔ通信を行うための仮想ネットワークを指す。
通信トンネルごとに別々の鍵系列ＫＣを使用するため、図１０では中間鍵を鍵系列生成部Ａ４から一時的に退避させるために中間鍵保存メモリＡ５を使用する。
また、通信前には通信トンネルごとに中間鍵ＭＫ＃１を求めて中間鍵保存メモリＡ５に保持しておくことにより、通信開始時の初期化時間を隠蔽することも可能である。
【００１０】
また、本発明に関連する技術として、特許文献１に記載の技術がある。
【特許文献１】特開平５−２４９８９１号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
以上のように、外部同期式ストリーム暗号では、暗号装置と復号装置で同期を取る必要があり、異なる通信トンネルの鍵系列を生成する場合に中間鍵を一時的にメモリ等に保持しておく必要があるが、復号装置では同一の秘密鍵を使用するパケットを処理する場合においてもメモリ等に保持する必要がある。
例えば、暗号装置で暗号化されたパケットＰ＃１，Ｐ＃２，Ｐ＃３（同一の秘密鍵からＰ＃１→Ｐ＃２→Ｐ＃３の順で生成されたパケット）を復号装置が受信する際、Ｐ＃３を先に受信したときを考える。
元々復号装置はＰ＃１用の中間鍵ＭＫ＃１をメモリ等に保持しているがＰ＃３用の中間鍵を持っていない。そのためＭＫ＃１からラウンド処理を行ってＰ＃３用の中間鍵を作成する必要があるが、Ｐ＃１およびＰ＃２でどれだけの鍵系列を必要とするか不明なため、どれだけの回数ラウンド処理した後のＭＫがＰ＃３用であるのか判別できない。
【００１２】
この課題を解決する案として、Ｐ＃３に使用するＭＫの識別子（例えば１００ラウンド後のＭＫ＃１０１をＰ＃３で使用する場合は１０１の情報）をＰ＃３に付設して通信することが考えられる。
しかし、Ｐ＃３用の中間鍵を生成する途中ではＰ＃２で必要となる中間鍵も生成されるが、こちらについては、どのＭＫがＰ＃２用であるのかを識別することができない。この間の全てのラウンド処理で生成されるＭＫを全てメモリに保持しておく方法もあるが、必要となるメモリ量が肥大化するという課題がある。メモリに保存しない回避策としては、Ｐ＃２を受信した際にＭＫ＃１からＭＫ＃２を再計算する方法も考えられるが、通信路でのパケット順序変化が発生するごとに行うと通信性能が低下するという課題がある。
【００１３】
また、このような外部同期式ゆえの課題を解決する方法としては、内部同期式ストリーム暗号を使用することも考えられる。内部同期式ストリーム暗号装置は、その特徴として、暗号文の系列に依存した形で鍵系列を生成させるため、外部同期式のように暗号装置と復号装置で同期する必要がない。
ただし、暗号文のあるビットに誤りが発生すると他のビットにも波及してエラーが拡大してしまうという課題があり、更に、あるパケットでのビット誤りが他のパケットの復号にも影響を与える可能性がある。
【００１４】
この発明は、上記のような課題を解決することを主な目的の一つとしており、中間鍵を保存するメモリのメモリ量を抑制するとともに、通信路でパケットの順序変化が起こった場合であっても、正順序時と同等の処理負荷及びメモリ使用量で復号処理可能な仕組みを実現することを主な目的とする。
【課題を解決するための手段】
【００１５】
本発明に係る暗号装置は、
第１中間鍵と第２中間鍵を保存する中間鍵保存部と、
前記中間鍵保存部に保存されている第１中間鍵を用いて第１鍵系列を生成し、前記中間鍵保存部に保存されている第２中間鍵を用いて第２鍵系列を生成する鍵系列生成部と、
前記鍵系列生成部により生成された第１鍵系列を用いて平文データを暗号化して暗号文データとし、前記鍵系列生成部により生成された第２鍵系列を用いて第１中間鍵を暗号化して暗号化第１中間鍵とする暗号処理部とを有することを特徴とする。
【００１６】
本発明に係る復号装置は、
第１中間鍵から生成される第１鍵系列を用いて暗号化された暗号文データと第２中間鍵から生成される第２鍵系列を用いて暗号化された暗号化第１中間鍵とを受信する受信部と、
暗号文データ及び暗号化第１中間鍵の受信に先立って生成されている第２中間鍵を保存する中間鍵保存部と、
前記中間鍵保存部に保存されている第２中間鍵を用いて第２鍵系列を生成し、復号された第１中間鍵を用いて第１鍵系列を生成する鍵系列生成部と、
前記鍵系列生成部により生成された第２鍵系列を用いて暗号化第１中間鍵を復号して第１中間鍵とし、前記鍵系列生成部により生成された第１鍵系列を用いて暗号文データを復号する復号処理部とを有することを特徴とする。
【発明の効果】
【００１７】
本発明によれば、データを秘匿する第１中間鍵と第１中間鍵を秘匿する第２中間鍵を用い、秘匿したデータと秘匿した第１中間鍵を合わせて通信することにより、復号側では第２中間鍵のみを管理すればよく、中間鍵を保存するメモリのメモリ量を抑制することができる。また、復号装置で復号に使用する第２中間鍵を予め求めておくことが可能であり、通信路でパケットの順序変化が起こった場合であっても、正順序時と同等の処理負荷及びメモリ使用量で復号処理が可能である。
【発明を実施するための最良の形態】
【００１８】
実施の形態１．
実施の形態１に係る暗号装置１の構成例を図１に示し、復号装置２の構成例を図２に示す。
【００１９】
まず、本実施の形態に係る暗号装置１及び復号装置２の動作の概略を説明する。
【００２０】
暗号装置１では、中間鍵ＭＫ１（平）を用いて平文１０１を暗号文１０３にし、別の中間鍵である中間鍵ＭＫ２を用いて中間鍵ＭＫ１（平）を暗号化して中間鍵ＭＫ（暗）１０４とし、暗号文１０３と中間鍵ＭＫ（暗）１０４を合わせて秘匿パケット１０５として送信する。
復号装置２では、予め中間鍵ＭＫ２を生成して保存しており、秘匿パケット１０５を受信した際に、保存している中間鍵ＭＫ２を用いて、秘匿パケット１０５に含まれている中間鍵ＭＫ１（暗）２０１を復号して中間鍵ＭＫ１（平）とし、中間鍵ＭＫ１（平）を用いて、秘匿パケット１０５に含まれている暗号文２０２を復号して平文２０４とする。
復号装置２では中間鍵ＭＫ２のみを管理すればよく、中間鍵を保存するメモリのメモリ量を抑制することができる。また、復号装置２で復号に使用する中間鍵ＭＫ２を予め求めておくことが可能であり、通信路でパケットの順序変化が起こった場合であっても、正順序時と同等の処理負荷及びメモリ使用量で復号処理が可能である。
【００２１】
次に、図１の暗号装置１の構成と動作を詳述する。
１０１は、平文である。
１０２は、平文１０１を暗号化する鍵の保存先アドレス等の鍵情報である。
１０３は、暗号処理後の暗号文である。
１０４は、平文１０１を暗号化するときに最初のラウンドで使用した中間鍵ＭＫ１（平）を中間鍵ＭＫ２で暗号化した中間鍵ＭＫ１（暗）である。
１１は、秘密鍵とＩＶを保存する秘密鍵・ＩＶ保存メモリである。
１２は、平文１０１を暗号化するときに使用する中間鍵ＭＫ１（平）を保存する中間鍵ＭＫ１（平）保存メモリである。
１３は、中間鍵ＭＫ１（平）を暗号化するときに使用する中間鍵ＭＫ２を保存する中間鍵ＭＫ２保存メモリである。
１４は、メモリアクセス管理部である。
１５は、平文１０１を暗号化するための鍵系列を中間鍵ＭＫ１（平）から生成する鍵系列生成部＿１である。
１６は、ＭＫ１（平）を暗号化するための鍵系列を中間鍵ＭＫ２から生成する鍵系列生成部＿２である。
１７は、鍵系列生成部＿１により生成された鍵系列と平文１０１の排他的論理和を行うＸＯＲ部＿１である。
１８は、鍵系列生成部＿２により生成された鍵系列と中間鍵ＭＫ１（平）の排他的論理和を行うＸＯＲ部＿２である。
１９は、暗号文１０３と中間鍵ＭＫ１（暗）１０４とを合わせて秘匿パケット１０５として送信する送信部である。
【００２２】
鍵系列とは、前述したように、鍵系列生成部＿１  １５および鍵系列生成部＿２  １６から出力される乱数性の高いビット列のことで、暗号化側では平文のビット列と排他的論理和を行うことで暗号文を生成し、復号側では暗号文のビット列と排他的論理和を行うことで平文を生成するためのものである。
後述するように、鍵系列生成部＿１  １５および鍵系列生成部＿２  １６は、平文１０１もしくは中間鍵ＭＫ１（平）が入力される前に、秘密鍵とＩＶとを用いて中間鍵を生成するものであり、それぞれ第１の鍵系列生成部、第２の鍵系列生成部に相当する。また、鍵系列生成部＿１  １５および鍵系列生成部＿２  １６により生成される鍵系列は第１鍵系列及び第２鍵系列に相当する。
【００２３】
また、中間鍵ＭＫ１（平）保存メモリおよび中間鍵ＭＫ２保存メモリは、中間鍵生成部たる鍵系列生成部＿１  １５および鍵系列生成部＿２  １６により生成された中間鍵を保存するものであり、中間鍵保存部に相当する。
また、中間鍵ＭＫ１（平）保存メモリ１２に保存されている中間鍵ＭＫ１（平）は、第１中間鍵に相当し、中間鍵ＭＫ２保存メモリ１３に保存されている中間鍵ＭＫ２は、第２中間鍵に相当する。
更に、中間鍵ＭＫ１（暗）１０４は、暗号化第１中間鍵に相当する。
【００２４】
ＸＯＲ部＿１  １７は、鍵系列生成部＿１  １５により生成された鍵系列を入力とし、順次入力された平文１０１の暗号化を行うものであり、第１の暗号化処理部に相当する。
同様にＸＯＲ部＿２  １８は、鍵系列生成部＿２  １６により生成された鍵系列を入力とし、順次入力された中間鍵ＭＫ１（平）の暗号化を行うものであり、第２の暗号化処理部に相当する。
【００２５】
つまり、本実施の形態の暗号装置１では、鍵系列生成部＿１  １５が、平文１０１が入力される前に、一つの秘密鍵とＩＶを用いて中間鍵ＭＫ１（平）を生成し、中間鍵ＭＫ１（平）保存メモリ１２が、生成された中間鍵ＭＫ１（平）を保存し、更に鍵系列生成部＿１  １５は、平文１０１が入力された際に、中間鍵ＭＫ１（平）保存メモリ１２に保存されている中間鍵ＭＫ１（平）を入力し、入力した中間鍵ＭＫ１（平）から鍵系列を生成し、ＸＯＲ部＿１  １７は、鍵系列生成部＿１  １５により生成された鍵系列を入力し、入力した鍵系列を用いて、平文１０１の暗号化を行う。
【００２６】
同じく、鍵系列生成部＿２  １６が、中間鍵ＭＫ１（平）が入力される前に、上記とは異なる一つの秘密鍵とＩＶを用いて中間鍵ＭＫ２を生成し、中間鍵ＭＫ２保存メモリ１３が、生成された中間鍵ＭＫ２を保存し、更に鍵系列生成部＿２  １６は、中間鍵ＭＫ１（平）が入力された際に、中間鍵ＭＫ２保存メモリ１３に保存されている中間鍵ＭＫ２を入力し、入力した中間鍵ＭＫ２から鍵系列を生成し、ＸＯＲ部＿２  １８は、鍵系列生成部＿２  １６により生成された鍵系列を入力し、入力した鍵系列を用いて、中間鍵ＭＫ１（平）の暗号化を行って中間鍵ＭＫ１（暗）１０４を得る。
【００２７】
また、生成された暗号文１０３と中間鍵ＭＫ１（暗）は、送信部１９において組み合わせて秘匿パケット１０５として通信路に出力される。例えば、一般的なパケット暗号通信の規格であるＩＰｓｅｃでは、ＩＰｓｅｃパケットのＥＳＰペイロード領域として、組み合わされた暗号文１０３と中間鍵ＭＫ１（暗）が通信路に出力される。
【００２８】
また、鍵系列生成部とＸＯＲ部はそれぞれ２個ずつあるが、これは平文１０１の暗号化のための鍵系列生成とＸＯＲ処理、および中間鍵ＭＫ１（平）の暗号化のための鍵系列生成とＸＯＲ処理をパイプライン処理して高速化するのに効果がある。
【００２９】
続いて復号装置２の構成を図２に示す。
２９は、暗号装置１から送信された秘匿パケット１０５を受信し、秘匿パケット１０５から中間鍵ＭＫ１（暗）２０１及び暗号文２０２を抽出する受信部である。
２０１は、暗号文２０２を復号する際に使用する中間鍵ＭＫ１（平）が、暗号装置１で中間鍵ＭＫ２によって暗号化された中間鍵ＭＫ１（暗）である。前述したように、中間鍵ＭＫ１（暗）２０１は受信部２９により秘匿パケット１０５から抽出される。
２０２は、暗号装置１で中間鍵ＭＫ１（平）によって暗号化された暗号文である。前述したように、暗号文２０２は受信部２９により秘匿パケット１０５から抽出される。
２０３は、中間鍵ＭＫ１（暗）２０１および暗号文２０２を復号する鍵の保存先アドレス等の鍵情報である。
２０４は、復号後の平文である。
２１は、パケットの復号ごとに新規に中間鍵ＭＫ２を計算するか否かを判定する中間鍵ＭＫ２更新管理部である。
２２は、秘密鍵とＩＶを保存する秘密鍵・ＩＶ保存メモリである。
２３は、中間鍵ＭＫ１（暗）２０１を復号するときに使用する中間鍵ＭＫ２を保存する中間鍵ＭＫ２保存メモリである。
２４は、メモリアクセス管理部である。
２５は、中間鍵ＭＫ１（暗）を復号するための鍵系列を中間鍵ＭＫ２から生成する鍵系列生成部＿１である。
２６は、暗号文２０２を復号するための鍵系列を中間鍵ＭＫ１（平）から生成する鍵系列生成部＿２である。
２７は、鍵系列生成部＿１により生成された鍵系列と平文１０１の排他的論理和を行うＸＯＲ部＿１である。
２８は、鍵系列生成部＿２により生成された鍵系列と中間鍵ＭＫ１（平）の排他的論理和を行うＸＯＲ部＿２である。
【００３０】
つまり、本実施の形態の復号装置２では、鍵系列生成部＿１  ２５が、中間鍵ＭＫ１（暗）２０１が入力される前に、一つの秘密鍵とＩＶを用いて中間鍵ＭＫ２を生成し、中間鍵ＭＫ２保存メモリ２３が、生成された中間鍵ＭＫ２を保存し、更に鍵系列生成部＿１  ２５は、中間鍵ＭＫ１（暗）２０１が入力された際に、中間鍵ＭＫ２保存メモリ２３に保存されている中間鍵ＭＫ２を入力し、入力した中間鍵ＭＫ２から鍵系列を生成し、ＸＯＲ部＿１  ２７は、鍵系列生成部＿１  ２５により生成された鍵系列を入力し、入力した鍵系列を用いて、中間鍵ＭＫ１（暗）２０１の復号を行う。
【００３１】
続いて、鍵系列生成部＿２  ２６は、暗号文２０２が入力された際に、先に復号された中間鍵ＭＫ１（平）を入力し、入力した中間鍵ＭＫ１（平）から鍵系列を生成し、ＸＯＲ部＿２  ２８は、鍵系列生成部＿２  ２６により生成された鍵系列を入力し、入力した鍵系列を用いて、暗号文２０２の復号を行って平文２０４を得る。
【００３２】
また、鍵系列生成部とＸＯＲ部はそれぞれ２個ずつあるが、これは中間鍵ＭＫ１（暗）２０１の復号のための鍵系列生成とＸＯＲ処理、および暗号文２０２の復号のための鍵系列生成とＸＯＲ処理をパイプライン処理して高速化するのに効果がある。
【００３３】
中間鍵ＭＫ２更新管理部２１は、鍵情報２０３から受信パケットが、その通信トンネルで最新（暗号装置１で暗号化された最新のパケット）か否かを判別する。最新の場合はメモリアクセス管理部２４が中間鍵ＭＫ２保存メモリに保存している最新の中間鍵ＭＫ２を読み出し、鍵系列生成部＿１  ２５によって新しい中間鍵ＭＫ２を生成し、メモリアクセス管理部２４がそれを中間鍵ＭＫ２保存メモリに保存する。
【００３４】
復号装置２において、中間鍵ＭＫ２保存メモリ２３は中間鍵保存部に相当する。また、中間鍵ＭＫ２保存メモリ２３に保存されている中間鍵ＭＫ２は第２中間鍵に相当する。
また、鍵系列生成部＿１  ２５は第１の鍵系列生成部に相当し、鍵系列生成部＿２  ２６は第２の鍵系列生成部に相当する。なお、鍵系列生成部＿１  ２５が生成する鍵系列が第２鍵系列に相当し、鍵系列生成部＿２  ２６により生成される鍵系列が第１鍵系列に相当する。
また、ＸＯＲ部＿１  ２７は第１の復号処理部に相当し、ＸＯＲ部＿２  ２８は第２の復号処理部に相当する。
【００３５】
次に、本実施の形態について、パケット通信前に行う初期化の動作を、暗号装置１について図４のフローチャートを参照して説明する。
【００３６】
メモリアクセス管理部１４は秘密鍵・ＩＶ保存メモリ１１から秘密鍵とＩＶを読み出し（Ｓ４０１）、これを処理待機中の鍵系列生成部＿１  １５に渡す。
鍵系列生成部＿１  １５は、受け取った秘密鍵とＩＶから、暗号化に使用可能な鍵系列を生成する直前のラウンドまでラウンド処理を行い、中間鍵ＭＫ１（平）を生成する（Ｓ４０２）（中間鍵ＭＫ１（平）生成ステップ）。
そして、鍵系列生成部＿１  １５は、最終的に得られた中間鍵ＭＫ１（平）をメモリアクセス管理部１４に渡し、メモリアクセス管理部１４は中間鍵ＭＫ１（平）を中間鍵ＭＫ１（平）保存メモリ１２に保存する（Ｓ４０３）（中間鍵ＭＫ１（平）保存ステップ）。
以上の中間鍵生成処理は、ある秘密鍵１個とＩＶ１個の組み合わせについて行うものである。
続いて、メモリアクセス管理部１４は上記で使用したものとは異なる秘密鍵とＩＶを秘密鍵・ＩＶ保存部１１から読み出し（Ｓ４０４）、これを処理待機中の鍵系列生成部＿２  １６に渡す。
鍵系列生成部＿２  １６は、受け取った秘密鍵とＩＶから、暗号化に使用可能な鍵系列を生成する直前のラウンドまでラウンド処理を行い、中間鍵ＭＫ２を生成する（Ｓ４０５）（中間鍵ＭＫ２生成ステップ）。
そして、鍵系列生成部＿２  １６は、最終的に得られた中間鍵ＭＫ２をメモリアクセス管理部１４に渡し、メモリアクセス管理部１４は中間鍵ＭＫ２を中間鍵ＭＫ２保存メモリ１３に保存する（Ｓ４０６）（中間鍵ＭＫ２保存ステップ）。
以上、Ｓ４０１〜Ｓ４０６までについて、通信トンネルごとに行う（Ｓ４０７）。
【００３７】
続いてパケット通信前に行う初期化の動作を、復号装置２について図５のフローチャートを参照して説明する。
【００３８】
メモリアクセス管理部２４は秘密鍵・ＩＶ保存メモリ２２から秘密鍵とＩＶを読み出し（Ｓ５０１）、これを処理待機中の鍵系列生成部＿１  ２５に渡す。
鍵系列生成部＿１  ２５は、受け取った秘密鍵とＩＶから、暗号化に使用可能な鍵系列を生成する直前のラウンドまでラウンド処理を行い、中間鍵ＭＫ２を生成する（Ｓ５０２）（中間鍵ＭＫ２生成ステップ）。
ここで、暗号装置で最初に暗号化されたパケットに付加されている中間鍵ＭＫ１（暗）を復号するのに使用する中間鍵ＭＫ２をＭＫ２＿１とし、以降暗号装置で暗号化された順のパケットに付加されている中間鍵ＭＫ１（暗）を復号するのに使用する中間鍵ＭＫ２をＭＫ２＿２，ＭＫ２＿３，・・・とする。
通信前に生成しておく中間鍵ＭＫ２の個数をｎ個とした場合、ｎの値が大きいほど、通信路でより大きなパケットの順序変化が起こった際にも正順序で受信したときと同一の処理で復号が可能となる。
ただしｎの値を大きくすると、それに比例して必要となる中間鍵ＭＫ２保存メモリ２３のサイズも大きくなる。
ここではｎ＝３２とし、通信前に鍵系列生成部＿１  ２５でＭＫ２＿１〜ＭＫ２＿３２を生成して秘密鍵・ＩＶ保存メモリ２２に保存しておくこととする。（中間鍵ＭＫ２保存ステップ）（Ｓ５０３）。
以上の中間鍵生成処理は、ある秘密鍵１個とＩＶ１個の組み合わせについて行うものである。Ｓ５０１〜Ｓ５０３までについて、通信トンネルごとに行う（Ｓ５０４）。
【００３９】
次に、パケット通信時の動作について、まずは暗号装置１側の動作を図６のフローチャートに沿って説明する。
【００４０】
平文１０１を暗号化するにあたり、メモリアクセス管理部１４は、暗号化に使用する鍵情報１０２を受け取り（Ｓ６０１）、この情報を元に中間鍵ＭＫ１（平）保存メモリ１２から該当する中間鍵ＭＫ１（平）（暗号化対象の平文１０１に対応する秘密鍵とＩＶで生成された中間鍵ＭＫ１（平））を読み出し（Ｓ６０２）、これを処理待機中の鍵系列生成部＿１  １５に渡す。
中間鍵を受け取った鍵系列生成部＿１  １５は、その中間鍵ＭＫ１（平）を入力として複数回のラウンド処理を行い、平文１０１の暗号化に使用する複数個の鍵系列を生成する（Ｓ６０３）（鍵系列生成ステップ）。
鍵系列生成部＿１  １５は、生成した複数個の鍵系列をＸＯＲ部＿１  １７に渡し、ＸＯＲ部＿１  １７は平文と鍵系列の排他的論理和を行い、暗号文１０３を出力する（Ｓ６０４）（暗号処理ステップ）。
ＸＯＲ部＿１  １７は、暗号文１０３を生成するのと同時に生成された中間鍵ＭＫ１（平）をメモリアクセス管理部１４とＸＯＲ部＿２  １８に渡す。
メモリアクセス管理部１４は、中間鍵ＭＫ１（平）を中間鍵ＭＫ１（平）保存メモリ１２に上書き保存する（中間鍵ＭＫ１（平）保存ステップ）（Ｓ６０５）。
メモリアクセス管理部１４は、鍵情報１０２を元に中間鍵ＭＫ２保存メモリ１３から該当する中間鍵ＭＫ２（暗号化対象の中間鍵ＭＫ１（平）に対応する秘密鍵とＩＶで生成された中間鍵ＭＫ２）を読み出し（Ｓ６０６）、これを処理待機中の鍵系列生成部＿２  １６に渡す。
中間鍵ＭＫ２を受け取った鍵系列生成部＿２  １６は、その中間鍵ＭＫ２を入力として複数回のラウンド処理を行い、中間鍵ＭＫ１（平）の暗号化に使用する複数個の鍵系列を生成する（Ｓ６０７）（（中間鍵ＭＫ１（平）用）鍵系列生成ステップ）。
鍵系列生成部＿２  １６は、生成した複数個の鍵系列をＸＯＲ部＿２  １８に渡し、ＸＯＲ部＿２  １８は中間鍵ＭＫ１（平）と鍵系列の排他的論理和を行い、中間鍵ＭＫ１（暗）１０４を出力する（Ｓ６０８）（（中間鍵ＭＫ１（平））暗号処理ステップ）。
メモリアクセス管理部１４は、中間鍵ＭＫ２を中間鍵ＭＫ２保存メモリ１３に上書き保存する（中間鍵ＭＫ２保存ステップ）（Ｓ６０９）。
次の暗号化対象のパケットが存在する場合はＳ６０１〜Ｓ６０９を繰り返す（Ｓ６１０）。
暗号化対象のパケットがなくなったら、送信部１９が秘匿パケット１０５として送信する。
以上は暗号装置の動作である。
【００４１】
続いて復号装置２の動作を図７のフローチャートに沿って説明する。
【００４２】
先ず、受信部２９が、暗号装置１から送信された秘匿パケット１０５を受信し、秘匿パケット１０５から中間鍵ＭＫ１（暗）２０１及び暗号文２０２を抽出する（Ｓ７００）。
次に、ＭＫ１（暗）２０１を復号するにあたり、メモリアクセス管理部２４が、復号に使用する鍵情報２０３を受け取り（Ｓ７０１）、この情報を元に中間鍵ＭＫ２保存メモリ２３から該当する中間鍵ＭＫ２（復号対象の暗号文２０２に対応する秘密鍵とＩＶで生成された中間鍵ＭＫ２＿Ａを読み出し（Ｓ７０２）、これを処理待機中の鍵系列生成部＿１  ２５に渡す。
中間鍵ＭＫ２＿Ａを受け取った鍵系列生成部＿１  ２５は、その中間鍵ＭＫ２＿Ａを入力として複数回のラウンド処理を行い、中間鍵ＭＫ１（暗）２０１の復号に使用する複数個の鍵系列を生成する（Ｓ７０３）（中間鍵ＭＫ１（平）用鍵系列生成ステップ）（第１の鍵系列生成ステップ）。
鍵系列生成部＿１  ２５は、生成した複数個の鍵系列をＸＯＲ部＿１  ２７に渡し、ＸＯＲ部＿１  ２７は中間鍵ＭＫ１（暗）２０１と鍵系列の排他的論理和を行い、中間鍵ＭＫ１（平）を出力する（Ｓ７０４）（中間鍵ＭＫ１（平）復号処理ステップ）（第１の復号処理ステップ）。
ＸＯＲ部＿１  ２７は、中間鍵ＭＫ１（平）を鍵系列生成部＿２  ２６に渡す。
中間鍵ＭＫ１（平）を受け取った鍵系列生成部＿２  ２６は、その中間鍵ＭＫ１（平）を複数回のラウンド処理を行い、暗号文２０２の復号に使用する複数個の鍵系列を生成する（Ｓ７０５）（第２の鍵系列生成ステップ）。
鍵系列生成部＿２  ２６は、生成した複数個の鍵系列をＸＯＲ部＿２  ２８に渡し、ＸＯＲ部＿２  ２８は暗号文２０２と鍵系列の排他的論理和を行い、平文２０４を出力する（Ｓ７０６）（第２の復号処理ステップ）。
【００４３】
ここで、中間鍵ＭＫ２更新管理部２８は今復号したパケットが同トンネル内で最新のパケットであるかどうかを、鍵情報２０３から判定し（Ｓ７０７）、最新である場合は中間鍵ＭＫ２の更新処理を行うためメモリアクセス管理部２４に指示を出す。
メモリアクセス管理部２４は、同トンネル用の最新の鍵系列を生成することが可能な中間鍵ＭＫ２＿Ｎを秘密鍵・ＩＶ保存メモリ２２から読み出し（Ｓ７０８）、これを鍵系列生成部＿１  ２５に渡す。
Ｎ＝Ｎ＋１とし（Ｓ７０９）、鍵系列生成部＿１  ２５は、鍵系列生成部＿１  ２５はラウンド処理を行って中間鍵ＭＫ２＿Ｎを生成し（Ｓ７１０）、これをメモリアクセス管理部２４に渡す。
メモリアクセス管理部２４はＭＫ２＿Ｎを中間鍵ＭＫ２保存メモリ１３に保存する（Ｓ７１１）。ここで、生成した中間鍵ＭＫ２＿ＮのＮが、最新の復号で使用した中間鍵ＭＫ２＿ＡのＡより一定数（Ｗとする）より小さい場合は、Ｓ７０９〜Ｓ７１１を繰り返す（Ｓ７１２）。ここでＷの値は、最新の受信パケットから何個先までの順序変化が起こったときに正順序の処理と同一の処理で対応できるかに関係し、先の通信前に準備したトンネルごとの中間鍵ＭＫ２の個数ｎと合わせておくことが望ましい。
以上が１パケットを復号するときのフローであり、ここまで行った後に次のパケットが存在する場合はＳ７０１〜Ｓ７１２までを繰り返す（Ｓ７１３）。
【００４４】
中間鍵ＭＫ２保存メモリの構成を図３に示す。
通信トンネル（仮想ネットワーク）ごとに秘密鍵とＩＶを用意し、その秘密鍵とＩＶから生成した中間鍵ＭＫ２を保存する領域を設ける。
図３では、管理する通信トンネルの個数をＬ個とする。
通信トンネル（仮想ネットワーク）ごとに複数個の中間鍵ＭＫ２を持ち、表記がＭＫ２＿ａ＿ｂであったら、通信トンネル番号ａのｂ番目の中間鍵ＭＫ２であることとする。
パケット１個について１個の中間鍵ＭＫ２が対応するため、例えばＩＰｓｅｃで暗号通信を行うとき、個々のパケットに付加されているＩＰｓｅｃシーケンス番号がｂの値と対応し、どのパケットでどのＭＫ２＿ａ＿ｂを使用すれば良いのか判別できる。
【００４５】
例えば、通信トンネルごとに通信前に３２個の中間鍵ＭＫ２を求めると、通信トンネル番号１では、ＭＫ２＿１＿１からＭＫ２＿１＿３２までを保持している状態となる。
ここで図３のＭの値を６４とすると、通信トンネルごとに最大６４個の中間鍵ＭＫ２が持てることになる。
通信が始まると、予め生成しておいた中間鍵は、基本的にｂの番号の若い方から順に消費されるため、適宜新しい中間鍵ＭＫ２＿１＿３３以降を生成する必要がある。
一度ＭＫ２＿１＿６４まで生成し、該当する領域に保存した後は、ＭＫ２＿１＿６５はＭＫ２＿１＿１の領域に上書きするように、メモリ領域を巡回して使用する。
【００４６】
次は、中間鍵ＭＫ２保存メモリ２３の使い方の例を示す。
最初に、中間鍵ＭＫ２保存メモリ２３にはＭＫ２＿１＿１〜ＭＫ２＿１＿３２が保存されているとする。
通信トンネル１で暗号化された順にパケットを受信するとしたとき、まだ１個もパケットを受信していないときに、次に受信すると予想されるのはＭＫ２＿１＿１であり、順序変化を考慮して３２個先までのＭＫ２＿１＿３２を保持していることになる。
ＭＫ２＿１＿１に対応するパケットを受信し復号したら、次に受信すると予想されるのはＭＫ＿２＿１＿２に対応するパケットであるため、先と同様に３２個先までを考慮してＭＫ２＿１＿３３を生成して中間鍵ＭＫ２保存メモリに保存する。
続いて、通信路でパケットの順序変化が起こり、ＭＫ２＿１０を使用するパケットを受信したとする。
ＭＫ２＿１＿１０使用後に、この中間鍵は不要となるが、ＭＫ２＿１＿２〜ＭＫ２＿１＿９については未使用であるため、今後それらを使用するパケットを受信する可能性を考慮して、中間鍵保存メモリには残しておく必要がある。
また、ＭＫ２＿１＿１１から３２個先までの順序変化に対応することを考慮し、ＭＫ２＿１＿３４〜ＭＫ２＿１＿４２を生成して中間鍵ＭＫ２保存メモリに保存する。
このように、最新の受信パケットを基準としてＱ個前までからＳ個先までに暗号化されたパケットに対応することを考慮したメモリ管理を行うことで、より多くの通信路での順序変化に対応できると考えられる。
ＩＰｓｅｃのシーケンス番号チェックにもあるように、Ｑは数十個程度とし、リプレイ攻撃防止のためにＱ個以上前のパケットを受信したときには復号せずに無条件で廃棄するのが適切である。
先の例では、通信トンネルごとに６４個のＭＫ２保存領域を設けているため、これまで受信した最新のシーケンス番号を持つパケットの番号をｋとすると、中間鍵保存メモリにはＭＫ２＿１＿ｋ−３１〜ＭＫ２＿１＿ｋ＋３２を常に保存しておくことが望ましい。
【００４７】
このように、中間鍵ＭＫ２保存メモリ２３は、Ｑ＋Ｓ＋１個（Ｑ≧１、Ｓ≧１）の中間鍵ＭＫ２を保存可能であり、鍵系列生成部＿１  ２５は、受信部２９が最新の暗号文を受信する度に、受信部２９が受信した最新の暗号文に対応する中間鍵ＭＫ２からＳ個先までの中間鍵ＭＫ２のうち未生成の中間鍵ＭＫ２を生成する。
そして、中間鍵ＭＫ２保存メモリ２３は、鍵系列生成部＿１  ２５により生成された中間鍵ＭＫ２を、現在保存している末尾の中間鍵ＭＫ２に続けて保存するとともに、受信部２９が受信した最新の暗号文に対応する中間鍵ＭＫ２よりもＱ個以上前の中間鍵ＭＫ２を破棄する。
【００４８】
以上が図１及び図２に示した暗号装置１及び復号装置２の基本的な処理の流れである。
【００４９】
続いては、本実施の形態における通信路中でのパケット順序変化時の処理の負荷について説明する。
本実施の形態において、復号装置２での復号処理は、受信パケットの順序が暗号化順序通りでない場合も、正しい順序で受信したときと処理の負荷やメモリの使用量は特に変わらない。
例えば、暗号装置１でパケットＰ＃１，パケットＰ＃２，パケットＰ＃３の順に暗号化された場合、パケットＰ＃１とパケットＰ＃２の前にパケットＰ＃３を受信した場合であっても、対応する中間鍵ＭＫ２を中間鍵ＭＫ２保存メモリから読み出してＰ＃３中の中間鍵ＭＫ１（暗）を復号するための鍵系列を生成すればよい。
【００５０】
従来は、あるパケットが未着である場合に、未着パケット用の中間鍵から未着パケットに対する鍵系列を生成し、未着パケットに対する鍵系列生成時に生成される中間鍵から次のパケットに対する鍵系列を生成していた。このため、未着パケットが到着するまで未着パケットに対する鍵系列を別途メモリに保持している必要があったが、このような未着パケットに対する鍵系列をメモリに保持しておく必要がない。
これはＭＫ２が復号対象としているＭＫ１（暗）が固定長であるからである。
復号側で予め使用する中間鍵ＭＫ２を求めておくことが可能であるため、事前にメモリ等に保持しておくことにより、従来方式で問題となったような順序変化時に鍵系列を保持しておくためのメモリを用意するなどといった特別な対策を必要としない。
【００５１】
以上のように本実施の形態の方式によれば、復号装置で復号に使用する中間鍵ＭＫ２を予め求めておくことが可能であり、通信路でパケットの順序変化が起こった場合であっても、正順序時と同等の復号処理で対応できる。
また、本実施の形態の方式は外部同期式ストリーム暗号方式であるため、暗号文のあるビットに誤りが発生しても、内部同期式ストリーム暗号方式のように他のビットに波及してエラーが拡大してしまう問題がない。
【００５２】
本実施の形態では、データを秘匿する中間鍵１と中間鍵１を秘匿する中間鍵２を用い、秘匿したデータと共に秘匿した中間鍵１を合わせて秘匿パケットとして通信することにより、復号側では中間鍵２のみを管理することで、暗号装置と復号装置の同期を容易にするストリーム暗号実装方式について説明した。
【００５３】
また、本実施の形態では、復号装置において、今後受信する可能性のあるパケットに対応する中間鍵２を１パケットについて１個メモリ等に保持しておくことで、メモリの使用容量を抑制するストリーム暗号実装方式について説明した。
【００５４】
また、本実施の形態では、復号装置において、今後受信する可能性のあるパケットに対応する中間鍵２を予め計算してメモリ等に保持しておくことにより、通信路中でパケットの順序変化が起こった際にも、正順序で受信したときと同等の性能を確保可能なストリーム暗号実装方式について説明した。
【００５５】
実施の形態２．
他の実施の形態として、図８に示す暗号装置８及び図９に示す復号装置９のような構成も考えられる。
暗号装置８は図１の鍵系列生成部＿１  １５と鍵系列生成部＿２  １６およびＸＯＲ部＿１  １７とＸＯＲ部＿２  １８を一つずつとした構成で、復号装置９は図２の鍵系列生成部＿１  ２５と鍵系列生成部＿２  ２６およびＸＯＲ部＿１  ２７とＸＯＲ部＿２  ２８を一つずつとした構成である。
【００５６】
図８の構成では、平文と中間鍵ＭＫ１（平）の暗号化で鍵系列生成部とＸＯＲ部を共有して使用する。
同様に図９の構成では、暗号文と中間鍵ＭＫ１（暗）の復号で鍵系列生成部とＸＯＲ部を共有して使用する。
鍵系列生成処理とＸＯＲ処理のパイプライン処理ができないため、図１や図２の形態より処理性能は劣るが、暗号装置と復号装置の同期を容易化するという点では実施の形態１と同等の効果がある。
【００５７】
最後に、実施の形態１、２に示した暗号装置１、８及び復号装置２、９のハードウェア構成例について説明する。
図１３は、実施の形態１、２に示す暗号装置１、８及び復号装置２、９のハードウェア資源の一例を示す図である。
なお、図１３の構成は、あくまでも暗号装置１、８及び復号装置２、９のハードウェア構成の一例を示すものであり、暗号装置１、８及び復号装置２、９のハードウェア構成は図１３に記載の構成に限らず、他の構成であってもよい。
【００５８】
図１３において、暗号装置１、８及び復号装置２、９は、プログラムを実行するＣＰＵ１９１１（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサともいう）を備えている。
ＣＰＵ１９１１は、バス１９１２を介して、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１９１３、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１９１４、通信ボード１９１５、表示装置１９０１、キーボード１９０２、マウス１９０３、磁気ディスク装置１９２０と接続され、これらのハードウェアデバイスを制御する。
更に、ＣＰＵ１９１１は、ＦＤＤ１９０４（Ｆｌｅｘｉｂｌｅ  Ｄｉｓｋ  Ｄｒｉｖｅ）、コンパクトディスク装置１９０５（ＣＤＤ）、プリンタ装置１９０６、スキャナ装置１９０７と接続していてもよい。また、磁気ディスク装置１９２０の代わりに、光ディスク装置、メモリカード（登録商標）読み書き装置などの記憶装置でもよい。
ＲＡＭ１９１４は、揮発性メモリの一例である。ＲＯＭ１９１３、ＦＤＤ１９０４、ＣＤＤ１９０５、磁気ディスク装置１９２０の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置の一例である。
通信ボード１９１５、キーボード１９０２、マウス１９０３、スキャナ装置１９０７、ＦＤＤ１９０４などは、入力装置の一例である。
また、通信ボード１９１５、表示装置１９０１、プリンタ装置１９０６などは、出力装置の一例である。
【００５９】
通信ボード１９１５は、ネットワークに接続されている。例えば、通信ボード１９１５は、ＬＡＮ（ローカルエリアネットワーク）、インターネット、ＷＡＮ（ワイドエリアネットワーク）などに接続されている。
【００６０】
磁気ディスク装置１９２０には、オペレーティングシステム１９２１（ＯＳ）、ウィンドウシステム１９２２、プログラム群１９２３、ファイル群１９２４が記憶されている。
プログラム群１９２３のプログラムは、ＣＰＵ１９１１がオペレーティングシステム１９２１、ウィンドウシステム１９２２を利用しながら実行する。
【００６１】
また、ＲＡＭ１９１４には、ＣＰＵ１９１１に実行させるオペレーティングシステム１９２１のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。
また、ＲＡＭ１９１４には、ＣＰＵ１９１１による処理に必要な各種データが格納される。
【００６２】
また、ＲＯＭ１９１３には、ＢＩＯＳ（Ｂａｓｉｃ  Ｉｎｐｕｔ  Ｏｕｔｐｕｔ  Ｓｙｓｔｅｍ）プログラムが格納され、磁気ディスク装置１９２０にはブートプログラムが格納されている。
暗号装置１、８及び復号装置２、９の起動時には、ＲＯＭ１９１３のＢＩＯＳプログラム及び磁気ディスク装置１９２０のブートプログラムが実行され、ＢＩＯＳプログラム及びブートプログラムによりオペレーティングシステム１９２１が起動される。
【００６３】
上記プログラム群１９２３には、実施の形態１、２の説明において「〜部」として説明している機能を実行するプログラムが記憶されている。プログラムは、ＣＰＵ１９１１により読み出され実行される。
【００６４】
ファイル群１９２４には、実施の形態１、２の説明において、「〜の判断」、「〜の計算」、「〜の演算」、「〜の比較」、「〜の生成」、「〜の更新」、「〜の設定」、「〜の登録」、「〜の選択」等として説明している処理の結果を示す情報やデータや信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」の各項目として記憶されている。
「〜ファイル」や「〜データベース」は、ディスクやメモリなどの記録媒体に記憶される。ディスクやメモリなどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ１９１１によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・処理・編集・出力・印刷・表示などのＣＰＵの動作に用いられる。
抽出・検索・参照・比較・演算・計算・処理・編集・出力・印刷・表示のＣＰＵの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリ、レジスタ、キャッシュメモリ、バッファメモリ等に一時的に記憶される。
また、実施の形態１、２で説明しているフローチャートの矢印の部分は主としてデータや信号の入出力を示し、データや信号値は、ＲＡＭ１９１４のメモリ、ＦＤＤ１９０４のフレキシブルディスク、ＣＤＤ１９０５のコンパクトディスク、磁気ディスク装置１９２０の磁気ディスク、その他光ディスク、ミニディスク、ＤＶＤ等の記録媒体に記録される。また、データや信号は、バス１９１２や信号線やケーブルその他の伝送媒体によりオンライン伝送される。
【００６５】
また、実施の形態１、２の説明において「〜部」として説明しているものは、「〜回路」、「〜装置」、「〜機器」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。すなわち、「〜部」として説明しているものは、ＲＯＭ１９１３に記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェアのみ、或いは、素子・デバイス・基板・配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、ＤＶＤ等の記録媒体に記憶される。プログラムはＣＰＵ１９１１により読み出され、ＣＰＵ１９１１により実行される。すなわち、プログラムは、実施の形態１、２の「〜部」としてコンピュータを機能させるものである。あるいは、実施の形態１、２の「〜部」の手順や方法をコンピュータに実行させるものである。
【００６６】
このように、実施の形態１、２に示す暗号装置１、８及び復号装置２、９は、処理装置たるＣＰＵ、記憶装置たるメモリ、磁気ディスク等、入力装置たるキーボード、マウス、通信ボード等、出力装置たる表示装置、通信ボード等を備えるコンピュータであり、上記したように「〜部」として示された機能をこれら処理装置、記憶装置、入力装置、出力装置を用いて実現するものである。
【図面の簡単な説明】
【００６７】
【図１】実施の形態１の暗号装置の構成例を示す図である。
【図２】実施の形態１の復号装置の構成例を示す図である。
【図３】実施の形態１の中間鍵ＭＫ２保存メモリの内部構成例を示す図である。
【図４】実施の形態１の暗号装置の初期化時の動作例を示すフローチャート図である。
【図５】実施の形態１の復号装置の初期化時の動作例を示すフローチャート図である。
【図６】実施の形態１の暗号装置の通信時の動作例を示すフローチャート図である。
【図７】実施の形態１の復号装置の通信時の動作例を示すフローチャート図である。
【図８】実施の形態２の暗号装置の構成例を示す図である。
【図９】実施の形態２の復号装置の構成例を示す図である。
【図１０】従来技術に係るストリーム暗号による一般的な暗号処理部の内部構成図である。
【図１１】従来技術に係る鍵系列生成部の内部構成図である。
【図１２】従来技術に係る鍵系列生成部の鍵系列生成イメージを示す図である。
【図１３】実施の形態１及び２の暗号装置及び復号装置のハードウェア構成例を示す図である。
【符号の説明】
【００６８】
１  暗号装置、２  復号装置、８  暗号装置、９  復号装置、１１  秘密鍵・ＩＶ保存メモリ、１２  中間鍵ＭＫ１（平）保存メモリ、１３  中間鍵ＭＫ２保存メモリ、１４  メモリアクセス管理部、１５  鍵系列生成部＿１、１６  鍵系列生成部＿２、１７  ＸＯＲ部＿１、１８  ＸＯＲ部＿２、１９  送信部、２１  中間鍵ＭＫ２更新管理部、２２  秘密鍵・ＩＶ保存メモリ、２３  中間鍵ＭＫ２保存メモリ、２４  メモリアクセス管理部、２５  鍵系列生成部＿１、２６  鍵系列生成部＿２、２７  ＸＯＲ部＿１、２８  ＸＯＲ部＿２、２９  受信部、８１  秘密鍵・ＩＶ保存メモリ、８２  中間鍵ＭＫ１（平）保存メモリ、８３  中間鍵ＭＫ２保存メモリ、８４  メモリアクセス管理部、８５  鍵系列生成部＿１、８６  ＸＯＲ部＿１、８７  送信部、９１  中間鍵ＭＫ２更新管理部、９２  秘密鍵・ＩＶ保存メモリ、９３  中間鍵ＭＫ２保存メモリ、９４  メモリアクセス管理部、９５  鍵系列生成部＿１、９６  ＸＯＲ部＿１、９７  受信部、１０１  平文、１０２  鍵情報、１０３  暗号文、１０４  中間鍵ＭＫ１（暗）、１０５  秘匿パケット、２０１  中間鍵ＭＫ１（暗）、２０２  暗号文、２０３  鍵情報、２０４  平文、８０１  平文、８０２  鍵情報、８０３  暗号文、８０４  中間鍵ＭＫ１（暗）、８０５  秘匿パケット、９０１  中間鍵ＭＫ１（暗）、９０２  暗号文、９０３  鍵情報、９０４  平文。
【図１】
0005178269.tif 000002
【図２】
0005178269.tif 000003
【図３】
0005178269.tif 000004
【図４】
0005178269.tif 000005
【図５】
0005178269.tif 000006
【図６】
0005178269.tif 000007
【図７】
0005178269.tif 000008
【図８】
0005178269.tif 000009
【図９】
0005178269.tif 000010
【図１０】
0005178269.tif 000011
【図１１】
0005178269.tif 000012
【図１２】
0005178269.tif 000013
【図１３】
0005178269.tif 000014