데이터 보호 API

데이터 보호 애플리케이션 프로그래밍 인터페이스(Data Protection Application Programming Interface, DPAPI)는 윈도우 2000 및 이후 버전의 마이크로소프트 윈도우 운영체제에 내장된 구성 요소로 제공되는 간단한 암호화 애플리케이션 프로그래밍 인터페이스이다. 이론적으로 데이터 보호 API는 모든 종류의 데이터를 대칭 암호화할 수 있지만, 실제로는 윈도우 운영체제에서 비대칭 개인 키를 대칭 암호화하는 데 주로 사용되며, 이 때 사용자 또는 시스템 비밀이 엔트로피에 크게 기여한다. DPAPI 내부 작동에 대한 자세한 분석은 2011년 버스츠테인 등이 발표했다.

거의 모든 암호체계에서 가장 어려운 과제 중 하나는 "키 관리"이다. 부분적으로는 복호화 키를 안전하게 저장하는 방법이다. 만약 키가 플레인 텍스트로 저장된다면, 키에 접근할 수 있는 모든 사용자가 암호화된 데이터에 접근할 수 있다. 만약 키를 암호화해야 한다면, 또 다른 키가 필요하며 이는 무한히 반복된다. DPAPI는 개발자가 사용자 로그인 비밀에서 파생된 대칭 키를 사용하여 키를 암호화하거나, 시스템 암호화의 경우 시스템의 도메인 인증 비밀을 사용하여 키를 암호화할 수 있도록 한다.

사용자 RSA 키를 암호화하는 데 사용되는 DPAPI 키는 %APPDATA%\Microsoft\Protect\{SID} 디렉터리에 저장되며, 여기서 {SID}는 해당 사용자의 보안 식별자이다. DPAPI 키는 사용자의 개인 키를 보호하는 마스터 키와 동일한 파일에 저장된다. 일반적으로 64바이트의 임의 데이터이다.

보안 속성
DPAPI는 자체적으로 영구적인 데이터를 저장하지 않고, 단순히 평문을 받아서 암호문을 반환(또는 그 반대)한다.

DPAPI 보안은 마스터 키와 RSA 개인 키를 손상으로부터 보호하는 윈도우 운영 체제의 능력에 의존하며, 대부분의 공격 시나리오에서 이는 최종 사용자 자격 증명의 보안에 가장 크게 의존한다. 주요 암호화/복호화 키는 PBKDF2 함수에 의해 사용자 암호에서 파생된다. 특정 데이터 바이너리 라지 오브젝트는 솔트가 추가되거나 외부 사용자 프롬프트 암호(일명 "강력한 키 보호")가 필요한 방식으로 암호화될 수 있다. 솔트 사용은 구현별 옵션으로 즉, 애플리케이션 개발자의 통제하에 있으며 최종 사용자나 시스템 관리자는 통제할 수 없다.

COM+ 객체를 사용하여 키에 대한 위임된 접근 권한을 부여할 수 있다. 이를 통해 IIS 웹 서버가 DPAPI를 사용할 수 있다.

액티브 디렉터리 백업 키
컴퓨터가 도메인의 구성원일 때, DPAPI는 사용자의 암호가 손실된 경우 데이터 보호를 허용하는 백업 메커니즘을 가지고 있으며, 이를 "자격 증명 로밍"이라고 한다.
도메인 컨트롤러에 새 도메인을 설치할 때, DPAPI와 관련된 공개 및 개인 키 쌍이 생성된다.
클라이언트 워크스테이션에서 마스터 키가 생성될 때, 클라이언트는 인증된 RPC 호출을 통해 도메인 컨트롤러와 통신하여 도메인의 공개 키 사본을 검색한다. 클라이언트는 마스터 키를 도메인 컨트롤러의 공개 키로 암호화한다. 마지막으로, 이 새로운 백업 마스터 키를 기존 마스터 키 저장 방식과 마찬가지로 AppData 디렉터리에 저장한다.

마이크로소프트 소프트웨어의 DPAPI 사용
모든 마이크로소프트 제품에 보편적으로 구현된 것은 아니지만, 마이크로소프트 제품의 DPAPI 사용은 윈도우의 각 후속 버전과 함께 증가했다. 그러나 마이크로소프트 및 타사 개발사의 많은 애플리케이션은 여전히 자체 보호 방식을 선호하거나 최근에야 DPAPI로 전환했다. 예를 들어, 인터넷 익스플로러 4.0~6.0 버전, 아웃룩 익스프레스 및 MSN 익스플로러는 저장된 암호 등 자격 증명을 저장하기 위해 이전 Protected Storage (PStore) API를 사용했다. 인터넷 익스플로러 7은 이제 저장된 사용자 자격 증명을 DPAPI를 사용하여 보호한다.

 윈도우 8의 사진 암호, PIN 및 지문
 윈도우 2000 및 이후 버전의 암호화 파일 시스템
 SQL Server Transparent Data Encryption (TDE) 서비스 마스터 키 암호화
 윈도우 XP용 독립 실행형 버전 및 윈도우 비스타와 윈도우 서버 2008에 통합된 버전의 인터넷 익스플로러 7
 마이크로소프트 엣지
 윈도우 메일 및 윈도우 라이브 메일
 S/MIME용 아웃룩
 SSL/TLS용 인터넷 정보 서비스
 윈도우 Rights Management Services 클라이언트 v1.1 및 이후 버전
 윈도우 2000 및 이후 버전의 EAP/TLS (VPN 인증) 및 802.1x (WiFi 인증)
 윈도우 XP 및 이후 버전의 저장된 사용자 이름 및 암호 (일명 Credential Manager)
 닷넷 프레임워크 2.0 및 이후 버전의 System.Security.Cryptography.ProtectedData
 자체 호스팅 시 기본적으로 Microsoft.Owin (Katana) 인증(쿠키 인증 및 OAuth 토큰 포함)

 각주 

 외부 링크 
 Processus Thief의 DPAPI 작동 방식 (FR) 
 NAI Labs의 윈도우 데이터 보호 API (DPAPI) 백서
 DPAPI를 사용한 데이터 암호화
 방법: ASP.NET 1.1에서 엔터프라이즈 서비스를 사용하여 DPAPI (사용자 저장소) 사용
 .NET Framework 2.0 및 이후 버전의 System.Security.Cryptography.ProtectedData
 DPAPI가 사용자 비밀을 보호하기 위해 MS BackupKey 원격 프로토콜을 사용하는 것에 대한 논의
 윈도우 PStore

분류:암호 소프트웨어
분류:마이크로소프트 윈도우 보안 기술
분류:마이크로소프트 API