WIN2000,VB6 SP5で開発をしております。
開発中のプログラムの中ではデータを加工するために一時ファイルを作成して
おります。
一時ファイルは処理(プロシージャー)終了後に削除するようにしておりますが
どうしても一時ファイルに重要な情報を書かざるを得ないため、この一時ファイル
を復元ツール等で復元されないようにしたいと思っております。
VBとは異なる話かとは思いますが、ファイルの完全な消去方法についてご存知の
方がいらっしゃいましたらご教授賜りたく、よろしくお願いいたします。
参考になるか、実際に復元できないかはわかりませんが。
ファイルを開いてでたらめデータで埋めてから削除
で復元はされなく?(にくく?)なるのでは?
と想像で書き込みしてみました。
消し方を工夫する方法も有るが、書き込む場所を工夫する手もあるな。
暗号化して書き込むとか?
通り巣鴨様、我龍院忠太様
ご返信ありがとうございます、現在書き込む場所はTEMPフォルダですので
ここも考えないといけないと言う事ですね、考えます。
出来れば消し方の工夫にもトライしてみたいと思います。
ファイルの上書きは同じ場所に同じ名前で上書きすればサイズは同じで無く
てもよろしいのでしょうか。
ダミーデータを作るのに一時ファイルのサイズを調べて、同じサイズの
データを作って上書きすると処理が大変かと思いまして...
medaka様
ありがとうございます、ですが暗号化したファイルは複合化しないと読み書き
出来ないと思うので、複合化して読み書きさせるために一時ファイルに展開
する必要が別途出てくる事はないでしょうか。
もしメモリ上に複合化して、そのメモリ上のファイルをディスク上に存在する
ファイルのように読み書きさせる事が出来るのであればぜひお教え頂きたいと
思います。
よろしくお願いいたします。
最初に聞く必要があったのですが、なぜデーターをファイルに吐き出さなくては
いけないのでしょうか、
1、ファイルのサイズが極端に大きくて、オン・メモリーでは処理できない。
2、ファイルに落とさなければ処理できない外部のプログラムを使用している。
もし1ならメモリー上にファイルを展開することは出来ないでしょう。
又暗号化して元に戻すにも時間がかかってしまう為現実的では無いでしょう。
もし2なら暗号化することは出来ないでしょう。
又絶対に見られたくないと言うことで有るなら、データを上書きする方法も
上書きする前にプログラムをターミネイトするなどの方法で見られる可能性は
出てきます。
.NETなら暗号化ファイルを複合しながらメモリストリームに読み込みすれば
一時ファイルを作らずに済みます
VB6で同じことができるかどうかはわかりませんが
自前でバイナリに暗号化/複合化するDLLなり作ってやれば
できるのでは?
絶対に見られたくないと言うことで有るなら素のデータは書かない
ようにするしかないと思います。
> 2、ファイルに落とさなければ処理できない外部のプログラムを使用している。
ならば、CreateProcessでパイプで処理するのですかね。
(VBではやったことないけど。というかかなりめんどくさそう。)
ファイルを使わないというのがベストなんでしょうが、ファイルを使うなら、
案1:読み出しできても解読できないようにする。
つまりは暗号化です。
一時ファイルは用が済んだら復号できなくても良いので、使い捨ての暗号鍵を
毎回動的に生成すれば、その暗号鍵が外部から推定不可能なら後からファイル
を解読するのは事実上不可能になります。
この方法は暗号鍵の推定の困難さが安全性の担保になるので、暗号鍵の生成には
特に気を遣う必要があります。
案2:後から読み出しても無意味なようにする
終了時にファイルをただ削除するのではなく、ファイル全体を無意味なデータ
で上書きしてから削除する。
残留磁気のことを考えると何回か上書きした方がよいかもしれません。また、
上書きの際に物理的に元と違う場所にデータが書き込まれては意味がないので、
同じファイルを直接開いてその内容を上書きした方が安全と思います。
(コピー処理の実装によっては、ファイルのディスク上の配置が完全に元と
同じになることが保証されないかもしれません)
この方法の問題点は「削除処理を行うまではデータファイルの内容は危険」
ということです。
故意に強制電源切断すればテンポラリファイルがそのまま残りますから、
その内容を見られたらおしまいです。
皆様、丁寧に教えて頂いてありがとうございます。
一時ファイルを作成する理由は、現在作成中のプログラム以外(Aとします)で
吐かれたデータをインプットとして再加工しているためです。
このプログラムAは以前から使用している古いプログラムなのですが開発元が
潰れた上にソース等が存在しないため改廃が出来ず、時間とお金の関係で仕方
なくAが作成したデータをインプットデータとして再加工して別にアウトプット
しています。(このデータを一時ファイルと称していました)
以前はさして重要でなかったこのデータの内容が重要度の高い物になってしまった
上、Aからのデータはプレーンな物ですので完全な削除を行ないたいと思ったしだいです。
何とか頑張ってみたいと思います、うまく出来たらこちらでご報告したいと思います、ありがとうございました。
解決のチェックを忘れてしまいました。
そう言うことであれば、ファイルに上書きで
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)
こんなもんで良いのでは。
我龍院忠太様
ありがとうございます、教えていただいた方法を組み込んでみます。
ツイート | ![]() |