2013-11-14 2 views
3

내 애플리케이션에 다른 형태의 액세스가 필요한 변수가 필요합니다.보안 데이터를위한 전역 변수

이 변수에 암호를 저장하고 싶습니다. 이 변수를 정의하는 최선의 방법을 알고 싶습니다. 대의원을 통해?

CSP? (하지만 비대칭 키용 CSP, 맞습니까?) 격리 된 저장소가 있습니까? 또는 Program.cs 예를 정적 클래스 단지 방법 : 내 처리에 액세스 할 수 있습니다 트로이 목마로부터 자신을 보호하기 원하기 때문에

static class Data 
{ 
    public static string Value { get; set; } 
} 

내가이 물어, 당신은 ArtMoney :

+1

어쨌든 ['SecureString'] (http://msdn.microsoft.com/en-us/library/system.security.securestring (v = vs.110) .aspx) –

답변

5

I처럼 알고 이미이 사실을 알고 계실지 모르지만 확인을 위해 다시 말씀 드리겠습니다. 동일한 컴퓨터에서 실행되는 트로이 목마로부터 앱을 보호 할 수는 없습니다. 당신은 단지 그것을 더 어렵게 만들 수 있습니다. 상기

상기 SecureString 클래스 따라서 어렵게 다른 프로세스가 그 정보를 추출하기 위해, 패스워드는 단지 짧은 가능한 암호화되지 않은 메모리에있는 것을 보장한다.

을 읽고 SecureString에 저장된 값은 자신의 응용 프로그램조차 쉽지 않습니다.

IntPtr bstr = Marshal.SecureStringToBSTR(password); 

try 
{ 
    // ... 
    // use the bstr 
    // ... 
} 
finally 
{ 
    Marshal.ZeroFreeBSTR(bstr); 
} 

캐릭터가, 다시, 관리에 주위 암호화되지 않은 남아 것이다 관리되는 문자열로 변환되지 의도적으로 입니다 : 그 작업을 수행하는 방법에 대한 예는 BSTR로 변환하는 this article에서 찾을 수 있습니다 가비지 수집 될 때까지 메모리. 올바른 방법은 BSTR (예 : finally 블록에서 0으로 설정)과 직접 상호 작용하는 것입니다 (예 : Marshal.ReadByte 사용). 그리고 예는 this article에서 찾을 수 있습니다.

+0

나는 완전한 스스로를 보호 할 수있는 방법. 암호를 임시 파일에 보관하십시오. 공용 변수에 저장하는 것이 이상적이지 않습니다. 어느 쪽이 더 좋은지 알고 싶습니다. 완벽하지 않습니다, 나는 그것을 알고 있습니다. 나는 최선의 선택에 대해 알고 싶다. SecureString - 이해할 수있는 최선의 옵션입니까? –

+0

@ MaximDroy : 예, 제가 아는 한. 그걸로 일할 수 있으려면 그걸 * 일방적으로 또는 다른 * 메모리에 가지고 있어야하고, SecureString은 추출하기가 어렵다. – Heinzi

0

SecureString 클래스를 살펴보아야합니다. 암호를 안전하게 메모리에 저장해야합니다.

0

Windows ProtectedStorage를 사용할 수 있습니다.