JP2018139386A - データ送信装置、データ受信装置、通信システム、および、プログラム - Google Patents

データ送信装置、データ受信装置、通信システム、および、プログラム Download PDF

Info

Publication number
JP2018139386A
JP2018139386A JP2017033847A JP2017033847A JP2018139386A JP 2018139386 A JP2018139386 A JP 2018139386A JP 2017033847 A JP2017033847 A JP 2017033847A JP 2017033847 A JP2017033847 A JP 2017033847A JP 2018139386 A JP2018139386 A JP 2018139386A
Authority
JP
Japan
Prior art keywords
data
unit length
scramble
unit
transmission
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2017033847A
Other languages
English (en)
Other versions
JP6908914B2 (ja
Inventor
聰彦 加藤
Satohiko Kato
聰彦 加藤
鈴木 信雄
Nobuo Suzuki
信雄 鈴木
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ATR Advanced Telecommunications Research Institute International
Original Assignee
ATR Advanced Telecommunications Research Institute International
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by ATR Advanced Telecommunications Research Institute International filed Critical ATR Advanced Telecommunications Research Institute International
Priority to JP2017033847A priority Critical patent/JP6908914B2/ja
Publication of JP2018139386A publication Critical patent/JP2018139386A/ja
Application granted granted Critical
Publication of JP6908914B2 publication Critical patent/JP6908914B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

【課題】複数の通信経路を用いた通信において、転送するデータ量を増加させることなく、かつ、セキュリティを確保する通信システムを提供する。【解決手段】通信システム1000では、第1通信装置H1と第2通信装置H2とで、同じスクランブル用のキーデータを用いて、所定論理演算処理を行い、第1通信装置H1でスクランブルされたデータを、第2通信装置H2でデスクランブルして、元のデータに戻すことができる。また、通信システム1000では、MPTCP(Multipath Transmission Control Protocol)を用いた通信を行い、スクランブル機能を実現するために、データ通信量を増加させることがない。【選択図】図2

Description

本発明は、データを複数経路に分散させて送受信することで、セキュアな通信を実現するための技術に関する。
インターネット上の通信において、様々な脅威が指摘されている。そのような脅威の一つに転送データの盗聴がある。例えば、公衆無線LANによる通信では、アクセスポイントと端末との間の無線通信において、暗号化されずに通信が実行されることが多い。このため、通信中にユーザ識別子やパスワードといった重要な個人情報が盗まれたり、通信内容を傍受されたりする危険性がある。
このような状況に対応するために、サーバとクライアントとの間の通信において、エンド・ツ・エンド(end−to−end)で暗号化を行うTLS(Transport Layer Security)が広く利用されているが、電子メールやVoIPなどの通信には適用されない場合が多い。
一方、近年の端末は、スマートフォンやタブレットに代表されるように、複数の通信インターフェースを搭載するものが広く普及している。そして、このような端末を有効に利用するために、1つのTCP通信を、異なるインターフェースを用いた複数のパスを介して実現するマルチパスTCPが用いられるようになってきている。
このような複数のパスを介して実現される通信において、通信中の転送データを複数のパスに分散させることにより、1つのパスの通信を盗聴しただけでは、全体の通信を把握することができないようにするための技術の研究開発がなされている。このような技術では、データを暗号化するのではなく、データを複数のパスに分散させることにより、秘匿性を高めることを目的としている。このため、このような技術では、事前暗号鍵の登録や、証明書の準備などが不要であるという長所を有する。
このような技術の開発は、複数の無線アクセス網を積極的に利用する次世代(5G)移動通信網において、さらに重要となると考えられる。
従来からも同様の技術の研究開発が行われている。
例えば、非特許文献1には、TCPを用いた1つのデータ転送を、複数の経路の通信に分散させることにより、データの全体像を把握できなくするという方法の開示がある。非特許文献1に開示されている方法では、データ自身の秘匿性が保証されないため、ある経路を経由した通信が盗聴された場合、そのデータは解読されてしまう可能性がある。盗聴されたデータに重要な個人情報等が含まれていた場合、当該重要な個人情報等が流出しまう恐れがあり、その流出した情報をもとにして、不正な攻撃を受けるリスクが発生する。
また、秘密分散法と呼ばれる技術も研究されている。秘密分散法では、以下のようにして処理が実行される。
(1)ある秘密情報をn個(nは、2以上の自然数)に分割し、分割された秘密情報は、n人のユーザに分配される。
(2)分割されたn個の秘密情報のうち、k個の秘密情報が集められた場合(n人のユーザのうちk人のユーザから分割された秘密情報を集められた場合)、元の秘密情報が復元される。
この秘密分散法は、暗号鍵を複数のユーザに分割して持たせる場合などに使用される。
しかしながら、秘密分散法では、転送するデータがn倍となるため、効率が悪い。
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.
上記のように、従来技術では、複数のパスを用いた通信において、転送するデータ量を増加させることなく、かつ、セキュリティを確保することが困難である。
そこで、本発明は、上記問題点に鑑み、複数のパスを用いた通信において、転送するデータ量を増加させることなく、かつ、セキュリティを確保することができるデータ送信装置、データ受信装置、通信システム、および、プログラムを実現することを目的とする。
上記課題を解決するために、第1の発明は、データ受信装置に対して、複数の通信経路を用いてデータを送信する機能を有するデータ送信装置であって、スクランブル用キーデータ生成部と、スクランブルデータ生成部と、サブフローデータ生成部と、を備える。
スクランブル用キーデータ生成部は、送信データを所定の単位長のデータに区分した単位長データのうちの最初の単位長データである単位長送信データをスクランブル化するためのスクランブル処理用キーデータを取得する。そして、スクランブル用キーデータ生成部は、(1)1回目の処理では、自装置を識別するためのデータであるキーデータから導出された初期値データを所定の単位長のデータに区分した単位長データである単位長初期値データを用いて、所定の論理演算を行うことでスクランブル化処理のためのスクランブル処理用キーデータを取得し、(2)2回目以降の処理では、単位長初期値データ、および、スクランブル化が完了した単位長送信データの両方、または、スクランブル化が完了した単位長送信データのみを用いて、所定の論理演算を行うことでスクランブル処理用キーデータを取得する。
スクランブルデータ生成部は、スクランブル用キーデータ生成部により取得されたスクランブル処理用キーデータと、単位長送信データとを用いて、所定の論理演算を行うことで、スクランブル化した単位長データであるスクランブル化単位長送信データを取得するとともに、取得したスクランブル化単位長送信データを複数まとめることで、1つのスクランブル化送信データを生成する。
サブフローデータ生成部は、スクランブルデータ生成部により生成されたスクランブル化送信データから、複数の経路を用いて送信するためのサブフローデータを生成する。
このデータ送信装置では、上記処理を実行することにより、スクランブル化した送信データを取得することができ、取得したスクランブル化送信データを複数の経路(例えば、TCPサブフロー)を用いて送信することができる。
つまり、このデータ送信装置によりスクランブル化処理された送信データは、複数の経路(例えば、TCPサブフロー)により、分散して、送信側から受信側に送信されるため、通信経路の途中で、一部のデータが盗聴、傍受されたとしても、元のデータに戻すことができない。
また、このデータ送信装置によりスクランブル化された送信データは、スクランブル前の送信データと同じ長さであり、転送するデータ量を増加させることがない。
このように、このデータ送信装置を用いることで、複数の通信経路を用いた通信において、転送するデータ量を増加させることなく、かつ、セキュリティを確保することができる。
なお、データ送信装置は、受信機能を備えるものであってもよい。
第2の発明は、第1の発明であって、所定の論理演算は、排他的論理和演算である。
これにより、このデータ送信装置では、排他的論理和演算により、送信データのスクランブル化処理を実行することができる。
第3の発明は、第1または第2の発明であって、単位長データは、1バイトのデータである。
これにより、このデータ送信装置では、1バイト単位での論理演算(例えば、排他的論理和演算)により、送信データのスクランブル化処理を実行することができる。
第4の発明は、第1から第3のいずれかの発明であって、初期値データは、自装置を識別するためのデータであるキーデータをキーデータkeyAとしたとき、
MsgDig=SHA1(keyA)
IDSN=Lower_8bytes(MsgDig)
SHA1(x):xに対するSHA−1によるメッセージダイジェストを取得する関数。
Lower_8bytes(x):xの下位8バイトを取得する関数。
により取得されたIDSN値である。
これにより、このデータ送信装置では、初期値データにIDSN値を用いることができる。そして、IDSN値は、自装置のキーデータから導出するため、送信側と受信側との間で、例えば、コネクション確立時に、キーデータを送信しておけば、スクランブル処理、デスクランブル処理のための初期値を、別途、送信側から受信側に送信する必要がなくなる。
第5の発明は、第1から第4のいずれかの発明であって、MPTCPを用いた通信を実行する機能を有し、MPTCPコネクションの確立処理を実行するMPTCPコネクション確立処理部をさらに備える。
MPTCPコネクション確立処理部は、MPTCPコネクションの確立処理時において、MP_CAPABLEオプションの所定のフラグを所定の値にセットしたSYNセグメントを生成し、当該SYNセグメントをデータ受信装置に送信することで、スクランブル機能を用いたデータ転送を行うことを、データ受信装置に通知する。
これにより、このデータ送信装置では、MPTCPコネクションの確立処理時にスクランブル機能を用いたデータ転送を行うことを、データ受信装置に通知することができる。したがって、別途、スクランブル機能を用いたデータ転送を行うことを、送信側から受信側に通知するための通信が不要となり、その結果、データ通信量を増加させることはない。
第6の発明は、データ送信装置が複数の通信経路を用いて送信したデータを受信する機能を有するデータ受信装置であって、MPTCPデータ取得部と、スクランブル用キーデータ生成部と、受信データ取得部と、を備える。
MPTCPデータ取得部は、データ送信装置から、複数の通信経路により、受信した複数のサブフローデータを、当該サブフローデータに含まれるデータシーケンス番号の順に並べる処理を実行することで、複数のサブフローデータを1つにまとめた受信データを取得する。
スクランブル用キーデータ生成部は、MPTCPデータ取得部により取得された受信データを所定の単位長のデータに区分した単位長データのうちの最初の単位長データである単位長受信スクランブルデータをデスクランブル化するためのスクランブル処理用キーデータを取得する。そして、スクランブル用キーデータ生成部は、(1)1回目の処理では、通信相手であるデータ送信装置を識別するためのデータであるキーデータから導出された初期値データを所定の単位長のデータに区分した単位長データである単位長初期値データを用いて、所定の論理演算を行うことでデスクランブル化処理のためのスクランブル処理用キーデータを取得し、(2)2回目以降の処理では、単位長初期値データ、および、デスクランブル化が完了した単位長受信データの両方、または、デスクランブル化が完了した単位長受信データのみを用いて、所定の論理演算を行うことでスクランブル処理用キーデータを取得する。
受信データ取得部は、スクランブル用キーデータ生成部により取得されたスクランブル処理用キーデータと、単位長受信スクランブルデータとを用いて、所定の論理演算を行うことで、デスクランブル化した単位長データである単位長受信データを取得するとともに、取得した単位長受信データを複数まとめることで、1つのデスクランブル化された受信データを取得する。
なお、データ受信装置は、データ送信機能を有していてもよい。
このデータ受信装置では、上記処理を実行することにより、データ送信装置から、複数の経路(例えば、TCPサブフロー)を用いて送信されてきた、スクランブル化データをデスクランブルして、受信データを取得することができる。
つまり、このデータ受信装置で受信するデータは、データ送信装置により、スクランブル化処理された送信データであり、当該送信データは、複数の経路(例えば、TCPサブフロー)により、分散して、送信側から受信側に送信される。このため、データ送信装置から送信されるデータは、通信経路の途中で、一部のデータが盗聴、傍受されたとしても、元のデータに戻すことができない。
したがって、このデータ受信装置をデータ送信装置とともに用いることで、複数の通信経路を用いた通信において、転送するデータ量を増加させることなく、かつ、セキュリティを確保することができる。
なお、データ受信装置は、送信機能を備えるものであってもよい。
第7の発明は、第6の発明であって、所定の論理演算は、排他的論理和演算である。
これにより、このデータ受信装置では、1バイト単位での論理演算(例えば、排他的論理和演算)により、スクランブル化された受信データのデスクランブル化処理を実行することができる。
第8の発明は、第6または第7の発明であって、単位長データは、1バイトのデータである。
これにより、このデータ受信装置では、1バイト単位での論理演算(例えば、排他的論理和演算)により、スクランブル化された受信データのデスクランブル化処理を実行することができる。
第9の発明は、第6から第8のいずれかの発明であって、初期値データは、通信相手であるデータ送信装置を識別するためのデータであるキーデータをキーデータkeyAとしたとき、
MsgDig=SHA1(keyA)。
IDSN=Lower_8bytes(MsgDig)。
SHA1(x):xに対するSHA−1によるメッセージダイジェストを取得する関数。
Lower_8bytes(x):xの下位8バイトを取得する関数。
により取得されたIDSN値である。
これにより、このデータ受信装置では、初期値データにIDSN値を用いることができる。そして、IDSN値は、通信相手であるデータ送信装置のキーデータから導出するため、送信側と受信側との間で、例えば、コネクション確立時に、キーデータを送信しておけば、スクランブル処理、デスクランブル処理のための初期値を、別途、送信側から受信側に送信する必要がなくなる。
第10の発明は、第6から第9のいずれかの発明であって、MPTCPを用いた通信を実行する機能を有し、MPTCPコネクションの確立処理を実行するMPTCPコネクション確立処理部をさらに備える。
MPTCPコネクション確立処理部は、MPTCPコネクションの確立処理時において、データ送信装置により、MP_CAPABLEオプションの所定のフラグを所定の値にセットしたSYNセグメント受信することで、データ送信装置がスクランブル機能を用いたデータ転送を行う機能を有していると判定する。
これにより、このデータ受信装置では、MPTCPコネクションの確立処理時にスクランブル機能を用いたデータ転送を行うことを示す情報、データ送信装置から取得することができる。したがって、別途、スクランブル機能を用いたデータ転送を行うことを、送信側から受信側に通知するための通信が不要となり、その結果、データ通信量を増加させることはない。
第11の発明は、第1から第5のいずれかの発明であるデータ送信装置と、第6から第10のいずれかの発明であるデータ受信装置とを備える通信システムである。
これにより、第1から第5のいずれかの発明であるデータ送信装置と、第6から第10のいずれかの発明であるデータ受信装置とを備える通信システムを実現することができる。
第12の発明は、データ送信装置からデータ受信装置に対して、複数の通信経路を用いてデータを送信するときに用いられるデータ送信方法をコンピュータに実行させるためのプログラムである。
データ送信方法は、スクランブル用キーデータ生成ステップと、スクランブルデータ生成ステップと、サブフローデータ生成ステップと、を備える。
スクランブル用キーデータ生成ステップは、送信データを所定の単位長のデータに区分した単位長データのうちの最初の単位長データである単位長送信データをスクランブル化するためのスクランブル処理用キーデータを取得する。そして、スクランブル用キーデータ生成ステップは、(1)1回目の処理では、データ送信装置を識別するためのデータであるキーデータから導出された初期値データを所定の単位長のデータに区分した単位長データである単位長初期値データを用いて、所定の論理演算を行うことでスクランブル化処理のためのスクランブル処理用キーデータを取得し、(2)2回目以降の処理では、単位長初期値データ、および、スクランブル化が完了した単位長送信データの両方、または、スクランブル化が完了した単位長送信データのみを用いて、所定の論理演算を行うことでスクランブル処理用キーデータを取得する。
スクランブルデータ生成ステップは、スクランブル用キーデータ生成ステップにより取得されたスクランブル処理用キーデータと、単位長送信データとを用いて、所定の論理演算を行うことで、スクランブル化した単位長データであるスクランブル化単位長送信データを取得するとともに、取得したスクランブル化単位長送信データを複数まとめることで、1つのスクランブル化送信データを生成する。
サブフローデータ生成ステップは、スクランブルデータ生成ステップにより生成されたスクランブル化送信データから、複数の経路を用いて送信するためのサブフローデータを生成する。
これにより、第1の発明と同様の効果を奏するデータ送信方法をコンピュータに実行させるためのプログラムを実現することができる。
第13の発明は、データ受信装置において、データ送信装置から、複数の通信経路を用いて送信されたデータを受信するときに用いられるデータ受信方法をコンピュータに実行させるためのプログラムである。
データ受信方法は、MPTCPデータ取得ステップと、スクランブル用キーデータ生成ステップと、受信データ取得ステップと、を備える。
MPTCPデータ取得ステップは、データ送信装置から、複数の通信経路により、受信した複数のサブフローデータを、当該サブフローデータに含まれるデータシーケンス番号の順に並べる処理を実行することで、複数のサブフローデータを1つにまとめた受信データを取得する。
スクランブル用キーデータ生成ステップは、MPTCPデータ取得ステップにより取得された受信データを所定の単位長のデータに区分した単位長データのうちの最初の単位長データである単位長受信スクランブルデータをデスクランブル化するためのスクランブル処理用キーデータを取得する。そして、スクランブル用キーデータ生成ステップは、(1)1回目の処理では、データ送信装置を識別するためのデータであるキーデータから導出された初期値データを所定の単位長のデータに区分した単位長データである単位長初期値データを用いて、所定の論理演算を行うことでデスクランブル化処理のためのスクランブル処理用キーデータを取得し、(2)2回目以降の処理では、単位長初期値データ、および、デスクランブル化が完了した単位長受信データの両方、または、デスクランブル化が完了した単位長受信データのみを用いて、所定の論理演算を行うことでスクランブル処理用キーデータを取得する。
受信データ取得ステップは、スクランブル用キーデータ生成ステップにより取得されたスクランブル処理用キーデータと、単位長受信スクランブルデータとを用いて、所定の論理演算を行うことで、デスクランブル化した単位長データである単位長受信データを取得するとともに、取得した単位長受信データを複数まとめることで、1つのデスクランブル化された受信データを取得する。
これにより、第6の発明と同様の効果を奏するデータ受信方法をコンピュータに実行させるためのプログラムを実現することができる。
本発明によれば、複数のパスを用いた通信において、転送するデータ量を増加させることなく、かつ、セキュリティを確保することができるデータ送信装置、データ受信装置、通信システム、および、プログラムを実現することができる。
第1実施形態に係る通信システム1000の概略構成図。 第1実施形態に係る通信システム1000で実行される処理、扱うデータについての概略を模式的に示した図。 第1実施形態に係る通信システム1000の第1データ通信モジュール1の概略構成図。 第1実施形態に係る通信システム1000のスクランブル用キーデータ生成部12およびスクランブルデータ生成部13の概略構成図。 第1実施形態に係る通信システム1000の第2データ通信モジュール2の概略構成図。 第1実施形態に係る通信システム1000のデスクランブルデータ取得部24およびスクランブル用キーデータ生成部25の概略構成図。 MPTCPコネクション確立処理のシーケンス図。 MPTCPコネクションによるデータ転送処理のシーケンス図。 MPTCPコネクションの解放処理のシーケンス図。 RFC6824で規定されているMP_CAPABLEオプションのデータフォーマット(横方向の幅を32ビットとして表示したデータフォーマット)を示す図。 スクランブルデータの生成処理を説明するための図(1回目の処理(送信側))。 スクランブルデータの生成処理を説明するための図(2回目の処理(送信側))。 スクランブルデータの生成処理を説明するための図(3回目の処理(送信側))。 デスクランブルデータの取得処理を説明するための図(1回目の処理(受信側))。 デスクランブルデータの取得処理を説明するための図(2回目の処理(受信側))。 デスクランブルデータの取得処理を説明するための図(3回目の処理(受信側))。 CPUバス構成を示す図。
[第1実施形態]
第1実施形態について、図面を参照しながら、以下、説明する。
<1.1:通信システムの構成>
図1は、第1実施形態に係る通信システム1000の概略構成図である。
図2は、第1実施形態に係る通信システム1000で実行される処理、扱うデータについての概略を模式的に示した図である。
図3は、第1実施形態に係る通信システム1000の第1データ通信モジュール1の概略構成図である。
図4は、第1実施形態に係る通信システム1000のスクランブル用キーデータ生成部12およびスクランブルデータ生成部13の概略構成図である。
図5は、第1実施形態に係る通信システム1000の第2データ通信モジュール2の概略構成図である。
図6は、第1実施形態に係る通信システム1000のデスクランブルデータ取得部24およびスクランブル用キーデータ生成部25の概略構成図である。
通信システム1000は、図1に示すように、第1通信装置H1と第2通信装置H2とを備える。なお、通信システム1000は、複数の通信装置を備えてもよい。以下では、説明便宜のために、第1通信装置H1がデータ送信を行うための機能を備えており、第2通信装置H2がデータ受信を行う機能を備えている場合について説明する。しかしながら、これに限定されることはなく、通信システム1000は、複数の通信装置を備えており、各通信装置の一部または全部が、送信機能、および、受信機能の両方を備えるものであってもよい。また、第1通信装置H1がデータ受信機能を備えるものであってもよい。また、第2通信装置H2がデータ送信機能を備えるものであってもよい。
また、通信システム1000は、MPTCP(Multipath Transmission Control Protocol)による通信を実行できる機能を有しており、複数のパスにより、データ通信を行うことができる。なお、以下では、説明便宜のため、2つのパスを用いてMPTCPによる通信を行う場合について、説明する。
第1通信装置H1は、図1に示すように、アプリケーション部H1_apと、第1データ通信モジュール1とを備える。第1通信装置H1は、図2に示すように、MPTCPによる通信を実行できる機能を有している。第1通信装置H1は、送信データをスクランブル処理してスクランブルデータを取得し、取得したスクランブルデータをTCPのサブフローにより送信する機能を有する。
アプリケーション部H1_apは、アプリケーション層の処理を行う。アプリケーション部H1_apは、送信データData_txを第1データ通信モジュール1に出力する。なお、送信データData_txは、第1通信装置H1の内部(例えば、記憶装置(不図示))で保持されているものであってもよく、あるいは、第1通信装置H1の外部から入力されるものであってもよい。
第1データ通信モジュール1は、図3に示すように、MPTCPコネクション確立処理部10と、送信データ取得部11と、スクランブル用キーデータ生成部12と、スクランブルデータ生成部13と、TCPサブフローデータ生成部14と、第1通信インターフェース15と、第2通信インターフェース16とを備える。なお、本実施形態では、MPTCP(Multipath Transmission Control Protocol)による通信のパスが2つであるため、第1データ通信モジュール1は、2つの通信部(第1通信インターフェース15と第2通信インターフェース16)を有している。MPTCP(Multipath Transmission Control Protocol)による通信のパスがN個(N:自然数)である場合、第1データ通信モジュール1は、N個の通信部を備える。
MPTCPコネクション確立処理部10は、外部の通信装置(通信相手となる通信装置)とのMPTCPコネクションを確立するための処理を実行する機能部である。MPTCPコネクション確立処理部10は、第1通信インターフェース15を介して、外部の通信装置(通信相手となる通信装置)とのMPTCPコネクションを確立するための処理を実行する。また、MPTCPコネクション確立処理部10は、外部の通信装置(通信相手となる通信装置)とのMPTCPコネクションの解放処理も行う。MPTCPコネクション確立処理部10は、第1通信インターフェース15を介して、MPTCPコネクションを解放するための処理を実行する。
送信データ取得部11は、アプリケーション部H1_apから出力される送信データData_txを入力する。送信データ取得部11は、送信データData_txから所定の長さのデータ(例えば、1バイトのデータ)を取得し、取得したデータをデータD_tx[k]としてスクランブル用キーデータ生成部12およびスクランブルデータ生成部13に出力する。また、送信データ取得部11は、スクランブルデータ生成部13から制御信号Ctl1を入力する。なお、以下では、説明便宜のため、上記の「所定の長さ」が1バイトに相当するデータ長であるものとする。そして、データD_tx[k]は、送信データData_txがN1バイトからなる場合、kバイト目(k:整数、0≦k<N1)のバイトデータである。以下においても同様の表記(kバイト目のバイトデータであることを示す表記)を用いて説明する。
スクランブル用キーデータ生成部12は、図4に示すように、シフトバッファ制御部121と、シフトバッファ122と、第1XOR演算部123とを備える。
シフトバッファ制御部121は、送信データ取得部11から出力されるデータD_tx[k]と、スクランブルデータ生成部13から出力される制御信号Ctl1とを入力する。また、シフトバッファ制御部121は、初期値を入力する。シフトバッファ制御部121は、初期値またはデータD_tx[k]をデータD_byteとしてシフトバッファ122に出力する。また、シフトバッファ制御部121は、制御信号Ctl1に基づいて、シフトバッファ122を制御するための制御信号Ctl2を生成し、生成した制御信号Ctl2をシフトバッファ制御部121に出力する。
シフトバッファ122は、所定の単位(例えば、バイト単位)で記憶保持しているデータをシフトさせるバッファ(例えば、FIFO(First In First Out)メモリ)である。シフトバッファ122は、シフトバッファ制御部121から出力されるデータD_byteを入力し、シフトバッファ122の所定の領域に記憶する。また、シフトバッファ122は、シフトバッファ制御部121から出力される制御信号Ctl2を入力し、制御信号Ctl2に基づいて、記憶されているデータを所定の単位(例えば、バイト単位)だけシフトさせる処理を行う。
第1XOR演算部123は、シフトバッファ122に記憶されているデータを所定の単位(例えば、バイト単位)で読み出し、読み出したデータに対して論理演算処理(例えば、XOR演算)を行い、当該論理演算処理の結果をデータDky[k]としてスクランブルデータ生成部13に出力する。
スクランブルデータ生成部13は、図4に示すように、第2XOR演算部131と、スクランブルデータ取得部132とを備える。
第2XOR演算部131は、スクランブル用キーデータ生成部12から出力されるデータDky[k]と、送信データ取得部11から出力されるデータD_tx[k]とを入力する。第2XOR演算部131は、データDky[k]と、データD_tx[k]とを用いて論理演算処理(例えば、XOR演算)を行い、当該論理演算処理の結果をデータD_txs[k]としてスクランブルデータ取得部132に出力する。
スクランブルデータ取得部132は、第2XOR演算部131から出力されるデータD_txs[k]を入力する。スクランブルデータ取得部132は、第2XOR演算部131からデータD_txs[k]を入力したら、シフトバッファ122を操作するための制御信号Ctl1を生成し、生成した制御信号Ctl1をシフトバッファ制御部121に出力する。また、スクランブルデータ取得部132は、データD_txs[k]を所定の個数分集めて、所定のデータ長の送信用データD_txsを生成する。例えば、送信用データD_txsがN1バイトである場合、N1バイト分のデータD_txs[k]が揃った後、N1バイト分のデータD_txs[k]から送信用データD_txsを取得し、取得した送信用データD_txsをTCPサブフローデータ生成部14に出力する。
TCPサブフローデータ生成部14は、スクランブルデータ生成部13から出力される送信用データD_txsを入力する。TCPサブフローデータ生成部14は、送信用データD_txsから、複数のTCPサブフローで送信可能なデータを取得する。本実施形態では、TCPサブフローの数は「2」であるため、TCPサブフローデータ生成部14は、送信用データD_txsから、2つのTCPサブフローで送信可能なデータD_txs_sub1およびD_txs_sub2を取得する。そして、TCPサブフローデータ生成部14は、TCPサブフロー用データD_txs_sub1を第1通信インターフェース15に出力し、TCPサブフロー用データD_txs_sub2を第2通信インターフェース16に出力する。
第1通信インターフェース15は、MPTCPコネクション確立処理部10からの指令によりMPTCPコネクション確立処理に必要な通信用データを生成し、生成した通信用データを、外部の通信装置(通信相手となる通信装置)に送信する。また、第1通信インターフェース15は、外部の通信装置(通信相手となる通信装置)から受信したデータをMPTCPコネクション確立処理部10に出力する。
また、第1通信インターフェース15は、TCPサブフローデータ生成部14から出力されるTCPサブフロー用データD_txs_sub1を入力し、TCPサブフロー用データD_txs_sub1に基づいて、送信用データD_sub1を生成し、生成した送信用データD_sub1を通信相手となる第2通信装置H2に送信する。
第2通信インターフェース16は、TCPサブフローデータ生成部14から出力されるTCPサブフロー用データD_txs_sub2を入力し、TCPサブフロー用データD_txs_sub2に基づいて、送信用データD_sub2を生成し、生成した送信用データD_sub2を通信相手となる第2通信装置H2に送信する。
第2通信装置H2は、図1に示すように、アプリケーション部H2_apと、第2データ通信モジュール2とを備える。第2通信装置H2は、図2に示すように、MPTCPによる通信を実行できる機能を有している。
アプリケーション部H2_apは、アプリケーション層の処理を行う。アプリケーション部H2_apは、第2データ通信モジュール2から出力される受信データData_rxを入力する。
第2データ通信モジュール2は、図5に示すように、MPTCPコネクション確立処理部20と、第3通信インターフェース21と、第4通信インターフェース22と、MPTCPデータ取得部23と、デスクランブルデータ取得部24と、スクランブル用キーデータ生成部25と、受信データ取得部26と、を備える。
なお、本実施形態では、MPTCP(Multipath Transmission Control Protocol)による通信のパスが2つであるため、第2データ通信モジュール2は、2つの通信部(第3通信インターフェース21と第4通信インターフェース22)を有している。MPTCPによる通信のパスがN個(N:自然数)である場合、第2データ通信モジュール2は、N個の通信部を備える。
MPTCPコネクション確立処理部20は、外部の通信装置(通信相手となる通信装置)とのMPTCPコネクションを確立するための処理を実行する機能部である。MPTCPコネクション確立処理部20は、第3通信インターフェース21を介して、外部の通信装置(通信相手となる通信装置)とのMPTCPコネクションを確立するための処理を実行する。また、MPTCPコネクション確立処理部20は、外部の通信装置(通信相手となる通信装置)とのMPTCPコネクションの解放処理も行う。MPTCPコネクション確立処理部20は、第3通信インターフェース21を介して、MPTCPコネクションを解放するための処理を実行する。
第3通信インターフェース21は、MPTCPコネクション確立処理部20からの指令によりMPTCPコネクション確立処理に必要な通信用データを生成し、生成した通信用データを、外部の通信装置(通信相手となる通信装置)に送信する。また、第3通信インターフェース21は、外部の通信装置(通信相手となる通信装置)から受信したデータをMPTCPコネクション確立処理部20に出力する。
また、第3通信インターフェース21は、第1通信装置H1から送信されるデータD_sub1を受信し、受信したデータをデータD_rxs_sub1としてMPTCPデータ取得部23に出力する。
第4通信インターフェース22は、第1通信装置H1から送信されるデータD_sub2を受信し、受信したデータをデータD_rxs_sub2としてMPTCPデータ取得部23に出力する。
MPTCPデータ取得部23は、第3通信インターフェース21から出力されるデータD_rxs_sub1と、第4通信インターフェース22から出力されるデータD_rxs_sub2と、を入力する。MPTCPデータ取得部23は、TCPサブフローデータであるデータD_rxs_sub1と、データD_rxs_sub2とから、MPTCPデータD_rxsを取得する。そして、MPTCPデータ取得部23は、取得したMPTCPデータD_rxsをデスクランブルデータ取得部24に出力する。
デスクランブルデータ取得部24は、図6に示すように、バイトデータ抽出部241と、第3XOR演算部242とを備える。
バイトデータ抽出部241は、MPTCPデータ取得部23から出力されるデータD_rxsを入力する。バイトデータ抽出部241は、データD_rxsから所定の単位のデータ長(例えば、1バイト)のデータを抽出し、抽出したデータをデータD_rxs[k]として、第3XOR演算部242に出力する。
第3XOR演算部242は、バイトデータ抽出部241から出力されるデータD_rxs[k]と、スクランブル用キーデータ生成部25から出力されるデータDky[k]とを入力する。第3XOR演算部242は、データD_rxs[k]と、データDky[k]とを用いて論理演算処理(例えば、XOR演算)を行い、当該論理演算処理の結果をデータD_rx[k]として受信データ取得部26に出力する。
スクランブル用キーデータ生成部25は、第1データ通信モジュール1に含まれるスクランブル用キーデータ生成部12と同じ構成を有している。
スクランブル用キーデータ生成部25は、図6に示すように、シフトバッファ制御部251と、シフトバッファ252と、第1XOR演算部253とを備える。
シフトバッファ制御部251は、デスクランブルデータ取得部24から出力されるデータD_tx[k]と、受信データ取得部26から出力される制御信号Ctl3とを入力する。また、シフトバッファ制御部251は、初期値を入力する。シフトバッファ制御部251は、初期値またはデータD_tx[k]をデータD_byteとしてシフトバッファ252に出力する。また、シフトバッファ制御部251は、制御信号Ctl3に基づいて、シフトバッファ252を制御するための制御信号Ctl4を生成し、生成した制御信号Ctl4をシフトバッファ制御部121に出力する。
シフトバッファ252は、所定の単位(例えば、バイト単位)で記憶保持しているデータをシフトさせるバッファ(例えば、FIFOメモリ)である。シフトバッファ252は、シフトバッファ制御部251から出力されるデータD_byteを入力し、シフトバッファ252の所定の領域に記憶する。また、シフトバッファ252は、シフトバッファ制御部251から出力される制御信号Ctl4を入力し、制御信号Ctl4に基づいて、記憶されているデータを所定の単位(例えば、バイト単位)だけシフトさせる処理を行う。
第1XOR演算部253は、シフトバッファ252に記憶されているデータを所定の単位(例えば、バイト単位)で読み出し、読み出したデータに対して論理演算処理(例えば、XOR演算)を行い、当該論理演算処理の結果をデータDky[k]としてデスクランブルデータ取得部24に出力する。
受信データ取得部26は、デスクランブルデータ取得部24から出力されるデータD_rx[k]を入力する。受信データ取得部26は、データD_rx[k]を所定の個数分集めて、所定のデータ長のデータData_rxを取得する。そして、受信データ取得部26は、取得したデータData_rxをアプリケーション部H2_apに出力する。
<1.2:通信システムの動作>
以上のように構成された通信システム1000の動作について、以下、説明する。
以下では、第1通信装置H1と第2通信装置との間においてMPTCPを用いて通信する場合について説明する。なお、第1通信装置H1が2つのIPアドレス(アドレスA1およびアドレスA2)を有しており、第2通信装置が1つのIPアドレス(アドレスB)を有しているものとし、アドレスA1とアドレスBとの間、および、アドレスA2とアドレスBとの間の2つのTCPサブフロー(2つの通信経路(通信パス))により通信が実行される場合について説明する。また、第1通信装置H1および第2通信装置は、通常のTCP/IPによる通信機能、および、MPTCPによる通信機能を備えているものとする。
図7は、MPTCPコネクション確立処理のシーケンス図である。
図8は、MPTCPコネクションによるデータ転送処理のシーケンス図である。
図9は、MPTCPコネクションの解放処理のシーケンス図である。
(1.2.1:MPTCPコネクション確立処理)
まず、MPTCPコネクション確立処理について、説明する。
通信システム1000では、第1通信装置H1と第2通信装置H2との間でMPTCPコネクションを確立させるための処理が実行される。このMPTCPコネクション確立処理の基本手順は、RFC6824(Request for Comments: 6824、”TCP Extensions for Multipath Operation with Multiple Addresses”)に従う。
図7に示すように、第1通信装置H1は、アドレスA1を用いて、第2通信装置H2のアドレスB宛のTCPセグメントの1つであるSYNセグメント(TCPセグメント構造で規定されているフラグSYN(1ビット)をセットしたTCPセグメント)を生成する。そして、当該SYNセグメントのTCPオプションに、MP_CAPABLEオプションを含ませる。
図10は、RFC6824で規定されているMP_CAPABLEオプションのデータフォーマット(横方向の幅を32ビットとして表示したデータフォーマット)である。
第1通信装置H1は、図7に示すように、MP_CAPABLEオプションの「Sender's Key」エリアに、第1通信装置H1のキー(これを「ホストAのキー」、または、「Aのキー」という)を含め、また、所定のフラグをセットして、MP_CAPABLEオプションのデータを生成し、生成したMP_CAPABLEオプションのデータを、SYNセグメントに含める。そして、このようにして生成したSYNセグメントを含むデータを、第1通信装置H1は、アドレスA1から、第2通信装置H2のアドレスB宛に送信する。
なお、「キー」は、64ビット(8バイト)の情報である。キーは、MPTCPコネクション内で確立されるTCPサブフローを認証するための情報であり、コネクション確立時にのみ転送される。また、「フラグ」は、チェックサムを要求するかどうか、暗号化アルゴリズムの種類(現在はSHA-1ベースのHMACの方式のみが定義)などを指定する。
第1通信装置H1は、SYNセグメントにより、第1通信装置H1のキー(ホストAのキー)を第2通信装置H2に通知する(ステップS101)。
そして、第2通信装置H2は、SYN+ACKセグメント(SYNフラグとACKフラグをセットしたTCPセグメント)により、第2通信装置H2のキー(これを「ホストBのキー」、または、「Bのキー」という)を、第1通信装置H1に通知する(ステップS102)。
最後に、3ウェイハンドシェークのACKセグメント(ACKフラグをセットしたTCPセグメント)により、第1通信装置H1は、第2通信装置H2に対して、ホストAのキーとホストBのキーの双方のキーを通知する(ステップS103)。
なお、キーは、MPTCPコネクションごとに異なる値が動的に生成される。
ステップS102において、MP_CAPABLEオプションを受信側である第2通信装置H2が認識しない場合、SYN+ACKセグメントには対応するオプション(ホストBのキー等の情報)が含まれない。この場合、第2通信装置H2は、MPTCPによる通信ができないと判定され、第1通信装置H1と第2通信装置H2との間に、通常のTCPコネクションを確立させ、通信を開始させる。
なお、上記のMPTCPコネクション確立処理は、第1通信装置H1のMPTCPコネクション確立処理部10、および、第1通信インターフェース15と、第2通信装置H2のMPTCPコネクション確立処理部20、および、第3通信インターフェース21とにより実行される。
上記処理により、第1通信装置H1と第2通信装置H2との間に、MPTCPコネクション、つまり、第1のTCPサブフローのコネクションが確立された場合、通信システム1000では、第1通信装置H1と第2通信装置H1との間に、第2のTCPサブフロー(追加のTCPサブフロー)のコネクション確立のための処理が実行される。
図7に示すように、第2のTCPサブフローのコネクション確立処理時において、第1通信装置H1は、SYNセグメントにおいて、MP_JOINオプション(RFC6824で規定されているMP_JOINオプション)を設定する。そして、MP_JOINオプションに、ホストBのトークン、ホストAのナンス、ホストAのアドレスID、フラグを含める。なお、以下では、「第1通信装置H1」を「ホストA」とよび、「第2通信装置H2」を「ホストB」とよぶことがある。
「トークン」とは、MPTCPコネクションを確立した時点で、送信側(第1通信装置H1)と受信側(第2通信装置H2)で交換したキーから生成される値で、サブフローがどのMPTCPコネクションに属するかを示す。トークンは、MP_CAPABLEオプションのキーの値(8バイト)に対して、SHA−1によるメッセージダイジェスト(20バイト)を計算し、その高位の32ビット(4バイト)を抜き出したものである。またナンスは32ビット(4バイト)の乱数である。
「ナンス」は、32ビットの乱数である。
「アドレスID」は、送信アドレスを、途中にNATが存在して変更された場合でも識別できるようにするものである。
なお、「トークン」、「ナンス」、「アドレスID」は、RFC6824で規定されている。
ステップS104において、第1通信装置H1は、上記のようにして生成されたSYNセグメント(MP_JOINオプションを含むSYNセグメント)を含むデータを、アドレスA2から、第2通信装置H2のアドレスB宛に送信する。
ステップS105において、第2通信装置H2は、ステップS104で、第1通信装置H1から受信したデータから、ホストB(第2通信装置H2)のトークンBを取得する。第2通信装置H2は、自身が過去に発行したキーの中に、受信したトークンBと一致するものがあるかどうかを調べる。そして、一致するものがある場合、第2通信装置H2は、過去に確立したMPTCPコネクションを選び、当該MPTCPコネクションに対応する第1通信装置H1(ホストA)のキーを求めることができる。
第2通信装置H2は、MP_JOINオプションに、ホストBのHMAC、ホストBのナンス、ホストBのアドレスID、および、フラグを含め、そして、当該MP_JOINオプションを含むSYN+ACKセグメントを生成する。そして、第2通信装置H2は、生成したSYN+ACKセグメントを含むデータ、第1通信装置H1に送信する。
なお、SYN+ACKセグメントで、第2通信装置H2から第1通信装置H1に送られるHMACは、Bのナンス+Aのナンスを、Bのキー+AのキーでHMACを求めた20バイトのうちの、上位の64ビット(8バイト)をとったものである。これは、第1通信装置H1と第2通信装置H2との間の互いの認証に使用される。
ステップS106において、第1通信装置H1は、
MP_JOINオプションに、ホストAのHMACを含め、そして、当該MP_JOINオプションを含むACKセグメントを生成する。そして、第1通信装置H2は、生成したACKセグメントを含むデータを、第2通信装置H2に送信する。
なお、ACKセグメントで、第1通信装置H1から第2通信装置H2に送られるHMACは、Aのナンス+Bのナンスを、Aのキー+BのキーでHMACを求めた20バイトの値となる。
以上の処理により、第1通信装置H1と第2通信装置H2との間に、2つのTCPサブフローのコネクションが確立され、第1通信装置H1と第2通信装置H2との間において、MPTCPによる通信が可能となる。
(1.2.2:MPTCPコネクションによるデータ転送処理)
次に、MPTCPコネクションによるデータ転送処理について、説明する。
図9に示すように、第1通信装置H1は、第2通信装置H2に対して、2つのTCPサブフローにより、MPTCPによる通信を行う。
MPTCPによるデータ転送では、MPTCPコネクションを流れるデータに64ビットのデータシーケンス番号(DSN)が付与される。
さらに、このDSNとTCPサブフローの32ビットのシーケンス番号との対応をつけるために、図8に示すように、DATA_SEQUECE_SIGNALオプション(RFC6824を参照)が使用される。
「データシーケンスマッピング」は、RFC6824で規定されており、データシーケンスマッピングには、DSNと対応するサブフローシーケンス番号、このデータ(転送データ)のマッピングが有効な長さの情報が含まれる。また、データシーケンスマッピングには、コネクションレベルの確認応答のデータACKも含まれる。
なお、自身(自装置)のキーの値に対してSHA−1によるメッセージダイジェストを計算した結果(20バイト)の下位8バイトを、データシーケンス番号の初期値(Initial Data Sequence Number:IDSN)として使用する。これにより、送信側と受信側で、IDSNの値を明示的に交換する必要はなくなる。
(1.2.3:MPTCPコネクションの解放処理)
次に、MPTCPコネクションの解放処理について、説明する。
図9にMPTCPコネクションの解放のシーケンスを示す。
図9に示すように、第1通信装置H1は、第2通信装置H2に対して、DATA_SEQUECE_SIGNALの一部としてデータFINを含め、データを送信する。第2通信装置H2は、第1通信装置H1から、データFINを受信することで、対応するTCPサブフローのコネクションを解放する。本実施形態では、図9に示すように、2つのTCPサブフローのコネクションが解放されることで、第1通信装置H1と第2通信装置H2間のMPTCPコネクションが解放される。
なお、上記のMPTCPコネクション解放処理は、第1通信装置H1のMPTCPコネクション確立処理部10、および、第1通信インターフェース15と、第2通信装置H2のMPTCPコネクション確立処理部20、および、第3通信インターフェース21とにより実行される。
(1.2.4:MPTCPコネクションによるスクランブルデータ転送処理)
次に、MPTCPコネクションによるスクランブルデータ転送処理について、説明する。
第1通信装置H1は、MPTCPコネクションの確立処理時において、MP_CAPABLEオプションのフラグ、例えば、図10のフラグGを「1」にセットしたSYNセグメントを、第2通信装置H2に送信する。つまり、MP_CAPABLEオプションの所定のフラグ(上記では、フラグG)をセットすることで、スクランブル機能を用いたデータ転送を行うことを、受信側(第2通信装置H2)に通知するように予め決めておく。
なお、スクランブル機能を用いたデータ転送を行うことを通知するためのフラグのパターンは、上記に限定されることはない。例えば、既に使用されている(あるいは予約されている)ビットパターン(フラグA〜Hによるビットパターン)以外のビットパターンに、各フラグの値を設定することで、送信側から受信側に、スクランブル機能を用いたデータ転送を行うことを通知するようにしてもよい。
第2通信装置H2は、上記のようにして生成されたSYNセグメントのMP_CAPABLEオプションの所定のフラグ(上記では、フラグG)がセットされていることを確認し、スクランブル機能を用いたデータの受信に備える。
≪送信側の処理≫
第1通信装置H1の送信データ取得部11は、アプリケーション部H1_apから出力される送信データData_txを入力し、送信データData_txから所定の長さ(1バイト)のデータを取得する。そして、送信データ取得部11は、取得したデータをデータD_tx[k]としてスクランブル用キーデータ生成部12およびスクランブルデータ生成部13に出力する。
なお、以下では、送信データData_txがN1バイト(N1:自然数)のデータであり、送信データ取得部11は、送信データData_txの先頭バイト(N1−1バイト目のデータ)から0バイト目のデータまでを順番にバイト単位で取得(抽出)するものとする。
したがって、送信データ取得部11は、最初に、送信データData_txの先頭バイト(N−1バイト目)のデータD_tx[N1−1]を取得し、スクランブル用キーデータ生成部12およびスクランブルデータ生成部13に出力する。
なお、以下では、説明便宜のため、N1=8、すなわち、送信データData_txが8バイトのデータである場合を一例として説明する。
第1データ通信モジュール1では、スクランブルデータを作成するための初期値が設定される。具体的には、第1データ通信モジュール1は、データシーケンス番号の初期値であるIDSNを、初期値に設定する。つまり、第1データ通信モジュール1は、自装置(第1通信装置H1)のキーの値keyAに対して、SHA−1によるメッセージダイジェストを計算した結果(20バイト)の下位8バイトを、データシーケンス番号の初期値であるIDSNとする。すなわち、第1データ通信モジュール1は、
MsgDig=SHA1(keyA)
IDSN=Lower_8bytes(MsgDig)
SHA1(x):xに対するSHA−1によるメッセージダイジェストを取得する関数
Lower_8bytes(x):xの下位8バイトを取得する関数
により、IDSNを取得する。
スクランブル用キーデータ生成部12のシフトバッファ制御部121は、シフトバッファ122に、上記の初期値、すなわち、8バイトのデータであるIDSNを書き込む。IDSNは、D7〜D0のバイトデータから構成されているものとする。
図11は、スクランブルデータの生成処理を説明するための図であり、送信データData_txの最初(先頭)のバイトデータからスクランブルデータを生成する処理を説明するための図である(1回目の処理)。
図11に示すように、IDSNの7バイト目のデータであるD7から、順番に、IDSNの0バイト目のデータであるD0までが、シフトバッファ122に書き込まれる。
なお、シフトバッファ122は、バイト単位で保持しているデータをシフトさせるバッファであり、図11の右端に新しいバイトデータが書き込まれ、図11の左方向に1バイトずつ、保持しているデータ(バイトデータ)をシフトさせるバッファである。そして、シフトバッファ122に保持されている最も古いデータ(図11の左端のバイトデータ)は、次のシフト動作が実行されると破棄される。
また、説明便宜のため、シフトバッファ122は、64バイト分のデータを保持するバッファであるものとする。
スクランブル用キーデータ生成部12は、全てのバイトデータが0x00となっている状態から、シフトバッファ制御部121により、初期値であるIDSNの8バイト分のデータを、シフトバッファ122に書き込む。この処理が終了した時点で、シフトバッファ122は、図11に示した状態となる。なお、IDSNは、D7〜D0の8つの1バイトのデータからなるものとする。D7が7バイト目のデータであり、D0が0バイト目のデータである。
そして、第1XOR演算部123は、1回目の処理(図11に示した状態)において、シフトバッファ122の全てのバイトデータ、つまり、64個のバイトデータを読み出し、読み出した64個のバイトデータの排他的論理和をとる。つまり、第1XOR演算部123は、
Dky[N1−1]=Dbuf[63]^Dbuf[62]^・・・
^Dbuf[2]^Dbuf[1]^Dbuf[0]
に相当する論理演算を行い、1バイトのデータDky[N1−1](=Dky[7])を取得する。
なお、「^」は、排他的論理和をとる演算子を表している。
また、Dbuf[x]は、シフトバッファ122のxバイト目のバイトデータ(1バイトのデータ)を表す。
1回目の処理(図11に示した状態)において、Dbuf[63]〜Dbuf[8]は、全て0x00であるので、
Dky[N1−1]=D7^D6^・・・^D2^D1^D0
となる。つまり、1回目の処理(図11に示した状態)では、IDSNの各バイトデータの排他的論理和をとった値が、Dky[N1−1](=Dky[7])となる。
そして、図11に示すように、第2XOR演算部131は、
D_txs[N1−1]=Dky[N1−1]^D_tx[N1−1]
に相当する処理(排他的論理和をとる処理)を実行し、D_txs[N1−1](=D_txs[7])を取得する。なお、図11では、D_txs[N1−1]をDs7と表示している。
上記の処理(1回目の処理)が完了し、D_txs[N1−1](=D_txs[7])がスクランブルデータ取得部132に入力されると、スクランブルデータ取得部132は、次の処理(2回目の処理)が実行されるように、制御信号Ctl1を、送信データ取得部11とシフトバッファ制御部121とに出力する。
図12は、スクランブルデータの生成処理を説明するための図であり、送信データData_txの先頭からの2バイト目のバイトデータからスクランブルデータを生成する処理を説明するための図である(2回目の処理)。
送信データ取得部11は、送信データData_txから次のバイトデータD_tx[N1−2](=D_tx[6])を抽出し、シフトバッファ制御部121に出力する。
シフトバッファ制御部121は、制御信号Ctl1に従い、シフトバッファ122を1バイトシフトさせるとともに、1回目の処理で使用した送信データのバイトデータD_tx[N1−1](=D_tx[7])(図12では、「Dx7」と表示)をシフトバッファ122に書き込む。
そして、第1XOR演算部123は、2回目の処理(図12に示した状態)において、シフトバッファ122の全てのバイトデータ、つまり、64個のバイトデータを読み出し、読み出した64個のバイトデータの排他的論理和をとる。つまり、第1XOR演算部123は、
Dky[N1−2]=Dbuf[63]^Dbuf[62]^・・・
^Dbuf[2]^Dbuf[1]^Dbuf[0]
に相当する論理演算を行い、1バイトのデータDky[N1−2](=Dky[6])を取得する。
2回目の処理(図12に示した状態)において、Dbuf[63]〜Dbuf[9]は、全て0x00であるので、
Dky[N1−2]=D7^D6^・・・^D2^D1^D0^Dx7
となる。つまり、2回目の処理(図12に示した状態)では、IDSNの各バイトデータと送信データのバイトデータD_tx[N1−2](=D_tx[6]=Dx6)との排他的論理和をとった値が、Dky[N1−2](=Dky[6])となる。
そして、図12に示すように、第2XOR演算部131は、
D_txs[N1−2]=Dky[N1−2]^D_tx[N1−2]
に相当する処理(排他的論理和をとる処理)を実行し、D_txs[N1−2](=D_txs[6])を取得する。なお、図12では、D_txs[N1−2]をDs6と表示している。
上記の処理(2回目の処理)が完了し、D_txs[N1−2](=D_txs[6])がスクランブルデータ取得部132に入力されると、スクランブルデータ取得部132は、次の処理(3回目の処理)が実行されるように、制御信号Ctl1を、送信データ取得部11とシフトバッファ制御部121とに出力する。
図13は、スクランブルデータの生成処理を説明するための図であり、送信データData_txの先頭からの3バイト目のバイトデータからスクランブルデータを生成する処理を説明するための図である(3回目の処理)。
送信データ取得部11は、送信データData_txから次のバイトデータD_tx[N1−3](=D_tx[5])を抽出し、シフトバッファ制御部121に出力する。
シフトバッファ制御部121は、制御信号Ctl1に従い、シフトバッファ122を1バイトシフトさせるとともに、2回目の処理で使用した送信データのバイトデータD_tx[N1−2](=D_tx[6])(図13では、「Dx6」と表示)をシフトバッファ122に書き込む。
そして、第1XOR演算部123は、3回目の処理(図13に示した状態)において、シフトバッファ122の全てのバイトデータ、つまり、64個のバイトデータを読み出し、読み出した64個のバイトデータの排他的論理和をとる。つまり、第1XOR演算部123は、
Dky[N1−3]=Dbuf[63]^Dbuf[62]^・・・
^Dbuf[2]^Dbuf[1]^Dbuf[0]
に相当する論理演算を行い、1バイトのデータDky[N1−3](=Dky[5])を取得する。
3回目の処理(図13に示した状態)において、Dbuf[63]〜Dbuf[10]は、全て0x00であるので、
Dky[N1−3]=D7^D6^・・・^D2^D1^D0^Dx7^Dx6
となる。つまり、3回目の処理(図13に示した状態)では、IDSNの各バイトデータと送信データのバイトデータD_tx[N1−3](=D_tx[5]=Dx5)との排他的論理和をとった値が、Dky[N1−3](=Dky[5])となる。
そして、図13に示すように、第2XOR演算部131は、
D_txs[N1−3]=Dky[N1−3]^D_tx[N1−3]
に相当する処理(排他的論理和をとる処理)を実行し、D_txs[N1−3](=D_txs[5])を取得する。なお、図13では、D_txs[N1−3]をDs5と表示している。
上記の処理(3回目の処理)が完了し、D_txs[N1−3](=D_txs[5])がスクランブルデータ取得部132に入力されると、スクランブルデータ取得部132は、次の処理(4回目の処理)が実行されるように、制御信号Ctl1を、送信データ取得部11とシフトバッファ制御部121とに出力する。
上記と同様の処理を繰り返すことで、スクランブルデータData_txsが取得される。
そして、N1バイト(=8バイト)分のバイトデータが揃うと、スクランブルデータ取得部132は、スクランブルデータData_txsをTCPサブフローデータ生成部14に出力する。
TCPサブフローデータ生成部14は、送信用データD_txsから、複数のTCPサブフローで送信可能なデータを取得する。本実施形態では、TCPサブフローの数は「2」であるため、TCPサブフローデータ生成部14は、送信用データD_txsから、2つのTCPサブフローで送信可能なデータD_txs_sub1およびD_txs_sub2を取得する。そして、TCPサブフローデータ生成部14は、TCPサブフロー用データD_txs_sub1を第1通信インターフェース15に出力し、TCPサブフロー用データD_txs_sub2を第2通信インターフェース16に出力する。
第1通信インターフェース15は、TCPサブフローデータ生成部14から出力されるTCPサブフロー用データD_txs_sub1を入力し、TCPサブフロー用データD_txs_sub1に基づいて、送信用データD_sub1を生成する。そして、第1通信インターフェース15は、生成した送信用データD_sub1を通信相手となる第2通信装置H2に送信する。このとき、第1通信インターフェース15は、第1通信装置H1のアドレスA1と第2通信装置H2のアドレスBとの間に確立されているTCPサブフローのコネクションのコネクションと使って、データ送信を行う。
第2通信インターフェース16は、TCPサブフローデータ生成部14から出力されるTCPサブフロー用データD_txs_sub2を入力し、TCPサブフロー用データD_txs_sub2に基づいて、送信用データD_sub2を生成し、生成した送信用データD_sub2を通信相手となる第2通信装置H2に送信する。このとき、第2通信インターフェース16は、第1通信装置H1のアドレスA2と第2通信装置H2のアドレスBとの間に確立されているTCPサブフローのコネクションを使って、データ送信を行う。
なお、アプリケーション部H1_apが、次の送信データData_rxを送信することを第1データ通信モジュールに要求した場合、その時点のシフトバッファ122(送信用スクランブルバッファ)に格納されているバイトデータを用いて、上記と同様の処理を行い、スクランブル用のキーデータのバイトデータDky[k]を取得し、当該バイトデータを用いて、上記と同様の処理により、送信データのスクランブル化処理を実行すればよい。
≪受信側の処理≫
第2通信装置H2の第3通信インターフェース21は、第1通信装置H1のアドレスA1と第2通信装置H2のアドレスBとの間に確立されているTCPサブフローのコネクションを使って、第1通信装置H1から送信されるデータD_sub1を受信する。そして、第3通信インターフェース21は、受信したデータをデータD_rxs_sub1としてMPTCPデータ取得部23に出力する。
第2通信装置H2の第4通信インターフェース22は、第1通信装置H1のアドレスA2と第2通信装置H2のアドレスBとの間に確立されているTCPサブフローのコネクションを使って、第1通信装置H1から送信されるデータD_sub2を受信する。そして、第4通信インターフェース22は、受信したデータをデータD_rxs_sub2としてMPTCPデータ取得部23に出力する。
MPTCPデータ取得部23は、第3通信インターフェース21から出力されるデータD_rxs_sub1と、第4通信インターフェース22から出力されるデータD_rxs_sub2と、を入力する。MPTCPデータ取得部23は、TCPサブフローデータであるデータD_rxs_sub1と、データD_rxs_sub2とを、データシーケンス番号の順に並べる処理を実行することで、MPTCPデータD_rxsを取得する。そして、MPTCPデータ取得部23は、取得したMPTCPデータD_rxsをデスクランブルデータ取得部24に出力する。
デスクランブルデータ取得部24のバイトデータ抽出部241は、MPTCPデータ取得部23から出力されるデータD_rxsから、所定の単位のデータ長(1バイト)のデータを抽出し、抽出したデータをデータD_rxs[k]として、第3XOR演算部242に出力する。
第3XOR演算部242は、データD_rxs[k]と、データDky[k]とを用いて論理演算処理(例えば、XOR演算)を行い、当該論理演算処理の結果をデータD_rx[k]として受信データ取得部26に出力する。
第2データ通信モジュール2では、スクランブルデータを作成するための初期値が設定される。具体的には、第2データ通信モジュール2は、データシーケンス番号の初期値であるIDSNを、初期値に設定する。つまり、第2データ通信モジュール2は、通信相手である第2通信装置H2のキーの値keyAに対して、SHA−1によるメッセージダイジェストを計算した結果(20バイト)の下位8バイトを、データシーケンス番号の初期値であるIDSNとする。すなわち、第2データ通信モジュール2は、
MsgDig=SHA1(keyA)
IDSN=Lower_8bytes(MsgDig)
SHA1(x):xに対するSHA−1によるメッセージダイジェストを取得する関数
Lower_8bytes(x):xの下位8バイトを取得する関数
により、IDSNを取得する。
スクランブル用キーデータ生成部25のシフトバッファ制御部251は、シフトバッファ122に、上記の初期値、すなわち、8バイトのデータであるIDSNを書き込む。IDSNは、D7〜D0のバイトデータから構成されているものとする。
図14は、デスクランブルデータの取得処理を説明するための図であり、受信したスクランブルデータData_rxsの最初(先頭)のバイトデータからデスクランブルされたデータを生成する処理を説明するための図である(1回目の処理(受信側))。
図14に示すように、IDSNの7バイト目のデータであるD7から、順番に、IDSNの0バイト目のデータであるD0までが、シフトバッファ252に書き込まれる。
なお、シフトバッファ252は、バイト単位で保持しているデータをシフトさせるバッファであり、図14の右端に新しいバイトデータが書き込まれ、図14の左方向に1バイトずつ、保持しているデータ(バイトデータ)をシフトさせるバッファである。そして、シフトバッファ122に保持されている最も古いデータ(図14の左端のバイトデータ)は、次のシフト動作が実行されると破棄される。
また、シフトバッファ252は、送信側のシフトバッファ122と同じく64バイト分のデータを保持するバッファである。
スクランブル用キーデータ生成部25は、全てのバイトデータが0x00となっている状態から、シフトバッファ制御部251により、初期値であるIDSNの8バイト分のデータを、シフトバッファ252に書き込む。この処理が終了した時点で、シフトバッファ252は、図14に示した状態となる。なお、IDSNは、D7〜D0の8つの1バイトのデータからなるものとする。D7が7バイト目のデータであり、D0が0バイト目のデータである。
そして、第1XOR演算部253は、1回目の処理(図14に示した状態)において、シフトバッファ252の全てのバイトデータ、つまり、64個のバイトデータを読み出し、読み出した64個のバイトデータの排他的論理和をとる。つまり、第1XOR演算部253は、
Dky[N1−1]=Dbuf[63]^Dbuf[62]^・・・
^Dbuf[2]^Dbuf[1]^Dbuf[0]
に相当する論理演算を行い、1バイトのデータDky[N1−1](=Dky[7])を取得する。
なお、「^」は、排他的論理和をとる演算子を表している。
また、Dbuf[x]は、シフトバッファ122のxバイト目のバイトデータ(1バイトのデータ)を表す。
1回目の処理(図14に示した状態)において、Dbuf[63]〜Dbuf[8]は、全て0x00であるので、
Dky[N1−1]=D7^D6^・・・^D2^D1^D0
となる。つまり、1回目の処理(図14に示した状態)では、IDSNの各バイトデータの排他的論理和をとった値が、Dky[N1−1](=Dky[7])となる。
そして、図14に示すように、第3XOR演算部242は、
D_rx[N1−1]=Dky[N1−1]^D_rxs[N1−1]
に相当する処理(排他的論理和をとる処理)を実行し、D_rx[N1−1](=D_rx[7])を取得する。なお、図14では、D_rxs[N1−1]をDs7と表示し、D_rx[N1−1]をDx7と表示している。
上記の処理(1回目の処理)が完了し、D_rx[N1−1](=D_rx[7])が受信データ取得部26に入力されると、受信データ取得部26は、次の処理(2回目の処理)が実行されるように、制御信号Ctl3を、デスクランブルデータ取得部24とシフトバッファ制御部251とに出力する。
図15は、デスクランブルデータの取得処理を説明するための図であり、受信したスクランブルデータData_rxsの先頭から2バイト目のバイトデータからデスクランブルされたデータを生成する処理を説明するための図である(2回目の処理(受信側))。
バイトデータ抽出部241は、受信したスクランブルデータData_txsから次のバイトデータD_txs[N1−2](=D_txs[6]=Ds6)を抽出し、第3XOR演算部242に出力する。
シフトバッファ制御部251は、制御信号Ctl3に従い、シフトバッファ252を1バイトシフトさせるとともに、1回目の処理で取得した受信データのバイトデータD_rx[N1−1](=D_rx[7])(図15では、「Dx7」と表示)をシフトバッファ252に書き込む。
そして、第1XOR演算部253は、2回目の処理(図15に示した状態)において、シフトバッファ252の全てのバイトデータ、つまり、64個のバイトデータを読み出し、読み出した64個のバイトデータの排他的論理和をとる。つまり、第1XOR演算部253は、
Dky[N1−2]=Dbuf[63]^Dbuf[62]^・・・
^Dbuf[2]^Dbuf[1]^Dbuf[0]
に相当する論理演算を行い、1バイトのデータDky[N1−2](=Dky[6])を取得する。
2回目の処理(図15に示した状態)において、Dbuf[63]〜Dbuf[9]は、全て0x00であるので、
Dky[N1−2]=D7^D6^・・・^D2^D1^D0^Dx7
となる。つまり、2回目の処理(図15に示した状態)では、IDSNの各バイトデータと受信したスクランブルデータのバイトデータD_rxs[N1−2](=D_rxs[6]=Ds6)との排他的論理和をとった値が、Drx[N1−2](=Dx[6]=Dx6)となる。
そして、図15に示すように、第3XOR演算部242は、
D_rx[N1−2]=Dky[N1−2]^D_rxs[N1−2]
に相当する処理(排他的論理和をとる処理)を実行し、D_rx[N1−2](=D_rx[6]=Dx6)を取得する。
上記の処理(2回目の処理)が完了し、D_rx[N1−2](=D_rx[6])が受信データ取得部26に入力されると、受信データ取得部26は、次の処理(3回目の処理)が実行されるように、制御信号Ctl3を、デスクランブルデータ取得部24とシフトバッファ制御部251とに出力する。
図16は、デスクランブルデータの取得処理を説明するための図であり、受信したスクランブルデータData_rxsの先頭から3バイト目のバイトデータからデスクランブルされたデータを生成する処理を説明するための図である(3回目の処理(受信側))。
バイトデータ抽出部241は、受信したスクランブルデータData_txsから次のバイトデータD_txs[N1−3](=D_txs[5]=Ds5)を抽出し、第3XOR演算部242に出力する。
シフトバッファ制御部251は、制御信号Ctl3に従い、シフトバッファ252を1バイトシフトさせるとともに、2回目の処理で取得した受信データのバイトデータD_rx[N1−2](=D_rx[6]=Dx7)をシフトバッファ252に書き込む。
そして、第1XOR演算部253は、3回目の処理(図16に示した状態)において、シフトバッファ252の全てのバイトデータ、つまり、64個のバイトデータを読み出し、読み出した64個のバイトデータの排他的論理和をとる。つまり、第1XOR演算部253は、
Dky[N1−3]=Dbuf[63]^Dbuf[62]^・・・
^Dbuf[2]^Dbuf[1]^Dbuf[0]
に相当する論理演算を行い、1バイトのデータDky[N1−3](=Dky[5])を取得する。
3回目の処理(図16に示した状態)において、Dbuf[63]〜Dbuf[10]は、全て0x00であるので、
Dky[N1−3]=D7^D6^・・・^D2^D1^D0^Dx7^Dx6
となる。つまり、3回目の処理(図16に示した状態)では、IDSNの各バイトデータと受信したスクランブルデータのバイトデータD_rxs[N1−3](=D_rxs[5]=Ds5)との排他的論理和をとった値が、Drx[N1−3](=Dx[5]=Dx5)となる。
そして、図16に示すように、第3XOR演算部242は、
D_rx[N1−3]=Dky[N1−3]^D_rxs[N1−3]
に相当する処理(排他的論理和をとる処理)を実行し、D_rx[N1−3](=D_rx[5]=Dx5)を取得する。
上記の処理(3回目の処理)が完了し、D_rx[N1−3](=D_rx[5])が受信データ取得部26に入力されると、受信データ取得部26は、次の処理(4回目の処理)が実行されるように、制御信号Ctl3を、デスクランブルデータ取得部24とシフトバッファ制御部251とに出力する。
上記と同様の処理を繰り返すことで、デスクランブルされた受信データData_rxが取得される。
このように、通信システム1000では、送信側と受信側とで、同じスクランブル用のキーデータであるデータDky[k]を用いて、排他的論理和をとる処理を行うので、送信側(第1通信装置H1)でスクランブルされたデータを、受信側(第2通信装置H2)でデスクランブルして、元のデータに戻すことができる。
つまり、通信システム1000では、送信側(第1通信装置H1)で
D_txs[k]=D_tx[k]^Dky[k]
に相当する処理を行うことで、送信データのバイトデータD_tx[k]からスクランブル化された送信データのバイトデータD_txs[k]が取得され、
受信側(第2通信装置H2)で
D_rx[k]=D_txs[k]^Dky[k]
に相当する処理を行うことで、スクランブル化された送信データのバイトデータD_txs[k](=D_rxs[k])をデスクランブルして、送信データのバイトデータD_tx[k]と一致する受信データのバイトデータD_rx[k]を取得できる。
そして、通信システム1000では、送信側のスクランブル処理に使用されるスクランブル用のキーデータであるデータDky[k]の初期値を、送信側(第1通信装置H1)のIDSN(8バイトデータ)の各バイトの排他的論理和をとる処理を行うことで取得した1バイトのデータDky[k]とする。そして、次の送信データのバイトデータD_tx[k+1]のスクランブル化処理には、スクランブル化処理が済んだ送信データのバイトデータD_tx[k]と送信側(第1通信装置H1)のIDSN(8バイトデータ)の各バイトの排他的論理和をとる処理を行うことで取得した1バイトのデータDky[k+1]をスクランブルキーデータとする。
通信システム1000では、受信側のデスクランブル処理に使用されるスクランブルキーデータDkyを、上記の送信側のスクランブル処理に使用されるスクランブル用のキーデータDkyと同じにする。したがって、通信システム1000では、送信側でスクランブル化されたデータが、受信側でデスクランブルして、元のデータに戻すことができる。
さらに、通信システム1000では、スクランブルキーデータのバイトデータが、既にスクランブル化処理された送信データのバイトデータ(既にデスクランブルされた受信データのバイトデータ)を用いて、常に更新されるため、スクランブルキーデータの値が常に変化する。したがって、通信システム1000では、セキュリティ強度の高いスクランブル化処理を実現することができる。
また、通信システム1000では、上記のようにしてスクランブル化処理された送信データは、MPTCPにより、複数のTCPサブフローにより、分散して、送信側から受信側に送信されるため、通信経路の途中で、一部のデータが盗聴、傍受されたとしても、元のデータに戻すことができない。
さらに、通信システム1000では、MPTCPコネクションの確立処理時において、MP_CAPABLEオプションの所定のフラグを所定の値にセットしたSYNセグメント(例えば、フラグGを「1」に設定したMP_CAPABLEオプションを含むSYNセグメント)を生成し、当該SYNセグメントを送信側(第1通信装置H1)から受信側(第2通信装置H2)に送信する。これにより、通信システム1000では、スクランブル機能を用いたデータ転送を行うことを、送信側(第1通信装置H1)から受信側(第2通信装置H2)に通知する。
つまり、通信システム1000では、従来のMPTCPにより、スクランブル機能を用いたデータ転送を行うことを、送信側(第1通信装置H1)から受信側(第2通信装置H2)に通知することができる。したがって、通信システム1000では、転送するデータ量を増加させることなく、スクランブル機能を実現することができる。
以上の通り、通信システム1000では、複数のパスを用いた通信において、転送するデータ量を増加させることなく、かつ、セキュリティを確保することができる。
[他の実施形態]
上記実施形態では、スクランブル処理、デスクランブル処理において、1バイト単位で処理が実行される場合について、説明したが、これに限定されることはない。例えば、2バイト単位、Nバイト単位、あるいは、所定のビット数単位で、スクランブル処理、デスクランブル処理が実行するようにしてもよい。
また、上記実施形態では、通信システム1000において、2つのTCPサブフローにより、MPTCPを用いた通信を行う場合について説明したがこれに限定されることはなく、3以上のTCPサブフローにより、MPTCPを用いた通信を行うようにしてもよい。
また、通信システム1000において、送信側のキーと受信側のキーとを交換する通信処理(図7のステップS101〜S103の処理)を信頼度の高い(セキュリティ強度の高い)通信網(例えば、携帯電話通信網)を使って行い、スクランブル化されたデータの送受信をセキュリティ強度が低い通信網(例えば、無線LANの通信網)を使って行うようにしてもよい。
つまり、通信システム1000において、送信側のキーと受信側のキーとを交換する通信処理を行うTCPサブフローを信頼度の高い(セキュリティ強度の高い)通信網(例えば、携帯電話通信網)を用いて実現し、スクランブル化されたデータの送受信をセキュリティ強度が低い通信網(例えば、無線LAN(WiFi)の通信網)を用いて実現するようにしてもよい。
また、上記実施形態では、スクランブル化処理、デスクランブル化処理において、論理演算処理として、排他的論理和(XOR)を用いる場合について説明したが、これに限定されることはなく、例えば、スクランブル化処理、デスクランブル化処理において、論理演算処理として、排他的論理和の代わりに、「排他的論理和+NOT」(XOR+NOT)、あるいは、「NOT+排他的論理和」(NOT+XOR)による論理演算処理を行ってもよい。
また、上記実施形態で説明した通信システム1000、第1通信装置H1、第2通信装置H2において、各ブロックは、LSIなどの半導体装置により個別に1チップ化されても良いし、一部又は全部を含むように1チップ化されても良い。
なお、ここでは、LSIとしたが、集積度の違いにより、IC、システムLSI、スーパーLSI、ウルトラLSIと呼称されることもある。
また、集積回路化の手法はLSIに限るものではなく、専用回路又は汎用プロセサで実現してもよい。LSI製造後に、プログラムすることが可能なFPGA(Field Programmable Gate Array)や、LSI内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサーを利用しても良い。
また、上記各実施形態の各機能ブロックの処理の一部または全部は、プログラムにより実現されるものであってもよい。そして、上記各実施形態の各機能ブロックの処理の一部または全部は、コンピュータにおいて、中央演算装置(CPU)により行われる。また、それぞれの処理を行うためのプログラムは、ハードディスク、ROMなどの記憶装置に格納されており、ROMにおいて、あるいはRAMに読み出されて実行される。
また、上記実施形態の各処理をハードウェアにより実現してもよいし、ソフトウェア(OS(オペレーティングシステム)、ミドルウェア、あるいは、所定のライブラリとともに実現される場合を含む。)により実現してもよい。さらに、ソフトウェアおよびハードウェアの混在処理により実現しても良い。
例えば、上記実施形態の各機能部を、ソフトウェアにより実現する場合、図17に示したハードウェア構成(例えば、CPU、ROM、RAM、入力部、出力部等をバスBusにより接続したハードウェア構成)を用いて、各機能部をソフトウェア処理により実現するようにしてもよい。
また、上記実施形態における処理方法の実行順序は、必ずしも、上記実施形態の記載に制限されるものではなく、発明の要旨を逸脱しない範囲で、実行順序を入れ替えることができるものである。
前述した方法をコンピュータに実行させるコンピュータプログラム及びそのプログラムを記録したコンピュータ読み取り可能な記録媒体は、本発明の範囲に含まれる。ここで、コンピュータ読み取り可能な記録媒体としては、例えば、フレキシブルディスク、ハードディスク、CD−ROM、MO、DVD、DVD−ROM、DVD−RAM、大容量DVD、次世代DVD、半導体メモリを挙げることができる。
上記コンピュータプログラムは、上記記録媒体に記録されたものに限られず、電気通信回線、無線又は有線通信回線、インターネットを代表とするネットワーク等を経由して伝送されるものであってもよい。
なお、本発明の具体的な構成は、前述の実施形態に限られるものではなく、発明の要旨を逸脱しない範囲で種々の変更および修正が可能である。
1000 通信システム
H1 第1通信装置(データ送信装置)
H2 第2通信装置(データ受信装置)
1 第1データ通信モジュール
10 MPTCPコネクション確立処理部
11 送信データ取得部
12 スクランブル用キーデータ生成部
13 スクランブルデータ生成部
14 TCPサブフローデータ生成部(サブフローデータ生成部)
2 第2データ通信モジュール
20 MPTCPコネクション確立処理部
23 MPTCPデータ取得部
24 デスクランブルデータ取得部
25 スクランブル用キーデータ生成部
26 受信データ取得部

Claims (13)

  1. データ受信装置に対して、複数の通信経路を用いてデータを送信する機能を有するデータ送信装置であって、
    送信データを所定の単位長のデータに区分した単位長データのうちの最初の単位長データである単位長送信データをスクランブル化するためのスクランブル処理用キーデータを取得するスクランブル用キーデータ生成部であって、(1)1回目の処理では、自装置を識別するためのデータであるキーデータから導出された初期値データを所定の単位長のデータに区分した単位長データである単位長初期値データを用いて、所定の論理演算を行うことでスクランブル化処理のためのスクランブル処理用キーデータを取得し、(2)2回目以降の処理では、前記単位長初期値データ、および、スクランブル化が完了した単位長送信データの両方、または、スクランブル化が完了した単位長送信データのみを用いて、所定の論理演算を行うことで前記スクランブル処理用キーデータを取得する前記スクランブル用キーデータ生成部と、
    前記スクランブル用キーデータ生成部により取得された前記スクランブル処理用キーデータと、前記単位長送信データとを用いて、所定の論理演算を行うことで、スクランブル化した単位長データであるスクランブル化単位長送信データを取得するとともに、取得した前記スクランブル化単位長送信データを複数まとめることで、1つのスクランブル化送信データを生成するスクランブルデータ生成部と、
    前記スクランブルデータ生成部により生成された前記スクランブル化送信データから、複数の経路を用いて送信するためのサブフローデータを生成するサブフローデータ生成部と、
    を備えるデータ送信装置。
  2. 前記所定の論理演算は、排他的論理和演算である、
    請求項1に記載のデータ送信装置。
  3. 前記単位長データは、1バイトのデータである、
    請求項1又は2に記載のデータ送信装置。
  4. 前記初期値データは、
    自装置を識別するためのデータであるキーデータをキーデータkeyAとしたとき、
    MsgDig=SHA1(keyA)
    IDSN=Lower_8bytes(MsgDig)
    SHA1(x):xに対するSHA−1によるメッセージダイジェストを取得する関数
    Lower_8bytes(x):xの下位8バイトを取得する関数
    により取得されたIDSN値である、
    請求項1から3のいずれかに記載のデータ送信装置。
  5. MPTCPを用いた通信を実行する機能を有し、
    MPTCPコネクションの確立処理を実行するMPTCPコネクション確立処理部をさらに備え、
    前記MPTCPコネクション確立処理部は、
    MPTCPコネクションの確立処理時において、MP_CAPABLEオプションの所定のフラグを所定の値にセットしたSYNセグメントを生成し、当該SYNセグメントを前記データ受信装置に送信することで、スクランブル機能を用いたデータ転送を行うことを、前記データ受信装置に通知する、
    請求項1から4のいずれかに記載のデータ送信装置。
  6. データ送信装置が複数の通信経路を用いて送信したデータを受信する機能を有するデータ受信装置であって、
    前記データ送信装置から、複数の通信経路により、受信した複数のサブフローデータを、当該サブフローデータに含まれるデータシーケンス番号の順に並べる処理を実行することで、複数のサブフローデータを1つにまとめた受信データを取得するMPTCPデータ取得部と、
    MPTCPデータ取得部により取得された前記受信データを所定の単位長のデータに区分した単位長データのうちの最初の単位長データである単位長受信スクランブルデータをデスクランブル化するためのスクランブル処理用キーデータを取得するスクランブル用キーデータ生成部であって、(1)1回目の処理では、通信相手である前記データ送信装置を識別するためのデータであるキーデータから導出された初期値データを所定の単位長のデータに区分した単位長データである単位長初期値データを用いて、所定の論理演算を行うことでデスクランブル化処理のためのスクランブル処理用キーデータを取得し、(2)2回目以降の処理では、前記単位長初期値データ、および、デスクランブル化が完了した単位長受信データの両方、または、デスクランブル化が完了した単位長受信データのみを用いて、所定の論理演算を行うことで前記スクランブル処理用キーデータを取得する前記スクランブル用キーデータ生成部と、
    前記スクランブル用キーデータ生成部により取得された前記スクランブル処理用キーデータと、前記単位長受信スクランブルデータとを用いて、所定の論理演算を行うことで、デスクランブル化した単位長データである単位長受信データを取得するとともに、取得した前記単位長受信データを複数まとめることで、1つのデスクランブル化された受信データを取得する受信データ取得部と、
    を備えるデータ受信装置。
  7. 前記所定の論理演算は、排他的論理和演算である、
    請求項6に記載のデータ受信装置。
  8. 前記単位長データは、1バイトのデータである、
    請求項6又は7に記載のデータ受信装置。
  9. 前記初期値データは、
    通信相手である前記データ送信装置を識別するためのデータであるキーデータをキーデータkeyAとしたとき、
    MsgDig=SHA1(keyA)
    IDSN=Lower_8bytes(MsgDig)
    SHA1(x):xに対するSHA−1によるメッセージダイジェストを取得する関数
    Lower_8bytes(x):xの下位8バイトを取得する関数
    により取得されたIDSN値である、
    請求項6から8のいずれかに記載のデータ受信装置。
  10. MPTCPを用いた通信を実行する機能を有し、
    MPTCPコネクションの確立処理を実行するMPTCPコネクション確立処理部をさらに備え、
    前記MPTCPコネクション確立処理部は、
    MPTCPコネクションの確立処理時において、前記データ送信装置により、MP_CAPABLEオプションの所定のフラグを所定の値にセットしたSYNセグメント受信することで、前記データ送信装置がスクランブル機能を用いたデータ転送を行う機能を有していると判定する、
    請求項6から9のいずれかに記載のデータ受信装置。
  11. 請求項1から5のいずれかに記載のデータ送信装置と、
    請求項6から10のいずれかに記載のデータ受信装置と、
    を備える通信システム。
  12. データ送信装置からデータ受信装置に対して、複数の通信経路を用いてデータを送信するときに用いられるデータ送信方法であって、
    送信データを所定の単位長のデータに区分した単位長データのうちの最初の単位長データである単位長送信データをスクランブル化するためのスクランブル処理用キーデータを取得するスクランブル用キーデータ生成ステップであって、(1)1回目の処理では、前記データ送信装置を識別するためのデータであるキーデータから導出された初期値データを所定の単位長のデータに区分した単位長データである単位長初期値データを用いて、所定の論理演算を行うことでスクランブル化処理のためのスクランブル処理用キーデータを取得し、(2)2回目以降の処理では、前記単位長初期値データ、および、スクランブル化が完了した単位長送信データの両方、または、スクランブル化が完了した単位長送信データのみを用いて、所定の論理演算を行うことで前記スクランブル処理用キーデータを取得する前記スクランブル用キーデータ生成ステップと、
    前記スクランブル用キーデータ生成ステップにより取得された前記スクランブル処理用キーデータと、前記単位長送信データとを用いて、所定の論理演算を行うことで、スクランブル化した単位長データであるスクランブル化単位長送信データを取得するとともに、取得した前記スクランブル化単位長送信データを複数まとめることで、1つのスクランブル化送信データを生成するスクランブルデータ生成ステップと、
    前記スクランブルデータ生成ステップにより生成された前記スクランブル化送信データから、複数の経路を用いて送信するためのサブフローデータを生成するサブフローデータ生成ステップと、
    を備えるデータ送信方法をコンピュータに実行させるためのプログラム。
  13. データ受信装置において、データ送信装置から、複数の通信経路を用いて送信されたデータを受信するときに用いられるデータ受信方法であって、
    前記データ送信装置から、複数の通信経路により、受信した複数のサブフローデータを、当該サブフローデータに含まれるデータシーケンス番号の順に並べる処理を実行することで、複数のサブフローデータを1つにまとめた受信データを取得するMPTCPデータ取得ステップと、
    MPTCPデータ取得ステップにより取得された前記受信データを所定の単位長のデータに区分した単位長データのうちの最初の単位長データである単位長受信スクランブルデータをデスクランブル化するためのスクランブル処理用キーデータを取得するスクランブル用キーデータ生成ステップであって、(1)1回目の処理では、前記データ送信装置を識別するためのデータであるキーデータから導出された初期値データを所定の単位長のデータに区分した単位長データである単位長初期値データを用いて、所定の論理演算を行うことでデスクランブル化処理のためのスクランブル処理用キーデータを取得し、(2)2回目以降の処理では、前記単位長初期値データ、および、デスクランブル化が完了した単位長受信データの両方、または、デスクランブル化が完了した単位長受信データのみを用いて、所定の論理演算を行うことで前記スクランブル処理用キーデータを取得する前記スクランブル用キーデータ生成ステップと、
    前記スクランブル用キーデータ生成ステップにより取得された前記スクランブル処理用キーデータと、前記単位長受信スクランブルデータとを用いて、所定の論理演算を行うことで、デスクランブル化した単位長データである単位長受信データを取得するとともに、取得した前記単位長受信データを複数まとめることで、1つのデスクランブル化された受信データを取得する受信データ取得ステップと、
    を備えるデータ受信方法をコンピュータに実行させるためのプログラム。
JP2017033847A 2017-02-24 2017-02-24 データ送信装置、データ受信装置、通信システム、および、プログラム Active JP6908914B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2017033847A JP6908914B2 (ja) 2017-02-24 2017-02-24 データ送信装置、データ受信装置、通信システム、および、プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2017033847A JP6908914B2 (ja) 2017-02-24 2017-02-24 データ送信装置、データ受信装置、通信システム、および、プログラム

Publications (2)

Publication Number Publication Date
JP2018139386A true JP2018139386A (ja) 2018-09-06
JP6908914B2 JP6908914B2 (ja) 2021-07-28

Family

ID=63451096

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017033847A Active JP6908914B2 (ja) 2017-02-24 2017-02-24 データ送信装置、データ受信装置、通信システム、および、プログラム

Country Status (1)

Country Link
JP (1) JP6908914B2 (ja)

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0983511A (ja) * 1995-09-11 1997-03-28 Sanyo Electric Co Ltd スクランブル解除装置
JPH1022994A (ja) * 1996-07-04 1998-01-23 Hitachi Ltd 暗号化装置および復号化装置、暗号化方法および復号化方法、ならびにそれらを用いた通信システム
JP2000174745A (ja) * 1998-12-07 2000-06-23 Fujitsu Ltd 暗号化通信方法及び暗号化通信システム
JP2005252846A (ja) * 2004-03-05 2005-09-15 Nec Corp 秘匿通信方式
WO2008004524A1 (fr) * 2006-07-03 2008-01-10 Panasonic Corporation Dispositif de certification, dispositif de vérification, système de vérification, programme informatique et circuit intégré
JP2010529718A (ja) * 2007-05-22 2010-08-26 イルデト・ビー・ヴイ データセキュリティ
JP2015070616A (ja) * 2013-09-30 2015-04-13 トムソン ライセンシングThomson Licensing 接続方法及び中継モジュール

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0983511A (ja) * 1995-09-11 1997-03-28 Sanyo Electric Co Ltd スクランブル解除装置
JPH1022994A (ja) * 1996-07-04 1998-01-23 Hitachi Ltd 暗号化装置および復号化装置、暗号化方法および復号化方法、ならびにそれらを用いた通信システム
JP2000174745A (ja) * 1998-12-07 2000-06-23 Fujitsu Ltd 暗号化通信方法及び暗号化通信システム
JP2005252846A (ja) * 2004-03-05 2005-09-15 Nec Corp 秘匿通信方式
WO2008004524A1 (fr) * 2006-07-03 2008-01-10 Panasonic Corporation Dispositif de certification, dispositif de vérification, système de vérification, programme informatique et circuit intégré
JP2010529718A (ja) * 2007-05-22 2010-08-26 イルデト・ビー・ヴイ データセキュリティ
JP2015070616A (ja) * 2013-09-30 2015-04-13 トムソン ライセンシングThomson Licensing 接続方法及び中継モジュール

Also Published As

Publication number Publication date
JP6908914B2 (ja) 2021-07-28

Similar Documents

Publication Publication Date Title
US11777716B2 (en) Key exchange method and apparatus
KR101699915B1 (ko) 무선 네트워크에서 갈루아/카운터 모드 암호화
US8838972B2 (en) Exchange of key material
CN107104977B (zh) 一种基于sctp协议的区块链数据安全传输方法
CN104023013A (zh) 数据传输方法、服务端和客户端
CN105993146A (zh) 不访问私钥而使用公钥密码的安全会话能力
WO2012024906A1 (zh) 一种移动通信系统及其语音通话加密的方法
CN110169102A (zh) 隐私保护的方法及设备
CN106850191A (zh) 分布式存储系统通信协议的加密、解密方法及装置
WO2020170225A2 (en) System and method for securing data
CN118381608B (zh) 一种基于带外量子密钥的噪声协议实现方法及装置
CN113904766A (zh) 一种加密通信方法、装置、设备及介质
CN113872755A (zh) 一种密钥交换方法及装置
CN103188228B (zh) 一种实现端到端安全防护的方法、安全网关及系统
CN108966214A (zh) 无线网络的认证方法、无线网络安全通信方法及装置
JP6908914B2 (ja) データ送信装置、データ受信装置、通信システム、および、プログラム
CN110351308B (zh) 一种虚拟专用网络通信方法和虚拟专用网络设备
JP7231051B2 (ja) 端末、サーバ、方法及びプログラム
Kato et al. Protecting Eavesdropping over Multipath TCP Communication Based on Not-Every-Not-Any Protection
JP2004135134A (ja) 無線通信用アダプタ
Al-Hawawreh et al. Ultra light-weight encryption for securing d2d communication of esp8266 iot devices in wireless mesh networks
Kato et al. Proposal and Study on Implementation of Data Eavesdropping Protection Method over Multipath TCP Communication Using Data Scrambling and Path Dispersion
US20240214196A1 (en) Devices and methods for privacy-preserving routing in communication networks
CN108965262B (zh) 专网的mptcp鉴权方法和系统
CN112954679B (zh) 基于DH算法的LoRa终端安全接入方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20191206

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20201027

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20201124

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210122

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20210622

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210625

R150 Certificate of patent or registration of utility model

Ref document number: 6908914

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250