こんにちは、Habr。
勉強からの自由時間に行われるステガノグラフィの小さなプロジェクトを紹介したいと思います。
私は、ファイルシステム(以下FSと呼びます)に情報を隠して保存するプロジェクトを作成しました。
適用できます 機密情報を盗む 教育目的のため。
非常に古いLinux ext2 FSがプロトタイプとして選択されました。
実装
実装に関する考慮事項
ext2標準を「廃止」するのが適切な場合は、FSに、システムに関する基本情報を提供するいわゆるスーパーブロックがあることを置き換えることができます。 私の後にブロックビットマップとiノードテーブルが見つかりました。 ほとんどすぐに、現在空のFSブロックに情報を記録するというアイデアが生まれました。 今では、 16進エディタで武装したプログラマからの保護を検討する価値がありました。
暗号化せずに隠された情報を保存する場合、FSブラーにもかかわらず、特にプログラマーが何を探すべきかを知っている場合、それはあまりにも顕著になります。 したがって、ソースファイルのすべてのブロックを暗号化することにしました。 ブロック暗号AESを選択しましたが、ご存じのとおり、これは重要ではありません。
読み取り時に必要なブロックを他のすべてのブロックから分離するために、ブロックの先頭にある特別なマーカーによって各ブロックに追加することが決定されました。 このトークンは、ソースファイルのブロック番号に応じて暗号化されました。 このようなトリックにより、必要なブロックをすぐに見つけることができるだけでなく、正しい順序を見つけることもできました。
システムの一般原則。
記録アルゴリズム
ポイントについて:
- まず、ソースファイルシステムに情報を書き込みます。
- この情報を削除します(必ずしもすべてではありません)。
- マーカーを追加して、同じ長さのブロックに非表示にするためにファイルを分割します。
- これらのブロックを暗号化します。
- 暗号化されたブロックを空のFSブロックに配置します。
以下は、記録アルゴリズムのブロック図です。 アルゴリズムは、入力で4つのファイルを受け取ります。
-変更可能なファイルシステムのイメージ。
-ステガノグラフィファイル。
-AESの暗号化キーを含むファイル。
-マーカー付きファイル。
このアルゴリズムには1つの欠点があることに注意してください:FSにファイルを書き込んだ後、FSに新しい情報を書き込むことはできません。新しい情報は圧縮ファイルに割り当てたブロックに分類される可能性があるためです。 「トラックを掃除する。」
しかし、これをどのように修正できるかは明らかです。FSにブロックを書き込むためのアルゴリズムを書き換える必要があります。 これは明確ですが、非常に時間がかかる作業です。
Proof Of Conseptでは、これを実装しませんでした。
その結果、FSで次の変更が取得されるため、FSはステガノグラフィの前のようになります(オーディオファイルは以前に記録されています)。
そして、それはすでにzaghestanografirovannoy情報を持つFSのように見えます。
読み取りアルゴリズム
ポイントについて:
- キーとマーカーの構築方法を知ってから、最初のN個のマーカーを作成します。Nにファイルシステムブロックの長さを掛けると、zipファイルの長さよりも大きくなります。
- マーカーで始まるFS内のブロックを検索します。
- 受信したブロックを解読し、マーカーを分離します。
- 受信したブロックを正しい順序で収集し、ソースファイルを取得します。
以下は、記録アルゴリズムのブロック図です。 入力は3つのファイルを受け取ります。
-ファイルシステムのイメージ。
-AESの暗号化キーを含むファイル。
-マーカー付きファイル。
プログラムの実行後、読み取りファイルが表示されます。読み取りファイルはステガノグラフィFSファイルから抽出されます。キーまたはマーカーが正しくない場合、読み取りファイルは空になります。
(かわいらしさを愛する人のために、ファイルだけでなく、ファイル名、権利、最終変更時刻などのメタ情報を含む「ヘッダー」を散在させることもできます。)
スタートアップ自動化
便宜上、Linuxでの起動を自動化するbashスクリプトが作成されました(Ubuntu 16.04.3 LTSでテスト済み)。
打ち上げを段階的に分析します。
記録:
- sudo Copy_Flash.sh“ DEVICE”-デバイス(フラッシュ)からFSのイメージを取得します。
- ./Write.sh“ FILE”“ KEY”“ MARKER”-仮想環境を作成し、必要なライブラリをダウンロードし、記録するスクリプトを実行します。
- sudo ./Write_Flash.sh“ DEVICE”-変更されたファイルシステムをDEVICEに書き戻します。
読書:
- sudo Copy_Flash.sh“ DEVICE”-デバイス(フラッシュ)からFSのイメージを取得します。
- ./Read.sh“ KEY” 'MARKER”-仮想環境を作成し、必要なライブラリをダウンロードし、スクリプトを実行して読み取ります。
- 現在のディレクトリで、Readファイルを開きます-これはzagheganografirovannayaの情報です。
おわりに
このステガノグラフィの方法では、おそらく、 Fat32 、 NTFS、 ext4などのより一般的なファイルシステムへの改良、追加のテスト、および拡張が必要です。
しかし、この作業の目的は、ファイルシステムに情報の隠されたストレージを実行できる原理を示すことでした。
このようなアルゴリズムを使用すると、情報を安全に保存できます。キーを知っている場合、そのようなシステムは徹底的な検索ではなく(ただし非常に長いアルゴリズムによって)クラックされる可能性があり、キーを知らなくてもこのシステムは完全に安定しているように見えますが、これは別の記事の理由になる可能性があります。
すべてのコードはPythonバージョン3.5.2で実装されています。 作業の例は 、私のyoutubeチャンネルに掲載されています。 完全なプロジェクトコードはgithubに投稿されています。
(はい、はい、製品版では、たとえばCなどの「高速」で何かを記述する必要があることを知っています。))
この実装では、ステガノグラフィ用の入力ファイルのサイズは1000 kBを超えてはなりません。
研究を計画する際に貴重なアドバイスをしてくれたPavelMSTUと、記事のデザインに関する推奨事項に感謝します。