SHA-256フィンガープリントで編集された写真を見抜く

SHA-256をわかりやすく解説:一致が証明すること、不一致の意味、WhatsAppやMessengerで送った写真が一致しない理由、ファイルの照合方法。

画像ファイルが最初に記録されてから変更されたかどうかを見分ける最も確実な方法は、2つのファイルのSHA-256フィンガープリントを比べることです。一致すればバイト単位で同一、一致しなければファイルは変わっています。ただし「変わった」ことは「偽造された」ことと同じではありません。WhatsAppやMessengerで写真を送るだけで一致しなくなります。このガイドでは、SHA-256をわかりやすく解説し、それが証明すること・しないこと、実務で通用する手順を紹介します。

注意:本記事は一般的な情報であり、法的助言ではありません。個々のケースで証拠をどう評価するかは、関係機関が判断します。

SHA-256とは(わかりやすく)

SHA-256は、ファイルの指紋を作る機械だと考えてください。3 MBの写真でも2 GBの動画でも、どんなファイルを入れても、9f2c1a… のように始まる64文字の決まった長さの文字列が返ってきます。このアルゴリズムは米国NISTの規格FIPS 180-4で定められており、銀行からソフトウェアのダウンロードまであらゆる場面で使われています。

重要な性質は3つです:

  1. 同じファイルなら、同じフィンガープリント。何回計算しても、どのコンピューターで計算しても、同じ文字列になります。
  2. わずかな変更で、まったく違う結果。1画素を変えたり、メタデータを1行削除したりするだけで、新しいフィンガープリントは古いものとまったく似ていないものになります。「ほぼ一致」はありません。
  3. 一方向。フィンガープリントから写真を復元することはできず、同じフィンガープリントを持つ別のファイルを意図的に作ることも事実上できません。

SHA-256の図:アップロード時に元ファイルのフィンガープリントを記録。同じファイルをドキュメントとして送れば同じハッシュになり、チャットアプリで再送したコピーは一致しない

つまり、写真が届いたときに64文字を保存しておけば、画像そのものを保管したり再送したりしなくても、後からどのファイルがまさにその写真なのかを確認できます。

一致が証明すること、不一致が示すこと

結果 証明すること 証明しないこと
一致 手元のファイルが、フィンガープリントを保存したファイルとバイト単位で同一であること 場面が本物であること、撮影前に何も仕込まれていないこと
不一致 ファイルが何らかの形で元のファイルと異なること 誰かが意図的に内容を改変したこと

よく間違えるのが2行目です。ファイルが元のものと変わる理由には、無害なものがたくさんあります:

  • チャットアプリは画像を再圧縮します。WhatsApp、Messengerをはじめ多くのアプリは、「写真」として送った画像を縮小・再圧縮します。
  • SNSは投稿時に再圧縮し、メタデータを削除します。
  • ファイルを送る代わりにスクリーンショットを送る。
  • ギャラリーアプリでわずかでも回転、切り取り、明るさの調整をする。
  • 形式を変換する。たとえばHEICからJPEGへの変換や、ビューアーからの「名前を付けて保存」。

ですから、不一致を見たときに問うべきは「これは偽物か?」ではなく、「このファイルはどの経路を通ってきたか?」です。

WhatsAppやMessengerで送った写真が一致しない理由

ストレージと帯域を節約するため、メッセージアプリは通常JPEG画像を再エンコードします。解像度を下げ、圧縮を強め、メタデータを減らします。見た目は同じでも内部のバイトはまったく異なるので、SHA-256も異なります。

送り方 通常、元のファイルが保たれるか SHA-256の照合
チャットアプリで「写真」として 保たれない、再圧縮される ほぼ確実に不一致
チャットアプリで「ファイル」やドキュメントとして 通常は保たれる 通常は一致
メールの添付ファイル 通常は保たれる 通常は一致
Google DriveやOneDriveからダウンロードした元ファイル 保たれる 一致
スクリーンショット 保たれない 不一致

写真に印字されたQRコードは圧縮後も通常は読み取れるので、フィンガープリントの照合に失敗しても、受け取った人は撮影時刻とエリアを確認できます。QRコードによる写真の検証をご覧ください。

