たにぐちBLOG

C#が好きでたまんない

  PASSJブログ :: ホーム :: 連絡をする :: RSS  :: ATOM :: Login
  31 投稿数 :: 0 ストーリー :: 56 コメント :: 10 トラックバック

過去の記事

カテゴリ

イメージギャラリ

せっかく暗号化しても、いったん復号化してディスクに保存してしまうと、削除してもファイル復活ツールで戻せてしまいます。
ツールを使って実験してみると、なるほど別なファイルにクラスタを使われてさえいなければ、簡単に戻せてしまいます。
#そういえばMS-DOSの時代にUNDELETEなんてツールがありましたね

とある打合せでこの点をズバリ指摘されてしまったのですが、調べてみると色々な方法があるようです。
単に0データで埋めればデータは消せるんじゃないかと思っていましたが、どうやら以前にディスクがどのような状態だったか調べる事も出来るらしく、
安全を期すなら複数回データを上書きする必要があるようです。

1. ランダムなデータを上書き
2. 0データを上書き
3. ファイルの削除

これくらいで十分かな?と思い以下の実験用コードを書いて実験しました。



void FileErase(CString filename)
{
      try
      {
            const int BUF_SIZE = 2048;
            CFile writeFile(filename,
                        CFile::modeWrite |
                        CFile::typeBinary);

            // ファイル長の取得
            int file_len = writeFile.GetLength();
           
            // NULL埋め用
            unsigned char buf_null[BUF_SIZE];
            memset(buf_null, 0, BUF_SIZE);
            // RANDOM埋め用
            unsigned char buf_rand[BUF_SIZE];

            // 乱数初期化
            srand((unsigned int)time(NULL));

            int writeSize = 0;
            while (writeSize < file_len)
            {
                  // 乱数作成
                  for (int i = 0; i < BUF_SIZE; i++)
                  {
                        buf_rand[i] = (unsigned char)(rand() * 256 / (1.0 + RAND_MAX));
                  }
                  // 乱数書込
                  writeFile.Write(buf_rand, BUF_SIZE);
                  writeFile.Flush();

                  // さらにNULLで上書きするために巻き戻す
                  writeFile.Seek(-1 * BUF_SIZE, CFile::current);
                 
                  // NULL書込
                  writeFile.Write(buf_null, BUF_SIZE);
                  writeFile.Flush();

                  writeSize += BUF_SIZE;

            }
            // ファイルを閉じます
            writeFile.Close();
            // ファイルを削除します
            CFile::Remove(filename);
      }
      catch (...)
      {
            throw;
      }
}


実験してみると、復元されたファイルは0埋めされていたので、どうやら成功だったようです。

一時ファイルを作成するプログラムもありますが、そこまで追いかけていくことは難しそうです。

投稿日時 : 2008年1月10日 23:29

コメントを追加

# re: ファイル「完全削除」 2008/01/11 16:05 河端善博
米国国防省準拠 5220.22-M規格, Gutmann など、いろいろな方法があるようですね。
シャドウコピーが設定されていると、「以前のバージョン」で戻せるのですが、それも消すことができると面白いですね。

完全削除ツールには Undelete など、いろいろありますね。
ただ、100GB ぐらいのファイルとなると、時間が・・・



# re: ファイル「完全削除」 2008/01/11 22:08 たにぐち
そうですね。

セキュリティがらみはどこまでやっても完璧はないので、
コストや、現場のユーザの負担などのバランスを
考えなければなりません。

それにしても、廃棄されたOffice向けPCのハードディスクからは
未だに機密データがザクザク出てくるということなので、
その辺りの意識改革はまだまだ必要なのかもしれません。


# re: ファイル「完全削除」 2008/01/19 2:10 ちゃっぴ
標準でも cipher.exe というものがあります。

# re: ファイル「完全削除」 2008/01/20 0:30 たにぐち
cipher.exe 、確認しました。
ちゃっぴさん、ありがとうございます。

直接一般ユーザーが使用するのは敷居が高そうですが、
バッチやプログラム上から実行すれば使えそうですね。

コメント

タイトル:
名前:
Url:
コメント: