(57)【要約】【課題】重複排除ストレージ技術を利用したサービス拒否攻撃を防ぐこと。【解決手段】書込部２１は、データを不揮発性記憶部３０に書き込むときに、乱数を発生し、発生した乱数に基づいて追加キーを生成する。また、ストレージ装置１は、書込部２１が生成した追加キーをハッシュ値とともにキーとして用いてデータの重複を排除する。対応表１２は、ハッシュ値と追加キーとデータの識別子とを対応させて記憶し、ハッシュ値テーブル１３は、ハッシュ値と追加キーとデータの格納位置と参照数とを対応させて記憶する。【選択図】図１
2014203362.tif 000002
【特許請求の範囲】
【請求項１】
データから生成される第１の値に基づいて該データの重複記憶を排除するストレージ装置において、
前記データを書き込むときに決定する数に基づいて第２の値を生成する生成部と、
前記第１の値及び第２の値に基づいて前記データの重複記憶を制御する制御部と
を備えたことを特徴とするストレージ装置。
【請求項２】
前記第１の値及び第２の値を前記データの記憶位置と対応させて記憶する第１のテーブルと、
前記第１の値及び第２の値を前記データを識別する識別子と対応させて記憶する第２のテーブルとをさらに備え、
前記制御部は、前記第１のテーブルと第２のテーブルを用いて前記データの重複記憶を制御することを特徴とする請求項１に記載のストレージ装置。
【請求項３】
前記生成部は、前記数に基づいて前記データの一部を取り出し、該数と取り出したデータを用いて前記第２の値を生成することを特徴とする請求項１又は２に記載のストレージ装置。
【請求項４】
前記第１の値はハッシュ値であり、前記数は乱数であることを特徴とする請求項１、２又は３に記載のストレージ装置。
【請求項５】
データから生成される第１の値に基づいて該データの重複記憶を排除するストレージ装置によるストレージ制御方法において、
前記ストレージ装置が有するプロセッサが、前記データを前記ストレージ装置が有する記憶部に書き込むときに決定する数に基づいて第２の値を生成し、
前記プロセッサが、前記第１の値及び第２の値に基づいて前記データの重複記憶を制御する
ストレージ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置及びストレージ制御方法に関する。
【背景技術】
【０００２】
従来、データをＨＤＤ（Hard  Disk  Drive）などの不揮発性記憶装置に書き込む前にハッシュ値を計算し、ハッシュ値が同じデータが既に記憶されている場合に、データを書き込むことなしにデータを共有する重複排除ストレージ技術がある。
【０００３】
例えば、ハッシュのビット数を５１２ビットとすると、ハッシュ値が衝突する可能性は１０150回に１回程度であり、データの重複排除を行うストレージ装置は、データが同じであるかを確認することなく、ハッシュ値だけでデータが同じであるか否かを判定できる。
【０００４】
ここで、データはファイルや例えば大きさが６４ＫＢ（キロバイト）のブロックであり、データを用いて同一性を確認しようとすると書き込みに要する時間が大きくなる。したがって、ハッシュ値を用いてデータの同一性を判定することにより、ストレージ装置はデータの書き込み時間を短縮することができる。
【０００５】
なお、原画像をＪＰＥＧ形式に変換する際に、原画像を分割した８×８画素のブロックの夫々にＤＣＴを行って量子化した量子化ＤＣＴ係数などを用いて秘密情報を求め、各ブロックに秘密情報を埋め込むことにより画像の改竄を防ぐ従来技術がある。また、入力されるコンテンツとメタデータに分離困難な変換処理を施すことによって、コンテンツ又はメタデータの改竄を困難にする従来技術がある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００３−２８９４３５号公報
【特許文献２】特開２００４−７２１８４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
重複排除ストレージ技術において、ハッシュ値が偶然衝突する可能性は十分小さくすることができるが、意図的にハッシュ値を衝突させる技術が開発されることがある。かかる技術が開発され、あるデータのハッシュ値と同じハッシュ値を持つデータを作ることが可能となった場合、サービス拒否攻撃が可能になる。
【０００８】
例えば、攻撃者が、将来作られることが予想できるデータＡと同じハッシュ値を持つデータＢを作り、先回りしてデータＢをストレージ装置に書き込んでおくことで、データＡが書き込まれたときにデータＡがデータＢに置き換えられる。その結果、攻撃者は、データＡを使用する情報処理装置に誤った処理をさせることができる。
【０００９】
なお、同一ハッシュ値を持つデータが生成可能になったときにハッシュ関数を変えることが考えられるが、ストレージ装置では、全データに対してハッシュ値の再計算が必要になるなど、ハッシュ関数の変更は負担が大きい。
【００１０】
本発明は、１つの側面では、重複排除ストレージ技術を利用したサービス拒否攻撃を防ぐことができるストレージ装置及びストレージ制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
本願の開示するストレージ装置は、１つの態様において、データから生成される第１の値に基づいて該データの重複記憶を排除するストレージ装置である。ストレージ装置は、前記データを書き込むときに決定する数に基づいて第２の値を生成する生成部と、前記第１の値及び第２の値に基づいて前記データの重複記憶を制御する制御部とを備える。
【発明の効果】
【００１２】
１実施態様によれば、重複排除ストレージ技術を利用したサービス拒否攻撃を防ぐことができる。
【図面の簡単な説明】
【００１３】
【図１】図１は、実施例に係るストレージ装置の機能構成を示す図である。
【図２】図２は、対応表の一例を示す図である。
【図３】図３は、追加キーのデータ構造の一例を示す図である。
【図４】図４は、ハッシュ値テーブルの一例を示す図である。
【図５】図５は、書込部の処理手順を示すフローチャートである。
【図６】図６は、重複データ処理の処理手順を示すフローチャートである。
【図７】図７は、新規データ処理の処理手順を示すフローチャートである。
【図８】図８は、読込部の処理手順を示すフローチャートである。
【図９】図９は、サービス拒否攻撃の一例を示す図である。
【図１０】図１０は、ストレージ装置のハードウェア構成を示す図である。
【発明を実施するための形態】
【００１４】
以下に、本願の開示するストレージ装置及びストレージ制御方法の実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。
【実施例】
【００１５】
まず、実施例に係るストレージ装置の機能構成について説明する。図１は、実施例に係るストレージ装置の機能構成を示す図である。図１に示すように、ストレージ装置１は、揮発性記憶部１０と、制御部２０と、不揮発性記憶部３０とを有する。
【００１６】
揮発性記憶部１０は、記憶するデータが電源オフ時に消える記憶部である。制御部２０は、揮発性記憶部１０が記憶するデータを用いてストレージ装置１を制御する。不揮発性記憶部３０は、ネットワークに接続されたサーバ２がストレージ装置１に記憶させるデータを記憶する。不揮発性記憶部３０が記憶するデータは、電源オフ時にも消えることはない。
【００１７】
揮発性記憶部１０は、データ部１１と、対応表１２と、ハッシュ値テーブル１３とを有する。データ部１１は、サーバ２が不揮発性記憶部３０に記憶させるデータの一部を一時的に記憶する。
【００１８】
対応表１２は、不揮発性記憶部３０が記憶するデータの識別子とデータのキーとの対応を示す情報を記憶する。図２は、対応表１２の一例を示す図である。図２に示すように、対応表１２は、識別子とハッシュ値と追加キーとをデータ毎に記憶する。
【００１９】
識別子は、データを識別するためにデータに付与される値である。ここでは、データは６４ＫＢのブロックであり、識別子はブロック番号である。データがファイルである場合には、識別子はファイルのＩＤである。
【００２０】
ハッシュ値は、データからハッシュ関数を用いて計算される値である。ハッシュ関数としては、ＭＤ５（Message  Digest  Algorithm  ５）、ＳＨＡ（Secure  Hash  Algorithm）１、ＳＨＡ２５６、ＳＨＡ５１２などがある。例えば、ハッシュ関数をＳＨＡ５１２とすると、ハッシュ値の長さは６４バイトとなる。
【００２１】
追加キーは、データがストレージ装置１に書き込まれるときに決定される値であり、ハッシュ値と合わせてデータのキーとして用いられる。図３は、追加キーのデータ構造の一例を示す図である。
【００２２】
図３に示すように、追加キーは、２バイト長の「位置」と２バイト長の「内容」が４つ連結されたものである。「位置」は、データがストレージ装置１に書き込まれるときに生成される乱数である。「内容」は、データの先頭から「位置」で示されるバイト目の２バイトデータである。
【００２３】
例えば、対応表１２は、識別子としてブロック番号「２８３９１８９３」、ハッシュ値として「ａｆ４９３８９．．．」、追加キーとして「１２８“ａａ”，．．．」を対応させて記憶する。「１２８”ａａ“」は、データの先頭から１２８バイト目の２バイトデータが”ａａ“であることを示す。
【００２４】
ストレージ装置１は、ハッシュ値と追加キーの組をデータのキーとして用いる。ストレージ装置１が、ハッシュ値に加えて追加キーをデータのキーとして用いることによって、重複排除ストレージ技術を利用したサービス拒否攻撃を防ぐことができる。
【００２５】
例えば、正しいデータＡと同一ハッシュ値を持つデータＢが、データＡが書き込まれる前にストレージ装置１に書き込まれた場合でも、データＡとデータＢでは追加キーが異なるため、データＡはストレージ装置１に書き込まれる。
【００２６】
追加キーは、データＡがストレージ装置１に書き込まれるときに決定される値であるので、攻撃者は、事前に追加キーを特定することはできない。したがって、攻撃者は、データＡと同一ハッシュ値を持つデータＢを生成できた場合でも、重複排除ストレージ技術を悪用してデータＡをデータＢで置き換えることはできない。
【００２７】
なお、ここでは、４つの乱数を用いて４つの２バイトデータを追加キーに用いているが、ストレージ装置１は、より多くの数の乱数を用いることによって、追加キーが偶然に衝突する可能性を低減することができる。また、ストレージ装置１は、データがストレージ装置１に書き込まれるときに決定される値として、乱数を生成する代わりに、データを書き込む際の時間に基づく数など他の数を用いて追加キーを生成することもできる。
【００２８】
図１に戻って、ハッシュ値テーブル１３は、不揮発性記憶部３０が記憶するデータに関する情報を記憶する。図４は、ハッシュ値テーブル１３の一例を示す図である。図４に示すように、ハッシュ値テーブル１３は、ハッシュ値と追加キーと位置情報と参照数とをデータ毎に記憶する。
【００２９】
位置情報は、ハッシュ値と追加キーの組で特定されるデータが不揮発性記憶部３０で記憶される位置を示す情報である。参照数は、データが異なる識別子で参照されている個数を示す。ストレージ装置１は、同一のデータを重複して記憶することはないので、１つのデータが複数の識別子に対応する可能性がある。
【００３０】
例えば、ハッシュ値テーブル１３は、ハッシュ値として「ａｆ４９３８９．．．」、追加キーとして「１２８“ａａ”，．．．」、位置情報として「４３２４９３２」、参照数として「１」を対応させて記憶する。
【００３１】
図１に戻って、制御部２０は、書込部２１と読込部２２とを有する。書込部２１は、サーバ２からの指示に基づいて不揮発性記憶部３０にデータを書き込む。書込部２１は、データを書き込むときに、データからハッシュ値を生成し、ハッシュ値テーブル１３を参照してハッシュ値と追加キーで指定されたデータの両方が一致するかどうかを判定する。
【００３２】
そして、書込部２１は、ハッシュ値と追加キーで指定されたデータの両方が一致する場合には、重複データがある場合の処理を行い、ハッシュ値と追加キーで指定されたデータの両方が一致しない場合には、新規データを不揮発性記憶部３０に書き込む処理を行う。
【００３３】
書込部２１は、生成部２１１を有する。生成部２１１は、書込部２１が新規データを不揮発性記憶部３０に書き込む際に、新規データから追加キーを生成する。そして、書込部２１は、書き込み要求で指定された識別子が対応表３２にあれば、対応表３２のハッシュ値と追記キーを更新し、対応表３２になければ、識別子、ハッシュ値、追加キーを用いて新しいエントリを対応表３２に作成する。
【００３４】
読込部２２は、サーバ２からの指示に基づいて不揮発性記憶部３０からデータを読み込む。読込部２２は、対応表１２及びハッシュ値テーブル１３を参照して、データの識別子からデータの位置情報を取得し、取得した位置情報を用いて不揮発性記憶部３０からデータを読み出す。そして、読込部２２は、不揮発性記憶部３０から読み出したデータをサーバ２へ送信する。
【００３５】
不揮発性記憶部３０は、データ部３１と、対応表３２と、ハッシュ値テーブル３３とを有する。データ部３１は、サーバ２によりストレージ装置１に書き込まれたデータを記憶する。データ部３１が記憶するデータの一部は、データ部１１に一時的に記憶される。
【００３６】
対応表３２は、揮発性記憶部１０が有する対応表１２と同一であり、ストレージ装置１が起動されると、対応表３２が記憶するデータが対応表１２へ読み込まれる。また、対応表１２が更新されると対応表３２も更新される。
【００３７】
ハッシュ値テーブル３３は、揮発性記憶部１０が有するハッシュ値テーブル１３と同一であり、ストレージ装置１が起動されると、ハッシュ値テーブル３３が記憶するデータがハッシュ値テーブル１３へ読み込まれる。また、ハッシュ値テーブル１３が更新されるとハッシュ値テーブル３３も更新される。
【００３８】
なお、対応表３２及びハッシュ値テーブル３３は、対応表１２及びハッシュ値テーブル１３がそれぞれ更新されると同期して更新されるが、ストレージ装置１は、停止するときに、まとめて対応表３２及びハッシュ値テーブル３３を更新することもできる。ストレージ装置１が、対応表１２及びハッシュ値テーブル１３に同期してそれぞれ対応表３２及びハッシュ値テーブル３３を更新するのは、装置の故障に備えるためである。
【００３９】
次に、書込部２１の処理手順について説明する。図５は、書込部２１の処理手順を示すフローチャートである。図５に示すように、書込部２１は、サーバ２で動作するアプリケーションがデータの書き込みを要求すると、書き込むデータのハッシュ値を算出する（ステップＳ１）。
【００４０】
そして、書込部２１は、ハッシュ値テーブル１３を算出したハッシュ値で検索し（ステップＳ２）、同一ハッシュ値を持つデータが存在するか否かを判定する（ステップＳ３）。その結果、同一ハッシュ値を持つデータが存在する場合には、書込部２１は、ハッシュ値テーブルから追加キーを読み出し、追加キーで指定された位置のデータが一致するか否かを判定し（ステップＳ４）、追加キーで指定されたデータも一致する場合には、重複データ処理を行う（ステップＳ５）。
【００４１】
一方、追加キーで指定されたデータが一致しない場合、あるいは、同一ハッシュ値を持つデータが存在しない場合には、書込部２１は、新規データ処理を行う（ステップＳ６）。
【００４２】
このように、書込部２１が、データを書き込むときに、追加キーも含めて一致するデータの有無を判定することによって、ストレージ装置１は、重複排除ストレージ技術を利用したサービス拒否攻撃を防ぐことができる。
【００４３】
次に、重複データ処理の処理手順について説明する。図６は、重複データ処理の処理手順を示すフローチャートである。図６に示すように、書込部２１は、ハッシュ値テーブル１３のハッシュ値及び追加キーが一致するエントリの参照数を１増加する（ステップＳ１１）。
【００４４】
そして、書込部２１は、サーバ２からの書き込み要求で指定された識別子を用いて対応表１２を検索し（ステップＳ１２）、書き込み要求で指定された識別子が対応表１２にあるか否かを判定する（ステップＳ１３）。
【００４５】
その結果、対応表１２にある場合には、識別子で指定されたデータが更新された場合であるので、書込部２１は、対応表１２の識別子に対応するハッシュ値と追加キーを新しいハッシュ値と追加キーで更新する（ステップＳ１４）。そして、書込部２１は、更新前のデータのハッシュ値テーブル１３の参照数を１減少する（ステップＳ１５）。
【００４６】
そして、書込部２１は、１減少した参照数は０であるか否かを判定し（ステップＳ１６）、０である場合には、更新前のデータは参照されなくなったので、ハッシュ値テーブル１３から更新前のデータのエントリを削除する（ステップＳ１７）。そして、書込部２１は、不揮発性記憶部３０に対応表１２とハッシュ値テーブル１３の変更を反映する（ステップＳ１８）。
【００４７】
一方、書き込み要求で指定された識別子が対応表１２にない場合には、新たな識別子で指定されたデータを書き込む場合であるので、書込部２１は、書き込み要求で指定された識別子を用いて新しいエントリを対応表１２に作成する（ステップＳ１９）。そして、書込部２１は、ステップＳ１８に進む。
【００４８】
このように、書込部２１が、重複データ処理を行うことによって、ストレージ装置１は、同一データの重複記憶を防ぐことができる。
【００４９】
次に、新規データ処理の処理手順について説明する。図７は、新規データ処理の処理手順を示すフローチャートである。図７に示すように、生成部２１１は、追加キーを生成する（ステップＳ３０）。具体的には、生成部２１１は、４つの２バイト長の乱数を生成し、データの先頭から乱数に対応するバイト目の２バイトデータを乱数と結合して４バイトデータを生成する処理を各乱数に対して行う。そして、生成部２１１は、４つの４バイトデータを結合して追加キーを生成する。続いて、書込部２１は、不揮発性記憶部３０に新規の領域を確保し、データを書き込む（ステップＳ３１）。
【００５０】
そして、書込部２１は、ハッシュ値と追加キーを用いてハッシュ値テーブル１３の新規エントリを作成し、データの位置情報と参照数を格納する（ステップＳ３２）。ここで、参照数の値は初期値の１である。
【００５１】
そして、書込部２１は、サーバ２からの書き込み要求で指定された識別子を用いて対応表１２を検索し（ステップＳ３３）、書き込み要求で指定された識別子が対応表１２にあるか否かを判定する（ステップＳ３４）。
【００５２】
その結果、対応表１２にある場合には、識別子で指定されたデータが更新された場合であるので、書込部２１は、対応表１２の識別子に対応するハッシュ値と追加キーを新しいハッシュ値と追加キーで更新する（ステップＳ３５）。そして、書込部２１は、更新前のデータのハッシュ値テーブル１３の参照数を１減少する（ステップＳ３６）。
【００５３】
そして、書込部２１は、１減少した参照数は０であるか否かを判定し（ステップＳ３７）、０である場合には、更新前のデータは参照されなくなったので、ハッシュ値テーブル１３から更新前のデータのエントリを削除する（ステップＳ３８）。そして、書込部２１は、不揮発性記憶部３０に対応表１２とハッシュ値テーブル１３の変更を反映する（ステップＳ３９）。
【００５４】
一方、書き込み要求で指定された識別子が対応表１２にない場合には、新たな識別子で指定されたデータを書き込む場合であるので、書込部２１は、書き込み要求で指定された識別子を用いて新しいエントリを対応表１２に作成する（ステップＳ４０）。そして、書込部２１は、ステップＳ３９に進む。
【００５５】
このように、書込部２１が、新規データ処理を行うことによって、ストレージ装置１は、同一データが記憶されていないデータを不揮発性記憶部３０に格納することができる。
【００５６】
次に、読込部２２の処理手順について説明する。図８は、読込部２２の処理手順を示すフローチャートである。図８に示すように、サーバ２で動作するアプリケーションがデータの読み込みを要求すると、読込部２２は、読み込み要求で指定された識別子を用いて対応表１２を検索し、ハッシュ値と追加キーを取得する（ステップＳ５１）。
【００５７】
そして、読込部２２は、取得したハッシュ値と追加キーを用いてハッシュ値テーブル１３を検索し、位置情報を取得する（ステップＳ５２）。そして、読込部２２は、取得した位置情報を用いて不揮発性記憶部３０からデータを読み出し、サーバ２に送信する（ステップＳ５３）。
【００５８】
このように、読込部２２が、ハッシュ値に加えて追加キーを用いてデータを読み込むことにより、ストレージ装置１は、ハッシュ値が同一なデータの中から適切なデータをサーバ２に送信することができる。
【００５９】
上述してきたように、実施例では、書込部２１は、データを不揮発性記憶部３０に書き込むときに、乱数を生成し、生成した乱数に基づいて追加キーを生成する。そして、ストレージ装置１は、書込部２１が生成した追加キーをハッシュ値とともにキーとして用いてデータの重複を排除する。したがって、同一ハッシュ値を持つデータが生成可能な場合でも、ストレージ装置１は、重複排除ストレージ技術を利用したサービス拒否攻撃を防ぐことができる。
【００６０】
図９は、サービス拒否攻撃の一例を示す図である。図９は、大本のサイト７のファイルがミラーサイト８にコピーされる場合の攻撃例を示す。図９において、攻撃者６は、ミラーサイト８にファイルがコピーされる前にデータ内容を確認する（１）。そして、攻撃者６は、同一のハッシュ値を持つ偽のファイルを生成し、ミラーサイト８に書き込む（２）。
【００６１】
その後、大本のサイト７のファイルがミラーサイト８にミラーされる（３）。すると、従来は、同一のハッシュ値を持つ偽のファイルが既にミラーサイト８に書き込まれているので、ミラーされるファイルは偽のファイルと同一と判定され、ミラーサイト８では、ファイルの中身が置き換えられる（４）。
【００６２】
しかしながら、実施例に係るストレージ装置１は、攻撃者６がミラーサイト８に偽のファイルを書き込んだ場合でも、ファイルをミラーするときに乱数を用いて追加キーを生成し、ハッシュ値に加えて追加キーをキーとしてデータの同一性を判定する。したがって、ストレージ装置１は、ミラーされるファイルに対して偽のファイルとは異なる追加キーを生成することによって、ミラーされるファイルが偽のファイルで置き換えられることを防ぐことができる。
【００６３】
また、実施例では、対応表１２は、ハッシュ値と追加キーとデータの識別子とを対応させて記憶し、ハッシュ値テーブル１３は、ハッシュ値と追加キーとデータの格納位置と参照数とを対応させて記憶する。したがって、ストレージ装置１は、データが同一である複数の識別子を管理することができる。
【００６４】
また、実施例では、ストレージ装置１は、４つの乱数を用いて追加キーを生成したが、より多くの乱数を用いて追加キーを生成することもできる。したがって、ストレージ装置１は、ハッシュ値と追加キーをデータのキーとした場合に、異なるデータに対してキーが偶然一致する可能性を低くすることができる。
【００６５】
なお、実施例で説明したストレージ装置は、ＣＰＵでプログラムを動作させることによっても実現される。そこで、ＣＰＵでプログラムを動作させることによって実現されるストレージ装置のハードウェア構成について説明する。
【００６６】
図１０は、ストレージ装置のハードウェア構成を示す図である。図１０に示すように、ストレージ装置４０は、メインメモリ４１と、ＣＰＵ（Central  Processing  Unit）４２と、ホストインタフェース４３と、ＨＤＤ（Hard  Disk  Drive）４４とを有する。
【００６７】
メインメモリ４１は、プログラムやプログラムの実行途中結果などを記憶するメモリであり、図１の記憶部１０に対応する。ＣＰＵ４２は、メインメモリ４１からプログラムを読み出して実行する中央処理装置であり、図１の制御部２０に対応する。
【００６８】
ホストインタフェース４３は、ストレージ装置４０をサーバ２に接続するためのインタフェースである。ＨＤＤ４４は、プログラムやデータを格納するディスク装置であり、図１の不揮発性記憶部３０に対応する。なお、ストレージ装置４０は、ＨＤＤ４４の替わりにＳＳＤ（Solid  State  Drive）を備えることもできる。
【符号の説明】
【００６９】
１    ストレージ装置
２    サーバ
６    攻撃者
７    大本のサイト
８    ミラーサイト
１０    揮発性記憶部
１１    データ部
１２    対応表
１３    ハッシュ値テーブル
２０    制御部
２１    書込部
２２    読込部
３０    不揮発性記憶部
３１    データ部
３２    対応表
３３    ハッシュ値テーブル
４０    ストレージ装置
４１    メインメモリ
４２    ＣＰＵ
４３    ホストインタフェース
４４    ＨＤＤ
２１１    生成部
【図１】
2014203362.tif 000003
【図２】
2014203362.tif 000004
【図３】
2014203362.tif 000005
【図４】
2014203362.tif 000006
【図５】
2014203362.tif 000007
【図６】
2014203362.tif 000008
【図７】
2014203362.tif 000009
【図８】
2014203362.tif 000010
【図９】
2014203362.tif 000011
【図１０】
2014203362.tif 000012