復元できないようにファイルを消すには

解決


Takeshi  2005-09-29 22:12:11  No: 125866

WIN2000,VB6 SP5で開発をしております。

開発中のプログラムの中ではデータを加工するために一時ファイルを作成して
おります。

一時ファイルは処理(プロシージャー)終了後に削除するようにしておりますが
どうしても一時ファイルに重要な情報を書かざるを得ないため、この一時ファイル
を復元ツール等で復元されないようにしたいと思っております。

VBとは異なる話かとは思いますが、ファイルの完全な消去方法についてご存知の
方がいらっしゃいましたらご教授賜りたく、よろしくお願いいたします。


通り巣鴨  2005-09-29 23:08:33  No: 125867

参考になるか、実際に復元できないかはわかりませんが。
ファイルを開いてでたらめデータで埋めてから削除
で復元はされなく?(にくく?)なるのでは?
と想像で書き込みしてみました。


我龍院忠太  2005-09-30 01:53:40  No: 125868

消し方を工夫する方法も有るが、書き込む場所を工夫する手もあるな。


medaka  2005-09-30 03:23:13  No: 125869

暗号化して書き込むとか?


Takeshi  2005-09-30 03:25:53  No: 125870

通り巣鴨様、我龍院忠太様
ご返信ありがとうございます、現在書き込む場所はTEMPフォルダですので
ここも考えないといけないと言う事ですね、考えます。

出来れば消し方の工夫にもトライしてみたいと思います。

ファイルの上書きは同じ場所に同じ名前で上書きすればサイズは同じで無く
てもよろしいのでしょうか。
ダミーデータを作るのに一時ファイルのサイズを調べて、同じサイズの
データを作って上書きすると処理が大変かと思いまして...


Takeshi  2005-09-30 03:37:16  No: 125871

medaka様
ありがとうございます、ですが暗号化したファイルは複合化しないと読み書き
出来ないと思うので、複合化して読み書きさせるために一時ファイルに展開
する必要が別途出てくる事はないでしょうか。

もしメモリ上に複合化して、そのメモリ上のファイルをディスク上に存在する
ファイルのように読み書きさせる事が出来るのであればぜひお教え頂きたいと
思います。

よろしくお願いいたします。


我龍院忠太  2005-09-30 17:21:40  No: 125872

最初に聞く必要があったのですが、なぜデーターをファイルに吐き出さなくては
いけないのでしょうか、
1、ファイルのサイズが極端に大きくて、オン・メモリーでは処理できない。
2、ファイルに落とさなければ処理できない外部のプログラムを使用している。
もし1ならメモリー上にファイルを展開することは出来ないでしょう。
又暗号化して元に戻すにも時間がかかってしまう為現実的では無いでしょう。
もし2なら暗号化することは出来ないでしょう。
又絶対に見られたくないと言うことで有るなら、データを上書きする方法も
上書きする前にプログラムをターミネイトするなどの方法で見られる可能性は
出てきます。


medaka  2005-09-30 17:43:48  No: 125873

.NETなら暗号化ファイルを複合しながらメモリストリームに読み込みすれば
一時ファイルを作らずに済みます
VB6で同じことができるかどうかはわかりませんが
自前でバイナリに暗号化/複合化するDLLなり作ってやれば
できるのでは?

絶対に見られたくないと言うことで有るなら素のデータは書かない
ようにするしかないと思います。


Blue  2005-09-30 19:07:54  No: 125874

> 2、ファイルに落とさなければ処理できない外部のプログラムを使用している。
ならば、CreateProcessでパイプで処理するのですかね。
(VBではやったことないけど。というかかなりめんどくさそう。)


ひろ  2005-09-30 20:08:35  No: 125875

ファイルを使わないというのがベストなんでしょうが、ファイルを使うなら、

案1:読み出しできても解読できないようにする。

  つまりは暗号化です。

  一時ファイルは用が済んだら復号できなくても良いので、使い捨ての暗号鍵を
  毎回動的に生成すれば、その暗号鍵が外部から推定不可能なら後からファイル
  を解読するのは事実上不可能になります。

  この方法は暗号鍵の推定の困難さが安全性の担保になるので、暗号鍵の生成には
  特に気を遣う必要があります。

案2:後から読み出しても無意味なようにする

  終了時にファイルをただ削除するのではなく、ファイル全体を無意味なデータ
  で上書きしてから削除する。

  残留磁気のことを考えると何回か上書きした方がよいかもしれません。また、
  上書きの際に物理的に元と違う場所にデータが書き込まれては意味がないので、
  同じファイルを直接開いてその内容を上書きした方が安全と思います。
  (コピー処理の実装によっては、ファイルのディスク上の配置が完全に元と
    同じになることが保証されないかもしれません)

  この方法の問題点は「削除処理を行うまではデータファイルの内容は危険」
  ということです。

  故意に強制電源切断すればテンポラリファイルがそのまま残りますから、
  その内容を見られたらおしまいです。


Takeshi  2005-10-01 00:26:52  No: 125876

皆様、丁寧に教えて頂いてありがとうございます。
一時ファイルを作成する理由は、現在作成中のプログラム以外(Aとします)で
吐かれたデータをインプットとして再加工しているためです。

このプログラムAは以前から使用している古いプログラムなのですが開発元が
潰れた上にソース等が存在しないため改廃が出来ず、時間とお金の関係で仕方
なくAが作成したデータをインプットデータとして再加工して別にアウトプット
しています。(このデータを一時ファイルと称していました)

以前はさして重要でなかったこのデータの内容が重要度の高い物になってしまった
上、Aからのデータはプレーンな物ですので完全な削除を行ないたいと思ったしだいです。

何とか頑張ってみたいと思います、うまく出来たらこちらでご報告したいと思います、ありがとうございました。


Takeshi  2005-10-01 00:27:41  No: 125877

解決のチェックを忘れてしまいました。


我龍院忠太  2005-10-01 01:17:44  No: 125878

そう言うことであれば、ファイルに上書きで
    filename = "C:\test.txt"
    fileNo = freefile
    Open filename For Binary As #fileNo
    For n = 0 To FileLen(filename)
        Put #1, , &HE5
    Next
    Close (fileNo)
    Kill (filename)
こんなもんで良いのでは。


Takeshi  2005-10-03 18:46:15  No: 125879

我龍院忠太様

ありがとうございます、教えていただいた方法を組み込んでみます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加