隠すデータのかたち
ステガノグラフィの手法 LSB法などの仕組みを紹介する前に、隠すデータをどのように表現し、それをどのようにして復元するのか?また、データの可逆性について紹介します。
具体的には、文字コードについての簡単な紹介と、文字コードを用いて文章を2進数にし、それを画像に変換してみます。その後同様のルールで読み出すことで文字データを復元してみます。
(「そんなことわかっておる!!」という方は次の記事へ)

【ステガノグラフィ入門】#3 スパイ映画だけの話じゃない!画像にメッセージを忍ばせる驚きの技術とは?~LSB法~
なぜ見た目を変えずに画像へ情報を隠せるのか?その答えが「ステガノグラフィ」の基本『LSB法』です。人間の目では識別困難な、色のごく僅かな変化(最下位ビット)を利用する巧妙な仕組みを図解します。
テキストデータについて –文字コード-
データは2進数のデータで保存されている、文字を保存するためには文字と数を対応させています。この対応を定義したものが、ASCIIコード、UTF-8やshiftJISなどが有名な文字コード(コーデック)と呼ばれるものです。
テキストデータは、実際には「文字コード」という取り決めを使って保存されています。
例えば、以下のような対応が存在します:
01000001
(2進数) →65
(10進数) →A
01000010
(2進数) →66
(10進数) →B
このように、「ある二進数の並びが、どの文字に対応するのか」を定義したのが文字コードです。
最近では、UTF-8に統一または、データを読み取って自動的に文字コードを合わせて表示する仕組みがあるので、あまり見かけなくなりましたが、文字化けはこれが原因であることが多いです。

(例: ”A”が対応する二進数は “1000011”)
表 1 ASCIIコード表
文章を画像にしてみる
画像のデータ形式は前記事で紹介した通り、RGBの2進数情報なので、文章を文字コードを用いて2進数に変換。その後この2進数列をRGBの画素値に8bitごとに割り当てれば、文字をそのまま画像に変換することができます。
文章 → 文字コードで2進数に読み替え → 画素値に割り当てる → 画像
日本語に対応しているUTF-8の文字コードを用い、青空文庫より羅生門を画像化してみました。
Step1 羅生門元文 冒頭
ある日の暮方の事である。一人の下人げにんが、羅生門らしょうもんの下で雨やみを待っていた。 広い門の下には、この男のほかに誰もいない。ただ、所々丹塗にぬりの剥はげた、大き….
Step2 羅生門2進数化
UTF-8で二進数に変換したもの、長くなるので冒頭だけ、ひらがなや漢字はは 82 + a0 のように16bit(2進数で16桁分,16進数なら4桁分)で1文字を表している。
十六進数表記
あ る 日 の 暮 方 の 事
82 a0 82 e9 93 fa 82 cc 95 e9 95 fb 82 cc 8e 96
で あ る 。 一 人 の 下
82 c5 82 a0 82 e9 81 42 88 ea 90 6c 82 cc 89 ba
人 げ に ん が 、 羅 生
90 6c 82 b0 82 c9 82 f1 82 aa 81 41 97 85 90 b6
門 ら し ょ う も ん の
96 e5 82 e7 82 b5 82 e5 82 a4 82 e0 82 f1 82 cc
下 で 雨 や み を 待 っ
89 ba 82 c5 89 4a 82 e2 82 dd 82 f0 91 d2 82 c1
て い た 。 広 い 門
82 c4 82 a2 82 bd 81 42 20 8d 4c 82 a2 96 e5 82
の 下 に は 、 こ の 男
cc 89 ba 82 c9 82 cd 81 41 82 b1 82 cc 92 6a 82
の ほ か に 誰 も い な
cc 82 d9 82 a9 82 c9 92 4e 82 e0 82 a2 82 c8 82
い 。 た だ 、 所 々 丹
a2 81 42 82 bd 82 be 81 41 8f 8a 81 58 92 4f 93
塗 に ぬ り の 剥 は げ
68 82 c9 82 ca 82 e8 82 cc 94 8d 82 cd 82 b0 82
た 、 大 き ….
bd 81 41 91 e5 82 ab 2e ….
Step3 全文を画像に変換
文章を2進数化したものを画像の左上からRGB (各色0 ~ 255、 2進数で計24桁)分ずつ割り当てていくことで、文章を画像に変換できる。
“ある”を画像にするなら ”82 a0 82 e9” なので、2進数なら 1000 0010 1010 0000 1000 0010 1110 1001 これをはじめから8桁で区切って、R : 1000 0010, G: 1010 0000 B: 1000 0010を1画素目、とし2画素目以降も同様に割り当てる。

図1 羅生門.png
羅生門をUTF-8で2進数列に変換し、画像にしたもの
文字コードで、ひらがなや漢字は大体同じ値(82から始まるなど)なので、改行などの大きく異なる値が来るまで大体同じ値が続いている。そのため、そのまま変換したら、左のような縞々模様になる。
参考記事

【ステガノグラフィ入門】#3 スパイ映画だけの話じゃない!画像にメッセージを忍ばせる驚きの技術とは?~LSB法~
なぜ見た目を変えずに画像へ情報を隠せるのか?その答えが「ステガノグラフィ」の基本『LSB法』です。人間の目では識別困難な、色のごく僅かな変化(最下位ビット)を利用する巧妙な仕組みを図解します。
画像から文章に戻してみる
前の項目で文章から画像への変換ができた、次に、同様のルール 文字コードや画素への割り当てがわかれば、復元できることを確認する。

図2 画像から文章を復元するテスト結果
画素値 → 2進数列 → 文字コードで復元 → 文章
正しく文章を復元できることができています。
このような、復元可能性を可逆性といい。次の記事などで詳しく扱い出すLSB法などでもデータを復元するために可逆性のあるデータの埋め込みが必要です。
まとめ
今回は、文字コードについて紹介し、文字コードで文章を2進数にし、それを画像にしてみました。その後、文章を画像から復元し可逆性を確認しました。
今回の羅生門.pngを見ればわかるように、そのまま画像化したものは、明らかに何かのデータを表していることがわかってしまいます。
次回からは、画像にどのようにデータをこっそり保存するのかその基本的な方法のLSB法について紹介します。
では、次の記事で。 lumenHero