ImageSteg · 画像や音声ファイルにデータを隠す

steghide 0.5.1のブラウザ移植版です。BMP・PNGの画素/LSB方式、JPEGのDCT係数方式に加え、PCM WAVとMP3にも対応。ファイルやメッセージを隠し、パスフレーズで取り出せます。

100%端末内で処理

ファイルも秘密も、この端末の外に出ません。 デコード、埋め込み、暗号化、抽出はすべてこのタブ内で行います。サーバーに一切送信しないため、サーバーから漏れるデータもありません。

1 · カバー画像または音声

画像または音声ファイルをドロップ JPEG、PNG、WebP、GIF、BMP、PCM WAV、MP3 · 端末内でデコード、送信なし

大きいファイルほど多く隠せます。画像は約8画素につき1バイト、PCM WAVは16サンプルにつき1バイト、MP3は音声フレームの未使用部分に保存します。

2 · 隠すデータ

ファイル未選択

3 · パスフレーズ & オプション

簡単な3ステップ

画像や音声ファイルにデータを隠す方法

インストール・アップロード不要。画像、WAV、MP3を選び、秘密を追加して結果を保存します。

1

カバーにする画像・音声を選ぶ

データを埋め込む画像、WAV、MP3を選択・ドロップ・貼り付けします。大きいファイルほど多く保存でき、複雑な写真や音楽ほど変更を目立たなくできます。

2

秘密とパスフレーズを追加する

ファイルを添付するかメッセージを入力し、パスフレーズを設定します。パスフレーズはデータの分散位置を決め、任意で暗号化にも使います。

3

ダウンロードして共有する

steghideとの互換性が必要ならBMP、サイズを小さくしたいならPNGで保存します。画像とパスフレーズを持つ人はデータを取り出せます。

steghideのアルゴリズムと音声対応をブラウザで

画素・DCT係数・音声サンプルのグラフマッチング

ImageStegはsteghide 0.5.1のTypeScript移植版で、BMP・PNGの画素/LSB方式とJPEGのDCT方式に対応します。さらにPCM WAVでも同様にデータを隠し、MP3ではフレーム末尾の未使用部分に格納します。単にファイルを順番に書き換える方式ではありません。

グラフに基づく埋め込み

サンプルを頂点にまとめ、最小重みマッチングで変更箇所を選ぶため、隠す値1つにつき約1サンプルだけを変更します。

本格的なJPEG DCTステガノグラフィ

内蔵JPEGエントロピーコーデックで量子化DCT係数を読み取り、その偶奇にデータを隠して再符号化します。steghideのlibjpegと同じ段階で処理し、ベースライン・プログレッシブの両方に対応します。

パスフレーズによる分散

MD5をシードとする並べ替えで画像全体にデータを分散し、予測可能な順序で保存されないようにします。

圧縮とチェックサム

埋め込み前にzlibでデータを圧縮し、任意のCRC32チェックサムで抽出結果の信頼性をすぐ確認できます。

任意のAES-256暗号化

libmcryptと同じ鍵導出によるRijndaelのCBCモードで暗号化し、画像が疑われても内容を秘密に保ちます。

仕様と目安

容量・速度・互換性

画像の画素にデータを隠す場合の実用上の制限。

BMP · PNG画素 / LSB方式
JPEGDCT係数方式
0.2 %変更されるサンプルの一般的な割合
アップロード0すべてブラウザ内に保持

互換性: ビット配置、サンプルの並べ替え、Rijndael/CBC暗号化はsteghide 0.5.1に従うため、BMPとJPEGの出力は次で読み取れます: steghide extract -sf image.bmp -p passphrase または -sf image.jpg。また、steghideコマンドラインで作ったファイルもここで読み取れます。出力はカバー形式に対応します。JPEGのデータはJPEGだけが保持できる係数内にあるため、JPEGからはJPEGを出力します。画素方式ではBMPとPNGを提供しますが、steghide CLIはPNG非対応です。

JPEG方式の詳細

steghideのJPEG処理はlibjpegの次の関数を呼び出します: jpeg_read_coefficients()。これはハフマン復号の直後、逆量子化とIDCTの前で止まり、生の量子化DCT係数を得ます。ブラウザにはそれを取得するAPIがないため、このページは独自のJPEGエントロピーコーデックを備えています。ベースラインとプログレッシブに対応し、逐次近似の精緻化スキャンも扱います。

