ちゃっぴの監禁部屋

ガチガチに締めすぎて動きがとれなくなる。。。

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  405  : 記事  5  : コメント  12043  : トラックバック  134

ニュース

記事カテゴリ

書庫

日記カテゴリ

Communities

Personal Information

Memory 上の機密情報の保護 の続き

Unmanage code での消去方法については前回解説しましたが、manage code ではどうするか?

Manage code は正直非常に厄介です。Manage code ではの問題点はいくつか存在しますが、特に大きな問題は下記です。

  • Data が格納されている memory address が動的
  • Library 内で data の copy されている可能性がある

後者は managed code 特有の問題ではなく、library を利用した場合全般に言えることですね。対処方法としては library を利用しないとかw

前者は managed code 特有の問題ですね。.Net Framework では効率的なmemory 管理を行うため、data が格納される memory address を変更できるようにできています。というよりも、意図しなくても勝手に変更されると言ったほうがいいですね。

これに関しては対応策があります。System.Runtime.InteropServices.GCHandle StructureAlloc(Object, GCHandle) Method が存在し、この第二引数に GCHandleType.Pinned を指定することにより、data が格納される memory address が勝手に変更されないようにすることができます。これを固定した上で、SecureZeroMemory を叫べば一応 data を即時に消去することができます。

なお、.Net Framework には System.Security.SecureString Class が存在するのでそれを利用するという手もあります。こちらは、address の固定化はもちろん内部での暗号化までやってくれるという非常に素晴らしいものなのです。ただし、member methods を見ていただければお分かりの通り、機能がこれでもかというくらい限定されていますので、password とかをそのまま受け渡す程度でしか利用できないでしょう。機能を限定することにより、mehods 内部で勝手に copy されたりする可能性を極限まで低下させる意図があると思いますが、正直これだけでは使えないですね。もう少し、現実を見て柔軟に対応できるようにしてほしいものです。

すべての class に使用後に 0 埋めさせる mode を用意するのが理想だと思っていますが。。。工数めっさかかるな~。

やっぱり、この手のことをきちんとやるには C が一番なのかな~。

投稿日時 : 2010年1月2日 22:31

コメント

# 自動的に 0 埋めしてくれる Class 2010/01/02 23:03 ちゃっぴの監禁部屋
自動的に 0 埋めしてくれる Class

Post Feedback

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