プログラムが終了した後で鍵素材が確実にメモリから消去されるようにする方法はありますか?手動で消去してプログラムを実行し続けることができれば、さらに優れたものになります。 Haskellは自動ガベージコレクションを使用しています(空きメモリがある場合はまったく発生しないかもしれません)。私は2番目のタスクが不可能であると仮定します。その目的に役立つものがFFIを使用して実装されるか?コールドブート攻撃:Haskellで機密情報を拘束する方法
答えて
GHCは、不要になったときにメモリをOSに返すことができるため、終了時にメモリを消去するだけでは目標を達成できません。ガベージコレクションは複雑なビジネスですが、一般に、安全なデータの古いコピーがOSのメモリプールに返されないようにする方法はありません。
しかし、OSは別のプロセスに割り当てる前にメモリを空白にします。あなたのメモリを安全に保つためにOSを信頼しないなら、あなたはもっと大きな問題を抱えています。
「信頼できない」とは何を意味するのかよく分かりません。 Haskell GCは信頼できるものですが、プログラムでは何が起こっているのかがほとんど分かりません。
しかし、大きくて複雑なデータ構造ではなく、暗号化キーに関心がある場合、人生は少し良くなります。 Foreign Pointerを使用して、キーのメモリ位置をポイントし、そのビットをファイナライザの一部にブランキングすることができます。メモリブロックを割り当てるコードを書くこともできます。mlocksとそれに続いて、要求に応じてそのメモリのキーサイズのチャンクに外部ポインタを渡します。ファイナライザはキーをワイプします。それはおそらくあなたが望むことをするでしょう。
ForeignPtrのポイントは、GCによって移動または再解釈されないことが保証されていることです。
あなたの答えをありがとう。私はこの "外国人"のものすべてにあまり慣れていないので、私は待って、既存のコードを指し示す答えが現れるかどうかを確認し、そうでない場合は答えを受け入れるかどうかを確認します。 OSが他のプロセスに渡す前にメモリをクリアしても、ここでは役に立ちません。なぜなら、1つのコールドがプラグを引っ張ってRAMモジュールを別のマシンに配置するからです。あまりにも安全であるように思えたら、(ラップトップ)ディスクの暗号化を考えてください。暗号化されていない鍵素材を一時停止する前にメモリから消去することをお勧めします。私はまた、元のポストで自動GCに頼るのが嫌なことを明確にしました。 – Andres
ForeignPtrについては、恐ろしいほど難しいことはありません。チュートリアルについてはhttp://en.wikibooks.org/wiki/Haskell/FFIを参照してください。 –
@AndreasはそのデータのRAMを空にしてプラグを抜かないでしょうか? – amindfv
- 1. インジェクションハックPHP攻撃情報
- 2. OAuth攻撃を防止する方法(攻撃シナリオを参照)
- 3. HTTPS攻撃とMITM攻撃
- 4. CSRF攻撃を実証する方法
- 5. XXE攻撃を防止する方法
- 6. Linuxユーザーを拘束する方法
- 7. google-services.jsonは機密情報ですか?
- 8. AppIDプレフィックスの機密情報ですか?
- 9. OAuthアクセストークンは機密情報ですか?
- 10. 機密情報をiframeに渡す安全な方法
- 11. 攻撃からウェブサイトを守る方法
- 12. 機密情報をログファイルに隠す
- 13. 機密情報をクラウドファンクションに渡す
- 14. XSS攻撃を防ぐ方法tomcat 5.5
- 15. オープンリダイレクト攻撃を防ぐ方法は?
- 16. エラーコードを拘束
- 17. asp.net - SQLインジェクション攻撃後のクリーンアップ方法
- 18. のMavenのpom.xml機密情報やVCS
- 19. 電子メールヘッダーの機密情報?
- 20. 法的サイトSQLインジェクション攻撃
- 21. バッファオーバーフロー攻撃
- 22. XSS攻撃
- 23. 防御攻撃
- 24. ヒープオーバーフロー攻撃
- 25. クロスサイトスクリプティング攻撃、トラブル
- 26. AWSで機密情報を安全に渡す方法ステップ関数
- 27. 拘束ウィンドウwpf
- 28. 機密情報をプロトコルバッファにロードする最も安全な方法
- 29. nginxログのPOSTボディの機密情報をマスクする方法は?
- 30. asp:boundcolumnでxss攻撃を実行する方法
はい、コールドブート攻撃は非常に一般的なので、気にする必要があります。 STを使用して、STREFでデータを保持し、使用後にスクランブルすることができます。あなたがSTRefsの後ろにメモリを混ぜることができるなら、Dunno。 –