⚠️ これは 非公式の翻訳サイトです。ImageMagick Studio LLC とは無関係です。正確な情報は 原文(https://imagemagick.org/cipher/) を参照してください。

画像の暗号化

画像の暗号化 • 画像の復号 • 暗号化・復号の注意点

ほとんどの画像は、設計上、しばしば多くの人に見られることを意図しています。たとえば Web 画像は、多数の訪問者によって 1 日に何百回も閲覧されることがあります。しかし場合によっては、特定の画像を非公開にして、自分だけ、あるいは選ばれた友人や Web 訪問者だけが閲覧できるようにしたいことがあります。ImageMagick では、パスフレーズを知らない限り元の内容を閲覧できないよう、画像を撹乱できます。

暗号化ユーティリティで画像を撹乱することもできますが、それらは通常ファイル全体を撹乱し、画像形式として認識できなくします。ImageMagick では、ピクセルのみが撹乱されます。撹乱された画像は引き続き画像として認識され、Web ページにも表示されます。ただし、内容は判読不能なデータに見え、元の内容とはまったく異なります。

画像の暗号化

画像を認識できないように撹乱するには -encipher オプションを使います。このオプションはパスフレーズを含むファイル名を必要とします。この例では画像を撹乱して PNG 形式で保存します:

magick rose.jpg -encipher passphrase.txt rose.png

ここでは別の画像をパスフレーズとして画像を暗号化します:

magick rose.jpg -encipher smiley.gif rose.png

画像の復号

画像を再び認識できるように元に戻すには -decipher オプションを使います。このオプションはパスフレーズを含むファイル名を必要とします。この例では画像を元に戻して JPEG 形式で保存します:

magick rose.png -decipher passphrase.txt rose.jpg

暗号化・復号の注意点

一部の形式は暗号化ピクセルをサポートしません(JPEG や GIF など)。お使いの画像形式がサポートされていることを確認するため、テスト画像を暗号化し、その形式で他の画像を暗号化する前に元の内容を復元できることを確認してください。

画像形式は 8 ビットと RGB(TrueColor)のみをサポートする場合があります。そのため、出力ファイル名の前にオプション "-depth 8 -type TrueColor" を含めるとよいでしょう。

パスフレーズは文字と記号の任意の組み合わせで構いません。画像を確実に非公開に保つため、最低 12 文字の組み合わせにすべきです。また、意図しないユーザーが元の画像内容を閲覧できないよう、パスフレーズファイルの権限が他人による読み取りを防ぐようにしてください。

元の画像内容を復元できるのは、パスフレーズを知っている場合だけです。失くしたり忘れたりすると、元の画像内容は永遠に失われます。

ImageMagick は画像ピクセルのみを撹乱します。画像メタデータは手つかずのまま残り、画像ファイルにアクセスできる誰でも読めます。

ImageMagick は AES のカウンタ(CTR)モードを使って画像のピクセルデータを撹乱します。現在の実装は、AES 鍵と IV(初期カウンタ)の両方を、ユーザーが供給したパスフレーズから決定論的に導出します。パスフレーズの前半が AES 鍵になり、後半が画像寸法とともにハッシュされて IV を生成します。この IV はパスフレーズと画像の幅・高さのみから導出されるため、同じパスフレーズと同じ寸法で複数の画像を暗号化すると、同じ IV、したがって同じキーストリームになります。

CTR モードは、同じ鍵の下での暗号化ごとに一意で繰り返さない IV を必要とします。CTR モードで IV を再利用するとキーストリームの再利用が起こり、攻撃者が暗号文を XOR することで平文に関する情報を復元できてしまいます。このため、現在の決定論的な IV 構築は暗号学的に強い機密性を提供しません。

キーストリームの再利用とそれに伴う情報漏洩を避けるには、ユーザーは画像ごとに異なるパスフレーズを供給する必要がありますが、これは非現実的で、それでも現代の暗号学的な期待を満たしません。したがって ImageMagick の暗号化機能は、カジュアルな難読化にのみ適しており、セキュリティが重要な暗号化には適しません。

現在、暗号化した画像内容を復元できるのは ImageMagick のみです。標準的な暗号とモードを使っているので、他のベンダーも暗号化画像内容をサポートできる可能性があります。

画像暗号化の小さな実用例は IM Examples の Encrypting Image Data にあります。