Stringではなくsecurestringを使う理由

資格情報マネージャーから取り出したパスワードをstringではなくsecurestringを使う理由は
どういったところにあるのでしょうか?
(当方ではattendedロボットを使用。OCは導入しておりません。)
securestringを使うとワークフロー開発時も開発者でさえパスワードを見ることはできません。
この意図は開発者でさえパスワードを見えなくして、開発中のセキュリティを高めているという意味でしょうか?
そもそも資格情報マネージャーにパスワード登録は開発者自身が行うことが多いような気がしてます。となると「開発者自身はパスワードを知っているのになぁ。隠す必要なるのかなぁ。」と思ってしまいます。
初歩的な質問で申し訳ございません。
ご指導よろしくお願いいたします。

SecurestringはStringに変換できるため、暗号化する方法は役に立ちません。セキュリティは開発者向けではなく、社内の他の従業員向けです。

これが復号化方法です

string theString = new NetworkCredential("", theSecureString).Password;

こんにちは

他のプログラム等(主に悪意を持ったものが対象と思いますが)から内容を見られなくすることが目的です。通常のStringクラスですと、メモリ上に平文で格納され、また廃棄のタイミングもガベージコレクタ任せになります。仮に格納されているメモリの部分を何らかの方法で読み込むことができれば、情報を取得することができてしまいます。このようなリスクを低減するためのものになります。

コード上の利便性を考えると、SecureStringをStringに変換したくなることが稀にありますよね。

SecureStringを使うと良い点は

・開発者が意図せず認証情報を流出してしまうことを防ぐことができる

点だと思います。
SecureString(というかNetworkCredential)は
・値は暗号化されていて、もとの値はわからない状態
・ログオンアカウントでしか元の値には戻せない
という仕様です。

例えば「他のPCからネットワーク越しに自分のメモリやディスクを読み取られていた」場合、SecureStringならログオンアカウントでしか元の値には戻せないので安心です

ただし「悪意のあるプログラムがインストールされていてローカルで資格情報を復元されてしまった」場合はダメですが、それはウィルス対策ソフトの守備範囲かと思います。

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.