(57)【要約】      （修正有）【課題】複数の通信経路を用いた通信において、転送するデータ量を増加させることなく、かつ、セキュリティを確保する通信システムを提供する。【解決手段】通信システム１０００では、第１通信装置Ｈ１と第２通信装置Ｈ２とで、同じスクランブル用のキーデータを用いて、所定論理演算処理を行い、第１通信装置Ｈ１でスクランブルされたデータを、第２通信装置Ｈ２でデスクランブルして、元のデータに戻すことができる。また、通信システム１０００では、ＭＰＴＣＰ（Ｍｕｌｔｉｐａｔｈ  Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）を用いた通信を行い、スクランブル機能を実現するために、データ通信量を増加させることがない。【選択図】図２
2018139386.tif 000002
【特許請求の範囲】
【請求項１】
データ受信装置に対して、複数の通信経路を用いてデータを送信する機能を有するデータ送信装置であって、
送信データを所定の単位長のデータに区分した単位長データのうちの最初の単位長データである単位長送信データをスクランブル化するためのスクランブル処理用キーデータを取得するスクランブル用キーデータ生成部であって、（１）１回目の処理では、自装置を識別するためのデータであるキーデータから導出された初期値データを所定の単位長のデータに区分した単位長データである単位長初期値データを用いて、所定の論理演算を行うことでスクランブル化処理のためのスクランブル処理用キーデータを取得し、（２）２回目以降の処理では、前記単位長初期値データ、および、スクランブル化が完了した単位長送信データの両方、または、スクランブル化が完了した単位長送信データのみを用いて、所定の論理演算を行うことで前記スクランブル処理用キーデータを取得する前記スクランブル用キーデータ生成部と、
前記スクランブル用キーデータ生成部により取得された前記スクランブル処理用キーデータと、前記単位長送信データとを用いて、所定の論理演算を行うことで、スクランブル化した単位長データであるスクランブル化単位長送信データを取得するとともに、取得した前記スクランブル化単位長送信データを複数まとめることで、１つのスクランブル化送信データを生成するスクランブルデータ生成部と、
前記スクランブルデータ生成部により生成された前記スクランブル化送信データから、複数の経路を用いて送信するためのサブフローデータを生成するサブフローデータ生成部と、
を備えるデータ送信装置。
【請求項２】
前記所定の論理演算は、排他的論理和演算である、
請求項１に記載のデータ送信装置。
【請求項３】
前記単位長データは、１バイトのデータである、
請求項１又は２に記載のデータ送信装置。
【請求項４】
前記初期値データは、
自装置を識別するためのデータであるキーデータをキーデータｋｅｙＡとしたとき、
ＭｓｇＤｉｇ＝ＳＨＡ１（ｋｅｙＡ）
ＩＤＳＮ＝Ｌｏｗｅｒ＿８ｂｙｔｅｓ（ＭｓｇＤｉｇ）
ＳＨＡ１（ｘ）：ｘに対するＳＨＡ−１によるメッセージダイジェストを取得する関数
Ｌｏｗｅｒ＿８ｂｙｔｅｓ（ｘ）：ｘの下位８バイトを取得する関数
により取得されたＩＤＳＮ値である、
請求項１から３のいずれかに記載のデータ送信装置。
【請求項５】
ＭＰＴＣＰを用いた通信を実行する機能を有し、
ＭＰＴＣＰコネクションの確立処理を実行するＭＰＴＣＰコネクション確立処理部をさらに備え、
前記ＭＰＴＣＰコネクション確立処理部は、
ＭＰＴＣＰコネクションの確立処理時において、ＭＰ＿ＣＡＰＡＢＬＥオプションの所定のフラグを所定の値にセットしたＳＹＮセグメントを生成し、当該ＳＹＮセグメントを前記データ受信装置に送信することで、スクランブル機能を用いたデータ転送を行うことを、前記データ受信装置に通知する、
請求項１から４のいずれかに記載のデータ送信装置。
【請求項６】
データ送信装置が複数の通信経路を用いて送信したデータを受信する機能を有するデータ受信装置であって、
前記データ送信装置から、複数の通信経路により、受信した複数のサブフローデータを、当該サブフローデータに含まれるデータシーケンス番号の順に並べる処理を実行することで、複数のサブフローデータを１つにまとめた受信データを取得するＭＰＴＣＰデータ取得部と、
ＭＰＴＣＰデータ取得部により取得された前記受信データを所定の単位長のデータに区分した単位長データのうちの最初の単位長データである単位長受信スクランブルデータをデスクランブル化するためのスクランブル処理用キーデータを取得するスクランブル用キーデータ生成部であって、（１）１回目の処理では、通信相手である前記データ送信装置を識別するためのデータであるキーデータから導出された初期値データを所定の単位長のデータに区分した単位長データである単位長初期値データを用いて、所定の論理演算を行うことでデスクランブル化処理のためのスクランブル処理用キーデータを取得し、（２）２回目以降の処理では、前記単位長初期値データ、および、デスクランブル化が完了した単位長受信データの両方、または、デスクランブル化が完了した単位長受信データのみを用いて、所定の論理演算を行うことで前記スクランブル処理用キーデータを取得する前記スクランブル用キーデータ生成部と、
前記スクランブル用キーデータ生成部により取得された前記スクランブル処理用キーデータと、前記単位長受信スクランブルデータとを用いて、所定の論理演算を行うことで、デスクランブル化した単位長データである単位長受信データを取得するとともに、取得した前記単位長受信データを複数まとめることで、１つのデスクランブル化された受信データを取得する受信データ取得部と、
を備えるデータ受信装置。
【請求項７】
前記所定の論理演算は、排他的論理和演算である、
請求項６に記載のデータ受信装置。
【請求項８】
前記単位長データは、１バイトのデータである、
請求項６又は７に記載のデータ受信装置。
【請求項９】
前記初期値データは、
通信相手である前記データ送信装置を識別するためのデータであるキーデータをキーデータｋｅｙＡとしたとき、
ＭｓｇＤｉｇ＝ＳＨＡ１（ｋｅｙＡ）
ＩＤＳＮ＝Ｌｏｗｅｒ＿８ｂｙｔｅｓ（ＭｓｇＤｉｇ）
ＳＨＡ１（ｘ）：ｘに対するＳＨＡ−１によるメッセージダイジェストを取得する関数
Ｌｏｗｅｒ＿８ｂｙｔｅｓ（ｘ）：ｘの下位８バイトを取得する関数
により取得されたＩＤＳＮ値である、
請求項６から８のいずれかに記載のデータ受信装置。
【請求項１０】
ＭＰＴＣＰを用いた通信を実行する機能を有し、
ＭＰＴＣＰコネクションの確立処理を実行するＭＰＴＣＰコネクション確立処理部をさらに備え、
前記ＭＰＴＣＰコネクション確立処理部は、
ＭＰＴＣＰコネクションの確立処理時において、前記データ送信装置により、ＭＰ＿ＣＡＰＡＢＬＥオプションの所定のフラグを所定の値にセットしたＳＹＮセグメント受信することで、前記データ送信装置がスクランブル機能を用いたデータ転送を行う機能を有していると判定する、
請求項６から９のいずれかに記載のデータ受信装置。
【請求項１１】
請求項１から５のいずれかに記載のデータ送信装置と、
請求項６から１０のいずれかに記載のデータ受信装置と、
を備える通信システム。
【請求項１２】
データ送信装置からデータ受信装置に対して、複数の通信経路を用いてデータを送信するときに用いられるデータ送信方法であって、
送信データを所定の単位長のデータに区分した単位長データのうちの最初の単位長データである単位長送信データをスクランブル化するためのスクランブル処理用キーデータを取得するスクランブル用キーデータ生成ステップであって、（１）１回目の処理では、前記データ送信装置を識別するためのデータであるキーデータから導出された初期値データを所定の単位長のデータに区分した単位長データである単位長初期値データを用いて、所定の論理演算を行うことでスクランブル化処理のためのスクランブル処理用キーデータを取得し、（２）２回目以降の処理では、前記単位長初期値データ、および、スクランブル化が完了した単位長送信データの両方、または、スクランブル化が完了した単位長送信データのみを用いて、所定の論理演算を行うことで前記スクランブル処理用キーデータを取得する前記スクランブル用キーデータ生成ステップと、
前記スクランブル用キーデータ生成ステップにより取得された前記スクランブル処理用キーデータと、前記単位長送信データとを用いて、所定の論理演算を行うことで、スクランブル化した単位長データであるスクランブル化単位長送信データを取得するとともに、取得した前記スクランブル化単位長送信データを複数まとめることで、１つのスクランブル化送信データを生成するスクランブルデータ生成ステップと、
前記スクランブルデータ生成ステップにより生成された前記スクランブル化送信データから、複数の経路を用いて送信するためのサブフローデータを生成するサブフローデータ生成ステップと、
を備えるデータ送信方法をコンピュータに実行させるためのプログラム。
【請求項１３】
データ受信装置において、データ送信装置から、複数の通信経路を用いて送信されたデータを受信するときに用いられるデータ受信方法であって、
前記データ送信装置から、複数の通信経路により、受信した複数のサブフローデータを、当該サブフローデータに含まれるデータシーケンス番号の順に並べる処理を実行することで、複数のサブフローデータを１つにまとめた受信データを取得するＭＰＴＣＰデータ取得ステップと、
ＭＰＴＣＰデータ取得ステップにより取得された前記受信データを所定の単位長のデータに区分した単位長データのうちの最初の単位長データである単位長受信スクランブルデータをデスクランブル化するためのスクランブル処理用キーデータを取得するスクランブル用キーデータ生成ステップであって、（１）１回目の処理では、前記データ送信装置を識別するためのデータであるキーデータから導出された初期値データを所定の単位長のデータに区分した単位長データである単位長初期値データを用いて、所定の論理演算を行うことでデスクランブル化処理のためのスクランブル処理用キーデータを取得し、（２）２回目以降の処理では、前記単位長初期値データ、および、デスクランブル化が完了した単位長受信データの両方、または、デスクランブル化が完了した単位長受信データのみを用いて、所定の論理演算を行うことで前記スクランブル処理用キーデータを取得する前記スクランブル用キーデータ生成ステップと、
前記スクランブル用キーデータ生成ステップにより取得された前記スクランブル処理用キーデータと、前記単位長受信スクランブルデータとを用いて、所定の論理演算を行うことで、デスクランブル化した単位長データである単位長受信データを取得するとともに、取得した前記単位長受信データを複数まとめることで、１つのデスクランブル化された受信データを取得する受信データ取得ステップと、
を備えるデータ受信方法をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データを複数経路に分散させて送受信することで、セキュアな通信を実現するための技術に関する。
【背景技術】
【０００２】
インターネット上の通信において、様々な脅威が指摘されている。そのような脅威の一つに転送データの盗聴がある。例えば、公衆無線ＬＡＮによる通信では、アクセスポイントと端末との間の無線通信において、暗号化されずに通信が実行されることが多い。このため、通信中にユーザ識別子やパスワードといった重要な個人情報が盗まれたり、通信内容を傍受されたりする危険性がある。
【０００３】
このような状況に対応するために、サーバとクライアントとの間の通信において、エンド・ツ・エンド（ｅｎｄ−ｔｏ−ｅｎｄ）で暗号化を行うＴＬＳ（Ｔｒａｎｓｐｏｒｔ  Ｌａｙｅｒ  Ｓｅｃｕｒｉｔｙ）が広く利用されているが、電子メールやＶｏＩＰなどの通信には適用されない場合が多い。
【０００４】
一方、近年の端末は、スマートフォンやタブレットに代表されるように、複数の通信インターフェースを搭載するものが広く普及している。そして、このような端末を有効に利用するために、１つのＴＣＰ通信を、異なるインターフェースを用いた複数のパスを介して実現するマルチパスＴＣＰが用いられるようになってきている。
【０００５】
このような複数のパスを介して実現される通信において、通信中の転送データを複数のパスに分散させることにより、１つのパスの通信を盗聴しただけでは、全体の通信を把握することができないようにするための技術の研究開発がなされている。このような技術では、データを暗号化するのではなく、データを複数のパスに分散させることにより、秘匿性を高めることを目的としている。このため、このような技術では、事前暗号鍵の登録や、証明書の準備などが不要であるという長所を有する。
【０００６】
このような技術の開発は、複数の無線アクセス網を積極的に利用する次世代（５Ｇ）移動通信網において、さらに重要となると考えられる。
【０００７】
従来からも同様の技術の研究開発が行われている。
【０００８】
例えば、非特許文献１には、ＴＣＰを用いた１つのデータ転送を、複数の経路の通信に分散させることにより、データの全体像を把握できなくするという方法の開示がある。非特許文献１に開示されている方法では、データ自身の秘匿性が保証されないため、ある経路を経由した通信が盗聴された場合、そのデータは解読されてしまう可能性がある。盗聴されたデータに重要な個人情報等が含まれていた場合、当該重要な個人情報等が流出しまう恐れがあり、その流出した情報をもとにして、不正な攻撃を受けるリスクが発生する。
【０００９】
また、秘密分散法と呼ばれる技術も研究されている。秘密分散法では、以下のようにして処理が実行される。
（１）ある秘密情報をｎ個（ｎは、２以上の自然数）に分割し、分割された秘密情報は、ｎ人のユーザに分配される。
（２）分割されたｎ個の秘密情報のうち、ｋ個の秘密情報が集められた場合（ｎ人のユーザのうちｋ人のユーザから分割された秘密情報を集められた場合）、元の秘密情報が復元される。
【００１０】
この秘密分散法は、暗号鍵を複数のユーザに分割して持たせる場合などに使用される。
【００１１】
しかしながら、秘密分散法では、転送するデータがｎ倍となるため、効率が悪い。
【先行技術文献】
【非特許文献】
【００１２】
【非特許文献１】M. Nacher, et al., “Evaluation of the Impact of Multipath Data Dispersion for Anonymous TCP Connections,” in Proc. International Conference on Emerging Security Information, Systems and Technologies, pp. 24-29, Oct. 2007.
【発明の概要】
【発明が解決しようとする課題】
【００１３】
上記のように、従来技術では、複数のパスを用いた通信において、転送するデータ量を増加させることなく、かつ、セキュリティを確保することが困難である。
【００１４】
そこで、本発明は、上記問題点に鑑み、複数のパスを用いた通信において、転送するデータ量を増加させることなく、かつ、セキュリティを確保することができるデータ送信装置、データ受信装置、通信システム、および、プログラムを実現することを目的とする。
【課題を解決するための手段】
【００１５】
上記課題を解決するために、第１の発明は、データ受信装置に対して、複数の通信経路を用いてデータを送信する機能を有するデータ送信装置であって、スクランブル用キーデータ生成部と、スクランブルデータ生成部と、サブフローデータ生成部と、を備える。
【００１６】
スクランブル用キーデータ生成部は、送信データを所定の単位長のデータに区分した単位長データのうちの最初の単位長データである単位長送信データをスクランブル化するためのスクランブル処理用キーデータを取得する。そして、スクランブル用キーデータ生成部は、（１）１回目の処理では、自装置を識別するためのデータであるキーデータから導出された初期値データを所定の単位長のデータに区分した単位長データである単位長初期値データを用いて、所定の論理演算を行うことでスクランブル化処理のためのスクランブル処理用キーデータを取得し、（２）２回目以降の処理では、単位長初期値データ、および、スクランブル化が完了した単位長送信データの両方、または、スクランブル化が完了した単位長送信データのみを用いて、所定の論理演算を行うことでスクランブル処理用キーデータを取得する。
【００１７】
スクランブルデータ生成部は、スクランブル用キーデータ生成部により取得されたスクランブル処理用キーデータと、単位長送信データとを用いて、所定の論理演算を行うことで、スクランブル化した単位長データであるスクランブル化単位長送信データを取得するとともに、取得したスクランブル化単位長送信データを複数まとめることで、１つのスクランブル化送信データを生成する。
【００１８】
サブフローデータ生成部は、スクランブルデータ生成部により生成されたスクランブル化送信データから、複数の経路を用いて送信するためのサブフローデータを生成する。
【００１９】
このデータ送信装置では、上記処理を実行することにより、スクランブル化した送信データを取得することができ、取得したスクランブル化送信データを複数の経路（例えば、ＴＣＰサブフロー）を用いて送信することができる。
【００２０】
つまり、このデータ送信装置によりスクランブル化処理された送信データは、複数の経路（例えば、ＴＣＰサブフロー）により、分散して、送信側から受信側に送信されるため、通信経路の途中で、一部のデータが盗聴、傍受されたとしても、元のデータに戻すことができない。
【００２１】
また、このデータ送信装置によりスクランブル化された送信データは、スクランブル前の送信データと同じ長さであり、転送するデータ量を増加させることがない。
【００２２】
このように、このデータ送信装置を用いることで、複数の通信経路を用いた通信において、転送するデータ量を増加させることなく、かつ、セキュリティを確保することができる。
【００２３】
なお、データ送信装置は、受信機能を備えるものであってもよい。
【００２４】
第２の発明は、第１の発明であって、所定の論理演算は、排他的論理和演算である。
【００２５】
これにより、このデータ送信装置では、排他的論理和演算により、送信データのスクランブル化処理を実行することができる。
【００２６】
第３の発明は、第１または第２の発明であって、単位長データは、１バイトのデータである。
【００２７】
これにより、このデータ送信装置では、１バイト単位での論理演算（例えば、排他的論理和演算）により、送信データのスクランブル化処理を実行することができる。
【００２８】
第４の発明は、第１から第３のいずれかの発明であって、初期値データは、自装置を識別するためのデータであるキーデータをキーデータｋｅｙＡとしたとき、
ＭｓｇＤｉｇ＝ＳＨＡ１（ｋｅｙＡ）
ＩＤＳＮ＝Ｌｏｗｅｒ＿８ｂｙｔｅｓ（ＭｓｇＤｉｇ）
ＳＨＡ１（ｘ）：ｘに対するＳＨＡ−１によるメッセージダイジェストを取得する関数。
Ｌｏｗｅｒ＿８ｂｙｔｅｓ（ｘ）：ｘの下位８バイトを取得する関数。
により取得されたＩＤＳＮ値である。
【００２９】
これにより、このデータ送信装置では、初期値データにＩＤＳＮ値を用いることができる。そして、ＩＤＳＮ値は、自装置のキーデータから導出するため、送信側と受信側との間で、例えば、コネクション確立時に、キーデータを送信しておけば、スクランブル処理、デスクランブル処理のための初期値を、別途、送信側から受信側に送信する必要がなくなる。
【００３０】
第５の発明は、第１から第４のいずれかの発明であって、ＭＰＴＣＰを用いた通信を実行する機能を有し、ＭＰＴＣＰコネクションの確立処理を実行するＭＰＴＣＰコネクション確立処理部をさらに備える。
【００３１】
ＭＰＴＣＰコネクション確立処理部は、ＭＰＴＣＰコネクションの確立処理時において、ＭＰ＿ＣＡＰＡＢＬＥオプションの所定のフラグを所定の値にセットしたＳＹＮセグメントを生成し、当該ＳＹＮセグメントをデータ受信装置に送信することで、スクランブル機能を用いたデータ転送を行うことを、データ受信装置に通知する。
【００３２】
これにより、このデータ送信装置では、ＭＰＴＣＰコネクションの確立処理時にスクランブル機能を用いたデータ転送を行うことを、データ受信装置に通知することができる。したがって、別途、スクランブル機能を用いたデータ転送を行うことを、送信側から受信側に通知するための通信が不要となり、その結果、データ通信量を増加させることはない。
【００３３】
第６の発明は、データ送信装置が複数の通信経路を用いて送信したデータを受信する機能を有するデータ受信装置であって、ＭＰＴＣＰデータ取得部と、スクランブル用キーデータ生成部と、受信データ取得部と、を備える。
【００３４】
ＭＰＴＣＰデータ取得部は、データ送信装置から、複数の通信経路により、受信した複数のサブフローデータを、当該サブフローデータに含まれるデータシーケンス番号の順に並べる処理を実行することで、複数のサブフローデータを１つにまとめた受信データを取得する。
【００３５】
スクランブル用キーデータ生成部は、ＭＰＴＣＰデータ取得部により取得された受信データを所定の単位長のデータに区分した単位長データのうちの最初の単位長データである単位長受信スクランブルデータをデスクランブル化するためのスクランブル処理用キーデータを取得する。そして、スクランブル用キーデータ生成部は、（１）１回目の処理では、通信相手であるデータ送信装置を識別するためのデータであるキーデータから導出された初期値データを所定の単位長のデータに区分した単位長データである単位長初期値データを用いて、所定の論理演算を行うことでデスクランブル化処理のためのスクランブル処理用キーデータを取得し、（２）２回目以降の処理では、単位長初期値データ、および、デスクランブル化が完了した単位長受信データの両方、または、デスクランブル化が完了した単位長受信データのみを用いて、所定の論理演算を行うことでスクランブル処理用キーデータを取得する。
【００３６】
受信データ取得部は、スクランブル用キーデータ生成部により取得されたスクランブル処理用キーデータと、単位長受信スクランブルデータとを用いて、所定の論理演算を行うことで、デスクランブル化した単位長データである単位長受信データを取得するとともに、取得した単位長受信データを複数まとめることで、１つのデスクランブル化された受信データを取得する。
【００３７】
なお、データ受信装置は、データ送信機能を有していてもよい。
【００３８】
このデータ受信装置では、上記処理を実行することにより、データ送信装置から、複数の経路（例えば、ＴＣＰサブフロー）を用いて送信されてきた、スクランブル化データをデスクランブルして、受信データを取得することができる。
【００３９】
つまり、このデータ受信装置で受信するデータは、データ送信装置により、スクランブル化処理された送信データであり、当該送信データは、複数の経路（例えば、ＴＣＰサブフロー）により、分散して、送信側から受信側に送信される。このため、データ送信装置から送信されるデータは、通信経路の途中で、一部のデータが盗聴、傍受されたとしても、元のデータに戻すことができない。
【００４０】
したがって、このデータ受信装置をデータ送信装置とともに用いることで、複数の通信経路を用いた通信において、転送するデータ量を増加させることなく、かつ、セキュリティを確保することができる。
【００４１】
なお、データ受信装置は、送信機能を備えるものであってもよい。
【００４２】
第７の発明は、第６の発明であって、所定の論理演算は、排他的論理和演算である。
【００４３】
これにより、このデータ受信装置では、１バイト単位での論理演算（例えば、排他的論理和演算）により、スクランブル化された受信データのデスクランブル化処理を実行することができる。
【００４４】
第８の発明は、第６または第７の発明であって、単位長データは、１バイトのデータである。
【００４５】
これにより、このデータ受信装置では、１バイト単位での論理演算（例えば、排他的論理和演算）により、スクランブル化された受信データのデスクランブル化処理を実行することができる。
【００４６】
第９の発明は、第６から第８のいずれかの発明であって、初期値データは、通信相手であるデータ送信装置を識別するためのデータであるキーデータをキーデータｋｅｙＡとしたとき、
ＭｓｇＤｉｇ＝ＳＨＡ１（ｋｅｙＡ）。
ＩＤＳＮ＝Ｌｏｗｅｒ＿８ｂｙｔｅｓ（ＭｓｇＤｉｇ）。
ＳＨＡ１（ｘ）：ｘに対するＳＨＡ−１によるメッセージダイジェストを取得する関数。
Ｌｏｗｅｒ＿８ｂｙｔｅｓ（ｘ）：ｘの下位８バイトを取得する関数。
により取得されたＩＤＳＮ値である。
【００４７】
これにより、このデータ受信装置では、初期値データにＩＤＳＮ値を用いることができる。そして、ＩＤＳＮ値は、通信相手であるデータ送信装置のキーデータから導出するため、送信側と受信側との間で、例えば、コネクション確立時に、キーデータを送信しておけば、スクランブル処理、デスクランブル処理のための初期値を、別途、送信側から受信側に送信する必要がなくなる。
【００４８】
第１０の発明は、第６から第９のいずれかの発明であって、ＭＰＴＣＰを用いた通信を実行する機能を有し、ＭＰＴＣＰコネクションの確立処理を実行するＭＰＴＣＰコネクション確立処理部をさらに備える。
【００４９】
ＭＰＴＣＰコネクション確立処理部は、ＭＰＴＣＰコネクションの確立処理時において、データ送信装置により、ＭＰ＿ＣＡＰＡＢＬＥオプションの所定のフラグを所定の値にセットしたＳＹＮセグメント受信することで、データ送信装置がスクランブル機能を用いたデータ転送を行う機能を有していると判定する。
【００５０】
これにより、このデータ受信装置では、ＭＰＴＣＰコネクションの確立処理時にスクランブル機能を用いたデータ転送を行うことを示す情報、データ送信装置から取得することができる。したがって、別途、スクランブル機能を用いたデータ転送を行うことを、送信側から受信側に通知するための通信が不要となり、その結果、データ通信量を増加させることはない。
【００５１】
第１１の発明は、第１から第５のいずれかの発明であるデータ送信装置と、第６から第１０のいずれかの発明であるデータ受信装置とを備える通信システムである。
【００５２】
これにより、第１から第５のいずれかの発明であるデータ送信装置と、第６から第１０のいずれかの発明であるデータ受信装置とを備える通信システムを実現することができる。
【００５３】
第１２の発明は、データ送信装置からデータ受信装置に対して、複数の通信経路を用いてデータを送信するときに用いられるデータ送信方法をコンピュータに実行させるためのプログラムである。
【００５４】
データ送信方法は、スクランブル用キーデータ生成ステップと、スクランブルデータ生成ステップと、サブフローデータ生成ステップと、を備える。
【００５５】
スクランブル用キーデータ生成ステップは、送信データを所定の単位長のデータに区分した単位長データのうちの最初の単位長データである単位長送信データをスクランブル化するためのスクランブル処理用キーデータを取得する。そして、スクランブル用キーデータ生成ステップは、（１）１回目の処理では、データ送信装置を識別するためのデータであるキーデータから導出された初期値データを所定の単位長のデータに区分した単位長データである単位長初期値データを用いて、所定の論理演算を行うことでスクランブル化処理のためのスクランブル処理用キーデータを取得し、（２）２回目以降の処理では、単位長初期値データ、および、スクランブル化が完了した単位長送信データの両方、または、スクランブル化が完了した単位長送信データのみを用いて、所定の論理演算を行うことでスクランブル処理用キーデータを取得する。
【００５６】
スクランブルデータ生成ステップは、スクランブル用キーデータ生成ステップにより取得されたスクランブル処理用キーデータと、単位長送信データとを用いて、所定の論理演算を行うことで、スクランブル化した単位長データであるスクランブル化単位長送信データを取得するとともに、取得したスクランブル化単位長送信データを複数まとめることで、１つのスクランブル化送信データを生成する。
【００５７】
サブフローデータ生成ステップは、スクランブルデータ生成ステップにより生成されたスクランブル化送信データから、複数の経路を用いて送信するためのサブフローデータを生成する。
【００５８】
これにより、第１の発明と同様の効果を奏するデータ送信方法をコンピュータに実行させるためのプログラムを実現することができる。
【００５９】
第１３の発明は、データ受信装置において、データ送信装置から、複数の通信経路を用いて送信されたデータを受信するときに用いられるデータ受信方法をコンピュータに実行させるためのプログラムである。
【００６０】
データ受信方法は、ＭＰＴＣＰデータ取得ステップと、スクランブル用キーデータ生成ステップと、受信データ取得ステップと、を備える。
【００６１】
ＭＰＴＣＰデータ取得ステップは、データ送信装置から、複数の通信経路により、受信した複数のサブフローデータを、当該サブフローデータに含まれるデータシーケンス番号の順に並べる処理を実行することで、複数のサブフローデータを１つにまとめた受信データを取得する。
【００６２】
スクランブル用キーデータ生成ステップは、ＭＰＴＣＰデータ取得ステップにより取得された受信データを所定の単位長のデータに区分した単位長データのうちの最初の単位長データである単位長受信スクランブルデータをデスクランブル化するためのスクランブル処理用キーデータを取得する。そして、スクランブル用キーデータ生成ステップは、（１）１回目の処理では、データ送信装置を識別するためのデータであるキーデータから導出された初期値データを所定の単位長のデータに区分した単位長データである単位長初期値データを用いて、所定の論理演算を行うことでデスクランブル化処理のためのスクランブル処理用キーデータを取得し、（２）２回目以降の処理では、単位長初期値データ、および、デスクランブル化が完了した単位長受信データの両方、または、デスクランブル化が完了した単位長受信データのみを用いて、所定の論理演算を行うことでスクランブル処理用キーデータを取得する。
【００６３】
受信データ取得ステップは、スクランブル用キーデータ生成ステップにより取得されたスクランブル処理用キーデータと、単位長受信スクランブルデータとを用いて、所定の論理演算を行うことで、デスクランブル化した単位長データである単位長受信データを取得するとともに、取得した単位長受信データを複数まとめることで、１つのデスクランブル化された受信データを取得する。
【００６４】
これにより、第６の発明と同様の効果を奏するデータ受信方法をコンピュータに実行させるためのプログラムを実現することができる。
【発明の効果】
【００６５】
本発明によれば、複数のパスを用いた通信において、転送するデータ量を増加させることなく、かつ、セキュリティを確保することができるデータ送信装置、データ受信装置、通信システム、および、プログラムを実現することができる。
【図面の簡単な説明】
【００６６】
【図１】第１実施形態に係る通信システム１０００の概略構成図。
【図２】第１実施形態に係る通信システム１０００で実行される処理、扱うデータについての概略を模式的に示した図。
【図３】第１実施形態に係る通信システム１０００の第１データ通信モジュール１の概略構成図。
【図４】第１実施形態に係る通信システム１０００のスクランブル用キーデータ生成部１２およびスクランブルデータ生成部１３の概略構成図。
【図５】第１実施形態に係る通信システム１０００の第２データ通信モジュール２の概略構成図。
【図６】第１実施形態に係る通信システム１０００のデスクランブルデータ取得部２４およびスクランブル用キーデータ生成部２５の概略構成図。
【図７】ＭＰＴＣＰコネクション確立処理のシーケンス図。
【図８】ＭＰＴＣＰコネクションによるデータ転送処理のシーケンス図。
【図９】ＭＰＴＣＰコネクションの解放処理のシーケンス図。
【図１０】ＲＦＣ６８２４で規定されているＭＰ＿ＣＡＰＡＢＬＥオプションのデータフォーマット（横方向の幅を３２ビットとして表示したデータフォーマット）を示す図。
【図１１】スクランブルデータの生成処理を説明するための図（１回目の処理（送信側））。
【図１２】スクランブルデータの生成処理を説明するための図（２回目の処理（送信側））。
【図１３】スクランブルデータの生成処理を説明するための図（３回目の処理（送信側））。
【図１４】デスクランブルデータの取得処理を説明するための図（１回目の処理（受信側））。
【図１５】デスクランブルデータの取得処理を説明するための図（２回目の処理（受信側））。
【図１６】デスクランブルデータの取得処理を説明するための図（３回目の処理（受信側））。
【図１７】ＣＰＵバス構成を示す図。
【発明を実施するための形態】
【００６７】
［第１実施形態］
第１実施形態について、図面を参照しながら、以下、説明する。
【００６８】
＜１．１：通信システムの構成＞
図１は、第１実施形態に係る通信システム１０００の概略構成図である。
【００６９】
図２は、第１実施形態に係る通信システム１０００で実行される処理、扱うデータについての概略を模式的に示した図である。
【００７０】
図３は、第１実施形態に係る通信システム１０００の第１データ通信モジュール１の概略構成図である。
【００７１】
図４は、第１実施形態に係る通信システム１０００のスクランブル用キーデータ生成部１２およびスクランブルデータ生成部１３の概略構成図である。
【００７２】
図５は、第１実施形態に係る通信システム１０００の第２データ通信モジュール２の概略構成図である。
【００７３】
図６は、第１実施形態に係る通信システム１０００のデスクランブルデータ取得部２４およびスクランブル用キーデータ生成部２５の概略構成図である。
【００７４】
通信システム１０００は、図１に示すように、第１通信装置Ｈ１と第２通信装置Ｈ２とを備える。なお、通信システム１０００は、複数の通信装置を備えてもよい。以下では、説明便宜のために、第１通信装置Ｈ１がデータ送信を行うための機能を備えており、第２通信装置Ｈ２がデータ受信を行う機能を備えている場合について説明する。しかしながら、これに限定されることはなく、通信システム１０００は、複数の通信装置を備えており、各通信装置の一部または全部が、送信機能、および、受信機能の両方を備えるものであってもよい。また、第１通信装置Ｈ１がデータ受信機能を備えるものであってもよい。また、第２通信装置Ｈ２がデータ送信機能を備えるものであってもよい。
【００７５】
また、通信システム１０００は、ＭＰＴＣＰ（Ｍｕｌｔｉｐａｔｈ  Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）による通信を実行できる機能を有しており、複数のパスにより、データ通信を行うことができる。なお、以下では、説明便宜のため、２つのパスを用いてＭＰＴＣＰによる通信を行う場合について、説明する。
【００７６】
第１通信装置Ｈ１は、図１に示すように、アプリケーション部Ｈ１＿ａｐと、第１データ通信モジュール１とを備える。第１通信装置Ｈ１は、図２に示すように、ＭＰＴＣＰによる通信を実行できる機能を有している。第１通信装置Ｈ１は、送信データをスクランブル処理してスクランブルデータを取得し、取得したスクランブルデータをＴＣＰのサブフローにより送信する機能を有する。
【００７７】
アプリケーション部Ｈ１＿ａｐは、アプリケーション層の処理を行う。アプリケーション部Ｈ１＿ａｐは、送信データＤａｔａ＿ｔｘを第１データ通信モジュール１に出力する。なお、送信データＤａｔａ＿ｔｘは、第１通信装置Ｈ１の内部（例えば、記憶装置（不図示））で保持されているものであってもよく、あるいは、第１通信装置Ｈ１の外部から入力されるものであってもよい。
【００７８】
第１データ通信モジュール１は、図３に示すように、ＭＰＴＣＰコネクション確立処理部１０と、送信データ取得部１１と、スクランブル用キーデータ生成部１２と、スクランブルデータ生成部１３と、ＴＣＰサブフローデータ生成部１４と、第１通信インターフェース１５と、第２通信インターフェース１６とを備える。なお、本実施形態では、ＭＰＴＣＰ（Ｍｕｌｔｉｐａｔｈ  Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）による通信のパスが２つであるため、第１データ通信モジュール１は、２つの通信部（第１通信インターフェース１５と第２通信インターフェース１６）を有している。ＭＰＴＣＰ（Ｍｕｌｔｉｐａｔｈ  Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）による通信のパスがＮ個（Ｎ：自然数）である場合、第１データ通信モジュール１は、Ｎ個の通信部を備える。
【００７９】
ＭＰＴＣＰコネクション確立処理部１０は、外部の通信装置（通信相手となる通信装置）とのＭＰＴＣＰコネクションを確立するための処理を実行する機能部である。ＭＰＴＣＰコネクション確立処理部１０は、第１通信インターフェース１５を介して、外部の通信装置（通信相手となる通信装置）とのＭＰＴＣＰコネクションを確立するための処理を実行する。また、ＭＰＴＣＰコネクション確立処理部１０は、外部の通信装置（通信相手となる通信装置）とのＭＰＴＣＰコネクションの解放処理も行う。ＭＰＴＣＰコネクション確立処理部１０は、第１通信インターフェース１５を介して、ＭＰＴＣＰコネクションを解放するための処理を実行する。
【００８０】
送信データ取得部１１は、アプリケーション部Ｈ１＿ａｐから出力される送信データＤａｔａ＿ｔｘを入力する。送信データ取得部１１は、送信データＤａｔａ＿ｔｘから所定の長さのデータ（例えば、１バイトのデータ）を取得し、取得したデータをデータＤ＿ｔｘ［ｋ］としてスクランブル用キーデータ生成部１２およびスクランブルデータ生成部１３に出力する。また、送信データ取得部１１は、スクランブルデータ生成部１３から制御信号Ｃｔｌ１を入力する。なお、以下では、説明便宜のため、上記の「所定の長さ」が１バイトに相当するデータ長であるものとする。そして、データＤ＿ｔｘ［ｋ］は、送信データＤａｔａ＿ｔｘがＮ１バイトからなる場合、ｋバイト目（ｋ：整数、０≦ｋ＜Ｎ１）のバイトデータである。以下においても同様の表記（ｋバイト目のバイトデータであることを示す表記）を用いて説明する。
【００８１】
スクランブル用キーデータ生成部１２は、図４に示すように、シフトバッファ制御部１２１と、シフトバッファ１２２と、第１ＸＯＲ演算部１２３とを備える。
【００８２】
シフトバッファ制御部１２１は、送信データ取得部１１から出力されるデータＤ＿ｔｘ［ｋ］と、スクランブルデータ生成部１３から出力される制御信号Ｃｔｌ１とを入力する。また、シフトバッファ制御部１２１は、初期値を入力する。シフトバッファ制御部１２１は、初期値またはデータＤ＿ｔｘ［ｋ］をデータＤ＿ｂｙｔｅとしてシフトバッファ１２２に出力する。また、シフトバッファ制御部１２１は、制御信号Ｃｔｌ１に基づいて、シフトバッファ１２２を制御するための制御信号Ｃｔｌ２を生成し、生成した制御信号Ｃｔｌ２をシフトバッファ制御部１２１に出力する。
【００８３】
シフトバッファ１２２は、所定の単位（例えば、バイト単位）で記憶保持しているデータをシフトさせるバッファ（例えば、ＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）メモリ）である。シフトバッファ１２２は、シフトバッファ制御部１２１から出力されるデータＤ＿ｂｙｔｅを入力し、シフトバッファ１２２の所定の領域に記憶する。また、シフトバッファ１２２は、シフトバッファ制御部１２１から出力される制御信号Ｃｔｌ２を入力し、制御信号Ｃｔｌ２に基づいて、記憶されているデータを所定の単位（例えば、バイト単位）だけシフトさせる処理を行う。
【００８４】
第１ＸＯＲ演算部１２３は、シフトバッファ１２２に記憶されているデータを所定の単位（例えば、バイト単位）で読み出し、読み出したデータに対して論理演算処理（例えば、ＸＯＲ演算）を行い、当該論理演算処理の結果をデータＤｋｙ［ｋ］としてスクランブルデータ生成部１３に出力する。
【００８５】
スクランブルデータ生成部１３は、図４に示すように、第２ＸＯＲ演算部１３１と、スクランブルデータ取得部１３２とを備える。
【００８６】
第２ＸＯＲ演算部１３１は、スクランブル用キーデータ生成部１２から出力されるデータＤｋｙ［ｋ］と、送信データ取得部１１から出力されるデータＤ＿ｔｘ［ｋ］とを入力する。第２ＸＯＲ演算部１３１は、データＤｋｙ［ｋ］と、データＤ＿ｔｘ［ｋ］とを用いて論理演算処理（例えば、ＸＯＲ演算）を行い、当該論理演算処理の結果をデータＤ＿ｔｘｓ［ｋ］としてスクランブルデータ取得部１３２に出力する。
【００８７】
スクランブルデータ取得部１３２は、第２ＸＯＲ演算部１３１から出力されるデータＤ＿ｔｘｓ［ｋ］を入力する。スクランブルデータ取得部１３２は、第２ＸＯＲ演算部１３１からデータＤ＿ｔｘｓ［ｋ］を入力したら、シフトバッファ１２２を操作するための制御信号Ｃｔｌ１を生成し、生成した制御信号Ｃｔｌ１をシフトバッファ制御部１２１に出力する。また、スクランブルデータ取得部１３２は、データＤ＿ｔｘｓ［ｋ］を所定の個数分集めて、所定のデータ長の送信用データＤ＿ｔｘｓを生成する。例えば、送信用データＤ＿ｔｘｓがＮ１バイトである場合、Ｎ１バイト分のデータＤ＿ｔｘｓ［ｋ］が揃った後、Ｎ１バイト分のデータＤ＿ｔｘｓ［ｋ］から送信用データＤ＿ｔｘｓを取得し、取得した送信用データＤ＿ｔｘｓをＴＣＰサブフローデータ生成部１４に出力する。
【００８８】
ＴＣＰサブフローデータ生成部１４は、スクランブルデータ生成部１３から出力される送信用データＤ＿ｔｘｓを入力する。ＴＣＰサブフローデータ生成部１４は、送信用データＤ＿ｔｘｓから、複数のＴＣＰサブフローで送信可能なデータを取得する。本実施形態では、ＴＣＰサブフローの数は「２」であるため、ＴＣＰサブフローデータ生成部１４は、送信用データＤ＿ｔｘｓから、２つのＴＣＰサブフローで送信可能なデータＤ＿ｔｘｓ＿ｓｕｂ１およびＤ＿ｔｘｓ＿ｓｕｂ２を取得する。そして、ＴＣＰサブフローデータ生成部１４は、ＴＣＰサブフロー用データＤ＿ｔｘｓ＿ｓｕｂ１を第１通信インターフェース１５に出力し、ＴＣＰサブフロー用データＤ＿ｔｘｓ＿ｓｕｂ２を第２通信インターフェース１６に出力する。
【００８９】
第１通信インターフェース１５は、ＭＰＴＣＰコネクション確立処理部１０からの指令によりＭＰＴＣＰコネクション確立処理に必要な通信用データを生成し、生成した通信用データを、外部の通信装置（通信相手となる通信装置）に送信する。また、第１通信インターフェース１５は、外部の通信装置（通信相手となる通信装置）から受信したデータをＭＰＴＣＰコネクション確立処理部１０に出力する。
【００９０】
また、第１通信インターフェース１５は、ＴＣＰサブフローデータ生成部１４から出力されるＴＣＰサブフロー用データＤ＿ｔｘｓ＿ｓｕｂ１を入力し、ＴＣＰサブフロー用データＤ＿ｔｘｓ＿ｓｕｂ１に基づいて、送信用データＤ＿ｓｕｂ１を生成し、生成した送信用データＤ＿ｓｕｂ１を通信相手となる第２通信装置Ｈ２に送信する。
【００９１】
第２通信インターフェース１６は、ＴＣＰサブフローデータ生成部１４から出力されるＴＣＰサブフロー用データＤ＿ｔｘｓ＿ｓｕｂ２を入力し、ＴＣＰサブフロー用データＤ＿ｔｘｓ＿ｓｕｂ２に基づいて、送信用データＤ＿ｓｕｂ２を生成し、生成した送信用データＤ＿ｓｕｂ２を通信相手となる第２通信装置Ｈ２に送信する。
【００９２】
第２通信装置Ｈ２は、図１に示すように、アプリケーション部Ｈ２＿ａｐと、第２データ通信モジュール２とを備える。第２通信装置Ｈ２は、図２に示すように、ＭＰＴＣＰによる通信を実行できる機能を有している。
【００９３】
アプリケーション部Ｈ２＿ａｐは、アプリケーション層の処理を行う。アプリケーション部Ｈ２＿ａｐは、第２データ通信モジュール２から出力される受信データＤａｔａ＿ｒｘを入力する。
【００９４】
第２データ通信モジュール２は、図５に示すように、ＭＰＴＣＰコネクション確立処理部２０と、第３通信インターフェース２１と、第４通信インターフェース２２と、ＭＰＴＣＰデータ取得部２３と、デスクランブルデータ取得部２４と、スクランブル用キーデータ生成部２５と、受信データ取得部２６と、を備える。
【００９５】
なお、本実施形態では、ＭＰＴＣＰ（Ｍｕｌｔｉｐａｔｈ  Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）による通信のパスが２つであるため、第２データ通信モジュール２は、２つの通信部（第３通信インターフェース２１と第４通信インターフェース２２）を有している。ＭＰＴＣＰによる通信のパスがＮ個（Ｎ：自然数）である場合、第２データ通信モジュール２は、Ｎ個の通信部を備える。
【００９６】
ＭＰＴＣＰコネクション確立処理部２０は、外部の通信装置（通信相手となる通信装置）とのＭＰＴＣＰコネクションを確立するための処理を実行する機能部である。ＭＰＴＣＰコネクション確立処理部２０は、第３通信インターフェース２１を介して、外部の通信装置（通信相手となる通信装置）とのＭＰＴＣＰコネクションを確立するための処理を実行する。また、ＭＰＴＣＰコネクション確立処理部２０は、外部の通信装置（通信相手となる通信装置）とのＭＰＴＣＰコネクションの解放処理も行う。ＭＰＴＣＰコネクション確立処理部２０は、第３通信インターフェース２１を介して、ＭＰＴＣＰコネクションを解放するための処理を実行する。
【００９７】
第３通信インターフェース２１は、ＭＰＴＣＰコネクション確立処理部２０からの指令によりＭＰＴＣＰコネクション確立処理に必要な通信用データを生成し、生成した通信用データを、外部の通信装置（通信相手となる通信装置）に送信する。また、第３通信インターフェース２１は、外部の通信装置（通信相手となる通信装置）から受信したデータをＭＰＴＣＰコネクション確立処理部２０に出力する。
【００９８】
また、第３通信インターフェース２１は、第１通信装置Ｈ１から送信されるデータＤ＿ｓｕｂ１を受信し、受信したデータをデータＤ＿ｒｘｓ＿ｓｕｂ１としてＭＰＴＣＰデータ取得部２３に出力する。
【００９９】
第４通信インターフェース２２は、第１通信装置Ｈ１から送信されるデータＤ＿ｓｕｂ２を受信し、受信したデータをデータＤ＿ｒｘｓ＿ｓｕｂ２としてＭＰＴＣＰデータ取得部２３に出力する。
【０１００】
ＭＰＴＣＰデータ取得部２３は、第３通信インターフェース２１から出力されるデータＤ＿ｒｘｓ＿ｓｕｂ１と、第４通信インターフェース２２から出力されるデータＤ＿ｒｘｓ＿ｓｕｂ２と、を入力する。ＭＰＴＣＰデータ取得部２３は、ＴＣＰサブフローデータであるデータＤ＿ｒｘｓ＿ｓｕｂ１と、データＤ＿ｒｘｓ＿ｓｕｂ２とから、ＭＰＴＣＰデータＤ＿ｒｘｓを取得する。そして、ＭＰＴＣＰデータ取得部２３は、取得したＭＰＴＣＰデータＤ＿ｒｘｓをデスクランブルデータ取得部２４に出力する。
【０１０１】
デスクランブルデータ取得部２４は、図６に示すように、バイトデータ抽出部２４１と、第３ＸＯＲ演算部２４２とを備える。
【０１０２】
バイトデータ抽出部２４１は、ＭＰＴＣＰデータ取得部２３から出力されるデータＤ＿ｒｘｓを入力する。バイトデータ抽出部２４１は、データＤ＿ｒｘｓから所定の単位のデータ長（例えば、１バイト）のデータを抽出し、抽出したデータをデータＤ＿ｒｘｓ［ｋ］として、第３ＸＯＲ演算部２４２に出力する。
【０１０３】
第３ＸＯＲ演算部２４２は、バイトデータ抽出部２４１から出力されるデータＤ＿ｒｘｓ［ｋ］と、スクランブル用キーデータ生成部２５から出力されるデータＤｋｙ［ｋ］とを入力する。第３ＸＯＲ演算部２４２は、データＤ＿ｒｘｓ［ｋ］と、データＤｋｙ［ｋ］とを用いて論理演算処理（例えば、ＸＯＲ演算）を行い、当該論理演算処理の結果をデータＤ＿ｒｘ［ｋ］として受信データ取得部２６に出力する。
【０１０４】
スクランブル用キーデータ生成部２５は、第１データ通信モジュール１に含まれるスクランブル用キーデータ生成部１２と同じ構成を有している。
【０１０５】
スクランブル用キーデータ生成部２５は、図６に示すように、シフトバッファ制御部２５１と、シフトバッファ２５２と、第１ＸＯＲ演算部２５３とを備える。
【０１０６】
シフトバッファ制御部２５１は、デスクランブルデータ取得部２４から出力されるデータＤ＿ｔｘ［ｋ］と、受信データ取得部２６から出力される制御信号Ｃｔｌ３とを入力する。また、シフトバッファ制御部２５１は、初期値を入力する。シフトバッファ制御部２５１は、初期値またはデータＤ＿ｔｘ［ｋ］をデータＤ＿ｂｙｔｅとしてシフトバッファ２５２に出力する。また、シフトバッファ制御部２５１は、制御信号Ｃｔｌ３に基づいて、シフトバッファ２５２を制御するための制御信号Ｃｔｌ４を生成し、生成した制御信号Ｃｔｌ４をシフトバッファ制御部１２１に出力する。
【０１０７】
シフトバッファ２５２は、所定の単位（例えば、バイト単位）で記憶保持しているデータをシフトさせるバッファ（例えば、ＦＩＦＯメモリ）である。シフトバッファ２５２は、シフトバッファ制御部２５１から出力されるデータＤ＿ｂｙｔｅを入力し、シフトバッファ２５２の所定の領域に記憶する。また、シフトバッファ２５２は、シフトバッファ制御部２５１から出力される制御信号Ｃｔｌ４を入力し、制御信号Ｃｔｌ４に基づいて、記憶されているデータを所定の単位（例えば、バイト単位）だけシフトさせる処理を行う。
【０１０８】
第１ＸＯＲ演算部２５３は、シフトバッファ２５２に記憶されているデータを所定の単位（例えば、バイト単位）で読み出し、読み出したデータに対して論理演算処理（例えば、ＸＯＲ演算）を行い、当該論理演算処理の結果をデータＤｋｙ［ｋ］としてデスクランブルデータ取得部２４に出力する。
【０１０９】
受信データ取得部２６は、デスクランブルデータ取得部２４から出力されるデータＤ＿ｒｘ［ｋ］を入力する。受信データ取得部２６は、データＤ＿ｒｘ［ｋ］を所定の個数分集めて、所定のデータ長のデータＤａｔａ＿ｒｘを取得する。そして、受信データ取得部２６は、取得したデータＤａｔａ＿ｒｘをアプリケーション部Ｈ２＿ａｐに出力する。
【０１１０】
＜１．２：通信システムの動作＞
以上のように構成された通信システム１０００の動作について、以下、説明する。
【０１１１】
以下では、第１通信装置Ｈ１と第２通信装置との間においてＭＰＴＣＰを用いて通信する場合について説明する。なお、第１通信装置Ｈ１が２つのＩＰアドレス（アドレスＡ１およびアドレスＡ２）を有しており、第２通信装置が１つのＩＰアドレス（アドレスＢ）を有しているものとし、アドレスＡ１とアドレスＢとの間、および、アドレスＡ２とアドレスＢとの間の２つのＴＣＰサブフロー（２つの通信経路（通信パス））により通信が実行される場合について説明する。また、第１通信装置Ｈ１および第２通信装置は、通常のＴＣＰ／ＩＰによる通信機能、および、ＭＰＴＣＰによる通信機能を備えているものとする。
【０１１２】
図７は、ＭＰＴＣＰコネクション確立処理のシーケンス図である。
【０１１３】
図８は、ＭＰＴＣＰコネクションによるデータ転送処理のシーケンス図である。
【０１１４】
図９は、ＭＰＴＣＰコネクションの解放処理のシーケンス図である。
【０１１５】
（１．２．１：ＭＰＴＣＰコネクション確立処理）
まず、ＭＰＴＣＰコネクション確立処理について、説明する。
【０１１６】
通信システム１０００では、第１通信装置Ｈ１と第２通信装置Ｈ２との間でＭＰＴＣＰコネクションを確立させるための処理が実行される。このＭＰＴＣＰコネクション確立処理の基本手順は、ＲＦＣ６８２４（Ｒｅｑｕｅｓｔ  ｆｏｒ  Ｃｏｍｍｅｎｔｓ：  ６８２４、”ＴＣＰ  Ｅｘｔｅｎｓｉｏｎｓ  ｆｏｒ  Ｍｕｌｔｉｐａｔｈ  Ｏｐｅｒａｔｉｏｎ  ｗｉｔｈ  Ｍｕｌｔｉｐｌｅ  Ａｄｄｒｅｓｓｅｓ”）に従う。
【０１１７】
図７に示すように、第１通信装置Ｈ１は、アドレスＡ１を用いて、第２通信装置Ｈ２のアドレスＢ宛のＴＣＰセグメントの１つであるＳＹＮセグメント（ＴＣＰセグメント構造で規定されているフラグＳＹＮ（１ビット）をセットしたＴＣＰセグメント）を生成する。そして、当該ＳＹＮセグメントのＴＣＰオプションに、ＭＰ＿ＣＡＰＡＢＬＥオプションを含ませる。
【０１１８】
図１０は、ＲＦＣ６８２４で規定されているＭＰ＿ＣＡＰＡＢＬＥオプションのデータフォーマット（横方向の幅を３２ビットとして表示したデータフォーマット）である。
【０１１９】
第１通信装置Ｈ１は、図７に示すように、ＭＰ＿ＣＡＰＡＢＬＥオプションの「Sender's Key」エリアに、第１通信装置Ｈ１のキー（これを「ホストＡのキー」、または、「Ａのキー」という）を含め、また、所定のフラグをセットして、ＭＰ＿ＣＡＰＡＢＬＥオプションのデータを生成し、生成したＭＰ＿ＣＡＰＡＢＬＥオプションのデータを、ＳＹＮセグメントに含める。そして、このようにして生成したＳＹＮセグメントを含むデータを、第１通信装置Ｈ１は、アドレスＡ１から、第２通信装置Ｈ２のアドレスＢ宛に送信する。
【０１２０】
なお、「キー」は、６４ビット（８バイト）の情報である。キーは、ＭＰＴＣＰコネクション内で確立されるＴＣＰサブフローを認証するための情報であり、コネクション確立時にのみ転送される。また、「フラグ」は、チェックサムを要求するかどうか、暗号化アルゴリズムの種類（現在はSHA-1ベースのHMACの方式のみが定義）などを指定する。
【０１２１】
第１通信装置Ｈ１は、ＳＹＮセグメントにより、第１通信装置Ｈ１のキー（ホストＡのキー）を第２通信装置Ｈ２に通知する（ステップＳ１０１）。
【０１２２】
そして、第２通信装置Ｈ２は、ＳＹＮ＋ＡＣＫセグメント（ＳＹＮフラグとＡＣＫフラグをセットしたＴＣＰセグメント）により、第２通信装置Ｈ２のキー（これを「ホストＢのキー」、または、「Ｂのキー」という）を、第１通信装置Ｈ１に通知する（ステップＳ１０２）。
【０１２３】
最後に、３ウェイハンドシェークのＡＣＫセグメント（ＡＣＫフラグをセットしたＴＣＰセグメント）により、第１通信装置Ｈ１は、第２通信装置Ｈ２に対して、ホストＡのキーとホストＢのキーの双方のキーを通知する（ステップＳ１０３）。
【０１２４】
なお、キーは、ＭＰＴＣＰコネクションごとに異なる値が動的に生成される。
【０１２５】
ステップＳ１０２において、ＭＰ＿ＣＡＰＡＢＬＥオプションを受信側である第２通信装置Ｈ２が認識しない場合、ＳＹＮ＋ＡＣＫセグメントには対応するオプション（ホストＢのキー等の情報）が含まれない。この場合、第２通信装置Ｈ２は、ＭＰＴＣＰによる通信ができないと判定され、第１通信装置Ｈ１と第２通信装置Ｈ２との間に、通常のＴＣＰコネクションを確立させ、通信を開始させる。
【０１２６】
なお、上記のＭＰＴＣＰコネクション確立処理は、第１通信装置Ｈ１のＭＰＴＣＰコネクション確立処理部１０、および、第１通信インターフェース１５と、第２通信装置Ｈ２のＭＰＴＣＰコネクション確立処理部２０、および、第３通信インターフェース２１とにより実行される。
【０１２７】
上記処理により、第１通信装置Ｈ１と第２通信装置Ｈ２との間に、ＭＰＴＣＰコネクション、つまり、第１のＴＣＰサブフローのコネクションが確立された場合、通信システム１０００では、第１通信装置Ｈ１と第２通信装置Ｈ１との間に、第２のＴＣＰサブフロー（追加のＴＣＰサブフロー）のコネクション確立のための処理が実行される。
【０１２８】
図７に示すように、第２のＴＣＰサブフローのコネクション確立処理時において、第１通信装置Ｈ１は、ＳＹＮセグメントにおいて、ＭＰ＿ＪＯＩＮオプション（ＲＦＣ６８２４で規定されているＭＰ＿ＪＯＩＮオプション）を設定する。そして、ＭＰ＿ＪＯＩＮオプションに、ホストＢのトークン、ホストＡのナンス、ホストＡのアドレスＩＤ、フラグを含める。なお、以下では、「第１通信装置Ｈ１」を「ホストＡ」とよび、「第２通信装置Ｈ２」を「ホストＢ」とよぶことがある。
【０１２９】
「トークン」とは、ＭＰＴＣＰコネクションを確立した時点で、送信側（第１通信装置Ｈ１）と受信側（第２通信装置Ｈ２）で交換したキーから生成される値で、サブフローがどのＭＰＴＣＰコネクションに属するかを示す。トークンは、ＭＰ＿ＣＡＰＡＢＬＥオプションのキーの値（８バイト）に対して、ＳＨＡ−１によるメッセージダイジェスト（２０バイト）を計算し、その高位の３２ビット（４バイト）を抜き出したものである。またナンスは３２ビット（４バイト）の乱数である。
【０１３０】
「ナンス」は、３２ビットの乱数である。
【０１３１】
「アドレスＩＤ」は、送信アドレスを、途中にＮＡＴが存在して変更された場合でも識別できるようにするものである。
【０１３２】
なお、「トークン」、「ナンス」、「アドレスＩＤ」は、ＲＦＣ６８２４で規定されている。
【０１３３】
ステップＳ１０４において、第１通信装置Ｈ１は、上記のようにして生成されたＳＹＮセグメント（ＭＰ＿ＪＯＩＮオプションを含むＳＹＮセグメント）を含むデータを、アドレスＡ２から、第２通信装置Ｈ２のアドレスＢ宛に送信する。
【０１３４】
ステップＳ１０５において、第２通信装置Ｈ２は、ステップＳ１０４で、第１通信装置Ｈ１から受信したデータから、ホストＢ（第２通信装置Ｈ２）のトークンＢを取得する。第２通信装置Ｈ２は、自身が過去に発行したキーの中に、受信したトークンＢと一致するものがあるかどうかを調べる。そして、一致するものがある場合、第２通信装置Ｈ２は、過去に確立したＭＰＴＣＰコネクションを選び、当該ＭＰＴＣＰコネクションに対応する第１通信装置Ｈ１（ホストＡ）のキーを求めることができる。
【０１３５】
第２通信装置Ｈ２は、ＭＰ＿ＪＯＩＮオプションに、ホストＢのＨＭＡＣ、ホストＢのナンス、ホストＢのアドレスＩＤ、および、フラグを含め、そして、当該ＭＰ＿ＪＯＩＮオプションを含むＳＹＮ＋ＡＣＫセグメントを生成する。そして、第２通信装置Ｈ２は、生成したＳＹＮ＋ＡＣＫセグメントを含むデータ、第１通信装置Ｈ１に送信する。
【０１３６】
なお、ＳＹＮ＋ＡＣＫセグメントで、第２通信装置Ｈ２から第１通信装置Ｈ１に送られるＨＭＡＣは、Ｂのナンス＋Ａのナンスを、Ｂのキー＋ＡのキーでＨＭＡＣを求めた２０バイトのうちの、上位の６４ビット（８バイト）をとったものである。これは、第１通信装置Ｈ１と第２通信装置Ｈ２との間の互いの認証に使用される。
【０１３７】
ステップＳ１０６において、第１通信装置Ｈ１は、
ＭＰ＿ＪＯＩＮオプションに、ホストＡのＨＭＡＣを含め、そして、当該ＭＰ＿ＪＯＩＮオプションを含むＡＣＫセグメントを生成する。そして、第１通信装置Ｈ２は、生成したＡＣＫセグメントを含むデータを、第２通信装置Ｈ２に送信する。
【０１３８】
なお、ＡＣＫセグメントで、第１通信装置Ｈ１から第２通信装置Ｈ２に送られるＨＭＡＣは、Ａのナンス＋Ｂのナンスを、Ａのキー＋ＢのキーでＨＭＡＣを求めた２０バイトの値となる。
【０１３９】
以上の処理により、第１通信装置Ｈ１と第２通信装置Ｈ２との間に、２つのＴＣＰサブフローのコネクションが確立され、第１通信装置Ｈ１と第２通信装置Ｈ２との間において、ＭＰＴＣＰによる通信が可能となる。
【０１４０】
（１．２．２：ＭＰＴＣＰコネクションによるデータ転送処理）
次に、ＭＰＴＣＰコネクションによるデータ転送処理について、説明する。
【０１４１】
図９に示すように、第１通信装置Ｈ１は、第２通信装置Ｈ２に対して、２つのＴＣＰサブフローにより、ＭＰＴＣＰによる通信を行う。
【０１４２】
ＭＰＴＣＰによるデータ転送では、ＭＰＴＣＰコネクションを流れるデータに６４ビットのデータシーケンス番号（ＤＳＮ）が付与される。
【０１４３】
さらに、このＤＳＮとＴＣＰサブフローの３２ビットのシーケンス番号との対応をつけるために、図８に示すように、ＤＡＴＡ＿ＳＥＱＵＥＣＥ＿ＳＩＧＮＡＬオプション（ＲＦＣ６８２４を参照）が使用される。
【０１４４】
「データシーケンスマッピング」は、ＲＦＣ６８２４で規定されており、データシーケンスマッピングには、ＤＳＮと対応するサブフローシーケンス番号、このデータ（転送データ）のマッピングが有効な長さの情報が含まれる。また、データシーケンスマッピングには、コネクションレベルの確認応答のデータＡＣＫも含まれる。
【０１４５】
なお、自身（自装置）のキーの値に対してＳＨＡ−１によるメッセージダイジェストを計算した結果（２０バイト）の下位８バイトを、データシーケンス番号の初期値（Ｉｎｉｔｉａｌ  Ｄａｔａ  Ｓｅｑｕｅｎｃｅ  Ｎｕｍｂｅｒ：ＩＤＳＮ）として使用する。これにより、送信側と受信側で、ＩＤＳＮの値を明示的に交換する必要はなくなる。
【０１４６】
（１．２．３：ＭＰＴＣＰコネクションの解放処理）
次に、ＭＰＴＣＰコネクションの解放処理について、説明する。
【０１４７】
図９にＭＰＴＣＰコネクションの解放のシーケンスを示す。
【０１４８】
図９に示すように、第１通信装置Ｈ１は、第２通信装置Ｈ２に対して、ＤＡＴＡ＿ＳＥＱＵＥＣＥ＿ＳＩＧＮＡＬの一部としてデータＦＩＮを含め、データを送信する。第２通信装置Ｈ２は、第１通信装置Ｈ１から、データＦＩＮを受信することで、対応するＴＣＰサブフローのコネクションを解放する。本実施形態では、図９に示すように、２つのＴＣＰサブフローのコネクションが解放されることで、第１通信装置Ｈ１と第２通信装置Ｈ２間のＭＰＴＣＰコネクションが解放される。
【０１４９】
なお、上記のＭＰＴＣＰコネクション解放処理は、第１通信装置Ｈ１のＭＰＴＣＰコネクション確立処理部１０、および、第１通信インターフェース１５と、第２通信装置Ｈ２のＭＰＴＣＰコネクション確立処理部２０、および、第３通信インターフェース２１とにより実行される。
【０１５０】
（１．２．４：ＭＰＴＣＰコネクションによるスクランブルデータ転送処理）
次に、ＭＰＴＣＰコネクションによるスクランブルデータ転送処理について、説明する。
【０１５１】
第１通信装置Ｈ１は、ＭＰＴＣＰコネクションの確立処理時において、ＭＰ＿ＣＡＰＡＢＬＥオプションのフラグ、例えば、図１０のフラグＧを「１」にセットしたＳＹＮセグメントを、第２通信装置Ｈ２に送信する。つまり、ＭＰ＿ＣＡＰＡＢＬＥオプションの所定のフラグ（上記では、フラグＧ）をセットすることで、スクランブル機能を用いたデータ転送を行うことを、受信側（第２通信装置Ｈ２）に通知するように予め決めておく。
【０１５２】
なお、スクランブル機能を用いたデータ転送を行うことを通知するためのフラグのパターンは、上記に限定されることはない。例えば、既に使用されている（あるいは予約されている）ビットパターン（フラグＡ〜Ｈによるビットパターン）以外のビットパターンに、各フラグの値を設定することで、送信側から受信側に、スクランブル機能を用いたデータ転送を行うことを通知するようにしてもよい。
【０１５３】
第２通信装置Ｈ２は、上記のようにして生成されたＳＹＮセグメントのＭＰ＿ＣＡＰＡＢＬＥオプションの所定のフラグ（上記では、フラグＧ）がセットされていることを確認し、スクランブル機能を用いたデータの受信に備える。
【０１５４】
≪送信側の処理≫
第１通信装置Ｈ１の送信データ取得部１１は、アプリケーション部Ｈ１＿ａｐから出力される送信データＤａｔａ＿ｔｘを入力し、送信データＤａｔａ＿ｔｘから所定の長さ（１バイト）のデータを取得する。そして、送信データ取得部１１は、取得したデータをデータＤ＿ｔｘ［ｋ］としてスクランブル用キーデータ生成部１２およびスクランブルデータ生成部１３に出力する。
【０１５５】
なお、以下では、送信データＤａｔａ＿ｔｘがＮ１バイト（Ｎ１：自然数）のデータであり、送信データ取得部１１は、送信データＤａｔａ＿ｔｘの先頭バイト（Ｎ１−１バイト目のデータ）から０バイト目のデータまでを順番にバイト単位で取得（抽出）するものとする。
【０１５６】
したがって、送信データ取得部１１は、最初に、送信データＤａｔａ＿ｔｘの先頭バイト（Ｎ−１バイト目）のデータＤ＿ｔｘ［Ｎ１−１］を取得し、スクランブル用キーデータ生成部１２およびスクランブルデータ生成部１３に出力する。
【０１５７】
なお、以下では、説明便宜のため、Ｎ１＝８、すなわち、送信データＤａｔａ＿ｔｘが８バイトのデータである場合を一例として説明する。
【０１５８】
第１データ通信モジュール１では、スクランブルデータを作成するための初期値が設定される。具体的には、第１データ通信モジュール１は、データシーケンス番号の初期値であるＩＤＳＮを、初期値に設定する。つまり、第１データ通信モジュール１は、自装置（第１通信装置Ｈ１）のキーの値ｋｅｙＡに対して、ＳＨＡ−１によるメッセージダイジェストを計算した結果（２０バイト）の下位８バイトを、データシーケンス番号の初期値であるＩＤＳＮとする。すなわち、第１データ通信モジュール１は、
ＭｓｇＤｉｇ＝ＳＨＡ１（ｋｅｙＡ）
ＩＤＳＮ＝Ｌｏｗｅｒ＿８ｂｙｔｅｓ（ＭｓｇＤｉｇ）
ＳＨＡ１（ｘ）：ｘに対するＳＨＡ−１によるメッセージダイジェストを取得する関数
Ｌｏｗｅｒ＿８ｂｙｔｅｓ（ｘ）：ｘの下位８バイトを取得する関数
により、ＩＤＳＮを取得する。
【０１５９】
スクランブル用キーデータ生成部１２のシフトバッファ制御部１２１は、シフトバッファ１２２に、上記の初期値、すなわち、８バイトのデータであるＩＤＳＮを書き込む。ＩＤＳＮは、Ｄ７〜Ｄ０のバイトデータから構成されているものとする。
【０１６０】
図１１は、スクランブルデータの生成処理を説明するための図であり、送信データＤａｔａ＿ｔｘの最初（先頭）のバイトデータからスクランブルデータを生成する処理を説明するための図である（１回目の処理）。
【０１６１】
図１１に示すように、ＩＤＳＮの７バイト目のデータであるＤ７から、順番に、ＩＤＳＮの０バイト目のデータであるＤ０までが、シフトバッファ１２２に書き込まれる。
【０１６２】
なお、シフトバッファ１２２は、バイト単位で保持しているデータをシフトさせるバッファであり、図１１の右端に新しいバイトデータが書き込まれ、図１１の左方向に１バイトずつ、保持しているデータ（バイトデータ）をシフトさせるバッファである。そして、シフトバッファ１２２に保持されている最も古いデータ（図１１の左端のバイトデータ）は、次のシフト動作が実行されると破棄される。
【０１６３】
また、説明便宜のため、シフトバッファ１２２は、６４バイト分のデータを保持するバッファであるものとする。
【０１６４】
スクランブル用キーデータ生成部１２は、全てのバイトデータが０ｘ００となっている状態から、シフトバッファ制御部１２１により、初期値であるＩＤＳＮの８バイト分のデータを、シフトバッファ１２２に書き込む。この処理が終了した時点で、シフトバッファ１２２は、図１１に示した状態となる。なお、ＩＤＳＮは、Ｄ７〜Ｄ０の８つの１バイトのデータからなるものとする。Ｄ７が７バイト目のデータであり、Ｄ０が０バイト目のデータである。
【０１６５】
そして、第１ＸＯＲ演算部１２３は、１回目の処理（図１１に示した状態）において、シフトバッファ１２２の全てのバイトデータ、つまり、６４個のバイトデータを読み出し、読み出した６４個のバイトデータの排他的論理和をとる。つまり、第１ＸＯＲ演算部１２３は、
Ｄｋｙ［Ｎ１−１］＝Ｄｂｕｆ［６３］＾Ｄｂｕｆ［６２］＾・・・
＾Ｄｂｕｆ［２］＾Ｄｂｕｆ［１］＾Ｄｂｕｆ［０］
に相当する論理演算を行い、１バイトのデータＤｋｙ［Ｎ１−１］（＝Ｄｋｙ［７］）を取得する。
【０１６６】
なお、「＾」は、排他的論理和をとる演算子を表している。
【０１６７】
また、Ｄｂｕｆ［ｘ］は、シフトバッファ１２２のｘバイト目のバイトデータ（１バイトのデータ）を表す。
【０１６８】
１回目の処理（図１１に示した状態）において、Ｄｂｕｆ［６３］〜Ｄｂｕｆ［８］は、全て０ｘ００であるので、
Ｄｋｙ［Ｎ１−１］＝Ｄ７＾Ｄ６＾・・・＾Ｄ２＾Ｄ１＾Ｄ０
となる。つまり、１回目の処理（図１１に示した状態）では、ＩＤＳＮの各バイトデータの排他的論理和をとった値が、Ｄｋｙ［Ｎ１−１］（＝Ｄｋｙ［７］）となる。
【０１６９】
そして、図１１に示すように、第２ＸＯＲ演算部１３１は、
Ｄ＿ｔｘｓ［Ｎ１−１］＝Ｄｋｙ［Ｎ１−１］＾Ｄ＿ｔｘ［Ｎ１−１］
に相当する処理（排他的論理和をとる処理）を実行し、Ｄ＿ｔｘｓ［Ｎ１−１］（＝Ｄ＿ｔｘｓ［７］）を取得する。なお、図１１では、Ｄ＿ｔｘｓ［Ｎ１−１］をＤｓ７と表示している。
【０１７０】
上記の処理（１回目の処理）が完了し、Ｄ＿ｔｘｓ［Ｎ１−１］（＝Ｄ＿ｔｘｓ［７］）がスクランブルデータ取得部１３２に入力されると、スクランブルデータ取得部１３２は、次の処理（２回目の処理）が実行されるように、制御信号Ｃｔｌ１を、送信データ取得部１１とシフトバッファ制御部１２１とに出力する。
【０１７１】
図１２は、スクランブルデータの生成処理を説明するための図であり、送信データＤａｔａ＿ｔｘの先頭からの２バイト目のバイトデータからスクランブルデータを生成する処理を説明するための図である（２回目の処理）。
【０１７２】
送信データ取得部１１は、送信データＤａｔａ＿ｔｘから次のバイトデータＤ＿ｔｘ［Ｎ１−２］（＝Ｄ＿ｔｘ［６］）を抽出し、シフトバッファ制御部１２１に出力する。
【０１７３】
シフトバッファ制御部１２１は、制御信号Ｃｔｌ１に従い、シフトバッファ１２２を１バイトシフトさせるとともに、１回目の処理で使用した送信データのバイトデータＤ＿ｔｘ［Ｎ１−１］（＝Ｄ＿ｔｘ［７］）（図１２では、「Ｄｘ７」と表示）をシフトバッファ１２２に書き込む。
【０１７４】
そして、第１ＸＯＲ演算部１２３は、２回目の処理（図１２に示した状態）において、シフトバッファ１２２の全てのバイトデータ、つまり、６４個のバイトデータを読み出し、読み出した６４個のバイトデータの排他的論理和をとる。つまり、第１ＸＯＲ演算部１２３は、
Ｄｋｙ［Ｎ１−２］＝Ｄｂｕｆ［６３］＾Ｄｂｕｆ［６２］＾・・・
＾Ｄｂｕｆ［２］＾Ｄｂｕｆ［１］＾Ｄｂｕｆ［０］
に相当する論理演算を行い、１バイトのデータＤｋｙ［Ｎ１−２］（＝Ｄｋｙ［６］）を取得する。
【０１７５】
２回目の処理（図１２に示した状態）において、Ｄｂｕｆ［６３］〜Ｄｂｕｆ［９］は、全て０ｘ００であるので、
Ｄｋｙ［Ｎ１−２］＝Ｄ７＾Ｄ６＾・・・＾Ｄ２＾Ｄ１＾Ｄ０＾Ｄｘ７
となる。つまり、２回目の処理（図１２に示した状態）では、ＩＤＳＮの各バイトデータと送信データのバイトデータＤ＿ｔｘ［Ｎ１−２］（＝Ｄ＿ｔｘ［６］＝Ｄｘ６）との排他的論理和をとった値が、Ｄｋｙ［Ｎ１−２］（＝Ｄｋｙ［６］）となる。
【０１７６】
そして、図１２に示すように、第２ＸＯＲ演算部１３１は、
Ｄ＿ｔｘｓ［Ｎ１−２］＝Ｄｋｙ［Ｎ１−２］＾Ｄ＿ｔｘ［Ｎ１−２］
に相当する処理（排他的論理和をとる処理）を実行し、Ｄ＿ｔｘｓ［Ｎ１−２］（＝Ｄ＿ｔｘｓ［６］）を取得する。なお、図１２では、Ｄ＿ｔｘｓ［Ｎ１−２］をＤｓ６と表示している。
【０１７７】
上記の処理（２回目の処理）が完了し、Ｄ＿ｔｘｓ［Ｎ１−２］（＝Ｄ＿ｔｘｓ［６］）がスクランブルデータ取得部１３２に入力されると、スクランブルデータ取得部１３２は、次の処理（３回目の処理）が実行されるように、制御信号Ｃｔｌ１を、送信データ取得部１１とシフトバッファ制御部１２１とに出力する。
【０１７８】
図１３は、スクランブルデータの生成処理を説明するための図であり、送信データＤａｔａ＿ｔｘの先頭からの３バイト目のバイトデータからスクランブルデータを生成する処理を説明するための図である（３回目の処理）。
【０１７９】
送信データ取得部１１は、送信データＤａｔａ＿ｔｘから次のバイトデータＤ＿ｔｘ［Ｎ１−３］（＝Ｄ＿ｔｘ［５］）を抽出し、シフトバッファ制御部１２１に出力する。
【０１８０】
シフトバッファ制御部１２１は、制御信号Ｃｔｌ１に従い、シフトバッファ１２２を１バイトシフトさせるとともに、２回目の処理で使用した送信データのバイトデータＤ＿ｔｘ［Ｎ１−２］（＝Ｄ＿ｔｘ［６］）（図１３では、「Ｄｘ６」と表示）をシフトバッファ１２２に書き込む。
【０１８１】
そして、第１ＸＯＲ演算部１２３は、３回目の処理（図１３に示した状態）において、シフトバッファ１２２の全てのバイトデータ、つまり、６４個のバイトデータを読み出し、読み出した６４個のバイトデータの排他的論理和をとる。つまり、第１ＸＯＲ演算部１２３は、
Ｄｋｙ［Ｎ１−３］＝Ｄｂｕｆ［６３］＾Ｄｂｕｆ［６２］＾・・・
＾Ｄｂｕｆ［２］＾Ｄｂｕｆ［１］＾Ｄｂｕｆ［０］
に相当する論理演算を行い、１バイトのデータＤｋｙ［Ｎ１−３］（＝Ｄｋｙ［５］）を取得する。
【０１８２】
３回目の処理（図１３に示した状態）において、Ｄｂｕｆ［６３］〜Ｄｂｕｆ［１０］は、全て０ｘ００であるので、
Ｄｋｙ［Ｎ１−３］＝Ｄ７＾Ｄ６＾・・・＾Ｄ２＾Ｄ１＾Ｄ０＾Ｄｘ７＾Ｄｘ６
となる。つまり、３回目の処理（図１３に示した状態）では、ＩＤＳＮの各バイトデータと送信データのバイトデータＤ＿ｔｘ［Ｎ１−３］（＝Ｄ＿ｔｘ［５］＝Ｄｘ５）との排他的論理和をとった値が、Ｄｋｙ［Ｎ１−３］（＝Ｄｋｙ［５］）となる。
【０１８３】
そして、図１３に示すように、第２ＸＯＲ演算部１３１は、
Ｄ＿ｔｘｓ［Ｎ１−３］＝Ｄｋｙ［Ｎ１−３］＾Ｄ＿ｔｘ［Ｎ１−３］
に相当する処理（排他的論理和をとる処理）を実行し、Ｄ＿ｔｘｓ［Ｎ１−３］（＝Ｄ＿ｔｘｓ［５］）を取得する。なお、図１３では、Ｄ＿ｔｘｓ［Ｎ１−３］をＤｓ５と表示している。
【０１８４】
上記の処理（３回目の処理）が完了し、Ｄ＿ｔｘｓ［Ｎ１−３］（＝Ｄ＿ｔｘｓ［５］）がスクランブルデータ取得部１３２に入力されると、スクランブルデータ取得部１３２は、次の処理（４回目の処理）が実行されるように、制御信号Ｃｔｌ１を、送信データ取得部１１とシフトバッファ制御部１２１とに出力する。
【０１８５】
上記と同様の処理を繰り返すことで、スクランブルデータＤａｔａ＿ｔｘｓが取得される。
【０１８６】
そして、Ｎ１バイト（＝８バイト）分のバイトデータが揃うと、スクランブルデータ取得部１３２は、スクランブルデータＤａｔａ＿ｔｘｓをＴＣＰサブフローデータ生成部１４に出力する。
【０１８７】
ＴＣＰサブフローデータ生成部１４は、送信用データＤ＿ｔｘｓから、複数のＴＣＰサブフローで送信可能なデータを取得する。本実施形態では、ＴＣＰサブフローの数は「２」であるため、ＴＣＰサブフローデータ生成部１４は、送信用データＤ＿ｔｘｓから、２つのＴＣＰサブフローで送信可能なデータＤ＿ｔｘｓ＿ｓｕｂ１およびＤ＿ｔｘｓ＿ｓｕｂ２を取得する。そして、ＴＣＰサブフローデータ生成部１４は、ＴＣＰサブフロー用データＤ＿ｔｘｓ＿ｓｕｂ１を第１通信インターフェース１５に出力し、ＴＣＰサブフロー用データＤ＿ｔｘｓ＿ｓｕｂ２を第２通信インターフェース１６に出力する。
【０１８８】
第１通信インターフェース１５は、ＴＣＰサブフローデータ生成部１４から出力されるＴＣＰサブフロー用データＤ＿ｔｘｓ＿ｓｕｂ１を入力し、ＴＣＰサブフロー用データＤ＿ｔｘｓ＿ｓｕｂ１に基づいて、送信用データＤ＿ｓｕｂ１を生成する。そして、第１通信インターフェース１５は、生成した送信用データＤ＿ｓｕｂ１を通信相手となる第２通信装置Ｈ２に送信する。このとき、第１通信インターフェース１５は、第１通信装置Ｈ１のアドレスＡ１と第２通信装置Ｈ２のアドレスＢとの間に確立されているＴＣＰサブフローのコネクションのコネクションと使って、データ送信を行う。
【０１８９】
第２通信インターフェース１６は、ＴＣＰサブフローデータ生成部１４から出力されるＴＣＰサブフロー用データＤ＿ｔｘｓ＿ｓｕｂ２を入力し、ＴＣＰサブフロー用データＤ＿ｔｘｓ＿ｓｕｂ２に基づいて、送信用データＤ＿ｓｕｂ２を生成し、生成した送信用データＤ＿ｓｕｂ２を通信相手となる第２通信装置Ｈ２に送信する。このとき、第２通信インターフェース１６は、第１通信装置Ｈ１のアドレスＡ２と第２通信装置Ｈ２のアドレスＢとの間に確立されているＴＣＰサブフローのコネクションを使って、データ送信を行う。
【０１９０】
なお、アプリケーション部Ｈ１＿ａｐが、次の送信データＤａｔａ＿ｒｘを送信することを第１データ通信モジュールに要求した場合、その時点のシフトバッファ１２２（送信用スクランブルバッファ）に格納されているバイトデータを用いて、上記と同様の処理を行い、スクランブル用のキーデータのバイトデータＤｋｙ［ｋ］を取得し、当該バイトデータを用いて、上記と同様の処理により、送信データのスクランブル化処理を実行すればよい。
【０１９１】
≪受信側の処理≫
第２通信装置Ｈ２の第３通信インターフェース２１は、第１通信装置Ｈ１のアドレスＡ１と第２通信装置Ｈ２のアドレスＢとの間に確立されているＴＣＰサブフローのコネクションを使って、第１通信装置Ｈ１から送信されるデータＤ＿ｓｕｂ１を受信する。そして、第３通信インターフェース２１は、受信したデータをデータＤ＿ｒｘｓ＿ｓｕｂ１としてＭＰＴＣＰデータ取得部２３に出力する。
【０１９２】
第２通信装置Ｈ２の第４通信インターフェース２２は、第１通信装置Ｈ１のアドレスＡ２と第２通信装置Ｈ２のアドレスＢとの間に確立されているＴＣＰサブフローのコネクションを使って、第１通信装置Ｈ１から送信されるデータＤ＿ｓｕｂ２を受信する。そして、第４通信インターフェース２２は、受信したデータをデータＤ＿ｒｘｓ＿ｓｕｂ２としてＭＰＴＣＰデータ取得部２３に出力する。
【０１９３】
ＭＰＴＣＰデータ取得部２３は、第３通信インターフェース２１から出力されるデータＤ＿ｒｘｓ＿ｓｕｂ１と、第４通信インターフェース２２から出力されるデータＤ＿ｒｘｓ＿ｓｕｂ２と、を入力する。ＭＰＴＣＰデータ取得部２３は、ＴＣＰサブフローデータであるデータＤ＿ｒｘｓ＿ｓｕｂ１と、データＤ＿ｒｘｓ＿ｓｕｂ２とを、データシーケンス番号の順に並べる処理を実行することで、ＭＰＴＣＰデータＤ＿ｒｘｓを取得する。そして、ＭＰＴＣＰデータ取得部２３は、取得したＭＰＴＣＰデータＤ＿ｒｘｓをデスクランブルデータ取得部２４に出力する。
【０１９４】
デスクランブルデータ取得部２４のバイトデータ抽出部２４１は、ＭＰＴＣＰデータ取得部２３から出力されるデータＤ＿ｒｘｓから、所定の単位のデータ長（１バイト）のデータを抽出し、抽出したデータをデータＤ＿ｒｘｓ［ｋ］として、第３ＸＯＲ演算部２４２に出力する。
【０１９５】
第３ＸＯＲ演算部２４２は、データＤ＿ｒｘｓ［ｋ］と、データＤｋｙ［ｋ］とを用いて論理演算処理（例えば、ＸＯＲ演算）を行い、当該論理演算処理の結果をデータＤ＿ｒｘ［ｋ］として受信データ取得部２６に出力する。
【０１９６】
第２データ通信モジュール２では、スクランブルデータを作成するための初期値が設定される。具体的には、第２データ通信モジュール２は、データシーケンス番号の初期値であるＩＤＳＮを、初期値に設定する。つまり、第２データ通信モジュール２は、通信相手である第２通信装置Ｈ２のキーの値ｋｅｙＡに対して、ＳＨＡ−１によるメッセージダイジェストを計算した結果（２０バイト）の下位８バイトを、データシーケンス番号の初期値であるＩＤＳＮとする。すなわち、第２データ通信モジュール２は、
ＭｓｇＤｉｇ＝ＳＨＡ１（ｋｅｙＡ）
ＩＤＳＮ＝Ｌｏｗｅｒ＿８ｂｙｔｅｓ（ＭｓｇＤｉｇ）
ＳＨＡ１（ｘ）：ｘに対するＳＨＡ−１によるメッセージダイジェストを取得する関数
Ｌｏｗｅｒ＿８ｂｙｔｅｓ（ｘ）：ｘの下位８バイトを取得する関数
により、ＩＤＳＮを取得する。
【０１９７】
スクランブル用キーデータ生成部２５のシフトバッファ制御部２５１は、シフトバッファ１２２に、上記の初期値、すなわち、８バイトのデータであるＩＤＳＮを書き込む。ＩＤＳＮは、Ｄ７〜Ｄ０のバイトデータから構成されているものとする。
【０１９８】
図１４は、デスクランブルデータの取得処理を説明するための図であり、受信したスクランブルデータＤａｔａ＿ｒｘｓの最初（先頭）のバイトデータからデスクランブルされたデータを生成する処理を説明するための図である（１回目の処理（受信側））。
【０１９９】
図１４に示すように、ＩＤＳＮの７バイト目のデータであるＤ７から、順番に、ＩＤＳＮの０バイト目のデータであるＤ０までが、シフトバッファ２５２に書き込まれる。
【０２００】
なお、シフトバッファ２５２は、バイト単位で保持しているデータをシフトさせるバッファであり、図１４の右端に新しいバイトデータが書き込まれ、図１４の左方向に１バイトずつ、保持しているデータ（バイトデータ）をシフトさせるバッファである。そして、シフトバッファ１２２に保持されている最も古いデータ（図１４の左端のバイトデータ）は、次のシフト動作が実行されると破棄される。
【０２０１】
また、シフトバッファ２５２は、送信側のシフトバッファ１２２と同じく６４バイト分のデータを保持するバッファである。
【０２０２】
スクランブル用キーデータ生成部２５は、全てのバイトデータが０ｘ００となっている状態から、シフトバッファ制御部２５１により、初期値であるＩＤＳＮの８バイト分のデータを、シフトバッファ２５２に書き込む。この処理が終了した時点で、シフトバッファ２５２は、図１４に示した状態となる。なお、ＩＤＳＮは、Ｄ７〜Ｄ０の８つの１バイトのデータからなるものとする。Ｄ７が７バイト目のデータであり、Ｄ０が０バイト目のデータである。
【０２０３】
そして、第１ＸＯＲ演算部２５３は、１回目の処理（図１４に示した状態）において、シフトバッファ２５２の全てのバイトデータ、つまり、６４個のバイトデータを読み出し、読み出した６４個のバイトデータの排他的論理和をとる。つまり、第１ＸＯＲ演算部２５３は、
Ｄｋｙ［Ｎ１−１］＝Ｄｂｕｆ［６３］＾Ｄｂｕｆ［６２］＾・・・
＾Ｄｂｕｆ［２］＾Ｄｂｕｆ［１］＾Ｄｂｕｆ［０］
に相当する論理演算を行い、１バイトのデータＤｋｙ［Ｎ１−１］（＝Ｄｋｙ［７］）を取得する。
【０２０４】
なお、「＾」は、排他的論理和をとる演算子を表している。
【０２０５】
また、Ｄｂｕｆ［ｘ］は、シフトバッファ１２２のｘバイト目のバイトデータ（１バイトのデータ）を表す。
【０２０６】
１回目の処理（図１４に示した状態）において、Ｄｂｕｆ［６３］〜Ｄｂｕｆ［８］は、全て０ｘ００であるので、
Ｄｋｙ［Ｎ１−１］＝Ｄ７＾Ｄ６＾・・・＾Ｄ２＾Ｄ１＾Ｄ０
となる。つまり、１回目の処理（図１４に示した状態）では、ＩＤＳＮの各バイトデータの排他的論理和をとった値が、Ｄｋｙ［Ｎ１−１］（＝Ｄｋｙ［７］）となる。
【０２０７】
そして、図１４に示すように、第３ＸＯＲ演算部２４２は、
Ｄ＿ｒｘ［Ｎ１−１］＝Ｄｋｙ［Ｎ１−１］＾Ｄ＿ｒｘｓ［Ｎ１−１］
に相当する処理（排他的論理和をとる処理）を実行し、Ｄ＿ｒｘ［Ｎ１−１］（＝Ｄ＿ｒｘ［７］）を取得する。なお、図１４では、Ｄ＿ｒｘｓ［Ｎ１−１］をＤｓ７と表示し、Ｄ＿ｒｘ［Ｎ１−１］をＤｘ７と表示している。
【０２０８】
上記の処理（１回目の処理）が完了し、Ｄ＿ｒｘ［Ｎ１−１］（＝Ｄ＿ｒｘ［７］）が受信データ取得部２６に入力されると、受信データ取得部２６は、次の処理（２回目の処理）が実行されるように、制御信号Ｃｔｌ３を、デスクランブルデータ取得部２４とシフトバッファ制御部２５１とに出力する。
【０２０９】
図１５は、デスクランブルデータの取得処理を説明するための図であり、受信したスクランブルデータＤａｔａ＿ｒｘｓの先頭から２バイト目のバイトデータからデスクランブルされたデータを生成する処理を説明するための図である（２回目の処理（受信側））。
【０２１０】
バイトデータ抽出部２４１は、受信したスクランブルデータＤａｔａ＿ｔｘｓから次のバイトデータＤ＿ｔｘｓ［Ｎ１−２］（＝Ｄ＿ｔｘｓ［６］＝Ｄｓ６）を抽出し、第３ＸＯＲ演算部２４２に出力する。
【０２１１】
シフトバッファ制御部２５１は、制御信号Ｃｔｌ３に従い、シフトバッファ２５２を１バイトシフトさせるとともに、１回目の処理で取得した受信データのバイトデータＤ＿ｒｘ［Ｎ１−１］（＝Ｄ＿ｒｘ［７］）（図１５では、「Ｄｘ７」と表示）をシフトバッファ２５２に書き込む。
【０２１２】
そして、第１ＸＯＲ演算部２５３は、２回目の処理（図１５に示した状態）において、シフトバッファ２５２の全てのバイトデータ、つまり、６４個のバイトデータを読み出し、読み出した６４個のバイトデータの排他的論理和をとる。つまり、第１ＸＯＲ演算部２５３は、
Ｄｋｙ［Ｎ１−２］＝Ｄｂｕｆ［６３］＾Ｄｂｕｆ［６２］＾・・・
＾Ｄｂｕｆ［２］＾Ｄｂｕｆ［１］＾Ｄｂｕｆ［０］
に相当する論理演算を行い、１バイトのデータＤｋｙ［Ｎ１−２］（＝Ｄｋｙ［６］）を取得する。
【０２１３】
２回目の処理（図１５に示した状態）において、Ｄｂｕｆ［６３］〜Ｄｂｕｆ［９］は、全て０ｘ００であるので、
Ｄｋｙ［Ｎ１−２］＝Ｄ７＾Ｄ６＾・・・＾Ｄ２＾Ｄ１＾Ｄ０＾Ｄｘ７
となる。つまり、２回目の処理（図１５に示した状態）では、ＩＤＳＮの各バイトデータと受信したスクランブルデータのバイトデータＤ＿ｒｘｓ［Ｎ１−２］（＝Ｄ＿ｒｘｓ［６］＝Ｄｓ６）との排他的論理和をとった値が、Ｄｒｘ［Ｎ１−２］（＝Ｄｘ［６］＝Ｄｘ６）となる。
【０２１４】
そして、図１５に示すように、第３ＸＯＲ演算部２４２は、
Ｄ＿ｒｘ［Ｎ１−２］＝Ｄｋｙ［Ｎ１−２］＾Ｄ＿ｒｘｓ［Ｎ１−２］
に相当する処理（排他的論理和をとる処理）を実行し、Ｄ＿ｒｘ［Ｎ１−２］（＝Ｄ＿ｒｘ［６］＝Ｄｘ６）を取得する。
【０２１５】
上記の処理（２回目の処理）が完了し、Ｄ＿ｒｘ［Ｎ１−２］（＝Ｄ＿ｒｘ［６］）が受信データ取得部２６に入力されると、受信データ取得部２６は、次の処理（３回目の処理）が実行されるように、制御信号Ｃｔｌ３を、デスクランブルデータ取得部２４とシフトバッファ制御部２５１とに出力する。
【０２１６】
図１６は、デスクランブルデータの取得処理を説明するための図であり、受信したスクランブルデータＤａｔａ＿ｒｘｓの先頭から３バイト目のバイトデータからデスクランブルされたデータを生成する処理を説明するための図である（３回目の処理（受信側））。
【０２１７】
バイトデータ抽出部２４１は、受信したスクランブルデータＤａｔａ＿ｔｘｓから次のバイトデータＤ＿ｔｘｓ［Ｎ１−３］（＝Ｄ＿ｔｘｓ［５］＝Ｄｓ５）を抽出し、第３ＸＯＲ演算部２４２に出力する。
【０２１８】
シフトバッファ制御部２５１は、制御信号Ｃｔｌ３に従い、シフトバッファ２５２を１バイトシフトさせるとともに、２回目の処理で取得した受信データのバイトデータＤ＿ｒｘ［Ｎ１−２］（＝Ｄ＿ｒｘ［６］＝Ｄｘ７）をシフトバッファ２５２に書き込む。
【０２１９】
そして、第１ＸＯＲ演算部２５３は、３回目の処理（図１６に示した状態）において、シフトバッファ２５２の全てのバイトデータ、つまり、６４個のバイトデータを読み出し、読み出した６４個のバイトデータの排他的論理和をとる。つまり、第１ＸＯＲ演算部２５３は、
Ｄｋｙ［Ｎ１−３］＝Ｄｂｕｆ［６３］＾Ｄｂｕｆ［６２］＾・・・
＾Ｄｂｕｆ［２］＾Ｄｂｕｆ［１］＾Ｄｂｕｆ［０］
に相当する論理演算を行い、１バイトのデータＤｋｙ［Ｎ１−３］（＝Ｄｋｙ［５］）を取得する。
【０２２０】
３回目の処理（図１６に示した状態）において、Ｄｂｕｆ［６３］〜Ｄｂｕｆ［１０］は、全て０ｘ００であるので、
Ｄｋｙ［Ｎ１−３］＝Ｄ７＾Ｄ６＾・・・＾Ｄ２＾Ｄ１＾Ｄ０＾Ｄｘ７＾Ｄｘ６
となる。つまり、３回目の処理（図１６に示した状態）では、ＩＤＳＮの各バイトデータと受信したスクランブルデータのバイトデータＤ＿ｒｘｓ［Ｎ１−３］（＝Ｄ＿ｒｘｓ［５］＝Ｄｓ５）との排他的論理和をとった値が、Ｄｒｘ［Ｎ１−３］（＝Ｄｘ［５］＝Ｄｘ５）となる。
【０２２１】
そして、図１６に示すように、第３ＸＯＲ演算部２４２は、
Ｄ＿ｒｘ［Ｎ１−３］＝Ｄｋｙ［Ｎ１−３］＾Ｄ＿ｒｘｓ［Ｎ１−３］
に相当する処理（排他的論理和をとる処理）を実行し、Ｄ＿ｒｘ［Ｎ１−３］（＝Ｄ＿ｒｘ［５］＝Ｄｘ５）を取得する。
【０２２２】
上記の処理（３回目の処理）が完了し、Ｄ＿ｒｘ［Ｎ１−３］（＝Ｄ＿ｒｘ［５］）が受信データ取得部２６に入力されると、受信データ取得部２６は、次の処理（４回目の処理）が実行されるように、制御信号Ｃｔｌ３を、デスクランブルデータ取得部２４とシフトバッファ制御部２５１とに出力する。
【０２２３】
上記と同様の処理を繰り返すことで、デスクランブルされた受信データＤａｔａ＿ｒｘが取得される。
【０２２４】
このように、通信システム１０００では、送信側と受信側とで、同じスクランブル用のキーデータであるデータＤｋｙ［ｋ］を用いて、排他的論理和をとる処理を行うので、送信側（第１通信装置Ｈ１）でスクランブルされたデータを、受信側（第２通信装置Ｈ２）でデスクランブルして、元のデータに戻すことができる。
【０２２５】
つまり、通信システム１０００では、送信側（第１通信装置Ｈ１）で
Ｄ＿ｔｘｓ［ｋ］＝Ｄ＿ｔｘ［ｋ］＾Ｄｋｙ［ｋ］
に相当する処理を行うことで、送信データのバイトデータＤ＿ｔｘ［ｋ］からスクランブル化された送信データのバイトデータＤ＿ｔｘｓ［ｋ］が取得され、
受信側（第２通信装置Ｈ２）で
Ｄ＿ｒｘ［ｋ］＝Ｄ＿ｔｘｓ［ｋ］＾Ｄｋｙ［ｋ］
に相当する処理を行うことで、スクランブル化された送信データのバイトデータＤ＿ｔｘｓ［ｋ］（＝Ｄ＿ｒｘｓ［ｋ］）をデスクランブルして、送信データのバイトデータＤ＿ｔｘ［ｋ］と一致する受信データのバイトデータＤ＿ｒｘ［ｋ］を取得できる。
【０２２６】
そして、通信システム１０００では、送信側のスクランブル処理に使用されるスクランブル用のキーデータであるデータＤｋｙ［ｋ］の初期値を、送信側（第１通信装置Ｈ１）のＩＤＳＮ（８バイトデータ）の各バイトの排他的論理和をとる処理を行うことで取得した１バイトのデータＤｋｙ［ｋ］とする。そして、次の送信データのバイトデータＤ＿ｔｘ［ｋ＋１］のスクランブル化処理には、スクランブル化処理が済んだ送信データのバイトデータＤ＿ｔｘ［ｋ］と送信側（第１通信装置Ｈ１）のＩＤＳＮ（８バイトデータ）の各バイトの排他的論理和をとる処理を行うことで取得した１バイトのデータＤｋｙ［ｋ＋１］をスクランブルキーデータとする。
【０２２７】
通信システム１０００では、受信側のデスクランブル処理に使用されるスクランブルキーデータＤｋｙを、上記の送信側のスクランブル処理に使用されるスクランブル用のキーデータＤｋｙと同じにする。したがって、通信システム１０００では、送信側でスクランブル化されたデータが、受信側でデスクランブルして、元のデータに戻すことができる。
【０２２８】
さらに、通信システム１０００では、スクランブルキーデータのバイトデータが、既にスクランブル化処理された送信データのバイトデータ（既にデスクランブルされた受信データのバイトデータ）を用いて、常に更新されるため、スクランブルキーデータの値が常に変化する。したがって、通信システム１０００では、セキュリティ強度の高いスクランブル化処理を実現することができる。
【０２２９】
また、通信システム１０００では、上記のようにしてスクランブル化処理された送信データは、ＭＰＴＣＰにより、複数のＴＣＰサブフローにより、分散して、送信側から受信側に送信されるため、通信経路の途中で、一部のデータが盗聴、傍受されたとしても、元のデータに戻すことができない。
【０２３０】
さらに、通信システム１０００では、ＭＰＴＣＰコネクションの確立処理時において、ＭＰ＿ＣＡＰＡＢＬＥオプションの所定のフラグを所定の値にセットしたＳＹＮセグメント（例えば、フラグＧを「１」に設定したＭＰ＿ＣＡＰＡＢＬＥオプションを含むＳＹＮセグメント）を生成し、当該ＳＹＮセグメントを送信側（第１通信装置Ｈ１）から受信側（第２通信装置Ｈ２）に送信する。これにより、通信システム１０００では、スクランブル機能を用いたデータ転送を行うことを、送信側（第１通信装置Ｈ１）から受信側（第２通信装置Ｈ２）に通知する。
【０２３１】
つまり、通信システム１０００では、従来のＭＰＴＣＰにより、スクランブル機能を用いたデータ転送を行うことを、送信側（第１通信装置Ｈ１）から受信側（第２通信装置Ｈ２）に通知することができる。したがって、通信システム１０００では、転送するデータ量を増加させることなく、スクランブル機能を実現することができる。
【０２３２】
以上の通り、通信システム１０００では、複数のパスを用いた通信において、転送するデータ量を増加させることなく、かつ、セキュリティを確保することができる。
【０２３３】
［他の実施形態］
上記実施形態では、スクランブル処理、デスクランブル処理において、１バイト単位で処理が実行される場合について、説明したが、これに限定されることはない。例えば、２バイト単位、Ｎバイト単位、あるいは、所定のビット数単位で、スクランブル処理、デスクランブル処理が実行するようにしてもよい。
【０２３４】
また、上記実施形態では、通信システム１０００において、２つのＴＣＰサブフローにより、ＭＰＴＣＰを用いた通信を行う場合について説明したがこれに限定されることはなく、３以上のＴＣＰサブフローにより、ＭＰＴＣＰを用いた通信を行うようにしてもよい。
【０２３５】
また、通信システム１０００において、送信側のキーと受信側のキーとを交換する通信処理（図７のステップＳ１０１〜Ｓ１０３の処理）を信頼度の高い（セキュリティ強度の高い）通信網（例えば、携帯電話通信網）を使って行い、スクランブル化されたデータの送受信をセキュリティ強度が低い通信網（例えば、無線ＬＡＮの通信網）を使って行うようにしてもよい。
【０２３６】
つまり、通信システム１０００において、送信側のキーと受信側のキーとを交換する通信処理を行うＴＣＰサブフローを信頼度の高い（セキュリティ強度の高い）通信網（例えば、携帯電話通信網）を用いて実現し、スクランブル化されたデータの送受信をセキュリティ強度が低い通信網（例えば、無線ＬＡＮ（ＷｉＦｉ）の通信網）を用いて実現するようにしてもよい。
【０２３７】
また、上記実施形態では、スクランブル化処理、デスクランブル化処理において、論理演算処理として、排他的論理和（ＸＯＲ）を用いる場合について説明したが、これに限定されることはなく、例えば、スクランブル化処理、デスクランブル化処理において、論理演算処理として、排他的論理和の代わりに、「排他的論理和＋ＮＯＴ」（ＸＯＲ＋ＮＯＴ）、あるいは、「ＮＯＴ＋排他的論理和」（ＮＯＴ＋ＸＯＲ）による論理演算処理を行ってもよい。
【０２３８】
また、上記実施形態で説明した通信システム１０００、第１通信装置Ｈ１、第２通信装置Ｈ２において、各ブロックは、ＬＳＩなどの半導体装置により個別に１チップ化されても良いし、一部又は全部を含むように１チップ化されても良い。
【０２３９】
なお、ここでは、ＬＳＩとしたが、集積度の違いにより、ＩＣ、システムＬＳＩ、スーパーＬＳＩ、ウルトラＬＳＩと呼称されることもある。
【０２４０】
また、集積回路化の手法はＬＳＩに限るものではなく、専用回路又は汎用プロセサで実現してもよい。ＬＳＩ製造後に、プログラムすることが可能なＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）や、ＬＳＩ内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサーを利用しても良い。
【０２４１】
また、上記各実施形態の各機能ブロックの処理の一部または全部は、プログラムにより実現されるものであってもよい。そして、上記各実施形態の各機能ブロックの処理の一部または全部は、コンピュータにおいて、中央演算装置（ＣＰＵ）により行われる。また、それぞれの処理を行うためのプログラムは、ハードディスク、ＲＯＭなどの記憶装置に格納されており、ＲＯＭにおいて、あるいはＲＡＭに読み出されて実行される。
【０２４２】
また、上記実施形態の各処理をハードウェアにより実現してもよいし、ソフトウェア（ＯＳ（オペレーティングシステム）、ミドルウェア、あるいは、所定のライブラリとともに実現される場合を含む。）により実現してもよい。さらに、ソフトウェアおよびハードウェアの混在処理により実現しても良い。
【０２４３】
例えば、上記実施形態の各機能部を、ソフトウェアにより実現する場合、図１７に示したハードウェア構成（例えば、ＣＰＵ、ＲＯＭ、ＲＡＭ、入力部、出力部等をバスＢｕｓにより接続したハードウェア構成）を用いて、各機能部をソフトウェア処理により実現するようにしてもよい。
【０２４４】
また、上記実施形態における処理方法の実行順序は、必ずしも、上記実施形態の記載に制限されるものではなく、発明の要旨を逸脱しない範囲で、実行順序を入れ替えることができるものである。
【０２４５】
前述した方法をコンピュータに実行させるコンピュータプログラム及びそのプログラムを記録したコンピュータ読み取り可能な記録媒体は、本発明の範囲に含まれる。ここで、コンピュータ読み取り可能な記録媒体としては、例えば、フレキシブルディスク、ハードディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、大容量ＤＶＤ、次世代ＤＶＤ、半導体メモリを挙げることができる。
【０２４６】
上記コンピュータプログラムは、上記記録媒体に記録されたものに限られず、電気通信回線、無線又は有線通信回線、インターネットを代表とするネットワーク等を経由して伝送されるものであってもよい。
【０２４７】
なお、本発明の具体的な構成は、前述の実施形態に限られるものではなく、発明の要旨を逸脱しない範囲で種々の変更および修正が可能である。
【符号の説明】
【０２４８】
１０００  通信システム
Ｈ１  第１通信装置（データ送信装置）
Ｈ２  第２通信装置（データ受信装置）
１  第１データ通信モジュール
１０  ＭＰＴＣＰコネクション確立処理部
１１  送信データ取得部
１２  スクランブル用キーデータ生成部
１３  スクランブルデータ生成部
１４  ＴＣＰサブフローデータ生成部（サブフローデータ生成部）
２  第２データ通信モジュール
２０  ＭＰＴＣＰコネクション確立処理部
２３  ＭＰＴＣＰデータ取得部
２４  デスクランブルデータ取得部
２５  スクランブル用キーデータ生成部
２６  受信データ取得部
【図１】
2018139386.tif 000003
【図２】
2018139386.tif 000004
【図３】
2018139386.tif 000005
【図４】
2018139386.tif 000006
【図５】
2018139386.tif 000007
【図６】
2018139386.tif 000008
【図７】
2018139386.tif 000009
【図８】
2018139386.tif 000010
【図９】
2018139386.tif 000011
【図１０】
2018139386.tif 000012
【図１１】
2018139386.tif 000013
【図１２】
2018139386.tif 000014
【図１３】
2018139386.tif 000015
【図１４】
2018139386.tif 000016
【図１５】
2018139386.tif 000017
【図１６】
2018139386.tif 000018
【図１７】
2018139386.tif 000019