【文献】
濱田浩気ほか,秘匿計算上の集約関数中央値計算アルゴリズム,コンピュータセキュリティシンポジウム2012論文集,日本,一般社団法人情報処理学会 コンピュータセキュリティ,2012年10月23日,第2012巻,第3号,p.509−516,情報処理学会シンポジウムシリーズ
【文献】
千田浩司ほか,比較器ネットワークに適した秘匿関数計算の評価と応用,電子情報通信学会技術研究報告,日本,社団法人電子情報通信学会,2007年03月09日,第106巻,第595号,p.53−58
【文献】
濱田浩気ほか,実用的な速度で統計分析が可能な秘密計算システムMEVAL,コンピュータセキュリティシンポジウム2013論文集,日本,一般社団法人情報処理学会,2013年10月14日,第2013巻,第4号,p.777−784,情報処理学会シンポジウムシリーズ
(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0010】
以下、この発明の実施の形態について詳細に説明する。なお、図面中において同じ機能を有する構成部には同じ番号を付し、重複説明を省略する。
【0011】
[x]∈[F]は、ある値xが任意の環F上の秘密分散等により秘匿されていることを表す。{b}∈{B}は、1ビットのある値bが1ビットを表せる環B上の秘密分散等により秘匿されていることを表す。{{s}}∈{{S
m}}は、m個の要素の置換の集合S
mに属するある置換sが秘密分散等により秘匿されていることを表す。以下、秘密分散された値を「シェア」とも呼ぶ。
【0012】
実施形態中で用いる秘密計算におけるソート処理(安定ソートを含む)は、例えば、下記参考文献1に記載されたソートを用いることができる。置換sのシェア{{s}}については下記参考文献1に記載されたハイブリッド置換{{π}}を用いればよい。
【0013】
〔参考文献1〕五十嵐大,濱田浩気,菊池亮,千田浩司,“超高速秘密計算ソートの設計と実装: 秘密計算がスクリプト言語に並ぶ日”,CSS2017
【0014】
<実施形態>
この発明の実施形態は、group-by中央値を求める秘密集約中央値システムおよび方法である。本形態の中央値は、グループのレコード数が奇数ならばそのグループに属するレコードのバリュー属性をソートしたときに中央に位置する値の2倍の値とし、偶数ならば中央に位置する2つの値を加算した値とする。秘密計算で除算を行うのは計算コストが大きいため、秘密集約中央値システムから中央値のシェアを受け取ったクライアントが復元した中央値を2で除算することを想定している。本形態で説明する秘密集約中央値システムに対して秘密計算により2で除算する手順を追加することで本来の意味での中央値を出力する秘密集約中央値システムを構成できることは言うまでもない。
【0015】
図1を参照して、実施形態の秘密集約中央値システム100の構成例を説明する。秘密集約中央値システム100は、N(≧2)台の秘密計算装置1
1, …, 1
Nを含む。本形態では、秘密計算装置1
1, …, 1
Nはそれぞれ通信網9へ接続される。通信網9は、接続される各装置が相互に通信可能なように構成された回線交換方式もしくはパケット交換方式の通信網であり、例えばインターネットやLAN(Local Area Network)、WAN(Wide Area Network)などを用いることができる。なお、各装置は必ずしも通信網9を介してオンラインで通信可能である必要はない。例えば、秘密計算装置1
1, …, 1
Nへ入力する情報を磁気テープやUSBメモリなどの可搬型記録媒体に記憶し、その可搬型記録媒体から秘密計算装置1
1, …, 1
Nへオフラインで入力するように構成してもよい。
【0016】
図2を参照して、本形態の秘密集約中央値システム100に含まれる秘密計算装置1
n(n=1, …, N)の構成例を説明する。秘密計算装置1
nは、例えば、
図2に示すように、入力部10、順位計算部11、減算部12、ビット削除部13、等号判定部14、形式変換部15、フラグ適用部16、置換生成部17、中央値計算部18、および出力部19を含む。この秘密計算装置1
n(1≦n≦N)が他の秘密計算装置1
n'(n'=1, …, N、ただしn≠n')と協調しながら後述する各ステップの処理を行うことにより実施形態の秘密集約中央値方法が実現される。
【0017】
秘密計算装置1
nは、例えば、中央演算処理装置(CPU: Central Processing Unit)、主記憶装置(RAM: Random Access Memory)などを有する公知又は専用のコンピュータに特別なプログラムが読み込まれて構成された特別な装置である。秘密計算装置1
nは、例えば、中央演算処理装置の制御のもとで各処理を実行する。秘密計算装置1
nに入力されたデータや各処理で得られたデータは、例えば、主記憶装置に格納され、主記憶装置に格納されたデータは必要に応じて中央演算処理装置へ読み出されて他の処理に利用される。秘密計算装置1
nの各処理部は、少なくとも一部が集積回路等のハードウェアによって構成されていてもよい。
【0018】
図3を参照して、実施形態の秘密集約中央値システム100が実行する秘密集約中央値方法の処理手続きを説明する。
【0019】
ステップS10において、各秘密計算装置1
nの入力部10は、クロス集計v
0∈F
mを秘密分散により秘匿したシェア[v
0]∈[F]
mと、バリュー属性v
1∈F
mを秘密分散により秘匿したシェア[v
1]∈[F]
mと、置換σを秘密分散により秘匿したシェア{{σ}}∈{{S
m}}とを入力として受け取る。ただし、mは2以上の整数である。入力部10は、クロス集計v
0のシェア[v
0]と置換σのシェア{{σ}}とを順位計算部11へ出力する。また、入力部10は、バリュー属性v
1のシェア[v
1]をフラグ適用部16へ出力する。
【0020】
クロス集計v
0は、各グループのレコード数を集計した結果である。例えば、クロス集計v
0は、テーブルをキー属性で安定ソートしたときに同じキー属性の値をもつレコードを同じグループとして、先頭からグループ数までの要素には各グループのレコード数を集計した結果が設定され、それ以降の要素には0が設定されたベクトルである。なお、安定ソートとは、ソート演算のうち、同じ値の要素が存在した場合に、同じ値の要素同士の順序を保存する演算である。例えば、社員番号順でソートされたテーブルに対して性別で安定ソートすると、各性別の中で社員番号順が保たれているソート結果が得られる。以下、[v
0]∈[F]
mの各要素は、[v
0_i]∈[F](i=0, …, m-1)で参照することもある。
【0021】
バリュー属性v
1は、テーブルをバリュー属性とキー属性とで昇順に安定ソートした後のバリュー属性である。すなわち、バリュー属性v
1は、グループ毎にバリュー属性の値で昇順にソートされたものとなっている。以下、[v
1]∈[F]
mの各要素は、[v
1_i]∈[F](i=0, …, m-1)で参照することもある。
【0022】
置換σは、各グループのキー属性の値を先頭から1つずつ並べる置換である。例えば、置換σは、テーブルを所望のバリュー属性とキー属性とに基づいて安定ソートしたときに同じキー属性の値をもつレコードを同じグループとして、各グループの最後の要素が先頭から順に並び、続いて他の要素が順に並ぶように移動する置換である。置換σのシェア{{σ}}は上記参考文献1に記載されたハイブリッド置換{{π}}を用いて構成すればよい。
【0023】
ステップS11において、各秘密計算装置1
nの順位計算部11は、クロス集計v
0のシェア[v
0]と置換σのシェア{{σ}}とを用いて、復元するとグループ内での昇順順位を表すベクトルa:=a
0, …, a
m-1∈Fとなるシェア[a]∈[F]
mおよび復元するとグループ内での降順順位を表すベクトルd:=d
0, …, d
m-1∈Fとなるシェア[d]∈[F]
mを生成する。ここで、昇順順位および降順順位は1スタートとする。順位計算部11は、昇順順位aのシェア[a]と降順順位dのシェア[d]とを減算部12へ出力する。
【0024】
グループ内での昇順順位は、例えば、以下のようにして求めることができる。まず、クロス集計v
0のシェア[v
0]と置換σのシェア{{σ}}とを用いて、復元するとクロス集計v
0に置換σを逆適用した逆置換済みクロス集計v
0':=σ
-1(v
0)となるシェア[v
0']∈[F]
mを生成する。クロス集計v
0は先頭からグループ数までの要素に各グループのレコード数が設定されたベクトルであり、置換σは各グループの最後の要素を先頭から順に並べる置換であるため、クロス集計v
0に置換σを逆適用した逆置換済みクロス集計v
0'は各グループの最後の要素にそのグループのレコード数が設定されたベクトルとなる。以下、[v
0']∈[F]
mの各要素は、[v
0'
i]∈[F](i=0, …, m-1)で参照することもある。次に、逆置換済みクロス集計v
0'のシェア[v
0']を用いて、[s]:=prefix-sum([v
0'])を計算し、復元するとベクトルs:=s
0, …, s
m-1∈Fとなるシェア[s]∈[F]
mを生成する。prefix-sumは、mを入力ベクトルv
0'の長さとして、0以上m-1以下の各整数iについて、出力ベクトルsのi番目の要素s
iには入力ベクトルv
0'の0番目の要素v
0'
0からi番目の要素v
0'
iまでの値の総和を設定する演算である。そして、ベクトルsのシェア[s]を用いて、1以上m-1以下の各整数iについて[a
i]:=[i-s
i-1+1]を設定し、かつ、[a
0]:=[1]を設定して、復元するとグループ内での昇順順位a:=a
0, …, a
m-1∈Fとなるシェア[a]∈[F]
mを生成する。
【0025】
グループ内での降順順位は、例えば、以下のようにして求めることができる。まず、クロス集計v
0のシェア[v
0]を用いて、0以上m-2以下の各整数iについて[v
0"
i]:=[v
0_i+1]を設定し、かつ、[v
0"
m-1]:=[0]を設定して、復元するとシフト済みクロス集計v
0":=v
0"
0, …, v
0"
m-1∈F
mとなるシェア[v
0"]∈[F]
mを生成する。シフト済みクロス集計v
0"は各グループのレコード数を表すベクトルであるクロス集計v
0を一つずつ前方へシフトしたベクトルとなる。次に、シフト済みクロス集計v
0"のシェア[v
0"]と置換σのシェア{{σ}}とを用いて、復元するとシフト済みクロス集計v
0"に置換σを逆適用した逆置換済みクロス集計v
0':=σ
-1(v
0")となるシェア[v
0']∈[F]
mを生成する。シフト済みクロス集計v
0"は先頭からグループ数までの要素に各グループのレコード数が設定されたクロス集計v
0を一つずつ前方へシフトしたベクトルであり、置換σは各グループの最後の要素を先頭から順に並べる置換であるため、シフト済みクロス集計v
0"に置換σを逆適用した逆置換済みクロス集計v
0'は各グループの最後の要素に一つ後方のグループのレコード数が設定されたベクトルとなる。続いて、逆置換済みクロス集計v
0'のシェア[v
0']を用いて、[s']:=postfix-sum([v
0'])を計算し、復元するとベクトルs':=s'
0, …, s'
m-1∈Fとなるシェア[s']∈[F]
mを生成する。postfix-sumは、mを入力ベクトルv
0'の長さとして、0以上m-1以下の各整数iについて、出力ベクトルs'のi番目の要素s'
iには入力ベクトルv
0'のi番目の要素v
0'
iからm-1番目の要素v
0'
m-1までの値の総和を設定する演算である。そして、ベクトルs'のシェア[s']を用いて、0以上m-1以下の各整数iについて[d
i]:=[m-i-s'
i]を設定して、復元するとグループ内での降順順位d:=d
0, …, d
m-1∈Fとなるシェア[d]∈[F]
mを生成する。
【0026】
ステップS12において、各秘密計算装置1
nの減算部12は、まず、昇順順位aのシェア[a]と降順順位dのシェア[d]とを用いて、2
λ>mを満たすλに対して、[2
λ+a-d], [2
λ+d-a]を計算する。次に、減算部12は、[2
λ+a-d], [2
λ+d-a]をλビットにビット分解して、復元するとビット列a-dとなるシェア{a-d}∈{B
λ}
mと、復元するとビット列d-aとなるシェア{d-a}∈{B
λ}
mとを生成する。減算部12は、ビット列a-dのシェア{a-d}とビット列d-aのシェア{d-a}とをビット削除部13へ出力する。
【0027】
ステップS13において、各秘密計算装置1
nのビット削除部13は、a-dのシェア{a-d}とd-aのシェア{d-a}とから最下位ビットを除いて、復元するとa', d'となるシェア{a'},{d'}∈{B
λ-1}
mを生成する。a'はa-dの最下位ビットを除いたビット列であり、d'はd-aの最下位ビットを除いたビット列である。ビット削除部13は、a'のシェア{a'}とd'のシェア{d'}とを等号判定部14へ出力する。
【0028】
ステップS14において、各秘密計算装置1
nの等号判定部14は、a'のシェア{a'}とd'のシェア{d'}とを用いて、{a"}:={|a'=0|}, {d"}:={|d'=0|}を計算し、復元するとフラグa", d"∈B
mとなるシェア{a"}, {d"}∈{B}
mを生成する。なお、|・|は等式・の真偽を返却する記号である。フラグa", d"は、a-d, d-aそれぞれが0以上1以下であるかどうかを表す。さらに、a"はそのレコードが大きい方の中央値であるかどうか、d"はそのレコードが小さい方の中央値であるかどうかを表す。等号判定部14は、フラグa", d"のシェア{a"}, {d"}を形式変換部15および置換生成部17へ出力する。
【0029】
ステップS15において、各秘密計算装置1
nの形式変換部15は、フラグa", d"のシェア{a"}, {d"}∈{B}
mを任意の環F上の秘密分散によるシェア[a"], [d"]∈[F]
mに変換する。形式変換部15は、フラグa", d"のシェア[a"], [d"]をフラグ適用部16へ出力する。
【0030】
ステップS16において、各秘密計算装置1
nのフラグ適用部16は、バリュー属性v
1のシェア[v
1]とフラグa", d"のシェア{a"}, {d"}とを用いて、[v
a]:=[v
1a"], [v
d]:=[v
1d"]を計算し、復元するとベクトルv
a, v
d∈F
mとなるシェア[v
a], [v
d]∈[F]
mを生成する。フラグ適用部16は、ベクトルv
a, v
dのシェア[v
a], [v
d]を中央値計算部18へ出力する。
【0031】
ステップS17において、各秘密計算装置1
nの置換生成部17は、まず、フラグa", d"のシェア{a"}, {d"}を用いて、復元するとフラグa", d"の否定¬a", ¬d"となるシェア{¬a"}, {¬d"}∈{B}
mを生成する。次に、置換生成部17は、フラグa", d"の否定¬a", ¬d"のシェア{¬a"}, {¬d"}を用いて、復元するとフラグa", d"の否定¬a", ¬d"をソートする置換σ
a, σ
dとなるシェア{{σ
a}}, {{σ
d}}∈{{S
m}}を生成する。置換生成部17は、置換σ
a, σ
dのシェア{{σ
a}}, {{σ
d}}を中央値計算部18へ出力する。
【0032】
ステップS18において、各秘密計算装置1
nの中央値計算部18は、ベクトルv
a, v
dのシェア[v
a], [v
d]と置換σ
a, σ
dのシェア{{σ
a}}, {{σ
d}}とを用いて、[x]:=[σ
a(v
a)+σ
d(v
d)]を計算し、復元すると各グループの中央値を表すベクトルxとなるシェア[x]∈[F]
mを生成する。中央値計算部18は、中央値xのシェア[x]を出力部19へ出力する。
【0033】
ステップS19において、各秘密計算装置1
nの出力部19は、中央値xのシェア[x]を出力する。
【0034】
<変形例>
上記の実施形態では、入力部10へクロス集計v
0のシェア[v
0]とバリュー属性v
1のシェア[v
1]と置換σのシェア{{σ}}とが入力される構成を説明した。変形例では、入力部10へテーブルを秘密分散等により秘匿したシェアが入力され、クロス集計v
0のシェア[v
0]と置換σのシェア{{σ}}とを求めてから、上記の実施形態で説明した手順に従ってgroup-by中央値を計算する構成を説明する。
【0035】
変形例の秘密計算装置2
n(n=1, …, N)は、例えば、
図4に示すように、実施形態の秘密計算装置1
n(n=1, …, N)が備える各処理部に加えて、ビット分解部21、グループソート生成部22、ビット列ソート部23、フラグ生成部24、キー集約ソート生成部25、バリューソート部26、フラグ変換部31、境界番号設定部32、ソート部33、およびカウント計算部34を含む。以下、実施形態の秘密集約中央値システム100と異なる点についてのみ説明する。
【0036】
各秘密計算装置2
nの入力部10は、n
k個のキー属性k
0, …, k
nk-1∈F
mそれぞれを秘密分散により秘匿したシェア[k
0], …, [k
nk-1]∈[F]
mと、n
a個のバリュー属性v
0, …, v
na-1∈F
mそれぞれを秘密分散により秘匿したシェア[v
0], …, [v
na-1]∈[F]
mとを入力として受け取る。ただし、n
k, n
aは1以上の整数である。また、バリュー属性v'
0, …, v'
na-1のうち中央値を求めたい所望のバリュー属性v
1は昇順でソート済みであるものとする。以下、[k
j]∈[F]
m(j=0, …, n
k-1)の各要素は、[k
j,i]∈[F](i=0, …, m-1)で参照することもある。入力部10は、キー属性k
0, …, k
nk-1のシェア[k
0], …, [k
nk-1]をビット分解部21へ出力する。
【0037】
各秘密計算装置2
nのビット分解部21は、キー属性k
0, …, k
nk-1のシェア[k
0], …, [k
nk-1]をビット分解して結合し、復元するとキー属性k
0, …, k
nk-1のビット表現を結合したビット列b:=b
0, …, b
m-1∈B
λとなるシェア{b}∈{B}
λを得る。ただし、λはビット列bのビット長であり、各b
i(i=0, …, m-1)のビット長の総和である。言い替えると、{b
i}は、キー属性k
0, …, k
nk-1のシェア[k
0], …, [k
nk-1]それぞれのi番目の要素[k
0,i], …, [k
nk-1,i]のビット表現を結合したビット列である。ビット分解部21は、ビット列bのシェア{b}をグループソート生成部22へ出力する。
【0038】
各秘密計算装置2
nのグループソート生成部22は、ビット列bのシェア{b}を用いて、復元するとビット列bを昇順で安定ソートするための置換σ
0となるシェア{{σ
0}}∈{{S
m}}を生成する。ビット列bはキー属性k
0, …, k
nk-1のビット表現を結合したものであるため、置換σ
0はキー属性k
0, …, k
nk-1の値が等しいレコードを連続するように並び替えてグループ分けする操作であるとも言える。グループソート生成部22は、ビット列bのシェア{b}と置換σ
0のシェア{{σ
0}}とをビット列ソート部23へ出力する。また、グループソート生成部22は、置換σ
0のシェア{{σ
0}}をバリューソート部26へ出力する。
【0039】
各秘密計算装置2
nのビット列ソート部23は、ビット列bのシェア{b}と置換σ
0のシェア{{σ
0}}とを用いて、復元するとビット列bを置換σ
0でソートしたソート済みビット列b':=b'
0, …, b'
m-1∈B
λとなるシェア{b'}∈{B}
λを得る。ビット列ソート部23は、ソート済みビット列b'のシェア{b'}をフラグ生成部24へ出力する。
【0040】
各秘密計算装置2
nのフラグ生成部24は、ソート済みビット列b'のシェア{b'}を用いて、0以上m-2以下の各整数iについて{e
i}:={b'
i≠b'
i+1}を設定し、かつ、{e
m-1}:={1}を設定して、復元するとフラグe:=e
0, …, e
m-1∈B
mとなるシェア{e}∈{B}
mを生成する。フラグe
iはソート済みビット列b'のi番目の要素b'
iがi+1番目の要素b'
i+1と異なる場合に真が設定されるため、各グループの最後の要素(すなわち、グループ間の境界の直前の要素)を示すフラグとなる。フラグ生成部24は、フラグeのシェア{e}をキー集約ソート生成部25およびフラグ変換部31へ出力する。
【0041】
各秘密計算装置2
nのキー集約ソート生成部25は、まず、フラグeのシェア{e}を用いて、復元するとフラグeの否定¬eであるフラグe'となるシェア{e'}∈{B}
mを生成する。すなわち、0以上m-1以下の各整数iについて{e'
i}:={¬e
i}を設定する。次に、キー集約ソート生成部25は、フラグe'のシェア{e'}を用いて、復元するとフラグe'を昇順に安定ソートするための置換σとなるシェア{{σ}}∈{{S
m}}を生成する。キー集約ソート生成部25は、置換σのシェア{{σ}}をソート部33へ出力する。また、キー集約ソート生成部25は、置換σのシェア{{σ}}を順位計算部11へ出力する。
【0042】
各秘密計算装置2
nのバリューソート部26は、バリュー属性v
0, …, v
na-1のシェア[v
0], …, [v
na-1]と置換σ
0のシェア{{σ
0}}とを用いて、復元するとバリュー属性v
0, …,v
na-1を置換σ
0でソートしたソート済みバリュー属性v'
0, …, v'
na-1となるシェア[v'
0], …, [v'
na-1]を生成する。バリューソート部26は、ソート済みバリュー属性v'
0, …, v'
na-1のシェア[v'
0], …, [v'
na-1]のうち中央値を求めたいものを所望のバリュー属性v
1のシェア[v
1]としてフラグ適用部16へ出力する。
【0043】
各秘密計算装置2
nのフラグ変換部31は、フラグeのシェア{e}∈{B}
mを任意の環F上の秘密分散によるシェア[e]∈[F]
mに変換する。フラグ変換部31は、フラグeのシェア[e]を境界番号設定部32へ出力する。
【0044】
各秘密計算装置2
nの境界番号設定部32は、フラグeのシェア[e]を用いて、0以上m-1以下の各整数iについて[x'
i]:=[e
i?i+1:m]を設定し、復元するとベクトルx':=x'
0, …, x'
m-1∈Fとなるシェア[x']∈[F]
mを生成する。ここで、「?」は条件演算子(または三項演算子)である。すなわち、[e
i]が真(例えば、[e
i]=[1])のときは[x'
i]:=[i+1]を設定し、[e
i]が偽(例えば、[e
i]=[0])のときは[x'
i]:=[m]を設定する。ベクトルx'は、テーブルをキー属性で安定ソートしたときに同じキー属性の値をもつレコードを同じグループとして、各グループの最後の要素には次の要素の先頭からの位置が設定され、その他の要素にはテーブル全体のレコード数が設定されたベクトルとなる。言い替えると、各グループの最後の要素には、先頭のグループからそのグループまでの各グループのレコード数を積み上げた合計値が設定されることになる。境界番号設定部32は、ベクトルx'のシェア[x']をソート部33へ出力する。
【0045】
各秘密計算装置2
nのソート部33は、ベクトルx'のシェア[x']と置換σのシェア{{σ}}とを用いて、復元するとベクトルx'を置換σでソートしたソート済みベクトルσ(x')となるシェア[σ(x')]∈[F]
mを生成する。以下、[σ(x')]∈[F]
mの各要素は、[σ(x')
i]∈[F](i=0, …, m-1)で参照することもある。ソート部33は、ソート済みベクトルσ(x')のシェア[σ(x')]をカウント計算部34へ出力する。
【0046】
各秘密計算装置2
nのカウント計算部34は、ソート済みベクトルσ(x')のシェア[σ(x')]を用いて、1以上min(g,m)-1以下の各整数iについて[v
0_i]:=[σ(x')
i-σ(x')
i-1]を設定し、かつ、min(g,m)以上m-1以下の各整数iについて[v
0_i]:=[0]を設定し、かつ、[v
0_0]:=[σ(x')
0]を設定して、復元すると各グループのレコード数(すなわち、クロス集計)を表すベクトルv
0:=v
0_0, …, v
0_m-1∈Fとなるシェア[v
0]∈[F]
mを生成する。ソート済みベクトルσ(x')のi番目の要素σ(x')
iは、0番目からi番目までの各グループのレコード数を積み上げた合計値が設定されているため、クロス集計v
0のi番目の要素v
0_iには、i番目のグループのレコード数が設定されることになる。カウント計算部34は、クロス集計v
0のシェア[v
0]を順位計算部11へ出力する。
【0047】
以上、この発明の実施の形態について説明したが、具体的な構成は、これらの実施の形態に限られるものではなく、この発明の趣旨を逸脱しない範囲で適宜設計の変更等があっても、この発明に含まれることはいうまでもない。実施の形態において説明した各種の処理は、記載の順に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。
【0048】
[プログラム、記録媒体]
上記実施形態で説明した各装置における各種の処理機能をコンピュータによって実現する場合、各装置が有すべき機能の処理内容はプログラムによって記述される。そして、このプログラムをコンピュータで実行することにより、上記各装置における各種の処理機能がコンピュータ上で実現される。
【0049】
この処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、例えば、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリ等どのようなものでもよい。
【0050】
また、このプログラムの流通は、例えば、そのプログラムを記録したDVD、CD-ROM等の可搬型記録媒体を販売、譲渡、貸与等することによって行う。さらに、このプログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することにより、このプログラムを流通させる構成としてもよい。
【0051】
このようなプログラムを実行するコンピュータは、例えば、まず、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、一旦、自己の記憶装置に格納する。そして、処理の実行時、このコンピュータは、自己の記憶装置に格納されたプログラムを読み取り、読み取ったプログラムに従った処理を実行する。また、このプログラムの別の実行形態として、コンピュータが可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することとしてもよく、さらに、このコンピュータにサーバコンピュータからプログラムが転送されるたびに、逐次、受け取ったプログラムに従った処理を実行することとしてもよい。また、サーバコンピュータから、このコンピュータへのプログラムの転送は行わず、その実行指示と結果取得のみによって処理機能を実現する、いわゆるASP(Application Service Provider)型のサービスによって、上述の処理を実行する構成としてもよい。なお、本形態におけるプログラムには、電子計算機による処理の用に供する情報であってプログラムに準ずるもの(コンピュータに対する直接の指令ではないがコンピュータの処理を規定する性質を有するデータ等)を含むものとする。
【0052】
また、この形態では、コンピュータ上で所定のプログラムを実行させることにより、本装置を構成することとしたが、これらの処理内容の少なくとも一部をハードウェア的に実現することとしてもよい。