문제

응용 프로그램 실행 사이에 암호화 된 데이터 (소수의 작은 문자열)를 저장해야합니다. 나는 사용자가 애플리케이션을 시작할 때마다 암호를 제공하는 것을 원하지 않습니다. 즉, 결국 암호화 키를 단단히 저장하는 것입니다.

나는 rsacryptoserviceprovider를 조사하고 persistentkeyincsp를 사용하고 있었지만 그것이 어떻게 작동하는지 잘 모르겠습니다. 응용 프로그램 실행 또는 기계 재시작 사이에 키 컨테이너가 지속적입니까? 그렇다면 사용자 별 또는 기계에 따라 다릅니다. 즉, 암호화 된 데이터를 사용자의 로밍 프로필에 저장하면 사용자가 다른 컴퓨터에 로그인하면 데이터를 해독 할 수 있습니까?

위가 작동하지 않으면 옵션이 무엇입니까 (로밍 프로파일을 다루어야합니다).

도움이 되었습니까?

해결책

DPAPI (Data Protection API)는 원하는 것을 정확하게 수행합니다. 기계의 자격 증명을 사용하여 또는 사용자를 암호화 키로 사용하여 임의의 데이터의 대칭 암호화를 제공합니다. 키 관리에 대해 걱정할 필요가 없습니다. Windows는 당신을 위해 그것을 처리합니다. 사용자가 암호를 변경하면 Windows는 사용자의 새 비밀번호를 사용하여 데이터를 다시 밀어 넣습니다.

DPAPI는 System.security.cryptography.protectedData 클래스와 함께 .NET에 노출됩니다.

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

보호 방법의 두 번째 매개 변수는 선택적 엔트로피 바이트 어레이이며, 추가 응용 프로그램 별 "비밀"으로 사용할 수 있습니다.

해독하려면 ProtectedData.unprotect 호출을 사용하십시오.

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

DPAPI는 로밍 프로파일에서 올바르게 작동합니다 (설명 된 바와 같이 여기), 암호화 된 데이터를 한 장소에 저장해야하지만 분리 된 스토리지 스코프, 다양한 기계에 액세스 할 수 있습니다.

자세한 내용은 MSDN의 ProtectedData 클래스를 참조하십시오. DPAPI 백서가 있습니다 여기, 당신이 원하는 것보다 더 많은 정보를 가지고 있습니다.

다른 팁

DPAPI 접근법에 추가하고 싶습니다.

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

기계 스토어를 사용하여 DPAPI를 사용했습니다. 당신이 원하는 일에 맞는 경우에 대해 설명하겠습니다. Windows 서비스를 사용하여 Windows 사용자 프로필을로드했으며 해당 사용자의 비밀번호는 데이터를 암호화하는 데 사용됩니다.

참고로 DPAPI는 트리플 데스를 사용하여 (AES보다 약간 약할 수 있지만, 어떤 유형의 보호를 찾고 있는지 잘 모르겠습니다.

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top