(57)【要約】【課題】運用コスト及び保管コストを抑えつつ、高い準同型性を持ち、かつ効率的に処理できる準同型暗号技術を提供することを目的とする。【解決手段】マスタ公開鍵ＭＰＫ及びマスタ秘密鍵ＭＳＫを生成するマスタ鍵生成装置２００と、マスタ公開鍵ＭＰＫを用いて、ユーザ公開鍵ＰＫ及びユーザ秘密鍵ＳＫを生成するユーザ鍵生成装置３００と、演算手順を取得し、ユーザ公開鍵ＰＫにより暗号化されたデータを暗号化データとして保管するデータ保管部から、演算手順に用いられるデータが暗号化された暗号化データを選択し、演算手順に基づいて暗号化データに対して準同型演算を行い、準同型演算の演算結果を暗号化演算結果として出力する管理装置７００と、暗号化演算結果を取得し、取得した暗号化演算結果をマスタ秘密鍵ＭＳＫで復号するマスタ復号装置５００とを備えた。【選択図】図１
2018036418.tif 000002
【特許請求の範囲】
【請求項１】
第１のユーザの公開鍵及び秘密鍵をマスタ公開鍵及びマスタ秘密鍵として生成するマスタ鍵生成装置と、
前記マスタ公開鍵を用いて、第２のユーザの公開鍵及び秘密鍵をユーザ公開鍵及びユーザ秘密鍵として生成するユーザ鍵生成装置と、
前記ユーザ公開鍵により暗号化された暗号化データを保管するデータ保管部と、データを用いた演算の手順を演算手順として取得し、前記演算手順に用いられるデータが暗号化された暗号化データを前記データ保管部から選択し、前記演算手順に基づいて前記暗号化データに対して準同型演算を行い、準同型演算の演算結果を暗号化演算結果として出力する演算部とを備えた管理装置と、
前記暗号化演算結果を取得し、取得した前記暗号化演算結果を前記マスタ秘密鍵で復号するマスタ復号装置と
を備えた暗号システム。
【請求項２】
前記マスタ鍵生成装置は、
前記マスタ公開鍵及び前記マスタ秘密鍵を前記マスタ復号装置に送信すると共に、前記マスタ公開鍵のみを前記ユーザ鍵生成装置と前記管理装置とに送信する請求項１に記載の暗号システム。
【請求項３】
前記マスタ鍵生成装置は、
ペアリング写像が計算できる楕円曲線上の巡回群を構成する生成元を用いて、前記マスタ公開鍵及び前記マスタ秘密鍵を生成し、
前記ユーザ鍵生成装置は、
前記マスタ公開鍵とランダムに選択された自然数とを用いて、前記ユーザ公開鍵及び前記ユーザ秘密鍵を生成する請求項１または２に記載の暗号システム。
【請求項４】
前記演算部は、
乗算を含む前記演算手順を取得する請求項１から３のいずれか１項に記載の暗号システム。
【請求項５】
前記暗号システムは、さらに、
暗号化するデータを取得し、取得したデータを前記ユーザ公開鍵により暗号化し、暗号化したデータを前記暗号化データとして前記管理装置に送信する暗号化装置と、
前記管理装置から前記暗号化演算結果を取得し、取得した前記暗号化演算結果を前記ユーザ秘密鍵で復号するユーザ復号装置と
を備える請求項１から４のいずれか１項に記載の暗号システム。
【請求項６】
前記マスタ鍵生成装置は、
前記マスタ公開鍵及び前記マスタ秘密鍵を前記マスタ復号装置に送信すると共に、前記マスタ公開鍵のみを、前記ユーザ鍵生成装置と前記暗号化装置と前記管理装置とに送信し、
前記ユーザ鍵生成装置は、
前記ユーザ公開鍵及び前記ユーザ秘密鍵を前記ユーザ復号装置に送信すると共に、前記ユーザ公開鍵のみを、前記暗号化装置と前記管理装置とに送信する請求項５に記載の暗号システム。
【請求項７】
前記暗号化装置は、
前記暗号化するデータとユーザを識別するユーザ識別子とを取得し、前記暗号化データと前記ユーザ識別子とを前記管理装置に送信し、
前記データ保管部は、
前記暗号化データと前記ユーザ識別子とを対応付けて記憶し、
前記演算部は、
前記演算手順と前記第２のユーザのユーザ識別子である第２のユーザ識別子とを取得し、前記演算手順に用いられるデータが暗号化された暗号化データであって前記第２のユーザ識別子に対応付けられた暗号化データを前記データ保管部から選択し、選択した暗号化データに対して前記演算手順に基づいて準同型演算を行う請求項５または６に記載の暗号システム。
【請求項８】
マスタ鍵生成装置が、第１のユーザの公開鍵及び秘密鍵をマスタ公開鍵及びマスタ秘密鍵として生成し、
ユーザ鍵生成装置が、前記マスタ公開鍵を用いて、第２のユーザの公開鍵及び秘密鍵をユーザ公開鍵及びユーザ秘密鍵として生成し、
管理装置が、データを用いた演算の手順を演算手順として取得し、前記演算手順に用いられるデータを暗号化した暗号化データを、前記ユーザ公開鍵により暗号化された暗号化データが保管されたデータ保管部から選択し、前記演算手順に基づいて前記暗号化データに対して準同型演算を行い、準同型演算の演算結果を暗号化演算結果として出力し、
マスタ復号装置が、前記暗号化演算結果を取得し、取得した前記暗号化演算結果を前記マスタ秘密鍵で復号する暗号方法。
【請求項９】
第１のユーザの公開鍵及び秘密鍵をマスタ公開鍵及びマスタ秘密鍵として生成するマスタ鍵生成処理と、
前記マスタ公開鍵を用いて、第２のユーザの公開鍵及び秘密鍵をユーザ公開鍵及びユーザ秘密鍵として生成するユーザ鍵生成処理と、
データを用いた演算の手順を演算手順として取得し、前記演算手順に用いられるデータを暗号化した暗号化データを、前記ユーザ公開鍵により暗号化された暗号化データを保管するデータ保管部から選択し、前記演算手順に基づいて前記暗号化データに対して準同型演算を行い、準同型演算の演算結果を暗号化演算結果として出力する準同型演算処理と、
前記暗号化演算結果を取得し、取得した前記暗号化演算結果を前記マスタ秘密鍵で復号する演算結果復号処理と
をコンピュータに実行させる暗号プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号システム、暗号方法及び暗号プログラムに関する。特に、準同型技術を用いて暗号化データを復号することなく情報処理する暗号システム、暗号方法及び暗号プログラムに関する。
【背景技術】
【０００２】
準同型暗号とは、データを暗号化したまま情報処理できる暗号技術である。具体的には、暗号文同士を特殊な演算を施すことによって、各暗号文の中身の平文の和の暗号文や積の暗号文、またそれらの演算を組み合わせた演算結果の暗号文を、平文を知ることなく公開情報のみを用いて生成できる暗号技術である。例えば、このような準同型暗号技術として、特許文献１〜２、また非特許文献１〜７などがある。
【０００３】
近年、クラウドサービス等の普及により、インターネット上でデータの管理や処理が可能となった。しかし、インターネット上でのデータ管理や処理には、データ管理の委託先であるクラウドなどのサーバがコンピュータウィルス等のマルウェアに感染することや、サーバの管理者が不正を働くことによって、預けたデータが外部に漏洩する危険性がある。もしサーバに預けたデータが個人情報や企業機密データであった場合には、この漏洩は非常に問題である。
【０００４】
このようなセキュリティの脅威を回避する方法として暗号技術があるが、単純にデータを暗号化してサーバに保管すると、データの処理が困難となるといった問題が発生する。このような問題を回避するため、よくある方法として、サーバ上に保管された暗号化データを一旦復号してからデータ処理を行うといった方法がある。しかし、この方法はデータがサーバ内で一定期間平文に戻ってしまい、その瞬間を攻撃されて情報漏洩する可能性があるため、対策として十分とはいえない。このような問題を解決できる暗号技術として、データを暗号化したまま演算できる「準同型暗号技術」が知られており、具体的な手法が近年多く開示されている。
【０００５】
なお、準同型暗号技術は大まかに分けて、良く知られたＲＳＡ暗号方式や非特許文献１、２のように、加算や乗算のみ実行可能な「群準同型暗号」、非特許文献３、４のように、加算と乗算はどちらも実行できるものの演算の実行回数に制限がある「Ｓｏｍｅｗｈａｔ準同型暗号」、非特許文献５，６のように、加算や乗算どちらも実行回数に制限なく演算できる「完全準同型暗号」の３種類がある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】国際公開第２０１２／１６９１５３号
【特許文献２】特開２０１５−１８４４９０号公報
【非特許文献】
【０００７】
【非特許文献１】Ｐ．Ｐａｉｌｌｉｅｒ，“Ｐｕｂｌｉｃ−Ｋｅｙ  Ｃｒｙｐｔｏｓｙｓｔｅｍｓ  Ｂａｓｅｄ  ｏｎ  Ｃｏｍｐｏｓｉｔｅ  Ｄｅｇｒｅｅ  Ｒｅｓｉｄｕｏｓｉｔｙ  Ｃｌａｓｓｅｓ”，Ｅｕｒｏｃｒｙｐｔ  １９９９，Ｌｅｃｔｕｒｅ  Ｎｏｔｅｓ  ｉｎ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ  １５９２，Ｓｐｒｉｎｇｅｒ．
【非特許文献２】Ｅ．Ｂｒｅｓｓｏｎ，Ｄ．Ｃａｔａｌａｎｏ，ａｎｄ  Ｄ．Ｐｏｉｎｔｃｈｅｖａｌ，“Ａ  Ｓｉｍｐｌｅ  Ｐｕｂｌｉｃ−Ｋｅｙ  Ｃｒｙｐｔｏｓｙｓｔｅｍｓ  ｗｉｔｈ  ａ  Ｄｏｕｂｌｅ  Ｔｒａｐｄｏｏｒ  Ｄｅｃｒｙｐｔｉｏｎ  Ｍｅｃｈａｎｉｓｍ  ａｎｄ  ｉｔｓ  Ａｐｐｌｉｃａｔｉｏｎｓ”，Ａｓｉａｃｒｙｐｔ  ２００３，Ｌｅｃｔｕｒｅ  Ｎｏｔｅｓ  ｉｎ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ  ２８９４，Ｓｐｒｉｎｇｅｒ．
【非特許文献３】Ｄ．Ｂｏｎｅｈ，Ｅ−Ｊ．Ｇｏｈ，ａｎｄ  Ｋ．Ｎｉｓｓｉｍ，“Ｅｖａｌｕａｔｉｎｇ  ２−ＤＮＦ  Ｆｏｒｍｕｌａｓ  ｏｎ  Ｃｉｐｈｅｒｔｅｘｔｓ”，ＴＣＣ  ２００５，  Ｌｅｃｔｕｒｅ  Ｎｏｔｅｓ  ｉｎ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ  ３３７８，Ｓｐｒｉｎｇｅｒ．
【非特許文献４】Ｄ．Ｃａｔａｌａｎｏ  ａｎｄ  Ｄ．Ｆｉｏｒｅ，“Ｂｏｏｓｔｉｎｇ  Ｌｉｎｅａｒｌｙ−Ｈｏｍｏｍｏｒｐｈｉｃ  Ｅｎｃｒｙｐｔｉｏｎ  ｔｏ  Ｅｖａｌｕａｔｅ  Ｄｅｇｒｅｅ−２  Ｆｕｎｃｔｉｏｎｓ  ｏｎ  Ｅｎｃｒｙｐｔｅｄ  Ｄａｔａ”，ＩＡＣＲ  Ｃｒｙｐｔｏｌｏｇｙ  ｅＰｒｉｎｔ  Ａｒｃｈｉｖｅ：Ｒｅｐｏｒｔ  ２０１４／８１３．
【非特許文献５】Ｃ．Ｇｅｎｔｒｙ，“Ｆｕｌｌｙ  Ｈｏｍｏｍｏｒｐｈｉｃ  Ｅｎｃｒｙｐｔｉｏｎ  Ｕｓｉｎｇ  Ｉｄｅａｌ  Ｌａｔｔｉｃｅｓ”，ＳＴＯＣ  ２００９，ＡＣＭ．
【非特許文献６】Ｃ．Ｇｅｎｔｒｙ，Ａ．Ｓａｈａｉ，ａｎｄ  Ｂ．Ｗａｔｅｒｓ，“Ｈｏｍｏｍｏｒｐｈｉｃ  Ｅｎｃｒｙｐｔｉｏｎ  ｆｒｏｍ  Ｌｅａｒｎｉｎｇ  ｗｉｔｈ  Ｅｒｒｏｒｓ：Ｃｏｎｃｅｐｔｕａｌｌｙ−Ｓｉｍｐｌｅｒ，Ａｓｙｍｐｔｏｔｉｃａｌｌｙ−Ｆａｓｔｅｒ，Ａｔｔｒｉｂｕｔｅ−Ｂａｓｅｄ”，Ｃｒｙｐｔｏ  ２０１３，  Ｌｅｃｔｕｒｅ  Ｎｏｔｅｓ  ｉｎ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ  ８０４２，Ｓｐｒｉｎｇｅｒ．
【非特許文献７】Ｄ．Ｍ．Ｆｒｅｅｍａｎ，“Ｃｏｎｖｅｒｔｉｎｇ  Ｐａｉｒｉｎｇ−Ｂａｓｅｄ  Ｃｒｙｐｔｏｓｙｓｔｅｍｓ  ｆｒｏｍ  Ｃｏｍｐｏｓｉｔｅ−Ｏｒｄｅｒ  Ｇｒｏｕｐｓ  ｔｏ  Ｐｒｉｍｅ−Ｏｒｄｅｒ  Ｇｒｏｕｐｓ”，Ｅｕｒｏｃｒｙｐｔｏ  ２０１０，  Ｌｅｃｔｕｒｅ  Ｎｏｔｅｓ  ｉｎ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ  ６１１０，Ｓｐｒｉｎｇｅｒ．
【発明の概要】
【発明が解決しようとする課題】
【０００８】
公開鍵暗号をベースとした既存の準同型暗号技術の多くは、公開鍵と秘密鍵が１対１に対応しているため、１つの暗号文に対して１人のユーザしか復号できないような構造となっている。つまり、同じデータをｎ人の異なるユーザと共有する場合は、各ユーザの公開鍵を使ってｎ個の暗号文を生成しなくてはならず、保管コストの課題がある。
【０００９】
一方、このような課題を考慮して設計された準同型暗号技術が、特許文献１、２や、非特許文献２、６などで開示されている。しかし、これらの技術には未だ以下のような課題ある。
【００１０】
非特許文献２では、２種類の秘密鍵を作れる技術が開示されている。具体的には、通常の公開鍵・秘密鍵のペアに加えて、どのような暗号文も復号できる秘密鍵（以降、マスタ秘密鍵と呼ぶ）を生成できる。言い換えると、一つの暗号文に対して、二種類の秘密鍵を使って復号することが可能である。しかし、非特許文献２で開示された技術は、加法のみ実行できる群準同型暗号技術であり、加法だけの演算では達成できる処理が限られてしまうため、アプリケーションの観点から好ましくない。すなわち、非特許文献２で開示された技術は準同型性の課題がある。
【００１１】
特許文献１では、再暗号化技術を用いて保管コストを削減する技術が開示されている。しかし、本文献で開示された技術も、加法のみ実行できる群準同型暗号技術であり、加法だけの演算では達成できる処理が限られてしまうため、やはりアプリケーションの観点から好ましくない。すなわち、特許文献１で開示された技術は非特許文献２と同様に準同型性の課題がある。
【００１２】
非特許文献６では、多種類の秘密鍵を生成できる方式が開示されているのみならず、加法も乗算も実行できる完全準同型暗号技術が開示されている。また、非特許文献２とは異なり、１つの暗号文に対して復号できる権限を柔軟に設定できることや、暗号化したまま様々なデータ処理が実行できる。しかし、本文献で開示された技術は格子暗号と呼ばれる技術をベースとしており、この技術は暗号化の処理コスト、暗号文のサイズ、鍵サイズがＲＳＡ暗号などの良く知られた公開鍵暗号技術と比べて非常に大きく、効率面で好ましくない。すなわち、非特許文献６で開示された技術は、実用的なコストの観点で課題がある。
【００１３】
特許文献２では、暗号化された補助情報と再暗号化技術を用いて保管コストを削減する技術が開示されている。しかし、本文献で開示された技術も、格子暗号を用いた技術をベースとしており、効率面で好ましくない。すなわち、特許文献２で開示された技術は非特許文献６と同様に実用的なコストの観点で課題がある。
【００１４】
また、非特許文献２を除く従来の技術では、マスタ公開鍵とマスタ秘密鍵との両方を用いて、ユーザ公開鍵とユーザ秘密鍵を生成しているので、より運用コストが高くなるという課題もあった。
【００１５】
本発明は、運用コスト及び保管コストを抑えつつ、Ｓｏｍｅｗｈａｔ準同型暗号や完全準同型暗号のように高い準同型性を持ち、かつ効率的に処理できる準同型暗号技術を提供することを目的とする。
【課題を解決するための手段】
【００１６】
本発明に係る暗号システムは、
第１のユーザの公開鍵及び秘密鍵をマスタ公開鍵及びマスタ秘密鍵として生成するマスタ鍵生成装置と、
前記マスタ公開鍵を用いて、第２のユーザの公開鍵及び秘密鍵をユーザ公開鍵及びユーザ秘密鍵として生成するユーザ鍵生成装置と、
前記ユーザ公開鍵により暗号化された暗号化データを保管するデータ保管部と、データを用いた演算の手順を演算手順として取得し、前記演算手順に用いられるデータが暗号化された暗号化データを前記データ保管部から選択し、前記演算手順に基づいて前記暗号化データに対して準同型演算を行い、準同型演算の演算結果を暗号化演算結果として出力する演算部とを備えた管理装置と、
前記暗号化演算結果を取得し、取得した前記暗号化演算結果を前記マスタ秘密鍵で復号するマスタ復号装置とを備えた。
【発明の効果】
【００１７】
本発明に係る暗号装置では、ユーザ鍵生成装置は、マスタ秘密鍵を用いずに、マスタ公開鍵のみを用いて、ユーザ公開鍵及びユーザ秘密鍵を生成する。また、管理装置の演算部は、データを用いた演算の手順を演算手順として取得し、演算手順に用いられるデータが暗号化された暗号化データをデータ保管部から選択し、演算手順に基づいて暗号化データに対して準同型演算を行い、暗号化演算結果を出力する。そして、マスタ復号装置は、暗号化演算結果を取得し、暗号化演算結果をマスタ秘密鍵で復号する。よって、運用コスト及び保管コストを抑えつつ、効率的に処理できる暗号システムを提供することができる。
【図面の簡単な説明】
【００１８】
【図１】実施の形態１に係る暗号システム１００の構成図。
【図２】実施の形態１に係るマスタ鍵生成装置２００の構成図。
【図３】実施の形態１に係るユーザ鍵生成装置３００の構成図。
【図４】実施の形態１に係る暗号化装置４００の構成図。
【図５】実施の形態１に係るマスタ復号装置５００の構成図。
【図６】実施の形態１に係るユーザ復号装置６００の構成図。
【図７】実施の形態１に係る管理装置７００の構成図。
【図８】実施の形態１に係る暗号システム１００のマスタ鍵ペア生成および保管処理を示すフローチャート。
【図９】実施の形態１に係る暗号システム１００のユーザ鍵ペア生成および保管処理を示すフローチャート。
【図１０】実施の形態１に係る暗号システム１００のデータ暗号化および保管処理を示すフローチャート。
【図１１】実施の形態１に係る暗号システム１００のマスタ復号処理Ｓ３０を示すフローチャート。
【図１２】実施の形態１に係る暗号システム１００のユーザ向けのデータ復号処理を示すフローチャート。
【図１３】実施の形態１に係る暗号システム１００の演算処理Ｓ５０および演算結果復号処理を示すフローチャート。
【図１４】実施の形態１に係る暗号システム１００の演算処理Ｓ５０および演算結果復号処理を示すフローチャート。
【図１５】実施の形態１の変形例に係るマスタ鍵生成装置２００の構成図。
【図１６】実施の形態１の変形例に係るユーザ鍵生成装置３００の構成図。
【図１７】実施の形態１の変形例に係る暗号化装置４００の構成図。
【図１８】実施の形態１の変形例に係るマスタ復号装置５００の構成図。
【図１９】実施の形態１の変形例に係るユーザ復号装置６００の構成図。
【図２０】実施の形態１の変形例に係る管理装置７００の構成図。
【発明を実施するための形態】
【００１９】
以下、本発明の実施の形態について、図を用いて説明する。なお、各図中、同一又は相当する部分には、同一符号を付している。実施の形態の説明において、同一又は相当する部分については、その説明を適宜省略又は簡略化する。
【００２０】
実施の形態１．
＊＊＊構成の説明＊＊＊
図１を用いて、本実施の形態に係る暗号システム１００の構成について説明する。
本実施の形態では、加算が任意回、乗算が１回実行可能なＳｏｍｅｗｈａｔ準同型暗号技術を開示する。
図１に示すように、暗号システム１００は、マスタ鍵生成装置２００と、ユーザ鍵生成装置３００と、暗号化装置４００と、マスタ復号装置５００と、ユーザ復号装置６００と、管理装置７００とを備える。暗号システム１００は、複数のマスタ鍵生成装置２００を備えていてもよい。暗号システム１００は、複数のユーザ鍵生成装置３００を備えていてもよい。暗号システム１００は、複数の暗号化装置４００を備えていてもよい。暗号システム１００は、複数のマスタ復号装置５００を備えていてもよい。暗号システム１００は、複数のユーザ復号装置６００を備えていてもよい。暗号システム１００は、複数の管理装置７００を備えていてもよい。
【００２１】
図１では、暗号システム１００は、マスタ鍵生成装置２００と、ユーザ鍵生成装置３００、暗号化装置４００と、マスタ復号装置５００と、ユーザ復号装置６００と、管理装置７００とそれぞれインターネット１０１を経由して接続される。しかし、暗号システム１００は、各装置がインターネット１０１を経由して接続されず、同じ企業内に敷設されたＬＡＮ（Ｌｏｃａｌ・Ａｒｅａ・Ｎｅｔｗｏｒｋ）内に設置されていてもよい。
インターネット１０１は、マスタ鍵生成装置２００と、ユーザ鍵生成装置３００と、暗号化装置４００と、マスタ復号装置５００と、ユーザ復号装置６００と、管理装置７００とを接続する通信路である。インターネット１０１は、ネットワークの例である。インターネット１０１の代わりに、他の種類のネットワークが用いられてもよい。
【００２２】
マスタ鍵生成装置２００は、本システムの管理者の公開鍵及び秘密鍵をマスタ公開鍵及びマスタ秘密鍵として生成する。マスタ鍵生成装置２００は、本システムの管理者用の暗号化や復号に利用するマスタ公開鍵とマスタ秘密鍵のペア（以降、マスタ鍵ペアと呼ぶ）を生成し、インターネット１０１を介して、マスタ公開鍵をユーザ鍵生成装置３００、暗号化装置４００と、管理装置７００とへ送信する装置である。また、マスタ鍵生成装置２００は、インターネット１０１を介して、マスタ鍵ペアをマスタ復号装置５００へ送信する装置である。なお、このマスタ公開鍵やマスタ鍵ペアは、インターネット１０１を介さず、記録媒体や郵送などで直接的に送信してもよい。
【００２３】
ユーザ鍵生成装置３００は、マスタ公開鍵を用いて、本システムのユーザの公開鍵及び秘密鍵をユーザ公開鍵及びユーザ秘密鍵として生成する。ユーザ鍵生成装置３００は、本システムのユーザ用の暗号化や復号に利用するユーザ公開鍵とユーザ秘密鍵のペア（以降、ユーザ鍵ペアと呼ぶ）を生成し、インターネット１０１を介して、ユーザ公開鍵を暗号化装置４００と、管理装置７００とへ送信する装置である。また、ユーザ鍵生成装置３００は、インターネット１０１を介して、ユーザ鍵ペアをユーザ復号装置６００へ送信する装置である。なお、このユーザ公開鍵やユーザ鍵ペアは、インターネット１０１を介さず、記録媒体や郵送などで直接的に送信してもよい。
【００２４】
ここで、暗号システム１００の管理者とは、すべてのユーザの暗号文を復号できる能力を持つ特別なユーザのことである。本システムの管理者は、第１のユーザの例である。
一方で、暗号システム１００のユーザは、管理者とは異なり、他のユーザの暗号文を復号することができず、自身に対応した公開鍵で暗号化された暗号文のみ復号できる。本システムのユーザは、第２のユーザの例である。
なお、準同型演算は、マスタ公開鍵や各ユーザの公開鍵があればどのような装置でも実行できる。ただし、準同型演算を行った後の暗号文を復号するためには、マスタ秘密鍵もしくは各ユーザのユーザ秘密鍵が必要である。
【００２５】
暗号化装置４００は、暗号化するデータを取得し、取得したデータをユーザ公開鍵により暗号化し、暗号化したデータを暗号化データとして管理装置７００に送信する。暗号化装置４００は、マスタ公開鍵またはユーザ公開鍵を用いて、データを暗号化して暗号文（以降、暗号化データと呼ぶ）を生成し、管理装置７００に保管する装置である。
【００２６】
マスタ復号装置５００は、マスタ鍵ペアを用いて、管理装置７００などに登録されている暗号文を復号して平文を抽出する装置である。
また、マスタ復号装置５００は、管理装置７００に登録されている暗号文に対して準同型演算を実行させる要求を出し、マスタ鍵ペアを用いて、準同型演算結果の暗号文（以降、暗号化演算結果と呼ぶ）を復号して平文の演算結果を抽出する装置である。
【００２７】
ユーザ復号装置６００は、ユーザ鍵ペアを用いて、管理装置７００などに登録されている暗号文を復号して平文を抽出する装置である。
また、ユーザ復号装置６００は、管理装置７００に登録されている暗号文に対して準同型演算を実行させる要求を出し、ユーザ鍵ペアを用いて、準同型演算結果の暗号文（すわなち、暗号化演算結果）を復号して平文の演算結果を抽出する装置である。
【００２８】
管理装置７００は、暗号化装置４００によって生成された暗号化データを保管する大容量の記録媒体を持つ装置である。
管理装置７００は、保管装置として機能する。即ち、管理装置７００は、暗号化装置４００から暗号化データの保管の要求があれば、暗号化データを保管する。
また、管理装置７００は、演算装置として機能する。即ち、管理装置７００は、マスタ復号装置５００またはユーザ復号装置６００から、管理装置７００に保管されている暗号化データに対して準同型演算の要求があれば、指定された暗号化データに関して準同型演算を実行し、暗号化演算結果をマスタ復号装置５００またはユーザ復号装置６００に送信する。
【００２９】
次に、暗号システム１００が備えるマスタ鍵生成装置２００と、ユーザ鍵生成装置３００と、暗号化装置４００と、マスタ復号装置５００と、ユーザ復号装置６００と、管理装置７００との各々の構成について説明する。以下の説明において、暗号システム１００が備えるマスタ鍵生成装置２００と、ユーザ鍵生成装置３００と、暗号化装置４００と、マスタ復号装置５００と、ユーザ復号装置６００と、管理装置７００との全ての装置を暗号システム１００が備える装置と称し、暗号システム１００が備える装置の各々を各装置と称する場合がある。
以下において、暗号システム１００が備える装置において共通の機能を有するハードウェアについては同一の符号を付すものとする。
【００３０】
＜マスタ鍵生成装置２００＞
図２を用いて、本実施の形態に係るマスタ鍵生成装置２００の構成について説明する。
マスタ鍵生成装置２００は、コンピュータである。マスタ鍵生成装置２００は、プロセッサ９１０を備えると共に、記憶装置９２０、入力インタフェース９３０、出力インタフェース９４０、通信装置９５０といった他のハードウェアを備える。記憶装置９２０は、メモリ９２１と補助記憶装置９２２とを有する。
【００３１】
図２に示すように、マスタ鍵生成装置２００は、機能構成として、入力部２０１と、マスタ鍵生成部２０２と、出力部２０３と、記憶部２０９とを備える。
以下の説明では、マスタ鍵生成装置２００における入力部２０１と、マスタ鍵生成部２０２と、出力部２０３との機能を、マスタ鍵生成装置２００の「部」の機能という。
マスタ鍵生成装置２００の「部」の機能は、ソフトウェアで実現される。
記憶部２０９は、記憶装置９２０で実現される。
【００３２】
入力部２０１は、入力インタフェース９３０を介して管理者から暗号強度を表すセキュリティパラメーターλを受け取る。
マスタ鍵生成部２０２は、入力部２０１から受け取ったセキュリティパラメーターλに基づき、マスタ公開鍵ＭＰＫとマスタ秘密鍵ＭＳＫからなるマスタ鍵ペア（ＭＰＫ、ＭＳＫ）を生成する。マスタ鍵生成部２０２は、ペアリング写像が計算できる楕円曲線上の巡回群を構成する生成元ｇを用いて、マスタ公開鍵ＭＰＫ及びマスタ秘密鍵ＭＳＫを生成する。
具体的には、マスタ鍵生成部２０２は、λ／２ビットの素数ｐと素数ｑをランダムに生成し、例えば非特許文献３に記載されている方法を用いて、双線型写像ｅ（ペアリング写像とも呼ばれる）が効率良く計算できる楕円曲線上の位数Ｎの巡回群Ｇ＿Ｎを構成する生成元ｇを求める。なお、ｅはＧ＿Ｎ×Ｇ＿Ｎ→Ｇ＿Ｎ’と定義される写像で、Ｇ＿Ｎ’は位数Ｎの巡回群である。以降、Ｇ＿Ｎ上の演算を＊で表わし、Ｇ＿Ｎ’上の演算を・で表わす。またべき乗演算を＾で表わす。巡回群Ｇ＿Ｎの部分巡回群Ｇ＿ｐを構成するｈ＝ｇ＾（αｑ）を求める。ただし、αは整数の集合｛１，・・・，ｐ｝からランダムに選んだ整数とする。このとき、ＭＰＫ＝（Ｎ，ｅ，ｇ，ｈ）、ＭＳＫ＝（ｐ，ｑ）とおく。
出力部２０３は、マスタ鍵生成部２０２で生成されたマスタ公開鍵ＭＰＫを、通信装置９５０を介して、ユーザ鍵生成装置３００と、暗号化装置４００と、管理装置７００とへ送信する。また、出力部２０３は、マスタ鍵生成部２０２で生成されたマスタ鍵ペア（ＭＳＫ、ＭＳＫ）を、通信装置９５０を介して、マスタ復号装置５００へ送信する。すなわち、マスタ鍵生成装置２００は、マスタ公開鍵ＭＰＫ及びマスタ秘密鍵ＭＳＫをマスタ復号装置５００に送信すると共に、マスタ公開鍵ＭＰＫのみを、ユーザ鍵生成装置３００と暗号化装置４００と管理装置７００とに送信する。
【００３３】
＜ユーザ鍵生成装置３００＞
図３を用いて、本実施の形態に係るユーザ鍵生成装置３００の構成について説明する。
ユーザ鍵生成装置３００は、コンピュータである。マスタ鍵生成装置２００は、プロセッサ９１０を備えると共に、記憶装置９２０、入力インタフェース９３０、出力インタフェース９４０、通信装置９５０といった他のハードウェアを備える。記憶装置９２０は、メモリ９２１と補助記憶装置９２２とを有する。
【００３４】
図３に示すように、ユーザ鍵生成装置３００は、機能構成として、入力部３０１と、ユーザ鍵生成部３０３と、出力部３０４と、記憶部３０９とを備える。記憶部３０９は、マスタ公開鍵保管部３０２を有する。
以下の説明では、ユーザ鍵生成装置３００における入力部３０１と、ユーザ鍵生成部３０３と、出力部３０４との機能を、ユーザ鍵生成装置３００の「部」の機能という。
ユーザ鍵生成装置３００の「部」の機能は、ソフトウェアで実現される。
記憶部３０９は、記憶装置９２０で実現される。
【００３５】
入力部３０１は、通信装置９５０を介して、マスタ鍵生成装置２００で生成されたマスタ公開鍵ＭＰＫを受け取る。
また、入力部３０１は、入力インタフェース９３０を介して、ユーザから、そのユーザを識別するユーザ識別子ＵＩＤを受け取る。例えば、ユーザ識別子は、ユーザの名前や、所属している組織の名前や、システムで逐次一意的に振られる識別番号がその一例である。これは、どのユーザと関連するユーザ公開鍵であるか、どのユーザと関連する暗号文であるかを示すために用いられる。
マスタ公開鍵保管部３０２は、入力部３０１から受け取ったマスタ公開鍵ＭＰＫを保管する。
【００３６】
ユーザ鍵生成部３０３は、マスタ公開鍵ＭＰＫとランダムに選択された自然数とを用いて、ユーザ公開鍵ＰＫ及びユーザ秘密鍵ＳＫを生成する。ユーザ鍵生成部３０３は、入力部３０１から受け取ったユーザ識別子ＵＩＤと、マスタ公開鍵保管部３０２から読み出したマスタ公開鍵ＭＰＫとを用いて、ユーザ公開鍵ＰＫとユーザ秘密鍵ＳＫからなるユーザ鍵ペア（ＰＫ，ＳＫ）を生成する
具体的には、ユーザ鍵生成部３０３は、マスタ公開鍵ＭＰＫを用いて、ｙ＝ｈ＾ｘを求める。ただし、ｘは整数の集合｛１，・・・，Ｎ｝からランダムに選んだ自然数である。このとき、ＰＫ＝（Ｎ，ｅ，ｇ，ｈ，ｙ）、ＳＫ＝ｘとおく。
【００３７】
出力部３０４は、ユーザ鍵生成部３０３で生成されたユーザ公開鍵とユーザ識別子のペア（ＰＫ，ＵＩＤ）を出力し、通信装置９５０を介して、暗号化装置４００と、管理装置７００とへ送信する。また、出力部３０４は、ユーザ鍵生成部３０３で生成されたユーザ鍵ペア（ＰＫ、ＳＫ）とユーザ識別子ＵＩＤの組（ＰＫ，ＳＫ，ＵＩＤ）を出力し、通信装置９５０を介して、ユーザ復号装置６００へ送信する。すなわち、ユーザ鍵生成装置３００は、ユーザ公開鍵ＰＫ及びユーザ秘密鍵ＳＫをユーザ復号装置６００に送信すると共に、ユーザ公開鍵ＰＫのみを、暗号化装置４００と管理装置７００とに送信する。
【００３８】
＜暗号化装置４００＞
図４を用いて、本実施の形態に係る暗号化装置４００の構成について説明する。
暗号化装置４００は、コンピュータである。暗号化装置４００は、プロセッサ９１０を備えると共に、記憶装置９２０、入力インタフェース９３０、出力インタフェース９４０、通信装置９５０といった他のハードウェアを備える。記憶装置９２０は、メモリ９２１と補助記憶装置９２２とを有する。
【００３９】
図４に示すように、暗号化装置４００は、機能構成として、入力部４０１と、暗号化部４０４と、送信部４０５と、記憶部４０９とを備える。記憶部４０９は、マスタ公開鍵保管部４０２と、ユーザ公開鍵保管部４０３とを有する。
以下の説明では、暗号化装置４００における入力部４０１と、暗号化部４０４と、送信部４０５との機能を、暗号化装置４００の「部」の機能という。
暗号化装置４００の「部」の機能は、ソフトウェアで実現される。
記憶部４０９は、記憶装置９２０で実現される。
【００４０】
入力部４０１は、通信装置９５０を介して、マスタ鍵生成装置２００で生成されたマスタ公開鍵ＭＰＫや、ユーザ鍵生成装置３００で生成されたユーザ公開鍵とユーザ識別子のペア（ＰＫ，ＵＩＤ）を受け取る。
入力部４０１は、入力インタフェース９３０を介して、ユーザから、暗号化したいデータｍと、そのデータを識別するデータ識別子ＤＩＤと、暗号化データを渡したいユーザのユーザ識別子ＵＩＤとを受け取る。例えば、データ識別子は、データの名前や、システムで逐次一意的に振られる識別番号がその一例である。このデータ識別子は、復号する対象の暗号文や準同型演算に用いる対象の暗号文を識別するために用いられる。また、データｍは、離散対数問題が解ける程度のビット長を持つデータとする。例えば、ｌｏｇ＿２（λ）程度のビット長としてもよい。
【００４１】
マスタ公開鍵保管部４０２は、入力部４０１から受け取ったマスタ公開鍵ＭＰＫを保管する。
ユーザ公開鍵保管部４０３は、入力部４０１から受け取ったユーザ公開鍵とユーザ識別子のペア（ＰＫ，ＵＩＤ）を保管する。
【００４２】
暗号化部４０４は、マスタ公開鍵保管部４０２からマスタ公開鍵ＭＰＫを読み出し、入力部４０１から受け取ったデータｍを暗号化して、暗号化データｃ０を生成する。
具体的には、暗号化部４０４は、マスタ公開鍵ＭＰＫを用いて、整数の集合｛１，・・・，Ｎ｝の中からランダムにｒを選び、次の（式１）でｃ０を計算する。
ｃ０＝ｙ＾ｒ＊ｇ＾ｍ      （式１）
【００４３】
暗号化部４０４は、入力部４０１から受け取ったユーザ識別子ＵＩＤと対応するようなユーザ公開鍵とユーザ識別子のペア（ＰＫ，ＵＩＤ）をユーザ公開鍵保管部４０３から読み出し、入力部４０１から受け取ったデータｍを暗号化して、暗号化データ（ｃ１，ｃ２）を生成する。
具体的には、暗号化部４０４は、ユーザ公開鍵ＰＫを用いて、整数の集合｛１，・・・，Ｎ｝の中からランダムにｒを選び、次の（式２）及び（式３）でｃ１とｃ２を計算する。
ｃ１＝ｈ＾ｒ      （式２），ｃ２＝ｙ＾ｒ＊ｇ＾ｍ      （式３）
【００４４】
送信部４０５は、管理者を表すユーザ識別子ＵＩＤ（以降、ＡＤＭＩＮと表現する）と、データ識別子ＤＩＤと、暗号化部４０４から受け取ったデータ暗号化データｃ０の組（ＡＤＭＩＮ，ＤＩＤ，ｃ０）を出力し、管理装置７００へ送信する。
送信部４０５は、ユーザ識別子ＵＩＤと、データ識別子ＤＩＤと、暗号化部４０４から受け取った暗号化データ（ｃ１，ｃ２）との組（ＵＩＤ，ＤＩＤ，ｃ１，ｃ２）を出力し、管理装置７００へ送信する。
すなわち、暗号化装置４００は、暗号化するデータｍとユーザを識別するユーザ識別子とを取得し、データｍを暗号化した暗号化データとユーザ識別子とを管理装置７００に送信する。
【００４５】
＜マスタ復号装置５００＞
図５を用いて、本実施の形態に係るマスタ復号装置５００の構成について説明する。
マスタ復号装置５００は、コンピュータである。マスタ復号装置５００は、プロセッサ９１０を備えると共に、記憶装置９２０、入力インタフェース９３０、出力インタフェース９４０、通信装置９５０といった他のハードウェアを備える。記憶装置９２０は、メモリ９２１と補助記憶装置９２２とを有する。
【００４６】
図５に示すように、マスタ復号装置５００は、機能構成として、入力部５０１と、演算手順設定部５０３と、復号部５０４と、出力部５０５と、記憶部５０９とを備える。記憶部５０９は、マスタ鍵ペア保管部５０２を有する。
以下の説明では、マスタ復号装置５００における入力部５０１と、演算手順設定部５０３と、復号部５０４と、出力部５０５との機能を、マスタ復号装置５００の「部」の機能という。
マスタ復号装置５００の「部」の機能は、ソフトウェアで実現される。
記憶部５０９は、記憶装置９２０で実現される。
【００４７】
入力部５０１は、通信装置９５０を介して、マスタ鍵生成装置２００で生成されたマスタ鍵ペア（ＭＰＫ，ＭＳＫ）を受け取る。
入力部５０１は、入力インタフェース９３０を介して、管理者から、管理装置７００に保管されている暗号化データの中で準同型演算したい対象のデータを識別するためのデータ識別子集合｛ＤＩＤ１，・・・，ＤＩＤｎ｝と、その対象のデータに対してどのように処理したいかを示した処理内容Ｋとを受け取る。ただし、ｎは１以上の整数である。これ以降、データ識別子集合｛ＤＩＤ１，・・・，ＤＩＤｎ｝を｛ＤＩＤ｝と略して表記する。例えば、この処理内容は、２つのデータの「総和」や「ユークリッド二乗距離」などがその一例である。もしくは、どのデータとどのデータを準同型加算するなど具体的な演算手順そのものでも構わない。
入力部５０１は、管理装置７００などに保管されている暗号化データや、管理装置７００で処理された暗号化演算結果（準同型演算結果）を受け取る。
【００４８】
マスタ鍵ペア保管部５０２は、入力部５０１から受け取ったマスタ鍵ペア（ＭＰＫ，ＭＳＫ）を保管する。なお、このマスタ鍵ペアを厳重に管理するため、（ＭＰＫ，ＭＳＫ）を暗号化して保管することや、パスワードやトークン、もしくは生体情報などを用いて管理者であることを認証した後に（ＭＰＫ，ＭＳＫ）を読み出せるように保護してもよい。
【００４９】
演算手順設定部５０３は、入力部５０１から受け取ったデータ識別子集合｛ＤＩＤ｝と処理内容Ｋとから、どの暗号化データに対して準同型演算をするかといった、データを用いた演算の手順である演算手順Ｐを生成する。演算手順Ｐには、具体的な準同型演算手順が記述されている。上述したように、演算手順Ｐには、「ユークリッド二乗距離」など乗算が含まれている演算手順でもよい。例えば、処理内容Ｋが「総和」であれば、データ識別子集合に対応した暗号化データを全て準同型加算する、と演算手順を設定する。もし、処理内容Ｋがすでに具体的な準同型演算手順であれば、その処理内容Ｋを演算手順Ｐとして設定してもよい。また、このような手順は事前にシステムで決めて、管理者は決められた手順を選択するようにしてもよい。
【００５０】
復号部５０４は、マスタ鍵ペア保管部５０２からマスタ鍵ペア（ＭＰＫ，ＭＳＫ）を読み出し、入力部５０１から受け取った暗号化データや暗号化演算結果を復号し、平文の演算結果であるデータＭを求める。
具体的には、復号部５０４は、マスタ鍵ペアを用いて、管理者の公開鍵で暗号化された暗号化データｃ０に対して、Ｍ＿ｐ＝ｃ０＾ｐ及びｂ＿ｐ＝ｇ＾ｐを計算し、ｂ＿ｐを底としたＭ＿ｐの離散対数Ｍを計算する。このＭを計算するために、例えば、非特許文献３に記載されたλ法などを使うことができる。以降、離散対数を求めることを表すために、ＤＬｏｇを用いて、Ｍ＝ＤＬｏｇ＿（ｂ＿ｐ）（Ｍ＿ｐ）のように表記する。もし、ユーザ公開鍵で暗号化された暗号文データ（ｃ１，ｃ２）を復号する場合は、ｃ２をｃ０とみて上記と同様な処理を実行すればよい。
また、復号部５０４は、暗号化演算結果がＧ＿Ｎ上の一つの元ｓで表わされていた場合は、マスタ鍵ペアを用いて、ｓ＝ｃ０とみて上記と同様な復号処理を行うことでデータＭを求める。もし、暗号化演算結果がＧ’＿Ｎ上の一つの元Ｓで表わされていた場合には、復号部５０４は、次の（式４）のように計算を行ってデータＭを求める。
Ｍ＝ＤＬｏｇ＿（ｅ（ｇ，ｇ）＾ｐ）（Ｓ＾ｐ）      （式４）
なお、暗号化演算結果のｓやＳの具体的な構造については後に述べる。
【００５１】
出力部５０５は、管理者を表すユーザ識別子ＡＤＭＩＮと、演算手順設定部５０３から受け取ったデータ識別子集合｛ＤＩＤ｝と演算手順Ｐとの組（ＡＤＭＩＮ，｛ＤＩＤ｝，Ｐ）を出力する。出力部５０５は、その組（ＡＤＭＩＮ，｛ＤＩＤ｝，Ｐ）を管理装置７００へ通信装置９５０を介して送信する。
出力部５０５は、出力インタフェース９４０を介して、復号部５０４から受け取ったデータＭを出力する。
【００５２】
＜ユーザ復号装置６００＞
図６を用いて、本実施の形態に係るユーザ復号装置６００の構成について説明する。
ユーザ復号装置６００は、コンピュータである。ユーザ復号装置６００は、プロセッサ９１０を備えると共に、記憶装置９２０、入力インタフェース９３０、出力インタフェース９４０、通信装置９５０といった他のハードウェアを備える。記憶装置９２０は、メモリ９２１と補助記憶装置９２２とを有する。
【００５３】
図６に示すように、ユーザ復号装置６００は、機能構成として、入力部６０１と、演算手順設定部６０３と、復号部６０４と、出力部６０５と、記憶部６０９とを備える。記憶部６０９は、ユーザ鍵ペア保管部６０２を有する。
以下の説明では、ユーザ復号装置６００における入力部６０１と、演算手順設定部６０３と、復号部６０４と、出力部６０５との機能を、ユーザ復号装置６００の「部」の機能という。
ユーザ復号装置６００の「部」の機能は、ソフトウェアで実現される。
記憶部６０９は、記憶装置９２０で実現される。
【００５４】
入力部６０１は、通信装置９５０を介して、ユーザ鍵生成装置３００で生成されたユーザ鍵ペアとユーザ識別子の組（ＰＫ，ＳＫ，ＵＩＤ）を受け取る。
入力部６０１は、入力インタフェース９３０を介して、ユーザから、ユーザ識別子ＵＩＤと、管理装置７００に保管されている暗号化データの中で準同型演算したい対象のデータを識別するためのデータ識別子集合｛ＤＩＤ１，・・・，ＤＩＤｎ｝と、その対象のデータに対してどのように処理したいかを示した処理内容Ｋとを受け取る。ただし、ｎは１以上の整数である。これ以降、データ識別子集合｛ＤＩＤ１，・・・，ＤＩＤｎ｝を｛ＤＩＤ｝と略して表記する。
入力部６０１は、管理装置７００などに保管されている暗号化データや、管理装置７００で処理された暗号化演算結果（準同型演算結果）を受け取る。
【００５５】
ユーザ鍵ペア保管部６０２は、入力部６０１から受け取ったユーザ鍵ペアとユーザ識別子の組（ＰＫ，ＳＫ，ＵＩＤ）を保管する。なお、このユーザ鍵ペアを厳重に管理するため、（ＰＫ，ＳＫ）を暗号化して保管することや、パスワードやトークン、もしくは生体情報などを用いて正しいユーザであることを認証した後に（ＰＫ，ＳＫ）を読み出せるように保護してもよい。
【００５６】
演算手順設定部６０３は、入力部６０１から受け取った処理内容Ｋとデータ識別子集合｛ＤＩＤ｝とユーザ識別子ＵＩＤとから、どの暗号化データに対して準同型演算をするかなどの、具体的な準同型演算手順が記述された演算手順Ｐを生成する。もし、処理内容Ｋがすでに具体的な準同型演算手順であれば、その処理内容Ｋを演算手順Ｐとして設定してもよい。また、前述のように、このような手順は事前にシステムで決めて、ユーザは決められた手順を選択するようにしてもよい。
【００５７】
復号部６０４は、ユーザ鍵ペア保管部６０２からユーザ鍵ペア（ＰＫ，ＳＫ，ＵＩＤ）を読み出し、入力部６０１から受け取った暗号化データ（ｃ１，ｃ２）や暗号化演算結果を復号し、データＭを生成する。
具体的には、復号部６０４は、ユーザ鍵ペアを用いて、暗号化データ（ｃ１，ｃ２）に対して次の（式５）のようにしてデータＭを求める。
Ｍ＝ＤＬｏｇ＿（ｇ）（ｃ１＾（−ｘ）＊ｃ２）      （式５）
【００５８】
また、復号部６０４は、暗号化演算結果がＧ＿Ｎ上の元のペア（ｔ１，ｔ２）（単にｔと表記する場合もある）で表わされていた場合は、ユーザ鍵ペアを用いて、（ｔ１，ｔ２）＝（ｃ１，ｃ２）とみて上記と同様な復号処理を行うことでデータＭを求める。もし、暗号化演算結果がＧ＿Ｎ’上の元の組（Ｔ１，Ｔ２，Ｔ３）（単にＴと表記する場合もある）で表わされていた場合には、復号部５０４は、ユーザ鍵ペアを用いて、次の（式６）のように計算を行ってデータＭを求める。
Ｍ＝ＤＬｏｇ＿（ｅ（ｇ，ｇ））（Ｔ１＾（−ｘ＾２）・Ｔ２＾（ｘ）・Ｔ３）      （式６）
【００５９】
出力部６０５は、ユーザ識別子ＵＩＤと、演算手順設定部５０３から受け取ったデータ識別子集合｛ＤＩＤ｝と演算手順Ｐとの組（ＵＩＤ，｛ＤＩＤ｝，Ｐ）を出力し、管理装置７００へ送信する。出力部６０５は、演算手順設定部６０３から受け取ったユーザ識別子ＵＩＤと、データ識別子集合｛ＤＩＤ｝と、演算手順Ｐとを出力し、その組（ＵＩＤ，｛ＤＩＤ｝，Ｐ）を、通信装置９５０を介して管理装置７００へ送信する。
出力部６０５は、出力インタフェース９４０を介して、復号部６０４から受け取ったデータＭを出力する。
【００６０】
＜管理装置７００＞
図７を用いて、本実施の形態に係る管理装置７００の構成について説明する。
管理装置７００は、コンピュータである。管理装置７００は、プロセッサ９１０を備えると共に、記憶装置９２０、入力インタフェース９３０、出力インタフェース９４０、通信装置９５０といった他のハードウェアを備える。記憶装置９２０は、メモリ９２１と補助記憶装置９２２とを有する。
【００６１】
図７に示すように、管理装置７００は、機能構成として、入力部７０１と、演算部７０４と、出力部７０５と、記憶部７０９とを備える。記憶部７０９は、公開鍵保管部７０２と、データ保管部７０３とを有する。
以下の説明では、管理装置７００における入力部７０１と、演算部７０４と、出力部７０５との機能を、管理装置７００の「部」の機能という。
管理装置７００の「部」の機能は、ソフトウェアで実現される。
記憶部７０９は、記憶装置９２０で実現される。
【００６２】
入力部７０１は、通信装置９５０を介して、マスタ鍵生成装置２００で生成されたマスタ公開鍵ＭＰＫや、ユーザ鍵生成装置３００で生成されたユーザ公開鍵とユーザ識別子のペア（ＰＫ，ＵＩＤ）を受け取る。
入力部７０１は、通信装置９５０を介して、暗号化装置４００で生成されたユーザ識別子とデータ識別子と暗号化データとの組（ＡＤＭＩＮ，ＤＩＤ，ｃ０）や（ＵＩＤ，ＤＩＤ，ｃ１，ｃ２）を受け取る。
入力部７０１は、通信装置９５０を介して、マスタ復号装置５００で生成されたユーザ識別子とデータ識別子集合と演算手順との組（ＡＤＭＩＮ，｛ＤＩＤ｝，Ｐ）や、ユーザ復号装置６００で生成されたユーザ識別子とデータ識別子集合と演算手順の組（ＵＩＤ，｛ＤＩＤ｝，Ｐ）を受け取る。
【００６３】
公開鍵保管部７０２は、入力部７０１から受け取ったマスタ公開鍵ＭＰＫや、ユーザ公開鍵とユーザ識別子のペア（ＰＫ，ＵＩＤ）を保管する。
データ保管部７０３は、マスタ公開鍵ＰＫあるいはユーザ公開鍵ＰＫにより暗号化されたデータを暗号化データ（ｃ０あるいは（ｃ１，ｃ２））として保管する。データ保管部７０３は、暗号化データとユーザ識別子（ＡＤＭＩＮあるいはＵＩＤ）とを対応付けて記憶する。具体的には、データ保管部７０３は、入力部７０１から受け取ったユーザ識別子とデータ識別子と暗号化データの組（ＡＤＭＩＮ，ＤＩＤ，ｃ０）や（ＵＩＤ，ＤＩＤ，ｃ１，ｃ２）を保管する。
【００６４】
演算部７０４は、演算手順Ｐに用いられるデータが暗号化された暗号化データ（ｃ０あるいは（ｃ１，ｃ２））をデータ保管部７０３から選択する。演算部７０４は、演算手順Ｐと、管理者のユーザ識別子である第１のユーザ識別子（ＡＤＭＩＮ）とを取得し、演算手順Ｐに用いられるデータが暗号化された暗号化データであって第１のユーザ識別子（ＡＤＭＩＮ）に対応付けられた暗号化データをデータ保管部７０３から選択する。また、演算部７０４は、演算手順Ｐと、ユーザのユーザ識別子である第２のユーザ識別子（ＵＩＤ）とを取得し、演算手順Ｐに用いられるデータが暗号化された暗号化データであって第２のユーザ識別子（ＵＩＤ）に対応付けられた暗号化データをデータ保管部７０３から選択する。演算部７０４は、演算手順Ｐに基づいて、選択した暗号化データに対して準同型演算を行い、準同型演算の演算結果を暗号化演算結果として出力する。
【００６５】
具体的には、演算部７０４は、入力部７０１から受け取った（ＡＤＭＩＮ，｛ＤＩＤ｝，Ｐ）や（ＵＩＤ，｛ＤＩＤ｝，Ｐ）を用いて、公開鍵保管部７０２からマスタ公開鍵ＭＰＫを、またデータ保管部７０３から｛ＤＩＤ｝に含まれるデータ識別子ＤＩＤを持つ組（ＡＤＭＩＮ，ＤＩＤ，ｃ０）や（ＵＩＤ，ＤＩＤ，ｃ１，ｃ２）を読み出す。そして、演算部７０４は、暗号化データｃ０や（ｃ１，ｃ２）の集合を演算手順Ｐに従って準同型処理をし、暗号化演算結果を生成する。
具体的に、２つの暗号化データ（ｃ１，ｃ２）＝（ｇ＾ｒ，ｙ＾ｒ＊ｇ＾ｍ）と（ｃ１’，ｃ２’）＝（ｇ＾（ｒ’），ｙ＾（ｒ’）＊ｇ＾（ｍ’））の準同型加算を行う場合は、次の（式７），（式８）のように計算して新しいｍ＋ｍ’の暗号化データ（ｃ１’’，ｃ２’’）を求める。ただし、ｒ’’は整数の集合｛１，・・・，Ｎ｝の中からランダムに選ばれた整数とする。
ｃ１’’＝ｃ１＊ｃ１’＊ｈ＾（ｒ’’）＝ｈ＾（ｒ＋ｒ’＋ｒ’’）      （式７）
ｃ２’’＝ｃ２＊ｃ２’＊ｙ＾（ｒ’’）＝ｙ＾（ｒ＋ｒ’＋ｒ’’）＊ｇ＾（ｍ＋ｍ’）      （式８）
【００６６】
なお、この準同型加算結果の暗号化データ（ｃ１’’，ｃ２’’）は、更に準同型加算を実行することや下記で述べる準同型乗算を実行することができる。
（ｃ１，ｃ２）と（ｃ１’，ｃ２’）の準同型乗算を行う場合は、次の（式９）〜（式１１）のように計算して新しいｍ×ｍ’の暗号化データ（Ｃ１，Ｃ２，Ｃ３）を求める。ただし、ｒ１とｒ２は整数の集合｛１，・・・，Ｎ｝の中からランダムに選ばれた整数とし、Ｒ１＝ｒｒ’＋ｒ１及びＲ２＝−ｒｍ’＋ｒ’ｍ＋ｒ２とする。
Ｃ１＝ｅ（ｃ１，ｃ１’）・ｅ（ｈ，ｈ）＾ｒ１＝ｅ（ｈ，ｈ）＾Ｒ１      （式９）
Ｃ２＝ｅ（ｃ１，ｃ２’＾（−１））・ｅ（ｃ１’，ｃ２）・ｅ（ｈ，ｇ）＾ｒ２＝ｅ（ｈ，ｇ）＾Ｒ２      （式１０）
Ｃ３＝ｅ（ｃ２，ｃ２’）・ｅ（ｈ，ｈ）＾ｒ１・ｅ（ｙ，ｇ）＾ｒ２＝ｅ（ｙ，ｙ）＾Ｒ１・ｅ（ｙ，ｇ）＾（−Ｒ２）・ｅ（ｇ，ｇ）＾（ｍ×ｍ’）      （式１１）
【００６７】
なお、この準同型乗算結果の暗号化データ（Ｃ１，Ｃ２，Ｃ３）は、更に下記のようにして準同型加算を実行できるが、準同型乗算を実行することは困難である。
準同型乗算後の暗号化データ（Ｃ１，Ｃ２，Ｃ３）＝（ｅ（ｈ，ｈ）＾Ｒ１，ｅ（ｈ，ｇ）＾Ｒ２，ｅ（ｙ，ｙ）＾Ｒ１・ｅ（ｙ，ｇ）＾（−Ｒ２）・ｅ（ｃ２，ｃ２’）＾ｍ）と（Ｃ１’，Ｃ２’，Ｃ３’）＝（ｅ（ｈ，ｈ）＾Ｒ１’，ｅ（ｈ，ｇ）＾Ｒ２’，ｅ（ｙ，ｙ）＾Ｒ１’・ｅ（ｙ，ｇ）＾（−Ｒ２’）・ｅ（ｇ，ｇ）＾ｍ’）に対して準同型加算を行う場合は、次の（式１２）〜（式１４）のようにして新しいｍ＋ｍ’の暗号化データ（Ｃ１’’，Ｃ２’’，Ｃ３’’）を求める。ただし、ＲとＲ’は整数の集合｛１，・・・，Ｎ｝の中からランダムに選ばれた整数とし、Ｒ１’’＝Ｒ１＋Ｒ１’＋Ｒ及びＲ２’’＝Ｒ２＋Ｒ２’＋Ｒ’とする。
Ｃ１’’＝Ｃ１・Ｃ１’・ｅ（ｈ，ｈ）＾Ｒ＝ｅ（ｈ，ｈ）＾Ｒ１’’      （式１２）
Ｃ２’’＝Ｃ２・Ｃ２’・ｅ（ｈ，ｇ）＾Ｒ’＝ｅ（ｈ，ｇ）＾Ｒ２’’      （式１３）
Ｃ３’’＝Ｃ３・Ｃ３’’・ｅ（ｙ，ｙ）＾Ｒ・ｅ（ｙ，ｇ）＾（−Ｒ’）＝ｅ（ｙ，ｙ）＾Ｒ１’’・ｅ（ｙ，ｇ）＾Ｒ２’’・ｅ（ｇ，ｇ）＾（ｍ＋ｍ’）      （式１４）
なお、この準同型乗算結果の暗号化データ（Ｃ１’’，Ｃ２’’，Ｃ３’’）は、更に準同型加算を実行できるが、準同型乗算を実行することは困難である。
【００６８】
演算部７０４は、演算手順Ｐに従って、複数の暗号化データを上記のような準同型演算を組み合わせて計算することで、暗号化演算結果を生成する。なお、準同型乗算を１度も実行されていない場合の暗号化演算結果を（ｔ１，ｔ２）と表わし、また準同型演算が１度でも実行された場合の暗号化演算結果を（Ｔ１，Ｔ２，Ｔ３）と表わすことにする。
なお、前述した準同型演算はユーザ公開鍵で暗号化された暗号化データを対象に処理方法を述べたが、管理者の場合は、マスタ公開鍵を用いて暗号化された暗号化データｃ０についても準同型演算が可能である。この時、ｃ０をｃ２と同一視して、準同型加算ではｃ２’’のみ生成するように変更することや、準同型乗算ではＣ３のみ生成するように変更することや、また準同型演算後の準同型加算もＣ３’’のみ生成するように変更すればよい。
【００６９】
また、マスタ公開鍵で暗号化された暗号化データｃ０と、ユーザ公開鍵で暗号化された暗号化データ（ｃ１，ｃ２）とに対しても準同型演算することができる。この時も、上記のように処理方法を変更すればよい。すなわち、ｃ０をｃ２と同一視し、準同型演算の結果の暗号化データはｃ２’’、Ｃ３、Ｃ３’’の形で表現されるように変更する。ただし、暗号化データｃ０の集合から生成された暗号化演算結果、もしくはｃ０と（ｃ１，ｃ２）が混在する形で生成された暗号化演算結果は、マスタ復号装置５００を利用できる管理者のみ復号できる。
なお、このような管理者のみ復号できる暗号化演算結果について、準同型乗算を１度も実行されていない場合の暗号化演算結果をｓと表わし、また準同型演算が１度でも実行された場合の暗号化演算結果をＳと表わすことにする。
【００７０】
出力部７０５は、演算部７０４から受け取った暗号化演算結果を出力し、マスタ復号装置５００またはユーザ復号装置６００へ通信装置９５０を介して送信する。
また、出力部７０５は、データ保管部７０３から受け取った暗号化データを出力し、マスタ復号装置５００またはユーザ復号装置６００へ通信装置９５０を介して送信する。
【００７１】
次に、暗号システム１００が備えるマスタ鍵生成装置２００と、ユーザ鍵生成装置３００と、暗号化装置４００と、マスタ復号装置５００と、ユーザ復号装置６００と、管理装置７００との各装置のハードウェアについて説明する。
プロセッサ９１０は、信号線を介して他のハードウェアと接続され、これら他のハードウェアを制御する。プロセッサ９１０は、プロセッシングを行うＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）である。プロセッサ９１０は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、またはＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）ともいう。
【００７２】
記憶装置９２０は、補助記憶装置９２２及びメモリ９２１を含む。補助記憶装置９２２は、具体的には、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、フラッシュメモリ、又は、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）である。メモリ９２１は、具体的には、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。各装置の記憶部は、補助記憶装置９２２により実現されてもよいし、メモリ９２１により実現されてもよいし、メモリ９２１と補助記憶装置９２２とにより実現されていてもよい。記憶部の実現方法は任意である。
【００７３】
入力インタフェース９３０は、マウス、キーボード、又はタッチパネルといった入力装置に接続されたポートである。入力インタフェース９３０は、具体的には、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）端子である。なお、入力インタフェース９３０は、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）と接続されるポートであってもよい。
出力インタフェース９４０は、ディスプレイといった表示機器のケーブルが接続されるポートである。出力インタフェース９４０は、例えば、ＵＳＢ端子又はＨＤＭＩ（登録商標）（Ｈｉｇｈ  Ｄｅｆｉｎｉｔｉｏｎ  Ｍｕｌｔｉｍｅｄｉａ  Ｉｎｔｅｒｆａｃｅ）端子である。ディスプレイは、具体的には、ＬＣＤ（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ）である。
【００７４】
通信装置９５０は、データを受信するレシーバ及びデータを送信するトランスミッタを含む。通信装置９５０は、具体的には、通信チップ又はＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）である。レシーバはデータを受信する受信部として機能し、トランスミッタはデータを送信する送信部として機能する。
【００７５】
補助記憶装置９２２には、暗号システム１００の各装置の「部」の機能を実現するプログラムが記憶されている。このプログラムは、メモリにロードされ、プロセッサ９１０に読み込まれ、プロセッサ９１０によって実行される。補助記憶装置９２２には、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）も記憶されている。ＯＳの少なくとも一部がメモリにロードされ、プロセッサ９１０はＯＳを実行しながら、「部」の機能を実現するプログラムを実行する。
【００７６】
暗号システム１００の各装置は、１つのプロセッサ９１０のみを備えていてもよいし、複数のプロセッサ９１０を備えていてもよい。複数のプロセッサ９１０が「部」の機能を実現するプログラムを連携して実行してもよい。
【００７７】
「部」の処理の結果を示す情報、データ、信号値、及び、変数値は、補助記憶装置、メモリ、又は、プロセッサ９１０内のレジスタ又はキャッシュメモリに記憶される。
【００７８】
「部」の機能を実現するプログラムは、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ブルーレイ（登録商標）ディスク、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）等の可搬記録媒体に記憶されてもよい。
なお、暗号プログラム５２０は、暗号システム１００の各装置の「部」として説明している機能を実現するプログラムである。また、暗号プログラムプロダクトと称されるものは、「部」として説明している機能を実現するプログラムが記録された記憶媒体及び記憶装置であり、見た目の形式に関わらず、コンピュータ読み取り可能なプログラムをロードしているものである。
【００７９】
＊＊＊動作の説明＊＊＊
次に、本実施の形態に係る暗号システム１００における暗号方法５１０及び暗号プログラム５２０による暗号処理Ｓ１００について説明する。
【００８０】
＜マスタ鍵ペア生成および保管処理＞
図８は、本実施の形態に係る暗号システム１００のマスタ鍵ペア生成および保管処理を示すフローチャートである。
図８のステップＳ１０１〜ステップＳ１１２は、マスタ鍵生成装置２００と、ユーザ鍵生成装置３００と、暗号化装置４００と、マスタ復号装置５００と、管理装置７００とが実行する処理である。ステップＳ１０１〜ステップＳ１０４はマスタ鍵生成装置２００により実行されるマスタ鍵生成処理Ｓ１０である。ステップＳ１０５〜ステップＳ１０６はユーザ鍵生成装置３００により実行される。ステップＳ１０７〜ステップＳ１０８は暗号化装置４００により実行される。ステップＳ１０９〜ステップＳ１１０はマスタ復号装置５００により実行される。ステップＳ１１１〜ステップＳ１１２は管理装置７００によって実行される。
【００８１】
ステップＳ１０１において、入力部２０１は、管理者から暗号強度を表すセキュリティパラメーターλを受け取る。
ステップＳ１０２において、マスタ鍵生成部２０２は、入力部２０１から受け取ったセキュリティパラメーターλに基づき、マスタ公開鍵ＭＰＫとマスタ秘密鍵ＭＳＫからなるマスタ鍵ペア（ＭＰＫ、ＭＳＫ）を生成する。
ステップＳ１０３において、出力部２０３は、マスタ鍵生成部２０２で生成されたマスタ鍵ペア（ＭＳＫ、ＭＳＫ）を、マスタ復号装置５００へ送信する。
ステップＳ１０４において、出力部２０３は、マスタ鍵生成部２０２で生成されたマスタ公開鍵ＭＰＫを、ユーザ鍵生成装置３００と、暗号化装置４００と、管理装置７００とへ送信する。このとき、マスタ公開鍵ＭＰＫのみを送信し、マスタ秘密鍵ＭＳＫは送信しない。
【００８２】
ステップＳ１０５において、入力部３０１は、マスタ鍵生成装置２００で生成されたマスタ公開鍵ＭＰＫを受け取る。
ステップＳ１０６において、マスタ公開鍵保管部３０２は、入力部３０１から受け取ったマスタ公開鍵ＭＰＫを保管する。
【００８３】
ステップＳ１０７において、入力部４０１は、マスタ鍵生成装置２００で生成されたマスタ公開鍵ＭＰＫを受け取る。
ステップＳ１０８において、マスタ公開鍵保管部４０２は、入力部４０１から受け取ったマスタ公開鍵ＭＰＫを保管する。
【００８４】
ステップＳ１０９において、入力部５０１は、マスタ鍵生成装置２００で生成されたマスタ鍵ペア（ＭＰＫ，ＭＳＫ）を受け取る。
ステップＳ１１０において、マスタ鍵ペア保管部５０２は、入力部５０１から受け取ったマスタ鍵ペア（ＭＰＫ，ＭＳＫ）を保管する。必要があれば、マスタ秘密鍵ＭＳＫが外部に漏れないように、暗号化して保管することや、管理者しか扱えないように認証情報なども合わせて保管する。
【００８５】
ステップＳ１１１において、入力部７０１は、マスタ鍵生成装置２００で生成されたマスタ公開鍵ＭＰＫを受け取る。
ステップＳ１１２において、公開鍵保管部７０２は、入力部７０１から受け取ったマスタ公開鍵ＭＰＫを保管する。
ステップＳ１１２により、暗号システム１００のマスタ鍵ペア生成および保管処理は終了する。
【００８６】
＜ユーザ鍵ペア生成および保管処理＞
図９は、本実施の形態に係る暗号システム１００のユーザ鍵ペア生成および保管処理を示すフローチャートである。
図９のステップＳ２０１〜ステップＳ２１０は、ユーザ鍵生成装置３００と、暗号化装置４００と、ユーザ復号装置６００と、管理装置７００とが実行する処理である。ステップＳ２０１〜ステップＳ２０４はユーザ鍵生成装置３００により実行されるユーザ鍵生成処理Ｓ２０である。ステップＳ２０５〜ステップＳ２０６は暗号化装置４００により実行される。ステップＳ２０７〜ステップＳ２０８はユーザ復号装置６００により実行される。ステップＳ２０９〜ステップＳ２１０は管理装置７００により実行される。
【００８７】
ステップＳ２０１において、入力部３０１は、ユーザから、そのユーザを識別するユーザ識別子ＵＩＤを受け取る。
ステップＳ２０２において、ユーザ鍵生成部３０３は、入力部３０１から受け取ったユーザ識別子ＵＩＤと、マスタ公開鍵保管部３０２から読み出したマスタ公開鍵ＭＰＫとを用いて、ユーザ公開鍵ＰＫとユーザ秘密鍵ＳＫからなるユーザ鍵ペア（ＰＫ，ＳＫ）を生成する。
ステップＳ２０３において、出力部３０４は、ユーザ鍵生成部３０３で生成されたユーザ鍵ペアとユーザ識別子の組（ＰＫ，ＳＫ，ＵＩＤ）を出力し、ユーザ復号装置６００へ送信する。
ステップＳ２０４において、出力部３０４は、ユーザ鍵生成部３０３で生成されたユーザ公開鍵とユーザ識別子のペア（ＰＫ，ＵＩＤ）を出力し、暗号化装置４００と、管理装置７００とへ送信する。このとき、ユーザ秘密鍵ＳＫは送信しない。
【００８８】
ステップＳ２０５において、入力部４０１は、ユーザ鍵生成装置３００で生成されたユーザ公開鍵とユーザ識別子のペア（ＰＫ，ＵＩＤ）を受け取る。
ステップＳ２０６において、ユーザ公開鍵保管部４０３は、入力部４０１から受け取ったユーザ公開鍵とユーザ識別子のペア（ＰＫ，ＵＩＤ）を保管する。
【００８９】
ステップＳ２０７において、入力部６０１は、ユーザ鍵生成装置３００で生成されたユーザ鍵ペアとユーザ識別子の組（ＰＫ，ＳＫ，ＵＩＤ）を受け取る。
ステップＳ２０８において、ユーザ鍵ペア保管部６０２は、入力部６０１から受け取ったユーザ鍵ペアとユーザ識別子の組（ＰＫ，ＳＫ，ＵＩＤ）を保管する。必要があれば、ＳＫが外部に漏れないように、暗号化して保管することや、扱えるユーザを制限するための認証情報なども合わせて保管する。
【００９０】
ステップＳ２０９において、入力部７０１は、ユーザ鍵生成装置３００で生成されたユーザ公開鍵とユーザ識別子のペア（ＰＫ，ＵＩＤ）を受け取る。
ステップＳ２１０において、公開鍵保管部７０２は、ユーザ公開鍵とユーザ識別子のペア（ＰＫ，ＵＩＤ）を保管する。
ステップＳ２１０により、暗号システム１００のユーザ鍵ペア生成および保管処理は終了する。
【００９１】
＜データ暗号化および保管処理＞
図１０は、本実施の形態に係る暗号システム１００のデータ暗号化および保管処理を示すフローチャートである。
図１０のステップＳ３０１〜ステップＳ３０６は、暗号化装置４００と管理装置７００とが実行する処理である。ステップＳ３０１〜ステップＳ３０４は暗号化装置４００により実行される。ステップＳ３０５〜ステップＳ３０６は管理装置７００により実行される処理である。
【００９２】
ステップＳ３０１において、入力部４０１は、ユーザから、暗号化したいデータｍと、そのデータを識別するデータ識別子ＤＩＤと、暗号化データを渡したい対象のユーザを識別するユーザ識別子ＵＩＤとを受け取る。
ステップＳ３０２において、暗号化部４０４は、入力部４０１から受け取ったユーザ識別子ＵＩＤと対応するようなユーザ公開鍵とユーザ識別子のペア（ＰＫ，ＵＩＤ）をユーザ公開鍵保管部４０３から読み出す。もしＵＩＤ＝ＡＤＭＩＮであった場合には、暗号化部４０４は、マスタ公開鍵保管部４０２からマスタ公開鍵ＭＰＫを読み出す。
ステップＳ３０３において、暗号化部４０４は、ステップＳ３０２で読み出したユーザ公開鍵ＰＫを用いて、入力部４０１から受け取ったデータｍを前述のように暗号化して、暗号化データ（ｃ１，ｃ２）を生成する。もしステップＳ３０２でマスタ公開鍵ＭＰＫを読み出していた場合には、暗号化部４０４は、入力部４０１から受け取ったデータｍを前述のように暗号化して、暗号化データｃ０を生成する。
ステップＳ３０４において、送信部４０５は、ユーザ識別子ＵＩＤと、データ識別子ＤＩＤと、ステップＳ３０３で生成した暗号化データ（ｃ１，ｃ２）との組（ＵＩＤ，ＤＩＤ，ｃ１，ｃ２）を出力し、管理装置７００へ送信する。もしステップＳ３０３で暗号化データｃ０を生成した場合には、送信部４０５は、ユーザ識別子ＵＩＤ＝ＡＤＭＩＮと、データ識別子ＤＩＤと、ステップＳ３０３で生成した暗号化データｃ０との組（ＡＤＭＩＮ，ＤＩＤ，ｃ０）を出力し、管理装置７００へ送信する。
【００９３】
ステップＳ３０５において、入力部７０１は、ステップＳ３０４で暗号化装置４００から送信されてきたユーザ識別子とデータ識別子と暗号化データの組（ＵＩＤ，ＤＩＤ，ｃ１，ｃ２）、もしくは（ＡＤＭＩＮ，ＤＩＤ，ｃ０）を受け取る。
ステップＳ３０６において、データ保管部７０３は、入力部７０１がステップＳ３０５で受け取ったユーザ識別子とデータ識別子と暗号化データの組（ＵＩＤ，ＤＩＤ，ｃ１，ｃ２）もしくは（ＡＤＭＩＮ，ＤＩＤ，ｃ０）を保管する。
ステップＳ３０６により、暗号システム１００のデータの暗号化および保管処理は終了する。
【００９４】
＜マスタ復号処理Ｓ３０＞
図１１は、本実施の形態に係る暗号システム１００のマスタ復号処理Ｓ３０を示すフローチャートである。マスタ復号処理Ｓ３０は、暗号化演算結果を取得し、取得した暗号化演算結果をマスタ秘密鍵ＭＳＫで復号する管理者向けのデータ復号処理である。
図１１のステップＳ４０１〜ステップＳ４０４は、マスタ復号装置５００が実行する処理である。
【００９５】
ステップＳ４０１において、入力部５０１は、管理装置７００などに保管されている暗号化データｃ０もしくは（ｃ１，ｃ２）を受け取る。
ステップＳ４０２において、復号部５０４は、マスタ鍵ペア保管部５０２からマスタ鍵ペア（ＭＰＫ，ＭＳＫ）を読み出す。もし必要であれば、パスワードやトークン、生体情報などを入力して、管理者の認証も行う。
ステップＳ４０３において、復号部５０４は、入力部５０１がステップＳ４０１で受け取った暗号化データｃ０もしくは（ｃ１，ｃ２）に対して、前述のように復号処理を行い、データＭを求める。データＭは平文ともいう。
ステップＳ４０４において、出力部５０５は、復号部５０４がステップＳ４０３で生成したデータＭを出力する。
ステップＳ４０４により、暗号システム１００のマスタ復号処理Ｓ３０は終了する。
【００９６】
＜ユーザ復号処理Ｓ４０＞
図１２は、本実施の形態に係る暗号システム１００のユーザ復号処理Ｓ４０を示すフローチャートである。ユーザ復号処理Ｓ４０は、管理装置７００から暗号化演算結果を取得し、取得した暗号化演算結果をユーザ秘密鍵ＳＫで復号するユーザ向けのデータ復号処理である。
図１２のステップＳ５０１〜ステップＳ５０４は、ユーザ復号装置６００が実行する処理である。
【００９７】
ステップＳ５０１において、入力部６０１は、復号に利用したいユーザ鍵ペアを示すユーザ識別子ＵＩＤと、管理装置７００などに保管されている暗号化データ（ｃ１，ｃ２）を受け取る。
ステップＳ５０２において、復号部６０４は、入力部６０１がステップＳ５０１で受け取ったユーザ識別子ＵＩＤに基づき、ユーザ鍵ペア保管部６０２からユーザ鍵ペアとユーザ識別子の組（ＰＫ，ＳＫ，ＵＩＤ）を読み出す。もし必要であれば、パスワードやトークン、生体情報などを入力して、ユーザの認証も行う。
ステップＳ５０３において、復号部６０４は、入力部６０１がステップＳ５０１で受け取った暗号化データ（ｃ１，ｃ２）に対して、前述のように復号処理を行い、データＭを求める。データＭは平文ともいう。
ステップＳ５０４において、出力部６０５は、復号部６０４がステップＳ５０３で生成したデータＭを出力する。
ステップＳ５０４により、暗号システム１００のユーザ復号処理Ｓ４０は終了する。
【００９８】
＜管理者向けの準同型演算処理Ｓ５０および演算結果復号処理Ｓ６０＞
図１３は、本実施の形態に係る暗号システム１００の準同型演算処理Ｓ５０および演算結果復号処理Ｓ６０を示すフローチャートである。図１３では、管理者向けの準同型演算処理Ｓ５０および演算結果復号処理Ｓ６０について説明する。
図１３のステップＳ６０１〜ステップＳ６１２は、マスタ復号装置５００と管理装置７００とが実行する処理である。ステップＳ６０１〜ステップＳ６０３とステップＳ６０９〜ステップＳ６１２はマスタ復号装置５００により実行される処理である。ステップＳ６０４〜ステップＳ６０８は管理装置７００によって実行される処理である。
【００９９】
ステップＳ６０１において、入力部５０１は、管理者から、管理装置７００に保管されている暗号化データの中で準同型演算したい対象のデータを識別するためのデータ識別子集合｛ＤＩＤ｝と、その対象のデータに対してどのように処理したいかを示した処理内容Ｋとを受け取る。
ステップＳ６０２において、演算手順設定部５０３は、入力部５０１がステップＳ６０１で受け取ったデータ識別子集合｛ＤＩＤ｝と処理内容とから、前述のように演算手順Ｐを生成する。
ステップＳ６０３において、出力部５０５は、管理者のユーザ識別子ＡＤＭＩＮと、データ識別子集合｛ＤＩＤ｝と、演算手順設定部５０３がステップＳ６０２で生成した演算手順Ｐとの組（ＡＤＭＩＮ，｛ＤＩＤ｝，Ｐ）を出力し、管理装置７００へ送信する。
【０１００】
ステップＳ６０４において、入力部７０１は、マスタ復号装置５００がステップＳ６０３で送信したユーザ識別子とデータ識別子集合と演算手順の組（ＡＤＭＩＮ，｛ＤＩＤ｝，Ｐ）を受け取る。
ステップＳ６０５において、演算部７０４は、入力部７０１がステップＳ６０４で受け取った（ＡＤＭＩＮ，｛ＤＩＤ｝，Ｐ）を用いて、データ保管部７０３から｛ＤＩＤ｝に含まれるデータ識別子ＤＩＤを持つ組（ＡＤＭＩＮ，ＤＩＤ，ｃ０）や（ＵＩＤ，ＤＩＤ，ｃ１，ｃ２）を読み出す。
ステップＳ６０６において、演算部７０４は、公開鍵保管部７０２からマスタ公開鍵ＭＰＫ読み出す。
ステップＳ６０７において、演算部７０４は、ステップＳ６０６で読み出したマスタ公開鍵ＭＰＫを用いて、ステップＳ６０５で読み出した暗号化データｃ０や（ｃ１，ｃ２）の集合を演算手順Ｐに従って前述のように準同型演算処理を行い、暗号化演算結果ｓもしくはＳを生成する。
ステップＳ６０８において、出力部７０５は、演算部７０４がステップＳ６０７で生成した暗号化演算結果ｓもしくはＳを出力し、マスタ復号装置５００へ送信する。
【０１０１】
ステップＳ６０９において、入力部５０１は、管理装置７００がステップＳ６０８で送信した暗号化演算結果ｓもしくはＳを受け取る。
ステップＳ６１０において、復号部５０４は、マスタ鍵ペア保管部５０２からマスタ鍵ペア（ＭＰＫ，ＭＳＫ）を読み出す。もし必要であれば、パスワードやトークン、生体情報などを入力して、管理者の認証も行う。
ステップＳ６１１において、復号部５０４は、ステップＳ６１０で読み出したマスタ鍵ペア（ＭＰＫ，ＭＳＫ）を用いて、入力部５０１がステップＳ６０９で受け取った暗号化演算結果ｓもしくはＳを、前述の復号処理に従って平文の演算結果であるデータＭを求める。
ステップＳ６１２において、出力部５０５は、復号部５０４がステップＳ６１１で求めたデータＭを出力する。
ステップＳ６１２により、暗号システム１００の管理者向けの準同型演算処理およびその復号処理は終了する。
【０１０２】
＜ユーザ向けの準同型演算処理Ｓ５０および演算結果復号処理Ｓ６０＞
図１４は、本実施の形態に係る暗号システム１００の準同型演算処理Ｓ５０および演算結果復号処理Ｓ６０を示すフローチャートである。図１４では、ユーザ向けの準同型演算処理Ｓ５０および演算結果復号処理Ｓ６０について説明する。
図１４のステップＳ７０１〜ステップＳ７１２は、ユーザ復号装置６００と管理装置７００とが実行する処理である。ステップＳ７０１〜ステップＳ７０３とステップＳ７０９〜ステップＳ７１２はユーザ復号装置６００により実行される処理である。ステップＳ７０４〜ステップＳ７０８は管理装置７００によって実行される処理である。
【０１０３】
ステップＳ７０１において、入力部６０１は、ユーザから、ユーザ識別子ＵＩＤと、管理装置７００に保管されている暗号化データの中で準同型演算したい対象のデータを識別するためのデータ識別子集合｛ＤＩＤ｝と、その対象のデータに対してどのように処理したいかを示した処理内容Ｋとを受け取る。
ステップＳ７０２において、演算手順設定部６０３は、入力部６０１がステップＳ７０１で受け取ったデータ識別子集合｛ＤＩＤ｝と処理内容とから、前述のように演算手順Ｐを生成する。
ステップＳ７０３において、出力部６０５は、ユーザ識別子ＵＩＤと、データ識別子集合｛ＤＩＤ｝と、演算手順設定部６０３がステップＳ７０２で生成した演算手順Ｐとの組（ＵＩＤ，｛ＤＩＤ｝，Ｐ）を出力し、管理装置７００へ送信する。
【０１０４】
ステップＳ７０４において、入力部７０１は、ユーザ復号装置６００がステップＳ７０３で送信したユーザ識別子とデータ識別子集合と演算手順の組（ＵＩＤ，｛ＤＩＤ｝，Ｐ）を受け取る。
ステップＳ７０５において、演算部７０４は、入力部７０１がステップＳ７０４で受け取った（ＵＩＤ，｛ＤＩＤ｝，Ｐ）を用いて、データ保管部７０３から（ＵＩＤ，ＤＩＤ１），・・・，（ＵＩＤ，ＤＩＤｎ）のペアに対応する組（ＵＩＤ，ＤＩＤ，ｃ１，ｃ２）を読み出す。
もしここで、マスタ公開鍵で暗号化された暗号化データｃ０や、指定したユーザのＵＩＤとは異なるユーザ公開鍵で暗号化した暗号化データ（ｃ１，ｃ２）を読み出そうとした場合、すなわち、ＵＩＤ≠ＵＩＤ’で（ＵＩＤ’，ＤＩＤｉ，ｃ１，ｃ２）となるような組（ただし、ＤＩＤｉ∈｛ＤＩＤ｝かつ１≦ｉ≦ｎ｝を読み出そうとした場合は、暗号化演算結果を復号できない、もしくは復号した結果がランダムなデータとなるため、演算部７０４は、この場合は暗号化演算結果として「エラー」といった特別の文字列を生成する。
ステップＳ７０６において、演算部７０４は、入力部７０１がステップＳ７０４で受け取った（ＵＩＤ，｛ＤＩＤ｝，Ｐ）を用いて、公開鍵保管部７０２からユーザ公開鍵とユーザ識別子のペア（ＰＫ，ＵＩＤ）を読み出す。
ステップＳ７０７において、演算部７０４は、ステップＳ７０６で読み出した公開鍵ＰＫを用いて、ステップＳ７０５で読み出した暗号化データ（ｃ１，ｃ２）の集合を演算手順Ｐに従って前述のように準同型演算処理を行い、暗号化演算結果（ｔ１，ｔ２）もしくは（Ｔ１，Ｔ２，Ｔ３）を生成する。もし、演算部７０４がステップＳ７０５において特別の文字列「エラー」を生成していれば、演算部７０４は、ここでは何も処理しない。
ステップＳ７０８において、出力部７０５は、演算部７０４がステップＳ７０７で生成した暗号化演算結果（ｔ１，ｔ２）、もしくは（Ｔ１，Ｔ２，Ｔ３）、もしくは特別な文字列「エラー」を出力し、ユーザ復号装置６００へ送信する。
【０１０５】
ステップＳ７０９において、入力部６０１は、管理装置７００がステップＳ７０８で送信した暗号化演算結果（ｔ１，ｔ２）、もしくは（Ｔ１，Ｔ２，Ｔ３）、もしくは特別な文字列「エラー」を受け取る。
ステップＳ７１０において、復号部６０４は、ユーザ鍵ペア保管部６０２からユーザ鍵ペアとユーザ識別子の組（ＰＫ，ＳＫ，ＵＩＤ）を読み出す。もし必要であれば、パスワードやトークン、生体情報などを入力して、ユーザの認証も行う。もし入力部６０１がステップＳ７０９において特別の文字列「エラー」を受信していれば、復号部６０４は、ここでは何も処理しない。
【０１０６】
ステップＳ７１１において、復号部６０４は、ステップＳ７１０で読み出したユーザ鍵ペア（ＰＫ，ＳＫ）を用いて、入力部６０１がステップＳ７０９で受け取った暗号化演算結果（ｔ１，ｔ２）、もしくは（Ｔ１，Ｔ２，Ｔ３）を、前述の復号処理に従って平文の演算結果であるデータＭを求める。もし入力部６０１がステップＳ７０９において特別の文字列「エラー」を受信していれば、復号部６０４は、ここでは何も処理しない。
ステップＳ７１２において、出力部６０５は、復号部６０４がステップＳ７１１で求めたデータＭを出力する。もし入力部６０１がステップＳ７０９において特別の文字列「エラー」を受信していれば、出力部６０５は、特別の文字列「エラー」を出力する。
ステップＳ７１２により、暗号システム１００のユーザ向けの準同型演算処理とその復号処理は終了する。
【０１０７】
＊＊＊他の構成＊＊＊
本実施の形態では、暗号システム１００の各装置の機能がソフトウェアで実現されるが、変形例として、暗号システム１００の各装置の機能がハードウェアで実現されてもよい。
この本実施の形態の変形例について、図１５から図２０を用いて説明する。
【０１０８】
図１５は、本実施の形態の変形例に係るマスタ鍵生成装置２００の構成を示す図である。
図１６は、本実施の形態の変形例に係るユーザ鍵生成装置３００の構成を示す図である。
図１７は、本実施の形態の変形例に係る暗号化装置４００の構成を示す図である。
図１８は、本実施の形態の変形例に係るマスタ復号装置５００の構成を示す図である。
図１９は、本実施の形態の変形例に係るユーザ復号装置６００の構成を示す図である。
図２０は、本実施の形態の変形例に係る管理装置７００の構成を示す図である。
【０１０９】
図１５から図２０に示すように、暗号システム１００の各装置は、プロセッサ９１０及び記憶装置９２０に替えて処理回路９０９を備える。
【０１１０】
処理回路９０９は、前述した各装置の「部」の機能及び各装置の記憶部を実現する専用の電子回路である。処理回路９０９は、具体的には、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ロジックＩＣ、ＧＡ（Ｇａｔｅ  Ａｒｒａｙ）、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）、又は、ＦＰＧＡ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）である。
【０１１１】
暗号システム１００の各装置は、処理回路９０９を代替する複数の処理回路を備えていてもよい。これら複数の処理回路により、全体として「部」の機能が実現される。それぞれの処理回路は、処理回路９０９と同じように、専用の電子回路である。
【０１１２】
別の変形例として、暗号システム１００の各装置の機能がソフトウェアとハードウェアとの組合せで実現されてもよい。すなわち、暗号システム１００の各装置において一部の機能が専用のハードウェアで実現され、残りの機能がソフトウェアで実現されてもよい。
【０１１３】
プロセッサ９１０、記憶装置９２０、及び、処理回路９０９を、総称して「プロセッシングサーキットリ」という。つまり、暗号システム１００の各装置の構成が図２〜図７及び図１５〜図２０のいずれに示した構成であっても、「部」の機能及び記憶部は、プロセッシングサーキットリにより実現される。
【０１１４】
「部」を「工程」または「手順」または「処理」に読み替えてもよい。また、「部」の機能をファームウェアで実現してもよい。すなわち、暗号システム１００の各装置の「部」の機能は、ソフトウェア、ファームウェア、またはソフトウェアとファームウェアとの組み合わせにより実現される。
【０１１５】
＊＊＊本実施の形態の効果の説明＊＊＊
以上のように、本実施の形態に係る暗号システムによれば、厳重な管理が必要なマスタ秘密鍵ＭＳＫを一切使うことなく、公開情報のマスタ公開鍵ＭＰＫからユーザ公開鍵ＰＫを生成できるため、運用コストを下げることができる。
【０１１６】
また、本実施の形態に係る暗号システムによれば、１つの暗号文に対して管理者（第１のユーザ）とユーザ（第２のユーザ）のどちらでも復号できるため、保管コストを小さくすることができる。
【０１１７】
また、本実施の形態に係る暗号システムによれば、格子暗号をベースとせず、ペアリング暗号技術をベースとしているため、鍵サイズや暗号文サイズを小さくすることができ、
効率よく処理できる。また、準同型加算のみならず準同型乗算も実行できるため、高い準同型性を持つ。
【０１１８】
また、本実施の形態に係る暗号システムによれば、たとえ同じデータを保管しようとしても毎回異なる暗号化データが生成されるため、頻度分析攻撃などが受けにくくなる。
【０１１９】
また、本実施の形態に係る暗号システムによれば、暗号化してデータを保管しているため、たとえ管理装置から暗号化データが漏洩しても、保管データの中身を知られることはない。また、暗号化したままデータ処理ができるため、暗号化データからデータの中身を知られることはない。
【０１２０】
また、本実施の形態に係る暗号システムによれば、非特許文献７の合成数位数の群を素数位数の群に変換する効率化手法が直接的に適用できるため、より効率的な準同型暗号技術を実現できる。
【０１２１】
また、本実施の形態では、暗号システムは、マスタ鍵生成装置２００、ユーザ鍵生成装置３００、暗号化装置４００、マスタ復号装置５００、ユーザ復号装置６００、管理装置７００の各装置が１つの装置でコンピュータである場合について説明した。しかし、同じコンピュータ（例えば、ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ））内に、マスタ鍵生成装置２００、ユーザ鍵生成装置３００、暗号化装置４００、マスタ復号装置５００、ユーザ復号装置６００、管理装置７００のいずれかが同時に含まれていてもよい。例えば、マスタ復号装置５００とユーザ復号装置６００と暗号化装置４００とが１つのＰＣ内に含まれていてもよい。なお、管理装置７００は、独立した装置であることが好ましい。また、マスタ鍵生成装置２００とユーザ鍵生成装置３００とは、別個の装置でることが好ましい。すかし、上記の実施の形態で説明した機能を実現することができれば、暗号システムの各装置をどのように組み合わせて暗号システムを構成しても構わない。
【０１２２】
また、暗号システムの各装置において、「部」として説明するもののうち、いずれか１つのみを採用してもよいし、いくつかの任意の組合せを採用してもよい。つまり、暗号システムの各装置の機能ブロックは、上記の実施の形態で説明した機能を実現することができれば、任意である。これらの機能ブロックを、どのような組合せで各装置を構成しても構わない。また、これらの機能ブロックを、任意のブロック構成で各装置を構成しても構わない。
【０１２３】
また、本実施の形態のうち、複数を部分的に組合せて実施しても構わない。あるいは、本実施の形態のうち、１つの発明を部分的に実施しても構わない。その他、本実施の形態を、全体としてあるいは部分的に、どのように組合せて実施しても構わない。
なお、上記の実施の形態は、本質的に好ましい例示であって、本発明、その適用物や用途の範囲を制限することを意図するものではなく、必要に応じて種々の変更が可能である。
【符号の説明】
【０１２４】
１００  暗号システム、１０１  インターネット、２００  マスタ鍵生成装置、２０１，３０１，４０１，５０１，６０１，７０１  入力部、２０２  マスタ鍵生成部、２０３，３０４，５０５，６０５，７０５  出力部、２０９，３０９，４０９，５０９，６０９，７０９  記憶部、３００  ユーザ鍵生成装置、３０２  マスタ公開鍵保管部、３０３  ユーザ鍵生成部、４００  暗号化装置、４０２  マスタ公開鍵保管部、４０３  ユーザ公開鍵保管部、４０４  暗号化部、４０５  送信部、５００  マスタ復号装置、５０２  マスタ鍵ペア保管部、５０３  演算手順設定部、５０４  復号部、６００  ユーザ復号装置、６０２  ユーザ鍵ペア保管部、６０３  演算手順設定部、６０４  復号部、７００  管理装置、７０２  公開鍵保管部、７０３  データ保管部、７０４  演算部、５１０  暗号方法、５２０  暗号プログラム、９０９  処理回路、９１０  プロセッサ、９２０  記憶装置、９３０  入力インタフェース、９４０  出力インタフェース、９５０  通信装置、９２１  メモリ、９２２  補助記憶装置、Ｓ１００  暗号処理、Ｓ１０  マスタ鍵生成処理、Ｓ２０  ユーザ鍵生成処理、Ｓ３０  マスタ復号処理、Ｓ４０  ユーザ復号処理、Ｓ５０  準同型演算処理、Ｓ６０  演算結果復号処理、Ｐ  演算手順。
【図１】
2018036418.tif 000003
【図２】
2018036418.tif 000004
【図３】
2018036418.tif 000005
【図４】
2018036418.tif 000006
【図５】
2018036418.tif 000007
【図６】
2018036418.tif 000008
【図７】
2018036418.tif 000009
【図８】
2018036418.tif 000010
【図９】
2018036418.tif 000011
【図１０】
2018036418.tif 000012
【図１１】
2018036418.tif 000013
【図１２】
2018036418.tif 000014
【図１３】
2018036418.tif 000015
【図１４】
2018036418.tif 000016
【図１５】
2018036418.tif 000017
【図１６】
2018036418.tif 000018
【図１７】
2018036418.tif 000019
【図１８】
2018036418.tif 000020
【図１９】
2018036418.tif 000021
【図２０】
2018036418.tif 000022