画像と音声のステガノグラフィ
メディアファイルにデータを埋め込みます。
「画像と音声のステガノグラフィ」はCoddyKit上の無料Cyber Security Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCyber Security Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cyber Security Academyコースには全4レッスンが含まれています。
画像が画素を格納する仕組み
画像にデータを隠すには、まず画像が色をどのように格納しているかを知る必要があります。RGB画像の画素には、赤、緑、青という3つのチャンネルがあり、それぞれ通常は0から255までの8ビットの数値です。
つまり、1画素は3バイトです。800x600の小さな画像でも480,000画素、144万バイトの色情報があります。この冗長性をステガノグラフィは利用します。人間の目で細かく確認できる量をはるかに超えるバイト数が存在するためです。
重要な点は、人間の視覚システムでは色の値が200の場合と201の場合を区別できないことです。この知覚できない差の中に、隠しデータを配置できます。
最下位ビットへの埋め込み
LSB埋め込みでは、各色バイトの最下位ビットを秘密情報の1ビットで置き換えます。最下位ビットによる値の変化は1だけなので、見た目の変化は分かりません。
赤チャンネルの値200(2進数で11001000)にビット1を隠す場合を考えましょう。最後のビットを1に置き換えると、11001001 = 201になりますが、人間にはその変化を認識できません。
何千もの画素に対して行えば、それらのLSBを順番に読み戻すことでペイロードを復元できます。
# Embed: keep top 7 bits, set LSB to the secret bit
# value 200 = 1100100 0 -> hide 1 -> 1100100 1 = 201
#
# In Python terms (read-only illustration):
# new_byte = (color_byte & 0xFE) | secret_bit # 0xFE clears the LSB完全なメッセージのエンコード
メッセージは、それぞれ8ビットで構成されるバイトの列です。長さを示すヘッダー付きで単語を隠すには、ペイロードをビットストリームに展開し、各カラーチャンネルに1ビットずつ書き込みます。
実用的な埋め込みツールでは、抽出側が読み取りを停止する位置を判断できるように、長さのプレフィックスや固有の終端シーケンスも保存します。これがなければ、ペイロードとカバーのノイズを区別できません。
これはsteghide、zsteg、steganoなどのツールが自動化している処理で、多くの場合はパスワードと暗号化レイヤーも追加できます。
# Embed a secret into a PNG with the open-source 'stegano' tool
stegano-lsb hide -i cover.png -m 'meet at noon' -o stego.png
# steghide with a passphrase (encrypts then embeds)
steghide embed -cf cover.jpg -ef secret.txt -p 'p@ss'適切な画像形式の選択
圧縮の影響があるため、形式は非常に重要です。
- 可逆形式(PNG、BMP)はすべての画素を完全に保持します。LSBデータも完全に維持されるため、理想的な埋め込み媒体です。
- 非可逆形式(JPEG)は圧縮時に細部を破棄するため、単純なLSBデータが壊れます。
JPEGでは、埋め込みを生の画素ではなくDCT係数、つまり圧縮時に使用される周波数領域の値に対して行う必要があります。steghideや、古典的なJSteg/OutGuessなどのツールはこの領域で動作するため、ペイロードが圧縮処理を経ても維持されます。
単純なLSBの脆弱性
画素に対する単純なLSB埋め込みは脆弱です。画素値を変更するあらゆる操作によって、隠しビットが壊れます。
- JPEGとして再保存非可逆圧縮によってバイトが書き換えられます。
- サイズ変更やトリミング再サンプリングによってすべての値が変化します。
- 色調整明るさやコントラストが変化します。
- ソーシャルメディアへのアップロードプラットフォームによって画像が自動的に再エンコードされます。
これは三角形における堅牢性の側面です。ペイロードを編集後も維持する必要がある場合(たとえば電子透かし)、周波数領域(DCT/DWT)に埋め込み、容量を下げる代わりに堅牢性を高めます。
ステルス性を高める:スマートな配置
単純なLSB埋め込みでは、左上から順番に画素へ書き込むため、検出可能な統計的特徴が生じます。よりステルス性の高い手法では、分析を回避するためにペイロードを分散させます。
- 疑似ランダム配置ステゴキーから初期値を得たPRNGがビットを保持する画素を選ぶため、パターンがランダムに見えます。
- ノイズの多い領域滑らかな空よりも、もともと変化のあるテクスチャ領域(草や髪)に埋め込みます。
- 適応型埋め込み最新のアルゴリズムでは、検出可能性のコスト関数を最小化します。
ステゴキーはパスワードとしても機能します。分析者は、隠蔽を疑っていても、ステゴキーがなければビットの順序を復元できません。
音声ステガノグラフィの基礎
音声も画像と同じ原理で機能しますが、時間領域または周波数領域を扱います。WAVファイルには、通常、毎秒何千回も記録される振幅を表す16ビットの数値であるサンプルが格納されています。
音声へのLSB埋め込みでは、各サンプルの最下位ビットを上書きします。16ビットの振幅における1段階の変化は人間の聴覚のしきい値をはるかに下回るため、音声は同じように聞こえます。
1チャンネルあたり毎秒44,100サンプルあるため、音声は大きな容量を提供します。ただし、JPEGが画素のLSBを壊すのと同じように、MP3などの非可逆形式は生のサンプルのLSBを壊します。
# Hide a file in a WAV using the open-source steghide
steghide embed -cf song.wav -ef secret.txt -p 'p@ss'
# WAV is lossless (raw PCM samples) - LSB survives.
# MP3 is lossy - embed in the encoded domain or it is destroyed.高度な音声技術
LSB以外にも、音声ステガノグラフィでは聴覚の仕組みに基づく知覚上の工夫を利用します。
- 位相符号化音声成分の位相を変更します。人間の耳は絶対位相に対して鈍感です。
- エコー隠蔽遅延によってビットを符号化した、非常に小さく知覚できないエコーを加えます。
- スペクトラム拡散ペイロードを広い周波数帯域に低レベルのノイズとして分散し、編集に対する堅牢性を高めます。
- トーン挿入より大きな音の近くでマスキングされるトーンを利用してデータを隠します(心理音響マスキング)。
これらは、周波数領域を使う画像の手法と同様に、容量を犠牲にして堅牢性とステルス性を高めます。
空間領域と周波数領域
メディア全般に共通する考え方として、どの領域を選ぶかという問題があります。
- 空間/時間領域画素やサンプルに直接埋め込みます。単純で容量が大きい一方、圧縮に対して脆弱です。
- 周波数領域信号を変換し(JPEGにはDCT、ウェーブレットにはDWT、音声にはFFTを使用します)、係数に埋め込んだ後、元に戻します。より堅牢でステルス性も高くなりますが、容量が小さく、処理も複雑です。
原則として、カバーが圧縮、サイズ変更、共有される場合は周波数領域に埋め込みます。完全な状態を保つ可逆カバーであれば、空間領域のLSBで問題ありません。
容量計画
埋め込む前に、安全に隠せるデータ量を見積もります。役立つ指標として、カバー1ビットあたりに隠すビット数を示す埋め込み率があります。
- チャンネルあたり1ビット(フルLSB)最大容量を得られますが、最も検出されやすくなります。
- 分数レート画素の一部だけを使用するため容量は下がりますが、不可知覚性は大幅に向上します。
1920x1080のRGB画像には約620万バイトの色情報があり、フルLSBではおよそ777 KBに相当します。しかし、セキュリティを重視した埋め込みではその一部だけを使用します。すべてのLSBを埋めると統計的な異常が生じ、ステガナリシスツールに容易に検出されるためです。
# Rough capacity at 1 bit/channel full LSB:
# width x height x channels / 8 bytes
# 1920 x 1080 x 3 / 8 = ~777,600 bytes (~759 KB)
# In practice use a fraction to stay below detection thresholds.防御側の要点
防御側の視点では、埋め込みの仕組みを理解することで、何に注意すべきかが分かります。
- 形式の不一致JPEGが想定される場面でPNGやBMPが使われている場合、LSB用に選ばれた可逆カバーである可能性があります。
- サイズの異常表示内容に比べてファイルが大きすぎる場合は注意が必要です。
- 防御としての再エンコードすべてのアップロードを再圧縮するプラットフォームは、単純なLSBペイロードを破壊します。安価な対策になります。
- 統計分析フルLSB埋め込みはビット値の自然な分布を平坦化するため、ステガナリシスで検出できます。
これらの特徴が、次のレッスンで扱う隠しデータの検知へとつながります。
理解度チェック
形式の選択を理解できているか確認しましょう。
まとめ:画像と音声のステガノグラフィ
メディアファイルにデータが実際にどのように埋め込まれるかを学びました。
- LSB埋め込みでは、各色サンプルまたは音声サンプルの最下位ビットを上書きします。変化は1段階だけなので知覚できません。
- 長さのプレフィックスや終端によってペイロードの終端を示します。steghideやsteganoなどのツールは、暗号化をオプションで追加しながらこの処理を自動化します。
- 可逆形式(PNG、BMP、WAV)はLSBデータを保持します。非可逆形式(JPEG、MP3)では、周波数領域への埋め込み(DCT/エコー/スペクトラム拡散)が必要です。
- ステゴキーで制御する疑似ランダム配置、ノイズの多い領域への埋め込み、適応型アルゴリズムによってステルス性が向上します。
- 空間領域と周波数領域の選択によって、容量と堅牢性のバランスを取ります。
- 防御側は、形式の不一致、サイズの異常、統計的な特徴を確認し、再エンコードによって単純なペイロードを破壊します。
次は、ステガナリシスを通じて隠しデータを検知する方法を学びます。
AI チューターと学ぶ Cyber Security Academy — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 76
- レッスン
- 303
よくある質問
「画像と音声のステガノグラフィ」レッスンは無料ですか?
はい。「画像と音声のステガノグラフィ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cyber Security Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cyber Security Academyコースには全4レッスンが含まれています。
「画像と音声のステガノグラフィ」で何を学びますか?
メディアファイルにデータを埋め込みます。 ブラウザで直接実行するハンズオンコードでCyber Security Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Cyber Security Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCyber Security Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「画像と音声のステガノグラフィ」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCyber Security Academyレッスンでコードを書いて実行できますか?
はい。すべてのCyber Security Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ステガノグラフィとは
- 画像と音声のステガノグラフィ
- 隠しデータの検知(ステガナリシス)
- 隠れチャネルと情報窃取