(57)【特許請求の範囲】
【請求項１】
１又は複数の処理対象データに対して、所定範囲内のデータ毎に、該データより大きい前記処理対象データの個数が秘匿された秘匿データを、複数の組織の装置からネットワークを介して取得し、
取得されたデータ毎の前記秘匿データを、組織毎に記憶部に記憶し、
前記記憶部に記憶された所定範囲内のデータ毎に、各組織の秘匿データを加算操作する処理をコンピュータに実行させるためのプログラム。
【請求項２】
前記秘匿データは、前記処理対象データの個数にマスク値を加算して秘匿され、
前記マスク値は、前記所定範囲内のデータ毎の、各組織のマスク値の総和が０となる請求項１記載のプログラム。
【請求項３】
前記秘匿データは、暗号化データを加算操作すると、平文データが加算される準同型暗号を用いて暗号化される請求項１記載のプログラム。
【請求項４】
前記秘匿データは、前記マスク値が加算されたデータに対し、暗号化データを加算操作すると、平文データが加算される準同型暗号を用いて暗号化されたデータである請求項２記載のプログラム。
【請求項５】
１又は複数の処理対象データに対して、所定範囲内のデータ毎に、該データより大きい前記処理対象データの個数が秘匿された秘匿データを、複数の組織の装置からネットワークを介して取得し、
取得されたデータ毎の秘匿データを、組織毎に記憶部に記憶し、
前記記憶部に記憶された所定範囲内のデータ毎に、各組織の秘匿データを加算操作する処理をコンピュータが実行する情報処理方法。
【請求項６】
１又は複数の処理対象データに対して、所定範囲内のデータ毎に、該データより大きい前記処理対象データの個数が秘匿された秘匿データを、複数の組織の装置からネットワークを介して受信する受信部と、
前記受信部により受信されたデータ毎の秘匿データを、組織毎に記憶する記憶部と、
前記記憶部に記憶された所定範囲内のデータ毎に、各組織の秘匿データを加算操作する操作部と
を備える情報処理装置。
【請求項７】
１又は複数の処理対象データに対して、所定範囲内のデータ毎に、該データより大きい前記処理対象データの個数を秘匿して秘匿データを生成し、
前記秘匿データをサーバに送信し、
前記サーバにより各組織から受信された秘匿データに対し、前記所定範囲内のデータ毎に、前記サーバから各組織の秘匿データが加算操作されたデータを、又は前記加算操作されたデータを復号した装置から復号後のデータを受信し、
前記受信されたデータを用いて、前記各組織の全てのデータに対する前記処理対象データの順位を決定する処理をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号化データの演算を行うプログラム、情報処理方法及び情報処理装置に関する。
【背景技術】
【０００２】
情報通信技術の発展に伴い、これまで広範囲に分散していたデータを一箇所にまとめて分析などを行うことが可能になってきた。
【０００３】
現在、クラウドコンピューティングは、システムの新規導入や更新を検討している企業などから注目を集めている技術の一つである。クラウドコンピューティングとは、従来ユーザが保有していたハードウェア・ソフトウェアやアプリケーションなどを、インターネットなどのネットワークを通じて利用する利用形態のことである。
【０００４】
このクラウドコンピューティングは、イメージ図で表すと、インターネットを雲（cloud；クラウド）のように図示することから、このように呼ばれている。コンピューティングをクラウド化することで、ユーザは、利便性を手に入れる代わりに、安全性や信頼性への不安など、新たな情報セキュリティの問題に直面する。
【０００５】
ここで、クラウドコンピューティングにおいて、データを秘匿しながら集計を行う技術に、マスク方式と、準同型暗号方式の２つがある。また、電子的に順位付けを行う技術として、作成された順位付け関数と、参加者が選択したくじ情報とにより、参加者の順位付けを行う技術がある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００２−３５２０３７号公報
【非特許文献】
【０００７】
【非特許文献１】牛田芽生恵、伊藤孝一、片山佳則、小櫻文彦、津田宏、「ゲートウェイによるクラウド間のデータ秘匿集計技術」、暗号と情報セキュリティシンポジウム（ＳＣＩＳ２０１１）、予稿集（ＣＤ−ＲＯＭ）
【非特許文献２】安田雅哉、矢嶋純、下山武司、小暮淳、「複数企業が持つ購買履歴データのクラウド秘匿集計」、暗号と情報セキュリティシンポジウム（ＳＣＩＳ２０１２）、予稿集（ＣＤ−ＲＯＭ）
【発明の概要】
【発明が解決しようとする課題】
【０００８】
マスク値を用いる従来技術では、各データｍｉにマスク値Ｔｉを加えることにより、元のデータｍｉを秘匿する。このマスク値を用いる技術では、Ｔｉの総和が０となるようにＴｉを定めることにより、正しい総和ｍ１＋ｍ２＋・・・＋ｍｋを計算することができる。
【０００９】
また、準同型暗号を用いる従来技術では、暗号データを秘匿したまま操作することができる準同型暗号を用い、例えば暗号化関数Ｅ（）および暗号データの加算が以下の式（１）を満たすように定義されている。
【００１０】
【数１】
0005799876.tif 000002
【００１１】
この準同型を用いる技術では、ユーザデータの暗号文のみをクラウドに預け、クラウド側では暗号文操作のみを行うことで、ユーザデータ（平文データ）が漏洩することなく演算結果を入手できる。そのため、準同型暗号は、クラウドにおける様々な差異化サービスを実現すると期待される技術である。
【００１２】
暗号文の加算操作可能な準同型暗号として、Ｐａｉｌｌｉｅｒ暗号やＡｄｄｉｔｉｖｅ  ＥｌＧａｍａｌ方式などが代表的である。加算操作について、具体的な計算方法は各方式によって異なる。
【００１３】
しかしながら、従来技術では、データを秘匿しつつ、データの大小比較を行うことが困難であった。このため、所定のデータに対して、全体における順位を計算することが困難であった。
【００１４】
そこで、開示の技術では、個々のデータを秘匿しつつ、全体における順位を計算することができるプログラム、情報処理方法及び情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【００１５】
開示の技術における一態様のプログラムは、１又は複数の処理対象のデータに対して、所定範囲内のデータ毎に、該データより大きい前記処理対象のデータの個数が秘匿された秘匿データを、複数の組織から取得し、取得されたデータ毎の前記秘匿データを、組織毎に記憶部に記憶し、前記記憶部に記憶された所定範囲内のデータ毎に、各組織の秘匿データを加算操作する処理をコンピュータに実行させる。
【００１６】
また、開示の技術における他の態様のプログラムは、１又は複数の処理対象のデータに対して、所定範囲内のデータ毎に、該データより大きい前記処理対象のデータの個数を秘匿して秘匿データを生成し、前記秘匿データをサーバに送信し、前記サーバにより各組織から受信された秘匿データに対し、前記所定範囲内のデータ毎に、前記サーバから各組織の秘匿データが加算操作されたデータを、又は前記加算操作されたデータを復号した装置から復号後のデータを受信し、前記受信されたデータを用いて、前記各組織の全てのデータに対する前記処理対象のデータの順位を決定する処理をコンピュータに実行させる。
【発明の効果】
【００１７】
開示の技術によれば、個々のデータを秘匿しつつ、全体における順位を計算することができる。
【図面の簡単な説明】
【００１８】
【図１】実施例１における秘匿計算システムの一例を示す図。
【図２】実施例１における情報処理装置のハードウェア構成の一例を示すブロック図。
【図３】実施例１における秘匿計算システム内の各装置の機能構成の一例を示すブロック図で。
【図４】実施例１におけるシステムの処理手順（その１）を説明するための図。
【図５】実施例１におけるシステムの処理手順（その２）を説明するための図。
【図６】実施例１におけるシステムの処理手順（その３）を説明するための図。
【図７】実施例１におけるマスク値生成処理の一例を示すフローチャート。
【図８】実施例１における秘匿データ生成処理（その１）の一例を示すフローチャート。
【図９】実施例１における暗号操作処理（その１）の一例を示すフローチャート。
【図１０】実施例１における順位決定処理の一例を示すフローチャートト。
【図１１】実施例１における鍵生成処理の一例を示すフローチャート。
【図１２】実施例１における秘匿データ生成処理（その２）の一例を示すフローチャート。
【図１３】実施例１における暗号操作処理（その２）の一例を示すフローチャート。
【図１４】実施例１における復号処理の一例を示すフローチャート。
【図１５】実施例１における秘匿データ生成処理（その３）の一例を示すフローチャート。
【図１６】実施例１における暗号操作処理（その３）の一例を示すフローチャート。
【図１７】実施例２における秘匿計算システム内の各装置の機能構成の一例を示すブロック図。
【発明を実施するための形態】
【００１９】
以下、各実施例について、添付図面を参照しながら説明する。
【００２０】
［実施例１］
＜システム＞
図１は、実施例１における秘匿計算システム１の一例を示す図である。図１に示す秘匿計算システム１は、例えばクラウドコンピューティングシステムを用いて実装されうる。図１に示す秘匿計算システム１では、数値データｘの順位について、以下の定義を用いる。
【００２１】
所定のデータｘの順位とは、（ｘよりも大きなデータの個数）＋１であるという定義を利用する。データの取り得る値は、Ｍ１，Ｍ２，…，Ｍｎとする。組織Ｕ１，Ｕ２，…Ｕｍが各々複数のデータを保持しているとする。各組織Ｕｉは、各々に以下のデータ｛Ｎｉｊ｝，ｊ＝１，２，…，ｎを生成する。
Ｎｉｊ＝＃｛ｘ｜ｘ＞Ｍｊ，ｘはＵｉの保持するデータ｝  ・・・式（２）
ただし、＃は集合の個数を表す。
【００２２】
例えば、組織Ｕ１は、Ｎ１１〜Ｎ１ｎを生成し、組織Ｕ２は、Ｎ２１〜Ｎ２ｎを生成し、組織Ｕｍは、Ｎｍ１〜Ｎｍｎを生成する。
【００２３】
各組織Ｕｉは、後述する（i）マスク方式、または（ii）準同型暗号方式、または（iii）両方式の組合せにより、データ｛Ｎｉｊ｝を秘匿し、秘匿されたデータを例えばクラウドサーバに送信する。
【００２４】
クラウドサーバは、秘匿されたデータに対して暗号操作を行い、後述する（i）の場合は、暗号操作後のデータを各組織Ｕｉに送信する。後述する（ii）又は（iii）の場合、クラウドサーバは、暗号操作後のデータを例えば復号処理装置に送信し、復号処理装置は、復号処理を行ったデータを各組織Ｕｉに送信する。
【００２５】
以下に示す例では、対象のデータとして、数値データを例にして説明するが、数値データ以外にも、順位付けが可能な文字、例えばアルファベットなどでもよい。アルファベットの場合は、Ａが一番大きく、Ｚが一番小さいなどを定義づけておけばよい。
【００２６】
図１に示す秘匿計算システム１は、クラウドサーバとしての情報処理装置１０と、秘匿データを提供する情報処理装置２０、３０と、マスク値の管理サーバとして機能する情報処理装置４０と、準同型暗号の秘密鍵を有する情報処理装置５０とがネットワークを介して接続されている。秘匿計算システム１に接続される情報処理装置の数は、図１に示す例に限られない。
【００２７】
情報処理装置２０、３０は、秘匿したい１又は複数の数値データを秘匿し、秘匿データを情報処理装置１０に送信する。情報処理装置２０、３０は、情報処理装置１０又は情報処理装置５０から受信した順位付けの結果データを受信し、保持していた各数値データの順位を知ることができる。
【００２８】
情報処理装置４０は、情報処理装置２０、３０などの組織の装置で数値データを秘匿するのにマスク値が用いられる場合、このマスク値の生成、管理を行う。情報処理装置４０は、各組織の数、取りうる値の数を把握し、各マスク値Ｔｉｊを生成する。生成された各マスク値は、組織毎に、情報処理装置２０、３０などの組織の装置に送信される。
【００２９】
情報処理装置５０は、組織の装置において、数値データを秘匿するのに準同型暗号が用いられる場合、この暗号方式の秘密鍵を保持する。情報処理装置５０は、情報処理装置１０から暗号操作されたデータを取得すると、秘密鍵を用いて暗号操作されたデータを復号し、復号データを各組織の装置に送信する。情報処理装置５０は、復号処理装置として機能する。
【００３０】
また、各情報処理装置２０〜５０は、ノートＰＣ（Personal Computer）やデスクトップＰＣやサーバ、タブレット端末、又はスマートフォンなどである。
【００３１】
＜ハードウェア＞
図２は、実施例１における情報処理装置１０のハードウェア構成の一例を示すブロック図である。図２に示す情報処理装置１０は、制御部１０２、主記憶部１０４、補助記憶部１０６、通信部１０８、及び記録媒体Ｉ／Ｆ部１１０を少なくとも有する。各部は、バスを介して相互にデータ送受信可能に接続されている。
【００３２】
制御部１０２は、コンピュータの中で、各装置の制御やデータの演算、加工を行うＣＰＵ（Central Processing Unit）である。また、制御部１０２は、主記憶部１０４や補助記憶部１０６に記憶されたプログラムを実行する演算装置であり、通信部１０８や各記憶部からデータを受け取り、演算、加工した上で、出力部や各記憶部に出力する。
【００３３】
また、制御部１０２は、例えば補助記憶部１０６に記憶される秘匿順位計算プログラムを実行することで、秘匿されたデータの順位計算機能を果たす。
【００３４】
主記憶部１０４は、ＲＯＭ（Read Only Memory）やＲＡＭ（Random Access Memory）などであり、制御部１０２が実行する基本ソフトウェアであるＯＳやアプリケーションソフトウェアなどのプログラムやデータを記憶又は一時保存する記憶装置である。
【００３５】
補助記憶部１０６は、ＨＤＤ（Hard Disk Drive）などであり、アプリケーションソフトウェアなどに関連するデータを記憶する記憶装置である。また、補助記憶部１０６は、記録媒体１１２などから取得した秘匿順位計算プログラムや、通信部１０８から取得した秘匿データなど記憶しておいてもよい。
【００３６】
通信部１０８は、有線又は無線などのネットワークを通じて通信を行う。通信部１０８は、例えば、情報処理装置２０などから秘匿データを取得する。
【００３７】
記録媒体Ｉ／Ｆ（インターフェース）部１１０は、ＵＳＢ（Universal Serial Bus）などのデータ伝送路を介して接続された記録媒体１１２（例えば、フラッシュメモリなど）と情報処理装置１０とのインターフェースである。
【００３８】
また、記録媒体１１２に、所定のプログラムを格納し、この記録媒体１１２に格納されたプログラムは記録媒体Ｉ／Ｆ部１１０を介して情報処理装置１０にインストールされる。インストールされた所定のプログラムは、情報処理装置１０により実行可能となる。
【００３９】
なお、上記情報処理装置１０の構成は、情報処理装置２０〜５０についても同様である。各情報処理装置は、図２に示すように、一般的なコンピュータの構成を有する。各情報処理装置は、入力部や表示部を備えてもよい。以降では、各情報処理装置の構成については、図２に示す符号と同じ符号を共通して用いる。
【００４０】
＜機能＞
図３は、実施例１における秘匿計算システム１内の各装置の機能構成の一例を示すブロック図である。
【００４１】
（情報処理装置４０）
情報処理装置４０は、マスク値を生成、管理するサーバとしての機能を有する装置である。情報処理装置４０は、マスク値生成部４０２、通信部４０４を有する。
【００４２】
マスク値生成部４０２は、秘匿計算システム１で用いられる組織の数、取りうる値の数が予め設定されている。ここでは、組織の数は、ｍ個、取りうる値の数は、ｎ個とする。マスク値生成部４０２は、組織の変数をｉ、取りうる値の変数をｊとし、マスク値Ｔｉｊを生成する。
【００４３】
このとき、マスク値生成部４０２は、次の式（３）が成り立つように、マスク値を生成する。
Ｔ１ｊ＋Ｔ２ｊ＋Ｔ３ｊ＋・・・＋Ｔｍｊ＝０  ・・・式（３）
マスク値生成部４０２は、取りうる値の所定値に対し、各組織のマスク値の総和が０になるようマスク値を生成する。マスク値生成部４０２は、生成した全てのマスク値Ｔｉｊを、通信部４０４に出力する。
【００４４】
通信部４０４は、マスク値Ｔｉｊ（１≦ｊ≦ｎ）を、組織Ｕｉの装置に送信する。例えば、通信部４０４は、マスク値Ｔ１ｊを組織Ｕ１の装置に送信し、マスク値Ｔ２ｊを組織Ｕ２の装置に送信する。
【００４５】
（情報処理装置２０）
情報処理装置２０は、数値データを提供する組織により使用される装置である。情報処理装置２０は、保持部２０２、秘匿部２０４、通信部２０６、及び順位決定部２０８を有する。
【００４６】
保持部２０２は、順位付けを行いたい数値データを１又は複数保持する。数値データは、例えばテストの点数や、お店の売上などである。
【００４７】
秘匿部２０４は、保持部２０２に保持されている１又は複数の処理対象の数値データについて、所定範囲内の数値データ毎に、各数値データより大きい処理対象の数値データの個数を計算する。この個数は、上述した式（２）のＮｉｊにより求めることができる。
【００４８】
秘匿部２０４は、計算した各Ｎｉｊ（１≦ｊ≦ｎ）を秘匿して秘匿データを生成する。秘匿には、例えば以下の３つの方法を用いる。
【００４９】
（i）マスク値による秘匿方法
秘匿部２０４は、次の式（４）を用いて秘匿データを計算する。
Ｎ'ｉｊ＝Ｎｉｊ＋Ｔｉｊ  ・・・式（４）
Ｔｉｊは、マスク値である。マスク値は、情報処理装置４０から送信され、各組織の情報処理装置は、送信されたマスク値を保持しておく。例えば、組織Ｕ１の情報処理装置には、マスク値Ｔ１ｊが保持される。秘匿方法（i）によれば、簡易的にデータを秘匿することができる。
【００５０】
（ii）準同型暗号による秘匿方法
秘匿部２０４は、Ｅ（Ｎｉｊ）を計算する。Ｅ（）は、暗号データを加算演算することで、平文データが加算される準同型暗号の公開鍵で暗号化することを表す。この準同型暗号には、Ｐａｉｌｌｉｅｒ暗号やＡｄｄｉｔｉｖｅ  ＥｌＧａｍａｌ暗号などがある。秘匿方法（ii）によれば、データの追加、削除、更新などが容易に行えるようになる。
【００５１】
（iii）マスク値と準同型暗号とによる秘匿方法
秘匿部２０４は、次の式（５）を用いて秘匿データを計算する。
Ｅ（Ｎｉｊ＋Ｔｉｊ）＝Ｅ（Ｎ'ｉｊ）  ・・・式（５）
秘匿部２０４は、マスク値が加算された数値データを準同型暗号の公開鍵で暗号化する。秘匿方法（iii）によれば、秘密鍵を有する人にも、個々のデータはマスクされているため、個々のデータを秘匿することができる。
【００５２】
秘匿部２０４は、（i）〜（iii）のいずれかの秘匿方法で生成した秘匿データを、通信部２０６に出力する。秘匿データとは、Ｎ'ｉｊ、Ｅ（Ｎｉｊ）、又はＥ（Ｎ'ｉｊ）のいずれかである。
【００５３】
通信部２０６は、生成された各秘匿データを情報処理装置１０に送信する。通信部２０６は、情報処理装置１０又は情報処理装置５０から結果データを受信した場合、結果データを順位決定部２０８に出力する。結果データは、暗号操作された、又は暗号操作され復号されたデータであり、このデータ値をＮｊ（＝Ｎ１ｊ＋Ｎ２ｊ＋Ｎ３ｊ＋・・・＋Ｎｍｊ）とする。
【００５４】
順位決定部２０８は、結果データのうち、保持部２０２に保持される１又は複数の数値データに対応する値に１を加算し、各組織の全ての数値データに対する処理対象の数値データの順位を決定する。例えば、順位決定部２０８は、処理対象データのＭｊの順位を、Ｎｊ＋１位と決定する。
【００５５】
情報処理装置３０は、情報処理装置２０と同様の機能を有する。また、各組織の装置も、情報処理装置２０と同様の構成を有する。
【００５６】
（情報処理装置１０）
情報処理装置１０は、例えばクラウドのサーバであり、秘匿計算を行う装置である。情報処理装置１０は、通信部３０２、記憶部３０４、及び暗号操作部３０６を有する。
【００５７】
通信部３０２は、受信部３２２と送信部３２４とを有する。受信部３２２は、各組織Ｕｉの装置（例えば情報処理装置２０、３０など）から秘匿データを受信する。受信部３２２は、秘匿データを、所定範囲内のデータ毎に複数の組織から取得する。所定範囲とは、例えばＭ１〜Ｍｎをいう。
【００５８】
送信部３２４は、加算操作された秘匿データを結果データとして、各組織に送信する。送信部３２４は、結果データが暗号化されている場合は、結果データを復号させるために情報処理装置５０に送信する。
【００５９】
記憶部３０４は、受信部３２２により受信された所定範囲内の数値データ毎の秘匿データ（Ｎｉｊ）を、組織毎に記憶する。
【００６０】
暗号操作部３０６は、記憶部３０４に記憶された所定範囲内の数値データ毎に、各組織の秘匿データを加算操作する。暗号操作部３０６は、個々のデータは秘匿されたまま、次の式（６）を用いて加算操作する。
Ｎｊ＝Ｎ１ｊ＋Ｎ２ｊ＋…＋Ｎｍｊ（１≦ｊ≦ｎ）  ・・・式（６）
暗号操作部３０６は、（i）の場合、次の式（７）により、Ｎ'ｊを計算する。
Ｎ'ｊ＝Ｎ'１ｊ＋Ｎ'２ｊ＋…＋Ｎ'ｍｊ  ・・・式（７）
このとき、Ｔ１ｊ＋Ｔ２ｊ＋…＋Ｔｍｊは予め０となるように定めておくことにより、暗号操作部３０６は、Ｎｊを求めることができる。つまり、Ｎ'ｊ＝Ｎｊである。
【００６１】
暗号操作部３０６は、（ii）の場合、次の式（８）により、Ｅ（Ｎｊ）を計算する。
【００６２】
【数２】
0005799876.tif 000003
【００６３】
暗号操作部３０６は、（iii）の場合、次の式（９）により、Ｅ（Ｎ'ｊ）を計算する。
【００６４】
【数３】
0005799876.tif 000004
【００６５】
暗号操作部３０６は、加算操作により求められた結果データを、送信部３２４に出力する。
【００６６】
（情報処理装置５０）
情報処理装置５０は、準同型暗号の秘密鍵を用いて暗号化されている結果データを復号する装置である。情報処理装置５０は、通信部５０２及び復号部５０４を有する。
【００６７】
通信部５０２は、情報処理装置１０から暗号化されている結果データを受信する。受信した結果データを復号部５０４に出力する。また、通信部５０２は、復号部５０４により復号された結果データを各組織の装置に送信する。
【００６８】
復号部５０４は、通信部５０２から取得した結果データを、準同型暗号の秘密鍵を用いて復号する。これにより、復号部５０４は、結果データ（Ｎｊ）を取得することができる。復号部５０４は、取得した結果データを各装置に送信するため、通信部５０２に出力する。
【００６９】
秘匿計算システム１は、以上の機能を有することで、個々のデータを秘匿しつつ、全体における順位を計算することができる。つまり、各組織Ｕｉは、各データ値Ｍｊの全体における順位を知ることができる。
【００７０】
＜システムの処理手順＞
次に、秘匿計算システム１の処理手順について説明する。秘匿方法として（i）〜（iii）を用いるシステムの処理について順に説明する。
【００７１】
《マスク値による秘匿方法を用いる場合》
図４は、実施例１におけるシステムの処理手順（その１）を説明するための図である。図４に示す例では、マスク値による秘匿方法を用いる。図４に示すように、以下の手順で処理が行われる。
【００７２】
（１）マスク値生成
情報処理装置４０は、組織数ｍ、取りうる値の数ｎを用いて、マスク値Ｔｉｊを生成する。Ｔ１ｊ〜Ｔｍｊの総和は０になる。
【００７３】
（２）マスク値を送信
情報処理装置４０は、組織毎に生成したマスク値を、その組織に送信する。例えば、情報処理装置４０は、マスク値Ｔ１ｊ（１≦ｊ≦ｎ）を組織Ｕ１に送信する。
【００７４】
（３）Ｎｉｊを計算
各組織Ｕｉの装置は、式（２）を用いて、各数値データ（Ｍｊ）よりも大きい処理対象のデータの個数を計算する。
Ｎｉｊ＝＃｛ｘ｜ｘ＞Ｍｊ，ｘはＵｉの保持するデータ｝
＃は、集合の個数を表す。
【００７５】
（４）秘匿データを計算
各組織Ｕｉの装置は、情報処理装置４０から送信されたマスク値を用いて、データの個数をマスクする。各組織の装置は、式（４）によりＮ'ｉｊ＝Ｎｉｊ＋Ｔｉｊを求める。
【００７６】
（５）秘匿データを送信
各組織Ｕｉの装置は、秘匿データＮ'ｉｊを情報処理装置１０に送信する。
【００７７】
（６）加算操作
情報処理装置１０は、式（７）によりＮ'ｊを求める。なお、Ｎ'ｊ＝Ｎｊであるため、情報処理装置１０は、Ｎｊを求めることができる。
【００７８】
（７）Ｎｊを送信
情報処理装置１０は、Ｎｊを各組織の装置に送信する。これにより、各組織は、自身が保持する各数値データに対応するＮｊの値に１を加算すれば、その数値データの全体の順位を知ることができる。
【００７９】
次に、（i）マスク値による秘匿方法を用いる具体例について説明する。以下に示す具体例では、組織数ｍ＝３，データのとり得る値の数ｎ＝５の場合の、Ｎｉｊ，Ｔｉｊ，Ｎ'ｉｊの例を挙げる。
【００８０】
例えば、５点満点のテストを、３つの塾（組織）に行い、それぞれの塾で受けた各受験者の成績（点数）は、秘密にしておき、各受験者の点数の総合成績を知りたい場合がある。
【００８１】
この場合、各データは以下の通りとする。
データの取りうる値（ただし０点は除く）：Ｍ１＝１，Ｍ２＝２，Ｍ３＝３，Ｍ４＝４，Ｍ５＝５
組織（塾）：Ｕ１，Ｕ２，Ｕ３
Ｕ１の３人の成績：１点、２点、４点
Ｕ２の２人の成績：３点、４点
Ｕ３の２人の成績：２点、５点
このとき、各組織の装置は、まず、Ｍｊよりも大きい点数の個数を計算する。
Ｕ１のデータ｛Ｎ１ｊ｝：Ｎ１１＝２，Ｎ１２＝１，Ｎ１３＝１，Ｎ１４＝０，Ｎ１５＝０
例えば、Ｎ１１は、Ｍ１＝１（点）よりも大きい点数の個数を表す。１点よりも大きい点数の個数は、２点と４点とで２つである。よって、Ｎ１１＝２となる。
【００８２】
Ｕ２のデータ｛Ｎ２ｊ｝：Ｎ２１＝２，Ｎ２２＝２，Ｎ２３＝１，Ｎ２４＝０，Ｎ２５＝０
例えば、Ｎ２３は、Ｍ３＝３（点）よりも大きい点数の個数を表す。３点よりも大きい点数の個数は、４点の１つである。よって、Ｎ２３＝１となる。
【００８３】
Ｕ３のデータ｛Ｎ３ｊ｝：Ｎ３１＝２，Ｎ３２＝１，Ｎ３３＝１，Ｎ３４＝１，Ｎ３５＝０
例えば、Ｎ３５は、Ｍ５＝５（点）よりも大きい点数の個数を表す。５点よりも大きい点数の個数は、０である。よって、Ｎ３５＝０となる。
【００８４】
一方、情報処理装置４０は、例えば次のようにマスク値を生成しておく。
マスク値｛Ｔｉｊ｝
Ｔ１１＝  ３，Ｔ１２＝−４，Ｔ１３＝  ６，Ｔ１４＝−２，Ｔ１５＝−５
Ｔ２１＝  ５，Ｔ２２＝  ７，Ｔ２３＝−４，Ｔ２４＝−５，Ｔ２５＝  ３
Ｔ３１＝−８，Ｔ３２＝−３，Ｔ３３＝−２，Ｔ３４＝  ７，Ｔ３５＝  ２
マスク値は、組織毎に対応するマスク値を加算すると０になる。例えば、加算値は、Ｔ１１＋Ｔ２１＋Ｔ３１＝３＋５＋（−８）＝０となる。よって、全てのｊについて、Ｔ１ｊ＋Ｔ２ｊ＋Ｔ３ｊ＝０が成立する。
【００８５】
次に、各組織の装置は、秘匿データ｛Ｎ'ｉｊ＝Ｎｉｊ＋Ｔｉｊ｝を生成する。
Ｕ１のデータ｛Ｎ'１ｊ｝：Ｎ'１１＝５，Ｎ'１２＝−３，Ｎ'１３＝７，Ｎ'１４＝−２，Ｎ'１５＝−５
Ｕ２のデータ｛Ｎ'２ｊ｝：Ｎ'２１＝７，Ｎ'２２＝９，Ｎ'２３＝−３，Ｎ'２４＝−５，Ｎ'２５＝３
Ｕ３のデータ｛Ｎ'３ｊ｝：Ｎ'３１＝−６，Ｎ'３２＝−２，Ｎ'３３＝−１，Ｎ'３４＝８，Ｎ'３５＝２
次に、情報処理装置１０は、暗号操作（加算操作）を行い、順位データ｛Ｎｉ｝を生成する。
Ｎ１＝Ｎ'１１＋Ｎ'２１＋Ｎ'３１＝５＋７−６＝６
Ｎ２＝Ｎ'１２＋Ｎ'２２＋Ｎ'３２＝−３＋９−２＝４
Ｎ３＝Ｎ'１３＋Ｎ'２３＋Ｎ'３３＝７−３−１＝３
Ｎ４＝Ｎ'１４＋Ｎ'２４＋Ｎ'３４＝−２−５＋８＝１
Ｎ５＝Ｎ'１５＋Ｎ'２５＋Ｎ'３５＝−５＋３＋２＝０
従って、各組織の装置は、Ｎｊを取得することで、各点数の順位が分かる。
Ｍ１の順位：Ｎ１＋１＝７位
Ｍ２の順位：Ｎ２＋１＝５位
Ｍ３の順位：Ｎ３＋１＝４位
Ｍ４の順位：Ｎ４＋１＝２位
Ｍ５の順位：Ｎ５＋１＝１位
つまり、１点の受験者は７位であり、２点の受験者は５位であり、３点の受験者は４位であり、４点の受験者は２位であり、５点の受験者は１位である。
【００８６】
《準同型暗号による秘匿方法を用いる場合》
図５は、実施例１におけるシステムの処理手順（その２）を説明するための図である。図５に示す例では、準同型暗号による秘匿方法を用いる。図５に示すように、以下の手順で処理が行われる。
【００８７】
（１）公開鍵、秘密鍵の生成
情報処理装置５０は、例えば、ＰａｉｌｌｉｅｒやＡｄｄｉｔｉｖｅ  ＥｌＧａｍａｌ暗号などの準同型暗号の秘密鍵（ＳＫ：Secret Key）、公開鍵（ＰＫ：Public Key）を生成する。
【００８８】
（２）公開鍵を公開
情報処理装置５０は、生成した公開鍵（ＰＫ）を公開する。
【００８９】
（３）Ｎｉｊを計算
各組織Ｕｉの装置は、式（２）を用いて、各数値データ（Ｍｊ）よりも大きい処理対象のデータの個数を計算する。
Ｎｉｊ＝＃｛ｘ｜ｘ＞Ｍｊ，ｘはＵｉの保持するデータ｝
＃は、集合の個数を表す。
【００９０】
（４）秘匿データを計算
各組織Ｕｉの装置は、情報処理装置５０により公開された公開鍵（ＰＫ）を用いて、データの個数Ｎｉｊを暗号化する。各組織の装置は、Ｅ（Ｎｉｊ，ＰＫ）を求める。Ｅ（Ｎｉｊ，ＰＫ）は、データＮｉｊを公開鍵ＰＫで暗号化することを表す。Ｅ（Ｎｉｊ，ＰＫ）は、単にＥ（Ｎｉｊ）とも表記する。
【００９１】
（５）秘匿データを送信
各組織Ｕｉの装置は、秘匿データＥ（Ｎｉｊ）を情報処理装置１０に送信する。
【００９２】
（６）加算操作
情報処理装置１０は、式（８）によりＥ（Ｎｊ）を求める。
【００９３】
（７）Ｅ（Ｎｊ）を送信
情報処理装置１０は、Ｅ（Ｎｊ）を情報処理装置５０に送信する。
【００９４】
（８）秘密鍵で復号
情報処理装置５０は、受信したＥ（Ｎｊ）を秘密鍵（ＳＫ）で復号する。これにより、情報処理装置５０は、Ｎｊ（ｊ＝１，２，・・・，ｎ）の値を取得することができる。
【００９５】
（９）Ｎｊを送信
情報処理装置５０は、各組織Ｕｉに対し、取得したＮｊを送信する。これにより、各組織は、自身が保持する各数値データに対応するＮｊの値に１を加算すれば、その数値データの全体の順位を知ることができる。また、準同型暗号を用いる場合は、クラウドサーバ以外の装置で秘匿データの復号を行うことで、クラウドサーバにも結果データが分からない点で、セキュリティ上の大きなメリットがある。
【００９６】
《マスク値と準同型暗号とによる秘匿方法を用いる場合》
図６は、実施例１におけるシステムの処理手順（その３）を説明するための図である。図６に示す例では、マスク値と準同型暗号とによる秘匿方法を用いる。図６に示すように、以下の手順で処理が行われる。
【００９７】
（１Ａ）マスク値生成
情報処理装置４０は、組織数ｍ、取りうる値の数ｎを用いて、マスク値Ｔｉｊを生成する。Ｔ１ｊ〜Ｔｍｊの総和は０になる。
【００９８】
（２Ａ）マスク値を送信
情報処理装置４０は、組織毎に生成したマスク値を、その組織に送信する。例えば、情報処理装置４０は、マスク値Ｔ１ｊ（１≦ｊ≦ｎ）を組織Ｕ１に送信する。
【００９９】
（１Ｂ）公開鍵、秘密鍵の生成
情報処理装置５０は、例えば、ＰａｉｌｌｉｅｒやＡｄｄｉｔｉｖｅ  ＥｌＧａｍａｌ暗号などの準同型暗号の秘密鍵（ＳＫ：Secret Key）、公開鍵（ＰＫ：Public Key）を生成する。
【０１００】
（２Ｂ）公開鍵を公開
情報処理装置５０は、生成した公開鍵（ＰＫ）を公開する。
【０１０１】
（３）Ｎｉｊを計算
各組織Ｕｉの装置は、式（２）を用いて、各数値データ（Ｍｊ）よりも大きい処理対象のデータの個数を計算する。
Ｎｉｊ＝＃｛ｘ｜ｘ＞Ｍｊ，ｘはＵｉの保持するデータ｝
＃は、集合の個数を表す。
【０１０２】
（４）秘匿データを計算（その１）
各組織Ｕｉの装置は、情報処理装置４０から送信されたマスク値を用いて、データの個数をマスクする。各組織の装置は、式（４）によりＮ'ｉｊ＝Ｎｉｊ＋Ｔｉｊを求める。
【０１０３】
（５）秘匿データを計算（その２）
各組織Ｕｉの装置は、情報処理装置５０により公開された公開鍵（ＰＫ）を用いて、データの個数Ｎ'ｉｊを暗号化する。各組織の装置は、Ｎ'ｉｊ＝Ｅ（Ｎ'ｉｊ，ＰＫ）を求める。Ｅ（Ｎ'ｉｊ，ＰＫ）は、データＮ'ｉｊを公開鍵ＰＫで暗号化することを表す。Ｅ（Ｎ'ｉｊ，ＰＫ）は、単にＥ（Ｎ'ｉｊ）とも表記する。
【０１０４】
（６）秘匿データを送信
各組織Ｕｉの装置は、秘匿データＥ（Ｎ'ｉｊ）を情報処理装置１０に送信する。
【０１０５】
（７）加算操作
情報処理装置１０は、式（９）によりＥ（Ｎ'ｊ）を求める。
【０１０６】
（８）Ｅ（Ｎ'ｊ）を送信
情報処理装置１０は、Ｅ（Ｎ'ｊ）を情報処理装置５０に送信する。
【０１０７】
（９）秘密鍵で復号
情報処理装置５０は、受信したＥ（Ｎ'ｊ）を秘密鍵（ＳＫ）で復号する。これにより、情報処理装置５０は、Ｎ'ｊ＝Ｎ'ｊであるため、Ｎｊ（ｊ＝１，２，・・・，ｎ）の値を取得することができる。
【０１０８】
（１０）Ｎｊを送信
情報処理装置５０は、各組織Ｕｉに対し、取得したＮｊを送信する。これにより、各組織は、自身が保持する各数値データに対応するＮｊの値に１を加算すれば、その数値データの全体の順位を知ることができる。また、準同型暗号を用いる場合は、クラウドサーバ以外の装置で秘匿データの復号を行うことで、クラウドサーバにも結果データが分からない点で、セキュリティ上の大きなメリットがある。
【０１０９】
＜動作＞
次に、秘匿計算システム１の各装置の動作について説明する。各動作の処理は、秘匿方法（i）〜（iii）毎に説明する。
【０１１０】
《マスク値による秘匿方法の場合》
図７は、実施例１におけるマスク値生成処理の一例を示すフローチャートである。情報処理装置４０は、マスク値を管理する機能を有する。情報処理装置４０は、処理をする前に、組織数ｍと取りうる値の数ｎとを入力される。
【０１１１】
図７に示す例では、ステップＳ１０１で、マスク値生成部４０２は、ｎに対応する変数ｊに１を代入する。
【０１１２】
ステップＳ１０２で、マスク値生成部４０２は、マスク値Ｔ１ｊ，・・・，Ｔｍｊを生成する。
【０１１３】
ステップＳ１０３で、マスク値生成部４０２は、ｊに１を加算する。ステップＳ１０４で、マスク値生成部４０２は、ｊがｎより大きいかを判定する。ｊ＞ｎであれば（ステップＳ１０４−ＹＥＳ）ステップＳ１０５に進み、ｊ＞ｎでなければ（ステップＳ１０４−ＮＯ）ステップＳ１０２に戻る。
【０１１４】
ステップＳ１０５で、通信部４０４は、ｍに対応する変数ｉに１を代入する。ステップＳ１０６で、通信部４０４は、Ｔｉ１，・・・，Ｔｉｎを組織Ｕｉに送信する。変数ｉは、ｍに対応する変数である。
【０１１５】
ステップＳ１０７で、通信部４０４は、ｉに１を加算する。ステップＳ１０８で、通信部４０４は、ｉがｍより大きいかを判定する。ｉ＞ｍであれば（ステップＳ１０８−ＹＥＳ）処理を終了し、ｉ＞ｍでなければ（ステップＳ１０８−ＮＯ）ステップＳ１０６に戻る。この処理により、マスク値Ｔｉｊが生成される。
【０１１６】
図８は、実施例１における秘匿データ生成処理（その１）の一例を示すフローチャートである。以下に示す例は、組織Ｕｉの装置で行われる処理の例である。組織Ｕｉの装置には、データがｎ個保持されている。
【０１１７】
図８に示すステップＳ２０１で、通信部２０６は、マスク値Ｔｉ１，・・・，Ｔｉｎを受信する。
【０１１８】
ステップＳ２０２で、秘匿部２０４は、ｎの変数ｊに１を代入する。ステップＳ２０３で、秘匿部２０４は、式（２）を用いてＮｉｊを計算する。
【０１１９】
ステップＳ２０４で、秘匿部２０４は、式（４）によりＮ'ｉｊを計算する。ステップＳ２０５で、秘匿部２０４は、ｊに１を加算する。
【０１２０】
ステップＳ２０６で、秘匿部２０４は、ｊがｎより大きいかを判定する。ｊ＞ｎであれば（ステップＳ２０６−ＹＥＳ）ステップＳ２０７に進み、ｊ＞ｎでなければ（ステップＳ２０６−ＮＯ）ステップＳ２０３に戻る。
【０１２１】
ステップＳ２０７で、通信部２０６は、生成された秘匿データＮ'ｉ１，・・・，Ｎ'ｉｎを情報処理装置１０に送信する。
【０１２２】
これにより、個々のデータそのものではないＮｉｊに対し、さらにそのＮｉｊを秘匿して、クラウド側に送信することができる。
【０１２３】
図９は、実施例１における暗号操作処理（その１）の一例を示すフローチャートである。情報処理装置１０は、クラウドのサーバとしての機能を果たす。
【０１２４】
図９に示すステップＳ３０１で、受信部３２２は、各組織Ｕｉから秘匿データＮ'ｉｊ（ｊ＝１，・・・，ｎ）を受信する。受信したデータは、記憶部３０４に記憶される。ステップＳ３０２で、暗号操作部３０６は、ｊに１を代入する。
【０１２５】
ステップＳ３０３で、暗号操作部３０６は、各組織Ｕｉの秘匿データを加算する。暗号操作部３０６は、Ｎ'１ｊ＋，・・・，Ｎ'ｍｊ＝Ｎ'ｊ＝Ｎｊを計算する。
【０１２６】
ステップＳ３０４で、暗号操作部３０６は、ｊに１を加算する。ステップＳ３０５で、暗号操作部３０６は、ｊがｎより大きいかを判定する。ｊ＞ｎであれば（ステップＳ３０５−ＹＥＳ）ステップＳ３０６に進み、ｊ＞ｎでなければ（ステップＳ３０５−ＮＯ）ステップＳ３０３に戻る。
【０１２７】
ステップＳ３０６で、送信部３２４は、取得したＮｉ，・・・，Ｎｎを各組織Ｕｉの装置に送信する。
【０１２８】
これにより、クラウド側では、個々のデータを知ることなく、暗号操作を行い、Ｎ１，・・・，Ｎｎを各組織の装置に送信することができる。
【０１２９】
図１０は、実施例１における順位決定処理の一例を示すフローチャートである。図１０に示すステップＳ３５１で、通信部２０６は、情報処理装置１０からＮ１，・・・，Ｎｎを受信する。
【０１３０】
ステップＳ３５２で、順位決定部２０８は、保持部２０２に保持されるデータｘに対応するＮｊを特定する。
【０１３１】
ステップＳ３５３で、順位決定部２０８は、Ｎｊの値に１を加算することで、データｘの順位を決定する。
【０１３２】
これにより、各組織Ｕｉの装置は、データｘの全体における順位を決定することができる。
【０１３３】
《準同型暗号による秘匿方法の場合》
図１１は、実施例１における鍵生成処理の一例を示すフローチャートである。情報処理装置５０は、暗号加算が可能な準同型暗号を用いる装置である。
【０１３４】
図１１に示すステップＳ４０１で、情報処理装置５０は、公開鍵ＰＫと秘密鍵ＳＫとを生成する。
【０１３５】
ステップＳ４０２で、情報処理装置５０は、生成した公開鍵ＰＫを公開する。これにより、他の装置が、この公開鍵ＰＫを用いて暗号化を行うことができるようになる。
【０１３６】
図１２は、実施例１における秘匿データ生成処理（その２）の一例を示すフローチャートである。以下に示す例は、組織Ｕｉの装置で行われる処理の例である。組織Ｕｉの装置には、処理対象のデータがｎ個保持されているとする。
【０１３７】
図１２に示すステップＳ５０１で、組織Ｕｉの装置は、公開されている公開鍵ＰＫを取得する。
【０１３８】
ステップＳ５０２で、秘匿部２０４は、ｎの変数ｊに１を代入する。ステップＳ５０３で、秘匿部２０４は、式（２）を用いてＮｉｊを計算する。
【０１３９】
ステップＳ５０４で、秘匿部２０４は、公開鍵ＰＫによりＥ（Ｎｉｊ）を計算する。ステップＳ５０５で、秘匿部２０４は、ｊに１を加算する。
【０１４０】
ステップＳ５０６で、秘匿部２０４は、ｊがｎより大きいかを判定する。ｊ＞ｎであれば（ステップＳ５０６−ＹＥＳ）ステップＳ５０７に進み、ｊ＞ｎでなければ（ステップＳ５０６−ＮＯ）ステップＳ５０３に戻る。
【０１４１】
ステップＳ５０７で、通信部２０６は、生成された秘匿データＥ（Ｎｉ１），・・・，Ｅ（Ｎｉｎ）を情報処理装置１０に送信する。
【０１４２】
これにより、個々のデータそのものではないＮｉｊに対し、さらにそのＮｉｊを暗号を用いて秘匿して、クラウド側に送信することができる。
【０１４３】
図１３は、実施例１における暗号操作処理（その２）の一例を示すフローチャートである。情報処理装置１０は、クラウドのサーバとしての機能を果たす。
【０１４４】
図１３に示すステップＳ６０１で、受信部３２２は、各組織Ｕｉから秘匿データＥ（Ｎｉｊ）（ｊ＝１，・・・，ｎ）を受信する。受信したデータは、記憶部３０４に記憶される。ステップＳ６０２で、暗号操作部３０６は、ｊに１を代入する。
【０１４５】
ステップＳ６０３で、暗号操作部３０６は、各組織Ｕｉの秘匿データを暗号加算する。暗号操作部３０６は、式（８）により、Ｅ（Ｎｊ）を計算する。
【０１４６】
ステップＳ６０４で、暗号操作部３０６は、ｊに１を加算する。ステップＳ６０５で、暗号操作部３０６は、ｊがｎより大きいかを判定する。ｊ＞ｎであれば（ステップＳ６０５−ＹＥＳ）ステップＳ６０６に進み、ｊ＞ｎでなければ（ステップＳ６０５−ＮＯ）ステップＳ６０３に戻る。
【０１４７】
ステップＳ６０６で、送信部３２４は、生成したＥ（Ｎ１），・・・，Ｅ（Ｎｎ）を情報処理装置５０に送信する。
【０１４８】
これにより、クラウド側では、個々のデータを知ることなく、暗号操作を行い、Ｅ（Ｎ１），・・・，Ｅ（Ｎｎ）を情報処理装置５０に送信することができる。
【０１４９】
図１４は、実施例１における復号処理の一例を示すフローチャートである。図１４に示すステップＳ７０１で、通信部５０２は、情報処理装置１０からＥ（Ｎ１），・・・，Ｅ（Ｎｎ）を受信する。
【０１５０】
ステップＳ７０２で、復号部５０４は、秘密鍵ＳＫを用いて、暗号化されたＥ（Ｎ１），・・・，Ｅ（Ｎｎ）を復号する。これにより、Ｎ１，・・・，Ｎｎが取得される。
【０１５１】
ステップＳ７０３で、通信部５０２は、取得したＮ１，・・・，Ｎｎを各Ｕｉの装置に送信する。
【０１５２】
これにより、クラウド側では、個々のデータを知ることなく、暗号操作を行い、Ｎ１，・・・，Ｎｎを、復号処理を行う装置に送信することができる。このとき、各組織の装置は、データの追加、削除、更新などを容易に行うことができる。
【０１５３】
なお、順位の決定処理については、データの受信相手が情報処理装置５０になるところが異なり、他は図１０と同じである。
【０１５４】
《マスク値と準同型暗号とによる秘匿方法の場合》
図１５は、実施例１における秘匿データ生成処理（その３）の一例を示すフローチャートである。以下に示す例は、組織Ｕｉの装置で行われる処理の例である。組織Ｕｉの装置には、データがｎ個保持されている。
【０１５５】
図１５に示すステップＳ８０１で、組織Ｕｉの装置は、公開されている公開鍵ＰＫを取得する。
【０１５６】
ステップＳ８０２で、通信部２０６は、マスク値Ｔｉ１，・・・，Ｔｉｎを受信する。ステップＳ８０３で、秘匿部２０４は、ｎの変数ｊに１を代入する。ステップＳ８０４で、秘匿部２０４は、式（２）を用いてＮｉｊを計算する。
【０１５７】
ステップＳ８０５で、秘匿部２０４は、式（４）によりＮ'ｉｊを計算する。ステップＳ８０６で、秘匿部２０４は、公開鍵ＰＫによりＥ（Ｎ'ｉｊ）を計算する。ステップＳ８０７で、秘匿部２０４は、ｊに１を加算する。
【０１５８】
ステップＳ８０８で、秘匿部２０４は、ｊがｎより大きいかを判定する。ｊ＞ｎであれば（ステップＳ８０８−ＹＥＳ）ステップＳ８０９に進み、ｊ＞ｎでなければ（ステップＳ８０８−ＮＯ）ステップＳ８０４に戻る。
【０１５９】
ステップＳ８０９で、通信部２０６は、生成された秘匿データＥ（Ｎ'ｉ１），・・・，Ｅ（Ｎ'ｉｎ）を情報処理装置１０に送信する。
【０１６０】
これにより、個々のデータそのものではないＮ'ｉｊに対し、さらにそのＮ'ｉｊを、暗号を用いて秘匿して、クラウド側に送信することができる。よって、秘密鍵を有する人は、個々のデータはマスクされているため、個々のデータを知ることができない。
【０１６１】
図１６は、実施例１における暗号操作処理（その３）の一例を示すフローチャートである。情報処理装置１０は、クラウドのサーバとしての機能を果たす。
【０１６２】
図１６に示すステップＳ９０１で、受信部３２２は、各組織Ｕｉから秘匿データＥ（Ｎ'ｉｊ）（ｊ＝１，・・・，ｎ）を受信する。受信したデータは、記憶部３０４に記憶される。ステップＳ９０２で、暗号操作部３０６は、ｊに１を代入する。
【０１６３】
ステップＳ９０３で、暗号操作部３０６は、各組織Ｕｉの秘匿データを暗号加算する。暗号操作部３０６は、式（９）により、Ｅ（Ｎ'ｊ）を計算する。
【０１６４】
ステップＳ９０４で、暗号操作部３０６は、ｊに１を加算する。ステップＳ９０５で、暗号操作部３０６は、ｊがｎより大きいかを判定する。ｊ＞ｎであれば（ステップＳ９０５−ＹＥＳ）ステップＳ９０６に進み、ｊ＞ｎでなければ（ステップＳ９０５−ＮＯ）ステップＳ９０３に戻る。
【０１６５】
ステップＳ９０６で、送信部３２４は、生成したＥ（Ｎ１），・・・，Ｅ（Ｎｎ）を情報処理装置５０に送信する。ここで、Ｎ'１＝Ｎ１，・・・，Ｎ'ｎ＝Ｎｎである。
【０１６６】
なお、マスク値生成処理は、図７に示す処理と同様であり、鍵生成処理は、図１１に示す処理と同様であり、復号処理は、図１４に示す処理と同様である。順位決定処理は、データの受信相手が情報処理装置５０になること以外は、図１０に示す処理と同様である。
【０１６７】
これにより、クラウド側では、個々のデータを知ることなく、暗号操作を行い、Ｅ（Ｎ１），・・・，Ｅ（Ｎｎ）を情報処理装置５０に送信することができる。また、秘密鍵を有する人でも、個々のデータはマスクされているため、個々のデータを知ることができない。
【０１６８】
以上、実施例１によれば、個々のデータを秘匿しつつ、全体における順位を計算することができる。
【０１６９】
［実施例２］
次に、実施例２における秘匿計算システムについて説明する。実施例２では、どの秘匿方法を用いるかを、システムを制御する装置が決定する。この装置は、制御サーバとも呼ぶ。制御サーバは、秘匿したいデータのセキュリティ度に応じて、その秘匿方法を用いるかを決定する。
【０１７０】
＜システムとハードウェア＞
実施例２における秘匿計算システムは、図１に示す秘匿計算システム１に制御サーバを追加する。制御サーバのハードウェアは、図２に示すハードウェアと同様である。
【０１７１】
＜機能＞
図１７は、実施例２における秘匿計算システム２内の各装置の機能構成の一例を示すブロック図である。図１７に示す機能で、図３に示す機能と同様の機能を有するものは、同じ符号を付す。以下では、実施例２における主な機能について説明する。
【０１７２】
（制御サーバ６０）
制御サーバ６０は、ネットワークを介して各装置と接続され、秘匿計算システム２を制御するサーバである。制御サーバ６０は、秘匿制御部６０２を有する。
【０１７３】
秘匿制御部６０２は、処理対象のデータのセキュリティ度に基づき、秘匿方法（i）〜（iii）のいずれを用いるかを決定する。秘匿制御部６０２は、決定した秘匿方法を、各組織Ｕｉに通知する。
【０１７４】
例えば、秘匿制御部６０２は、管理者などにより与えられた処理対象のセキュリティ度が「低」を示せば、秘匿方法（i）に決定し、セキュリティ度が「中」を示せば、秘匿方法（ii）に決定し、セキュリティ度が「高」を示せば、秘匿方法（iii）に決定する。
【０１７５】
なお、秘匿制御部６０２は、秘匿方法（i）又は（iii）に決定した場合は、組織数ｍと取りうる値の数ｎを情報処理装置４０に通知し、マスク値を生成させる。秘匿制御部６０２は、秘匿方法（ii）又は（iii）に決定した場合、情報処理装置５０に通知し、公開鍵と秘密鍵とを生成させる。
【０１７６】
秘匿制御部６０２は、処理対象データの取りうる値Ｍ１，Ｍ２，・・・，Ｍｎを決定してもよい。例えば、テストの点数の場合は、０点から満点までの各点数がＭ１，・・・，Ｍｎになり、売上などの場合は、所定単位毎に上限値までの値がＭ１，・・・，Ｍｎになる。所定単位は、処理対象のお店や会社の規模に基づくが、例えば、１０万単位、１００万単位、１０００万単位などである。秘匿制御部６０２は、決定した取りうる値をＭ１，・・・，Ｍｎを各組織Ｕｉ及び各情報処理装置１０、４０、５０に通知する。
【０１７７】
制御サーバ６０以外の各装置は、実施例１の各装置の機能と同様の機能を有する。なお、情報処理装置２０の秘匿部２０４は、秘匿方法（i）〜（iii）のいずれも処理可能であり、秘匿制御部６０２により通知された秘匿方法で秘匿を行う。
【０１７８】
［変形例］
なお、上記各実施例では、大きい値の方が、順位が高い実施例について説明したが、小さい値の方が、順位が高い場合は、式（２）のｘ＜Ｍｊをとなるデータの個数をカウントすればよい。
【０１７９】
なお、前述した各実施例で説明した処理を実現するためのプログラムを記録媒体に記録することで、各実施例での処理をコンピュータに実施させることができる。例えば、このプログラムを記録媒体に記録し、このプログラムが記録された記録媒体をコンピュータに読み取らせて、前述した処理を実現させることも可能である。
【０１８０】
なお、記録媒体は、ＣＤ−ＲＯＭ、フレキシブルディスク、光磁気ディスク等の様に情報を光学的、電気的或いは磁気的に記録する記録媒体、ＲＯＭ、フラッシュメモリ等の様に情報を電気的に記録する半導体メモリ等、様々なタイプの記録媒体を用いることができる。この記録媒体には、搬送波は含まれない。
【０１８１】
以上、各実施例について詳述したが、特定の実施例に限定されるものではなく、特許請求の範囲に記載された範囲内において、種々の変形及び変更が可能である。
【０１８２】
なお、以上の各実施例に関し、さらに以下の付記を開示する。
（付記１）
１又は複数の処理対象データに対して、所定範囲内のデータ毎に、該データより大きい前記処理対象データの個数が秘匿された秘匿データを、複数の組織の装置からネットワークを介して取得し、
取得されたデータ毎の前記秘匿データを、組織毎に記憶部に記憶し、
前記記憶部に記憶された所定範囲内のデータ毎に、各組織の秘匿データを加算操作する処理をコンピュータに実行させるためのプログラム。
（付記２）
前記秘匿データは、前記処理対象データの個数にマスク値を加算して秘匿され、
前記マスク値は、前記所定範囲内のデータ毎の、各組織のマスク値の総和が０となる付記１記載のプログラム。
（付記３）
前記秘匿データは、暗号化データを加算操作すると、平文データが加算される準同型暗号を用いて暗号化される付記１記載のプログラム。
（付記４）
前記秘匿データは、前記マスク値が加算されたデータに対し、暗号化データを加算操作すると、平文データが加算される準同型暗号を用いて暗号化されたデータである付記２記載のプログラム。
（付記５）
前記データ毎の加算操作されたデータを、各組織の装置に送信する処理をさらにコンピュータに実行させるための付記１又は２に記載のプログラム。
（付記６）
１又は複数の処理対象データに対して、所定範囲内のデータ毎に、該データより大きい前記処理対象のデータの個数が秘匿された秘匿データを、複数の組織の装置からネットワークを介して取得し、
取得されたデータ毎の秘匿データを、組織毎に記憶部に記憶し、
前記記憶部に記憶された所定範囲内のデータ毎に、各組織の秘匿データを加算操作する処理をコンピュータが実行する情報処理方法。
（付記７）
１又は複数の処理対象データに対して、所定範囲内のデータ毎に、該データより大きい前記処理対象データの個数が秘匿された秘匿データを、複数の組織の装置からネットワークを介して受信する受信部と、
前記受信部により受信されたデータ毎の秘匿データを、組織毎に記憶する記憶部と、
前記記憶部に記憶された所定範囲内のデータ毎に、各組織の秘匿データを加算操作する操作部と
を備える情報処理装置。
（付記８）
１又は複数の処理対象データに対して、所定範囲内のデータ毎に、該データより大きい前記処理対象データの個数を秘匿して秘匿データを生成し、
前記秘匿データをサーバに送信し、
前記サーバにより各組織から受信された秘匿データに対し、前記所定範囲内のデータ毎に、前記サーバから各組織の秘匿データが加算操作されたデータを、又は前記加算操作されたデータを復号した装置から復号後のデータを受信し、
前記受信されたデータを用いて、前記各組織の全てのデータに対する前記処理対象データの順位を決定する処理をコンピュータに実行させるためのプログラム。
【符号の説明】
【０１８３】
１、２  秘匿計算システム
１０、２０、３０、４０、５０情報処理装置
６０  制御サーバ
１０２  制御部
１０４  主記憶部
１０６  補助記憶部
２０４  秘匿部
２０６  通信部
２０８  順位決定部
３０２  通信部
３０４  記憶部
３０６  暗号操作部
６０２  秘匿制御部
【図１】
0005799876.tif 000005
【図２】
0005799876.tif 000006
【図３】
0005799876.tif 000007
【図４】
0005799876.tif 000008
【図５】
0005799876.tif 000009
【図６】
0005799876.tif 000010
【図７】
0005799876.tif 000011
【図８】
0005799876.tif 000012
【図９】
0005799876.tif 000013
【図１０】
0005799876.tif 000014
【図１１】
0005799876.tif 000015
【図１２】
0005799876.tif 000016
【図１３】
0005799876.tif 000017
【図１４】
0005799876.tif 000018
【図１５】
0005799876.tif 000019
【図１６】
0005799876.tif 000020
【図１７】
0005799876.tif 000021