Photoshopで暗号化

main title

Photoshopを使って、レイヤーモードを利用した排他的論理和演算による暗号画像を作ります。 まずは、どんなふうに復号されるのか、サンプルで試してみてください。

サンプルxor_sample.psd:PSD 897KB)

サンプルをダウンロードして開いたら、非表示になっているレイヤーを表示してみてください。 それぞれのレイヤーの画像はノイズの様な画像ですが、両方を表示すると復号された画像が表示されると思います。

普通はあまり使わないような機能も使いますが、書いてある通りにやればできると思います。

  1. Photoshopで秘密画像を作る
  2. Photoshopでカラーランダムパターンを作る
  3. Photoshopで秘密画像を暗号化する
  4. Photoshopで暗号画像を復号する

Photoshopで秘密画像を作る

secret image title

排他的論理和演算は、ビット単位での演算です。 そのため排他的論理和による暗号化では、RGBの各色につき1ビットで表現される画像を対象としています。 つまり、RGBの値がすべて0または255の画像を使用します。 まず、暗号化する画像(ここでは秘密画像と呼ぶことにします)を作ります。

1.

秘密画像の元になるカラー画像(pico.jpg)を開き(ファイル>開く…)ます。

サンプルのカラー画像のサイズは、幅300ピクセル、高さ300ピクセルです。

2.

カラーモードをインデックスカラーに変更する(イメージ>モード>インデックスカラー…)ことで、8色に減色します。

このときのオプションは、パレットを「RGB カラーを均等に割り付ける」、表示色を8、ディザを「誤差拡散法」としました。 サンプルでは写真を使用していますので、誤差拡散法を選びましたが、最終的にRGBの値がすべて0または255の画像になっていれば良いです。 たとえば、白(R:255 G:255 B:255)と黄色(R:255 G:255 B:0)を使用して、白地に黄色い文字の2色の画像を秘密画像として作成しても良いです。

パレット:「RGB カラーを均等に割り付ける」
表示色:8
ディザ:「誤差拡散法」

index color

3.

カラーモードをRGB カラーに戻して(イメージ>モード>RGB カラー)、秘密画像のできあがりです。

暗号化の際にレイヤー機能を使用するので、インデックスカラーからRGB カラーに戻します。

secret image
xor_secret-image.psd (PSD 381KB)

Photoshopでカラーランダムパターンを作る

random pattern title

暗号化や復号に使用する暗号鍵となるランダムパターンを作成します。 ここで作成するランダムパターンは、秘密画像と同じ8色の画像になります。

1.

カラーランダムパターンを作成するために、新規ドキュメントを作成(ファイル>新規…)します。

画像サイズは秘密画像と同じサイズで、幅300ピクセル、高さ300ピクセルにします。 また、カラーモードは、RGB カラーにします。
new

2.

一様なランダムパターンを生成するために、レベル補正(イメージ>色調補正>レベル補正…)を行ってカンバスカラーを灰色(画素値 127)にします。

入力レベルはそのままで、出力レベルを0〜127に設定します。 もちろん、レベル補正を使わないといけないわけではないです。 好きな方法で、背景を灰色(画素値 127)で塗りつぶしてください。
イメージ>色調補正>レベル補正…

3.

ノイズを加える(フィルター>ノイズ>ノイズを加える…)ことで、多階調のランダムパターンを作成します。

このとき加えるノイズの量を50%に設定します。 きちんと検証していないのですが、50%以上に設定すれば問題ないと思います。
フィルター>ノイズ>ノイズを加える…

4.

多階調のランダムパターンを8色に減色して(イメージ>色調補正>ポスタリゼーション…)、カラーランダムパターンのできあがりです。

ポスタリゼーションで階調数を2にすることで、8色に減色することができます。
イメージ>色調補正>ポスタリゼーション…

カラーランダムパターン
xor_rgb-random-pattern.psd (PSD 659KB)

Photoshopで秘密画像を暗号化する

xor-encryption title

レイヤー機能を使用して、暗号化を行います。 つまり、秘密画像とカラーランダムパターンの差の絶対値をとることで、排他的論理和演算を行います。

1.

秘密画像とカラーランダムパターンを開き(ファイル>開く…)ます。

2.

新しいレイヤーを作成して、秘密画像とカラーランダムパターンを重ねます。
正しい方法かどうかはわかりませんが、カラーランダムパターンを全選択(選択範囲>すべてを選択)、コピー(編集>コピー)後、秘密画像上でペースト(編集>ペースト)すればできます。 つまり、コピー&ペーストで良いと思います。
新しいレイヤー

3.

カラーランダムパターン(上のレイヤー)のレイヤーの描画モードを「差の絶対値」にします。
差の絶対値

4.

画像を統合(レイヤー>画像を統合)して暗号画像のできあがりです。

暗号画像
xor_encrypted-image.psd (PSD 659KB)

Photoshopで暗号画像を復号する

xor-decryption title

レイヤー機能を使用して、秘密画像を復号を行います。 使用する画像が違うだけで、暗号化と同じ処理でできます。

1.

暗号画像とカラーランダムパターンを開き(ファイル>開く…)ます。

2.

新しいレイヤーを作成して、暗号画像と暗号化に使用したカラーランダムパターンを重ねます。 コピー&ペーストで良いと思います。
新しいレイヤー

3.

レイヤーの描画モードを「差の絶対値」にすると、復号されます。
差の絶対値

復号画像
xor_decrypted-image.psd (PSD 725KB)