(57)【要約】【課題】  クライアントプログラムのデータを符号化することによって安全なサーバサイドプログラムを実現する。【解決手段】  クライアント装置１が、プログラムに含まれる変数を任意の符号化式を用いて符号化してネットワーク経由でサーバ装置２に送信し、サーバ装置２が、当該符号化された変数が満たすべき関係式を満足するか否かを判定し、満足すると判定されたとき、符号化式に依存して決まる復号式を用いて符号化前の変数を取得する。【選択図】      図１
2007086845.tif 000002
【特許請求の範囲】
【請求項１】
プログラムに含まれる変数を任意の符号化式を用いて符号化し、ネットワーク経由でサーバ装置に送信するクライアント装置と、
前記符号化された変数を前記ネットワーク経由で受信し、当該符号化された変数が満たすべき関係式を満足するか否かを判定し、満足すると判定されたとき、前記符号化式に依存して決まる復号式を用いて前記符号化前の変数を取得するサーバ装置と、
を備えることを特徴とするクライアントサーバシステム。
【請求項２】
前記クライアント装置は、
前記プログラムに含まれる変数から符号化の対象となるｎ個の変数を選択出力する変数選択出力部と、
ｍ個（但し、ｍ≧ｎであって正の整数）の符号化関数のうち、ｎ個の符号化関数を独立とする任意の符号化式を生成する符号化式生成部と、
前記符号化式に含まれる独立なｎ個の符号化式から成る連立方程式を解き、前記符号化関数に依存して決まる復号関数から成るｎ個の復号式を生成する復号式生成部と、
前記生成されたｎ個の復号式を、残るｍ−ｎ個の符号化式から成る連立方程式に代入し、ｍ−ｎ個の符号化された変数が満たすべき関係式を生成する関係式生成部と、
前記サーバ装置に対して計算結果を送信する命令を、全ての符号化された変数、および必要な符号化されていない変数を送信する命令に変換し、かつ、前記符号化前の変数に対する代入命令を前記符号化式に基づき前記符号化された変数に対する代入命令に置換し、前記プログラム中で参照されている前記符号化前の変数を前記復号式で置換する変数命令符号演算部と、
から成ることを特徴とする請求項１に記載のクライアントサーバシステム。
【請求項３】
クライアントサーバシステムのサーバ装置上で動作し、ネットワークを介してクライアント装置から送信されるプログラムを受信してサーバ装置の本来の処理を行うサーバサイドプログラムの実現方法であって、
前記クライアント装置が、前記プログラムに含まれる変数を任意の符号化式を用いて符号化し、ネットワーク経由でサーバ装置に送信するステップと、
前記サーバ装置が、前記符号化された変数を前記ネットワーク経由で受信し、当該符号化された変数が満たすべき関係式を満足するか否かを判定し、満足すると判定されたとき、前記符号化式に依存して決まる復号式を用いて前記符号化前の変数を取得するステップと、
を有することを特徴とするサーバサイドプログラムの実現方法。
【請求項４】
ネットワークを介してクライアント装置から送信されるプログラムを受信し、当該プログラムの少なくとも一部を実行するサーバ装置であって、
前記クライアント装置から送信される、任意の符号化式により符号化された前記プログラムに含まれる変数を前記ネットワーク経由で受信する手段と、
前記符号化された変数が満たすべき関係式を満足するか否かを判定し、満足すると判定されたとき、前記符号化式に依存して決まる復号式を用いて前記符号化前の変数を取得する手段と、
を具備することを特徴とするサーバ装置。
【請求項５】
サーバ装置で動作し、ネットワーク経由でクライアント装置から送信されるプログラムを受信し、前記プログラムの少なくとも一部を実行するサーバサイドプログラムであって、
任意の符号化式により符号化された前記プログラムに含まれる変数を前記ネットワーク経由で受信する処理と、
前記符号化された変数が満たすべき関係式を満足するか否かを判定し、満足すると判定されたとき、前記符号化式に依存して決まる復号式を用いて前記符号化前の変数を取得する処理と、
をコンピュータに実行させるサーバサイドプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワーク経由でクライアント装置から送信されるプログラムを受信し、前記プログラムの少なくとも一部を実行する、クライアントサーバシステムおよび同システムにおけるサーバサイドプログラムの実現方法ならびにそのサーバ装置、サーバサイドプログラムに関する。
【背景技術】
【０００２】
一般に、ソフトウェアには、価値のあるアルゴリズムおよびコンテンツの暗号鍵など、利用者に対して秘密にすべき情報が含まれる場合がある。一方では、ソフトウェアを解析するための技術（ＲＥ：Reverse Engineering）が数多く開発されている。このため、これらの技術によりソフトウェアが解析されると、不正者が秘密情報を入手するという脅威が考えられる。この脅威に対し、ソフトウェアの仕様を保ったまま、ソフトウェアの解析を困難にする難読化という技術がある。
【０００３】
このような技術としては、例えば、変数の符号化によるソフトウェアの難読化として、ソースコード中の変数を線形変換により符号化する方法が提案されている（例えば、非特許文献１参照）。この方法では、単一の変数ｘを線形変換により、変数Ｘ（＝ａｘ＋ｂ）に符号化することで、ソフトウェアの解析を難しくすることを意図するものである。ここでは、線形変換の際に用いる整数ａ，ｂが秘密鍵となり、ソースコード中の変数の値や演算を隠蔽することを目的としている。
【非特許文献１】佐藤他、信学技報、Ｖｏｌ．ＩＴ‐２００２−４９，ｐｐ．１３−１８，Ｍａｒ．２００２“データの符号化と演算子の変換によるプログラムの難読化手法”
【０００４】
ところで、サーバサイドプログラムとは、クライアントプログラムの少なくとも一部の処理をサーバ装置側で行うプログラムである。サーバサイドプログラムでは、不正者によるクライアントプログラムのデータ改竄が問題となる。
例えば、水道、ガス、電気などの使用料から料金を求めるクライアントプログラムでは、利用者が計算結果を不正に改竄し、料金を減額する可能性がある。また、オンラインゲームでは、不正者が得点を改竄し、ランキングの上位に入賞しようとする可能性がある。
【０００５】
上記した利用者によるデータ改竄を防ぐための従来技術として、以下に説明する二つの方法がある。
一つは、サーバ側ですべての処理を行う方法である。具体的に、図６（ａ）に示されるように、クライアントプログラムＰｃには、サーバプログラムＰｓと通信を行う機能のみを持たせる。このとき、Ｐｓは、Ｐｃから送られてきたデータに対しすべての処理を行う。他の一つは、共通鍵を利用する方法である。具体的に、図６（ｂ）に示されるように、クライアントプログラムＰｃとサーバプログラムＰｓ間で、秘密鍵Ｋを共有する。このとき、Ｐｃは、計算結果を秘密鍵Ｋで暗号化し、Ｐｓに送信する。そして、Ｐｓは、秘密鍵Ｋを用いて送られたデータを復号し、残りの処理を行う。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、サーバ装置側で全ての処理を行う方法によれば、サーバ装置の負荷が大きくなる。また、不正者がデータを改竄することを防止することができない。一方、共通鍵を共有する方法によれば、共通鍵を利用者に入手されないように、耐タンパーデバイスなどに格納することが必要となり、鍵の保管コストが大きくなる。また、不正者がメモリを観測、あるいは操作することによって、暗号化前のデータが改竄される可能性がある。
【０００７】
本発明は上記事情に基づいてなされたものであり、クライアントプログラムのデータを符号化することによって安全なサーバサイドプログラムを実現する、クライアントサーバシステムおよび同システムにおけるサーバサイドプログラムの実現方法ならびにそのサーバ装置、サーバサイドプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記した課題を解決するために本発明のクライアントサーバシステムは、プログラムに含まれる変数を任意の符号化式を用いて符号化し、ネットワーク経由でサーバ装置に送信するクライアント装置と、前記符号化された変数を前記ネットワーク経由で受信し、当該符号化された変数が満たすべき関係式を満足するか否かを判定し、満足すると判定されたとき、前記符号化式に依存して決まる復号式を用いて前記符号化前の変数を取得するサーバ装置と、を備えることを特徴とする。
【０００９】
また、本発明において、前記クライアント装置は、前記プログラムに含まれる変数から符号化の対象となるｎ個の変数を選択出力する変数選択出力部と、ｍ個（但し、ｍ≧ｎであって正の整数）の符号化関数のうち、ｎ個の符号化関数を独立とする任意の符号化式を生成する符号化式生成部と、前記符号化式に含まれる独立なｎ個の符号化式から成る連立方程式を解き、前記符号化関数に依存して決まる復号関数から成るｎ個の復号式を生成する復号式生成部と、前記生成されたｎ個の復号式を、残るｍ−ｎ個の符号化式から成る連立方程式に代入し、ｍ−ｎ個の符号化された変数が満たすべき関係式を生成する関係式生成部と、前記サーバ装置に対して計算結果を送信する命令を、全ての符号化された変数、および必要な符号化されていない変数を送信する命令に変換し、かつ、前記符号化前の変数に対する代入命令を前記符号化式に基づき前記符号化された変数に対する代入命令に置換し、前記プログラム中で参照されている前記符号化前の変数を前記復号式で置換する変数命令符号演算部とから成ることを特徴とする。
【００１０】
また、本発明は、クライアントサーバシステムのサーバ装置上で動作し、ネットワークを介してクライアント装置から送信されるプログラムを受信してサーバ装置本来の処理を行うサーバサイドプログラムの実現方法であって、前記クライアント装置が、前記プログラムに含まれる変数を任意の符号化式を用いて符号化し、前記ネットワーク経由でサーバ装置に送信するステップと、前記サーバ装置が、前記符号化された変数を前記ネットワーク経由で受信し、当該符号化された変数が満たすべき関係式を満足するか否かを判定し、満足すると判定されたとき、前記符号化式に依存して決まる復号式を用いて前記符号化前の変数を取得するステップと、を有することを特徴とする。
【００１１】
また、本発明は、ネットワークを介してクライアント装置から送信されるプログラムを受信し、当該プログラムの少なくとも一部を実行するサーバ装置であって、前記クライアント装置から送信される、任意の符号化式により符号化された前記プログラムに含まれる変数を前記ネットワーク経由で受信する手段と、前記符号化された変数が満たすべき関係式を満足するか否かを判定し、満足すると判定されたとき、前記符号化に依存して決まる復号式を用いて前記符号化前の変数を取得する手段と、を具備することを特徴とする。
【００１２】
また、本発明は、サーバ装置で動作し、ネットワーク経由でクライアント装置から送信されるプログラムを受信し、前記プログラムの少なくとも一部を実行するサーバサイドプログラムであって、任意の符号化式により符号化された前記プログラムに含まれる変数を前記ネットワーク経由で受信する処理と、前記符号化された変数が満たすべき関係式を満足するか否かを判定し、満足すると判定されたとき、前記符号化式に依存して決まる復号式を用いて前記符号化前の変数を取得する処理と、をコンピュータに実行させることを特徴とする。
【発明の効果】
【００１３】
本発明によれば、変数（データ）の符号化による難読化を用いて安全なサーバサイドプログラムを実現することができる。すなわち、難読化されたクライアントプログラムは、符号化式によって符号化されたデータに関してのみ処理を行い、符号化された計算結果をサーバ装置に送信し、サーバ装置は、保持している復号式でその計算結果を復号し残りの処理を行う。従って、秘密鍵を使用しないことから鍵を格納するための技術および資源を必要としない。また、クライアントプログラムから送られてきたデータが自明でない関係式を満たすことを確認することによってデータの正当性を検証することができる。
【発明を実施するための最良の形態】
【００１４】
図１は、本発明の実施形態に係るクライアントサーバシステムの一例を示すである。
ここでは、データの符号化による難読化方式を使い、安全なサーバサイド方式を実現する。難読化されたクライアントプログラムＯ（Ｐｃ）（Ｐｃ：難読化前のクライアントプログラム）は、符号化式Ｅによって符号化されたデータに関してのみ処理を行い、符号化された計算結果をサーバプログラム（Ｐｓ）に送信し、サーバ装置２は、保持している復号式Ｄでその計算結果を復号し残りの処理を行う。従って、秘密鍵を使用しないことから鍵を格納するための技術を必要としない。
【００１５】
図２は、本発明の実施形態に係るクライアントサーバシステムの内部構成を機能展開して示したブロック図である。
クライアントサーバシステムは、クライアント装置1とサーバ装置２で構成され、両者は、ＩＰ（Internet Protocol）等のネットワーク３を介して接続される。
【００１６】
クライアント装置1は、プログラムに含まれる変数を任意の符号化式を用いて符号化し、ネットワーク３経由でサーバ装置２に送信する機能を持ち、変数選択出力部１１と、符号化式生成部１２と、復号式生成部１３と、関係式生成部１４と、変数命令符号演算部１５と、プログラム送信部１６とで構成される。
【００１７】
変数選択出力部１１は、プログラムに含まれる変数から符号化の対象となるｎ個の変数を選択して符号化式生成部１２へ供給する。符号化式生成部１２は、ｍ個（但し、ｍ≧ｎであって正の整数）の符号化関数のうち、ｎ個の符号化関数を独立とする任意の符号化式を生成して復号式生成部１３および関係式生成部１４へ供給する。復号式生成部１３は、符号化式に含まれるｎ個の符号化式から成る連立方程式を解き、符号化関数に依存して決まる復号関数から成るｎ個の復号式を生成して変数命令符号演算部１５へ供給する、また、関係式生成部１４は、復号式生成部１３によって生成されたｎ個の復号式を、残るｍ−ｎ個の符号化式から成る連立方程式に代入し、ｍ−ｎ個の符号化された変数が満たすべき関係式を生成して変数命令符合演算部１５へ供給する。
【００１８】
変数命令符号演算部１５は、サーバ装置２に対して計算結果を送信する命令を、全ての符号化された変数、および必要な符号化されていない変数を送信する命令に変換し、かつ、符号化前の変数に対する代入命令を符号化式に基づき符号化された変数に対する代入命令に置換し、プログラム中で参照されている符号化前の変数を復号式で置換する。また、プログラム送信部１６は、上記により置換されたプログラムをネットワーク３経由でサーバ装置２へ送信する。
【００１９】
サーバ装置２は、クライアント装置１により符号化された変数をネットワーク３経由で受信し、当該符号化された変数が満たすべき関係式を満足するか否かを判定し、満足すると判定されたとき、符号化式に依存して決まる復号式を用いて符号化前の変数を取得する機能を持ち、プログラム受信部２１と、変数検証演算部２２と、変数復号演算部２３と、情報処理部２４とで構成される。
【００２０】
プログラム受信部２１は、請求項に示す、「クライアント装置１から送信される任意の符号化式により符号化されたプログラムに含まれる変数をネットワーク３経由で受信する手段」として機能し、ここで受信されたプログラムは、変数検証演算部２２へ供給される。
変数検証演算部２２は、符号化された変数が満たすべき関係式を満足するか否かを判定し、その結果に従い変数復号演算部２３を制御し、変数復号演算部２３は、変数検証演算部２２により関係式が満足すると判定されたとき、符号化式に依存して決まる復号式を用いて符号化前の変数を取得し、当該変数を含むプログラムを情報処理部２４へ供給する。従って、上記した変数検証演算部２２と変数復号演算部２３は、請求項に示す、「符号化された変数が満たすべき関係式を満足するか否かを判定し、満足すると判定されたとき、前記符号化式に依存して決まる復号式を用いて前記符号化前の変数を取得する手段」として機能する。
なお、情報処理部２４は、そのプログラムに従いサーバ装置２本来の処理を実行する。
【００２１】
図３、図４は、本発明の実施形態に係るクライアントサーバシステムの動作を説明するために引用したプログラムの処理フローチャートであり、クライアントプログラムＰｃ（図３）、サーバプログラムＰｓ（図４）のそれぞれを示す。
以下、図３、図４に示すフローチャートを参照しながら図１、図２に示す本発明の実施形態の動作について詳細に説明する。
【００２２】
まず、図３に示すフローチャートを参照しながらクライアント装置１の動作から説明する。クライアント装置１は、以下に示す手順に従いクライアントプログラムＰｃの難読化を行う。
クライアント装置１は、クライアントプログラムＰｃに含まれる変数を符号化するにあたり、変数選択出力部１１を起動して符号化対象となる変数の選択出力を行う（ステップＳ３１）。変数選択出力部１１は、クライアントプログラムＰｃに含まれる変数から符号化の対象となるｎ個（ｎは正の整数）の変数ｘ1，ｘ2，…，ｘｎを選択する。
【００２３】
続いて、クライアント装置１は符号化式生成部１２を起動し、ここで符号化式の生成が行われる（ステップＳ３２）。ここでは、以下の式（１）で示されるm個（但し、ｍは正の整数であり、なおかつｍ≧ｎであるものとする）の符号化式Ｅ1，Ｅ2，…，Ｅmを定義する。
【００２４】
【数１】
2007086845.tif 000003
【００２５】
但し、Ｘ1，Ｘ2，…，Ｘmは符号化された変数である。ｍ個の符号化関数Ｅ1，Ｅ2，…，Ｅmは任意に定義し、生成することが可能であるが、ｍ個の関数のうち、ｎ個の関数は独立である必要がある。符号化関数の例としては、affine関数や、排他的論理和演算を用いた非線型関数などが考えられる。
上記した符号化式を用いることにより、プログラムに含まれる変数ｘ1，ｘ2，…，ｘmに対する代入命令を、符号化された変数Ｘ1，Ｘ2，…，Ｘmに対する代入命令に置換することができる。
【００２６】
（定義１）ｎ個の関数ｆ1，ｆ2，…，ｆnが独立である。
⇔関数ｆ1，ｆ2，…，ｆnが従属でない。
（定義２）ｎ個の関数ｆ1，ｆ2，…，ｆnが従属である。
⇔定数列ｃ1，ｃ2，…，ｃkおよび定数ｃが存在して、以下の式（２）が成立する。
【００２７】
【数２】
2007086845.tif 000004
【００２８】
但し、ｃ1，ｃ2，…，ｃnの少なくとも１つは、０ではない。上記した符号化式を用いることにより、プログラムに含まれる変数ｘ1，ｘ2，…，ｘnに対する代入命令を、符号化された変数Ｘ1，Ｘ2，…，Ｘmに対する代入命令に置換することができる。
【００２９】
クライアント装置１は、続いて復号式生成部１３を起動し、復号式生成部１３にて復号式を生成する（ステップＳ３３）。ここでは、符号化式に含まれるｎ個の独立な式を、連立方程式と見なし、変数ｘ1，ｘ2，…，ｘnについて解き、以下の式（３）で示すｎ個の復号式を生成する。
【００３０】
【数３】
2007086845.tif 000005
【００３１】
但し、Ｄ1，Ｄ2，…，Ｄnは復号関数であり、上記により生成された符号化関数Ｅ1，Ｅ2，…，Ｅnに依存して決まる。得られたｎ個の復号式を残りのｍ−ｎ個の方程式に代入することにより、ｍ−ｎ個の自明でない関係式が得られる。復号式を用いることにより、参照されている変数ｘ1，ｘ2，…，ｘnを、符号化された変数Ｘ1，Ｘ2，…，Ｘmに書き換えることができる。
なお、自明でない関係式とは、符号化された変数Ｘ1，Ｘ2，…，Ｘmが満たすべき関係式である。この関係式を用いると、１つの変数の復号式２m-n通りに表現することができ、どの変数が復号されているかを特定することを難しくすることができる。また、符号化される変数がこの関係式を満たしているか否かを判定することによって、クライアントプログラムＰｃが送信したデータの正当性を確認することができる。
【００３２】
次に、クライアント装置１は、変数命令符号演算部１５を起動して変数命令の符号化のための演算を行う（ステップＳ３４）。ここでは、プログラムで用いられている符号化前の変数ｘ1，ｘ2，…，ｘnを、以下の手順に従い、全て符号化された変数Ｘ1，Ｘ2，…，Ｘmに置換する。
すなわち、まず、サーバプログラムＰｓとの通信部分につき、クライアントプログラムＰｃ中で、サーバプログラムＰｓに計算結果を送信する命令を、すべての符号化された変数および必要な符号化されていない変数を送信する命令に置換する。これ以外の変数については、以下の手順に従い、符号化された変数に置換する。
【００３３】
まず、代入命令に関し、符号化前の変数ｘiに対する代入命令ｘi←ｖを、以下の式（４）に示される符号化された変数Ｘ1，Ｘ2，…，Ｘmに対する代入命令に置換する。
【００３４】
【数４】
2007086845.tif 000006
【００３５】
また、プログラム中で参照されている符号化前の変数ｘiについては、ステップＳ３３で生成した復号式Ｄｉ（Ｘ1，Ｘ2，…，Ｘm）で置換する。
【００３６】
最後に後処理として、符号化された変数に初期値を与える。また連続する代入命令のマージを行う(ステップＳ３５)。
ここでは、まず、符号化された変数への初期値代入命令の追加を行う。具体的に、符号化された変数Ｘ1，Ｘ2，…，Ｘmには、ｍ−ｎ個の自明でない関係式を満たす任意の値を初期値として代入する。そして、連続する代入命令のマージを行う。ここでは、上記により生成された代入命令の中で、連続しているものをマージする。例えば、以下の（５）式で示される連続する２命令は、以下の（６）式で示される１個の命令にマージされる。そして、こられ符号化された変数を含むプログラムをプログラム送信部１６によりサーバ装置２へ送信する。
【００３７】
【数５】
2007086845.tif 000007
【００３８】
【数６】
2007086845.tif 000008
【００３９】
次に、図４に示すフローチャートを参照しながらサーバ装置２の動作について説明する。
サーバ装置２は、ネットワーク３経由でクライアント装置１から送信される符号化されたプログラムを、プログラム受信部２１を介して受信し、まず、変数検証演算部２２を起動してデータ（変数）の検証を行う。
すなわち、変数検証演算部２２は、クライアント装置１から送られてきた符号化された変数Ｘ1，Ｘ2，…，Ｘmがｍ−ｎ個すべての自明でない関係式を満たしているか否かをチェックして変数の検証を行う（ステップＳ４１）。もし、変数が自明でない関係式を満たしていない場合、クライアントプログラムＰｃから送られたデータは改竄された可能性がある。
【００４０】
次に、サーバ装置２は、変数復号演算部２３を起動し、変数復号演算部２３は、保持してある復号式Dを用いて演算を行い、符号化された変数Ｘ1，Ｘ2，…，Ｘmを復号し、元の変数ｘ1，ｘ2，…，ｘnを復元して情報処理部２４へ供給する（ステップＳ４２）。
情報処理部２４は、得られた変数および必要に応じ符号化されない変数を用いて計算結果を出力し（ステップＳ４３）、計算結果が出力された後は、サーバプログラムPs本来の処理を実行する（ステップＳ４４）。
【００４１】
図５（ａ）（ｂ）に、サーバサイドプログラムの具体例が示されている。（ａ）は従来例、（ｂ）は本発明の適用例を示している。
ここでは、変数ｘを読み取り、ｙ＝１０ｘ＋５０を計算し、サーバプログラムＰｓに送信するクライアントプログラムＰｃを例示している。また、変数ｘを、２つの変数ＸおよびＹに、以下の式（７）に示すように符号化するものとする。また、符号化された変数ＸおよびＹは、自明でない関係式２Ｘ＋Ｙ−５０を満たす。
【００４２】
【数７】
2007086845.tif 000009
【００４３】
クライアントプログラムＰｃは、計算結果の変わりに、符号化された変数ＸおよびYをサーバフムログラムＰｓに送信している。また、サーバプログラムＰｓでは、変数ＸおよびＹを受信し、自明でない関係式２Ｘ＋Ｙ＝５０を満たすことを検証する。関係式が満たされない場合は、不正者によるデータの改竄が行われた可能性があり、サーバプログラムＰｓは処理を終了する。関係式が満たされた場合は、サーバプログラムＰｓは復号式ｙ＝３Ｘ＋Ｙ−６０を用いて、符号化前の変数の値を得ることができる。
【００４４】
以上説明のように本発明は、クライアント装置１が、プログラムに含まれる変数を任意の符号化式を用いて符号化してネットワーク３経由でサーバ装置２に送信し、サーバ装置２が、当該符号化された変数が満たすべき関係式を満足するか否かを判定し、満足すると判定されたとき、符号化式に依存して決まる復号式を用いて符号化前の変数を取得するものである。
このことにより、変数の符号化による難読化を用いて安全なサーバサイドプログラムを実現することができる。すなわち、難読化されたクライアントプログラムＰｃは、符号化式によって符号化されたデータに関してのみ処理を行い、符号化された計算結果をサーバ装置２に送信し、サーバ装置２は、保持している復号式でその計算結果を復号し残りの処理を行う。従って、秘密鍵を使用しないことから鍵を格納するための技術および資源を必要としない。また、クライアントプログラムＰｃから送られてきたデータが自明でない関係式を満たすことを確認することによってデータの正当性を検証することができる。
【００４５】
なお、図２に示す、変数選択出力１１、符号化式生成部１２、復号式生成部１３、関係式生成部１４、変数命令符号演算部１５、プログラム送信部１６、プログラム受信部２１、変数検証演算部２２、変数復号演算部２３、情報処理部２４のそれぞれで実行される手順をコンピュータ読み取り可能な記録媒体に記録し、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することによって本発明のクライアントサーバシステムを実現することができる。ここでいうコンピュータシステムとは、ＯＳや周辺装置等のハードウェアを含む。
【００４６】
また、「コンピュータシステム」は、ＷＷＷシステムを利用している場合であれば、ホームページ提供環境（あるいは表示環境）も含むものとする。
また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように情報を伝送する機能を有する媒体のことをいう。
また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組合せで実現できるもの、いわゆる差分ファイル（差分プログラム）であっても良い。
【００４７】
以上、この発明の実施形態につき、図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【図面の簡単な説明】
【００４８】
【図１】本発明の実施形態に係るクライアントサーバシステムの一例を示した図である。
【図２】本発明の実施形態に係るクライアントサーバシステムの内部構成を機能展開して示したブロック図である。
【図３】本発明の実施形態の動作を説明するために引用したフローチャートである。
【図４】本発明の実施形態の動作を説明するために引用したフローチャートである。
【図５】本発明の実施形態の具体例を説明するために引用したプログラムリストの一例である。
【図６】従来例におけるクライアントサーバシステムの動作を説明するために引用した図である。
【符号の説明】
【００４９】
１…クライアント装置、２…サーバ装置、３…ネットワーク、１１…変数選択出力、１２…符号化式生成部、１３…復号式生成部、１４…関係式生成部、１５…変数命令符号演算部、１６…プログラム送信部、２１…プログラム受信部、２２…変数検証演算部、２３…変数復号演算部、２４…情報処理部
【図１】
2007086845.tif 000010
【図２】
2007086845.tif 000011
【図３】
2007086845.tif 000012
【図４】
2007086845.tif 000013
【図５】
2007086845.tif 000014
【図６】
2007086845.tif 000015