PNGに同じアルゴリズムを適用

埋め込み処理はファイル形式ではなく、デコード済み画素配列だけを扱うため、steghideのBMP/LSB方式をそのままPNGに使えます。実用上は次の4点が重要です。

よくあるご質問

ImageStegのFAQ

ImageStegは無料ですか?

はい。埋め込みも抽出も無料で、登録、透かし、人為的なファイルサイズ制限はありません。

画像や秘密ファイルは送信されますか?

いいえ。デコード、埋め込み、圧縮、暗号化はJavaScriptとWebCryptoでブラウザ内実行します。73hiのサーバーには送りません。

どの画像形式に対応していますか?

ブラウザでデコードできる画像は画素方式のカバーにできます。ベースライン・プログレッシブJPEGはDCT方式を使います。JPEG入力はJPEG出力、画素方式はBMPとPNGを出力します。steghideコマンドラインはBMPとJPEGを読めますが、PNGは読めません。

JPEGモードはどのようにデータを隠しますか?

steghideコマンドラインと同じく、量子化DCT係数に隠します。内蔵JPEGエントロピーコーデックで係数まで復号し、偶奇を変更して再符号化します。

プログレッシブJPEGを使えますか?

はい。スペクトル選択と逐次近似精緻化を含むすべてのスキャンを復号し、同じ方式で書き戻すため、元の係数を持つプログレッシブJPEGとして出力されます。

算術符号化JPEGは使えますか?

読み取りに対応します。ハフマンではなくQM(二進算術)符号のSOF9(逐次)・SOF10(プログレッシブ)は、libjpegと同じ算術デコーダーで処理し、同一の係数を得ます。出力はsteghideと同じくハフマン符号化です。

どのくらいのデータを隠せますか?

およそ8画素につき1バイトから、ヘッダー、ファイル名、任意の暗号化の分を差し引いた容量です。画像を選ぶと使用可能容量を表示します。

steghideコマンドラインツールで結果を読めますか?

はい、BMPをダウンロードすれば読めます。ビット配置、パスフレーズによるサンプルの並べ替え、Rijndael/CBC暗号化はsteghide 0.5.1に従っています。

画像編集後に抽出できなくなるのはなぜですか?

データは個々の画素値に保存されます。再圧縮、リサイズ、フィルター、JPEGなど非可逆形式への変換で壊れます。元のBMPか可逆PNGを保管してください。

同じ画像に2つの秘密を隠せますか?

同じファイルへ2回埋め込む方法ではできません。2回目は画像全体から独自の位置を選び、最初のデータを一部上書きします。暗号化前に圧縮しているため、数ビットの変化でもメッセージ全体を失います。元のsteghideも同様です。同じパスフレーズでも最初から同じ位置を上書きするため、最新のメッセージだけが残ります。階層化したい場合は、小さい画像に最初の秘密を隠して保存し、そのファイル全体を別のパスフレーズで大きな画像に隠してください。各層を画素ではなく保護されたデータとして扱うため、バイト単位で維持できます。

隠しデータ入り画像を開くだけで壊れますか?

いいえ。読み込みはバイト列を読むだけです。JPEGは逆変換や再量子化せずDCT係数へ直接アクセスし、画素方式は可逆にデコードするため、データは維持されます。JPEGはエントロピー符号の書き直しでサイズが少し変わる場合がありますが、隠しデータには影響しません。他の人が作ったファイルも安全に開いて取り出せます。

ImageStegは著作権の保護に役立ちますか?

はい。写真に著作権表示や所有の証明を埋め込めます。データは画素やJPEG係数にあり、通常の表示では見えないため、公開しても気づかれません。無断使用された場合も、ファイル内に隠し印が残っていれば、侵害を記録するため第三者のプラットフォームに載せた同じ画像にも証拠が含まれ、削除申請や権利主張を支える資料になります。

直接言いにくいメッセージを隠せますか?

もちろんです。「好きです」など対面では伝えにくい言葉を日常の写真に隠し、相手の誕生日をパスフレーズに設定してみてください。写真を送り、ImageSteg(または73hi.com/image-steg.html)で開くよう伝えます。パスフレーズを知る人だけが読めるため、声に出す照れくささを避けて気持ちを伝えられます。