実践的な照合の手順

写真を送る側(施工会社、技術者、現場スタッフ)

  1. 日々の簡単な報告でチャットで写真を送るのは問題ありません。
  2. 重要な写真(検査、引き渡し、保険請求)は、ファイルとして、メールで、または共有フォルダで元のファイルも送ります。
  3. 元のファイルを送る前に、切り取り、回転、編集をしないでください。
  4. 受け取った人がすぐに照会できるよう、メッセージにSnapIDコードを書きます。

誰でも検証できる:すべての写真にSnapIDコードとQRコードがあり、受け取った人はアカウントなしで読み取って時刻、エリア、整合性フラグを確認し、SHA-256でファイルを照合できる

写真を受け取る側(施主、顧客、管理者、保険会社)

  1. QRコードを読み取るか、写真のコードから検証ページを開きます。
  2. 撮影時刻、エリア、整合性フラグを確認します。
  3. 手元のファイルと照合をクリックし、受け取った元のファイルを選びます。
  4. 一致:ファイルは無傷です。不一致:圧縮される経路を通ったかどうかを確認し、元のファイルを求めます。
  5. 圧縮されない経路で送られた元のファイルでも一致しない場合は、送り主に確認し、検証ページのサムネイルをよく見てください。

自分でSHA-256を計算する

自分での確認や記録の保管には、標準のツールで十分です:

  • Windows(コマンドプロンプト):certutil -hashfile photo.jpg SHA256
  • macOS(ターミナル):shasum -a 256 photo.jpg
  • Linux:sha256sum photo.jpg

出力を送り主から受け取った文字列と比べます。1文字でも違えば、2つは別のファイルです。

SnapID MarkでのSHA-256の使い方

SnapID Markの写真がアップロードされると、サーバーは元の写真とスタンプ付き画像の両方のSHA-256フィンガープリントを保存します。公開検証ページには、信頼できる撮影時刻、丸めたエリア、整合性フラグと並んでフィンガープリントが表示されます。「手元のファイルと照合」ボタンは受け取った人のブラウザ内でSHA-256を計算するので写真はアップロードされず、保存された値と照合します。ページではチャットアプリによる再圧縮のケースも説明しているので、受け取った人が早合点することはありません。

SnapIDコードの公開検証ページ:有効なSnapID、撮影日時、約1kmに丸めたエリアと地図リンク、ワークスペース、アカウント、工種

これで3つの層がそろいます。信頼できる時刻がいつかを示し(信頼できる時刻とスマートフォンの時刻の違いをご覧ください)、SnapIDコードとQRコードが独立した記録につながり、SHA-256がファイルがまだ無傷かどうかを示します。詳しくはセキュリティをご覧いただくか、検証のデモを試してください。

これは技術的な確認のためのツールであり、電子署名や認定されたタイムスタンプではないことを覚えておいてください。その側面はベトナムでタイムスタンプ付き写真は証拠になるかで詳しく取り上げています。

受け取った人が自分で完全性を確認できる写真を送る必要があるなら、SnapID Markをダウンロードして、元のファイルとチャットで送ったコピーを照合してみてください。

よくある質問

SHA-256フィンガープリントから写真の内容がわかりますか?

わかりません。64文字から画像を復元することはできないので、フィンガープリントを公開しても画像が明らかになることはありません。

チャットアプリで送った写真が一致しません。偽物ですか?

いいえ。チャットアプリは「写真」として送った画像を再圧縮するので、見た目は同じでもファイルが変わります。ファイルとして、またはメールで送った元の写真を求めて照合してください。

検証ページで照合すると、写真がアップロードされますか?

いいえ。ブラウザが端末上でフィンガープリントを計算し、画像ファイルが端末の外に出ることはありません。

一致すれば写真は確実に本物ですか?

一致が証明するのは、ファイルがアップロード時に保存されたものと同一であることだけです。場面が仕込まれていないことは証明しません。時刻、エリア、整合性フラグもあわせて確認してください。

写真からエクスポートしたPDFで照合できますか?

PDFは照合に使わないでください。中の画像は別のファイルだからです。元のJPEGで照合してください。