
マルチプラットフォームのステガノグラフィーアプリで、GUI、CLI、Webサービスを備え、WEBPとAESをサポート。
一言で言えば、ステガノグラフィとは、人に気づかれずに別の媒体にメッセージを隠す技術です。この実装は、人気のあるウェブフォーマット(WEBP、PNG、GIF、JPEG)の画像を読み込み、(オプションで暗号化された)テキストを画像に隠し、結果をWEBP画像として保存します。その後、この新しい画像を公開ウェブサイト、フォーラム、insta、FBチャットにアップロードしたり、メールに添付したりできます。誰も賢くなりません、あなたが明示的に伝えない限り、画像にメッセージが実際に隠されていることを誰も知りません(暗号化が使用された場合、もちろん正しいパスワードも必要です)。
入力画像を選択します(URLまたはローカルファイルから)
必要に応じてパスワードを入力します(追加の軍用グレードの暗号化が必要な場合)
3/a. 画像内のメッセージを確認するには、Loadを押します。メッセージがないか、パスワードが間違っていると、文字化けが表示される可能性があります。
3/b. メッセージを入力し、Saveを押します。隠しメッセージを含む新しい画像が保存されるので、そのファイルを自由に使用してください。
ウェブサイトにアクセスしてください。
Linux(GTK)およびWindows(GDI)用のダウンロード。これらはポータブル実行可能ファイルで、インストールは不要で、マシンに痕跡を残しません。GUIはWebサービスとまったく同じように見え、動作します。

LinuxおよびWindows用のダウンロード(どちらもlibcのみ)。次に入力します:
./stegano-cli <image file>
./stegano-cli -p <password> <image file>
画像内のメッセージを標準出力に表示するには、および
./stegano-cli <image file> <message>
./stegano-cli -p <password> <image file> <message>
メッセージを新しい.webp画像ファイルにエンコードします(元のファイルを上書きする可能性があります)。Webサービスと同様に、パスワードはオプションです。上記のGUIバージョンとは異なり、コマンドラインバージョンには依存関係がまったくなく、どこでも Just Works(tm) します。
src ディレクトリで make を実行するだけです。suckless です。コンパイルには emscripten の emcc と gcc のみが必要です(Linux GUI バージョンには追加で pkg-config と GTK、GDK、pango、cairo など、通常の GTK ブロートウェアが必要です)。
make wasm WebAssembly バージョンのみをコンパイルする場合(必要なボイラープレートHTMLは public ディレクトリにあります)。make cli コマンドラインバージョンのみをコンパイルする場合(完全に依存関係なし、任意のPOSIXシステムで動作するはずです)。make gui グラフィカルユーザーインターフェースバージョンのみをコンパイルする場合(Windows GDI用、それ以外はGTKに依存)。パスワードを指定した場合、まずテキストが暗号化されます。次に画像がピクセルバッファに展開され、暗号化されたメッセージのビットがカラーチャンネルの輝度に保存されます。これにより、画像に非常にわずかな波模様が生じますが、人間の肉眼ではまったく気づかず(元の画像と比較しない限り、コンピューターでもまったく気づきません)。
読み込み時には、画像が再びピクセルバッファに展開され、カラーチャンネルの輝度の波が連結されたビットチャンクに変換されます。パスワードが与えられた場合、ビットチャンクは復号化されます。最終的なメッセージはUTF-8の有効性がチェックされ、有効であれば表示されます。(このUTF-8チェックが必要なのは、画像に本当にメッセージがあるのか、与えられたパスワードが正しいのかどうかを誰も判断できないためです。)
メッセージはゼロ終端のUTF-8マルチバイトストリームとして保存され、\t(水平タブ)、\r(キャリッジリターン)、\n(改行)の制御シーケンスのみが許可されます。読み込み時、Windows GUIバージョンは単独の\n文字を\r\n CRLFシーケンスに変換します。保存時、CLIバージョンは\+t、\+r、\+nの2バイト文字シーケンスを受け付け、対応する1バイト制御文字に変換します。
暗号化の場合、メッセージの長さが16の倍数になるようにゼロでパディングされ、最初にsha256(salt+sha256(password))が計算されます。これにより32バイトのバイナリが得られ、そのうち16連続バイトがAES-256-CBC ivとして使用され、4バイト目の値のmod 16から始まります。AES-256-CBCキーはその後sha256(sha256(salt+sha256(password))+salt)として初期化されます(shaのshaを使用することで、パスワードに対するレインボーハッシュ攻撃を極めて困難に、不可能に近くします)。ソルトはLibre Steganography Standardです。
ピクセルについては、すべての画像は32ビットパックドRGBAピクセルバッファに変換されます。4つのチャンネルのそれぞれの最下位2ビットを使用してメッセージの8ビットを保存します(これにより1キャリアピクセルあたり1メッセージバイトになります)。アルファチャンネルが3より大きいピクセルのみが保存に使用され、すべてのバージョンでそのピクセル数が 「容量 N バイト」 と報告されます。
1 message byte's bits (7 MSB, 0 LSB): 76543210
1 carrier pixel (alpha last, red first byte): rrrrrr76 gggggg32 bbbbbb54 aaaaaa10 (a!=0)
(この非透明ハックが必要な理由は、WEBPコーデックが主張するほどロスレスではないからです。アルファが3より大きい場合、エンコードされたビットがゼロでもピクセルが透明にならないことが保証されます。)
このステガノグラフィツールはGPLv3+(またはそのライセンスのそれ以降のバージョン)の条件の下でライセンスされています。stb_image(パブリックドメイン)とlibwebp(BSD-3-Clauseライセンス)と静的にリンクされています。SHAハッシュおよびAESエンコーダ/デコーダ部分はインライン化されており(私が作成)、サードパーティの暗号ライブラリはまったく必要ありません。
それでは、 bzt