
ステガノグラフィ技術に詳しくない場合は、Steganography: Hiding Data Inside Data でこの分野の基本的な概要も書いています。
このプロジェクトは PyPI にあり、以下のようにインストールできます。
pip install stego-lsb
または、このリポジトリから直接インストールすることもできます:
git clone https://github.com/ragibson/Steganography
cd Steganography
python3 setup.py install
インストール後、ターミナルで stegolsb コマンドを使用するか、コード内で stego_lsb から関数をインポートします。
bit_manipulation は、ペイロードのバイトをキャリアバイトシーケンスの最下位ビットに直接(高速に)インタリーブする機能を提供します。
具体的には、以下の4つの主要関数が含まれています:
# Interleave the bytes of payload into the num_lsb LSBs of carrier.
lsb_interleave_bytes(carrier, payload, num_lsb, truncate=False)
# Deinterleave num_bits bits from the num_lsb LSBs of carrier.
lsb_deinterleave_bytes(carrier, num_bits, num_lsb)
# Runs lsb_interleave_bytes with a List[uint8] carrier.
lsb_interleave_list(carrier, payload, num_lsb)
# Runs lsb_deinterleave_bytes with a List[uint8] carrier.
lsb_deinterleave_list(carrier, num_bits, num_lsb)
bit_manipulation.py を実行するか、その test() 関数を直接呼び出すか、stegolsb test を実行すると、以下のような出力が得られます。
Testing 1.0 MB payload -> 10.0 MB carrier...
Progress: [################################]
----------------------------------------
| # LSBs | エンコード速度 | デコード速度 |
| 1 | 60.6 MB/s | 95.9 MB/s |
| 2 | 56.6 MB/s | 52.7 MB/s |
| 3 | 82.5 MB/s | 77.4 MB/s |
| 4 | 112.4 MB/s | 105.9 MB/s |
| 5 | 135.9 MB/s | 129.8 MB/s |
| 6 | 159.9 MB/s | 152.4 MB/s |
| 7 | 181.7 MB/s | 174.6 MB/s |
| 8 | 372.8 MB/s | 1121.8 MB/s |
----------------------------------------
WavSteg は最小ビットステガノグラフィを使用して、.wav ファイルのサンプルにファイルを隠します。
オーディオファイルの各サンプルについて、最下位ビットをファイルのデータで上書きします。
WavSteg には Python 3 が必要です。
以下のコマンドライン引数で WavSteg を実行します:
Command Line Arguments:
-h, --hide To hide data in a sound file
-r, --recover To recover data from a sound file
-i, --input TEXT Path to a .wav file
-s, --secret TEXT Path to a file to hide in the sound file
-o, --output TEXT Path to an output file
-n, --lsb-count INTEGER How many LSBs to use [default: 2]
-b, --bytes INTEGER How many bytes to recover from the sound file
--help Show this message and exit.
例:
$ stegolsb wavsteg -h -i sound.wav -s file.txt -o sound_steg.wav -n 1
# OR
$ stegolsb wavsteg -r -i sound_steg.wav -o output.txt -n 1 -b 1000
データの隠蔽には -h, -i, -s, -o, -n の引数を使用します。
次のコマンドは file.txt の内容を sound.wav に隠し、結果を sound_steg.wav として保存します。また、理論上の最大値のうち何バイト使用されたかを出力します。
例:
$ stegolsb wavsteg -h -i sound.wav -s file.txt -o sound_steg.wav -n 2
Using 2 LSBs, we can hide 6551441 bytes
Files read in 0.01s
5589889 bytes hidden in 0.24s
Output wav written in 0.03s
データを隠しすぎようとすると、WavSteg はデータを隠すために必要な最小の LSB 数を出力します。
データの復元には -r, -i, -o, -n, -b の引数を使用します。
次のコマンドは sound_steg.wav から隠されたデータを復元し、output.txt として保存します。隠されたデータのバイトサイズが正確でないと、結果が短すぎたり、余分なデータが含まれたりする可能性があります。
例:
$ stegolsb wavsteg -r -i sound_steg.wav -o output.txt -n 2 -b 5589889
Files read in 0.02s
Recovered 5589889 bytes in 0.18s
Written output file in 0.00s
LSBSteg は最小ビットステガノグラフィを使用して、RGB 画像(.bmp または .png)の色情報にファイルを隠します。
画像の各ピクセルの各色チャンネル(R、G、B など)について、色の値の最下位ビットをファイルのデータで上書きします。データの復元を容易にするために、入力ファイルのファイルサイズも画像の最初のいくつかの色チャンネルに隠します。
Python 3 と Python Imaging Library (PIL) のフォークである Pillow が必要です。
以下のコマンドライン引数で LSBSteg を実行します:
Command Line Arguments:
-h, --hide To hide data in an image file
-r, --recover To recover data from an image file
-a, --analyze Print how much data can be hidden within an image [default: False]
-i, --input TEXT Path to an bitmap (.bmp or .png) image
-s, --secret TEXT Path to a file to hide in the image
-o, --output TEXT Path to an output file
-n, --lsb-count INTEGER How many LSBs to use [default: 2]
-c, --compression INTEGER RANGE
1 (best speed) to 9 (smallest file size) [default: 1]
--help Show this message and exit.
例:
$ stegolsb steglsb -a -i input_image.png -s input_file.zip -n 2
# OR
$ stegolsb steglsb -h -i input_image.png -s input_file.zip -o steg.png -n 2 -c 1
# OR
$ stegolsb steglsb -r -i steg.png -o output_file.zip -n 2
画像にデータを隠す前に、どれだけのデータを隠せるかを確認すると便利です。次のコマンドでそれが可能で、以下のような出力が得られます。
$ stegolsb steglsb -a -i input_image.png -s input_file.zip -n 2
Image resolution: (2000, 1100, 3)
Using 2 LSBs, we can hide: 1650000 B
Size of input file: 1566763 B
File size tag: 3 B
次のコマンドは入力画像にデータを隠し、結果をステガノグラフィ画像に書き込み、以下のような出力を生成します。
$ stegolsb steglsb -h -i input_image.png -s input_file.zip -o steg.png -n 2 -c 1
Files read in 0.26s
1566763 bytes hidden in 0.31s
Image overwritten in 0.27s
次のコマンドはステガノグラフィ画像からデータを復元し、結果を出力ファイルに書き込み、以下のような出力を生成します。
$ stegolsb steglsb -r -i steg.png -o output_file.zip -n 2
Files read in 0.30s
1566763 bytes recovered in 0.28s
Output file written in 0.00s
StegDetect は画像内のシンプルなステガノグラフィを検出する一つの方法を提供します。
Python 3 と Python Imaging Library (PIL) のフォークである Pillow が必要です。
以下のコマンドライン引数で StegDetect を実行します:
Command Line Arguments:
-i, --input TEXT Path to an image
-n, --lsb-count INTEGER How many LSBs to display [default: 2]
--help Show this message and exit.
各ピクセルの RGB 色チャンネルの最下位 n ビットを合計し、結果を 0~255 の範囲に正規化します。この値はピクセルの各色チャンネルに適用されます。n は表示する最下位ビット数で、次のコマンドは結果の画像をファイル名に "_nLSBs" を追加して保存し、以下のような出力を生成します。
$ stegolsb stegdetect -i input_image.png -n 2
Runtime: 0.63s