Winforms 애플리케이션에 비밀번호를 저장하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/40853

  •  09-06-2019
  •  | 
  •  

문제

사용자의 메일함 저장소 할당량을 쿼리하기 위해 작성한 winforms 앱에 이와 같은 코드가 있습니다.

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

내가 어떤 접근 방식을 시도해도(예: SecureString), 비밀번호를 쉽게 확인할 수 있습니다(m_pwd) 실행 파일에 대해 Reflector를 사용하거나 Process Explorer의 문자열 탭을 사용합니다.

이 코드를 서버에 배치하거나 위임과 같은 메커니즘을 사용하고 서비스 계정에 필요한 권한만 부여하여 보안을 강화할 수 있다는 것을 알고 있습니다.

누군가 해커에게 비밀번호를 공개하지 않고 로컬 애플리케이션에 비밀번호를 저장하는 합리적으로 안전한 방법을 제안할 수 있습니까?

정확한 비밀번호(일치 목적의 해시뿐만 아니라)를 알아야 하므로 해싱이 불가능합니다.암호화/암호 해독 메커니즘은 시스템에 따라 다르므로 작동하지 않습니다.

도움이 되었습니까?

해결책

신성한 방법은 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;

해독은 그 반대입니다.

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));

CRYPTPROTECT_LOCAL_MACHINE을 지정하지 않으면 암호화된 비밀번호가 레지스트리 또는 구성 파일에 안전하게 저장될 수 있으며 사용자만이 이를 해독할 수 있습니다.LOCAL_MACHINE을 지정하면 머신에 액세스할 수 있는 사람은 누구나 이를 얻을 수 있습니다.

다른 팁

언급한 대로 데이터 보호 API는 이를 수행하는 좋은 방법입니다..NET 2.0 이상을 사용하는 경우 DPAPI를 호출하기 위해 P/Invoke를 사용할 필요가 없습니다.프레임워크는 System.Security.Cryptography.ProtectedData 클래스를 사용하여 호출을 래핑합니다.

저는 keith Brown이 쓴 Windows 보안에 대한 .NET 개발자 가이드라는 책을 찾았습니다.모든 종류의 보안 시나리오를 다루는 몇 가지 좋은 샘플이 있습니다.무료 온라인 버전 또한 가능합니다.

보안 문자열로 저장하고 보안 문자열을 파일에 저장하는 경우(아마도 다음을 사용하여) 격리된 스토리지, 일반 텍스트 비밀번호를 갖게 되는 유일한 시간은 비밀번호를 해독하여 mbstore를 생성할 때입니다.안타깝게도 생성자는 SecureString 또는 Credential 개체를 사용하지 않습니다.

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