(57)【要約】【課題】端末の負荷を低減しつつ、サーバに格納されたデータの完全性を十分に検証できる検証システム、検証方法及び検証プログラムを提供すること。【解決手段】端末Ｃは、ファイルを分割する分割部１１と、第１鍵を生成する第１鍵生成部１２と、ファイルブロックの直交ベクトルと第１鍵との和を第２鍵として生成する第２鍵生成部１３と、ファイルブロックを線形結合した符号化ブロック、及び準同型のタグの組み合わせを、データサーバＳに格納する格納部１４と、を備え、検証装置Ａは、チャレンジとして乱数の組を送信する第１送信部２１と、符号化ブロックの線形結合及びタグの線形結合をレスポンスとして受信する第１受信部２２と、算出したタグと受信したタグとが等しい場合にデータを正常と判定する第１判定部２３と、を備え、データサーバＳは、符号化ブロックを記憶する記憶部３１と、チャレンジに対してレスポンスを送信する応答部３２と、を備える。【選択図】図１
2018093363.tif 000002
【特許請求の範囲】
【請求項１】
端末が複数のデータサーバに格納したデータそれぞれの完全性を、検証装置により検証する検証システムであって、
前記端末は、
対象ファイルを、素数を位数として持つ有限体上のベクトル空間の要素からなる複数個のファイルブロックに分割する分割部と、
前記複数個のファイルブロックのベクトル空間と同次元の第１鍵を生成する第１鍵生成部と、
前記複数個のファイルブロックに対する直交ベクトルを算出し、前記第１鍵と前記直交ベクトルとの和を、第２鍵として生成する第２鍵生成部と、
前記複数個のファイルブロックを線形結合した符号化ブロック、及び当該符号化ブロックと前記第１鍵との内積を含む所定の演算により算出される準同型のメッセージ認証符号の組み合わせを、前記データサーバに複数格納する格納部と、を備え、
前記検証装置は、
前記データサーバに対するチャレンジとして、乱数の組を送信する第１送信部と、
前記データサーバから、前記乱数の組を係数とした、前記符号化ブロックの線形結合及び前記メッセージ認証符号の線形結合をレスポンスとして受信する第１受信部と、
前記符号化ブロックの線形結合に対して、前記第２鍵を用いた前記所定の演算により算出したメッセージ認証符号を、受信した前記メッセージ認証符号の線形結合と比較し、等しい場合に前記データサーバのデータを正常と判定し、異なる場合に前記データサーバのデータを異常と判定する第１判定部と、を備え、
前記データサーバは、
前記符号化ブロックを複数記憶する記憶部と、
前記チャレンジに対して、前記乱数の組を係数とした、前記符号化ブロックの線形結合及び前記メッセージ認証符号の線形結合を応答する応答部と、を備える検証システム。
【請求項２】
前記第１送信部は、前記データサーバのそれぞれに対して、当該データサーバに格納されている前記符号化ブロックをランダムに１又は複数選択し、前記チャレンジを送信する請求項１に記載の検証システム。
【請求項３】
前記第１判定部により前記データサーバのデータが異常と判定された場合に、
前記端末は、代替サーバに対して、新たな第２鍵を通知し、
前記代替サーバは、
正常と判定された前記データサーバから受信した前記符号化ブロックの線形結合を新たな符号化ブロックとし、当該符号化ブロック、及び当該符号化ブロックに対して前記新たな第２鍵を用いた前記所定の演算により算出した新たなメッセージ認証符号の組み合わせを複数格納する修復部を備える請求項１又は請求項２に記載の検証システム。
【請求項４】
前記代替サーバは、
前記データサーバに対するチャレンジとして、乱数の組を送信する第２送信部と、
前記データサーバから、前記乱数の組を係数とした、前記符号化ブロックの線形結合及び前記メッセージ認証符号の線形結合をレスポンスとして受信する第２受信部と、
前記符号化ブロックの線形結合に対して、前記新たな第２鍵を用いた前記所定の演算により算出したメッセージ認証符号を、受信した前記メッセージ認証符号の線形結合と比較し、等しい場合に前記データサーバのデータを正常と判定し、異なる場合に前記データサーバのデータを異常と判定する第２判定部と、を備える請求項３に記載の検証システム。
【請求項５】
前記第２送信部は、前記データサーバのそれぞれに対して、当該データサーバに格納されている前記符号化ブロックをランダムに１又は複数選択し、前記チャレンジを送信する請求項４に記載の検証システム。
【請求項６】
前記所定の演算は、前記複数個のファイルブロックのベクトル空間と同次元の鍵と、前記符号化ブロックとの内積、並びに所定の鍵空間から選択された鍵と、前記符号化ブロックが格納されているサーバ及び順位を示すインデックスとを入力とした擬似ランダム関数の和である請求項１から請求項４のいずれかに記載の検証システム。
【請求項７】
前記分割部は、対象ファイルを、素数ｑを位数として持つｚ次元の有限体の要素からなるｍ個のブロックに分割し、当該ブロックそれぞれに対して、ｍ次元のインデックスを付加したｚ＋ｍ次元の拡張ブロックを、前記ファイルブロックとして生成する請求項１から請求項６のいずれかに記載の検証システム。
【請求項８】
端末が複数のデータサーバに格納したデータそれぞれの完全性を、検証装置により検証する検証方法であって、
前記端末が、
対象ファイルを、素数を位数として持つ有限体上のベクトル空間の要素からなる複数個のファイルブロックに分割する分割ステップと、
前記複数個のファイルブロックのベクトル空間と同次元の第１鍵を生成する第１鍵生成ステップと、
前記複数個のファイルブロックに対する直交ベクトルを算出し、前記第１鍵と前記直交ベクトルとの和を、第２鍵として生成する第２鍵生成ステップと、
前記複数個のファイルブロックを線形結合した符号化ブロック、及び当該符号化ブロックと前記第１鍵との内積を含む所定の演算により算出される準同型のメッセージ認証符号の組み合わせを、前記データサーバに複数格納する格納ステップと、を実行し、
前記検証装置が、
前記データサーバに対するチャレンジとして、乱数の組を送信する第１送信ステップと、
前記データサーバから、前記乱数の組を係数とした、前記符号化ブロックの線形結合及び前記メッセージ認証符号の線形結合をレスポンスとして受信する第１受信ステップと、
前記符号化ブロックの線形結合に対して、前記第２鍵を用いた前記所定の演算により算出したメッセージ認証符号を、受信した前記メッセージ認証符号の線形結合と比較し、等しい場合に前記データサーバのデータを正常と判定し、異なる場合に前記データサーバのデータを異常と判定する第１判定ステップと、を実行し、
前記データサーバが、
前記符号化ブロックを複数記憶する記憶ステップと、
前記チャレンジに対して、前記乱数の組を係数とした、前記符号化ブロックの線形結合及び前記メッセージ認証符号の線形結合を応答する応答ステップと、を実行する検証方法。
【請求項９】
コンピュータを、請求項１から請求項７のいずれかに記載の検証システムの各部として機能させるための検証プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、サーバに格納したデータの完全性を検証する検証システム、検証方法及び検証プログラムに関する。
【背景技術】
【０００２】
従来、情報資産を管理する上で、機密性、完全性及び可用性を維持する情報セキュリティが求められている。
ユーザデータを格納したクラウドサーバにおいて、完全性を維持するためのデータ検証の手法として、ＰＯＲ（Ｐｒｏｏｆ  Ｏｆ  Ｒｅｔｒｉｅｖａｂｉｌｉｔｙ）が提案されている。また、可用性を維持するためのデータ修復の手法としてネットワークコーディングが提案されている。例えば、非特許文献１〜３には、ネットワークコーディング及びＰＯＲを用いた手法が示されている。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】Ｂ．  Ｃｈｅｎ，  Ｒ．  Ｃｕｒｔｍｏｌａ，  Ｇ．  Ａｔｅｎｉｅｓｅ  ａｎｄ  Ｒ．  Ｂｕｒｎｓ，  “Ｒｅｍｏｔｅ  Ｄａｔａ  Ｃｈｅｃｋｉｎｇ  ｆｏｒ  Ｎｅｔｗｏｒｋ  Ｃｏｄｉｎｇ−ｂａｓｅｄ  Ｄｉｓｔｒｉｂｕｔｅｄ  Ｓｔｏｒａｇｅ  Ｓｙｓｔｅｍｓ”，  ｉｎ：  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  ２ｎｄ  ＡＣＭ  Ｃｌｏｕｄ  Ｃｏｍｐｕｔｉｎｇ  Ｓｅｃｕｒｉｔｙ  Ｗｏｒｋｓｈｏｐ  （ＣＣＳＷ’１０），  ｐｐ．  ３１−４２，  ２０１０．
【非特許文献２】Ａ．  Ｌｅ，  ａｎｄ  Ａ．  Ｍａｒｋｏｐｏｕｌｏｕ，  “ＮＣ−Ａｕｄｉｔ：  Ａｕｄｉｔｉｎｇ  ｆｏｒ  ｎｅｔｗｏｒｋ  ｃｏｄｉｎｇ  ｓｔｏｒａｇｅ”，  ｉｎ：  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｎｅｔｗｏｒｋ  Ｃｏｄｉｎｇ  （ＮｅｔＣｏｄ’１２），  ｐｐ．  １５５−１６０，  ２０１２．
【非特許文献３】Ｋ．  Ｏｍｏｔｅ，  ａｎｄ  Ｔ．  Ｔｈａｏ，  “ＭＤ−ＰＯＲ：  Ｍｕｌｔｉ−ｓｏｕｒｃｅ  ａｎｄ  Ｄｉｒｅｃｔ  Ｒｅｐａｉｒ  ｆｏｒ  Ｎｅｔｗｏｒｋ  Ｃｏｄｉｎｇ−ｂａｓｅｄ  Ｐｒｏｏｆ  ｏｆ  Ｒｅｔｒｉｅｖａｂｉｌｉｔｙ”，  ｉｎ：  Ｊｏｕｒｎａｌ  ｏｆ  Ｄｉｓｔｒｉｂｕｔｅｄ  Ｓｅｎｓｏｒ  Ｎｅｔｗｏｒｋｓ  （ＩＪＤＳＮ）  ｏｎ  Ａｄｖａｎｃｅｄ  Ｂｉｇ  Ｄａｔａ  Ｍａｎａｇｅｍｅｎｔ  ａｎｄ  Ａｎａｌｙｔｉｃｓ  ｆｏｒ  Ｕｂｉｑｕｉｔｏｕｓ  Ｓｅｎｓｏｒｓ  −  ＩＪＤＳＮ，  ｖｏｌ．  ２０１５，  ａｒｔｉｃｌｅ  ＩＤ：  ５８６７２０，  ２０１５．
【発明の概要】
【発明が解決しようとする課題】
【０００４】
非特許文献１の手法は、データの検証及び修復のために端末の負荷が大きい。非特許文献２の手法は、端末以外の第三者による検証が可能だが、異常が認められたデータの修復の際に端末の負荷を低減できない。非特許文献３の手法は、データの検証及び修復のために端末の負荷が削減されるものの、ＰＯＲにおけるレスポンスの安全性レベルが十分でなかった。
【０００５】
本発明は、端末の負荷を低減しつつ、サーバに格納されたデータの完全性を十分に検証できる検証システム、検証方法及び検証プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明に係る検証システムは、端末が複数のデータサーバに格納したデータそれぞれの完全性を、検証装置により検証するシステムであって、前記端末は、対象ファイルを、素数を位数として持つ有限体上のベクトル空間の要素からなる複数個のファイルブロックに分割する分割部と、前記複数個のファイルブロックのベクトル空間と同次元の第１鍵を生成する第１鍵生成部と、前記複数個のファイルブロックに対する直交ベクトルを算出し、前記第１鍵と前記直交ベクトルとの和を、第２鍵として生成する第２鍵生成部と、前記複数個のファイルブロックを線形結合した符号化ブロック、及び当該符号化ブロックと前記第１鍵との内積を含む所定の演算により算出される準同型のメッセージ認証符号の組み合わせを、前記データサーバに複数格納する格納部と、を備え、前記検証装置は、前記データサーバに対するチャレンジとして、乱数の組を送信する第１送信部と、前記データサーバから、前記乱数の組を係数とした、前記符号化ブロックの線形結合及び前記メッセージ認証符号の線形結合をレスポンスとして受信する第１受信部と、前記符号化ブロックの線形結合に対して、前記第２鍵を用いた前記所定の演算により算出したメッセージ認証符号を、受信した前記メッセージ認証符号の線形結合と比較し、等しい場合に前記データサーバのデータを正常と判定し、異なる場合に前記データサーバのデータを異常と判定する第１判定部と、を備え、前記データサーバは、前記符号化ブロックを複数記憶する記憶部と、前記チャレンジに対して、前記乱数の組を係数とした、前記符号化ブロックの線形結合及び前記メッセージ認証符号の線形結合を応答する応答部と、を備える。
【０００７】
前記第１送信部は、前記データサーバのそれぞれに対して、当該データサーバに格納されている前記符号化ブロックをランダムに１又は複数選択し、前記チャレンジを送信してもよい。
【０００８】
前記第１判定部により前記データサーバのデータが異常と判定された場合に、前記端末は、代替サーバに対して、新たな第２鍵を通知し、前記代替サーバは、正常と判定された前記データサーバから受信した前記符号化ブロックの線形結合を新たな符号化ブロックとし、当該符号化ブロック、及び当該符号化ブロックに対して前記新たな第２鍵を用いた前記所定の演算により算出した新たなメッセージ認証符号の組み合わせを複数格納する修復部を備えてもよい。
【０００９】
前記代替サーバは、前記データサーバに対するチャレンジとして、乱数の組を送信する第２送信部と、前記データサーバから、前記乱数の組を係数とした、前記符号化ブロックの線形結合及び前記メッセージ認証符号の線形結合をレスポンスとして受信する第２受信部と、前記符号化ブロックの線形結合に対して、前記新たな第２鍵を用いた前記所定の演算により算出したメッセージ認証符号を、受信した前記メッセージ認証符号の線形結合と比較し、等しい場合に前記データサーバのデータを正常と判定し、異なる場合に前記データサーバのデータを異常と判定する第２判定部と、を備えてもよい。
【００１０】
前記第２送信部は、前記データサーバのそれぞれに対して、当該データサーバに格納されている前記符号化ブロックをランダムに１又は複数選択し、前記チャレンジを送信してもよい。
【００１１】
前記所定の演算は、前記複数個のファイルブロックのベクトル空間と同次元の鍵と、前記符号化ブロックとの内積、並びに所定の鍵空間から選択された鍵と、前記符号化ブロックが格納されているサーバ及び順位を示すインデックスとを入力とした擬似ランダム関数の和であってもよい。
【００１２】
前記分割部は、対象ファイルを、素数ｑを位数として持つｚ次元の有限体の要素からなるｍ個のブロックに分割し、当該ブロックそれぞれに対して、ｍ次元のインデックスを付加したｚ＋ｍ次元の拡張ブロックを、前記ファイルブロックとして生成してもよい。
【００１３】
本発明に係る検証方法は、端末が複数のデータサーバに格納したデータそれぞれの完全性を、検証装置により検証する方法であって、前記端末が、対象ファイルを、素数を位数として持つ有限体上のベクトル空間の要素からなる複数個のファイルブロックに分割する分割ステップと、前記複数個のファイルブロックのベクトル空間と同次元の第１鍵を生成する第１鍵生成ステップと、前記複数個のファイルブロックに対する直交ベクトルを算出し、前記第１鍵と前記直交ベクトルとの和を、第２鍵として生成する第２鍵生成ステップと、前記複数個のファイルブロックを線形結合した符号化ブロック、及び当該符号化ブロックと前記第１鍵との内積を含む所定の演算により算出される準同型のメッセージ認証符号の組み合わせを、前記データサーバに複数格納する格納ステップと、を実行し、前記検証装置が、前記データサーバに対するチャレンジとして、乱数の組を送信する第１送信ステップと、前記データサーバから、前記乱数の組を係数とした、前記符号化ブロックの線形結合及び前記メッセージ認証符号の線形結合をレスポンスとして受信する第１受信ステップと、前記符号化ブロックの線形結合に対して、前記第２鍵を用いた前記所定の演算により算出したメッセージ認証符号を、受信した前記メッセージ認証符号の線形結合と比較し、等しい場合に前記データサーバのデータを正常と判定し、異なる場合に前記データサーバのデータを異常と判定する第１判定ステップと、を実行し、前記データサーバが、前記符号化ブロックを複数記憶する記憶ステップと、前記チャレンジに対して、前記乱数の組を係数とした、前記符号化ブロックの線形結合及び前記メッセージ認証符号の線形結合を応答する応答ステップと、を実行する。
【００１４】
本発明に係る検証プログラムは、コンピュータを、前記検証システムの各部として機能させる。
【発明の効果】
【００１５】
本発明によれば、端末の負荷を低減しつつ、サーバに格納されたデータの完全性を十分に検証できる。
【図面の簡単な説明】
【００１６】
【図１】実施形態に係る検証システムの構成を示すブロック図である。
【図２】実施形態に係る端末の機能構成を示すブロック図である。
【図３】実施形態に係る検証装置の機能構成を示すブロック図である。
【図４】実施形態に係るデータサーバの機能構成を示すブロック図である。
【図５】実施形態に係る格納処理を示すフローチャートである。
【図６】実施形態に係る検証処理を示すシーケンス図である。
【図７】実施形態に係る修復処理を示すフローチャートである。
【発明を実施するための形態】
【００１７】
以下、本発明の実施形態の一例について説明する。
図１は、本実施形態に係る検証システム１の構成を示すブロック図である。
検証システム１は、端末Ｃと、複数のデータサーバＳ（Ｓ１〜Ｓｎ）と、検証装置Ａとを備える。各装置は、ネットワークを介して互いに接続され、通信データのセキュリティが確保されているものとする。
【００１８】
端末Ｃは、ユーザが利用するスマートフォン、タブレット端末又はＰＣ等の情報処理装置であり、ユーザデータをクラウド上の複数のデータサーバＳに格納する。
データサーバＳは、事業者により提供されるクラウド上のサーバ装置であり、ユーザデータを複数装置に分散記憶し、端末Ｃからの要求に応じて、ユーザデータ又はこれらを用いた演算結果等を提供する。
【００１９】
検証装置Ａは、データサーバＳに格納されたユーザデータの完全性を定期期に検証するため、第三者により提供されるサーバ装置（ＴＰＡ；Ｔｈｉｒｄ  Ｐａｒｔｙ  Ａｕｄｉｔｏｒ）である。
検証装置Ａにより異常が認められたデータサーバＳは、新たなデータサーバ（代替サーバ）Ｓ’に置き換えられ、代替サーバＳ’は、他の正常なデータサーバＳに格納されている冗長なデータを用いて、新たに格納するデータを生成する。
【００２０】
まず、ユーザデータの検証及び修復の処理で利用される要素技術である、ＰＯＲ、ネットワークコーディング、準同型ＭＡＣ（Ｍｅｓｓａｇｅ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｃｏｄｅ）、及び直交ベクトル生成について説明する。
【００２１】
［ＰＯＲ］
端末Ｃは、セキュリティパラメータλに基づいて、端末Ｃの秘密鍵ｓｋＣと、検証装置Ａの秘密鍵ｓｋＴＰＡとを出力する。
端末Ｃは、秘密鍵ｓｋＣと元データファイルＦとを入力とし、Ｆからエンコードされ、各データサーバＳｉ（ｉ∈［１，ｎ］）にｄ個ずつ格納される符号化ブロックＦ＊Ｓｉ＝｛（ｃｉｊ）｝ｊ∈［１，ｄ］と、秘密鍵ｓｋＣを用いて算出されるＦ＊Ｓｉに対するタグ（メッセージ認証符号；ＭＡＣ）Ｔ＊Ｓｉ＝｛（ｔｉｊ）｝ｊ∈［１，ｄ］とを出力する。出力された（Ｆ＊Ｓｉ，Ｔ＊Ｓｉ）は、データサーバＳｉに格納される。
【００２２】
検証装置Ａは、各データサーバＳｉに対して、チャレンジｃｈａｌｌＳｉを送信する。データサーバＳｉは、レスポンスｒｅｓｐＳｉを計算し、検証装置Ａへ返信する。検証装置Ａは、ｃｈａｌｌＳｉ及び秘密鍵ｓｋＴＰＡを用いてｒｅｓｐＳｉを検証することで、データサーバＳｉのデータの完全性を検証する。
【００２３】
データサーバＳｒに異常が認められた場合、代替サーバＳ’ｒは、ｈ台の正常なデータサーバＳｉ１，…，Ｓｉｈ（ｈ＜ｎ）の持つ符号化ブロックから、Ｓｒが保持していた符号化ブロックを復元、又は新たにｄ個の符号化ブロックを生成する。
具体的には、データサーバＳ’ｒは、秘密鍵ｓｋＳ’ｒを端末Ｃから受け取り、まず、各サーバから取得した符号化ブロックの完全性を確認する。次に、データサーバＳ’ｒは、取得した正常な符号化ブロックから、自身が格納するｄ個の符号化ブロックＦ＊Ｓ’ｒ＝｛（ｃｒｊ）｝ｊ∈［１，ｄ］、及び対応するｄ個のタグＴ＊Ｓ’ｒ＝｛（ｔｒｊ）｝ｊ∈［１，ｄ］を生成する。
【００２４】
［ネットワークコーディング］
端末Ｃは、対象ファイルＦを、冗長性を持つ符号化ブロックに分割し、ｎ台のデータサーバＳにｄ個ずつ格納する。
端末Ｃは、まず、ファイルＦを次のように、ｍ個のブロックｖｋに分割する。
【数１】
2018093363.tif 000003
以下、素数ｑを位数とする有限体をＦｑとも表記し、素数ｑを位数とするｚ次元の有限体をＦｑｚとも表記する。
【００２５】
続いて、端末Ｃは、次のように拡張ブロックｗｋを生成する。なお、ｋ番目の拡張ブロックｗｋは、ｚ＋１からｚ＋ｍ番目の要素のうち、ｚ＋ｋ番目の要素のみが「１」となり、この他が「０」となる。
【数２】
2018093363.tif 000004
【００２６】
次に、端末Ｃは、有限体Ｆｑからｍ個の係数α１，…，αｍをランダムに選択し、線形結合により次の符号化ブロックｃを生成する。
【数３】
2018093363.tif 000005
【００２７】
端末Ｃは、これらの符号化ブロックをデータサーバＳ１，…，Ｓｎに配布する。
ここで、拡張ブロックｗｋの最後のｍ個のベクトル要素は、ｋ番目のみが１で、残りは０であることから、符号化ブロックｃの最後のｍ個のベクトル要素から、エンコードの際に用いられた係数α１，…，αｍが得られる。ファイルＦを復元する際には、符号化ブロックの最初のｚ個のベクトル要素を取り出すと、次の式（１）が得られる。
【数４】
2018093363.tif 000006
【００２８】
ｍ個の異なる符号化ブロックから、ｍ個の式（１）が得られる。これらを解くことで、ｖ１，…，ｖｍが得られ、結合してＦ＝ｖ１‖…‖ｖｍが復元される。
ここで、Ｆが復元可能であるためには、ｍ個の式（１）が解を持つ必要があり、復元に利用されるｍ個の符号化ブロックの係数α１，…，αｍのｍ個の組からなる行列のランクがｍであることが条件となる。端末Ｃが十分に大きな素数ｑを選び、係数をランダムに選ぶと、この行列のランクは、十分に高い確率でｍになることが知られている。
データサーバＳｉ（ｉ∈［１，ｎ］）に問題が生じた場合、残りの正常なデータサーバＳから符号化ブロックを収集し、これらを線形結合することで、新たな符号化ブロックが生成される。
【００２９】
［準同型ＭＡＣ］
準同型ＭＡＣは、ベクトル及びタグ（ＭＡＣ）の２組のペア（ｖ１，ｔ１）及び（ｖ２，ｔ２）が与えられたとき、任意の係数α１，α２∈Ｆｑに対して、ｙ＝α１ｖ１＋α２ｖ２であるベクトルｙの有効なタグｔが、ｔ＝α１ｔ１＋α２ｔ２で計算できるという性質を備えている。
【００３０】
鍵空間ＫＦ及び（ｑ，ｚ，ｍ）を入力とし、秘密鍵ｓｋ＝（ｋ１，ｋ２），ｋ１∈Ｆｑｚ＋ｍ，ｋ２∈ＫＦを出力すると、ブロック（ベクトル）ｗ∈Ｆｑｚ＋ｍ及びブロックのインデックスｋに対して、以下のタグｔは、準同型となる。
ｔ＝ｋ１ｗ＋ＰＲＦ（ｋ２，ｋ）∈Ｆｑ
ここで、ＰＲＦは、鍵空間ＫＦから選ばれた鍵と［１，ｍ］とから有限体Ｆｑの元を出力する疑似ランダム関数である。
【００３１】
ｍ個のベクトル（ｗ１，…，ｗｍ）の線形結合ｙ＝（ｙ１，…，ｙｚ＋ｍ）∈Ｆｑｚ＋ｍと、対応するｍ個のタグ（ｔ１，…，ｔｍ）に同一の係数を用いた線形結合ｔ∈Ｆｑとが保管されており、これらを検証する場合、秘密鍵ｓｋ＝（ｋ１，ｋ２）を用いて、次式が成り立てばデータは正常と判定される。
【数５】
2018093363.tif 000007
【００３２】
［直交ベクトル生成］
直交ベクトルは、ベクトル集合ｗ１，…，ｗｍ（ｗｋ∈Ｆｑｚ＋ｍ，ｋ∈［１，ｍ］）が与えられたとき、任意のｋ∈［１，ｍ］に対してｗｋｋφ＝０となるベクトルｋφである。
【００３３】
直交ベクトルを生成するためには、まず、ベクトル（ｗ１，…，ｗｍ）によって張られる部分空間πＭを求める。続いて、行列Ｍ＝［ｗ１，…，ｗｍ］Ｔを作り、行列Ｍのゼロ空間πＭ⊥を求める。
次に、πＭ⊥の基底ベクトルをｚ個（Ｂ１，…，Ｂｚ∈Ｆｑｚ＋ｍ）求め、Ｆｑ上のｚ個の乱数ｒｉ（ｉ∈［１，ｚ］）を用いて、次式によりｋφを計算する。
【数６】
2018093363.tif 000008
【００３４】
図２は、本実施形態に係る端末Ｃの機能構成を示すブロック図である。
端末Ｃは、分割部１１と、第１鍵生成部１２と、第２鍵生成部１３と、格納部１４とを備える。これらの各機能部は、制御部（例えば、ＣＰＵ）が記憶部に格納されたプログラムを実行することにより実現される。
【００３５】
分割部１１は、データサーバＳに格納する対象ファイルＦを、次のようにｍ個のｚ次元のブロックに分割する。
Ｆ＝ｖ１‖…‖ｖｍ，ｖｋ∈Ｆｑｚ（ただし、ｋ∈［１，ｍ］）
さらに、分割部１１は、分割したブロックｖｋそれぞれに対して、次のようにｍ次元のインデックスを付加したｚ＋ｍ次元の拡張ブロックｗｋを生成する。
【数７】
2018093363.tif 000009
【００３６】
第１鍵生成部１２は、分割部１１により生成された複数個のファイルブロックと同次元（ｚ＋ｍ次元）の秘密鍵（第１鍵）ｋ１を有限体Ｆｑｚ＋ｍからランダムに生成する。また、第１鍵生成部１２は、所定の鍵空間ＫＦからランダムに秘密鍵ｋ２を選択する。
【００３７】
第２鍵生成部１３は、分割部１１により生成された複数個のファイルブロックに対する直交ベクトルｋφをランダムに算出し（ｋφ∈Ｆｑｚ＋ｍ  かつ  ｋφｗｋ＝０，∀ｋ∈［１，ｍ］）、第１鍵生成部１２により生成された秘密鍵（第１鍵）と直交ベクトルとの和を、外部装置用の秘密鍵（第２鍵）として生成する（ｋ３＝ｋ１＋ｋφ∈Ｆｑｚ＋ｍ）。
端末Ｃは、秘密鍵ペアｓｋＴＰＡ＝｛ｋ２，ｋ３｝を、安全な通信路を介して検証装置Ａに送り、ｓｋＣ＝｛ｋ１，ｋ２｝を自身の秘密鍵ペアとして保持する。
【００３８】
また、第２鍵生成部１３は、検証装置Ａの第１判定部２３によりデータサーバＳｒのデータが異常と判定された場合に、代替サーバＳ’ｒに対して、新たな秘密鍵（第２鍵）ｋ４＝ｋ１＋ｋφｒ≠ｋ３（ｋφｒ∈Ｆｑｚ＋ｍ  かつ  ｋφｒｗｋ＝０，∀ｋ∈［１，ｍ］）を生成する。
端末Ｃは、新たな秘密鍵ペアｓｋＳ’ｒ＝｛ｋ２，ｋ４｝を、安全な通信路を介してデータサーバＳ’ｒに送る。
【００３９】
格納部１４は、分割部１１により生成された複数個のファイルブロックを線形結合した符号化ブロックをｎｄ個生成する。ここで、ｎは、データサーバＳの数であり、ｄ（＜ｎ）は、各データサーバＳに格納される符号化ブロックの数である。
具体的には、格納部１４は、ｉ∈［１，ｎ］，ｊ∈［１，ｄ］に対して、有限体Ｆｑからランダムにｍ個の係数αｉｊｋを生成し、次のように、符号化ブロックを算出する。
【数８】
2018093363.tif 000010
【００４０】
さらに、格納部１４は、所定の演算により算出される準同型のタグ（ＭＡＣ）を生成し、符号化ブロックｃｉｊ及びタグｔｉｊの組み合わせを、データサーバＳｉに複数（ｄ組）格納する。
タグを生成するための所定の演算は、例えば、次のように、秘密鍵ｋ１と符号化ブロックとの内積、及び秘密鍵ｋ２と、符号化ブロックが格納されるサーバ及びサーバ内の順位を示すインデックスｉ，ｊとを入力とした擬似ランダム関数（ＰＲＦ：ＫＦ×［１，ｎ］‖［１，ｄ］→Ｆｑ）の和である。
【数９】
2018093363.tif 000011
【００４１】
図３は、本実施形態に係る検証装置Ａの機能構成を示すブロック図である。
検証装置Ａは、第１送信部２１と、第１受信部２２と、第１判定部２３とを備える。これらの各機能部は、制御部（例えば、ＣＰＵ）が記憶部に格納されたプログラムを実行することにより実現される。
【００４２】
第１送信部２１は、データサーバＳに対するチャレンジとして、乱数の組を送信する。
このとき、第１送信部２１は、データサーバＳのそれぞれに対して、このデータサーバに格納されている符号化ブロックをランダムに１又は複数（ｓ個）選択し、チャレンジを送信する。
具体的には、第１送信部２１は、整数ｓ∈［１，ｄ］を選択し、ｓ組のチャレンジｃｈａｌｌ＝｛（ｂ１，β１），…，（ｂｓ，βｓ）｝を生成してデータサーバＳｉに送信する。ここで、各ｕ∈［１，ｓ］に対して、ｂｕはランダムに［１，ｄ］から重複なく選ばれ、βｕはランダムに有限体Ｆｑから選ばれる。なお、ｓはデータサーバＳ毎に、また、定期的に実行される検証処理の度に異なっていてよい。
【００４３】
第１受信部２２は、チャレンジを送信したデータサーバＳｉから、乱数の組を係数とした次のような符号化ブロックの線形結合ｃｉと、タグの線形結合ｔｉとをレスポンスとして受信する。
【数１０】
2018093363.tif 000012
【００４４】
第１判定部２３は、レスポンスとして受信した符号化ブロックの線形結合ｃｉに対して、端末Ｃから受け取った秘密鍵（第２鍵）ｋ３を用いた所定の演算により算出したタグを、受信したタグの線形結合ｔｉと比較する。そして、第１判定部２３は、次のように等式が成り立つ場合にデータサーバＳｉのデータを正常と判定し、両者が異なる場合にデータサーバＳｉのデータを異常と判定する。
【数１１】
2018093363.tif 000013
なお、右辺第１項「ｋ３ｃｉ」は、「ｋ３ｃｉ＝（ｋ１＋ｋφ）ｃｉ＝ｋ１ｃｉ」となるため、秘密鍵ｋ１を知らない検証装置Ａが自身の秘密鍵ｋ３により、端末Ｃに代わって検証を行える。
【００４５】
図４は、本実施形態に係るデータサーバＳの機能構成を示すブロック図である。
データサーバＳは、記憶部３１と、応答部３２とを備える。さらに、データの異常が認められたデータサーバＳの代替となる新たなデータサーバＳ（代替サーバ）は、第２送信部３３と、第２受信部３４と、第２判定部３５と、修復部３６とを備える。これらの各機能部は、制御部（例えば、ＣＰＵ）が記憶部に格納されたプログラムを実行することにより実現される。
【００４６】
記憶部３１は、端末Ｃから受信した符号化ブロックとタグの組を複数（ｄ組）記憶する。
応答部３２は、検証装置Ａ又は他のデータサーバＳから受信したチャレンジに対して、乱数βの組を係数とした、符号化ブロックの線形結合及びタグの線形結合を応答する。
【００４７】
第２送信部３３は、検証装置Ａの第１送信部２１と同様に、自身と異なる他のデータサーバＳに対して、このデータサーバＳに格納されている符号化ブロックをランダムに１又は複数選択し、チャレンジとして乱数の組を送信する。
【００４８】
第２受信部３４は、検証装置Ａの第１受信部２２と同様に、チャレンジを送信したデータサーバＳから、乱数の組を係数とした、符号化ブロックの線形結合及びタグの線形結合をレスポンスとして受信する。
【００４９】
第２判定部３５は、検証装置Ａの第１判定部２３と同様に、受信した符号化ブロックの線形結合に対して、端末Ｃから受信した秘密鍵（第２鍵）ｋ４を用いた所定の演算により算出したタグを、受信したタグの線形結合と比較する。そして、第２判定部３５は、次のように等式が成り立つ場合に取得した符号化ブロックを正常と判定し、両者が異なる場合に異常と判定する。
【数１２】
2018093363.tif 000014
【００５０】
修復部３６は、第２判定部３５により正常と判定されたｈ台のデータサーバＳから受信した符号化ブロックの線形結合を新たな符号化ブロックとする。
ここで、正常なデータサーバＳの台数ｈは、「ｃｅｉｌ（ｍ／ｄ）≦ｈ＜ｎ」（ｃｅｉｌ（ｘ）は、ｘ以上の最小の整数）の条件を満たす値が選択される。
ｈ台の正常なデータサーバＳから修復部３６がｄ個の新たな符号化ブロックを得るまで、第２送信部３３、第２受信部３４及び第２判定部３５による検証処理が繰り返される。なお、同一のデータサーバＳに対するチャレンジの値は毎回異なるものとする。
修復部３６は、検証済みの符号化ブロックを検証装置Ａから取得してもよい。
【００５１】
修復部３６は、ｄ個の新たな符号化ブロックＲｃ＝｛ｃｉ１，…ｃｉｄ｝に対して、それぞれ新たな秘密鍵（第２鍵）ｋ４を用いた所定の演算により新たなｄ個のタグｔｒｊを、次のように計算する。
ｔｒｊ＝ｃｒｊｋ４＋ＰＲＦ（ｋ２，ｒ‖ｊ）
修復部３６は、符号化ブロックとタグとの組み合わせ｛ｃｒｊ，ｔｒｊ｝（ただし、ｊ∈［１，ｄ］）を、記憶部３１に格納する。
【００５２】
図５は、本実施形態に係る格納処理を示すフローチャートである。
なお、本処理に先立って、端末Ｃは、第１鍵生成部１２により自身の秘密鍵を生成しているものとする。
【００５３】
ステップＳ１において、端末Ｃ（分割部１１）は、対象ファイルを素数ｑを位数として持つｚ次元の有限体の要素からなるｍ個のブロック（ベクトル）ｖに分割する。
ステップＳ２において、端末Ｃ（分割部１１）は、ステップＳ１で分割した各ブロックにｍ次元のインデックスを付加してｍ個の拡張ブロックｗを生成する。
【００５４】
ステップＳ３において、端末Ｃ（格納部１４）は、ランダムなｍ個の係数を用いて、ステップＳ２で生成したｍ個の拡張ブロックを線形結合した符号化ブロックを生成する。
ステップＳ４において、端末Ｃ（格納部１４）は、ステップＳ３で生成した符号化ブロックそれぞれに対して、準同型のタグを生成する。
【００５５】
ステップＳ５において、端末Ｃ（格納部１４）は、符号化ブロック及びタグをｎｄ個ずつ生成したか否かを判定する。この判定がＹＥＳの場合、処理はステップＳ６に移り、判定がＮＯの場合、処理はステップＳ３に移る。
【００５６】
ステップＳ６において、端末Ｃ（格納部１４）は、符号化ブロック及びタグの組を、ｎ台のデータサーバＳそれぞれにｄ組ずつ送信する。
【００５７】
図６は、本実施形態に係る検証処理を示すシーケンス図である。
本処理は、各データサーバＳｉ（ｉ＝１，…，ｎ）に対して定期的に実行される。
なお、本処理に先立って、端末Ｃは、第２鍵生成部により検証装置Ａの秘密鍵を生成し、検証装置Ａへ提供しているものとする。
【００５８】
ステップＳ１１において、検証装置Ａ（第１送信部２１）は、データサーバＳに格納されているｄ個の符号化ブロックのうち、検証の対象とする数ｓを選択する。
ステップＳ１２において、検証装置Ａ（第１送信部２１）は、ｓ個のインデックスｂｕ（ｕ＝１，…，ｓ）をランダムに［１，ｄ］から重複なく選択する。
ステップＳ１３において、検証装置Ａ（第１送信部２１）は、ｓ個の乱数βｕを生成する。
【００５９】
ステップＳ１４において、検証装置Ａ（第１送信部２１）は、チャレンジ｛（ｂ１，β１），…，（ｂｓ，βｓ）｝をｉ番目のデータサーバＳｉに送信する。
【００６０】
ステップＳ１５において、データサーバＳｉ（応答部３２）は、ステップＳ１４のチャレンジにより指定されたｓ個の符号化ブロック（ｂｕ番目）を線形結合する。
ステップＳ１６において、データサーバＳｉ（応答部３２）は、ステップＳ１４のチャレンジにより指定されたｓ個のタグ（ｂｕ番目）を線形結合する。
【００６１】
ステップＳ１７において、データサーバＳｉ（応答部３２）は、ステップＳ１５で生成した符号化ブロックの線形結合ｃｉと、タグの線形結合ｔｉとを、ステップＳ１４のチャレンジに対するレスポンスとして送信し、検証装置Ａ（第１受信部２２）が受信する。
【００６２】
ステップＳ１８において、検証装置Ａ（第１判定部２３）は、データサーバＳｉに送信したチャレンジ、端末Ｃから提供された秘密鍵、及びステップＳ１７でレスポンスとして受信した符号化ブロックの線形結合ｃｉを用いて、タグを算出する。
ステップＳ１９において、検証装置Ａ（第１判定部２３）は、ステップＳ１８で算出したタグと、ステップＳ１７でレスポンスとして受信したタグの線形結合ｔｉとを比較し、データサーバＳｉに格納されているデータの完全性を検証する。
【００６３】
図７は、本実施形態に係る修復処理を示すフローチャートである。
本処理は、異常が認められたデータサーバＳｒに代えて設けられるデータサーバＳ’ｒにおいて、検証装置Ａからの指示に応じて実行される。
なお、本処理に先立って、端末Ｃは、第２鍵生成部によりデータサーバＳ’ｒの秘密鍵を生成し、データサーバＳ’ｒへ提供しているものとする。
【００６４】
ステップＳ２１において、データサーバＳ’ｒ（第２送信部３３）は、他のデータサーバＳｉ、及びデータサーバＳｉに格納されている符号化ブロックの組をランダムに選択する。
ステップＳ２２において、データサーバＳ’ｒ（第２送信部３３）は、ステップＳ２１で選択したデータサーバＳｉに対して、検証処理（図６）と同様のチャレンジを送信する。
ステップＳ２３において、データサーバＳ’ｒ（第２受信部３４）は、データサーバＳｉから、検証処理（図６）と同様のレスポンスを受信する。
【００６５】
ステップＳ２４において、データサーバＳ’ｒ（第２判定部３５）は、検証処理（図６）と同様の手順により、秘密鍵を用いて算出したタグとレスポンスのタグとを比較し、データサーバＳ’ｒから取得したデータ（符号化ブロックの線形結合）が正常か否かを判定する。この判定がＹＥＳの場合、処理はステップＳ２５に移り、判定がＮＯの場合、処理はステップＳ２１に移る。
【００６６】
ステップＳ２５において、データサーバＳ’ｒ（修復部３６）は、ステップＳ２４で正常と判定された、データサーバＳｉで線形結合により生成された符号化ブロックを、ｄ個取得できたか否かを判定する。この判定がＹＥＳの場合、処理はステップＳ２６に移り、判定がＮＯの場合、処理はステップＳ２１に移る。
【００６７】
ステップＳ２６において、データサーバＳ’ｒ（修復部３６）は、取得した符号化ブロックのそれぞれに対して、自身の秘密鍵を用いてタグを生成する。
ステップＳ２７において、データサーバＳ’ｒ（修復部３６）は、符号化ブロック及びタグの組み合わせｄ組を記憶部３１に格納する。
【００６８】
本実施形態によれば、検証システム１は、端末Ｃが直交ベクトルを用いて検証装置Ａの秘密鍵を生成することにより、検証装置Ａが端末Ｃの代理として、データサーバＳに格納されたデータの完全性を検証できる。
また、検証システム１は、ネットワークコーディングの技術を用いて複数のデータサーバＳに分散して符号化ブロックを格納し、効率的に復元可能とした。さらに、検証システム１は、準同型ＭＡＣにより、チャレンジ及びレスポンスを用いたＰＯＲの手順を構築したので、データを秘匿したままの演算で処理負荷を低減しつつ、十分な検証精度を得られる。
【００６９】
検証システム１は、データサーバＳに格納された一部の符号化ブロックをランダムに検証するので、高い精度を確保しつつ処理を効率化できる。さらに、検証システム１は、処理の効率性と検証精度とのバランスを、状況に応じて適切に設定できる。
【００７０】
検証システム１は、端末Ｃが直交ベクトルを用いてデータサーバＳの秘密鍵を生成することにより、データサーバＳにおいて正常な符号化ブロックからタグを生成する。これにより、端末Ｃの処理負荷が低減され、検証システム１は、容易に新たなデータサーバＳ（代替サーバ）の格納データを再生成できる。
さらに、検証システム１は、データサーバＳにおいて、ＰＯＲの手順により符号化ブロックを検証できるので、端末Ｃ及び検証装置Ａを介さずに、データサーバＳ間で正常な符号化ブロックを自立的に取得できる。
このとき、データサーバＳは、検証装置Ａと同様に、他のデータサーバＳに格納された一部の符号化ブロックをランダムに検証するので、高い精度を確保しつつ処理を効率化できる。
【００７１】
検証システム１は、秘密鍵と符号化ブロックとの内積、及び擬似ランダム関数を用いることにより、データサーバＳ及びこのサーバ内の符号化ブロック位置に固有のタグを容易に生成でき、効率的に精度良くデータの完全性を検証できる。
【００７２】
検証システム１は、ファイルブロックにインデックスを付加した拡張ブロックを生成することにより、線形結合の係数を容易に抽出できるので、効率的にファイルを復元できる。
【００７３】
以上、本発明の実施形態について説明したが、本発明は前述した実施形態に限るものではない。また、本実施形態に記載された効果は、本発明から生じる最も好適な効果を列挙したに過ぎず、本発明による効果は、本実施形態に記載されたものに限定されるものではない。
【００７４】
検証システム１による検証方法は、ソフトウェアにより実現される。ソフトウェアによって実現される場合には、このソフトウェアを構成するプログラムが、情報処理装置（コンピュータ）にインストールされる。また、これらのプログラムは、ＣＤ−ＲＯＭのようなリムーバブルメディアに記録されてユーザに配布されてもよいし、ネットワークを介してユーザのコンピュータにダウンロードされることにより配布されてもよい。さらに、これらのプログラムは、ダウンロードされることなくネットワークを介したＷｅｂサービスとしてユーザのコンピュータに提供されてもよい。
【符号の説明】
【００７５】
Ａ  検証装置
Ｃ  端末
Ｓ  データサーバ
１  検証システム
１１  分割部
１２  第１鍵生成部
１３  第２鍵生成部
１４  格納部
２１  第１送信部
２２  第１受信部
２３  第１判定部
３１  記憶部
３２  応答部
３３  第２送信部
３４  第２受信部
３５  第２判定部
３６  修復部
【図１】
2018093363.tif 000015
【図２】
2018093363.tif 000016
【図３】
2018093363.tif 000017
【図４】
2018093363.tif 000018
【図５】
2018093363.tif 000019
【図６】
2018093363.tif 000020
【図７】
2018093363.tif 000021