2008-09-30 5 views
15

응용 프로그램 실행 사이에 암호화 된 데이터 (몇 개의 작은 문자열)를 저장해야합니다. 사용자가 응용 프로그램을 시작할 때마다 암호문을 제공하지 않기를 바랍니다. 나는. 결국 그것은 암호화 키를 안전하게 저장하는 것으로 이어집니다..Net을 사용하여 암호화 된 데이터를 영구 저장합니다.

RSACryptoServiceProvider를 찾고 PersistentKeyInCsp를 사용했지만 어떻게 작동하는지 잘 모르겠습니다. 응용 프로그램 실행 또는 컴퓨터 다시 시작간에 키 컨테이너가 영구적입니까? 그렇다면 사용자 별 또는 기계 별입니까? 나는. 내 암호화 된 데이터를 사용자의 로밍 프로필에 저장하는 경우 사용자가 다른 컴퓨터에 로그온하면 데이터를 해독 할 수 있습니까?

위의 방법으로 문제가 해결되지 않으면 내 옵션은 무엇입니까 (로밍 프로필을 처리해야합니까).

답변

35

DPAPI (데이터 보호 API)는 원하는 작업을 정확하게 수행합니다. 컴퓨터의 자격 증명이나 사용자 (더 나은)를 암호화 키로 사용하여 임의의 데이터를 대칭 적으로 암호화합니다. 키 관리에 대해 걱정할 필요가 없습니다. Windows가이를 처리합니다. 사용자가 암호를 변경하면 Windows는 사용자의 새 암호를 사용하여 데이터를 다시 암호화합니다.

DPAPI는 System.Security.Cryptography.ProtectedData 클래스와 .NET 노출되어

byte[] plaintextBytes = GetDataToProtect(); 
byte[] encodedBytes = ProtectedData.Protect(plaintextBytes, null, DataProtectionScope.CurrentUser); 

프로텍트 방법의 두 번째 파라미터는 추가적인 애플리케이션으로 사용할 수있는 선택 엔트로피 바이트 배열이며 - 특정 "비밀". , DPAPI가 (here 설명 된대로) 당신이 장소에서 암호화 된 데이터를 저장해야하지만, 로밍 프로필을 제대로 작동

byte[] encodedBytes = GetDataToUnprotect(); 
byte[] plaintextBytes = ProtectedData.Unprotect(encodedBytes, null, DataProtectionScope.CurrentUser); 

(네트워크 공유 :

는 해독 ProtectedData.Unprotect 호출을 사용하려면 IsolatedStorage (IsolatedStorageScope.Roaming 등)를 사용하여 다양한 시스템에서 액세스 할 수 있습니다.

자세한 내용은 MSDN의 ProtectedData 클래스를 참조하십시오. DPAPI 백서 here이 있습니다. 원하는 정보보다 많은 정보가 있습니다.

+0

그냥 후손을 위해, 당신은 어딘가에 더 "대중"(적어도 예를 들어 인트라넷) 그래서 그들은에서 얻을 수 있습니다 지속 처리하기 위해 다른 코드에보고해야합니다 다른 기계. 일반적으로 Environment.SpecialFolder.ApplicationData를 사용하여 컴퓨터 및 사용자 별 위치를 가져올 수 있습니다. –

+0

답변 주셔서 감사합니다. 이것이 1.1에서 어떻게 이루어질 수 있는지 알고 있습니까? ProtectedData는 .NET 2.0의 새로운 기능입니다. –

+1

.NET 1.1에서 DPAPI를 사용하려면 P/Invoke를 사용해야합니다.꽤 완벽한 실행을 보려면 여기를 참조하십시오. http://msdn.microsoft.com/en-us/library/aa302402.aspx –

0

DPAPI 방식에 추가하고 싶습니다.

사용자 저장소 접근 방식을 직접 구현하지는 않았지만 특정 사용자의 데이터를 암호화하고 암호 해독하는 사용자 저장소 접근 방식에 대한 Microsoft 설명서가 있습니다.

컴퓨터 저장소를 사용하여 DPAPI를 사용했습니다. 그것이 당신이하고자하는 것과 맞는 경우를 대비해서 설명 할 것입니다. Windows 서비스를 사용하여 Windows 사용자 프로필을로드하고 해당 사용자의 암호를 사용하여 데이터를 암호화합니다.

참고로 DPAPI는 AES보다 약간 약한 Triple-DES를 사용하지만 어떤 보호 유형을 찾고 있는지 잘 모르겠습니다.

윈도우 데이터 보호 http://msdn.microsoft.com/en-us/library/ms995355.aspx

관련 문제