暗号化XML文書の安全な検索 方法に関する研究 信州大学大学院 工学系研究科 情報工学専攻 07TA561J 中村 伸一 1 目次 • • • • • • • • • 背景・提案 周辺技術 先行研究 暗号化XML文書検索システムの概要 提案手法 実験・結果 考察 今後の課題 まとめ 2 背景 • インターネットを経由してデータベースを提供 するサービス(Amazon Simple DB等)が始まって いる。 専用施設 (iDC) インターネット 利用者 データベース サーバ SELECT name, address FROM ... Yamada Taro, Japan... データベース データベース 3 管理者 背景 • セキュリティに関する問題の一つに、保存され たデータベースを構成するファイルの持ち出し による情報漏えいがある。 専用施設 (iDC) インターネット 利用者 データベース サーバ SELECT name, address FROM ... ファイル 持ち出し Yamada Taro, Japan... データベース データベース 管理者 4 背景 • ファイルを暗号化しても、メモリ上でファイル を復号しているため、管理者の権限や、不正プ ログラムでメモリの内容の持ち出しは可能。 専用施設 (iDC) 不正プログラム による盗聴 インターネット 利用者 SELECT name, address FROM ... データベース 管理者特権 サーバ による持ち出し Yamada Taro, Japan... データベース (暗号化) データベース 管理者 5 提案 • データを暗号化したままで安全に検索する手法 を提案する – 提案する手法で取り扱うデータはExtensible Markup Language(以下 XML) • T をターゲットXML 文書、Q をクエリXML文書 と呼ぶ2つの XML文書T、Q に対し、Tを保存 する側でT、QのXML構造を知られないまま、T に出現するQ をすべて検索する。 6 周辺技術(Extensible Markup Language) • Extensible Markup Language(XML) は、テキストをタグと 呼ばれる文字列(開始タグ(<要素名>)と終了タグ(</ 要素名>) )で挟むことで、属性(段落や文字の種類 等)を付ける表現形式 <?xml version="1.0" encoding="utf-8"?> <site> <open_auctions> <open_auction> <bidder> <date>10/22/1999</date> <time>15:48:27</time> <personref person="person3"/> <increase>16.50</increase> </bidder> </open_auction> </open_auctions> </site> 7 周辺技術(XPath) • XPathとはXML文書の特定の部分を指定するための言語 • XPathは“/”で表現される直下の要素、“//”で表現される 先祖子孫の要素、“*”で表現される全ての要素等を指 定することが出来る。 <?xml version="1.0" encoding="utf-8"?> <site> <open_auctions> <open_auction> <bidder> <date>10/22/1999</date> <time>15:48:27</time> <personref person="person3"/> <increase>16.50</increase> </bidder> </open_auction> </open_auctions> </site> XPath /site /site/open_auctions /site/open_auctions/bidder/* //bidder 意味 ルートsiteを選択する。 site以下の全てのopen_auctionsを選択する。 bidder以下の全ての要素を選択する。 全てのbidder要素を選択する。 8 先行研究 • 暗号化XML文書の検索に関して以下の先行研究がある • Dawn Xiaodong Songらの手法 暗号化文字列の検索 • R. Brinkman らの手法 Dawn Xiaodong Songらの手法をもとにXML文書検索に拡 張 • Hui (Wendy) Wangらの手法 XML文書中の要素名を暗号化したものと出現位置、出現 位置と暗号化した要素の情報から検索 9 先行研究(Dawn Xiaodong Songらの手法) • 暗号化の前に平文を暗号化(暗号文字列1) • 暗号文字列1とランダム列とランダム列のハッシュでXOR する(暗号文字列2) • 暗号文字列1とハッシュを用意し、暗号文字列1と暗号文 字列2をXORして、ハッシュが同じであれば同じ文字列 暗号化 検索 文字列 暗号文字列2 暗号化 XOR 暗号文字列1 暗号文字列1 A,Bに分割 暗号文字列A 暗号 文字列B ランダム列 ランダム列 のハッシュ XOR ランダム列 ランダム列 のハッシュ 暗号文字列2 この値が同じか比較する 10 先行研究(R. Brinkmanらの手法) • Dawn Xiaodong Songらの手法で暗号化したXML文書中の 要素名と出現位置をRDBに登録 • XPathの各要素の位置関係が同じ要素をRDBから検索し、 要素名がXPathと同じかDawn Xiaodong Songらの手法で 確認する クライアント 検索XPath XPathの要素名 を変換 (暗号化) 変換した要素名とXPathの 関係を満たす要素を検索 RDB 要素名が同じ でXPathの関係 を満たす要素 を検索 要素を返す 結果の要素名が XPathの要素名と 合致するか確認 暗号化した要素名と 出現する位置を保存 出現位置は深さ優先 11 探索順で表現 先行研究(Hui (Wendy) Wangらの手法) • RDBに暗号化した要素名と出現位置(0-1の実数で包含 関係を利用して出現位置を表現する)、出現位置と要素 の情報を登録 • XPathの暗号化した要素名と位置を検索しクライアント 側で復号して確認 クライアント 検索XPath XPathの要素名 を変換 (暗号化) 変換した要素名とXPathの 関係を満たす要素を検索 要素を返す 要素名と位置関 係がXPathと同 じか確認 RDB 要素名が同じ でXPathの関係 を満たす要素 を検索 要素を 復号する 暗号化した要素名と出現する 12 位置を保存。出現位置は0-1の 実数で包含関係で表現 先行研究(提案する手法の改善点) • サーバ側にターゲット・クエリXML文書の構造 を知られる事なく検索を行うことを可能とした – クエリXML文書の要素と同じ位置関係となっている ターゲットXML文書の部分をクライアント側で特定 するため • クエリXML文書の一部の情報からターゲット XML検索すべき部分を絞り込むことで検索の効 率化を行った – 一般的なXML文書の検索はXML文書が比較的簡単な 構造であることに注目した 13 暗号化XML文書検索システムの概要 • ターゲットXML文書を保存するためのRDBとク ライアントで構成 • RDBにインデックステーブルとデータテーブル を設置 XML文書 データ登録 XML送信 結果送信 利用者 検索 クライアント インデックス テーブル SQL送信 ネットワーク データ送信 RDBサーバ データ 14 テーブル 提案手法(XML文書の系列化) • ターゲットXML文書、クエリXML文書を深さ優 先探索順(以下 プリオーダ)で系列化する myDocument 1 Data 2 myDocument 1 Data 5 first Name 6 first Name 3 Data 2 second Name 4 first Name 6 second Name 7 Data 5 first Name 3 second Name 4 second Name 7 15 提案手法(データの定義) • ターゲットXML文書、クエリXML文書の定義 TITEM i Ed (TITEM ) Lv(TITEM ) Path(TITEM ) Len(TITEM ) i i Br(Q) Lf k ( Br (Q)) i i ターゲットXML文書 TITEM TITEM クエリXML文書 QITEM 1 1 2 QITEM 2 TITEM N 1 Br Q 1 Lv(TITEM ) TITEM N 2 QITEM N 1 Ed TITEM 2 Lf1 Br Q 2 Lf N Br Q 3 Path (TITEM ) (TITEM , TITEM N1 N1 N11 , TITEM ) 1 16 提案手法(テーブル定義) • インデックステーブル 要素名、出現位置、木の範囲、文字列長 ITbll1 H (TNAMEl1 ), E(H (K ), il2 , Ed(TITEMl 2 ), Len(TITEM l2 ) l2 ) (l1 1,...,M1 ),(l2 1,...,M 2 ) • データテーブル 出現位置、要素名、木の範囲、深さ、根までのパス DTbli i, E(H (K , i),TITEM i ), E(H (K , i), Ed(TITEM i )), E(H (K , i), Lv(TITEMi ), E(H (K , i), Path(TITEMi )) (i 1,...,M3 ) 17 提案手法(テーブル定義) • インデックステーブル、データテーブルの例 • 木の範囲は最も深く、右の要素 ターゲットXML文書 (要素名,位置,範囲,深さ) a,1,9,1 b,2,7,2 c,3,4,3 b,8,9,1 c,5,7,2 c,9,9,2 インデックステーブル(暗号化していない) "|"はデータの区切り文字 要素名: 出現位置|木の範囲|文字列長 a: 1|9|1 b: 2|7|1,8|9|1 c: 3|4|1,5|7|1,9|9|1 d: 4|4|1,6|6|1,7|7|1 データテーブル(暗号化していない) d,4,4,4 d,6,6,4 d,7,7,4 出現位置: 要素名|木の範囲|深さ|根までのパス 1: a|9|1|1 2: b|7|2|2,1 3: c|4|3|3,2,1 .. 18 提案手法 クライアント クエリXML 文書 ①分岐点、分岐点 からの葉を抽出 ②分岐点、分岐点からの葉 の出現位置を検索 ③分岐点、葉の出現位置を 取得 ④葉の要素が全 部含む分岐点を 抽出 RDB インデックス テーブル ⑤抽出した分岐点からの葉の 情報を検索 ⑥葉の情報を取得 ⑦葉から根までの 経路の要素を取得 経路の要素を重ね 合わせ ⑩クエリXML文 書が含まれるか 判定する ⑧重ね合わせた経路の要素の 情報を検索 データ テーブル ⑨要素の情報を取得 19 提案手法 • ターゲットXML文書中のクエリXML文書中の分 岐点と分岐点以下の葉の要素名が同じ要素を探 す ターゲットXML文書 クエリXML文書 a a b d g f e h b c i c クエリXML文書の 分岐点の要素名 が同じものを探す クエリXML文書の分岐点 以下の葉の要素名が全て 含まれるか調べる h i 20 提案手法 • 葉の要素の根までのパスを重ね合わせ、クエリ XML文書が含まれるか調べる ターゲットXML文書 a a b d g c f e h b i 葉の要素の根までの 要素を得る a a b b c c c h i 重ね合わせ h i クエリXML文書 21 が含まれるか調べる 提案手法(④分岐点抽出) • Stack-Joinと呼ばれる手法を利用 • XML文書(各要素の左はプリオーダ、右は要素の範囲(最も深 く、右の要素))を、中央の対象リストに変換する • 子孫対象リストの①から④を走査する間、先祖対象に子孫対象が 含まれる場合、その先祖対象をスタックに積む • スタックにある間、含まれる子孫対象を追加する 1,7 2,6 3,3 7,7 先祖対象 リスト (1,7),(2,6),(4,6) 4,6 5,5 6,6 子孫対象 リスト (4,6) (5,5),(6,6) (2,6) (3,3),(5,5),(6,6) (1,7) (7,7),(3,3),(5,5),(6,6) (3,3),(5,5),(6,6),(7,7) ① ② ③ ④ スタック 先祖対象に属する子孫対象 22 提案手法(⑦重ね合わせ) • 重ね合わせるパスで同じ要素がある場合は1つ にまとめ、重ねた要素をプリオーダの順で並び 替える手順を行っている。 myDocument 1,8 Data 2,7 first Name 3,6 Data 5,4 second Name 4,5 first Name 6,3 second Name 7,2 first Name 3,6 myDocument 1,8 Data 2,7 重ね合わせ 重ね合わせ myDocument 1,8 Data 2,7 second Name 4,5 myDocument 1,8 Data 2,7 first Name 3,6 second Name 4,5 23 提案手法(⑩判定) • 取得したデータとクエリXML文書の要素につい て、要素名と根からの深さをペアにしてプリ オーダ順で系列化を行う a b c d a j f e g h i 取得したデータ k (a,0),(b,1),(c,2),(d,2),(e,2), (f,1),(g,2),(h,2),(i,2),(j,1), (k,2) j f g (a,0),(f,1),(g,2),(i,2),(j,1) i クエリXML文書 24 提案手法(⑩判定) • クエリXML文書の最初の要素(根)を取得した データの先頭から検索する クエリXML文書 :(a,0),(f,1),(g,2),(i,2),(j,1) 合致 取得したデータ:(a,0),(b,1),(c,2),(d,2),(e,2),(f,1),(g,2),(h,2),(i,2),(j,1),(k,2) 25 提案手法(⑩判定) • クエリXML文書の次の要素を検索する。ただし、 取得したデータの次の要素と同じレベルの要素 しか検索しない クエリXML文書 :(a,0),(f,1),(g,2),(i,2),(j,1) スキップ 合致 取得したデータ:(a,0),(b,1),(c,2),(d,2),(e,2),(f,1),(g,2),(h,2),(i,2),(j,1),(k,2) 26 提案手法(⑩判定) • fの次に深さが大きい要素がある場合(fが子を持つ場合)、fの 位置をスタックに積み、fの次(子)に対して要素を検索する • クエリXML文書の要素の深さより小さい要素が出現したら 終了し、スタックに記憶した位置 (f) の要素と同じ深さの次 の要素 (j) から検索を続ける 次の要素 クエリXML文書 :(a,0),(f,1),(g,2),(i,2),(j,1) 合致 合致 取得したデータ:(a,0),(b,1),(c,2),(d,2),(e,2),(f,1),(g,2),(h,2),(i,2),(j,1),(k,2) 27 提案手法(⑩判定) • 全てのクエリXML文書の要素が合致したため、 取得したデータにクエリXML文書が含まれるこ とがわかる クエリXML文書:(a,0),(f,1),(g,2),(i,2),(j,1) 合致 取得したデータ:(a,0),(b,1),(c,2),(d,2),(e,2),(f,1),(g,2),(h,2),(i,2),(j,1),(k,2) 28 提案手法(検索クライアント) • 標準入力でクエリXML文書を入力し、標準出力でター ゲットXML文書中に出現するクエリXML文書の根の位 置を返す • 検索速度の高速化のため、復号したデータのキャッシュ、 文字列長の比較を組み込んでいる 検索クライアント Stream クエリXML文書 HashQueryNode GetQueryLoc MakeNodeList MakeBindList GetNodeData Matching 出現位置 29 実験・結果 • サーバPC1台、クライアントPC1台を100Mbpsのネットワー クで接続して実験を実施 種別 CPU メモリ HDD容量 使用OS サーバ Intel Xeon 3.2GHz×2 4GB 200GB CentOS 4.1 クライアント AMD Athron X2 5400×1 2GB 120GB Windows XP SP3 • ターゲットXML文書は、1M、5M、10MbyteのXML文書を用 意。XML文書の要素数は、1MByteで24405個、5MByteで 121944個、10MByteで243435個 • RDBサーバはMySQL を使用、インデックステーブル のテー ブル数を1MByteのXML文書の場合は10000、5MByteは50000、 10MByte場合は100000に設定 • データテーブル の位置 について、RDBの機能であるイン デックスを有効にした 30 実験・結果 • • • • クエリXML文書(XPathで表現)は以下のものを使用した Q1-Q6は枝のないXML文書 Q7-Q10は枝のあるXML文書 Q11-Q12はターゲットXML文書の根からではない一部 クエリ Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q10 Q11 Q12 XPath /site /site/regions /site/regions/asia /site/regions/asia/item /site/regions/europe/item/description /site/regions/namerica/item/description /site[regions][catgraph][open_auctions] /site/people/person[name][emailaddress] /site/open_auctions/open_auction/bidder[date][increase] /site/closed_auctions/closed_auction/annotation[author][description] //item //description/text 31 実験・結果 • • • • Q1-Q3、Q7は、検索時間は1秒未満と短い Q4-Q6は、分岐数に従って検索時間が長い Q8-Q10は、分岐数、葉数に従って検索時間は長い Q11-Q12は、分岐数に従って検索時間が長い クエリ 検索時間 検索時間 検索時間 分岐数 葉数 分岐数 葉数 分岐数 葉数 マッチ数 マッチ数 マッチ数 1MB 1MB 5MB 5MB 10MB 10MB 1MB 5MB (ms) (ms) (ms) 10MB 1MB 5MB 10MB Q1 119 81 119 1 1 1 1 1 1 1 1 1 Q2 143 82 120 1 1 1 1 1 1 1 1 1 Q3 127 93 120 1 1 1 1 1 1 1 1 1 Q4 1,394 2,057 4,253 183 1 923 1 1,848 1 17 85 170 Q5 3,596 10,036 22,712 374 1 1,888 1 3,782 1 51 255 510 Q6 3,606 10,117 22,498 374 1 1,888 1 3,782 1 85 425 850 Q7 171 235 398 1 3 1 3 1 3 1 1 1 Q8 2,581 7,380 15,602 216 623 1,084 3,131 2,168 6,268 216 1,083 2,167 Q9 7,604 29,240 73,186 527 1,841 2,628 9,222 5,190 18,219 527 2,628 5,190 Q10 1,574 8,138 17,573 183 557 923 2,811 1,848 5,630 81 413 828 32 Q11 419 2,004 4,173 183 1 923 1 1,848 1 183 923 1,848 Q12 5,980 37,267 107,901 908 1 4,479 1 9,051 1 257 1,332 2,652 実験・結果 • 実際にRDBにデータテーブルの情報を要求した 数と検索時間の関係は比例していた 120000 時間(ms) 100000 80000 1MB 60000 5MB 10MB 40000 20000 0 0 5,000 10,000 15,000 実要求数 20,000 25,000 30,000 33 実験・結果 • Q4、Q11はMakeBindList、Q5-Q6、Q8-Q10、Q12は GetNodeData、MakeBindListが多くの処理時間を占めて いる。 120000 時間( ms) 90000 Matching GetNodeData MakeBindList MakeNodeList GetQueryLoc HashQueryNode Stream 60000 30000 0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 クエリ Q8 Q9 Q10 Q11 Q12 34 実験・結果 • Q1-Q3、Q7はGetQueryLocが多くの処理時間を占めてい る。 1000 750 Matching 時間( ms) GetNodeData MakeBindList 500 MakeNodeList GetQueryLoc HashQueryNode Stream 250 0 Q1 Q2 Q3 クエリ Q7 35 考察 • 枝がない場合の検索は、 その要素がターゲットXML文書中に多 く存在するほど検索時間は長い – クエリXML文書の根からもっとも深い要素名をターゲットXML文書 から検索して、根までのパスの要素を取得している • 枝がある場合の検索は、 葉の要素がターゲットXML文書中に多 く存在するほど検索時間は長い – クエリXML文書から子が2つ以上に分岐している分岐点と分岐点を 根とする木の葉の要素を取得し、根までのパスの要素を取得してい る • 検索クライアント中の処理時間について、MakeBindList 、 GetNodeDataが多くの時間を占めている – MakeBindListは、クエリXML文書の分岐点と葉の位置関係と同じ関 係を持つ部分の要素をRDBから取得・復号し、ターゲットXML文書 の根までのパスの要素を重ね合わせる処理 – GetNodeDataは、MakeBindList で重ね合わせた要素をRDBから取得 する処理 36 今後の課題 • 検索時間の高速化が課題 • 実験結果から検索時間の高速化はRDBへの要素の要求に関 する時間を短縮することが効果的 • 検索に必要な要素をできるだけ少ない数でインデックス テーブルから得ることが出来れば、検索時間を高速化する ことが出来る • インデックステーブルのキーに要素名とXML文書の構造を 含めることで、同じ要素名でも別のインデックステーブル に分散して位置の情報を配置し、1テーブルあたりの登録 数を少なくすることが考えられる 37 まとめ • XML文書を暗号化したままで安全に検索する手法を提案 を行った • XML Benchmark Projectで公開されているXML文書作成ソ フトウエアで作成したXML文書で検索時間等の評価を 行った • 今回提案した手法は、検索時間がRDBからの要素の取得 数に大きく依存していた • RDBから取得する要素をできるだけ少なくなるように、 インデックステーブルのキーを改善することが今後の課 題である 38 ご清聴ありがとうございました 39
© Copyright 2024 ExpyDoc