web-dev-qa-db-ja.com

jpgまたはgif写真内の情報を非表示にするにはどうすればよいですか?

画像を破壊せずにjpgやgifなどの写真ファイル内に情報を書き込むにはどうすればよいですか?そしてもちろん、写真には表示せずに、全体のアイデアは誰にも検出されずに写真のファイルに情報を送信することです(ある程度のセキュリティ/プライバシーを提供するため)。

22
M. A. Kishawy

一部の情報を画像メタデータに保存できます。実際、これがデジタルカメラが写真を「タグ付け」する方法です(カメラモデル、日付と時刻、GPS座標など)。

このデータ形式は [〜#〜] exif [〜#〜] (交換可能な画像ファイル形式)と呼ばれます。プログラミング言語での使用例はたくさんあります。 こちら Javaの例。

ユーザーがこのデータを読み取れないようにする場合は、何らかの方法で暗号化できますが、ユーザーはいつでも(Photoshopで開いて[名前を付けて保存]を使用するなどして)画像からデータを削除できます。

3
RaYell

GifとZip(非表示にする情報)を1つのファイルに連結できます。 GIFはファイルの最初から読み取られ、zipはファイルの最後から読み取られます。

Linuxでそのようなファイルを作成するには:

$ cat file1.gif >> outfile.gif
$ cat file2.Zip >> outfile.gif

結果のファイルは、file1.gifとfile2.Zipのサイズが一緒になり、任意のgifビューアおよびZipファイルハンドラで開くことができる必要があります。

47
Maik

いろいろな方法があると思います。ここに一つあります:

写真の場合、色の小さな変化は肉眼では気付かれないことが多く、または気づいたとしても、画像の品質の欠陥と間違えられる可能性があります。

簡単な例として、グレースケールのGIF画像で、パレットが白から黒の順に配置され、その間にグレーの滑らかな範囲があるとします。グラフィックファイル形式についてどれだけ知っているかはわかりませんが、GIFの場合、ピクセルごとに1バイトがあり、各バイト値は特定の色にマッピングされています。したがって、この場合、パレット#0 = RGB(0,0,0)、パレット#1 = RGB(1,1,1)、...パレット#255 = RGB(255,255,255)と言うことができます。

次に、普通の本物の写真を撮ります。秘密のメッセージを個々のビットに分割します。各パレットインデックス番号の最後のビットをメッセージの連続するビットに設定します。

たとえば、元の写真の最初の8ピクセルが01 00 C9 FF FF C8 42 43であるとします。メッセージは文字「C」で始まり、ASCIIコード0110 0111です。したがって、最初のバイトの最後のビットを変更しますバイトを01から00に変更します。2番目のバイトの最後のビットを1に変更します。バイトを00から01に変更します。3番目のバイトの最後のビットを1に変更します。これはすでに1なので、変わりはない。など、コード化された8バイトは00 01 C9 FE FF C9 43 43になります。

色の変更は非常に微妙なので、写真を見ている人が気付くことはまずありません。彼らが気づいたとしても、疑わしい理由がない限り、彼らはその写真が完璧ではない品質のものであると結論付けるだけでしょう。

もちろん、秘密のメッセージに1バイトあたり1ビットを使用する必要があるということは何もありません。どの程度品質を低下させるかによって、1バイトあたり2ビットを使用するか、1バイトおきに1ビットを変更するなどの方法が考えられます。

もちろん、同じ手法をカラー写真でも使用できます。各RGBコンポーネントの最後のビットを変更して、ピクセルごとに3ビットをエンコードします。

28
Jay

そのメソッドはステガノグラフィと呼ばれています。これにより、メッセージを画像だけでなく、オーディオ、ヴェデオ、その他の形式でも非表示にできます。

steganotool と呼ばれるオープンソースのステガノグラフィソフトウェアを次に示します。このプロジェクトは、ビットマップイメージとの間でテキストを非表示および抽出するために使用できるオープンソースのステガノグラフィツールです。

ステガノグラフィー媒体について

画像のステガノグラフィー

このタイプのステガノグラフィーは、発見に対して非常に効果的であり、さまざまな目的に役立ちます。これらの目的には、認証、メッセージの隠蔽、暗号化キーの送信などがあります。このタイプのステガノグラフィーに最も効果的な方法は、通常、最下位ビットの方法です。これは単に、隠されたメッセージが画像のバイトの最後のビットを変更することを意味します。最後のビットを変更することにより、キャリア画像内のそのピクセルの色は比較的変化しません。これにより、メッセージが簡単に検出されなくなります。内部に情報を隠すのに最適なタイプの画像ファイルは、24ビットのビットマップです。これは、ファイルサイズが大きく品質が高いためです。

オーディオのステガノグラフィー

オーディオファイルでは、情報を隠すための最も有名な方法は、低ビットエンコーディング方法です。低ビットエンコーディング方式は、画像ファイルで使用される最下位ビット方式に多少似ています。秘密情報はファイルの最後に添付されます。低ビットエンコーディングの問題の1つは、人間の耳には目立ちやすいということです。誰かが情報を隠そうとしている場合、非常に簡単に検出できるため、これは危険である可能性があります。スペクトル拡散方式は、オーディオファイル内の情報の隠蔽に使用されているもう1つの方式です。この方法では、オーディオブロードキャストにランダムノイズが追加されます。この方法により、情報が周波数スペクトル全体に広がり、ランダムノイズの下に隠れたままになります。オーディオステガノグラフィーで見られる最後の方法は、エコー非表示データです。このメソッドは、サウンドファイル内で自然に発生するエコーを使用して情報を隠そうとします。次に、これらのエコーに追加のサウンドを追加できます。追加のサウンドは隠されたメッセージです。これは、場合によっては元のオーディオファイルのサウンドを改善することもあるため、情報を隠すのに十分な方法です。

Steganography In Video

ビデオのステガノグラフィーは、基本的にビデオの各フレームに情報を隠すことです。ビデオ内に隠されている情報はごくわずかですが、通常は目立たなくなりますが、隠されている情報が多いほど目立ちます。この方法も効果的ですが、適切に実行するか、非表示にするのではなく、より多くの情報を明らかにする必要があります。

ドキュメントのステガノグラフィ

これは基本的に、ドキュメントの行の終わりに空白とタブを追加することです。このタイプのステガノグラフィは非常に効果的です。ほとんどのテキストエディタやドキュメントエディタでは、空白やタブの使用が人間の目に見えないためです。

これを参照することもできます オープンソースプロジェクト

この article は非常に便利です。

10
Arjun

Jpegファイル内のデータ(テキスト、別の画像など)を非表示にしたい場合は、ファイルの最後に追加するだけです。画像を表示すると、元の画像のみが表示され、追加したデータは無視されます。

データを非表示にする非常に重複した方法ではありませんが、これは別のJPEGを非表示にする良い方法です。まるで誰かがメモ帳または16進エディタでファイルを開いた場合、おそらく2つのJPEGがあり、1つではないことに気づかないでしょう。とにかく、2番目の画像は最初の画像と同じように見えます。

2
Chris

ウィンドウでは、単純なコマンドを使用して、画像内のアーカイブを非表示にすることができます:/ b cat.jpg + Documents.rar cat_new.jpgをコピーします。次に、たとえばwinrarを使用して、アーカイブからのように画像データを抽出します。
しかし、より良い方法は、ステガノグラフィーを使用することです。
LinuxおよびWindows用のシンプルなプログラム: http://linux01.gwdg.de/~alatham/stego.html
このプログラムを使用すると、パスフレーズを使用できます。パスフレーズを使用すると、画像内の一部のデータが非表示になったことを誰も知らないでしょう))

1

gifファイルの圧縮データは、可変サイズのチャンクです。各チャンクは長さバイトで始まります。通常、これらのチャンクは、最後の2つのチャンク(最後のチャンクは0)を除いて、255バイトのデータです(長さバイトは255と表示されます)。

ただし、サイズがメッセージを明確にするチャンクでgifを再コード化することもできます。たとえば、ASCII text or bytes 1234を表す00011011バイナリデータ、

gifのバイト頻度分析では、予想よりも少ない255バイトが明らかになります。サイズは元のサイズより大きくなりますが、画像はまったく同じに見えます。

1
Jasen

画像内のファイルを非表示にするための高度なツールは必要ありません。基本的なDOSコマンドを知っておく必要があります。以下のリンクをたどって、これを行う方法を確認してください(これは画像ステガノグラフィー):

https://www.youtube.com/watch?v=ox9ArqXtaWw&list=PLqEKOAKK4IbSTfDJZE_lH-DiOjOzZUczx&index=2

0
Raja