以下、本実施の形態を図面を参照して説明する。
[第1の実施の形態]
第1の実施の形態を説明する。
図1は、第1の実施の形態の承認システムの例を示す図である。
第1の実施の形態の承認システム10は、取引承認手続を管理する情報処理システムである。承認システム10は、ストレージ装置11および処理装置13を含む。ストレージ装置11および処理装置13は、1以上のユーザが属する所定のグループ(依頼先グループ)によって使用されている。依頼先グループは、例えば、企業などの組織である。ストレージ装置11および処理装置13は、依頼先グループによって所有されていてもよい。ストレージ装置11は、ネットワークを介してストレージ装置12と通信することができる。ストレージ装置12は、依頼先グループに属していない他のユーザから参照可能なストレージ装置である。ストレージ装置12は、1以上の他のユーザが属する他のグループ(依頼元グループ)によって使用されていてもよく、依頼元グループによって所有されていてもよい。依頼元グループは、例えば、企業などの組織である。
ストレージ装置11は、記憶装置を有するサーバ装置である。記憶装置は、例えば、HDD(Hard Disk Drive)やフラッシュメモリなどの不揮発性の記憶装置である。ストレージ装置11は、CPU(Central Processing Unit)などのプロセッサとRAM(Random Access Memory)などのメモリとを有するサーバコンピュータでもよい。ストレージ装置11は、ストレージ装置12と同じ情報を記憶し、ストレージ装置12との間で相互に情報の書き込みを反映させる。すなわち、ストレージ装置11は、ネットワークを介してストレージ装置12と同期している。ストレージ装置11に新たな情報が書き込まれると当該情報がストレージ装置12に複製され、逆にストレージ装置12に新たな情報が書き込まれると当該情報がストレージ装置11に複製されることになる。
処理装置13は、ストレージ装置11を利用してグループに属さない他のユーザと情報のやり取りを行うサーバ装置またはクライアント装置である。処理装置13は、CPUなどのプロセッサとRAMなどのメモリとを有するサーバコンピュータまたはクライアントコンピュータでもよい。その場合、例えば、処理装置13のメモリは後述する処理を記載した承認プログラムを記憶し、処理装置13のプロセッサは承認プログラムを実行する。なお、ストレージ装置11や処理装置13は、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)などの特定用途の電子回路を有していてもよい。また、複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
処理装置13は、グループに対して取引の承認を依頼することを示す依頼情報14がストレージ装置11に書き込まれたことを検出する。依頼情報14は、例えば、ストレージ装置12に書き込まれてストレージ装置11に複製されたものである。すると、処理装置13は、グループに属するユーザの中から取引を承認する予定の承認担当者15を選択し、承認担当者15を識別するユーザ識別子16を依頼情報14と対応付けてストレージ装置11に書き込む。ここで書き込まれるユーザ識別子16は、グループ内の今後の承認手続の予定を示す承認ワークフロー情報として解釈することもできる。ストレージ装置11に書き込まれたユーザ識別子16は、ストレージ装置12に複製される。よって、グループに属さない他のユーザから、依頼情報14に対するグループ内の今後の承認手続の予定を確認することができる。
ここで、ストレージ装置11に書き込まれるユーザ識別子16は、承認担当者15と1対1に対応する固定ユーザ識別子ではなく、承認依頼に応じて異なる一時的ないし仮想的と言えるユーザ識別子である。例えば、処理装置13は、依頼情報14を検出すると承認担当者15にユーザ識別子16を新規に割り当て、依頼情報14と関連付けられる情報については承認担当者15を表すためにユーザ識別子16を使用する。よって、別の依頼情報に対して同じ承認担当者15が選択された場合であっても、その際にストレージ装置11に書き込まれるユーザ識別子はユーザ識別子16と異なる可能性がある。
このとき、処理装置13は、ユーザ識別子16をランダムに選択してもよい。その場合、処理装置13は、依頼情報14を識別する取引識別子および承認担当者15の組に対して、ユーザ識別子16を割り当てたことを示す対応情報を保持しておいてもよい。対応情報を参照することで、グループ内ではユーザ識別子16が示す実際の承認担当者15を特定でき、グループ内からストレージ装置11の情報を活用することができる。対応情報は、グループ内のユーザが使用する内部ストレージ装置(例えば、グループによって所有される内部ストレージ装置)に保存されてもよい。また、処理装置13は、依頼情報14を識別する取引識別子を用いてユーザ識別子16を生成してもよい。すなわち、ユーザ識別子16が依頼情報14に依存して変化するようにしてもよい。例えば、処理装置13は、取引識別子を用いて暗号鍵を生成し、承認担当者15の固定ユーザ識別子を当該暗号鍵で暗号化してユーザ識別子16を生成する。この場合、ユーザ識別子16と依頼情報14の取引識別子から承認担当者15の固定ユーザ識別子を復元できる。
また、処理装置13は、承認担当者15による承認が完了したことを検出する。例えば、処理装置13は、承認担当者15が使用する端末装置から承認完了のメッセージを受信する。すると、処理装置13は、ユーザ識別子16を含んでおり承認担当者15の承認完了を示す承認ステータス情報17を生成する。すなわち、承認担当者15の承認が完了したことが、ユーザ識別子16を用いて表現される。承認ステータス情報17は、承認担当者15の固定ユーザ識別子を含まなくてよい。承認ステータス情報17に含まれるユーザ識別子16は、先にストレージ装置11に書き込まれたものと同じである。例えば、処理装置13は、保存しておいた対応情報を参照して、取引を承認した承認担当者15に割り当てたユーザ識別子16を特定し、承認ステータス情報17を生成する。
処理装置13は、生成した承認ステータス情報17を依頼情報14と対応付けてストレージ装置11に書き込む。ここで書き込まれる承認ステータス情報17は、グループ内の承認ワークフローの進行状況として解釈することができる。ストレージ装置11に書き込まれた承認ステータス情報17は、ストレージ装置12に複製される。よって、グループに属さない他のユーザから、依頼情報14に対する承認手続が進行したことを確認することができる。
ただし、ユーザ識別子16は、依頼情報14に関連付けられた情報の中でのみ承認担当者の同一性を表したものであり、他の依頼情報に関連付けられた情報との間では承認担当者の同一性を表していない。よって、グループに属さない他のユーザからは、取引承認依頼毎の承認体制や承認ワークフローの進行状況を確認することができるものの、複数の取引承認依頼と承認担当者との関係は把握されない。すなわち、承認担当者15がどの程度の数の取引を承認したかや、承認担当者15がどの様な種類の取引を承認したかなどは、開示されるユーザ識別子が取引によって変わるため特定されない。このため、グループ内に存在する承認担当者の人数、取引の種類と承認担当者の間の関係、人事異動による承認担当者の変更など、グループ構造に関する内部情報が漏洩するリスクを低減できる。
[第2の実施の形態]
次に、第2の実施の形態を説明する。
図2は、第2の実施の形態の承認システムの例を示す図である。
第2の実施の形態の承認システムは、複数の組織に跨がって行われる取引の承認状況を管理する情報処理システムである。この承認システムは、例えば、投資機関や証券会社などの取引参加者の間で行われる株式取引の決済状況を管理するために用いることができる。この承認システムは、承認手続のワークフロー(以下では「承認フロー」と言うことがある)の進行状況を示す承認情報を、耐改竄性や耐故障性を向上させるため、複数の組織が共有するブロックチェーン(分散台帳)を利用して管理する。
第2の実施の形態の承認システムは、端末装置51〜54、承認管理サーバ100,100a、ブロックチェーンサーバ200,200a,200b,200c,200d,200eおよびローカルブロックチェーンサーバ300を含む。
端末装置51〜53、承認管理サーバ100、ブロックチェーンサーバ200およびローカルブロックチェーンサーバ300は、組織31(組織D)が保持しており、組織31のローカルネットワークであるネットワーク42に接続されている。ネットワーク42は、広域ネットワークであるネットワーク41に接続されている。端末装置54、承認管理サーバ100aおよびブロックチェーンサーバ200aは、組織32(組織A)が保持しており、組織32のローカルネットワークであるネットワーク43に接続されている。ネットワーク43はネットワーク41に接続されている。
ブロックチェーンサーバ200bは、組織Bが保持している。ブロックチェーンサーバ200cは、組織Cが保持している。ブロックチェーンサーバ200dは、組織Eが保持している。ブロックチェーンサーバ200eは、組織Fが保持している。ブロックチェーンサーバ200b,200c,200d,200eは、ネットワーク41を介して他のブロックチェーンサーバと通信することができる。
端末装置51〜53は、組織31に属するユーザが使用するクライアントコンピュータである。端末装置51〜53のユーザは、ある取引を承認する担当者に指定されることがある。担当者に指定されたユーザは、何れかの端末装置を操作することで、当該端末装置から承認管理サーバ100にアクセスして承認フローを実行させることができる。
組織31が他の組織から取引の承認を依頼された場合、組織31の内部では組織31が独自に決めた承認ルールに従って承認フローが実行される。承認ルールは、特定のユーザが不在であることによって承認フローが遅延しないように、複数の担当者を指定して当該複数の担当者の一部(例えば、1人)が承認すればよいことを規定している場合がある。また、承認ルールは、権限の異なる2以上の担当者(例えば、一次担当者とその上司)の全てが承認することを要求している場合がある。第2の実施の形態では主に、1つの取引につき3人の担当者を指定し、当該3人の担当者のうち何れか1人が承認すれば組織31として承認したことになる承認ルール(1of3ルール)を想定する。
端末装置54は、組織32に属するユーザが使用するクライアントコンピュータである。端末装置54は、端末装置51〜53と同様の機能を有する。第2の実施の形態では主に、組織32(組織A)が組織31(組織D)に対して取引の承認を依頼することを想定する。端末装置54のユーザは、端末装置54を操作することで、端末装置54から承認管理サーバ100aにアクセスして承認依頼を発行させることができる。
承認管理サーバ100は、承認依頼の発行や承認フローの実行を管理するサーバコンピュータである。承認管理サーバ100は、端末装置51〜53からの要求に応じて、他の組織への承認依頼の情報を生成する。承認管理サーバ100は、生成した承認依頼の情報をブロックチェーンサーバ200に送信し、承認依頼をブロックチェーンに反映させる。
また、承認管理サーバ100は、ブロックチェーンサーバ200が保持するブロックチェーンを監視し、組織31に対する承認依頼を検出する。すると、承認管理サーバ100は、組織31の内部における承認フローを決定する。承認管理サーバ100は、承認フローの情報(承認予定の担当者を示す情報など)をブロックチェーンサーバ200に送信し、その承認フローをブロックチェーンに反映させる。その後、承認管理サーバ100は、端末装置51〜53を用いた承認操作に応じて、承認ステータスの情報(組織31が承認を完了したか否かや内部の承認フローがどの段階まで進行したかなどを示す情報)を更新する。承認管理サーバ100は、更新した承認ステータスの情報をブロックチェーンサーバ200に送信し、最新の承認ステータスをブロックチェーンに反映させる。
このとき、承認管理サーバ100は、他の組織に対して公開しない情報を保存するためにローカルブロックチェーンサーバ300を利用することがある。同様に、承認管理サーバ100aは、承認依頼の発行や承認フローの実行を管理するサーバコンピュータである。承認管理サーバ100aは、端末装置54からの要求に応じてブロックチェーンサーバ200aと通信し、承認依頼をブロックチェーンに反映させる。また、承認管理サーバ100aは、他の組織からの承認依頼に応じて組織32の内部における承認フローを決定し、ブロックチェーンサーバ200aと通信して承認フローや最新の承認ステータスをブロックチェーンに反映させる。なお、組織B,C,E,Fが、承認管理サーバ100,100aと同様の承認管理サーバ(図示せず)を有していてもよい。
ブロックチェーンサーバ200は、ブロックチェーンを管理するサーバコンピュータである。ブロックチェーンサーバ200は、実体的データを保存するデータベースであるキーバリューストア(KVS)と、キーバリューストアの更新の履歴を示すブロックチェーンとを保存する。ブロックチェーンは、キーバリューストアに保存されたデータが正当であり改竄されていないことを保証するために用いられる。キーバリューストアは、キーとバリューを対応付けて記憶する。第2の実施の形態では、キーとして取引を識別する案件IDを使用し、バリューとして当該取引に関する承認情報を保持する。
ブロックチェーンサーバ200には、キーバリューストアの参照や更新を行う1以上の関数が組み込まれている。ブロックチェーンサーバ200は、承認管理サーバ100からの要求に応じて関数を実行する。関数の実行によりキーバリューストアが更新されると、ブロックチェーンサーバ200は、更新履歴を示すトランザクション情報を生成する。ブロックチェーンサーバ200は、生成したトランザクション情報を自身で保持すると共に、他の全てのブロックチェーンサーバ(ブロックチェーンサーバ200a,200b,200c,200d,200e)に対してブロードキャストする。
また、ブロックチェーンサーバ200は、他のブロックチェーンサーバからトランザクション情報を受信すると、受信したトランザクション情報に従って関数を再実行してキーバリューストアを更新する。これにより、そのトランザクション情報の送信元で行われた更新が、ブロックチェーンサーバ200のキーバリューストアに反映される。また、ブロックチェーンサーバ200は、一定時間毎に当該一定時間内に発生したトランザクション情報を含むブロックを生成し、生成したブロックをブロックチェーンの末尾に追加する。一定時間内に発生したトランザクション情報には、ブロックチェーンサーバ200が生成したものと他のブロックチェーンサーバから受信したものとが含まれる。
同様に、ブロックチェーンサーバ200a,200b,200c,200d,200eは、ブロックチェーンを管理するサーバコンピュータである。ブロックチェーンサーバ200a,200b,200c,200d,200eは、ブロックチェーンサーバ200と同じキーバリューストアおよびブロックチェーンを保持する。すなわち、ブロックチェーンサーバ200,200a,200b,200c,200d,200eの間では、キーバリューストアおよびブロックチェーンが複製されて同期されている。これにより、組織A,B,C,D,E,Fは共通の承認情報を閲覧でき、取引の透明性や客観性を確保できる。また、承認情報が冗長化されて保存されており、耐故障性が向上する。
ローカルブロックチェーンサーバ300は、組織31の内部で使用され組織31の外部には開示されないブロックチェーンを管理するサーバコンピュータである。ローカルブロックチェーンサーバ300は、キーバリューストアとブロックチェーンとを保存する。ブロックチェーンサーバ200,200a,200b,200c,200d,200eと同様、ローカルブロックチェーンサーバ300には、キーバリューストアの参照や更新を行う1以上の関数が組み込まれている。ローカルブロックチェーンサーバ300は、承認管理サーバ100からの要求に応じて関数を実行する。関数の実行によりキーバリューストアが更新されると、ローカルブロックチェーンサーバ300は、更新履歴を示すトランザクション情報を生成する。
ローカルブロックチェーンサーバ300は、一定時間毎に当該一定時間内に発生したトランザクション情報を含むブロックを生成し、生成したブロックをブロックチェーンの末尾に追加する。ローカルブロックチェーンサーバ300のキーバリューストアやブロックチェーンは、ブロックチェーンサーバ200,200a,200b,200c,200d,200eのキーバリューストアやブロックチェーンとは同期していない。なお、組織31は複数のローカルブロックチェーンサーバを有してもよい。その場合、ブロックチェーンサーバ200,200a,200b,200c,200d,200eと同様、それら複数のローカルブロックチェーンサーバの間でキーバリューストアやブロックチェーンが同期される。
図3は、ブロックチェーンの例を示す図である。
ブロックチェーンサーバ200,200a,200b,200c,200d,200eに保存されるブロックチェーンは、例えば、ブロック61〜63を含む。ブロック61はブロック62の一定時間前に生成されたブロックであり、ブロック63はブロック62の一定時間後に生成されたブロックである。ブロック62は、前ブロックハッシュ値71およびトランザクション情報72,73,74を含む。他のブロックも、ブロック62と同様に、前ブロックハッシュ値およびトランザクション情報を含む。
前ブロックハッシュ値71は、直前のブロックであるブロック61全体から所定のハッシュ関数を用いて算出されるハッシュ値である。同様に、ブロック63は、直前のブロックであるブロック62全体から算出される前ブロックハッシュ値を含んでいる。このように、複数のブロックが前ブロックハッシュ値を通じて連結している。
ここで、仮にブロック61の内容が変化したとすると、ブロック62に含まれるべき前ブロックハッシュ値71が変化する。すると、連鎖的にブロック63に含まれるべき前ブロックハッシュ値も変化する。このように、ブロックチェーンの中の1つのブロックの内容が事後的に変化すると、それ以降の全てのブロックの前ブロックハッシュ値を再計算しなければ、ブロック間で前ブロックハッシュ値が整合しなくなる。よって、ブロックチェーンの中の特定のブロックを改竄してその改竄を隠蔽するには膨大な計算を要することになり、ブロックの改竄が実質的に困難になる。このため、ブロックチェーンに含まれる前ブロックハッシュ値が正しいことを検証することで、改竄がないことを保証できる。
トランザクション情報72は、案件ID72a、関数ID72b、関数パラメータ72cおよびKVSハッシュ値72dを含む。案件ID72aは、取引を識別する識別子であり、キーバリューストアのキーとして用いられる。トランザクション情報72は、キーバリューストアの中の案件ID72aに対応する承認情報が更新されたことを示す。関数ID72bは、承認情報の更新の際に呼び出された関数の識別子である。関数パラメータ72cは、承認情報の更新の際に関数に対して渡された引数の値である。KVSハッシュ値72dは、関数が実行された直後(キーバリューストアが更新された直後)におけるキーバリューストア全体から所定のハッシュ関数を用いて算出されるハッシュ値である。
トランザクション情報72を生成したブロックチェーンサーバ以外の他のブロックチェーンサーバは、関数ID72bによって特定される関数に対して関数パラメータ72cを与えて実行することで、キーバリューストアを同期させることができる。このとき、他のブロックチェーンサーバは、更新後のキーバリューストアのハッシュ値とKVSハッシュ値72dとが一致していることを確認することで、更新が正しいことを保証できる。
トランザクション情報73,74も、トランザクション情報72と同様に、案件ID、関数ID、関数パラメータおよびKVSハッシュ値を含む。ブロック62に含まれるトランザクション情報72〜74は、ブロック61が生成された後、ブロック62が生成されるまでの間に何れかのブロックチェーンサーバによって生成されたトランザクション情報である。各ブロックに含まれるトランザクション情報の件数は可変である。
図4は、キーバリューストアの例を示す図である。
キーバリューストア222は、ブロックチェーンサーバ200に保存されている。キーバリューストア222は、案件IDをキーとして含み、承認情報をバリューとして含む。ある取引についての承認情報には、当該取引に関与する複数の組織によってレコードが挿入されることがある。承認情報に挿入されるレコードには、組織間の承認手続に関するレコードだけでなく、組織内の承認手続に関するレコードも含まれる。組織間の承認手続に関するレコードは、ある組織が承認依頼を発行したことや、ある組織が承認を完了したことなどを示す。組織内の承認手続に関するレコードは、ある担当者の承認が未完了であることや、ある担当者の承認が完了したことなどを示す。
一例として、承認情報はレコード81〜84を含む。レコード81は、案件ID=1001の取引について、組織32(組織A)から組織31(組織D)に承認依頼を発行したことを示す。レコード81は組織32によって書き込まれる。
レコード82は、案件ID=1001の取引を組織31が承認するための組織31内の承認フローを示す。レコード82は、承認予定の担当者として、担当者アドレスXXXX32,XXXX05,XXXX84が付与された3人のユーザが選択されたことを示している。この3人の担当者の何れか1人が承認すれば、組織31として案件ID=1001の取引を承認したことになる。このような組織31の承認ルールがレコード82に記載されてもよい。レコード82は、レコード81の後に組織31によって書き込まれる。
レコード83は、案件ID=1001の取引について組織31内の承認ステータス、すなわち、レコード82が示す承認フローの進行状況が更新されたことを示す。レコード83は、レコード82が示す3人の担当者のうち、担当者アドレスXXXX32が付与された担当者が案件ID=1001の取引を承認したことを示している。レコード83は、レコード82の後に組織31によって書き込まれる。
レコード84は、案件ID=1001の取引について組織31の対外的な承認ステータスが更新されたこと、すなわち、レコード81の承認依頼に対する組織31から組織32への回答を示す。組織31では3人の担当者のうちの何れか1人が承認すればよいため、レコード83が書き込まれた時点で案件ID=1001の取引は組織31として承認されたことになる。レコード84は、組織31の承認が完了したことを示している。レコード84は、レコード83の後に組織31によって書き込まれる。
レコード81〜84それぞれがキーバリューストア222に書き込まれる毎に、トランザクション情報が生成される。これらのトランザクション情報がブロックチェーンに挿入されることで、レコード81〜84が後から改竄されたとしても改竄が行われたことを検出することができ、改竄を隠蔽することが難しくなる。よって、承認が完了したことや承認が未完了であることについて信頼性の高い情報が提供される。
また、上記のように、承認情報には組織間の通信に関するレコードに加えて、組織内部の承認フローや承認ステータスを示すレコードも含まれる。各組織は、ブロックチェーンを利用して内部の承認フローや承認ステータスを他の組織に開示することで、承認が不当に遅延していないことや十分な遅延対策を行っていることを表明することができる。例えば、組織内部で承認フローが進行していることや、承認予定の担当者が複数指定されており一部の担当者が不在でも承認が遅延しない体制を確立していることを、他の組織に確認してもらうことができる。これにより、組織間の承認手続の透明性が確保される。また、承認手続が大きく遅延した場合にその原因を特定することが容易となる。よって、内部の承認フローや承認ステータスを開示することは、各組織にとって利点がある。
ここで、ブロックチェーンを利用して承認フローや承認ステータスを開示するにあたり、情報の信頼性や管理の利便性などのため、担当者を識別する担当者アドレスを開示することが好ましい。しかし、組織内のユーザに対して1対1に対応付けたユーザIDを担当者アドレスとして組織外に開示してしまうと、様々な取引の担当者アドレスを比較分析することで、組織構造に関する内部情報が漏洩してしまうおそれがある。例えば、組織内に存在する担当者の人数、取引の種類と承認を行う担当者の関係、承認フローに関与する上司と部下の間の指揮系統、担当者の人事異動などの内部情報が漏洩するおそれがある。
そこで、第2の実施の形態の承認システムは、組織外に開示する承認情報から組織構造に関する内部情報が漏洩するリスクを低減させる。このため、承認システムは、ユーザと開示される担当者アドレスとが1対1に対応しないようにし、ユーザに割り当てられる担当者アドレスが取引によって変わるようにする。
組織構造の分析を困難にするためには、ユーザと開示される担当者アドレスとが多対多の関係になればよい。すなわち、あるユーザが2つの取引の担当者として指定された場合に、一方の取引について当該ユーザに割り当てられる担当者アドレスと他方の取引について当該ユーザに割り当てられる担当者アドレスとが異なる可能性がある。また、あるユーザが1つの取引の担当者として指定され、別のユーザが別の取引の担当者として指定された場合に、この2つの取引について同じ担当者アドレスが使用される可能性がある。
図5は、識別子テーブルの例を示す図である。
第2の実施の形態では、承認管理サーバ100は取引毎にランダムに担当者アドレスを選択する。承認管理サーバ100は、識別子テーブル122を有する。識別子テーブル122は、キーバリューストアに書き込む担当者アドレスとして使用可能な識別子の集合を記憶する。例えば、識別子テーブル122は、XXXX05,XXXX21,XXXX29,XXXX32,XXXX46,XXXX49,XXXX84,XXXX93,…などの識別子を記憶する。承認管理サーバ100は、識別子テーブル122に記憶された識別子の中から、選択した担当者毎にランダムに担当者アドレスとして使用する識別子を選択する。ただし、承認管理サーバ100は、1つの取引についての承認フローの中では、複数の担当者の間で担当者アドレスが重複しないようにする。
例えば、承認管理サーバ100は、案件ID=1001に対してユーザA、ユーザBおよびユーザCの3人を担当者として選択する。そして、承認管理サーバ100は、識別子テーブル122の中から、ユーザAに対してXXXX32を選択し、ユーザBに対してXXXX05を選択し、ユーザCに対してXXXX84を選択する。承認管理サーバ100は、これら選択した識別子を担当者アドレスとして組織外に開示する。
このように、担当者アドレスとして使用する識別子をランダムに選択することで、ブロックチェーンで管理される承認情報を通じて内部情報が漏洩するリスクを低減できる。一方、ブロックチェーンで管理される承認情報には実際の担当者を特定するための情報が不足している。そのため、承認管理サーバ100は、このままでは組織31の内部の承認フローを管理するためにブロックチェーンを活用することが制限され、ブロックチェーンの利便性が低下する。そこで、承認管理サーバ100は、ローカルブロックチェーンサーバ300に、担当者と担当者アドレスの対応関係を案件ID毎に記録しておく。
ブロックチェーンサーバ200に記憶された承認情報とローカルブロックチェーンサーバ300に記憶された対応情報とを連携させることで、承認管理サーバ100は、承認情報からユーザ固有の識別子を除去しつつ内部の承認フローを管理することができる。
図6は、ローカルのキーバリューストアの例を示す図である。
キーバリューストア322は、ローカルブロックチェーンサーバ300に保存されている。キーバリューストア322は、案件IDをキーとして含み、ユーザと担当者アドレスとして使用する識別子との対応関係を示す対応情報をバリューとして含む。対応情報は、組織31の内部で使用するユーザ固有のユーザIDに対して、取引毎に一時的に選択されて組織31の外部に開示される識別子を対応付けている。
前述のように、例えば、案件ID=1001に対してユーザA、ユーザBおよびユーザCが担当者として選択される。すると、キーバリューストア322には、ユーザAに対してXXXX32を割り当て、ユーザBに対してXXXX05を割り当て、ユーザCに対してXXXX84を割り当てたことを示す対応情報が記録される。また、例えば、案件ID=1002に対してユーザA、ユーザDおよびユーザEが担当者として選択される。すると、キーバリューストア322には、ユーザAに対してXXXX46を割り当て、ユーザDに対してXXXX39を割り当て、ユーザEに対してXXXX49を割り当てたことを示す対応情報が記録される。また、例えば、案件ID=1003に対してユーザB、ユーザCおよびユーザEが担当者として選択される。すると、キーバリューストア322には、ユーザBに対してXXXX21を割り当て、ユーザCに対してXXXX93を割り当て、ユーザEに対してXXXX29を割り当てたことを示す対応情報が記録される。
このように、案件ID=1001についてはユーザAにXXXX32が割り当てられる一方、案件ID=1002についてはユーザAにXXXX46が割り当てられることがある。また、案件ID=1001についてはユーザBにXXXX05が割り当てられる一方、案件ID=1003についてはユーザBにXXXX21が割り当てられることがある。また、案件ID=1001についてはユーザCにXXXX84が割り当てられる一方、案件ID=1003についてはユーザCにXXXX93に割り当てられることがある。よって、担当者アドレスから担当者の同一性を判断することが困難となる。
次に、承認システムに含まれる各装置の構成について説明する。
図7は、サーバのハードウェア例を示すブロック図である。
承認管理サーバ100は、CPU101、RAM102、HDD103、画像信号処理部104、入力信号処理部105、媒体リーダ106および通信インタフェース107を有する。上記ユニットはバスに接続される。端末装置51〜54、承認管理サーバ100a、ブロックチェーンサーバ200,200a,200b,200c,200d,200eおよびローカルブロックチェーンサーバ300も、承認管理サーバ100と同様のハードウェアを用いて実装することができる。
CPU101は、プログラムの命令を実行する演算回路を含むプロセッサである。CPU101は、HDD103に記憶されたプログラムやデータの少なくとも一部をRAM102にロードし、プログラムを実行する。なお、CPU101は複数のプロセッサコアを備えてもよく、承認管理サーバ100は複数のプロセッサを備えてもよく、以下の処理を複数のプロセッサまたはプロセッサコアを用いて並列に実行してもよい。また、複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
RAM102は、CPU101が実行するプログラムやCPU101が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、承認管理サーバ100は、RAM以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
HDD103は、OS(Operating System)やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。プログラムには承認プログラムが含まれる。なお、承認管理サーバ100は、フラッシュメモリやSSD(Solid State Drive)などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
画像信号処理部104は、CPU101からの命令に従って、承認管理サーバ100に接続されたディスプレイ111に画像を出力する。ディスプレイ111としては、CRT(Cathode Ray Tube)ディスプレイ、液晶ディスプレイ(LCD:Liquid Crystal Display)、プラズマディスプレイ、有機EL(OEL:Organic Electro-Luminescence)ディスプレイなど、任意の種類のディスプレイを用いることができる。
入力信号処理部105は、承認管理サーバ100に接続された入力デバイス112から入力信号を取得し、CPU101に出力する。入力デバイス112としては、マウスやタッチパネルやタッチパッドやトラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、承認管理サーバ100に複数の種類の入力デバイスが接続されていてもよい。
媒体リーダ106は、記録媒体113に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体113として、例えば、磁気ディスク、光ディスク、光磁気ディスク(MO:Magneto-Optical disk)、半導体メモリなどを使用できる。磁気ディスクには、フレキシブルディスク(FD:Flexible Disk)やHDDが含まれる。光ディスクには、CD(Compact Disc)やDVD(Digital Versatile Disc)が含まれる。
媒体リーダ106は、例えば、記録媒体113から読み取ったプログラムやデータを、RAM102やHDD103などの他の記録媒体にコピーする。読み取られたプログラムは、例えば、CPU101によって実行される。なお、記録媒体113は可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体113やHDD103を、コンピュータ読み取り可能な記録媒体と言うことがある。
通信インタフェース107は、ネットワーク42に接続され、ネットワーク42を介して他のノードと通信を行うインタフェースである。通信インタフェース107は、例えば、スイッチなどの通信装置とケーブルで接続される有線通信インタフェースである。ただし、基地局と無線リンクで接続される無線通信インタフェースでもよい。
図8は、第2の実施の形態のサーバの機能例を示すブロック図である。
承認管理サーバ100は、識別子記憶部121、承認依頼発行部131、承認フロー生成部132および承認フロー実行部133を有する。識別子記憶部121は、例えば、RAM102またはHDD103に確保した記憶領域を用いて実装される。承認依頼発行部131、承認フロー生成部132および承認フロー実行部133は、例えば、CPU101が実行するプログラムモジュールを用いて実装される。
識別子記憶部121は、識別子テーブル122を記憶する。
承認依頼発行部131は、組織31が他の組織に対して取引の承認を依頼する場合に、端末装置51〜53の何れかの端末装置から承認依頼の情報を受け付ける。受け付ける承認依頼の情報には、承認対象の取引を識別する案件IDや依頼先の組織の識別情報が含まれる。すると、承認依頼発行部131は、案件IDや依頼先の組織などを指定して、ブロックチェーンサーバ200に組み込まれた関数を呼び出し、ブロックチェーンを通じて承認依頼を他の組織に対して開示させる。
承認フロー生成部132は、ブロックチェーンサーバ200が保持するブロックチェーンを監視し、組織31に対する承認依頼を検出する。すると、承認フロー生成部132は、承認依頼で指定された取引を承認する組織31内の担当者および承認ルールを決定し、承認フローを生成する。担当者の数は予め決まっており、2人以上であることが好ましい。担当者は、取引の種類に関係なく固定でもよいし、取引の種類に応じて異なってもよいし、担当者の候補の中からランダムに選択されてもよい。承認フロー生成部132は、例えば、担当者の候補のユーザIDを保持している。承認ルールは、組織31として承認完了となる条件であり、例えば、1of3ルールなどである。承認ルールは、取引の種類に関係なく固定でもよいし、取引の種類に応じて異なってもよい。承認フロー生成部132は、例えば、予め組織31が決定した承認ルールの情報を保持している。
ここで、承認フロー生成部132は、ある承認依頼に対して担当者を決定すると、その担当者それぞれに、識別子記憶部121に記憶された識別子テーブル122からランダムに識別子を選択して担当者アドレスとして割り当てる。承認フロー生成部132は、一時的に割り当てた担当者アドレスと担当者固有のユーザIDとを対応付けた対応情報を生成する。承認フロー生成部132は、案件IDや対応情報を指定して、ローカルブロックチェーンサーバ300に組み込まれた関数を呼び出し、対応情報を組織31の外部に開示しない秘密情報として保持させる。また、承認フロー生成部132は、案件IDや担当者アドレスを指定して、ブロックチェーンサーバ200に組み込まれた関数を呼び出し、ブロックチェーンを通じて承認フローを他の組織に対して開示させる。開示される承認フローの情報には、担当者固有のユーザIDは含まれない。
承認フロー実行部133は、組織31の内部において承認フローを実行する。承認フロー生成部132で決定された担当者が端末装置51〜53の何れかの端末装置を用いて承認管理サーバ100にログインすると、取引に関する情報や承認を促すメッセージを当該端末装置に送信する。承認フロー実行部133は、当該端末装置から承認完了のメッセージを受け付けると、ローカルブロックチェーンサーバ300に組み込まれた関数を呼び出して、取引の案件IDと承認を行った担当者とに対応する担当者アドレスを取得する。承認フロー実行部133は、取得した担当者アドレスを含み担当者固有のユーザIDを含まないように、当該担当者の承認が完了したことを示す承認ステータスの情報を生成する。
承認フロー実行部133は、案件IDや承認ステータスの情報を指定して、ブロックチェーンサーバ200に組み込まれた関数を呼び出し、ブロックチェーンを通じて途中段階の承認ステータスを他の組織に対して開示させる。また、承認フロー実行部133は、当該担当者の承認によって所定の承認ルールが満たされたか判断する。承認ルールが1of3ルールである場合、1人の担当者の承認によって承認ルールが満たされたことになる。承認ルールが満たされた場合、承認フロー実行部133は、組織31の承認が完了したことを示す承認ステータスの情報を生成する。承認フロー実行部133は、案件IDや承認ステータスの情報を指定して、ブロックチェーンサーバ200に組み込まれた関数を呼び出し、ブロックチェーンを通じて承認完了を示す承認ステータスを他の組織に対して開示させる。
ブロックチェーンサーバ200は、関数記憶部221、キーバリューストア222、ブロックチェーン記憶部223、関数実行部231、ブロック生成部232および同期部233を有する。関数記憶部221、キーバリューストア222およびブロックチェーン記憶部223は、例えば、ブロックチェーンサーバ200が有するRAMまたはHDDに確保した記憶領域を用いて実装される。関数実行部231、ブロック生成部232および同期部233は、例えば、CPUが実行するプログラムモジュールを用いて実装される。
関数記憶部221は、ブロックチェーンサーバ200に組み込まれた複数の関数の情報を記憶する。例えば、関数記憶部221は、関数を実装したプログラムを記憶する。
キーバリューストア222は、キーとバリューとを対応付けて記憶するデータベースである。キーとして案件IDが記憶され、バリューとして承認情報が記憶される。
ブロックチェーン記憶部223は、図3のような複数のブロックを連結したブロックチェーンを記憶する。一定時間毎にブロックチェーンの末尾にブロックが追加されていく。キーバリューストア222に記憶された承認情報の正当性を検証できるように、ブロックチェーンに一旦追加されたブロックは原則として更新も削除もされない。ただし、明らかに古くなり不要になったブロックを、ブロックチェーンの先頭から削除してもよい。
関数実行部231は、承認管理サーバ100からの要求に応じて、関数記憶部221に記憶された情報が示す複数の関数のうち指定された関数を実行する。関数の実行によってキーバリューストア222から情報が検索されて承認管理サーバ100に送信されることがある。また、関数の実行によってキーバリューストア222が更新されることがある。例えば、関数実行部231は、承認管理サーバ100からの要求に応じて、承認管理サーバ100から指定された案件IDに対応する承認情報に、承認依頼の情報、承認フローの情報、承認ステータスの情報などを挿入する。
キーバリューストア222を更新した場合、関数実行部231は、ブロックチェーンに挿入すべきトランザクション情報を生成する。トランザクション情報には、案件ID、実行した関数を識別する関数ID、関数に渡した引数を示す関数パラメータ、および、更新後のキーバリューストア222から算出されるKVSハッシュ値が含まれる。関数実行部231は、生成したトランザクション情報をブロック生成部232に出力する。また、関数実行部231は、他のブロックチェーンサーバ(ブロックチェーンサーバ200a,200b,200c,200d,200e)とのブロックチェーンの同期のため、生成したトランザクション情報を同期部233に出力する。
また、関数実行部231は、他のブロックチェーンサーバが生成したトランザクション情報を同期部233から取得する。すると、関数実行部231は、取得したトランザクション情報に含まれる関数IDおよび関数パラメータを用いて関数を再実行する。これにより、トランザクション情報の送信元のブロックチェーンサーバと同様にキーバリューストア222が更新される。このとき、関数実行部231は、更新後のキーバリューストア222から算出されるKVSハッシュ値とトランザクション情報に含まれるKVSハッシュ値とを比較して、関数が正しく再実行されたか確認してもよい。
ブロック生成部232は、ブロックチェーンサーバ200で生成されたトランザクション情報を関数実行部231から取得する。また、ブロック生成部232は、他のブロックチェーンサーバで生成されたトランザクション情報を同期部233から取得する。ブロック生成部232は、一定時間毎に、直近の一定時間に取得したトランザクション情報を含むブロックを生成し、ブロックチェーン記憶部223に記憶されたブロックチェーンの末尾に追加する。このとき、ブロック生成部232は、直前のブロックから前ブロックハッシュ値を算出し、生成したブロックに挿入しておく。
同期部233は、ブロックチェーンサーバ200のブロックチェーンと他のブロックチェーンサーバのブロックチェーンとを同期させる。同期部233は、ブロックチェーンサーバ200で生成されたトランザクション情報を関数実行部231から取得すると、取得したトランザクション情報を他のブロックチェーンサーバに送信する。他のブロックチェーンサーバそれぞれのアドレスは、同期部233が予め知っている。また、同期部233は、他のブロックチェーンサーバからトランザクション情報を受信すると、受信したトランザクション情報を関数実行部231とブロック生成部232に出力する。
ローカルブロックチェーンサーバ300は、関数記憶部321、キーバリューストア322、ブロックチェーン記憶部323、関数実行部331およびブロック生成部332を有する。関数記憶部321、キーバリューストア322およびブロックチェーン記憶部323は、例えば、ローカルブロックチェーンサーバ300が有するRAMまたはHDDに確保した記憶領域を用いて実装される。関数実行部331およびブロック生成部332は、例えば、CPUが実行するプログラムモジュールを用いて実装される。
関数記憶部321は、ブロックチェーンサーバ200の関数記憶部221と同様に、ローカルブロックチェーンサーバ300に組み込まれた複数の関数の情報を記憶する。
キーバリューストア322は、ブロックチェーンサーバ200のキーバリューストア222と同様に、キーとバリューとを対応付けて記憶するデータベースである。キーとして案件IDが記憶され、バリューとして対応情報が記憶される。
ブロックチェーン記憶部323は、ブロックチェーンサーバ200のブロックチェーン記憶部223と同様に、複数のブロックを連結したブロックチェーンを記憶する。一定時間毎にブロックチェーンの末尾にブロックが追加されていく。
関数実行部331は、承認管理サーバ100からの要求に応じて、関数記憶部321に記憶された情報が示す複数の関数のうち指定された関数を実行する。関数の実行によってキーバリューストア322から情報が検索されて承認管理サーバ100に送信されることがある。また、関数の実行によってキーバリューストア322が更新されることがある。例えば、関数実行部331は、承認管理サーバ100からの要求に応じて、承認管理サーバ100から指定された案件IDに対応付けて担当者と識別子との対応関係を示す対応情報を記憶させる。キーバリューストア322を更新した場合、関数実行部331は、ブロックチェーンに挿入すべきトランザクション情報を生成する。関数実行部331は、生成したトランザクション情報をブロック生成部332に出力する。
ブロック生成部332は、トランザクション情報を関数実行部331から取得する。ブロック生成部332は、一定時間毎に、直近の一定時間に取得したトランザクション情報を含むブロックを生成し、ブロックチェーン記憶部323に記憶されたブロックチェーンの末尾に追加する。このとき、ブロック生成部332は、直前のブロックから前ブロックハッシュ値を算出し、生成したブロックに挿入しておく。
なお、第2の実施の形態では、取引毎の担当者と識別子との対応関係をローカルブロックチェーンを利用して記録しておくこととしたが、ローカルファイルや関係データベースなど他の種類の記憶方法を利用して記録しておいてもよい。
次に、承認システムの処理手順について説明する。
図9は、承認フロー管理の手順例を示すフローチャートである。
承認管理サーバ100は、承認依頼毎に以下の処理を実行する。
(S10)承認フロー生成部132は、ブロックチェーンサーバ200にアクセスし、ブロックチェーンの末尾に新たなブロックが追加されたことを検出する。
(S11)承認フロー生成部132は、ブロックチェーンサーバ200にアクセスし、追加されたブロックに含まれるトランザクション情報が示す承認情報(更新された承認情報)を参照し、組織31に対する新たな承認依頼が記録されているか判断する。組織31に対する新たな承認依頼がある場合はステップS12に処理が進み、組織31に対する新たな承認依頼がない場合はステップS10に処理が進む。
(S12)承認フロー生成部132は、承認依頼があった取引を組織31が承認するための承認ルールと担当者を決定する。承認ルールは、例えば、3人の担当者のうち何れか1人が承認すれば組織31として承認したことになる1of3ルールである。担当者は、予め用意された担当者の候補の中から承認ルールが要求する人数だけ選択される。担当者はランダムに選択されてもよいし、所定の規則に従って選択されてもよい。
(S13)承認フロー生成部132は、識別子記憶部121に記憶された識別子テーブル122の中から、ステップS12で決定した担当者の数だけ互いに異なる識別子をランダムに選択する。例えば、承認ルールが1of3ルールである場合、承認フロー生成部132は、識別子テーブル122の中から3つの異なる識別子を選択する。承認フロー生成部132は、選択した識別子を担当者に割り当てる。
(S14)承認フロー生成部132は、担当者固有のユーザIDとステップS13で割り当てた取引依存の識別子との対応関係を示す対応情報を生成する。承認フロー生成部132は、取引の案件IDと対応情報をローカルブロックチェーンサーバ300に送信し、案件IDと対応付けて対応情報をブロックチェーンを利用して記録させる。
(S15)承認フロー生成部132は、ステップS13で選択した識別子を担当者アドレスとして含み、担当者固有のユーザIDは含まない承認フロー情報を生成する。承認フロー生成部132は、取引の案件IDと承認フロー情報をブロックチェーンサーバ200に送信し、案件IDに対応する承認情報の中に承認フロー情報を記録させる。
図10は、承認フロー管理の手順例を示すフローチャート(続き)である。
(S16)承認フロー実行部133は、担当者のログインを検出する。
(S17)承認フロー実行部133は、ログインした担当者が未処理である承認フローが存在するか判断する。未処理の承認フローがある場合はステップS18に処理が進み、未処理の承認フローがない場合はステップS16に処理が進む。
(S18)承認フロー実行部133は、未処理の承認フローについての取引情報を取得する。例えば、承認フロー実行部133は、ブロックチェーンサーバ200にアクセスして取引の案件IDに対応付けられた情報を取得する。承認フロー実行部133は、ステップS16の担当者が使用する端末装置に取引情報を送信する。また、承認フロー実行部133は、取引の承認を促すメッセージを当該端末装置に送信する。
(S19)承認フロー実行部133は、ステップS16の担当者による承認操作を検出したか判断する。例えば、承認フロー実行部133は、ステップS18の端末装置から承認完了のメッセージを受信したか判断する。承認操作を検出した場合はステップS20に処理が進み、承認操作を検出しなかった場合はステップS16に処理が進む。
(S20)承認フロー実行部133は、担当者が承認した取引の案件IDに対応する対応情報をローカルブロックチェーンサーバ300から取得し、当該担当者に対して割り当てられた取引依存の識別子を対応情報から抽出する。
(S21)承認フロー実行部133は、ステップS20で取得した識別子を担当者アドレスとして用いて、ステップS16の担当者の承認が完了したことを示す承認ステータス情報を生成する。この承認ステータス情報には、担当者固有のユーザIDは含まれない。承認フロー実行部133は、案件IDと承認ステータス情報をブロックチェーンサーバ200に送信し、案件IDに対応する承認情報の中に承認ステータス情報を記録させる。
(S22)承認フロー実行部133は、ステップS16の担当者が取引を承認したことによって、当該取引について組織31の承認ルールが満たされたか判断する。承認ルールが承認人数に関するルールである場合、承認フロー実行部133は、承認した担当者の数が承認ルールの要求する閾値に達したか判断する。例えば、承認ルールが1of3ルールである場合、ステップS16の担当者の承認が完了したことによって自動的に承認ルールが満たされたことになる。承認ルールが2of3ルールである場合、当該取引について2人の担当者の承認が完了したか判断される。承認ルールが満たされた場合はステップS23に処理が進み、承認ルールが満たされていない場合はステップS16に処理が進む。
(S23)承認フロー実行部133は、組織31の承認が完了したことを示す承認ステータス情報を生成する。ステップS21の承認ステータス情報は、個別の担当者の承認完了を示しており、組織31内の承認フローの途中経過を示している。これに対し、ここで生成する承認ステータス情報は、承認依頼に対する組織31の正式な回答を示している。承認フロー実行部133は、案件IDと承認ステータス情報をブロックチェーンサーバ200に送信し、案件IDに対応する承認情報の中に承認ステータス情報を記録させる。
図11は、ブロックチェーン処理の手順例を示すフローチャートである。
ブロックチェーンサーバ200は、一定時間毎に以下の処理を実行する。
(S30)関数実行部231は、承認管理サーバ100から関数呼び出しを受け付けたか判断する。関数呼び出しを受け付けた場合はステップS31に処理が進み、関数呼び出しを受け付けていない場合はステップS35に処理が進む。
(S31)関数実行部231は、ステップS30で呼び出された関数がキーバリューストア222を更新する関数であるか判断する。キーバリューストア222を更新する関数である場合はステップS32に処理が進み、キーバリューストア222を更新しない関数である場合はステップS35に処理が進む。なお、キーバリューストアを更新しない関数が呼び出された場合、関数実行部231は、通常の手順に従って呼び出された関数を実行してキーバリューストア222の検索などを行う。
(S32)関数実行部231は、キーバリューストア222を更新する前に、関数呼び出しを示すトランザクション情報を生成する。このとき、関数実行部231は、関数呼び出しにおいて指定された案件ID、呼び出された関数を識別する関数IDおよび指定された関数パラメータを、トランザクション情報に挿入する。
(S33)関数実行部231は、呼び出された関数を実行してキーバリューストア222を更新する。例えば、関数実行部231は、指定された関数のプログラムを関数記憶部221から読み出して実行する。関数呼び出しでは、案件IDや記録する情報などを引数として受け付ける。例えば、関数実行部231は、案件IDに対応付けてキーバリューストア222に記憶されている承認情報に、引数として取得した承認依頼情報、承認フロー情報または承認ステータス情報を挿入する。
(S34)関数実行部231は、ステップS33の関数実行直後のキーバリューストア222全体のハッシュ値を算出し、トランザクション情報に挿入する。ただし、トランザクション情報に挿入するハッシュ値を、関数実行直前のキーバリューストア222全体のハッシュ値とすることも考えられる。その場合、上記ステップS32の時点で、キーバリューストア222全体のハッシュ値をトランザクション情報に挿入できる。
同期部233は、生成されたトランザクション情報を、組織31の外部にある他のブロックチェーンサーバ(ブロックチェーンサーバ200a,200b,200c,200d,200e)に対してブロードキャストする。
(S35)関数実行部231は、組織31の外部にある他のブロックチェーンサーバからトランザクション情報を受信したか判断する。組織31の外部からトランザクション情報を受信した場合はステップS36に処理が進み、外部からトランザクション情報を受信していない場合はステップS37に処理が進む。
(S36)関数実行部231は、外部から受信したトランザクション情報に従って関数を実行してキーバリューストア222を更新する。例えば、関数実行部231は、トランザクション情報に含まれる関数IDに対応するプログラムを関数記憶部221から読み出し、トランザクション情報に含まれる関数パラメータを与えて実行する。
(S37)ブロック生成部232は、直前のブロックを生成してから所定時間が経過したか判断する。所定時間が経過した場合はステップS38に処理が進み、所定時間が経過していない場合はステップS30に処理が進む。
(S38)ブロック生成部232は、直前のブロック以降に発生したトランザクション情報を収集する。収集するトランザクション情報には、ステップS33で組織31の内部で生成されたトランザクション情報と、ステップS35で組織31の外部から受信されたトランザクション情報とが含まれる。ブロック生成部232は、直前のブロックのハッシュ値を算出し、算出したハッシュ値と収集したトランザクション情報とを含むブロックを生成する。そして、ブロック生成部232は、生成したブロックをブロックチェーン記憶部223に記憶されたブロックチェーンの末尾に追加する。
第2の実施の形態の承認システムによれば、組織内の承認フローや現在の承認ステータスが、ブロックチェーンを利用して信頼性の高い情報として組織外に開示される。よって、各組織は、組織内の承認手続が着実に進行していることや承認手続が大きく遅延しないための対策を十分行っていることを他の組織に対して主張することが可能となる。また、組織間の承認手続が大きく遅延した場合にその原因を特定することが容易となる。また、開示される承認情報には、担当者アドレスとして取引毎にランダムに割り当てられる識別子が使用され、担当者固有のユーザIDは使用されない。よって、開示された承認情報から組織構造、業務処理体制、人事異動などの内部情報が漏洩する可能性を低減できる。
[第3の実施の形態]
次に、第3の実施の形態を説明する。第2の実施の形態と異なる事項を中心に説明し、第2の実施の形態と同様の事項については説明を省略することがある。
第3の実施の形態では、担当者アドレスの生成方法が第2の実施の形態と異なる。
図12は、第3の実施の形態の承認システムの例を示す図である。
第3の実施の形態の承認システムは、第2の実施の形態と同様、端末装置51〜54、承認管理サーバ100aおよびブロックチェーンサーバ200,200a,200b,200c,200d,200eを含む。また、第3の実施の形態の承認システムは、承認管理サーバ400および暗号処理サーバ500を含む。承認管理サーバ400および暗号処理サーバ500は、組織31が保持しており、組織31のローカルネットワークであるネットワーク42に接続されている。承認管理サーバ400は、第2の実施の形態の承認管理サーバ100に代えて設置される。第2の実施の形態と異なり、組織31はローカルブロックチェーンサーバ300を有さなくてもよい。
承認管理サーバ400は、承認依頼の発行や承認フローの実行を管理するサーバコンピュータである。承認管理サーバ400は、端末装置51〜53からの要求に応じて他の組織への承認依頼の情報を生成し、ブロックチェーンサーバ200に送信する。また、承認管理サーバ400は、組織31に対する承認依頼に応じて組織31の内部における承認フローを決定し、承認フロー情報をブロックチェーンサーバ200に送信する。また、承認管理サーバ400は、端末装置51〜53を用いた担当者の承認操作に応じて承認ステータス情報を生成し、ブロックチェーンサーバ200に送信する。
このとき、承認管理サーバ400は、第2の実施の形態の承認管理サーバ100とは異なり、担当者アドレスを秘匿化しなくてよい。すなわち、承認管理サーバ400は、担当者と1対1に対応付けられたユーザIDを担当者アドレスとして使用してよい。
暗号処理サーバ500は、ブロックチェーンサーバ200と承認管理サーバ400との間で通信を中継するサーバコンピュータである。例えば、暗号処理サーバ500は、アプリケーションレベルで通信を中継するゲートウェイ装置である。
暗号処理サーバ500は、承認管理サーバ400からブロックチェーンサーバ200に送信される情報のうち所定の項目の情報を暗号化する。具体的には、暗号処理サーバ500は、案件IDに依存する暗号鍵を用いて担当者アドレスを暗号化する。これにより、担当者アドレスが自動的に秘匿化されて他の組織に開示される。また、暗号処理サーバ500は、ブロックチェーンサーバ200から承認管理サーバ400に送信される情報のうち所定の項目の情報を復号する。具体的には、暗号処理サーバ500は、案件IDに依存する復号鍵を用いて、暗号化されている担当者アドレスを復号する。これにより、承認管理サーバ400は担当者アドレスが秘匿化されていない情報を取得できる。
図13は、第3の実施の形態のサーバの機能例を示すブロック図である。
承認管理サーバ400は、承認依頼発行部431、承認フロー生成部432および承認フロー実行部433を有する。承認依頼発行部431、承認フロー生成部432および承認フロー実行部433は、例えば、CPUが実行するプログラムモジュールを用いて実装される。承認依頼発行部431、承認フロー生成部432および承認フロー実行部433は、第2の実施の形態の承認管理サーバ100の承認依頼発行部131、承認フロー生成部132および承認フロー実行部133に対応する。
承認依頼発行部431は、組織31が他の組織に対して取引の承認を依頼する場合に、依頼先の組織などを指定した承認依頼情報を生成し、暗号処理サーバ500を介してブロックチェーンサーバ200に承認依頼情報を送信する。
承認フロー生成部432は、ブロックチェーンサーバ200が保持するブロックチェーンを暗号処理サーバ500を介して監視し、組織31に対する承認依頼を検出する。すると、承認フロー生成部432は、組織31内の担当者および承認ルールを決定し、担当者アドレスを含む承認フロー情報を生成する。このとき、承認フロー生成部432は、承認フロー情報に含まれる担当者アドレスを秘匿化しなくてよく、担当者アドレスとして担当者固有のユーザIDを用いてよい。承認フロー生成部432は、暗号処理サーバ500を介してブロックチェーンサーバ200に承認フロー情報を送信する。
承認フロー実行部433は、組織31の内部において承認フローを実行する。承認フロー生成部432で選択された何れかの担当者が取引を承認すると、承認フロー実行部433は、承認が完了した担当者の担当者アドレスを含む承認ステータス情報を生成する。このとき、承認フロー実行部433は、承認ステータス情報に含まれる担当者アドレスを秘匿化しなくてよく、担当者アドレスとして担当者固有のユーザIDを用いてよい。承認フロー実行部433は、暗号処理サーバ500を介してブロックチェーンサーバ200に当該承認ステータス情報を送信する。また、当該担当者の承認によって承認ルールが満たされた場合、承認フロー実行部433は、組織31の承認が完了したことを示す承認ステータス情報を生成する。承認フロー実行部433は、暗号処理サーバ500を介してブロックチェーンサーバ200に当該承認ステータス情報を送信する。
暗号処理サーバ500は、設定情報記憶部521、基本鍵記憶部522、暗号化部531および復号部532を有する。設定情報記憶部521および基本鍵記憶部522は、例えば、RAMまたはHDDに確保した記憶領域を用いて実装される。暗号化部531および復号部532は、例えば、プログラムモジュールを用いて実装される。
設定情報記憶部521は、暗号処理サーバ500が実行する暗号処理に関する設定情報を記憶する。設定情報には、転送する情報の中の暗号化する項目、暗号化の方法、転送する情報の中の復号する項目、復号の方法などが記載される。
基本鍵記憶部522は、暗号化に使用する暗号鍵および復号に使用する復号鍵を生成するための基本鍵を記憶する。例えば、暗号鍵および復号鍵は、それぞれ基本鍵に案件IDを連結することで生成される。この場合、基本鍵は暗号鍵および復号鍵それぞれの一部分を構成することになる。暗号処理方式が共通鍵暗号方式である場合、暗号鍵と復号鍵は同一である。この場合、暗号鍵および復号鍵は同一の基本鍵から生成すればよい。一方、暗号処理方式が公開鍵暗号方式である場合、暗号鍵と復号鍵は異なる。この場合、暗号鍵および復号鍵は異なる基本鍵から生成することになる。
暗号化部531は、設定情報記憶部521に記憶された設定情報に従って特定の項目の平文を暗号化する。特に、暗号化部531は、承認管理サーバ400からブロックチェーンサーバ200に送信される承認フロー情報や承認ステータス情報を検出し、検出した情報に含まれる担当者アドレスを抽出する。暗号化部531は、基本鍵記憶部522に記憶された基本鍵と検出した情報に付加された案件IDとを連結して暗号鍵を生成し、抽出した担当者アドレスを暗号化する。暗号化部531は、担当者アドレスが暗号化された承認フロー情報や承認ステータス情報をブロックチェーンサーバ200に転送する。暗号鍵に案件IDが含まれるため、暗号化された担当者アドレスは案件IDに依存する。すなわち、元の担当者アドレスが同じでも取引によって暗号化後の担当者アドレスは変わる。
復号部532は、設定情報記憶部521に記憶された設定情報に従って特定の項目の暗号文を復号する。特に、復号部532は、ブロックチェーンサーバ200から承認管理サーバ400に送信される承認フロー情報や承認ステータス情報を検出し、検出した情報に含まれる担当者アドレスを抽出する。復号部532は、基本鍵記憶部522に記憶された基本鍵と検出した情報に付加された案件IDとを連結して復号鍵を生成し、抽出した担当者アドレスを復号する。復号部532は、担当者アドレスが復号された承認フロー情報や承認ステータス情報を承認管理サーバ400に転送する。
図14は、設定情報テーブルの例を示す図である。
設定情報テーブル523は、設定情報記憶部521に記憶されている。設定情報テーブル523は、アクセス種別、対象項目、処理種別およびキー付加値を含む。
アクセス種別は、ブロックチェーンサーバ200と承認管理サーバ400の間の通信の種類である。アクセス種別には、承認管理サーバ400がブロックチェーンサーバ200に承認情報を登録する「承認情報登録」と、承認管理サーバ400がブロックチェーンサーバ200から承認情報を読み出す「承認情報参照」がある。対象項目は、暗号処理の対象とする情報項目である。対象項目としては「担当者アドレス」が想定される。処理種別は、暗号処理の種類であり、「暗号化」または「復号」である。キー付加値は、暗号処理に使用する鍵(暗号鍵または復号鍵)を生成するために基本鍵に付加する値である。暗号化された担当者アドレスが取引に依存する(取引によって自動的に担当者アドレスが変わる)ように、キー付加値としては「案件ID」が想定される。
図15は、承認フロー管理の他の手順例を示すフローチャートである。
(S40)承認フロー生成部432は、ブロックチェーンサーバ200にアクセスし、ブロックチェーンの末尾に新たなブロックが追加されたことを検出する。
(S41)承認フロー生成部432は、ブロックチェーンサーバ200にアクセスし、追加されたブロックに含まれるトランザクション情報が示す承認情報(更新された承認情報)を参照し、組織31に対する新たな承認依頼が記録されているか判断する。組織31に対する新たな承認依頼がある場合はステップS42に処理が進み、組織31に対する新たな承認依頼がない場合はステップS40に処理が進む。
(S42)承認フロー生成部432は、承認依頼があった取引を組織31が承認するための承認ルールと担当者を決定する。承認フロー生成部432は、決定した担当者に対応するユーザIDを担当者アドレスとして含む承認フロー情報を生成する。担当者アドレスとして使用するユーザIDは、担当者固有のユーザIDでよい。承認フロー生成部432は、取引の案件IDと承認フロー情報を暗号処理サーバ500に送信する。
(S43)暗号化部531は、設定情報記憶部521に記憶された設定情報テーブル523に従い、承認管理サーバ400から受信した承認フロー情報に含まれる担当者アドレスが暗号化対象であると判定する。すると、暗号化部531は、基本鍵記憶部522に記憶された基本鍵と承認フロー情報に付加された案件IDとを連結して暗号鍵を生成する。例えば、暗号化部531は、基本鍵の後ろに案件IDを連結する。暗号化部531は、生成した暗号鍵を用いて担当者アドレスを暗号化する。
(S44)暗号化部531は、承認フロー情報に担当者アドレスとして含まれる平文を暗号文に置換し、担当者アドレスが暗号化された承認フロー情報をブロックチェーンサーバ200に転送する。これにより、ブロックチェーンサーバ200によって、案件IDに対応する承認情報の中に承認フロー情報が記録される。
図16は、承認フロー管理の他の手順例を示すフローチャート(続き)である。
(S45)承認フロー実行部433は、担当者のログインを検出する。
(S46)承認フロー実行部433は、ログインした担当者が未処理である承認フローが存在するか判断する。未処理の承認フローがある場合はステップS47に処理が進み、未処理の承認フローがない場合はステップS45に処理が進む。
(S47)承認フロー実行部433は、未処理の承認フローについての取引情報を取得する。例えば、承認フロー実行部433は、ブロックチェーンサーバ200にアクセスして取引の案件IDに対応付けられた情報を取得する。承認フロー実行部433は、ステップS45の担当者が使用する端末装置に取引情報を送信する。また、承認フロー実行部433は、取引の承認を促すメッセージを当該端末装置に送信する。
上記において、ブロックチェーンサーバ200から取得する情報に担当者アドレスが含まれる場合、復号部532により、暗号化された担当者アドレスが復号される。すなわち、復号部532は、設定情報記憶部521に記憶された設定情報テーブル523に従い、ブロックチェーンサーバ200から受信した承認情報に含まれる担当者アドレスが復号対象であると判定する。すると、復号部532は、基本鍵記憶部522に記憶された基本鍵と承認情報に付加された案件IDとを連結して復号鍵を生成する。例えば、復号部532は、基本鍵の後ろに案件IDを連結する。復号部532は、生成した復号鍵を用いて担当者アドレスを復号し、担当者アドレスが復号された承認情報を転送する。
(S48)承認フロー実行部433は、ステップS45の担当者による承認操作を検出したか判断する。承認操作を検出した場合はステップS49に処理が進み、承認操作を検出しなかった場合はステップS45に処理が進む。
(S49)承認フロー実行部433は、承認が完了した担当者に対応するユーザIDを担当者アドレスとして含む承認ステータス情報を生成する。担当者アドレスとして使用するユーザIDは、担当者固有のユーザIDでよい。承認フロー実行部433は、取引の案件IDと承認ステータス情報を暗号処理サーバ500に送信する。
暗号化部531は、設定情報記憶部521に記憶された設定情報テーブル523に従い、承認管理サーバ400から受信した承認ステータス情報に含まれる担当者アドレスが暗号化対象であると判定する。すると、暗号化部531は、基本鍵記憶部522に記憶された基本鍵と承認ステータス情報に付加された案件IDとを連結して暗号鍵を生成する。暗号化部531は、生成した暗号鍵を用いて担当者アドレスを暗号化する。
(S50)暗号化部531は、承認ステータス情報に担当者アドレスとして含まれる平文を暗号文に置換し、担当者アドレスが暗号化された承認ステータス情報をブロックチェーンサーバ200に転送する。これにより、ブロックチェーンサーバ200によって、案件IDに対応する承認情報の中に承認ステータス情報が記録される。
(S51)承認フロー実行部433は、ステップS45の担当者の承認によって組織31の承認ルールが満たされたか判断する。承認ルールが満たされた場合はステップS52に処理が進み、承認ルールが満たされていない場合はステップS45に処理が進む。
(S52)承認フロー実行部433は、組織31の承認が完了したことを示す承認ステータス情報を生成する。承認フロー実行部433は、案件IDと承認ステータス情報を暗号処理サーバ500に送信する。暗号化部531は、設定情報記憶部521に記憶された設定情報テーブル523に従い、承認管理サーバ400から受信した承認ステータス情報に暗号化対象が含まれていないと判定し、受信した承認ステータス情報をブロックチェーンサーバ200に転送する。これにより、ブロックチェーンサーバ200によって、案件IDに対応する承認情報の中に当該承認ステータス情報が記録される。
第3の実施の形態の承認システムによれば、第2の実施の形態と同様の効果が得られる。更に、第3の実施の形態では、暗号処理サーバ500によって自動的に担当者アドレスが秘匿化される。よって、承認管理サーバ400に秘匿化機能を組み込まなくてよく、承認フローを管理する既存サーバを利用することが容易となる。