【文献】
谷口秀夫,IT TEXT 分散処理,第1版,株式会社オーム社,2005年09月15日,pp. 78-86
(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0008】
以下、図面を参照して本発明の実施形態を説明する。
<構成>
図1に例示するように、本形態の合意プロトコルを実行する合意システム1は、ネットワークを通じて通信可能なn個の合意装置10−P(0),…,10−P(n−1)を有する自律分散システムである。ただし、nが3以上の整数(例えば、n≧4)、i=0,…,n−1、j=0,…,n−1、r=0,…,n−1、m=0,…,n−1、i≠j、m≠i、m≠jである。
図2に例示するように、合意装置10−P(r)は、通信部11−P(r)、記憶部12−P(r)、共有部13−P(r)、署名生成部14−P(r)、署名検証部15−P(r)、判定部16−P(r)、判定部17−P(r)、意見値出力部18−P(r)、および制御部19−P(r)を有する。各合意装置10−P(r)は、制御部19−P(r)の制御に基づいて各処理を実行する。
【0009】
<提供処理>
次に、
図3および
図5を用い、各合意装置10−P(r)(ただし、r=0,…,n−1)が自らの意見を表す意見値x
rを提供する提供処理を説明する。意見値x
rは合意装置10−P(0),…,10−P(n−1)で互いに整合させる必要のある処理内容を表す。意見値x
rの一例は処理順序を表す意見を表す値である。例えば、合意装置10−P(A)から「値Dを11に更新する」というリクエストR
Aが送信され、合意装置10−P(B)から「値Dを9に更新する」というリクエストR
Bが送信される場合(ただし、A,B∈{0,…,n−1})、リクエストR
Aを処理してからリクエストR
Bを処理するといった意見を表す意見値x
r=((A,update,D,11),(B,update,D,9))、およびリクエストR
Bを処理してからリクエストR
Aを処理するといった意見を表す意見値x
r=((B,update,D,9),(A,update,D,11))を例示できる。このような意見値x
rに対して合意がなされれば、システム全体で処理順序を統一できる。他の意見値x
rの例はリクエストが送られたことを表す値である。例えば、合意装置10−P(A)から「値Dを11に更新する」というリクエストR
Aが送信され、合意装置10−P(B)から「値Dを9に更新する」というリクエストR
Bが送信される場合、リクエストR
AおよびR
Bが送られたことを表す意見値x
r=((A,update,D,11),(B,update,D,9))、リクエストR
Aしか送られなかったことを表す意見値x
r=(A,update,D,11)などを例示できる。このような意見値x
rを用いることにより、リクエストが各装置に正しく提供されたことを確認できる。他の意見値x
rの例はリクエストの内容を表す値である。例えば、合意装置10−P(A)から「値Dを11に更新する」というリクエストR
Aが送信される場合、「値Dを11に更新する」という内容のリクエストR
Aが送られたことを表すx
r=(A,update,D,11)や「値Dを9に更新する」という内容のリクエストR
Aが送られたことを表すx
r=(A,update,D,9)を例示できる。このような意見値x
rを用いることにより、システム全体で各合意装置に同一のリクエストが提供されたかを確認できる。
【0010】
≪ステップS1≫
前提として、各合意装置10−P(i)(ただし、i=0,…,n−1)には、署名生成のための署名生成鍵sk
i、および署名生成鍵sk
iを用いて生成された署名を検証するための署名検証鍵k
iが設定されている。署名生成鍵sk
iおよび署名検証鍵k
iは合意装置10−P(i)の記憶部12−P(i)に格納されている。署名生成鍵sk
iは合意装置10−P(i)の秘密情報であり、署名検証鍵k
iは公開情報である。署名生成鍵sk
iの例は公開鍵暗号方式(例えば、RSA)に則った秘密鍵であり、署名検証鍵k
iの例は当該公開鍵暗号方式に則った公開鍵である。この場合の署名生成鍵sk
iおよび署名検証鍵k
iは公開鍵暗号方式における鍵ペアである。この前提の下、合意装置10−P(i)(ただし、i=0,…,n−1)の共有部13−P(i)が、合意装置10−P(i)(ただし、i=0,…,n−1)以外の合意装置10−P(j)(ただし、j=0,…,n−1、j≠i)の共有部13−P(
j)との間で署名検証鍵k
iを共有する。共有部13−P(i)と共有部13−P(j)との間での署名検証鍵k
iの共有は、例えば、共有部13−P(i)から共有部13−P(j)に署名検証鍵k
iまたは署名検証鍵k
iに対応する値を送信することで行われる。あるいは、ネットワーク上の公開されたサーバ装置に署名検証鍵k
iまたは署名検証鍵k
iに対応する情報を格納しておき、各共有部13−P(j)がこのサーバ装置から署名検証鍵k
iまたは署名検証鍵k
iに対応する情報を受信してもよい。署名検証鍵k
iは合意装置10−P(j)の記憶部12−P(j)に格納される。これにより、各合意装置10−P(j)(ただし、j=0,…,n−1、j≠i)の記憶部12−P(j)には、自らの署名生成鍵sk
jおよび署名検証鍵k
jに加え、n−1個の他の合意装置10−P(i)の署名検証鍵k
i(ただし、i=0,…,n−1、i≠j)が格納される。例えばn=3の場合、合意装置10−P(0)の記憶部12−P(0)にsk
0,k
0,k
1,k
2が格納され、合意装置10−P(1)の記憶部12−P(1)にsk
1,k
0,k
1,k
2が格納され、合意装置10−P(2)の記憶部12−P(2)にsk
2,k
0,k
1,k
2が格納される(
図5A)。次にステップS2に進む。
【0011】
≪ステップS2≫
合意装置10−P(i)(ただし、i=0,…,n−1)の署名生成部14−P(i)には、意見を表す意見値x
i、ならびに記憶部12−P(i)から読み込んだ署名生成鍵sk
iが入力される。合意装置10−P(i)は正当な処理を行うかもしれないし、不正な処理を行うかもしれない。合意装置10−P(i)が正当な処理を行う場合、署名生成部14−P(i)は、意見値x
iと、署名生成鍵sk
iを用いて意見値x
iに対して付した署名sig
_i(x
i)と、を含む署名付き意見値X
ij=(x
i,sig
_i(x
i))を生成し、当該意見値X
ijを署名付き意見値X’
ij=(x’
ij,e’
ij)として出力する。なお、署名生成鍵sk
iが公開鍵暗号方式に則った秘密鍵である場合、署名sig
_i(x
i)は、例えば署名生成鍵sk
iを用い、公開鍵暗号方式に則って意見値x
iを暗号化して得られる暗号文である。一方、合意装置10−P(i)が不当な処理を行う場合、署名生成部14−P(i)は、署名付き意見値X
ijとは異なる情報を、署名付き意見値X’
ij=(x’
ij,e’
ij)として生成して出力する。署名付き意見値X’
ijは通信部11−P(i)に送られる。
【0012】
≪ステップS3≫
正当な処理を行う合意装置10−P(i)(ただし、i=0,…,n−1)の通信部11−P(i)(第1出力部)は、n−1個の合意装置10−P(j)(ただし、j=0,…,n−1、j≠i)に対して署名付き意見値X’
ij=(x’
ij,e’
ij)を出力する。例えば、n=3の場合、合意装置10−P(0)は署名付き意見値X’
01を合意装置10−P(1)に送信し、署名付き意見値X’
02を合意装置10−P(2)に送信し、合意装置10−P(1)は署名付き意見値X’
10を合意装置10−P(0)に送信し、署名付き意見値X’
12を合意装置10−P(2)に送信し、合意装置10−P(2)は署名付き意見値X’
20を合意装置10−P(0)に送信し、署名付き意見値X’
21を合意装置10−P(1)に送信する(
図5A)。合意装置10−P(i)が正当な処理を実行する場合、X’
ij=(x’
ij,e’
ij)=X
ij=(x
i,sig
_i(x
i)))である。不正な処理を行う合意装置10−P(i)の通信部11−P(i)は署名付き意見値X
ij=(x
i,sig
_i(x
i))とは異なる情報を署名付き意見値X’
ij=(x’
ij,e’
ij)として合意装置10−P(j)に対して出力する。すなわち、通信部11−P(i)は、署名付き意見値X
ij=(x
i,sig
_i(x
i))または署名付き意見値X
ijとは異なる情報を、署名付き意見値X’
ij=(x’
ij,e’
ij)として合意装置10−P(j)に対して出力する。不正な処理を行う合意装置10−P(i)の通信部11−P(i)は、署名付き意見値X’
ij=(x’
ij,e’
ij)を、少なくとも一部の合意装置10−P(j)に出力しないかもしれない。
【0013】
≪ステップS4≫
合意装置10−P(i)から出力された署名付き意見値X’
ijは、ネットワークを通じて合意装置10−P(j)(ただし、j=0,…,n−1、j≠i)に送信される。署名付き意見値X’
ijは、合意装置10−P(j)の通信部11−P(j)(第1入力部)に入力され(受け付けられ)、記憶部12−P(j)に格納される。例えば、n=3の場合、合意装置10−P(0)の記憶部12−P(0)に署名付き意見値X’
10および署名付き意見値X’
20が格納され、合意装置10−P(1)の記憶部12−P(1)に署名付き意見値X’
01および署名付き意見値X’
21が格納され、合意装置10−P(2)の記憶部12−P(2)に署名付き意見値X’
02および署名付き意見値X’
12が格納される(
図5B)。
【0014】
≪ステップS5≫
正当な処理を行う合意装置10−P(j)(ただし、j=0,…,n−1、j≠i)の通信部11−P(j)(第2出力部)は、署名付き意見値X”
ij=(x”
ij,e”
ij)(ただし、i=0,…,n−1、i≠j)をn−1個の合意装置10−P(m)(ただし、m=0,…,n−1、m≠j)に対して出力する。合意装置10−P(j)が正当な処理を実行する場合、署名付き意見値X”
ijは記憶部12−P(j)に格納されたX’
ijであり、X”
ij=(x”
ij,e”
ij)=X’
ij=(x’
ij,e’
ij)である。ただし、何れかの合意装置10−P(j)が不正な処理を行う可能性があり、不正な処理を行う合意装置10−P(j)の通信部11−P(j)は署名付き意見値X’
ij=(x’
ij,e’
ij)とは異なる情報を署名付き意見値X”
ij=(x”
ij,e”
ij)として合意装置10−P(m)に対して出力する。すなわち、通信部11−P(j)は、署名付き意見値X’
ij=(x’
ij,e’
ij)または署名付き意見値X’
ijとは異なる情報を、署名付き意見値X”
ij=(x”
ij,e”
ij)として合意装置10−P(m)に対して出力する。通信部11−P(j)から合意装置10−P(m)に対して出力されるn−1個の署名付き意見値X”
0j,…,X”
(j−1)j,X”
(j+1)j,…,X”
(n−1)jの集合を確認データC
j=X”
0j,…,X”
(j−1)j,X”
(j+1)j,…,X”
(n−1)jと表現する。例えば、n=3の場合、通信部11−P(0)は、確認データC
0=X”
10,X”
20を合意装置10−P(1)およびP(2)に対して出力し、通信部11−P(1)は、確認データC
1=X”
01,X”
21を合意装置10−P(0)およびP(2)に対して出力し、通信部11−P(2)は、確認データC
2=X”
02,X”
12を合意装置10−P(0)およびP(1)に対して出力する(
図5B)。不正な処理を行う合意装置10−P(j)(ただし、j=0,…,n−1、j≠i)の通信部11−P(j)は、確認データC
jを、少なくとも一部の合意装置10−P(m)に対して出力しないかもしれない。
【0015】
≪ステップS6≫
通信部11−P(j)から出力された確認データC
jは、ネットワークを通じて合意装置10−P(m)(ただし、m=0,…,n−1、m≠j)に送信される。確認データC
jは、合意装置10−P(m)の通信部11−P(m)(第2入力部)に入力され(受け付けられ)、記憶部12−P(m)に格納される。例えば、n=3の場合、記憶部12−P(0)に確認データC
1=X”
01,X”
21およびC
2=X”
02,X”
12が格納され、記憶部12−P(1)に確認データC
0=X”
10,X”
20およびC
2=X”
02,X”
12が格納され、記憶部12−P(2)に確認データC
0=X”
10,X”
20およびC
1=X”
01,X”
21が格納される(
図5B)。
【0016】
<検証処理>
次に、
図4および
図5Bを用い、各合意装置10−P(m)(ただし、m=0,…,n−1)が行う意見値の検証処理を説明する。ただし、不正を行う合意装置の個数が1個以下であることを前提とする。検証処理は上述した提供処理の後に実行される。検証処理は提供処理が行われたことを契機として実行されてもよいし、提供処理の後の所定のタイミングで実行されてもよい。検証処理はすべての合意装置10−P(0),…,10−P(n−1)が行ってもよいし、その一部のみが行ってもよい。
【0017】
≪ステップS11≫
まず、合意装置10−P(m)の制御部19−P(m)が判定対象に対応するインデックスi∈{0,…,n−1}を初期化する。例えば、m=0ならば制御部19−P(m)はi=0に初期化し、
m=0ならば制御部19−P(m)はi=1に初期化する。
【0018】
≪ステップS12≫
合意装置10−P(m)の署名検証部15−P(m)は、記憶部12−P(m)から、確認データC
0,…,C
n−1に含まれる、インデックスiについての署名付き意見値X”
i0,…,X”
i(i―1),X”
i(i+1),…,X”
i(n−1)、ならびに署名検証鍵k
i(ただし、i=0,…,n−1,i≠j)を読み込み、これらを用いて署名付き意見値X”
i0,…,X”
i(i―1),X”
i(i+1),…,X”
i(n−1)のそれぞれに対する署名検証を行い、それらの結果V(X”
i0),…,V(X”
i(i―1)),V(X”
i(i+1)),…,V(X”
i(n−1))を出力する。すなわち、署名検証部15−P(m)は、通信部11−P(m)(第2入力部)で受け付けられた(入力された)署名付き意見値X”
ijが合意装置10−P(i)に対応する署名検証鍵k
iに対して正しい関係にある場合(署名正当の場合)に、署名付き意見値X”
ijに対する署名検証の結果が合格であると判定し、その旨を表す結果V(X”
ij)=OKを出力する。それ以外の場合、署名検証部15−P(m)は、署名付き意見値X”
ijに対する署名検証の結果が不合格であると判定し、その旨を表す結果V(X”
ij)=NGを出力する。例えば、署名検証部15−P(m)は、通信部11−P(m)に署名付き意見値X”
ijが受け付けられなかった場合(入力されなかった場合)、通信部11−P(m)受け付けられた署名付き意見値X”
ijの形式が規定のものではなかった場合、または、通信部11−P(m)に受け付けられた署名付き意見値X”
ijが署名検証鍵k
iに対して正しい関係にない場合(署名不正の場合)に、署名付き意見値X”
ijに対する署名検証の結果が不合格であると判定し、その旨を表すV(X”
ij)=NGを出力する。
【0019】
署名検証鍵k
iが公開鍵暗号方式に則った公開鍵である場合、署名付き意見値X”
ijが署名検証鍵k
iに対して正しい関係にあるか否か(署名正当か署名不正か)の判定は、例えば次のように行う。まず、署名検証部15−P(m)は、前述の公開鍵暗号方式に則って、署名付き意見値X”
ij=(x”
ij,e”
ij)に含まれた暗号文e”
ijを、署名検証鍵k
iを用いて復号して復号結果x”
i=dec
k_i(e”
ij)を得る。ここで、署名付き意見値X”
ijが正しく生成されたものであれば、X”
ij=(x”
ij,e”
ij)=(x
i,sig
_i(x
i))であり、x”
i=dec
k_i(e”
ij)=dec
k_i(sig
_i(x
i))=x
iとなる。次に署名検証部15−P(m)は、x”
ij=x”
iを満たすか否かを判定する。ここで、x”
ij=x”
iを満たす場合には、署名検証部15−P(m)は、署名付き意見値X”
ijが署名検証鍵k
iに対して正しい関係にある(署名正当)と判断する。一方、x”
ij=x”
iを満たさない場合(x”
ij≠x”
i)には、署名検証部15−P(m)は、署名付き意見値X”
ijが署名検証鍵k
iに対して正しい関係にない(署名不正)と判断する。
【0020】
例えば、n=3かつi=1の場合、署名検証部15−P(0)は、署名付き意見値X”
12に対する署名検証を行ってその結果V(X”
12)を出力し、n=3かつi=0の場合、署名検証部15−P(1)は、署名付き意見値X”
02に対する署名検証を行ってその結果V(X”
02)を出力し、n=3かつi=0の場合、署名検証部15−P(2)は、署名付き意見値X”
01に対する署名検証を行ってその結果V(X”
01)を出力する(
図5B)。
【0021】
≪ステップS13≫
インデックスiについての署名付き意見値X”
ijおよび合意装置10−P(m)から出力されたインデックスiについての署名検証の結果V(X”
ij)(ただし、j=0,…,n−1、j≠i)は判定部16−P(m)(第1判定部)に入力される。さらに判定部16−P(m)には、記憶部12−P(m)から読み出されたインデックスiについての署名付き意見値X’
imが入力される。署名付き意見値X’
im=(x’
im,e’
im)は前述のステップS4で合意装置10−P(i)から合意装置10−P(m)に送信され、記憶部12−P(m)に格納されたものである。判定部16−P(m)は、以下の(1−1)および(1−2)の少なく一方に該当するかを判定する。
(1−1)署名付き意見値X”
ijのうち、少なくとも何れかの2個の署名付き意見値X”
iy=(x”
iy,e”
iy)および署名付き意見値X”
iz=(x”
iz,e”
iz)(ただし、y,z∈{0,…,i−1,i+1,…,n−1}かつy≠z)に対する署名検証の結果が合格(V(X”
iy)=V(X”
iz)=OK)であり、かつ、署名付き意見値X”
iyに含まれた意見値x”
iyと、署名付き意見値X”
izに含まれた意見値x”
izと、が互いに相違する(x”
iy≠x”
iz)。
(1−2)署名付き意見値X”
iy=(x”
iy,e”
iy)に対する署名検証の結果が合格(V(X”
iy)=OK)であり、かつ、署名付き意見値X”
iyに含まれた意見値x”
iyと、署名付き意見値X’
im=(x’
im,e’
im)に含まれた意見値x’
imと、が互いに相違する(x”
iy≠x’
im)。
【0022】
ステップS13で(1−1)および(1−2)の少なく一方に該当すると判定された場合、判定部16−P(m)は、合意装置10−P(i)に不正があったと判定し、その旨を出力する。すなわち、(1−1)に該当するのは、X”
iy=X
iyかつX”
iz=X
izであり、これらが合意装置10−P(i)で生成されたものである場合である。しかし、本来x”
iy=x”
iz=x
iであるはずがx”
iy≠x”
izとなっている。このような不正を行うことが可能なのは、署名を生成した合意装置10−P(i)のみである。よって、合意装置10−P(i)に不正があったと判定できる。また、(1−2)に該当するのは、署名付き意見値X”
iy=X
iyであり、この署名が合意装置10−P(i)で生成されたものである場合である。しかし、本来x”
iy=x’
im=x
iであるはずがx”
iy≠x’
imとなっている。このような不正は合意装置10−P(i)が署名付き意見値X’
iyを生成するときに行ったか、または、前述のステップS4で合意装置10−P(i)が合意装置10−P(m)に署名付き意見値X’
imを送る際に行ったものである。よって、合意装置10−P(i)に不正があったと判定できる。合意装置10−P(i)に不正があった旨が出力された場合、検証処理が終了となる(ステップS15)。
【0023】
≪ステップS14≫
一方、ステップS13で(1−1)および(1−2)のいずれにも該当しないと判定された場合、インデックスiについての署名付き意見値X”
ijおよび合意装置10−P(m)から出力されたインデックスiについての署名検証の結果V(X”
ij)(ただし、j=0,…,n−1、j≠i)が判定部17−P(m)(第2判定部)に入力される。判定部17−P(m)は、以下の(2−1)に該当するかを判定する。
(2−1)署名付き意見値X”
ijのうち、少なくとも何れかの2個の署名付き意見値X”
iy=(x”
iy,e”
iy)および署名付き意見値X”
iz=(x”
iz,e”
iz)(ただし、y,z∈{0,…,i−1,i+1,…,n−1}かつy≠z)に対する署名検証の結果が不合格(V(X”
iy)=V(X”
iz)=NG)である。
【0024】
ステップS14で(2−1)に該当すると判定された場合、判定部16−P(m)は、合意装置10−P(i)に不正があったと判定し、その旨を出力する。すなわち、(2−1)に該当するのは、合意装置10−P(i)がステップS3で不正な署名付き意見値X’
iy≠(x
i,sig
_i(x
i))および署名付き意見値X’
iz≠(x
i,sig
_i(x
i))を出力していたか、または、少なくとも二つの合意装置10−P(y)および10−P(z)がステップS5で不正な署名付き意見値X”
iy≠X’
iy=(x
i,sig
_i(x
i))および署名付き意見値X”
iz≠X’
iz=(x
i,sig
_i(x
i))を出力していた場合である。しかし、不正を行う合意装置の個数が1個以下であるとの前提のもとでは、後者は除外され、合意装置10−P(i)に不正があったと判定できる。合意装置10−P(i)に不正があった旨が出力された場合、検証処理が終了となる(ステップS15)。
【0025】
≪ステップS16≫
ステップS14で(2−1)に該当しないと判定された場合、意見値出力部18−P(m)は、記憶部12−P(m)から何れかの署名付き意見値X”
ij=(x”
ij,e”
ij)を抽出し、それが含む意見値x”
ijを合意装置10−P(i)の正当な意見値x
iとして出力する(ステップS16)。
【0026】
≪ステップS17≫
次に、制御部19−P(m)はmを除くすべてのi∈{0,…,n−1}について判定(ステップS12〜S16)を終了したかを判定する(ステップS17)。mを除くすべてのi∈{0,…,n−1}について判定が終了した場合には検証処理を終了する。一方、mを除くすべてのi∈{0,…,n−1}について判定が終了していない場合、制御部19−P(m)はインデックスiをまだ選択されていない値に更新して処理をステップS12に戻す(ステップS18)。
【0027】
[変形例等]
なお、本発明は上述の実施形態に限定されるものではない。例えば、上述の検証処理は不正を行う合意装置の個数が1個以下であることを前提としたが、この前提がなくても本発明を適用することは可能である。この場合には、ステップS13で(1−1)および(1−2)の少なく一方に該当すると判定されたときには合意装置10−P(i)に不正があったと判定することはできるが、ステップS14で(2−1)に該当すると判定された場合でも、直ちに合意装置10−P(i)に不正があったと判定することはできない。しかし、この場合でも少なくとも不正があったことを検知することができ、不正を行った装置をある程度特定することはできる。また、ステップS13およびS14の何れか一方のみが実行されてもよい。
【0028】
また、判定部16−P(m)または17−P(m)が、さらに、ステップS4において通信部11−P(m)で署名付き意見値X’
imが受け付けられなかった場合(入力されなかった場合)、または、受け付けられたX’
imの形式が規定のものではなかった場合に、合意装置10−P(i)に不正があったと判定し、その旨を出力してもよい。また、上述の実施形態では公開鍵暗号方式を用いて署名を生成したが、共通鍵暗号方式を用いて署名を生成してもよい。
【0029】
また、上述の実施形態では合意システム1が自律分散システムであったが、集中管理システムであってもよい。上述の各種の処理は、記載に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。その他、本発明の趣旨を逸脱しない範囲で適宜変更が可能であることはいうまでもない。
【0030】
上記の各装置は、例えば、CPU(central processing unit)等のプロセッサ(ハードウェア・プロセッサ)およびRAM(random-access memory)・ROM(read-only memory)等のメモリ等を備える汎用または専用のコンピュータが所定のプログラムを実行することで構成される。このコンピュータは1個のプロセッサやメモリを備えていてもよいし、複数個のプロセッサやメモリを備えていてもよい。このプログラムはコンピュータにインストールされてもよいし、予めROM等に記録されていてもよい。また、CPUのようにプログラムが読み込まれることで機能構成を実現する電子回路(circuitry)ではなく、プログラムを用いることなく処理機能を実現する電子回路を用いて一部またはすべての処理部が構成されてもよい。1個の装置を構成する電子回路が複数のCPUを含んでいてもよい。
【0031】
上述の構成をコンピュータによって実現する場合、各装置が有すべき機能の処理内容はプログラムによって記述される。このプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。この処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体の例は、非一時的な(non-transitory)記録媒体である。このような記録媒体の例は、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリ等である。
【0032】
このプログラムの流通は、例えば、そのプログラムを記録したDVD、CD−ROM等の可搬型記録媒体を販売、譲渡、貸与等することによって行う。さらに、このプログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することにより、このプログラムを流通させる構成としてもよい。
【0033】
このようなプログラムを実行するコンピュータは、例えば、まず、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、一旦、自己の記憶装置に格納する。処理の実行時、このコンピュータは、自己の記憶装置に格納されたプログラムを読み取り、読み取ったプログラムに従った処理を実行する。このプログラムの別の実行形態として、コンピュータが可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することとしてもよく、さらに、このコンピュータにサーバコンピュータからプログラムが転送されるたびに、逐次、受け取ったプログラムに従った処理を実行することとしてもよい。サーバコンピュータから、このコンピュータへのプログラムの転送は行わず、その実行指示と結果取得のみによって処理機能を実現する、いわゆるASP(Application Service Provider)型のサービスによって、上述の処理を実行する構成としてもよい。
【0034】
コンピュータ上で所定のプログラムを実行させて本装置の処理機能が実現されるのではなく、これらの処理機能の少なくとも一部がハードウェアで実現されてもよい。