(57)【要約】【課題】ネットワーク設定やアプリケーションの設定を変更することなく、送信データの暗号化／非暗号化を切り替える。【解決手段】通信ドライバインタフェース部１０７は、送信データの送信に用いられる通信デバイスについてのアプリケーション１０９からの指定を受け、指定された通信デバイスが物理通信デバイスである場合に、送信データの暗号化を行わずに、通信処理部１０２が送信データを送信し、指定された通信デバイスが仮想通信デバイスである場合に、暗号化部１０５が送信データを暗号化し、通信処理部１０２が暗号化された送信データを送信する。このように物理通信デバイスと仮想通信デバイスとを切り替えることにより、送信データの暗号化／非暗号化を切り替えることができる。【選択図】図１
2009225108.tif 000002
【特許請求の範囲】
【請求項１】
送信データの送信に用いられる通信デバイスを指定するデバイス指定情報を入力し、入力したデバイス指定情報において指定されている通信デバイスが物理通信デバイス及び仮想通信デバイスのいずれであるかを判別し、前記デバイス指定情報において指定されている通信デバイスが仮想通信デバイスである場合に、当該仮想通信デバイスに対応付けられている物理通信デバイスを特定するデバイス判別部と、
前記デバイス判別部により前記デバイス指定情報において仮想通信デバイスが指定されていると判別された場合に、前記送信データを暗号化して暗号化送信データとする暗号化部と、
前記暗号化部による暗号化が行われていない場合に、前記デバイス指定情報において指定されている物理通信デバイスを用いて前記送信データを送信し、前記暗号化部による暗号化が行われている場合に、前記デバイス判別部により特定された物理通信デバイスを用いて前記暗号化送信データを送信する通信処理部とを有することを特徴とする通信装置。
【請求項２】
前記通信処理部は、
前記送信データに対する応答データを物理通信デバイスを用いて受信し、
前記通信装置は、更に、
前記応答データを解析して、前記応答データが暗号化されているか否かを判別する応答データ判別部と、
前記応答データ判別部により前記応答データが暗号化されていると判別された場合に、前記応答データを復号する復号部とを有し、
前記デバイス判別部は、
前記復号部による前記応答データの復号が行われていない場合に、前記通信処理部が前記応答データを受信した物理通信デバイスを通知する物理通信デバイス通知情報を生成し、前記復号部による前記応答データの復号が行われている場合に、前記通信処理部が前記応答データを受信した物理通信デバイスに対応付けられている仮想通信デバイスを特定し、特定した仮想通信デバイスを通知する仮想通信デバイス通知情報を生成することを特徴とする請求項１に記載の通信装置。
【請求項３】
前記デバイス判別部は、
アプリケーションプログラムにより指定された通信デバイスが示されるデバイス指定情報を入力することを特徴とする請求項１又は２に記載の通信装置。
【請求項４】
前記デバイス判別部は、
前記通信処理部が前記応答データを受信した物理通信デバイスをアプリケーションプログラムに通知する物理通信デバイス通知情報を生成し、
特定した仮想通信デバイスをアプリケーションプログラムに通知する仮想通信デバイス通知情報を生成することを特徴とする請求項２に記載の通信装置。
【請求項５】
前記通信処理部は、
フレーム開始コードの後に送信データが含まれる通信フレームを送信し、
前記通信装置は、更に、
前記送信データが前記暗号化部により暗号化された場合に、暗号化送信データが通信フレーム化される前に、前記暗号化送信データ中に前記フレーム開始コードと同じコードが含まれているか否かを解析し、前記フレーム開始コードと同じコードを前記暗号化送信データから抽出した際に、抽出したコードの直前又は直後の位置に前記フレーム開始コードのコピーを挿入する制御コード挿入部を有することを特徴とする請求項１〜４のいずれかに記載の通信装置。
【請求項６】
前記通信処理部は、
フレーム終了コードの前に送信データが含まれる通信フレームを送信し、
前記通信装置は、更に、
前記送信データが前記暗号化部により暗号化された場合に、暗号化送信データが通信フレーム化される前に、前記暗号化送信データ中に前記フレーム終了コードと同じコードが含まれているか否かを解析し、前記フレーム終了コードと同じコードを前記暗号化送信データから抽出した際に、抽出したコードの直前又は直後の位置に前記フレーム終了コードのコピーを挿入する制御コード挿入部を有することを特徴とする請求項１〜５のいずれかに記載の通信装置。
【請求項７】
前記通信処理部は、
フレーム開始コードの後に受信データが含まれる通信フレームを受信し、
前記通信装置は、更に、
前記通信処理部により受信されたデータの内容を解析し、前記フレーム開始コードと同じコードを抽出した際に、前記フレーム開始コードと同じコードが単独で出現しているか連続して複数回出現しているかを判別して、前記フレーム開始コードを検知する通信フレーム識別処理部とを有することを特徴とする請求項１〜６のいずれかに記載の通信装置。
【請求項８】
前記通信処理部は、
フレーム終了コードの前に受信データが含まれる通信フレームを送信し、
前記通信装置は、更に、
前記通信処理部により受信されたデータの内容を解析し、前記フレーム終了コードと同じコードを抽出した際に、前記フレーム終了コードと同じコードが単独で出現しているか連続して偶数回出現しているか連続して奇数回出現しているかを判別して、前記フレーム終了コードを検知する通信フレーム識別処理部とを有することを特徴とする請求項１〜７のいずれかに記載の通信装置。
【請求項９】
所定の処理を要求する要求データをクライアント装置から受信するとともに、前記要求データに対する応答データを前記クライアント装置に対して送信する通信処理部と、
前記要求データが暗号化されているか否かを判別する要求データ判別部と、
前記要求データ判別部により前記要求データが暗号化されていると判別された場合に、前記要求データを復号する復号部と、
前記要求データに要求番号を付与するとともに、前記要求番号に対して前記要求データが暗号化されていたか否かを表す暗号有無識別情報を設定し、前記要求データに対する応答データが生成された際に、前記応答データが対応する要求データに付与されている要求番号の通知を受け、通知を受けた要求番号に対する暗号有無識別情報に基づき前記応答データに対応する要求データが暗号化されていたか否かを判断する暗号有無判断部と、
前記暗号有無判断部により前記応答データに対応する要求データが暗号化されていたと判断された場合に、前記応答データを暗号化する暗号化部とを有することを特徴とするサーバ装置。
【請求項１０】
前記通信処理部は、
フレーム開始コードの後に要求データが含まれる通信フレームを受信し、
前記サーバ装置は、更に、
前記通信処理部により受信されたデータの内容を解析し、前記フレーム開始コードと同じコードを抽出した際に、前記フレーム開始コードと同じコードが単独で出現しているか連続して複数回出現しているかを判別して、前記フレーム開始コードを検知する通信フレーム識別処理部とを有することを特徴とする請求項９に記載のサーバ装置。
【請求項１１】
前記通信処理部は、
フレーム終了コードの前に要求データが含まれる通信フレームを受信し、
前記サーバ装置は、更に、
前記通信処理部により受信されたデータの内容を解析し、前記フレーム終了コードと同じコードを抽出した際に、前記フレーム終了コードと同じコードが単独で出現しているか連続して偶数回出現しているか連続して奇数回出現しているかを判別して、前記フレーム終了コードを検知する通信フレーム識別処理部とを有することを特徴とする請求項９又は１０に記載のサーバ装置。
【請求項１２】
前記通信処理部は、
フレーム開始コードの後に応答データが含まれる通信フレームを送信し、
前記サーバ装置は、更に、
前記応答データが前記暗号化部により暗号化された場合に、暗号化された暗号化応答データが通信フレーム化される前に、前記暗号化応答データ中に前記フレーム開始コードと同じコードが含まれているか否かを解析し、前記フレーム開始コードと同じコードを前記暗号化応答データから抽出した際に、抽出したコードの直前又は直後の位置に前記フレーム開始コードのコピーを挿入する制御コード挿入部を有することを特徴とする請求項９〜１１のいずれかに記載のサーバ装置。
【請求項１３】
前記通信処理部は、
フレーム終了コードの前に応答データが含まれる通信フレームを送信し、
前記サーバ装置は、更に、
前記応答データが前記暗号化部により暗号化された場合に、暗号化応答データが通信フレーム化される前に、前記暗号化応答データ中に前記フレーム終了コードと同じコードが含まれているか否かを解析し、前記フレーム終了コードと同じコードを前記暗号化応答データから抽出した際に、抽出したコードの直前又は直後の位置に前記フレーム終了コードのコピーを挿入する制御コード挿入部を有することを特徴とする請求項９〜１２のいずれかに記載のサーバ装置。
【請求項１４】
フレーム開始コードの後に送信データが含まれる通信フレームを送信する通信処理部と、
前記送信データが通信フレーム化される前に、前記送信データ中に前記フレーム開始コードと同じコードが含まれているか否かを解析し、前記フレーム開始コードと同じコードを前記送信データから抽出した際に、抽出したコードの直前又は直後の位置に前記フレーム開始コードのコピーを挿入する制御コード挿入部とを有することを特徴とする通信装置。
【請求項１５】
前記通信処理部は、
送信データの後にフレーム終了コードが含まれる通信フレームを送信し、
前記コード挿入部は、
前記送信データが通信フレーム化される前に、前記送信データ中に前記フレーム終了コードと同じコードが含まれているか否かを解析し、前記フレーム終了コードと同じコードを前記送信データから抽出した際に、抽出したコードの直前又は直後の位置に前記フレーム終了コードのコピーを挿入することを特徴とする請求項１４に記載の通信装置。
【請求項１６】
フレーム開始コードの後に受信データが含まれる通信フレームを受信する通信処理部と、
前記通信処理部により受信されたデータの内容を解析し、前記フレーム開始コードと同じコードを抽出した際に、前記フレーム開始コードと同じコードが単独で出現しているか連続して複数回出現しているかを判別して、前記フレーム開始コードを検知する通信フレーム識別処理部とを有することを特徴とする通信装置。
【請求項１７】
前記通信フレーム識別処理部は、
前記フレーム開始コードと同じコードが単独で出現している場合に、抽出した当該コードを前記フレーム開始コードと識別することを特徴とする請求項１６に記載の通信装置。
【請求項１８】
前記通信処理部は、
受信データの後にフレーム終了コードが含まれる通信フレームを受信し、
前記通信フレーム識別処理部は、
前記通信処理部により受信されたデータの内容を解析し、前記フレーム終了コードと同じコードを抽出した際に、前記フレーム終了コードと同じコードが単独で出現しているか連続して偶数回出現しているか連続して奇数回出現しているかを判別して、前記フレーム終了コードを検知することを特徴とする請求項１６又は１７に記載の通信装置。
【請求項１９】
前記通信フレーム識別処理部は、
前記フレーム終了コードと同じコードが単独で出現している場合に、抽出した当該コードを前記フレーム終了コードと識別し、
前記フレーム終了コードと同じコードが連続して奇数回出現している場合に、最後尾のコードを前記フレーム終了コードと識別することを特徴とする請求項１８に記載の通信装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号化通信技術に関し、特にデータを送信する際に暗号化／非暗号化を切り替える技術に関する。
【背景技術】
【０００２】
暗号化通信において、通信プロトコルにおける通信フレームの種別、コマンドの識別情報、接続先ＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）アドレスや、ポート番号などの情報と暗号化の有無を対応付けて設定し、これらの情報に基づいて送信時にデータを暗号化するか、平文で送信するかを決定する、暗号化／非暗号化の切り替え方法が示されている（例えば、特許文献１）。
【特許文献１】特開平１１−２０５３０９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
従来の暗号化／非暗号化切り替え方法は、プロトコルヘッダ部のパラメータやコマンドなど、通信回線上に伝送される通信パラメータの差異により、暗号化／非暗号化を切り替える方法を示している。
このような方法は、プロトコル毎、あるいは、アプリケーション毎に暗号化するものと平文で送受信するものを多重化する利用法を想定しており、平文で通信していた既存アプリケーションを暗号化通信に移行する場合には、送信側、および、受信側において、ネットワーク設定を変更する必要がある。
また、ポート番号による切り替えは、受信側のポート番号を変更する必要があり、さらに、シリアル通信のようなポートの概念がない通信には適用できない。
【０００４】
この発明は、以上のような課題を解決することを主な目的としており、送信側および受信側においてネットワーク設定やアプリケーションの設定を変更することなく、暗号化／非暗号化を切り替えることを主な目的とする。
また、シリアル通信のようなポートの概念がない通信においても、暗号化／非暗号化を切り替えることを主な目的とする。
【課題を解決するための手段】
【０００５】
本発明に係る通信装置は、
送信データの送信に用いられる通信デバイスを指定するデバイス指定情報を入力し、入力したデバイス指定情報において指定されている通信デバイスが物理通信デバイス及び仮想通信デバイスのいずれであるかを判別し、前記デバイス指定情報において指定されている通信デバイスが仮想通信デバイスである場合に、当該仮想通信デバイスに対応付けられている物理通信デバイスを特定するデバイス判別部と、
前記デバイス判別部により前記デバイス指定情報において仮想通信デバイスが指定されていると判別された場合に、前記送信データを暗号化して暗号化送信データとする暗号化部と、
前記暗号化部による暗号化が行われていない場合に、前記デバイス指定情報において指定されている物理通信デバイスを用いて前記送信データを送信し、前記暗号化部による暗号化が行われている場合に、前記デバイス判別部により特定された物理通信デバイスを用いて前記暗号化送信データを送信する通信処理部とを有することを特徴とする。
【発明の効果】
【０００６】
本発明によれば、デバイス指定情報に物理通信デバイスが指定されている場合は暗号化を行わずに送信データを送信し、デバイス指定情報に仮想通信デバイスが指定されている場合は暗号化を行って暗号化通信データを送信することとしたので、通信デバイスの指定を変更することで、暗号化／非暗号化を切り替えることができる。このため、ネットワーク設定やアプリケーションの設定を変更することなく、暗号化／非暗号化を切り替えることができ、また、シリアル通信のようなポートの概念がない通信においても、暗号化／非暗号化を切り替えることができる。
【発明を実施するための最良の形態】
【０００７】
実施の形態１．
本実施の形態では、クライアント側で、アプリケーションが指定するデバイス名を変更することにより、暗号化／非暗号化を切り替える例について説明する。
【０００８】
図１は、本実施の形態に係るクライアント装置１００（以下、単にクライアントともいう）の構成例を示す。
クライアント装置１００は通信装置の例である。
【０００９】
図１において、通信処理部１０２は、通信を行うための回線インタフェースを含む物理通信デバイスを管理する手段である。
通信フレーム識別処理部１０３は、アプリケーションプロトコルレベルでの通信フレーム種別を識別する手段である。
暗号化プロトコル処理部１０４は、暗号化通信のプロトコルを処理する手段である。
暗号化部１０５は、送信データを暗号化する手段である。
復号部１０６は、受信した暗号化データを復号する手段である。
通信ドライバインタフェース部１０７は、アプリケーションが通信を行うために使用するシステムコールなどのインタフェースである。
アプリケーションプロトコル処理部１０８は、アプリケーションプロトコルの処理を行うライブラリなどのプログラムである。
アプリケーション１０９は、アプリケーションプログラムである。
【００１０】
本実施の形態では、データの送信時に、通信ドライバインタフェース部１０７が、送信データの送信に用いられる通信デバイスを指定するデバイス指定情報を入力する。デバイス指定情報には、アプリケーション１０９により指定された通信デバイスが示される。
そして、通信ドライバインタフェース部１０７は、入力したデバイス指定情報において指定されている通信デバイスが物理通信デバイス及び仮想通信デバイスのいずれであるかを判別し、デバイス指定情報において指定されている通信デバイスが仮想通信デバイスである場合に、当該仮想通信デバイスに対応付けられている物理通信デバイスを特定する。
通信ドライバインタフェース部１０７は、デバイス判別部の例である。
物理通信デバイスとは、クライアント装置１００に実際に搭載されている通信デバイスであり、仮想通信デバイスとは、クライアント装置１００に実際には搭載されていない暗号化通信を指定するための仮想的な通信デバイスである。
以下、物理通信デバイスを物理デバイス、物理通信手段ともいい、また、仮想通信デバイスを仮想デバイス、仮想通信手段ともいう。
【００１１】
また、暗号化部１０５は、通信ドライバインタフェース部１０７によりデバイス指定情報において仮想通信デバイスが指定されていると判別された場合に、送信データを暗号化して暗号化送信データとする。
【００１２】
通信処理部１０２は、暗号化部１０５による暗号化が行われていない場合に、デバイス指定情報において指定されている物理通信デバイスを用いて送信データを送信し、暗号化部１０５による暗号化が行われている場合に、通信ドライバインタフェース部１０７により特定された物理通信デバイスを用いて暗号化送信データを送信する。
【００１３】
また、データの受信時に、通信処理部１０２は、送信データに対するサーバ装置からの応答データを物理通信デバイスを用いて受信し、通信フレーム識別処理部１０３が、応答データを解析して、応答データが暗号化されているか否かを判別する。通信フレーム識別処理部１０３は、応答データ判別部の例である。
また、復号部１０６は、通信フレーム識別処理部１０３により応答データが暗号化されていると判別された場合に、応答データを復号する。
【００１４】
また、通信ドライバインタフェース部１０７は、復号部１０６による応答データの復号が行われていない場合に、通信処理部１０２が応答データを受信した物理通信デバイスを通知する情報（物理通信デバイス通知情報）を生成し、復号部１０６による応答データの復号が行われている場合に、通信処理部１０２が応答データを受信した物理通信デバイスに対応付けられている仮想通信デバイスを特定し、特定した仮想通信デバイスをアプリケーション１０９に通知する情報（仮想通信デバイス通知情報）を生成する。
【００１５】
図２は、本実施の形態に係るサーバ装置２００（以下、単にサーバともいう）の構成例を示す。
サーバ装置２００の構成もクライアント装置１００と同じであるが、各部の動作内容の一部がクライアント装置１００と異なるため、相違点を中心に説明する。
【００１６】
通信処理部２０２は、クライアント装置１００から送信された要求データを受信する。
通信フレーム識別処理部２０３は、要求データが暗号化されているか否かを判別する。
通信フレーム識別処理部２０３は、要求データ判別部の例である。
復号部２０６は、通信フレーム識別処理部２０３により要求データが暗号化されていると判別された場合に、要求データを復号する。
【００１７】
通信ドライバインタフェース部２０７は、要求データに要求番号を付与するとともに、要求番号に対して要求データが暗号化されていたか否かを表す暗号有無識別情報を設定し、要求データに対する応答データが生成された際に、応答データが対応する要求データに付与されている要求番号の通知を受け、通知を受けた要求番号に対する暗号有無識別情報に基づき応答データに対応する要求データが暗号化されていたか否かを判断する。
通信ドライバインタフェース部２０７は、暗号有無判断部の例である。
暗号化部２０５は、通信ドライバインタフェース部２０７により応答データに対応する要求データが暗号化されていたと判断された場合に、応答データを暗号化する。
そして、通信処理部２０２は、応答データをクライアント装置１００に対して送信する。
【００１８】
次に、クライアント装置１００及びサーバ装置２００の動作について説明する。
【００１９】
最初に、クライアント側における送信動作について説明する。
まず、クライアント１００において、アプリケーション１０９は要求を発行する。
アプリケーション１０９が発行した要求は、アプリケーションプロトコル処理部１０８にわたり、アプリケーションプロトコルヘッダが付加される。
次に、アプリケーションプロトコルヘッダを付加された要求は、通信ドライバインタフェース部１０７に渡される。
通信ドライバインタフェース部１０７では、送信データに対応するデバイス名（デバイス指定情報）によって、暗号化を行うか、行わないかを識別する。
【００２０】
この暗号化／非暗号化の区別について詳しく説明する。
アプリケーションプロトコル処理部１０８から、通信ドライバインタフェース部１０７をアクセスするインタフェースは例えば、ｏｐｅｎ、ｃｌｏｓｅ、ｒｅａｄ、ｗｒｉｔｅ、ｃｏｎｔｒｏｌ等のシステムコールで実現される。
通信デバイス名は、通信手段ごとにシステム内でユニークに命名される。
例えば、シリアルポートの場合、Ｗｉｎｄｏｗｓ（登録商標）では“ＣＯＭ１”、ＵＮＩＸ（登録商標）では“／ｄｅｖ／ｔｔｙ０”などのように命名される。
これらのデバイス名は、通常、物理的な通信手段に対応づけられるが、本実施の形態では、これらに加え、アプリケーション１０９から暗号化通信を利用するための仮想的な通信デバイス名を定義し、物理的な通信デバイス名と対応付ける。
例えば、アプリケーション１０９が仮想通信デバイス“ＣＯＭ３”に対しｗｒｉｔｅを発行するとデータ暗号化後に物理通信デバイス“ＣＯＭ１”に対する書込みが行われる。
ｒｅａｄやｗｒｉｔｅとデバイス名の対応付けについては、ｏｐｅｎ時にデバイス名を指定して、ｒｅａｄ、ｗｒｉｔｅ、ｃｏｎｔｒｏｌ、ｃｌｏｓｅ発行時に指定する識別子を別途取得するようにしても良いし、ｒｅａｄやｗｒｉｔｅ発行時に直接指定するようにしても良い。
【００２１】
ここで、クライアント側の送信動作の説明に戻る。
通信ドライバインタフェース部１０７は、アプリケーションプロトコル処理部１０８から送信データを受け取ると、対応するデバイス名（デバイス指定情報）を確認し、物理的な通信デバイスと対応付けられているデバイス名であれば、送信データを通信処理部１０２に渡し、通信処理部１０２から当該物理通信デバイスを用いて通信回線へ送信する。
【００２２】
一方、通信ドライバインタフェース部１０７において、アプリケーションプロトコル処理部１０８から受け取った送信データが、暗号化通信を利用するための仮想的なデバイス名に対応付けられたデータである場合（仮想通信デバイスが示されるデバイス指定情報の場合）は、通信ドライバインタフェース部１０７は、暗号化プロトコル処理部１０４に送信データを渡す。
さらに、暗号化プロトコル処理部１０４は、送信データを暗号化部１０５に渡す。
暗号化部１０５は、受け取った送信データを暗号化すると、暗号化プロトコル処理部１０４に返す。
暗号化プロトコル処理部１０４は、暗号化された送信データに暗号化フレーム用ヘッダ、およびトレーラを付与し、物理デバイス名への書込みデータとして、送信データを通信ドライバインタフェース部１０７に渡す。
通信ドライバインタフェース部１０７は、仮想通信デバイスに対応する物理通信デバイスを特定し、暗号化プロトコル処理部１０４から受け取ったデータを、特定した物理通信デバイスへの書込みデータとして、通信処理部１０２へ渡し、通信処理部１０２から当該物理通信デバイスを用いて通信回線へとデータを送信する。
【００２３】
図３に要求フレームのフレーム構造例、図４に応答フレームの構造例を示す。
ここで、暗号化フレーム用に専用のフレーム種別の値を用意する。
データ部に暗号化データを含むフレームは、フレーム種別に暗号化フレームを示す値を格納する。本実施の形態において、暗号化フレームを作成する場合、既存のアプリケーションプロトコルのフレームを丸ごと暗号化し、この暗号化したデータをデータ部として、新たなヘッダ、トレーラを付与する。このとき、付与されるヘッダに含まれるフレーム種別に、暗号化フレームを示す値が格納される。
【００２４】
図５にクライアント側送信処理のフローチャートを示す。
次に、図５に従って処理の流れを説明する。
【００２５】
アプリケーション１０９からの送信要求があると、まず、通信ドライバインタフェース部１０７が、送信要求に含まれるデバイス指定情報により、送信要求に対応するデバイス名を判別する（Ｓ１）（Ｓ２）。
デバイス指定情報におけるデバイス名が暗号化通信用仮想通信デバイスであった場合、まず、暗号化部１０５が送信データを暗号化する（Ｓ３）。
次に、暗号化プロトコル処理部１０４が、暗号化したデータをデータ部として、アプリケーションプロトコルヘッダ／トレーラを付与し、フレーム種別のフィールドに、暗号化フレームを示す値を格納する（Ｓ４）。
次に、通信ドライバインタフェース部１０７が、Ｓ３、Ｓ４で作成した暗号化フレームを送信フレームデータとして、物理通信デバイス名で送信処理を呼び出す（Ｓ５）。
【００２６】
次に、暗号化を行わない場合の処理の流れを説明する。
図４のＳ２において、デバイス指定情報におけるデバイス名が暗号化通信用仮想通信デバイスではなかった場合、すなわち、デバイス指定情報に示される通信デバイスが物理通信デバイスであった場合、該当する物理通信デバイス経由でフレームデータを送信する（Ｓ６）。
【００２７】
図４のＳ５において、送信処理が呼び出された後は、暗号化を行わない場合と同様に、呼び出された送信処理内で、Ｓ１、Ｓ２、Ｓ６の順に処理が行われ、通信処理部１０２により暗号化フレームが物理デバイス経由で通信回線に送信される。
【００２８】
次に、図７を参照して、サーバ側の受信処理について説明する。
【００２９】
図２において、サーバ側が通信回線から要求データを受信すると、通信処理部２０２を経由し、通信フレーム識別処理部２０３へ要求データが渡される。
通信フレーム識別処理部２０３においては、通信フレームの開始位置、終了位置を検出するとともに、フレーム種別を判定する。
フレーム種別が暗号化フレーム以外の場合、当該フレームは、平文フレームとして通信ドライバインタフェース部２０７から、アプリケーションプロトコル処理部２０８、アプリケーション２０９へと順に処理される。
通信フレーム識別処理部２０３においてフレーム種別を判定したとき、フレーム種別が暗号化フレームであった場合は、当該フレームは、暗号化プロトコル処理部２０４に渡される。
【００３０】
暗号化プロトコル処理部２０４では、暗号化フレームからデータ部を取り出し、復号部２０６に渡す。
復号部２０６では、暗号化プロトコル処理部２０４から渡されたデータを復号し、暗号化プロトコル処理部２０４に返す。
暗号化プロトコル処理部２０４では、復号されたデータをフレームデータとして通信ドライバインタフェース部２０７に渡す。
ここで、復号されたデータは、例えば、図２に示されるような平文の要求フレームの形式を取っている。
ここまでで、サーバ側において、非暗号化フレームを受信した場合、及び、暗号化フレームを受信した場合のいずれにおいても、通信ドライバインタフェース部２０７に渡される段階では、クライアント側におけるアプリケーションプロトコル処理部１０８から通信ドライバインタフェース部１０７に渡された時点と同じ、平文の要求フレームの形式となっている。
【００３１】
サーバ側で、通信ドライバインタフェース部１０７が要求フレームデータを受け取ると、通信ドライバインタフェース部２０７は、要求番号を生成し、要求フレームデータに付与するとともに、暗号化、非暗号化を区別する情報（暗号有無識別情報）と対応付けて保存する。
ここで、要求番号の生成方法は任意であるが、たとえば、通信ドライバインタフェース部２０７が受信した順に連続番号を振っても良い。
また、通信ドライバインタフェース部２０７で、暗号化、非暗号化の区別をする方法は、例えば、暗号化プロトコル処理部２０４から受け取った要求フレームを暗号化とみなし、通信フレーム識別処理部２０３から受け取った要求フレームを非暗号化とみなす方法が考えられる。
あるいは、通信フレーム識別処理部２０３、または、暗号化プロトコル処理部２０４から、通信ドライバインタフェース部２０７に要求フレームを渡す際に、暗号化／非暗号化の区別を示すデータを付与するようにしても良い。
【００３２】
図６に通信ドライバインタフェース部２０７で保存される要求番号と暗号化／非暗号化の区別の対応付けデータの例を示す。
図６においては、要求番号と対応付けられる、暗号化／非暗号化を示すデータは論理型で記述しているが、２者を区別できる数値であれば、どのような組合せであっても良い。
【００３３】
このように、通信ドライバインタフェース部１０７で要求番号を付与された要求フレームデータは、アプリケーションプロトコル処理部２０８に渡される。
アプリケーションプロトコル処理部２０８では、受け取った要求フレームに対して、アプリケーションプロトコルの処理を行うと、アプリケーション２０９に要求データを渡す。
このときのデータ受け渡しの形式は任意であるが、要求データと要求番号は対応付けられた形で渡される。
【００３４】
次に、図７にサーバ側受信処理のフローチャートを示す。
図７に従って、サーバ側受信処理の処理手順について説明する。
【００３５】
まず、サーバが通信回線からデータを受信し（Ｓ１１）、通信フレーム識別処理部２０３がフレームの検出を行う（Ｓ１２）。
次に、サーバ２００では、通信ドライバインタフェース部２０７が、受信したフレームに要求番号を付与する（Ｓ１３）。
要求番号の生成方法は任意であるが、受信した順に連続番号を振っても良い。
フレームの検出が行われると、通信フレーム識別処理部２０３が、そのフレーム内に格納されているフレーム種別を取り出し、暗号化フレームであるかどうかを判定する（Ｓ１４）。
受信フレームが暗号化フレームの場合は、通信ドライバインタフェース部２０７が、要求番号に対応付けて暗号化を示す情報を保存する（Ｓ１５）。
Ｓ１４で受信したフレームが暗号化フレームではなかった場合、通信ドライバインタフェース部２０７が、非暗号化を示す情報を要求番号に対応付けて保存する（Ｓ１８）。
Ｓ１５、およびＳ１８において保存する、暗号化、非暗号化の情報は、例えば、図６の表のような情報として保存される。
【００３６】
Ｓ１４において、受信したフレームが暗号化フレームであった場合は、Ｓ１５の暗号化の情報の保存に続いて、暗号化プロトコル処理部２０４が、受信したフレームからヘッダ、トレーラを取り外してデータ部を取り出し（Ｓ１６）、復号部１０６が復号を行う（Ｓ１７）。
【００３７】
次に、サーバ２００では、平文として受信した要求フレーム、または、Ｓ１６、およびＳ１７の処理により暗号化フレームから取り出し、復号した、要求フレームに対して、アプリケーションプロトコル処理部２０８が、アプリケーションプロトコル処理を行う（Ｓ１９）。
次に、アプリケーションプロトコル処理部２０８が、要求フレームから取り出した要求データをアプリケーション２０９に渡す（Ｓ２０）。
このとき、アプリケーション２０９に要求データを受け渡す方法は任意であるが、必ず、要求データとＳ１３で付与した要求番号の対応付けが行われるようにする。
【００３８】
次に、サーバ側の応答送信処理について説明する。
図２において、アプリケーション２０９が、受信した要求を処理すると、応答データを生成する。
応答データは、処理した要求に対応付けられていた要求番号と対応付ける。
応答データは、要求番号と対応付けられた状態で、アプリケーションプロトコル処理部２０８に渡される。
アプリケーションプロトコル処理部２０８は、応答データにアプリケーションプロトコルヘッダ、トレーラを付与するなど、アプリケーションプロトコルの処理を行い、応答フレームを生成する。
次に、アプリケーションプロトコル処理部２０８から、通信ドライバインタフェース部２０７に生成された応答フレームが渡される。
このとき、応答フレームには、応答データに対応付けられていた要求番号を対応付ける。
通信ドライバインタフェース部２０７では、応答フレームに対応付けられた要求番号から、暗号化／非暗号化の判定を行う。
【００３９】
すなわち、要求時に暗号化フレームとして受信した要求フレームに対応する応答フレームには暗号化を行い、要求時に、平文フレームとして受信した要求フレームに対応する応答フレームには、暗号化は行わない。
暗号化／非暗号化の判定は、要求受信時に保存した、例えば図６の表の様な、要求番号と、暗号化／非暗号化の対応情報により判定する。
図６の例の場合、要求番号：３３５２に対応付けられた応答フレームは暗号化し、要求番号：３３５３に対応付けられた応答フレームは暗号化を行わず、要求番号：３３５４に対応付けられた応答フレームは暗号化を行う。
【００４０】
通信ドライバインタフェース部２０７で、暗号化／非暗号化の判定が行われ、暗号化を行う場合は、応答フレームは、暗号化プロトコル処理部２０４に渡される。
暗号化プロトコル処理部２０４では、応答フレームを暗号化部２０５に渡す。
暗号化部２０５は、渡された応答フレームを暗号化し、暗号化プロトコル処理部２０４に返す。
暗号化プロトコル処理部２０４は、応答フレームが暗号化されたものをデータとし、新たなアプリケーションプロトコルヘッダ、トレーラを付与して、暗号化フレームを生成する。
このとき、暗号化フレーム内のフレーム種別のフィールドには、暗号化フレームを示す値を格納する。
【００４１】
暗号化プロトコル処理部２０４で暗号化フレームが生成されると、生成された暗号化フレームは通信処理部２０２へ渡す。
通信処理部２０２は受け取った暗号化フレームを通信回線に送信する。
通信ドライバインタフェース部２０７で、暗号化／非暗号化判定の際に、暗号化しないと判定された場合は、通信ドライバインタフェース部２０７は、応答フレームをそのまま、通信処理部２０２へ渡す。通信処理部２０２は、通信ドライバインタフェース部２０７から受け取った応答フレームをそのまま通信回線に送信する。
【００４２】
図８に、サーバ側の応答送信処理のフローチャートを示す。
図８に従って、サーバ側の応答送信処理手順について説明する。
【００４３】
まず、アプリケーション２０９で要求が処理されると、応答データを生成する（Ｓ２１）。
このとき、応答データは、対応する要求データに付与されていた要求番号と対応付ける。
次に、アプリケーションプロトコル処理部２０８が、生成された応答データに対しアプリケーションプロトコル処理を行い、アプリケーションプロトコルヘッダ／トレーラを付与して、応答フレームを生成する（Ｓ２２）。
次に、通信ドライバインタフェース部２０７が、生成された応答フレームに対応付けられた要求番号により暗号化／非暗号化の情報を取得する（Ｓ２３）。
暗号化／非暗号化の情報は、サーバにおいて要求受信時に保存した、例えば、図６に示す表のような対応付け情報（暗号有無識別情報）から取得する。
次に、通信ドライバインタフェース部２０７は、取得した暗号化／非暗号化の情報により暗号化を行うか、暗号化を行わないかを判定する（Ｓ２４）。
暗号化を行う場合は、まず、暗号化部２０５が、要求フレームを暗号化する（Ｓ２５）。
次に、暗号化プロトコル処理部２０４が、要求フレームを暗号化したものをデータとして、新たなアプリケーションプロトコルヘッダ／トレーラを付与する（Ｓ２６）。このとき、新たに付与するヘッダに含まれるフレーム種別には、暗号化フレームを示す値を格納する。
次に、Ｓ２５、Ｓ２６において、暗号化を行い、新たなヘッダトレーラを付与して生成した暗号化フレームを通信処理部２０２が通信回線に送信する（Ｓ２７）。
Ｓ２４において、暗号化を行わないと判定された場合は、Ｓ２５、Ｓ２６の処理を行わず、通信処理部２０２が応答フレームをそのまま通信回線に送信する（Ｓ２７）。
【００４４】
次に、クライアント側の応答受信処理について示す。
図１において、クライアント１００が通信回線からデータを受信すると、通信処理部１０２を経由し、通信フレーム識別処理部１０３へ受信データが渡される。
通信フレーム識別処理部１０３においては、通信フレームの開始位置、終了位置を検出するとともに、フレーム種別を判定する。
フレーム種別が暗号化フレーム以外の場合、当該フレームは、平文フレームとして通信ドライバインタフェース部１０７から、アプリケーションプロトコル処理部１０８、アプリケーション１０９へと順に処理される。このとき、通信ドライバインタフェース部１０７からアプリケーションプロトコル処理部１０８へは、物理通信デバイス名に対応するインタフェースで通知される。
例えば、物理通信デバイス名でｏｐｅｎし、取得したディスクリプタを指定したｒｅａｄ処理のデータとして通知される。
【００４５】
通信フレーム識別処理部１０３においてフレーム種別を判定したとき、フレーム種別が暗号化フレームであった場合は、当該フレームは、暗号化プロトコル処理部１０４に渡される。
暗号化プロトコル処理部１０４では、暗号化フレームからデータ部を取り出し、復号部１０６に渡す。
復号部１０６では、暗号化プロトコル処理部１０４から渡されたデータを復号し、暗号化プロトコル処理部１０４に返す。
暗号化プロトコル処理部１０４では、復号されたデータをフレームデータとして通信ドライバインタフェース部１０７に渡す。ここで、復号されたデータは、例えば、図４に示されるような平文の応答フレームの形式を取っている。
復号され、通信ドライバインタフェース部１０７に渡された応答フレームは、応答フレームが受信された物理通信デバイスに対応する暗号化通信用に用意された仮想通信デバイス名に対応するインタフェースで、アプリケーションプロトコル処理部１０８に渡される。例えば、仮想デバイス名でｏｐｅｎし取得したディスクリプタを指定したｒｅａｄ処理のデータとして渡される。
アプリケーションプロトコル処理部１０８は、応答フレームを受けると、アプリケーションプロトコル処理を行い、データ部を取り出して、応答データとしてアプリケーション１０９に渡し、アプリケーション１０９は応答データを処理する。
【００４６】
図９に、クライアント側の応答受信処理のフローチャートを示す。
図９に従って、クライアント側の応答受信処理手順について説明する。
【００４７】
クライアント１００では、通信処理部１０２が物理通信デバイスを介して通信回線からデータを受信し（Ｓ３１）、通信フレーム識別処理部１０３がフレームの検出を行う（Ｓ３２）。
フレームの検出が行われると、通信フレーム識別処理部１０３は、そのフレーム内に格納されているフレーム種別を取り出し、暗号化フレームであるかどうかを判定する（Ｓ３３）。
暗号化フレームの場合、データ部を取り出し（Ｓ３４）、復号部１０６が復号する（Ｓ３５）。ここで復号したデータは、応答フレームの形式をとっている。
次に、復号して得た応答フレームを、通信ドライバインタフェース部２０７が、応答フレームが受信された物理デバイスに対応する暗号化通信用に用意された仮想デバイス名のインタフェースに対応する受信フレームとしてアプリケーションプロトコル処理部１０８に通知する（Ｓ３７）。
Ｓ３３で受信したフレームが、暗号化フレームではなかった場合、受信した応答フレームを、物理デバイス名のインタフェースに対応する受信フレームとしてアプリケーションプロトコル処理部１０８に通知する（Ｓ３６）。
次に、受信通知を受けたアプリケーションプロトコル処理部１０８は、アプリケーションプロトコル処理を行い、応答データを取り出す（Ｓ３８）。
次に、アプリケーションプロトコル処理部１０８は、取り出した応答データをアプリケーション１０９に渡す（Ｓ３９）。
【００４８】
以上のように、物理的な通信回線での通信処理を行うためのデバイス名に対応し、暗号化、復号処理を追加する、仮想デバイス名を用意し、アプリケーションが指定するデバイス名によって処理を変えているため、アプリケーションを変更せず、デバイス名を変更するだけで、暗号化通信と平文通信を切り替えて使用することができる。
また、サーバにおいては、通信ドライバで要求フレームと応答フレームを対応付け、暗号化フレームで受信した要求に対する応答フレームは暗号化して、暗号化フレームにして送信し、平文で受信した要求に対する応答は平文で送信するようにしているため、アプリケーションが暗号化／非暗号化を意識する必要が無く、かつ、暗号化／非暗号化の設定を行うことも無く、暗号化通信と非暗号化通信を自動的に切り替えて使用することができる。
【００４９】
以上、本実施の形態では、以下の手段を備える暗号化通信クライアント装置について説明した。
（ａ）アプリケーションが、暗号化用仮想デバイス名と対応付け、通信ドライバインタフェース部にフレーム送信要求を行う手段、
（ｂ）暗号化用仮想デバイス名と対応付けられた送信フレームを暗号化し送信する手段、
（ｃ）フレーム種別により、受信フレームが暗号化フレームか平文フレームかを識別する手段、
（ｄ）暗号化フレームを復号する手段、
（ｅ）暗号化フレームで受信し、復号したデータを暗号化用仮想デバイス名と対応付け、アプリケーションに通知する手段。
【００５０】
また、本実施の形態では、以下の手段を備える暗号化通信サーバ装置について説明した。
（ａ）フレーム種別により、受信フレームが暗号化フレームか平文フレームかを識別する手段、
（ｂ）暗号化フレームを復号する手段、
（ｃ）受信した要求に要求番号を付与する手段、
（ｄ）通信ドライバインタフェース部が要求番号と暗号化フレームで受信した要求か、平文フレームで受信した要求かを対応付け、保存する手段、
（ｅ）通信ドライバインタフェース部が、要求データと要求番号を対応付け、アプリケーションに通知する手段、
（ｆ）通信ドライバインタフェース部が、要求番号と対応付けた応答データをアプリケーションから取得する手段、
（ｇ）通信ドライバインタフェース部が、応答送信時に、対応付けられた要求番号により、暗号化または非暗号化を判定する手段、
（ｈ）送信フレームを暗号化する手段。
【００５１】
実施の形態２．
以上の実施の形態１では、通信回線上を送受信するフレームの検出方法については任意であったが、次に、ＲＳ−２３２−Ｃなどのシリアル通信において、フレームの先頭、および、末尾を特定のコードで検出する場合に、暗号化データとの区別を行う場合の実施の形態を示す。
【００５２】
シリアル通信では、７ビットまたは８ビットの文字単位で受信データを検出し、しばしば、伝文のまとまりを、ＳＴＸ、ＥＴＸなどに割り当てられている、特殊な文字コードを、先頭、あるいは、末尾に付加して送信することにより示すことがある。
受信側は、これらのフレーム開始コード又はフレーム終了コードを検出することで、１つの伝文の先頭、および終了を検出することが出来る。
平文でシリアル通信を行う場合は、データに英数字などの文字コードを使用することによって、伝文の先頭、および、末尾以外には、ＳＴＸやＥＴＸなどのコードが出現しないようにすることが出来る。しかし、データの暗号化を行った場合、暗号化されたデータの１バイトずつを取った場合、基本的に、００ｈからＦＦｈの全ての値を取り得るため、暗号化データ中にＳＴＸやＥＴＸなどのコードの値と同じ値が出現することがある。
この実施の形態では、このような場合に、フレームの先頭を示すフレーム開始コード、および末尾を表すフレーム終了コードと、暗号化データ中にある確率で出現する、これらのコードと同じ値のデータを区別するための方法、および、その方法を実現するための具体的手段について示す。
【００５３】
図１０は、この実施の形態における暗号化通信装置を示す構成図である。
図１０では、クライアント装置１００の構成例として示しているが、サーバ装置２００でも同様の構成にて本実施の形態が実現可能である。
【００５４】
図１０において、１０１から１０９は、図１と同様である。
制御コード挿入部１１０は、制御コードの挿入処理を行う手段である。
より具体的には、通信フレームの送信の際に、制御コード挿入部１１０は、送信データが暗号化部１０５により暗号化された場合に、暗号化された暗号化送信データが通信フレーム化される前に、暗号化送信データ中にフレーム開始コード（ＳＴＸ）と同じコードが含まれているか否かを解析し、フレーム開始コード（ＳＴＸ）と同じコードを暗号化送信データから抽出した際に、抽出したコードの直前又は直後の位置にフレーム開始コード（ＳＴＸ）のコピーを挿入する。
また、同様に、制御コード挿入部１１０は、暗号化送信データ中にフレーム終了コード（ＥＴＸ）と同じコードが含まれているか否かを解析し、フレーム終了コード（ＥＴＸ）と同じコードを暗号化送信データから抽出した際に、抽出したコードの直前又は直後の位置にフレーム終了コード（ＥＴＸ）のコピーを挿入する。
【００５５】
また、本実施の形態では、通信フレーム識別処理部１０３は、フレームを受信した場合に、フレーム開始コード（ＳＴＸ）及びフレーム終了コード（ＥＴＸ）を抽出する処理を行う。
より具体的には、通信処理部１０２により受信された通信フレームに含まれるデータの内容を解析し、フレーム開始コード（ＳＴＸ）と同じコードを抽出した際に、フレーム開始コード（ＳＴＸ）と同じコードが単独で出現しているか連続して複数回出現しているかを判別して、フレーム開始コード（ＳＴＸ）を検知する。
また、フレーム終了コード（ＥＴＸ）と同じコードを抽出した際に、フレーム終了コード（ＥＴＸ）と同じコードが単独で出現しているか連続して偶数回出現しているか連続して奇数回出現しているかを判別し、単独で出現している場合に、抽出した当該コードをフレーム終了コード（ＥＴＸ）と識別し、奇数回出現している場合に、最後尾のコードをフレーム終了コード（ＥＴＸ）と識別し、偶数回出現している場合は、フレーム終了コード（ＥＴＸ）ではないと識別する。
【００５６】
次に、暗号化フレーム送信時の処理について示す。
クライアント側の暗号化要求フレーム送信時、および、サーバ側の暗号化応答フレーム送信時のいずれにおいても、平文の要求フレームあるいは応答フレームの暗号化を行った直後に制御コードの挿入処理を行う。
すなわち、図５においては、Ｓ３とＳ４の間、図８においては、Ｓ２５とＳ２６の間のそれぞれにおいて、図１０に示す暗号化プロトコル処理部１０４が、暗号化部１０５に要求フレーム、または応答フレームを渡し、暗号化部１０５が暗号化プロトコル処理部１０４に暗号化データを返した直後に、暗号化プロトコル処理部１０４が制御コード挿入部１１０に暗号化データを渡し、制御コード挿入処理を行う。
ここで、制御コードとは、ＳＴＸやＥＴＸなどのフレーム検出に使用するコードを示す。
【００５７】
図１１に、制御コード挿入処理のフローチャートを示す。
図１１に従って、制御コード挿入処理の手順について説明する。
【００５８】
図１１において、ＳＴＸまたはＥＴＸと書いているのは、暗号化データ中に現れるＳＴＸまたはＥＴＸのコードと同じ値のデータのことを指しており、フレーム送受信時のフレームの開始および終了を表すコードではない。
【００５９】
制御コード挿入処理では、暗号化されたデータを先頭から１バイトずつ調べ、ＳＴＸまたはＥＴＸと同じ値が検出された場合、その直前、または直後に同じ値を１バイト挿入する。
まず、制御コード挿入部１１０は、暗号化データから１バイトずつ読み出しを行うためのポインタを暗号化データの先頭にセットする（Ｓ４１）。
次に、制御コード挿入部１１０は、暗号化データを１バイト読み出す（Ｓ４２）。
次に、制御コード挿入部１１０は、読み出した１バイトのデータを調べ、ＳＴＸのコードと同じ値であれば（Ｓ４３でＹＥＳ）、その値１バイト（ＳＴＸ）をバッファに書き出す（Ｓ４４）。Ｓ４３でＳＴＸではなく、ＥＴＸのコードと同じ値であれば（Ｓ４５でＹＥＳ）、その値１バイト（ＥＴＸ）をバッファに書き出す（Ｓ４６）。
Ｓ４３でＳＴＸではなく、Ｓ４５でＥＴＸではなかった場合、何もしない。
次に、Ｓ４２で読み出した１バイトの値をバッファに書き出す（Ｓ４７）。
次に、読み出す暗号化データがまだある場合はＳ４２に戻り、読み出す暗号化データが終了の場合は制御コード挿入処理を終了する（Ｓ４８）。
【００６０】
以上のようにして生成した制御コード挿入処理後の暗号化データにおいては、ＳＴＸまたはＥＴＸと同じ値が出現する場合は、必ず、同じ値が偶数バイト連続する構造となっている。
暗号化フレーム送信時のフレーム形式の例を図１２に示す。
図１２において、フレーム種別、データ長、ダミーコードチェックサムなどの暗号化フレームヘッダ、トレーラの各フィールドは、数字を表す文字コードを使用するなどして、ＳＴＸやＥＴＸのコードと同じ値が出現しないようにする。
このようにすることにより、受信側で受信データにＳＴＸまたはＥＴＸの値が単独で出現した場合、本来のフレーム開始、および終了を表すコードとして解釈し、ＳＴＸまたはＥＴＸが偶数回連続で出現したときは暗号化データ中の値であると解釈することが出来る。
なお、この例では、分かりやすさのため、ダミーコードを挿入するようにしているが、ダミーコードの挿入は行わず、ＥＴＸが奇数回連続した場合は最後の１つがフレームの終了を示すＥＴＸであると解釈するようにしても良い。
【００６１】
次に、サーバ側における暗号化要求フレーム受信時、または、クライアント側における暗号化応答フレーム受信処理におけるフレーム検出処理、および、制御コード除去処理について示す。
フレーム検出処理および、制御コード除去処理は、図１０に示す通信フレーム識別処理部１０３で行う。
順序としては、サーバ側の要求受信処理においては、図７のＳ１２におけるフレーム検出の処理の中で、また、クライアント側の応答受信処理においては、図９のＳ３２におけるフレーム検出の処理の中でそれぞれ実行する。
【００６２】
図１３及び図１４に、フレーム検出および制御コード除去処理の手順を示すフローチャートを示す。
図１３及び図１４に従ってフレーム検出および制御コード除去処理の手順について説明する。
【００６３】
なお、図１３及び図１４において、ＳＴＸまたはＥＴＸと書いているのは、ＳＴＸ及びＥＴＸそのものである場合の他、暗号化データ中に現れるＳＴＸまたはＥＴＸのコードと同じ値のデータである場合もあり、フレーム送受信時のフレームの開始および終了を表すコードとは限らない。
【００６４】
まず、通信フレーム識別処理部１０３は、ＳＴＸ重複判定フラグ、ＥＴＸ重複判定フラグをオフに設定する（Ｓ５１）。
次に、通信フレーム識別処理部１０３は、１バイトの受信を行う（Ｓ５２）。
次に、通信フレーム識別処理部１０３は、受信した１バイトがＳＴＸか判定し、ＳＴＸのコードと同じ値ではない場合は、Ｓ５２に戻る（Ｓ５３）。
Ｓ５３で受信した１バイトの値がＳＴＸのコードと同じ値であれば、さらに１バイト受信する（Ｓ５４）。
次に、受信した１バイトを判定し、ＳＴＸのコードと同じ値であれば、Ｓ５２に戻る（Ｓ５５）。
一方、Ｓ５５でＮＯの場合、すなわち受信した１バイトがＳＴＸのコードと同じ値でなければ、ＳＴＸをバッファに書込み（Ｓ５６）、さらに、受信した値１バイトをバッファに書き込む（Ｓ５７）。
この場合は、フレーム開始フラグとしてのＳＴＸを抽出したことになる。
【００６５】
次に、通信フレーム識別処理部１０３は、さらに１バイトを受信する（Ｓ５８）。
次に、受信した１バイトがＳＴＸかどうかを判定する（Ｓ５９）。
Ｓ５９で、受信した１バイトがＳＴＸであった場合、次に、ＳＴＸ重複判定フラグがオンかどうかを判定する（Ｓ６０）。
ＳＴＸ重複判定フラグは、ＳＴＸコードと同じ値を奇数個連続受信したときにオンとし、偶数個連続で受信したときオフとする。
Ｓ６０で、ＳＴＸ重複判定フラグがオフであれば、通信フレーム識別処理部１０３は、ＳＴＸ重複判定フラグをオンに設定し（Ｓ６１）、受信した１バイト、すなわちＳＴＸコードと同じ値をバッファに書き込み、Ｓ５８に戻る（Ｓ６２）。
Ｓ６０でＳＴＸ重複判定フラグがオンであれば、通信フレーム識別処理部１０３は、ＳＴＸ重複判定フラグをオフし、Ｓ５８に戻る（Ｓ６３）。
【００６６】
Ｓ５９で、受信した１バイトがＳＴＸではない場合、次に、通信フレーム識別処理部１０３は、受信した１バイトがＥＴＸかどうかを判定する（Ｓ６４）。
Ｓ６４で、受信した１バイトがＥＴＸであれば、次に、ＥＴＸ重複判定フラグがオンかオフかを判定する（Ｓ６５）。
ＥＴＸ重複判定フラグは、ＳＴＸ重複判定フラグと同様に、ＥＴＸコードと同じ値を奇数回連続受信したときにオンとし、偶数回連続して受信したときにオフとする。
Ｓ６５で、ＥＴＸ重複判定フラグがオフの場合は、通信フレーム識別処理部１０３は、ＥＴＸ重複判定フラグをオンとし（Ｓ６６）、受信した１バイト、すなわちＥＴＸコードと同じ値をバッファに書き込み、Ｓ５８に戻る（Ｓ６７）。
Ｓ６５でＥＴＸ重複判定フラグがオンの場合は、通信フレーム識別処理部１０３は、ＥＴＸ重複判定フラグをオフし（Ｓ６８）、Ｓ５８に戻る。
【００６７】
Ｓ６４において、受信した１バイトはＥＴＸコードの値と異なる場合は、通信フレーム識別処理部１０３は、次にＥＴＸ重複判定フラグがオンかオフかを判定する（Ｓ６９）。
Ｓ６９において、ＥＴＸ重複判定フラグがオフの場合、通信フレーム識別処理部１０３は、ＳＴＸ重複判定フラグをオフし（Ｓ７０）、受信した１バイトをバッファに書き込み（Ｓ７１）、Ｓ５８に戻る。
【００６８】
Ｓ６９において、ＥＴＸ重複判定フラグがオンの場合には、通信フレーム識別処理部１０３は、ＥＴＸ重複判定フラグをオフする（Ｓ７２）。
この場合は、ＥＴＸ重複判定フラグがオンとなった後に抽出した１バイトがＥＴＸと異なるので、この１バイトのデータはフレーム終了コードであるＥＴＸの直後のデータであり、図１２に示すようにチェックサムである。
このため、通信フレーム識別処理部１０３は、次に、チェックサムフィールドの処理を行う（Ｓ７３）。チェックサムフィールドの処理は、例えば、既に受信した１バイトを含めて、チェックサムフィールドのサイズ分のデータを読み込み、バッファに書き出す。
次に、通信フレーム識別処理部１０３は、バッファに蓄積されたバイト列をフレームデータとして、上位に渡し（Ｓ７４）、Ｓ５２に戻る。
ここで、上位とは、図１０において、暗号化フレームの場合は、暗号化プロトコル処理部１０４、平文フレームの場合は、通信ドライバインタフェース部１０７となる。
どちらに渡すかは、フレーム内のフレーム種別により判定する。
【００６９】
この実施の形態においては、暗号化データとの区別を行うコードをＳＴＸおよびＥＴＸのみで示したが、ＥＮＱやそれ以外のフロー制御等に使用するコードに適用しても良い。
例えば、英字、数字、記号の文字を表す以外の特殊なコードの全てを対象としてもよい。
また、この実施の形態では、重複判定フラグを対象コードごとに分けたが、１バイト前の受信データを保存し、その情報と組み合わせて、全対象コード共通の重複判定フラグとしても良い。
【００７０】
以上のように、フレーム検出に使用する特定のコードについて、暗号化データ内でその特定コードと同じ値が出現する場合には、送信側で、直前、あるいは直後に同じコードを挿入することにより、必ず、偶数回連続するようにしており、また、フレーム検出のためのコードは、隣接するフィールドで同じ値を使用しないようにすることにより、必ず単独で出現するようにしているため、フレームの送信途中で接続した場合なども含めて、受信側で暗号化データとフレーム検出用コードを区別することができる。
【００７１】
以上、本実施の形態では、以下の手順を備える暗号化通信クライアント装置について説明した。
（ａ）送信フレームを暗号化したデータから、特定のコードを検出し、その直前、または直後に同じコードを挿入する手段、
（ｂ）受信するバイト列中にフレーム開始コードが単独で出現するか、複数回連続で出現するかを判定することにより、フレームの先頭位置を検出する手段、
（ｃ）フレーム先頭位置検出後に、フレーム終了コードが単独で出現するか、複数回連続で出現するかを判定することにより、フレーム終了位置を検出する手段。
【００７２】
また、本実施の形態では、以下の手順を備える暗号化通信サーバ装置について説明した。
（ａ）送信フレームを暗号化したデータから、特定のコードを検出し、その直前、または直後に同じコードを挿入する手段、
（ｂ）受信するバイト列中にフレーム開始コードが単独で出現するか、複数回連続で出現するかを判定することにより、フレームの先頭位置を検出する手段、
（ｃ）フレーム先頭位置検出後に、フレーム終了コードが単独で出現するか、複数回連続で出現するかを判定することにより、フレーム終了位置を検出する手段。
【００７３】
最後に、実施の形態１及び２に示したクライアント装置１００及びサーバ装置２００のハードウェア構成例について説明する。
図１５は、実施の形態１及び２に示すクライアント装置１００及びサーバ装置２００のハードウェア資源の一例を示す図である。
なお、図１５の構成は、あくまでもクライアント装置１００及びサーバ装置２００のハードウェア構成の一例を示すものであり、クライアント装置１００及びサーバ装置２００のハードウェア構成は図１５に記載の構成に限らず、他の構成であってもよい。
【００７４】
図１５において、クライアント装置１００及びサーバ装置２００は、プログラムを実行するＣＰＵ９１１（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサともいう）を備えている。
ＣＰＵ９１１は、バス９１２を介して、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）９１３、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）９１４、通信ボード９１５、表示装置９０１、キーボード９０２、マウス９０３、磁気ディスク装置９２０と接続され、これらのハードウェアデバイスを制御する。
更に、ＣＰＵ９１１は、ＦＤＤ９０４（Ｆｌｅｘｉｂｌｅ  Ｄｉｓｋ  Ｄｒｉｖｅ）、コンパクトディスク装置９０５（ＣＤＤ）、プリンタ装置９０６、スキャナ装置９０７と接続していてもよい。また、磁気ディスク装置９２０の代わりに、光ディスク装置、メモリカード（登録商標）読み書き装置などの記憶装置でもよい。
ＲＡＭ９１４は、揮発性メモリの一例である。ＲＯＭ９１３、ＦＤＤ９０４、ＣＤＤ９０５、磁気ディスク装置９２０の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置の一例である。
通信ボード９１５、キーボード９０２、マウス９０３、スキャナ装置９０７、ＦＤＤ９０４などは、入力装置の一例である。
また、通信ボード９１５、表示装置９０１、プリンタ装置９０６などは、出力装置の一例である。
【００７５】
通信ボード９１５は、ネットワークに接続されている。例えば、通信ボード９１５は、ＬＡＮ（ローカルエリアネットワーク）、インターネット、ＷＡＮ（ワイドエリアネットワーク）などに接続されている。
【００７６】
磁気ディスク装置９２０には、オペレーティングシステム９２１（ＯＳ）、ウィンドウシステム９２２、プログラム群９２３、ファイル群９２４が記憶されている。
プログラム群９２３のプログラムは、ＣＰＵ９１１がオペレーティングシステム９２１、ウィンドウシステム９２２を利用しながら実行する。
【００７７】
また、ＲＡＭ９１４には、ＣＰＵ９１１に実行させるオペレーティングシステム９２１のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。
また、ＲＡＭ９１４には、ＣＰＵ９１１による処理に必要な各種データが格納される。
【００７８】
また、ＲＯＭ９１３には、ＢＩＯＳ（Ｂａｓｉｃ  Ｉｎｐｕｔ  Ｏｕｔｐｕｔ  Ｓｙｓｔｅｍ）プログラムが格納され、磁気ディスク装置９２０にはブートプログラムが格納されている。
クライアント装置１００及びサーバ装置２００の起動時には、ＲＯＭ９１３のＢＩＯＳプログラム及び磁気ディスク装置９２０のブートプログラムが実行され、ＢＩＯＳプログラム及びブートプログラムによりオペレーティングシステム９２１が起動される。
【００７９】
上記プログラム群９２３には、実施の形態１及び２の説明において「〜部」、「〜手段」として説明している機能を実行するプログラムが記憶されている。プログラムは、ＣＰＵ９１１により読み出され実行される。
【００８０】
ファイル群９２４には、実施の形態１及び２の説明において、「〜の判断」、「〜の計算」、「〜の比較」、「〜の検出」、「〜の抽出」、「〜の取得」、「〜の挿入」、「〜の設定」、「〜の登録」、「〜の選択」等として説明している処理の結果を示す情報やデータや信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」の各項目として記憶されている。
「〜ファイル」や「〜データベース」は、ディスクやメモリなどの記録媒体に記憶される。ディスクやメモリなどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ９１１によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・処理・編集・出力・印刷・表示などのＣＰＵの動作に用いられる。
抽出・検索・参照・比較・演算・計算・処理・編集・出力・印刷・表示のＣＰＵの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリ、レジスタ、キャッシュメモリ、バッファメモリ等に一時的に記憶される。
また、実施の形態１及び２で説明しているフローチャートの矢印の部分は主としてデータや信号の入出力を示し、データや信号値は、ＲＡＭ９１４のメモリ、ＦＤＤ９０４のフレキシブルディスク、ＣＤＤ９０５のコンパクトディスク、磁気ディスク装置９２０の磁気ディスク、その他光ディスク、ミニディスク、ＤＶＤ等の記録媒体に記録される。また、データや信号は、バス９１２や信号線やケーブルその他の伝送媒体によりオンライン伝送される。
【００８１】
また、実施の形態１及び２の説明において「〜部」として説明しているものは、「〜回路」、「〜装置」、「〜機器」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。すなわち、「〜部」として説明しているものは、ＲＯＭ９１３に記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェアのみ、或いは、素子・デバイス・基板・配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、ＤＶＤ等の記録媒体に記憶される。プログラムはＣＰＵ９１１により読み出され、ＣＰＵ９１１により実行される。すなわち、プログラムは、実施の形態１及び２の「〜部」としてコンピュータを機能させるものである。あるいは、実施の形態１及び２の「〜部」の手順や方法をコンピュータに実行させるものである。
【００８２】
このように、実施の形態１及び２に示すクライアント装置１００及びサーバ装置２００は、処理装置たるＣＰＵ、記憶装置たるメモリ、磁気ディスク等、入力装置たるキーボード、マウス、通信ボード等、出力装置たる表示装置、通信ボード等を備えるコンピュータであり、上記したように「〜部」として示された機能をこれら処理装置、記憶装置、入力装置、出力装置を用いて実現するものである。
【図面の簡単な説明】
【００８３】
【図１】実施の形態１に係るクライアント装置の構成例を示す図。
【図２】実施の形態１に係るサーバ装置の構成例を示す図。
【図３】実施の形態１に係る要求フレームのフレーム構造例を示す図。
【図４】実施の形態１に係る応答フレームのフレーム構造例を示す図。
【図５】実施の形態１に係るクライアント装置の送信時の動作例を示すフローチャート図。
【図６】実施の形態１に係る要求番号及び暗号／非暗号の区別情報の例を示す図。
【図７】実施の形態１に係るサーバ装置の受信時の動作例を示すフローチャート図。
【図８】実施の形態１に係るサーバ装置の送信時の動作例を示すフローチャート図。
【図９】実施の形態１に係るクライアント装置の受信時の動作例を示すフローチャート図。
【図１０】実施の形態２に係るクライアント装置の構成例を示す図。
【図１１】実施の形態２に係るクライアント装置及びサーバ装置の制御コード挿入処理の際の動作例を示すフローチャート図。
【図１２】実施の形態２に係る暗号化フレームのフレーム形式の例を示す図。
【図１３】実施の形態２に係るクライアント装置及びサーバ装置のフレーム検出および制御コード除去処理の際の動作例を示すフローチャート図。
【図１４】実施の形態２に係るクライアント装置及びサーバ装置のフレーム検出および制御コード除去処理の際の動作例を示すフローチャート図。
【図１５】実施の形態１及び２に係るクライアント装置及びサーバ装置のハードウェア構成例を示す図。
【符号の説明】
【００８４】
１００  クライアント装置、１０２  通信処理部、１０３  通信フレーム識別処理部、１０４  暗号化プロトコル処理部、１０５  暗号化部、１０６  復号部、１０７  通信ドライバインタフェース部、１０８  アプリケーションプロトコル処理部、１０９  アプリケーション、２００  サーバ装置、２０２  通信処理部、２０３  通信フレーム識別処理部、２０４  暗号化プロトコル処理部、２０５  暗号化部、２０６  復号部、２０７  通信ドライバインタフェース部、２０８  アプリケーションプロトコル処理部、２０９  アプリケーション。
【図１】
2009225108.tif 000003
【図２】
2009225108.tif 000004
【図３】
2009225108.tif 000005
【図４】
2009225108.tif 000006
【図５】
2009225108.tif 000007
【図６】
2009225108.tif 000008
【図７】
2009225108.tif 000009
【図８】
2009225108.tif 000010
【図９】
2009225108.tif 000011
【図１０】
2009225108.tif 000012
【図１１】
2009225108.tif 000013
【図１２】
2009225108.tif 000014
【図１３】
2009225108.tif 000015
【図１４】
2009225108.tif 000016
【図１５】
2009225108.tif 000017