2008-09-02 15 views
31

私はwinformsアプリケーションでこのようなコードをいくつか書いていましたが、ユーザーのメールボックスStorage Quotaをクエリしました。Winformsアプリケーションにパスワードを保存する方法は?

DirectoryEntry mbstore = new DirectoryEntry(
     @"LDAP://" + strhome, 
     m_serviceaccount, 
     [m_pwd], 
     AuthenticationTypes.Secure); 

がどんなに私が試したどのアプローチ(SecureStringをのような)、私は簡単にパスワード(m_pwd)実行のためのプロセスエクスプローラのリフレクターを使用して、または使用して文字列]タブのいずれかを見ることができています。

このコードをサーバーに配置するか、委任などのメカニズムを使用してセキュリティを強化し、サービスアカウントに必要な権限のみを与えることができます。

誰かがハッカーにパスワードを明らかにすることなく、ローカルアプリケーションにパスワードを保存するのに合理的に安全な方法を提案できますか?

正確なパスワード(一致する目的のハッシュだけでなく)を知る必要があるため、ハッシュすることはできません。 暗号化/復号化メカニズムはマシンに依存しているため、機能していません。

答えて

24

を聖別の方法は、CryptoAPIのとデータ保護APIを使用することです

を暗号化するには、このような何か(C++)を使用します。。

DATA_BLOB blobIn, blobOut; 
blobIn.pbData=(BYTE*)data; 
blobIn.cbData=wcslen(data)*sizeof(WCHAR); 

CryptProtectData(&blobIn, description, NULL, NULL, NULL, CRYPTPROTECT_LOCAL_MACHINE | CRYPTPROTECT_UI_FORBIDDEN, &blobOut); 
_encrypted=blobOut.pbData; 
_length=blobOut.cbData; 

復号化はされて反対:あなたはCRYPTPROTECT_LOCAL_MACHINEを指定しない場合

DATA_BLOB blobIn, blobOut; 
blobIn.pbData=const_cast<BYTE*>(data); 
blobIn.cbData=length; 

CryptUnprotectData(&blobIn, NULL, NULL, NULL, NULL, CRYPTPROTECT_UI_FORBIDDEN, &blobOut); 

std::wstring _decrypted; 
_decrypted.assign((LPCWSTR)blobOut.pbData,(LPCWSTR)blobOut.pbData+blobOut.cbData/sizeof(WCHAR)); 

その後、暗号化されたパスワードは安全にレジストリや設定ファイルに保存することができ、あなただけがそれを解読することができます。 LOCAL_MACHINEを指定すると、マシンにアクセスできる人は誰でも入手できます。

2

セキュアな文字列として保存し、ファイルに安全な文字列を保存すると(おそらくIsolated Storageを使用すると、プレーンテキストのパスワードを持つ唯一の時間は、mbstoreを作成するために復号化するときだけです)。 SecureStringまたはCredentialオブジェクトを負いませ

4

この書籍は、Keith Brown著「.NET開発者ガイドWindowsセキュリティ」にあります。それは、あらゆる種類のセキュリティシナリオをカバーする良いサンプルをいくつか持っています。 無料Online versionもご利用いただけます。

11

前述のとおり、Data Protection APIはこれを行う良い方法です。 .NET 2.0以上を使用している場合は、P/Invokeを使用してDPAPIを呼び出す必要はありません。フレームワークは、呼び出しをSystem.Security.Cryptography.ProtectedDataクラスでラップします。

+1

これはどのように行われているのですか? – karlipoppins

+1

@m_oLogin:私の他の回答[ここ](http://stackoverflow.com/questions/154430/persistent-storage-of-encrypted-data-using-net/154687#154687)を参照してください。 –

関連する問題