以下に添付図面を参照して、開示の検証方法、検証装置、および検証プログラムの実施の形態を詳細に説明する。
図1は、実施の形態にかかる検証装置の動作例を示す説明図である。図1では本実施の形態にかかる検証装置101の動作を示している。墨塗した画像の検証を行う検証装置101は、原本データ111であるMotionJPEGから、フレーム112が墨塗された切出・墨塗データ113を受け付けることで、検証処理を開始する。MotionJPEGとは、動画圧縮形式の一つであり、フレーム間の圧縮を行わない動画形式である。また、MotionJPEGの各フレームは、圧縮静止画形式の一つであるJPEGフォーマットに従っている。なお、JPEGフォーマットの詳細については、図8にて後述する。たとえば、フレーム112と、切出・墨塗データ113は、JPEGフォーマットに従っている。
JPEGフォーマットは、画像をMCU(Minimum Coded Unit)という領域に分割し、MCU単位で処理を行う。さらに、MCUを画素値の成分ごとに分解し、8×8[ピクセル]単位にした領域をブロックと呼ぶ。図1中では、ブロックをbと表示する。たとえば、図1では、画像の内部に、MCU1〜MCU6が含まれている。さらに、MCU1は、ブロック1〜ブロック4を含み、MCU2は、ブロック5〜ブロック8を含み、MCU3は、ブロック9〜ブロック12を含む。さらに、MCU4は、ブロック13〜ブロック16を含み、MCU5は、ブロック17〜ブロック20を含み、MCU6は、ブロック21〜ブロック24を含む。
また、各ブロックが示す領域の画素値は、ブロック番号が1つ小さいブロックの画素値からの差分値にて表現している。たとえば、MCU2のブロック5の画素値は、ブロック4の画素値からの差分値にて表現している。このように、差分値で画素値を表現することで、ブロック内の画素値の統計的な偏りが大きくなり、圧縮効率を高めることができる。
このような状態で、検証装置101は、切出・墨塗データ113の検証を行う。フレーム112には、人物Aと人物Bが映っていたが、人物Aに関してはプライバシー保護のため、切出・墨塗データ113には、人物Aを表示するMCUが墨塗され、人物Bのみが映っている。ここで、検証装置101は、フレーム112のハッシュであるJPEGフレームハッシュ121を記憶している。JPEGフレームハッシュ121は、MCU1〜MCU6の位置情報に従ってMCU1ハッシュ〜MCU6ハッシュが連結されたJPEGフレームハッシュ用対象データ122から生成されている。さらに、検証装置101は、人物Aを表示していたMCU1が墨塗されたことと、MCU1が墨塗されたことによりMCU2の差分値が変更されたことと、MCU1およびMCU2のハッシュと、を記憶するMCUハッシュ保存データ123を記憶している。以下、墨塗されたMCUを墨塗MCUと定義し、墨塗されたことにより差分値が変更されたMCUを緩衝MCUと定義する。
切出・墨塗データ113を受け付けると、検証装置101は、切出・墨塗データ113を分割した各MCUのうち、MCU1とMCU2に対して、MCUハッシュ保存データ123からMCU1ハッシュとMCU2ハッシュを取得する。次に、検証装置101は、MCU1およびMCU2と異なるMCU3〜MCU6に対して、MCU3ハッシュ〜MCU6ハッシュを生成する。
続けて、検証装置101は、MCU1〜MCU6の位置情報に従って、取得したMCU1ハッシュとMCU2ハッシュと、生成したMCU3ハッシュ〜MCU6ハッシュとを連結したJPEGフレームハッシュ用対象データ124を設定する。次に、検証装置101は、JPEGフレームハッシュ用対象データ124から、JPEGフレームハッシュ125を生成する。最後に、検証装置101は、JPEGフレームハッシュ121とJPEGフレームハッシュ125とを比較することにより、切出・墨塗データ113の正当性を検証する。たとえば、切出・墨塗データ113のハッシュの改ざんがない場合、切出・墨塗データ113のハッシュとフレーム112のハッシュとが同一となるため、検証装置101は、切出・墨塗データ113が改ざんされていないという検証結果を出力することになる。
このように、検証装置101は、切出・墨塗データ113内の墨塗MCUと墨塗MCUから特定された緩衝MCUについて、原本の同位置となるMCUの修正前のハッシュを用いて切出・墨塗データ113のハッシュを生成してフレーム112のハッシュと比較する。これにより、検証装置101は、墨塗領域の数に関わらず、ハッシュの比較を1回しか行わないため、原本性の検証を迅速に行える。
図2は、検証システムの接続例を示す説明図である。画像を検証する検証システム200は、検証装置101と、撮影装置201と、切出・墨塗操作端末202と、検証操作端末203と、を含む。検証装置101、撮影装置201〜検証操作端末203は、ネットワーク210で接続されている。
検証装置101は、切出・墨塗データ113の原本性を検証する。また、本実施の形態にかかる検証装置101は、原本データ111に対する電子署名を生成し、原本データ111から切出・墨塗データ113の切出を行う。なお、電子署名を生成する装置と、切出を行う装置は、検証装置101とは異なる装置であってもよい。撮影装置201は、原本データ111を生成する。たとえば、撮影装置201は、監視カメラとして病院などに設置されている。
切出・墨塗操作端末202は、原本データ111から切出位置、墨塗位置を指定する。たとえば、切出・墨塗操作端末202は、警察などから原本データ111の公開依頼があった場合に、切出・墨塗作業者の操作によって原本データ111から切出位置、墨塗位置を指定する。
検証操作端末203は、切出・墨塗データ113の原本性の検証要求を検証装置101に送信し、検証結果を受信する。たとえば、検証操作端末203は、公開された切出・墨塗データ113に対して、警察、裁判所などからの原本性の検証要求を受けた場合に、検証者の操作によって切出・墨塗データ113の原本性の検証要求を検証装置101に送信する。
(検証装置101のハードウェア)
図3は、検証装置のハードウェアの一例を示すブロック図である。図3において、検証装置101は、CPU(Central Processing Unit)301と、ROM(Read‐Only Memory)302と、RAM(Random Access Memory)303と、を含む。また、検証装置101は、磁気ディスクドライブ304と、磁気ディスク305と、光ディスクドライブ306と、光ディスク307と、を含む。また、ユーザやその他の機器との入出力装置として検証装置101は、I/F(Interface)308を含む。また、各部はバス309によってそれぞれ接続されている。
ここで、CPU301は、検証装置101の全体の制御を司る。ROM302は、ブートプログラムなどのプログラムを記憶している。RAM303は、CPU301のワークエリアとして使用される。磁気ディスクドライブ304は、CPU301の制御に従って磁気ディスク305に対するデータのリード/ライトを制御する。磁気ディスク305は、磁気ディスクドライブ304の制御で書き込まれたデータを記憶する。
光ディスクドライブ306は、CPU301の制御に従って光ディスク307に対するデータのリード/ライトを制御する。光ディスク307は、光ディスクドライブ306の制御で書き込まれたデータを記憶したり、光ディスク307に記憶されたデータをコンピュータに読み取らせたりする。なお、ROM302、磁気ディスク305、光ディスク307のいずれかの記憶装置に、本実施の形態にかかる検証プログラムが格納されていてもよい。
I/F308は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワーク210に接続され、ネットワーク210を介して他の装置に接続される。そして、I/F308は、ネットワーク210と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F308には、たとえばモデムやLANアダプタなどを採用することができる。
また、検証装置101は、ユーザとのインターフェースとして、ディスプレイと、キーボードと、マウスと、を含んでもよい。また、撮影装置201は、CPU、ROM、RAM、キーボード、カメラデバイスなどを含む。また、切出・墨塗操作端末202、検証操作端末203は、CPUと、ROMと、RAMと、磁気ディスクドライブと、磁気ディスクと、光ディスクドライブと、光ディスクと、ディスプレイと、I/Fと、キーボードと、マウスと、を含む。
(検証装置101の機能)
次に、検証装置101の機能について説明する。図4は、検証装置の機能例を示すブロック図である。検証装置101は、署名生成部401と、切出・墨塗部402と、検証部403と、を含む。この制御部となる機能(署名生成部401〜検証部403)は、記憶装置に記憶されたプログラムをCPU301が実行することにより、その機能を実現する。記憶装置とは、具体的には、たとえば、図3に示したROM302、RAM303、磁気ディスク305、光ディスク307などである。または、I/F308を経由して他のCPUが実行することにより、その機能を実現してもよい。
また、切出・墨塗部402は、指定部411と、特定部412と、生成部413と、格納部414と、修正部415と、変更部416と、出力部417と、を含む。検証部403は、記憶部420−1と、記憶部420−2と、受付部421と、検出部422と、特定部423と、取得部424と、生成部425と、生成部426と、判断部427と、検証部428と、を含む。なお、検証装置101は、署名生成部401〜検証部403の3つの機能を有しているが、署名生成部401を有する装置と切出・墨塗部402を有する装置と検証部403を有する装置とが別々であってもよい。なお、修正部415は、切出・墨塗操作端末202の機能であってもよい。
また、検証装置101は、原本データ111、切出・墨塗データ113、MCUハッシュ保存データ123、原本署名データ431にアクセス可能である。なお、原本データ111、切出・墨塗データ113、MCUハッシュ保存データ123、原本署名データ431は、ROM302、RAM303、磁気ディスク305、光ディスク307などの記憶装置に格納されている。原本データ111は、撮影装置201から受信したMotionJPEGでもよいし、JPEGでもよい。
切出・墨塗データ113は、原本データ111から一部を切り出し、一部分の領域を墨塗したデータである。また、切出・墨塗データ113は、MotionJPEGでもよいし、JPEGでもよい。MCUハッシュ保存データ123は、原本データ111のうち、署名検証に用いるJPEGのヘッダ部分のハッシュとMCUのハッシュを保存するデータである。原本署名データ431は、原本データ111のフレームごとのハッシュと、ハッシュに対して付与された電子署名のデータである。
署名生成部401は、原本データ111に対して署名を生成する機能を有する。たとえば、署名生成部401は、原本データ111の1フレームとなる画像ごとに、画像を分割して得られる複数の領域の領域ごとの要約情報を生成する。ここで、領域とは、図1で示したMCUで示される領域である。また、以降の説明では、要約情報を、単にハッシュとして説明する。次に、署名生成部401は、各画像の各々の領域以外の他の情報のハッシュを画像ごとに生成する。ここで、他の情報とは、JPEGヘッダ部のことである。JPEGヘッダ部については、図8にて説明する。続けて、署名生成部401は、他の情報のハッシュと各々の領域のハッシュとの組合せに応じて、画像のハッシュを画像ごとに生成し、画像ごとのハッシュである原本署名データ431を記憶領域に格納する。
切出・墨塗部402は、原本データ111からデータを切り出し、データの一部分に墨塗を行う機能を有する。たとえば、切出・墨塗部402は、原本データ111となるMotionJPEGから指定されたフレーム群を切り出して、フレーム群の指定された領域に墨塗を行った切出・墨塗データ113を出力する。
検証部403は、切出・墨塗データ113の原本性保証を検証する機能を有する。たとえば、検証部403は、切出・墨塗データ113となるMotionJPEGの画像ごとに、複数の領域に分割し、各々の領域のハッシュから、画像のハッシュを生成し、原本署名データ431内のハッシュと比較することで、原本性保証を検証する。
指定部411は、画像を分割して得られる複数の領域のうち、修正対象となる第1の領域を指定する機能を有する。ここで、第1の領域とは、たとえば、図1で示すと、MCU1となる。たとえば、指定部411は、切出・墨塗操作端末202からの指示により、MCU1を指定する。なお、指定された領域を一意に特定する番号が、RAM303、磁気ディスク305、光ディスク307などの記憶領域に記憶される。
特定部412は、複数の領域のうち自領域の画素値を第1の領域の画素値からの差分値にて表現している第2の領域を特定する機能を有する。画素値とは、画素が示す色情報であり、たとえば、画素値は、輝度成分値、青色色差成分値、赤色色差成分値という3つの成分値であってもよいし、赤成分値、緑成分値、青成分値という3つの成分値であってもよい。また、グレースケール画像であれば、画素値は、輝度成分値となる。たとえば、特定部412は、自領域の画素値をMCU1の画素値からの差分値にて表現しているMCU2を特定する。
また、特定部412は、第1の領域から、画像の走査方向にて次の位置にある第2の領域を特定してもよい。MCUの走査方向は、水平方向であり、右端まで到達したら、次の行となる。図1の例では、MCUの走査順は、MCU1、MCU2、MCU3、MCU4、MCU5、MCU6となる。なお、特定された領域を一意に特定する番号が、RAM303、磁気ディスク305、光ディスク307などの記憶領域に記憶される。
生成部413は、第1の領域の修正前のハッシュおよび第2の領域のハッシュを生成する機能を有する。たとえば、生成部413は、MCU1の修正前のハッシュおよびMCU2の変更前のハッシュを生成する。ハッシュを生成する暗号学的一方向性ハッシュ関数には、たとえば、MD5(Message Digest 5)、SHA(Secure Hash Algorithm)−1、SHA−256のようなアルゴリズムがある。なお、生成されたハッシュは、RAM303、磁気ディスク305、光ディスク307などの記憶領域に記憶される。
格納部414は、第1の領域のハッシュおよび第2の領域のハッシュが生成された場合、第1の領域の位置情報と第1の領域のハッシュと、第2の領域の位置情報と第2の領域のハッシュとを、記憶領域に格納する機能を有する。また、第1の領域のハッシュは、修正部415による修正が行われる前の画素値に対してのハッシュとなる。なお、位置情報は、たとえば、領域を一意に特定する番号であったり、画像内の横方向および縦方向の位置であったりしてもよい。
たとえば、格納部414は、MCU1のハッシュおよびMCU2のハッシュが生成された場合、MCU1の位置情報となる番号として“1”とMCU1のハッシュとMCU2の番号である“2”とMCU2のハッシュをMCUハッシュ保存データ123に格納する。
修正部415は、第1の領域を所定の修正処理で修正する機能を有する。所定の修正処理は、第1の領域の画素値を修正する処理であれば特に限定しないが、たとえば、墨塗処理であってもよいし、モザイク処理であってもよいし、ぼかし処理であってもよい。たとえば、修正部415は、MCU1を墨塗処理で修正する。また、修正部415は、格納部414による第1の領域の位置情報およびハッシュと第2の領域のハッシュとが記憶領域に格納された後に行われる。
具体的には、切出・墨塗操作端末202が切出・墨塗要求を検証装置101に送信した後、切出・墨塗操作端末202は、第1の領域の修正が行えないようにロックしておく。次に、格納部414の処理が終わった後、検証装置101は、修正許可通知を切出・墨塗操作端末202に送信し、切出・墨塗操作端末202は、ロックを解除して第1の領域を修正し、修正後の領域の画素値を検証装置101に送信する。また、検証装置101が切出・墨塗要求を受け付けて、直後に格納部414までの処理を行える場合、切出・墨塗操作端末202は、第1の領域の修正のロックを行わなくてもよい。修正後の領域の画素値は、RAM303、磁気ディスク305、光ディスク307などの記憶領域に記憶される。
変更部416は、第1の領域が修正された場合、第2の領域の差分値を、第2の領域の画素値と第1の領域の修正前の画素値との差分値から第2の領域の画素値と第1の領域の修正後の画素値との差分値に変更する機能を有する。たとえば、MCU2の画素値が75であり、MCU1の修正後の画素値が0であるとする。このとき、変更部416は、MCU2の差分値を、MCU2の画素値75−MCU1の修正後の画素値0=75に変更する。
出力部417は、修正後の第1の領域と変更後の第2の領域とを含む画像を出力する機能を有する。たとえば、出力部417は、切出・墨塗データ113を出力する。なお、出力先としては、RAM303、磁気ディスク305、光ディスク307などの記憶領域に書き込んでもよいし、切出・墨塗要求を行った切出・墨塗操作端末202へ出力してもよい。
記憶部420−1は、原本である第2の画像を分割して得られる複数の領域のうち修正対象となる第1の領域の位置情報および第1の領域の修正前のハッシュと、第1の領域に基づいて特定された第2の領域の修正前のハッシュと、を記憶する。たとえば、図1を例にすると、第1の領域は、フレーム112の墨塗MCUであるMCU1となり、第2の領域は、フレーム112の緩衝MCUであるMCU2である。この場合、記憶部420−1は、MCUハッシュ保存データ123内に、墨塗MCU番号として“1”を記憶し、さらに、MCU1ハッシュと緩衝MCUであるMCU2ハッシュを記憶する。
記憶部420−2は、第2の画像のハッシュを記憶する。詳細には、記憶部420−2は、第2の画像を分割して得られる複数の領域の位置情報に従って、複数の領域のハッシュが連結されたJPEGフレームハッシュ用対象データ122から生成されたハッシュを記憶する。たとえば、記憶部420−2は、フレーム112のJPEGフレームハッシュ121を記憶する。具体的に、JPEGフレームハッシュ121は、原本署名データ431内に存在する。
受付部421は、検証対象である第1の画像を受け付ける機能を有する。ここで、第1の画像は、たとえば、切出・墨塗データ113となる。なお、受け付けた各データは、RAM303、磁気ディスク305、光ディスク307などの記憶領域に記憶される。
検出部422は、第1の画像を分割して得られる複数の領域のうち、当該領域の画素値が特定の画素値となる第3の領域を検出する機能を有する。特定の画素値としては、たとえば、墨塗処理が行われる場合、画素値が全て0である。または、白と黒のモザイク処理が行われた場合、特定の画素値は、画素値が255か0のどちらかとなる。たとえば、検出部422は、切出・墨塗データ113の各MCUのうち、MCU内の画素値が全て0となっているMCU1を検出する。なお、検出された領域を一意に特定する番号が、RAM303、磁気ディスク305、光ディスク307などの記憶領域に記憶される。
特定部423は、第1の画像から、自領域の画素値を第3の領域の画素値からの差分値にて表現している第4の領域を特定する機能を有する。たとえば、特定部423は、自領域の画素値を切出・墨塗データ113のMCU1からの差分値にて表現しているMCU2を特定する。なお、特定された領域を一意に特定する番号が、RAM303、磁気ディスク305、光ディスク307などの記憶領域に記憶される。
取得部424は、記憶部420−1から、第1の画像を分割して得られる複数の領域のうち、第1および第2の領域と同一位置となる第3および第4の領域に対して、第1および第2の領域の修正前のハッシュを取得する機能を有する。たとえば、第1の領域となるフレーム112の墨塗MCUの番号としてMCUハッシュ保存データ123に“1”が格納されているとする。このとき、第1の領域と同一位置となる第3の領域が切出・墨塗データ113のMCU1となり、取得部424は、MCUハッシュ保存データ123から、MCU1の修正前のハッシュを取得する。
また、第2の領域となるフレーム112の緩衝MCUの番号としてMCUハッシュ保存データ123に“2”が格納されているとする。このとき、第2の領域と同一位置となる第4の領域が切出・墨塗データ113のMCU2となり、取得部424は、MCUハッシュ保存データ123から、MCU2の修正前のハッシュを取得する。
また、取得部424は、第1の画像を分割して得られる複数の領域のうち、検出部422が検出した第3の領域および特定部423が特定した第4の領域に対して、第3および第4の領域と同一位置となる第1および第2の領域の修正前の要約情報を取得してもよい。
たとえば、検出部422が第3の領域として切出・墨塗データ113のMCU1を検出した場合、取得部424は、MCUハッシュ保存データ123から、第3の領域と同一位置となるフレーム112のMCU1の修正前のハッシュを取得する。また、特定部423が第4の領域として切出・墨塗データ113のMCU2を特定した場合、取得部424は、MCUハッシュ保存データ123から、第4の領域と同一位置となるフレーム112のMCU2の修正前のハッシュを取得する。なお、取得されたハッシュ、またはハッシュが格納されたアドレスへのポインタ等が、RAM303、磁気ディスク305、光ディスク307などの記憶領域に記憶される。
生成部425は、第1の画像を分割して得られる複数の領域のうち、第3および第4の領域のいずれの領域とも異なる他の領域に対して、他の領域のハッシュを生成する機能を有する。たとえば、nを1以上の整数とし、切出・墨塗データ113のMCU群のうちMCUnについて、第1および第2の領域の位置情報としてMCU番号“1”と“2”が示されていれば、MCU3以降のMCUが異なる領域となる。このとき、生成部425は、MCUnのハッシュを生成する。なお、生成されたハッシュは、RAM303、磁気ディスク305、光ディスク307などの記憶領域に記憶される。
生成部426は、取得部424が取得したハッシュと生成部425が生成したハッシュとを連結した要約対象から、第1の画像のハッシュを生成する。このとき、生成部426は、第1の画像を分割して得られる複数の領域のうち取得部424が取得した取得した要約情報と生成部425が生成した要約情報とに対応する領域の位置情報に従って、第1の画像のハッシュを生成する。たとえば、生成部426は、取得したMCU1のハッシュ、…、生成したMCUnのハッシュを連結したJPEGフレームハッシュ用対象データ124を設定し、JPEGフレームハッシュ用対象データ124から切出・墨塗データ113のハッシュを生成する。なお、生成されたハッシュは、RAM303、磁気ディスク305、光ディスク307などの記憶領域に記憶される。
判断部427は、第4の領域を特定した場合、第3の領域と同一位置となる第1の領域が存在しており、かつ、第4の領域と同一位置となる第2の領域が存在しているか否かを判断する機能を有する。たとえば、判断部427は、検出部422が検出した切出・墨塗データ113のMCU1のMCU番号とMCUハッシュ保存データ123に格納されている墨塗MCU番号が同一であるかを比較する。さらに、判断部427は、特定部423が特定した切出・墨塗データ113のMCU2のMCU番号とMCUハッシュ保存データ123に格納されている緩衝MCU番号が同一であるかを比較する。なお、比較結果は、RAM303、磁気ディスク305、光ディスク307などの記憶領域に記憶される。
検証部428は、記憶部420−2から読み出した第2の画像のハッシュと生成部426によって生成された第1の画像のハッシュとを比較することにより、第1の画像の原本性を検証する機能を有する。たとえば、検証部428は、原本署名データ431のハッシュと切出・墨塗データ113のハッシュとを比較することで、切出・墨塗データ113の原本性を検証する。具体的に、比較結果が一致していた場合、検証部428は、切出・墨塗データ113が改ざんされていなく、原本性が保証できたという検証結果を出力する。また、比較結果が不一致である場合、切出・墨塗データ113が改ざんされていたという検証結果を出力する。
また、検証部428は、判断部427による判断結果と、第1の画像のハッシュと第2の画像のハッシュとの比較結果と、を用いて、第1の画像の正当性を検証してもよい。たとえば、同一位置でないという判断結果であった場合、検証部428は、切出・墨塗データ113が改ざんされていたという検証結果を得る。また、同一位置であるという判断結果と、一致していたという比較結果となった場合、切出・墨塗データ113が改ざんされていなく、原本性が保証できたという検証結果を出力する。なお、検証結果は、RAM303、磁気ディスク305、光ディスク307などの記憶領域に記憶されてもよいし、切出・墨塗データ113の原本性保証の検証要求を行った検証操作端末203に送信してもよい。
図5は、原本データに対する電子署名の生成例を示す説明図である。初めに、検証装置101は、原本データ111をハッシュ生成単位に分割する。図5では、原本データ111をm個に分割している。ここで、mは1以上の整数である。なお、具体的な分割方法として、検証装置101は、原本データ111を均等に分割してもよいし、分割された1つ1つのサイズが異なってもよい。
次に、検証装置101は、ハッシュ生成単位ごとにハッシュを生成する。続けて、検証装置101は、単位ごとのハッシュを連結したデータを署名対象として、電子署名を生成する。なお、検証装置101は、署名対象に署名ヘッダ501を連結してもよい。生成されたデータは、原本データ111全体に対する原本署名データ431となる。
図6は、切出データの生成例を示す説明図である。初めに、検証装置101は、原本データ111をハッシュ生成単位に分割する。次に、検証装置101は、切出情報601に基づいて、原本データ111から切出データ602を切り出す。切出情報601は、切出開始、切出終了という2つのフィールドを含む。図6の例では、切出情報601が、切出開始:2、切出終了:m−1となっているため、検証装置101は、ハッシュ生成単位2〜ハッシュ生成単位m-1を切り出す。
図7は、切出データの原本性保証の検証例を示す説明図である。初めに、検証装置101は、切出データ602をハッシュ生成単位に分割し、ハッシュ生成単位ごとにハッシュを生成する。具体的に、検証装置101は、ハッシュ生成単位2〜ハッシュ生成単位m-1のハッシュをそれぞれ生成する。次に、検証装置101は、生成したハッシュと記憶してあった原本署名データ431の単位ごとのハッシュとを比較することで、切出データ602の原本性保証を検証する。
図8は、JPEGデータの分離例を示す説明図である。JPEGデータ801は、JPEGフォーマットにて定義されたマーカでセグメントに分離できる。具体的なマーカとしては、たとえば、スタートマーカ、量子化テーブル定義、ハフマンテーブル定義、フレームヘッダ、スキャンヘッダ、エンドマーカ、等が存在する。
スタートマーカは、JPEGデータ801の先頭を示している。量子化テーブル定義は、セグメント内に量子化テーブルが定義されていることを示す。ハフマンテーブル定義は、セグメント内にハフマンテーブルが定義されていることを示す。フレームヘッダは、JPEGファイルの種類や画像サイズ等が定義されていることを示す。スキャンヘッダは画像データの前に付与される。エンドマーカは、JPEGデータ801の末尾を示す。
検証装置101は、エントロピー復号を行い、画像データをMCUごとに分離する。なお、続けて、逆量子化、逆DCT(Discrete Cosine Transform)を行うことで、検証装置101はJPEGデータ801を復号することができるが、MCUごとに分離するにはエントロピー復号の処理までで十分であるため、ここでは、検証装置101はエントロピー復号のみを行う。図8の例では、検証装置101は、画像データをMCU1〜MCUnに分離する。ここで、nは、1以上の整数である。
続けて、検証装置101は、エントロピー復号したJPEGデータ801を、JPEGヘッダ部と、JPEGデータ部に分離する。JPEGデータ部は、MCU1〜MCUnが含まれ、JPEGヘッダ部には、JPEGデータ部以外が含まれる。具体的に、JPEGヘッダ部には、スタートマーカ〜スキャンヘッダ、エンドマーカが含まれる。
図9は、JPEGデータのハッシュ生成例を示す説明図である。初めに、検証装置101は、JPEGヘッダ部と、MCU1〜MCUnごとと、に対してハッシュを生成する。具体的に、検証装置101は、JPEGヘッダ部から生成されたハッシュとしてJPEGヘッダハッシュを生成する。また、検証装置101は、MCU1から生成されたハッシュとして、MCU1一時ハッシュを生成し、MCUnから算出されたハッシュとして、MCUn一時ハッシュを生成する。
次に、検証装置101は、JPEGヘッダハッシュとMCU一時ハッシュとからMCU最終ハッシュを生成する。具体的に、検証装置101は、JPEGヘッダハッシュとMCU1一時ハッシュとから、MCU1最終ハッシュを生成する。このように、検証装置101はMCU一時ハッシュに対してMCU最終ハッシュを生成し、最終的に、検証装置101はJPEGヘッダハッシュとMCUn一時ハッシュとから、MCUn最終ハッシュを生成する。
続けて、検証装置101は、JPEGヘッダハッシュと各MCU最終ハッシュを連結したデータをJPEGフレームハッシュ用対象データ122に設定し、JPEGフレームハッシュ用対象データ122からJPEGフレームハッシュ121を生成する。なお、JPEGフレームハッシュ用対象データ122に関して、ハッシュの連結の順序は、MCU番号に従う。たとえば、検証装置101は、MCU1最終ハッシュ〜MCUn最終ハッシュを、MCU1最終ハッシュ、…、MCUn最終ハッシュ、の順序に連結する。JPEGヘッダハッシュに関しては、MCU1最終ハッシュの前に連結してもよいし、MCUn最終ハッシュの次に連結してもよい。なお、結合の順序に関しては、JPEGフレームハッシュ用対象データ122とJPEGフレームハッシュ用対象データ124で同一であれば、どのように結合してもよい。
図10−1、図10−2は、MotionJPEGに対する電子署名の生成例を示す説明図である。図10−1、図10−2では、図5で説明した原本データ111全体に対する電子署名の生成例と図9で説明したハッシュ生成例とをMotionJPEGに適用して、電子署名を生成する例について説明する。図10−1、図10−2では、原本データ111をAVI(Audio Video Interleave)方式のMotionJPEGであるとし、原本データ111は映像、音声など複数のメディアデータを含むこととする。
検証装置101は、原本データ111となるMotionJPEGについて、フレームごとにハッシュを生成していく。図10−1の例では、フレーム1〜フレームmまで存在するMotionJPEGから、フレーム2についてハッシュ生成を行っている状態を示している。
図10−1で示す(1)番目の処理として、検証装置101は、フレーム2を、JPEGヘッダ部とJPEGデータ部とに分離し、JPEGヘッダ部と、JPEGデータ部内のMCUごとにハッシュを生成する。図10−1の例では、ハッシュの演算方式として、SHA−256を用いてハッシュを生成する。検証装置101は、JPEGヘッダハッシュと、MCU1一時ハッシュ〜MCUn一時ハッシュと、を生成する。
図10−2で示す(2)番目の処理として、検証装置101は、JPEGヘッダハッシュと各MCU一時ハッシュとから、MCU最終ハッシュを生成する。図10−2の例では、検証装置101は、JPEGヘッダハッシュとMCU1一時ハッシュから、SHA−256を用いてMCU1最終ハッシュを生成する。同様に、検証装置101は、MCU2一時ハッシュ〜MCUn一時ハッシュについても、SHA−256を用いてMCU2最終ハッシュ〜MCUn最終ハッシュを生成する。
続けて、図10−2で示す(3)番目の処理として、検証装置101は、生成されたJPEGヘッダハッシュとMCU1最終ハッシュ〜MCUn最終ハッシュとを連結したJPEGフレームハッシュ用対象データ122に設定する。次に、検証装置100はJPEGフレームハッシュ用対象データ122からJPEGフレームハッシュ121を生成する。図10−2の例では、検証装置101は、JPEGヘッダハッシュとMCU1最終ハッシュ〜MCUn最終ハッシュから、SHA−256を用いてJPEGフレーム2ハッシュを生成する。
続けて、検証装置101は、署名ヘッダ501と生成したJPEGフレーム1ハッシュ〜JPEGフレームmハッシュを署名対象として、署名生成処理を実行する。具体的に、検証装置101は、署名対象からPKCS#7(Public−Key Cryptography Standards No7)形式に従った電子署名ファイルを生成する。なお、署名ヘッダ501のフォーマット例については、図11にて後述する。
図11は、署名ヘッダのフォーマット例を示す説明図である。署名ヘッダ501は、署名生成アルゴリズム種別、証明書データ、証明書データサイズ、証明書パスワード、原本データ111、全JPEGデータサイズ、署名JPEGデータ数という7つのフィールドを含む。署名生成アルゴリズム種別フィールドには、電子署名を生成するアルゴリズムが格納される。たとえば、署名生成アルゴリズム種別フィールドには、墨塗署名方式を示す“PIAT”といった文字列、または文字列を示すポインタが格納される。
証明書データフィールドには、証明書データの実体が格納される。なお、証明書データフィールドには、証明書データが格納された記憶領域のアドレスが格納されてもよい。また、証明書データとは、デジタル署名解析用の公開鍵が真正であることを証明するデータである。証明書データサイズフィールドには、証明書データのサイズが格納される。証明書パスワードフィールドには、証明書のパスワードが格納される。
原本データフィールドには、原本データ111となるMotionJPEGが格納される。なお、原本データフィールドには、原本データ111が格納された記憶領域のアドレスが格納されてもよい。全JPEGデータサイズフィールドには、原本データ111に含まれるJPEGデータのサイズが格納される。署名JPEGデータ数フィールドには、署名されたJPEGデータの個数が格納される。署名ヘッダ501以降には、JPEGフレームハッシュが署名JPEGデータ数に格納された個数分格納される。
図12は、墨塗MCUおよび緩衝MCUのハッシュ保存処理例を示す説明図である。図12では、図6で説明した切出データ602の生成例をMotionJPEGに適用し、さらに、墨塗MCU、緩衝MCUについてハッシュ保存処理を行っている。
検証装置101は、切出情報に、墨塗MCUの情報を追加した切出・墨塗MCU情報1201を用いて、MotionJPEGからデータを切り出し、さらに、墨塗MCUに対して墨塗を行う。また、検証装置101は、MCUハッシュ保存データ123内に、切出・墨塗MCU情報1201に緩衝MCUの情報を加えた切出・墨塗MCU・緩衝MCU情報1202を追加する。なお、本実施の形態では切出・墨塗操作端末202が、切出・墨塗作業者の操作によって切出・墨塗MCU情報1201を生成し、検証装置101に切出・墨塗MCU情報1201を送信することとする。
切出・墨塗MCU情報1201は、切出開始フレーム番号と、切出終了フレーム番号と、墨塗MCU番号という3つのフィールドを含む。切出開始フレーム番号フィールドは、原本データ111からの切出を開始するフレーム番号が格納されている。切出終了フレーム番号フィールドは、原本データ111からの切出を終了するフレーム番号が格納されている。切出開始フレーム番号フィールドから切出終了フレーム番号フィールドまで指定されたフレームが、切出データとなる。墨塗MCU番号フィールドは、切出データとなったフレーム内の、墨塗を行うMCU番号が格納されている。
なお、切出・墨塗MCU情報1201は、墨塗を行うMCU番号が、切出データとなったフレームで全て同一であることとしている。墨塗を行うMCU番号がフレームごとで異なる場合、切出・墨塗MCU情報1201は、各フレームに対する墨塗MCU番号を保持する形態となってもよい。
切出・墨塗MCU・緩衝MCU情報1202は、切出・墨塗MCU情報1201が有する3つのフィールドに加え、緩衝MCU番号フィールドを有する。緩衝MCU番号フィールドは、墨塗MCUに基づいて特定された緩衝MCUの番号が格納される。具体的には、墨塗MCU番号フィールドには、墨塗MCU番号の次のMCUの番号が格納される。
たとえば、図12で示す切出・墨塗MCU情報1201には、切出開始フレーム番号:M、切出終了フレーム番号:M+3、墨塗MCU番号:1、x、…、が格納されている。なお、Mは、1以上m以下の整数であり、xは、2以上n以下の整数である。検証装置101は、切出開始フレーム番号フィールドと切出終了フレーム番号フィールドで指定されたフレームM〜フレームM+3までの4つのフレームを切出データとして切り出す。
続けて、検証装置101は、切出データである4つのフレームに対して、墨塗MCU番号フィールドで指定された墨塗MCUと、墨塗MCUから特定された緩衝MCUについて、ハッシュを生成する。具体的に、検証装置101は、墨塗MCUとなるMCU1と緩衝MCUとなるMCU2とのハッシュとして、MCU1一時ハッシュとMCU2一時ハッシュとを生成する。
さらに、検証装置101は、JPEGヘッダハッシュとMCU1一時ハッシュからMCU1最終ハッシュを生成し、JPEGヘッダハッシュとMCU2一時ハッシュからMCU2最終ハッシュを生成する。また、MCUxも墨塗MCUに指定されているため、検証装置101は、墨塗MCUとなるMCUxと緩衝MCUとなるMCUx+1について、MCU最終ハッシュを生成する。なお、x=2である場合、墨塗MCUは、MCU1とMCU2となり、緩衝MCUは、MCU3となる。
フレームMの墨塗MCUと緩衝MCUのMCU最終ハッシュを生成後、検証装置101は、JPEGヘッダハッシュとMCU最終ハッシュとを、ハッシュ保存対象_フレームMに設定し、MCUハッシュ保存データ123に格納する。続けて、検証装置101は、ハッシュ保存対象_フレームM+1〜ハッシュ保存対象_フレームM+3についても、MCUハッシュ保存データ123に格納する。
また、検証装置101は、MCUハッシュ保存データ123に、切出・墨塗MCU・緩衝MCU情報1202を加える。たとえば、図12で示す切出・墨塗MCU・緩衝MCU情報1202では、検証装置101が緩衝MCUに特定されたMCU2とMCUx+1との番号として2と、x+1を緩衝MCU番号フィールドに追加したことを示している。
図13は、切出・墨塗の処理例を示す説明図である。初めに、検証装置101は、切出・墨塗MCU情報1201を参照して、切出フレームを検索する。検索結果としてフレームM〜フレームM+3を得た検証装置101は、MCU分割を実行し、各MCUに対して修正処理を行う。具体的に、検証装置101は、墨塗MCUに指定されたMCUに対して所定の修正処理を行い、また、緩衝MCUに対して墨塗後と墨塗前で同一の画素値となるように差分値を変更する。次に、検証装置101は、修正処理が行われたMotionJPEGを、切出・墨塗データ113として出力する。墨塗MCUへの墨塗処理と緩衝MCUへの加工処理の算出例については、図14にて後述する。
図14は、墨塗MCU、緩衝MCUの画素値の算出例を示す説明図である。初めに、図14の(A)では、MCU1〜MCU6のうち、MCU2〜MCU4を墨塗MCUであるとし、MCU5を緩衝MCUであることを示している。また、MCU内のブロックについては、図1と同様であるため、説明を省略する。
次に、図14の(B)では、各MCUの墨塗前と墨塗後の画素値を示している。具体的に、図14の(B)では、MCUの画素値として、輝度成分について示しており、墨塗した場合の輝度成分が0であることとしている。
輝度DC(Direct−Current)成分値は、対応ブロックの画素値のうち輝度についてDCT変換し、量子化して得られた周波数成分のうち、ブロック内の左上の値である。また、輝度DC差分値は、1つ前のブロックからの周波数成分の差分値である。たとえば、ブロック2の輝度DC差分値は、ブロック1の輝度成分値からの差分値であり、ブロック5の輝度DC差分値は、ブロック4の輝度成分値からの差分値である。また、輝度AC(Alternating Current)成分値は、対応ブロックの画素値のうち輝度についてDCT変換し、量子化して得られた周波数成分のうち、ブロック内の左上以外の値である。
また、JPEGは、先頭のMCUに関しては、成分値を有し、先頭以外のMCUに関しては、差分値を有している。検証装置101は、MCU分割時、エントロピー復号を行うことで、各MCUのDC成分値を算出し、保持しておくことを前提としている。
初めに、MCU1の輝度成分について、MCU1は墨塗MCUと緩衝MCUのいずれでもないため、墨塗前と墨塗後で成分値、差分値が変化しない。次に、MCU2の輝度成分について、MCU2は墨塗MCUであるため、検証装置101は、ブロック5の輝度DC成分値を0に変更し、符号1401で示す輝度DC差分値を下記(1)式で算出した値に変更する。
墨塗MCU内のブロックの輝度DC差分値=墨塗MCU内のブロックの輝度DC成分値−前のブロックの輝度DC成分値 …(1)
(1)式は、前のブロックの輝度DC成分値との和が墨塗を示す黒になるような式である。たとえば、ブロック5の輝度DC差分値は、(1)式に代入すると、以下のようになる。
ブロック5の輝度DC差分値=ブロック5の輝度DC成分値−ブロック4の輝度DC成分値
⇔ブロック5の輝度DC差分値=0−100=−100
また、検証装置101は、符号1402で示す墨塗MCUの輝度AC成分値を、墨塗後の輝度DC成分値で指定した黒を示す値である0に変更する。また、MCU5の輝度成分について、MCU5は緩衝MCUであるため、検証装置101は、符号1403で示す輝度DC差分値を下記(2)式で算出した値に変更する。
緩衝MCU内のブロックの輝度DC差分値=緩衝MCU内のブロックの輝度DC成分値−前のブロックの輝度DC成分値 …(2)
(2)式は、(1)式の墨塗MCUを、緩衝MCUに置き換えた式である。たとえば、ブロック17の輝度DC差分値は、(2)式に代入すると、以下のようになる。
ブロック17の輝度DC差分値=ブロック17の輝度DC成分値−ブロック16の輝度DC成分値
⇔ブロック17の輝度DC差分値=75−0=75
図14では、輝度成分値について説明したが、青色色差成分値、赤色色差成分値についても、検証装置101は、同様の算出方法を用いる。
図15は、切出・墨塗データの検証例を示す説明図である。検証装置101は、切出・墨塗データ113の検証処理の(1)番目の処理として、切出・墨塗データ113となるMotionJPEGから、先頭のフレームを取得し、MCUごとにハッシュ生成を行う。このとき、検証装置101は、各MCUに対して、切出・墨塗MCU・緩衝MCU情報1202を参照して、対象のMCUが墨塗MCU、または緩衝MCUである場合、MCUハッシュ保存データ123に格納されたMCU最終ハッシュを取得する。
具体的に、図15で示すフレームMのMCU1、MCU2は、それぞれ墨塗MCU、緩衝MCUであるため、検証装置101は、MCUハッシュ保存データ123から、MCU1最終ハッシュとMCU2最終ハッシュを取得する。また、MCUnー1は、墨塗MCU、緩衝MCUのいずれでもないため、検証装置101は、取得したフレーム内のMCUn-1から、MCUn-1一時ハッシュを生成する。続けて、検証装置101は、MCUハッシュ保存データ123のJPEGヘッダハッシュと、生成したMCUn-1一時ハッシュとから、MCUn-1最終ハッシュを生成する。
各MCU最終ハッシュを選択、または生成し終えた検証装置101は、JPEGヘッダハッシュと各MCU最終ハッシュを連結したデータを、JPEGフレームハッシュ用対象データ124に設定する。続けて、検証装置101は、JPEGフレームハッシュ用対象データ124に対してハッシュを算出し、JPEGフレームMハッシュを生成する。
次に、墨塗JPEGの検証処理の(2)番目の処理として、検証装置101は、原本署名データ431に格納しているJPEGフレームMハッシュと、生成されたJPEGフレームMハッシュを比較して、改ざんされていないか否かを検証する。
なお、対象のMCUが墨塗MCU、または緩衝MCUであるかの判断方法として、検証装置101は、切出・墨塗MCU・緩衝MCU情報1202を参照して判断している。他の判断方法として、検証装置101は、たとえば、切出・墨塗データ113内の対象のMCUの画素値に基づいて判断してもよい。具体的には、対象のMCUの画素値が、墨塗により全て黒を示す0である場合、検証装置101は、対象のMCUを墨塗MCUとして検出し、対象のMCUの次のMCUを、緩衝MCUとして特定してもよい。
また、切出・墨塗MCU・緩衝MCU情報1202に格納された墨塗MCUおよび緩衝MCUと、切出・墨塗データ113内の対象のMCUの画素値にて検出された墨塗MCUおよび検出された緩衝MCUが一致するか否かを判断してもよい。一致しないと判断された場合、検証装置101は、切出・墨塗データ113が改ざんされていることを出力する。
続けて、図16〜図20−2にて、検証装置101が実行する署名生成処理、切出・墨塗処理、MCUハッシュ生成処理、MCU修正処理、切出・墨塗データの検証処理のフローチャートについて説明する。MCUハッシュ生成処理とMCU修正処理は、切出・墨塗処理から呼ばれる。
署名生成処理は、たとえば、撮影装置201から原本データ111となるMotionJPEGを受け付けた場合に実行される。切出・墨塗処理は、切出・墨塗操作端末202から切出・墨塗MCU情報1201を受け付けた場合に実行される。なお、切出・墨塗処理の準備処理として、検証装置101は原本データ111を切出・墨塗操作端末202に送信し、切出・墨塗操作端末202は原本データ111を表示して、切出位置や墨塗位置を指示しやすくしてもよい。切出・墨塗データの検証処理は、検証操作端末203から切出・墨塗データ113を受け付けた場合に実行される。
図16は、署名生成処理の一例を示すフローチャートである。検証装置101は、原本データ111となるMotionJPEGを読み出す(ステップS1601)。次に、検証装置101は、MotionJPEGから先頭フレームを選択し(ステップS1602)、選択したフレームをJPEGヘッダ部、JPEGデータ部に分離する(ステップS1603)。続けて、検証装置101は、JPEGデータ部をエントロピー復号する(ステップS1604)。なお、検証装置101は、エントロピー復号により、各MCUのDC成分値を算出し、保持しておく。
次に、検証装置101は、JPEGヘッダ部から、JPEGヘッダハッシュを生成する(ステップS1605)。続けて、検証装置101は、先頭のMCUを選択し(ステップS1606)、選択したMCUから、MCU一時ハッシュを生成する(ステップS1607)。次に、検証装置101は、JPEGヘッダハッシュとMCU一時ハッシュとから、MCU最終ハッシュを生成する(ステップS1608)。
続けて、検証装置101は、全てのMCUについて、MCU最終ハッシュを生成したか否かを判断する(ステップS1609)。まだMCU最終ハッシュを生成していないMCUがある場合(ステップS1609:No)、検証装置101は、次のMCUを選択し(ステップS1610)、ステップS1607の処理に移行する。
また、全てのMCU最終ハッシュを生成した場合(ステップS1609:Yes)、検証装置101は、JPEGヘッダハッシュと各MCU最終ハッシュを連結したJPEGフレームハッシュ用対象データ122から、JPEGフレームハッシュを生成する(ステップS1611)。続けて、検証装置101は、全てのフレームについて、JPEGフレームハッシュを生成したか否かを判断する(ステップS1612)。まだ全てのフレームについてJPEGフレームハッシュを生成していない場合(ステップS1612:No)、検証装置101は、次のフレームを選択し(ステップS1613)、ステップS1603の処理に移行する。
全てのフレームについてJPEGフレームハッシュを生成した場合(ステップS1612:Yes)、検証装置101は、署名ヘッダ501と各JPEGフレームハッシュから、原本署名データ431を生成し(ステップS1614)、署名生成処理を終了する。
図17−1、図17−2は、切出・墨塗処理の一例を示すフローチャートである。初めに、検証装置101は、切出・墨塗情報を読み出す(ステップS1701)。次に、検証装置101は、指定された墨塗MCUから、緩衝MCUを特定する(ステップS1702)。続けて、検証装置101は、原本データ111となるMotionJPEGを読み出し(ステップS1703)、原本データ111となるMotionJPEGから先頭フレームを選択する(ステップS1704)。
次に、検証装置101は、選択したフレームが切出データとなるか否かを判断する(ステップS1705)。選択したフレームが切出データか否かの判断方法としては、選択したフレームのフレーム番号が、切出・墨塗MCU情報1201の切出開始フレーム番号以上であり、かつ切出終了フレーム番号以下である場合に、選択したフレームが切出データであると判断する。切出データである場合(ステップS1705:Yes)、検証装置101は、選択したフレームをJPEGヘッダ部、JPEGデータ部に分離し(ステップS1706)、JPEGデータ部をエントロピー復号する(ステップS1707)。なお、検証装置101は、エントロピー復号により、各MCUのDC成分値を算出し、保持しておく。
続けて、検証装置101は、先頭のMCUを選択し(ステップS1708)、選択したMCUに対して、MCUハッシュ生成処理を実行する(ステップS1709)。MCUハッシュ生成処理の詳細については、図18にて後述する。MCUハッシュ生成処理の実行後、検証装置101は、全てのMCUについてMCUハッシュ生成処理を実行したか否かを判断する(ステップS1710)。まだMCUハッシュ生成処理を実行していないMCUがある場合(ステップS1710:No)、検証装置101は、次のMCUを選択し(ステップS1711)、ステップS1709の処理に移行する。
全てのMCUについてMCUハッシュ生成処理を実行した場合(ステップS1710:Yes)、検証装置101は、全てのフレームについて切出フレームか否か判断したか否かを判断する(ステップS1712)。まだ切出フレームか否か判断していないフレームがある場合(ステップS1712:No)、または切出データでない場合(ステップS1705:No)、検証装置101は、次のフレームを選択し(ステップS1713)、ステップS1705の処理に移行する。全てのフレームについて切出フレームか否か判断した場合(ステップS1712:Yes)、検証装置101は、図17−2で示すステップS1714の処理に移行する。
次に、図17−2にて、ステップS1712:Yesを通った場合、検証装置101は、原本データ111となるMotionJPEGから先頭フレームを選択し(ステップS1714)、選択したフレームが切出データとなるか否かを判断する(ステップS1715)。切出データである場合(ステップS1715:Yes)、検証装置101は、選択したフレームをJPEGヘッダ部、JPEGデータ部に分離し(ステップS1716)、JPEGデータ部をエントロピー復号する(ステップS1717)。なお、検証装置101は、エントロピー復号により、各MCUのDC成分値を算出し、保持しておく。
次に、検証装置101は、先頭のMCUを選択し(ステップS1718)、選択したMCUが墨塗MCUまたは緩衝MCUか否かを判断する(ステップS1719)。墨塗MCUまたは緩衝MCUである場合(ステップS1719:Yes)、検証装置101は、MCU修正処理を実行する(ステップS1720)。なお、MCU修正処理の詳細は、図19にて後述する。MCU修正処理の処理後、または墨塗MCUまたは緩衝MCUでない場合(ステップS1719:No)、検証装置101は、全てのMCUについて処理したか否かを判断する(ステップS1721)。なお、ステップS1721で示す処理とは、ステップS1719の処理のことである。
まだ処理していないMCUがある場合(ステップS1721:No)、検証装置101は、次のMCUを選択し(ステップS1722)、ステップS1719の処理に移行する。全てのMCUについて処理した場合(ステップS1721:Yes)、検証装置101は、選択したフレームを切出・墨塗データ113として出力する(ステップS1723)。続けて、検証装置101は、全てのフレームについて切出データか否か判断したか否かを判断する(ステップS1724)。
まだ切出データか否か判断していないフレームがある場合(ステップS1724:No)、または切出データでない場合(ステップS1715:No)、検証装置101は、次のフレームを選択し(ステップS1725)、ステップS1715の処理に移行する。全てのフレームについて切出データか否か判断した場合(ステップS1724:Yes)、検証装置101は、切出・墨塗処理を終了する。
なお、墨塗MCUの位置情報に関して、検証装置101は、たとえば、ステップS1712:Yesとなった場合、切出・墨塗MCU情報1201を、MCUハッシュ保存データ123に追加してもよい。または、検証装置101は、MCUハッシュ生成処理の内部にて処理を行ってもよい。後者の例については、図18にて説明する。
図18は、MCUハッシュ生成処理の一例を示すフローチャートである。検証装置101は、選択したMCUが墨塗MCU、または緩衝MCUか否かを判断する(ステップS1801)。墨塗MCU、または緩衝MCUのいずれでもない場合(ステップS1801:No)、検証装置101は、MCUハッシュ生成処理を終了する。
選択したMCUが墨塗MCU、または緩衝MCUのいずれかである場合(ステップS1801:Yes)、検証装置101は、JPEGヘッダ部から、JPEGヘッダハッシュを生成し(ステップS1802)、選択したMCUから、MCU一時ハッシュを生成する(ステップS1803)。次に、検証装置101は、JPEGヘッダハッシュとMCU一時ハッシュとから、MCU最終ハッシュを生成する(ステップS1804)。続けて、検証装置101は、MCU最終ハッシュをMCUハッシュ保存データ123に格納する(ステップS1805)。
さらに、検証装置101は、MCUハッシュ保存データ123内の切出・墨塗MCU・緩衝MCU情報1202に、選択したMCU番号を追加し(ステップS1806)、MCUハッシュ生成処理を終了する。なお、検証装置101は、選択したMCUが墨塗MCUであれば、墨塗MCU番号フィールドに選択したMCUの番号を追加し、選択したMCUが緩衝MCUであれば、緩衝MCU番号フィールドに選択したMCUの番号を追加する。
なお、ステップS1802の処理で示したJPEGヘッダハッシュの生成は、MCUによらず常に同一値が生成されるため、検証装置101は、ステップS1802の処理を、ステップS1716、またはステップS1717の次に行っておいてもよい。
また、墨塗MCUの位置情報に関して、検証装置101は、たとえば、ステップS1804の処理後、MCU最終ハッシュの前または後ろに、MCU番号を追加する処理を加えてもよい。
図19は、MCU修正処理の一例を示すフローチャートである。検証装置101は、選択したMCUの種別を確認する(ステップS1901)。墨塗MCUである場合(ステップS1901:墨塗MCU)、検証装置101は、選択したMCUに対して、所定の修正処理を実行する(ステップS1902)。なお、所定の修正処理は、たとえば、墨塗処理であってもよいし、モザイク処理であってもよいし、ぼかし処理であってもよい。
また、ステップS1902の処理は、切出・墨塗操作端末202が行ってもよい。この場合、ステップS1901:墨塗MCUとなった後、検証装置101は、修正許可通知を切出・墨塗操作端末202に送信し、切出・墨塗操作端末202は、選択したMCUに対して、所定の修正処理を実行する。処理の終了後、切出・墨塗操作端末202は、編集後の画素値を、検証装置101に送信する。修正処理の実行後、検証装置101は、選択したMCU内のブロックのDC差分値を、選択したMCU内のブロックのDC成分値−前のブロックのDC成分値に変更する(ステップS1903)。変更後、検証装置101は、MCU修正処理を終了する。
緩衝MCUである場合(ステップS1901:緩衝MCU)、検証装置101は、選択したMCU内のブロックのDC差分値を、選択したMCU内のブロックのDC成分値−前のブロックのDC成分値に変更し(ステップS1904)、検証装置101は、MCU修正処理を終了する。
図20−1、図20−2、図20−3は、切出・墨塗データの検証処理の一例を示すフローチャートである。初めに、図20−1にて、検証装置101は、原本署名データ431を読み出す(ステップS2001)。続けて、検証装置101は、MCUハッシュ保存データ123を読み出す(ステップS2002)。次に、検証装置101は、検証対象である、切出・墨塗データ113となるMotionJPEGを受け付ける(ステップS2003)。
続けて、検証装置101は、切出・墨塗データ113となるMotionJPEGから先頭フレームを選択し(ステップS2004)、選択したフレームをJPEGヘッダ部、JPEGデータ部に分離する(ステップS2005)。次に、検証装置101は、JPEGデータ部をエントロピー復号する(ステップS2006)。なお、検証装置101は、エントロピー復号により、各MCUのDC成分値を算出し、保持しておく。続けて、検証装置101は、MCUハッシュ保存データから、JPEGヘッダハッシュを取り出す(ステップS2007)。次に、検証装置101は、先頭のMCUを選択し(ステップS2008)、図20−2で示すステップS2009の処理に移行する。
次に、図20−2で示すように、検証装置101は、選択したフレームの選択したMCUの画素値が特定の画素値か否かを判断する(ステップS2009)。特定の画素値である場合(ステップS2009:Yes)、検証装置101は、選択したMCUを墨塗MCUとして検出する(ステップS2010)。続けて、検証装置101は、切出・墨塗MCU・緩衝MCU情報1202の墨塗MCU番号フィールドから、未取得の番号のうち最も小さい番号を取得する(ステップS2011)。ステップS2011の処理について、墨塗MCU番号フィールドが図12で示す状態であれば、検証装置101は、1回目の処理では1を取得し、2回目の処理では、1は取得済みであるためxを取得する。
特定の画素値でない場合(ステップS2009:No)、検証装置101は、一つ前のMCUが墨塗MCUとして検出されたか否かを判断する(ステップS2012)。一つ前のMCUが墨塗MCUとして検出された場合(ステップS2012:Yes)、検証装置101は、選択したMCUを緩衝MCUとして特定する(ステップS2013)。続けて、検証装置101は、切出・墨塗MCU・緩衝MCU情報1202の緩衝MCU番号フィールドから、未取得の番号のうち最も小さい番号を取得する(ステップS2014)。ステップS2014の処理について、緩衝MCU番号フィールドが図12で示す状態であれば、検証装置101は、1回目の処理では2を取得し、2回目の処理では、2は取得済みであるためx+1を取得する。
ステップS2011、またはステップS2014の処理終了後、検証装置101は、取得した番号が、選択したMCUの番号と一致するか否かを判断する(ステップS2015)。なお、ステップS2011、ステップS2014にて、未取得の番号が存在しない場合、検証装置101は、ステップS2015:Noの処理を実行する。取得した番号が選択したMCUの番号と一致する場合(ステップS2015:Yes)、検証装置101は、MCUハッシュ保存データから、選択したMCUに対応するMCU最終ハッシュを取得する(ステップS2016)。
一つ前のMCUが墨塗MCUとして検出されていない場合(ステップS2012:No)、検証装置101は、選択したMCUから、MCU一時ハッシュを生成する(ステップS2017)。続けて、検証装置101は、取り出したJPEGヘッダハッシュとMCU一時ハッシュから、MCU最終ハッシュを生成する(ステップS2018)。ステップS2016、またはステップS2018の処理終了後、検証装置101は、全てのMCUについて判断したか否かを判断する(ステップS2019)。なお、ステップS2019で示す処理とは、ステップS2009の処理のことである。まだ処理していないMCUがある場合(ステップS2019:No)、検証装置101は、次のMCUを選択し(ステップS2020)、ステップS2009の処理に移行する。
全てのMCUについて処理を行った場合(ステップS2019:Yes)、検証装置101は、切出・墨塗MCU・緩衝MCU情報1202の墨塗MCU番号フィールドおよび緩衝MCU番号フィールドに、未処理のMCU番号が存在するか否かを判断する(ステップS2021)。取得した番号と選択したMCUの番号が一致しない場合(ステップS2015:No)、または未処理のMCU番号がある場合(ステップS2021:Yes)、検証装置101は、切出・墨塗データが改ざんされていることを出力する(ステップS2022)。出力後、検証装置101は、検証処理を終了する。また、未処理のMCU番号がない場合(ステップS2021:No)、検証装置101は、図20−3で示すステップS2023の処理に移行する。
なお、ステップS2015:Noとなる場合としては、たとえば、切出・墨塗データ113の各MCUのうち、悪意のある第三者によって新たに墨塗されたMCUがある場合である。この場合、検証装置101は、ステップS2010の処理では、新たに墨塗されたMCUを検出するが、墨塗MCU番号フィールドには、新たに墨塗されたMCUの番号は格納されていないため、ステップS2015:Noを実行することになる。
またステップS2015:Noとなる場合としては、切出・墨塗データ113の各MCUのうち、悪意のある第三者によって墨塗MCUが改ざんされた場合である。具体的に図1の例で示すと、切出・墨塗データ113のMCU1が、たとえば他の人物に差し替えられた場合である。選択したMCUがMCU1である時点では、検証装置101は、ステップS2012:Noを実行する。次のMCUを選択していった結果、選択したMCUが墨塗となった場合、検証装置101は、ステップS2011にて墨塗MCU番号として1を取得し、番号が不一致となるため、ステップS2015:Noを実行することになる。
なお、選択したMCUが墨塗とならずに、ステップS2019:Yesを実行した場合でも、墨塗MCU番号フィールドに未取得の番号が存在することになるため、検証装置101は、ステップS2021:Yesとなるため、改ざんを検出することができる。
また、切出・墨塗データ113の各MCUのうち、悪意のある第三者によって緩衝MCUが墨塗されても、検証装置101は、ステップS2015:Noを実行することになる。具体的に、緩衝MCUが墨塗された場合、検証装置101は、ステップS2009:Yesを実行することになるが、墨塗MCU番号フィールドには、緩衝MCUの番号は格納されていないため、ステップS2015:Noを実行することになる。
最後に、図20−3で示すように、未処理のMCU番号がない場合(ステップS2021:No)、検証装置101は、JPEGヘッダハッシュと各MCU最終ハッシュを連結したJPEGフレームハッシュ用対象データ124から、JPEGフレームハッシュを生成する(ステップS2023)。次に、検証装置101は、生成したJPEGフレームハッシュと原本署名データ内の選択したフレームに対応するJPEGフレームハッシュとを比較する(ステップS2024)。続けて、検証装置101は、比較結果が一致を示したか否かを判断する(ステップS2025)。
一致を示した場合(ステップS2025:Yes)、検証装置101は、切出・墨塗データ113の全てのフレームについて比較したか否かを判断する(ステップS2026)。なお、ステップS2026で示す比較とは、ステップS2024の処理のことである。まだ比較していないフレームがある場合(ステップS2026:No)、検証装置101は、次のフレームを選択し(ステップS2027)、ステップS2005の処理に移行する。全てのフレームについて比較した場合(ステップS2026:Yes)、検証装置101は、切出・墨塗データ113が改ざんされていないという原本性を保証できたことを出力し(ステップS2028)、検証処理を終了する。一致を示していない場合(ステップS2025:No)、検証装置101は、切出・墨塗データ113が改ざんされていることを出力し(ステップS2029)、検証処理を終了する。
以上説明したように、検証方法、検証装置、および検証プログラムによれば、検証対象画像内の墨塗MCUと墨塗MCUから特定された緩衝MCUについて、原本画像の同位置となるMCUの修正前のハッシュを用いて検証対象画像のハッシュを生成して検証する。
これにより、検証装置は、検証墨塗領域が複数ある検証対象画像のハッシュと、原本画像のハッシュと、の一度の比較にて検証を行うことができ、検証を迅速に行うことができる。また、検証装置は、原本画像や検証対象画像を分割した各領域のハッシュを連結した要約対象に対して、ハッシュ関数を実行して原本画像や検証対象画像のハッシュを生成して比較する。なお、検証装置は、各領域のハッシュを連結した要約対象を比較することで検証することも可能である。この場合、各領域のハッシュを連結した要約対象と要約対象から生成されたハッシュでは、後者のデータサイズの方が小さく、比較にかかる時間が短縮するため、検証装置は、検証を迅速に行うことができる。
また、検証装置は、検証対象画像を分割した領域のうち、特定の画素値となっているMCUを墨塗MCUとし、墨塗MCUから特定したMCUを緩衝MCUとして、墨塗MCUの領域と特定した緩衝MCUを、原本のハッシュを用いるMCUとしてもよい。これにより、検証装置は、悪意のある第三者によって検証対象画像の墨塗MCUが改ざんされた場合、原本のハッシュを用いずに検証対象の画像のMCUから生成されるハッシュを用いるため、原本のハッシュと一致しなくなり、改ざんを検出する。このように、検証装置は、墨塗MCUが改ざんされている場合でも改ざんを検出でき、改ざんの有無と検証結果が一致しているため、原本性の検証精度を向上できる。ここで、検証精度とは、改ざんの有無と検証結果との一致の割合を示している。
また、検証装置は、特定の画素値となっていた墨塗MCUと同一位置に、記憶領域に記憶されている墨塗MCUが存在し、かつ、墨塗MCUから特定した緩衝MCUと同一位置に、記憶領域に記憶されている緩衝MCUが存在するか判断してもよい。これにより、検証装置は、悪意のある第三者によって墨塗MCUおよび緩衝MCU以外が改ざんされた場合、各MCUのハッシュから検証対象画像のハッシュを生成せずとも改ざんしていることが判断できるため、検証を迅速に行うことができる。ハッシュ生成処理は処理量が多いため、ハッシュ生成を行わずに検証結果が得られた場合、検証装置は、検証結果をより速く検証者に提供することができる。
また、検証装置は、マルチメディアデータに対し原本性が保証できるようになり、撮影装置で撮影された監視映像など証拠性が重要視される映像について、重要シーンを切出加工したストリームデータについて証拠性が保持されていることが証明できる。また、検証装置は、JPEGヘッダ部も含めてハッシュを生成しているため、JPEGヘッダ部に改ざんがあった場合、改ざんを検出することができる。
なお、本実施の形態で説明した検証方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本検証プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本検証プログラムは、インターネット等のネットワークを介して配布してもよい。