2016-06-02 4 views
1

[1]の質問に関連するものが見つかりましたが、ポストの年齢およびC++ 11が成熟していないその点ではなく、それ以外の場合、私は安全なstd :: string typedefを探しています。セキュリティ解除されたパスワードに特化したstd :: string

typedef std::basic_string<char, std::char_traits<char>, SecureStr<char>> string;

[1] - how does one securely clear std::string?

誰もが良い例を知っているだろうか?また、コンパイル時にコードを最適化する必要もありません。そのため、アプリケーションのセキュリティが損なわれます。私はこれがO/Sおよび/またはコンパイラへのAPIをうまく使用しなければかなり問題になることがあることを知っています。

+0

http://crypto.stackexchange.com/を覗いてみてください。私はこれが良い質問だとは思わないが(確かめるためにhttp://crypto.stackexchange.com/help/on-topicをチェックする)、いくつかのリードを見つけるかもしれない。 – user4581301

答えて

0

あなたがリンクした質問の回答は、ブースト特有のものではありません。ブーストは言及していません。これは、std::basic_stringで使用するためのカスタムアロケータです。

しかし、basic_stringの実装によっては、アロケータは実際には呼び出されないかもしれません。 basic_stringには、小さな文字列を内部的に格納するスペースがあり、別個の割り当てを行う必要はありません。したがって、basic_stringをカスタムアロケータでインスタンス化するだけでは十分ではありません。割り当てられたバッファに加えて、文字列オブジェクト自体のメモリもゼロにする必要があります。

これを行う1つの方法は、カスタム削除機能で構築されたunique_ptrを使用することです。 unique_ptrはアロケータを直接処理しませんが、カスタムアロケータを使用してbasic_stringのストレージを割り当ててから、unique_ptrを作成して、カスタムアロケータに委任します。

ところで、これで完了したらメモリをゼロにすることを検討していますが、気になる別のことは、機密データがディスクにページアウトされる可能性があることです。オペレーティングシステムは、RAMに少量のデータをロックしてページアウトされないようにするために、移植性のないAPIを提供します。カスタムアロケータでこれらの機能を利用することができます。

+0

テンプレートがまったく新しいコンセプトですが、これは間違っています。 http://pastebin.com/Jr7NLkVh –

+0

編集:完全なコードx_xを投稿しました。正しいコードは次のとおりです。http://pastebin.com/aQfAaGx7 –

関連する問題