【ステガノグラフィ入門】#1 スパイ映画だけの話じゃない!画像にメッセージを忍ばせる驚きの技術とは?~画像のデータ~

炙り出し(あぶったら文字が浮き出す) 

画像に秘密の暗号 – ステガノグラフィ(steganography)

“スパイ映画やミステリ映画で写真に秘密の文章が隠されている!”といったシチュエーションがありますよね。情報の隠し方には様々な方法があります。

例えば、「解読用の眼鏡をかけてみたら見えるようになる」、「特定の波長の光を当てたら浮かび上がる」とか、これらは、アナログな写真などに用いられた方法ですが、ディジタル画像にも秘密のデータを隠すことができます

今回のシリーズ記事では、ディジタル画像に文字を隠す方法の基本的なものLSB法から、ステガノグラフィ(steganography)の技術について紹介したいと思います。

画像のデータ形式

データをうまく隠すためには、画像の保存のデータ形式について知っておく必要があります。

一般的な画像の保存形式を一般化していえば、画像はRGB(赤:Red,緑:Green,青:Blue)の光の三原色を数値化(標本化及び量子化)して色を表し、それを格子状に並べることで空間を2次元のデータ配列として保存しているのですが、これをかみ砕いてわかりやすく以下で説明します。

(「そんなことくらい知ってるよ」っていう人は次の記事へ)

デフォルト画像

【ステガノグラフィ入門】#3 スパイ映画だけの話じゃない!画像にメッセージを忍ばせる驚きの技術とは?~LSB法~

なぜ見た目を変えずに画像へ情報を隠せるのか?その答えが「ステガノグラフィ」の基本『LSB法』です。人間の目では識別困難な、色のごく僅かな変化(最下位ビット)を利用する巧妙な仕組みを図解します。

RGB(8bit)の情報

光の三原色(RGB)

上記図をみれば、赤緑青を全部混ぜると白になり、三”原色”と呼ばれるようにこの3色を源にすべての色を表すことができます。(厳密には一部表現できない色があるが専門的すぎるので略)

基本的にこの3色の色の強さがわかれば色を表現できます。

Q. [質問]では、画像として保存するとき、どのようにその保存方法を決めればいいでしょうか?

色を保存するとき、そのままの色にそれぞれ名前を付けて、保存すれば、その色を完璧に保存することができるはずです。 (赤色、茜色、白、胡粉色…..

しかし、 色をそのまま保存していたら途轍もない量の色を覚えておかないといけません。

極端に言えば、「白って200色あんねん!」 ← PCなどで全部定義するのは、現実的に不可能

そこで保存する色の数を減らして、その色だけで表現するようにしてみると。

色の三原色紹介用リンゴの画像

色の情報を減らして色の数を減らしたリンゴの画像のサンプル

諧調(色の段階)を減らしてデータ削減し過ぎた例、元の画像はわかるが、詳細に元の映像を残すことはできていない。
(イラストの処理としてはこれはこれでいいかもしれないが..)

データを保存するとき、不必要にデータが増えすぎるのはうれしくない。でも、情報を減らしすぎて元の情報が読み取れなくなったら困る。

ここで、光の三原色を思い出してください。「3色の強ささえわかれば色は保存できる。」

 → (赤 100%,緑 0%,青 0%) (→#FF0000 カラーコード)

 → (赤 0%,緑 0%,青 100%) (→#0000FF)

青緑 → (赤 0%,緑 68%,青 58%) (→#00AE95)

つまり、色を3つの色の強さで色を表せば各色を覚えていなくても大丈夫。

また、保存は2進数で行われており、多すぎず少なすぎずの数を表現できるとして、1byte = 8 bit を各色に割り当ており。

赤 → (赤 100%,緑 0%,青 0%) → (11111111,00000000,00000000) = (255,0,0)のように色を表します。

画像1枚の情報量

画素の情報量

画像サイズが n * m なら、1画素当たり 8 bit * 3 = 24 bitで表現できるので、圧縮しない場合画像一枚のデータ量は n* m* (24 bit) となります。

HD ( 1920 * 1080 サイズ)なら、49766400bitで一枚の画像を表現します。

画像の情報まとめ

  • 色はRGBで表す
  • RGBは一般的に各1byte = 8bit の二進数で保存
  • 画像は色を並べることで画像として保存している

画像のデータ形式についてわかったので、次回は、画像にどのようにデータをこっそり保存するのか?それを理解するために文字を2進数で表すための文字コードについて紹介します。

では、次の記事で。 lumenHero