2017-05-11 8 views
0

ProtectedData 클래스를 사용하여 데이터베이스에 암호 정보를 저장하는 C# 응용 프로그램이 있습니다. 나는 local machine의 범위를 사용하고 그것을 이해합니다. DPAPImaster key을 사용하여 암호화하고 OS를 제거하지 않으면 변경되지 않습니다.사용자가 암호를 변경 한 후 ProtectedData.Unprotect

범위 DataProtectionScope.CurrentUser을 사용하고 싶다고 가정 해 봅시다. 내가 이해하기 때문에 사용자 비밀번호로 보호되는 다른master key을 사용합니다. 따라서 사용자가 암호를 변경하면 데이터를 보호하는 마스터 키가 그대로 유지되고 암호를 변경 한 암호 만 변경됩니다.

제 질문은 : 사용자가 암호를 변경 한 후 내 데이터를 데이터베이스에서 검색 할 수 있습니까?

+1

* 다른 질문은 사용자가 암호를 변경 한 후에 DPAPI가 마스터 키에 어떻게 액세스합니까? 대답은 다시 2 단계 과정입니다. 먼저 DPAPI가 암호 변경 모듈에 연결되고 사용자 암호가 변경되면 모든 마스터 키가 새 암호로 다시 암호화됩니다. * [Ref] (https://msdn.microsoft.com/en-us/library) /ms995355.aspx?f=255&MSPPError=-2147217396) –

답변

1

this site을 참조하십시오. 여기에는 시스템을 리버스 엔지니어링하는 논문 (더 중요한 것은 코드)에 대한 링크가 있습니다. 첫 번째 프레젠테이션은 Blackhat Europe 2010에서 this입니다.

기본적으로 현재 비밀번호의 SHA-1 해시는 DPAPI 마스터 키를 보호합니다. DPAPI 마스터 키는 각 DPAPI-blob을 보호합니다 (1 블로 염당도 있습니다). 각 마스터 키에는 보호를 위해 사용되는 암호를 식별하는 GUID가 있습니다. 각 blob에는 암호화에 사용 된 마스터 키를 식별하는 GUID도 있습니다. 이 마스터 키는 3 개월 후에 만료되고 새로운 마스터 키가 생성되지만 이전 마스터 키는 유지됩니다.

암호를 변경하면 모든 마스터 키가 새로운 SHA-1 해시로 다시 암호화되지만 보험으로 (예 : 프로세스가 중단 될 수 있음) 이전 SHA-1 해시도 저장되고 새 SHA로 암호화됩니다 -1 해시 (및 이전 및 새 암호 GUID) (마스터 키에 가까운 CREDHIST라는 파일에서) 모든 blob이 항상 현재 암호로 직접 또는 간접적으로 해독 가능하도록합니다. 이전 암호를 알고 있으면이 방법으로 모든 이전 암호의 암호 해시를 다시 찾을 수 있습니다. 마스터 키와 CREDHIST의 모든 비밀번호 보호 기능은 사용자의 S-ID도 사용합니다 (예 : Windows를 다시 설치 한 후에 변경하면 오래된 BLOB를 해독 할 수 없음).