데이터 보호 API
데이터 보호 애플리케이션 프로그래밍 인터페이스(Data Protection Application Programming Interface, DPAPI)는 윈도우 2000 및 이후 버전의 마이크로소프트 윈도우 운영체제에 내장된 구성 요소로 제공되는 간단한 암호화 애플리케이션 프로그래밍 인터페이스이다. 이론적으로 데이터 보호 API는 모든 종류의 데이터를 대칭 암호화할 수 있지만, 실제로는 윈도우 운영체제에서 비대칭 개인 키를 대칭 암호화하는 데 주로 사용되며, 이 때 사용자 또는 시스템 비밀이 엔트로피에 크게 기여한다. DPAPI 내부 작동에 대한 자세한 분석은 2011년 버스츠테인 등이 발표했다.[1]
거의 모든 암호체계에서 가장 어려운 과제 중 하나는 "키 관리"이다. 부분적으로는 복호화 키를 안전하게 저장하는 방법이다. 만약 키가 플레인 텍스트로 저장된다면, 키에 접근할 수 있는 모든 사용자가 암호화된 데이터에 접근할 수 있다. 만약 키를 암호화해야 한다면, 또 다른 키가 필요하며 이는 무한히 반복된다. DPAPI는 개발자가 사용자 로그인 비밀에서 파생된 대칭 키를 사용하여 키를 암호화하거나, 시스템 암호화의 경우 시스템의 도메인 인증 비밀을 사용하여 키를 암호화할 수 있도록 한다.
사용자 RSA 키를 암호화하는 데 사용되는 DPAPI 키는 %APPDATA%\Microsoft\Protect\{SID} 디렉터리에 저장되며, 여기서 {SID}는 해당 사용자의 보안 식별자이다. DPAPI 키는 사용자의 개인 키를 보호하는 마스터 키와 동일한 파일에 저장된다. 일반적으로 64바이트의 임의 데이터이다.
보안 속성
DPAPI는 자체적으로 영구적인 데이터를 저장하지 않고, 단순히 평문을 받아서 암호문을 반환(또는 그 반대)한다.
DPAPI 보안은 마스터 키와 RSA 개인 키를 손상으로부터 보호하는 윈도우 운영 체제의 능력에 의존하며, 대부분의 공격 시나리오에서 이는 최종 사용자 자격 증명의 보안에 가장 크게 의존한다. 주요 암호화/복호화 키는 PBKDF2 함수에 의해 사용자 암호에서 파생된다.[2] 특정 데이터 바이너리 라지 오브젝트는 솔트가 추가되거나 외부 사용자 프롬프트 암호(일명 "강력한 키 보호")가 필요한 방식으로 암호화될 수 있다. 솔트 사용은 구현별 옵션으로 – 즉, 애플리케이션 개발자의 통제하에 있으며 – 최종 사용자나 시스템 관리자는 통제할 수 없다.
COM+ 객체를 사용하여 키에 대한 위임된 접근 권한을 부여할 수 있다. 이를 통해 IIS 웹 서버가 DPAPI를 사용할 수 있다.
액티브 디렉터리 백업 키
컴퓨터가 도메인의 구성원일 때, DPAPI는 사용자의 암호가 손실된 경우 데이터 보호를 허용하는 백업 메커니즘을 가지고 있으며, 이를 "자격 증명 로밍"이라고 한다. 도메인 컨트롤러에 새 도메인을 설치할 때, DPAPI와 관련된 공개 및 개인 키 쌍이 생성된다. 클라이언트 워크스테이션에서 마스터 키가 생성될 때, 클라이언트는 인증된 RPC 호출을 통해 도메인 컨트롤러와 통신하여 도메인의 공개 키 사본을 검색한다. 클라이언트는 마스터 키를 도메인 컨트롤러의 공개 키로 암호화한다. 마지막으로, 이 새로운 백업 마스터 키를 기존 마스터 키 저장 방식과 마찬가지로 AppData 디렉터리에 저장한다.
마이크로소프트 소프트웨어의 DPAPI 사용
모든 마이크로소프트 제품에 보편적으로 구현된 것은 아니지만, 마이크로소프트 제품의 DPAPI 사용은 윈도우의 각 후속 버전과 함께 증가했다. 그러나 마이크로소프트 및 타사 개발사의 많은 애플리케이션은 여전히 자체 보호 방식을 선호하거나 최근에야 DPAPI로 전환했다. 예를 들어, 인터넷 익스플로러 4.0~6.0 버전, 아웃룩 익스프레스 및 MSN 익스플로러는 저장된 암호 등 자격 증명을 저장하기 위해 이전 Protected Storage (PStore) API를 사용했다. 인터넷 익스플로러 7은 이제 저장된 사용자 자격 증명을 DPAPI를 사용하여 보호한다.[3]
- 윈도우 8의 사진 암호, PIN 및 지문
- 윈도우 2000 및 이후 버전의 암호화 파일 시스템
- SQL Server Transparent Data Encryption (TDE) 서비스 마스터 키 암호화[4]
- 윈도우 XP용 독립 실행형 버전 및 윈도우 비스타와 윈도우 서버 2008에 통합된 버전의 인터넷 익스플로러 7
- 마이크로소프트 엣지
- 윈도우 메일 및 윈도우 라이브 메일
- S/MIME용 아웃룩
- SSL/TLS용 인터넷 정보 서비스
- 윈도우 Rights Management Services 클라이언트 v1.1 및 이후 버전
- 윈도우 2000 및 이후 버전의 EAP/TLS (VPN 인증) 및 802.1x (WiFi 인증)
- 윈도우 XP 및 이후 버전의 저장된 사용자 이름 및 암호[5] (일명 Credential Manager)
- 닷넷 프레임워크 2.0 및 이후 버전의 System.Security.Cryptography.ProtectedData[6]
- 자체 호스팅 시 기본적으로 Microsoft.Owin (Katana) 인증(쿠키 인증 및 OAuth 토큰 포함)[7][8]
각주
- ↑ Bursztein, Elie; Picod, Jean Michel (2010). 〈Recovering Windows secrets and EFS certificates offline〉. 《WoOT 2010》. Usenix.
- ↑ “Windows Password Recovery – DPAPI Master Key analysis”. 《Passcape.com》. 2013년 5월 6일에 확인함.
- ↑ Mikhael Felker (2006년 12월 8일). “Password Management Concerns with IE and Firefox, part one”. SecurityFocus.com, Symantec.com. 2010년 3월 28일에 확인함.
- ↑ “Encryption Hierarchy”. 《Msdn.microsoft.com》. April 2012. 2017년 10월 14일에 확인함.
- ↑ “What's New in Security for Windows XP Professional and Windows XP Home Edition”. 《Technet.microsoft.com》. 2009년 9월 11일. 2017년 10월 14일에 확인함.
- ↑ “ProtectedData Class (System.Security.Cryptography)”. 《Msdn2.microsoft.com》. 2017년 10월 14일에 확인함.
- ↑ “CookieAuthenticationOptions.TicketDataFormat Property (Microsoft.Owin.Security.Cookies)”. 2015년 1월 15일에 확인함.
- ↑ “OAuthAuthorizationServerOptions.AccessTokenFormat Property (Microsoft.Owin.Security.OAuth)”. 2015년 10월 27일. 2018년 11월 26일에 확인함.
외부 링크
- Processus Thief의 DPAPI 작동 방식 (FR) 보관됨 2022-10-20 - 웨이백 머신
- NAI Labs의 윈도우 데이터 보호 API (DPAPI) 백서
- DPAPI를 사용한 데이터 암호화
- 방법: ASP.NET 1.1에서 엔터프라이즈 서비스를 사용하여 DPAPI (사용자 저장소) 사용
- .NET Framework 2.0 및 이후 버전의 System.Security.Cryptography.ProtectedData
- DPAPI가 사용자 비밀을 보호하기 위해 MS BackupKey 원격 프로토콜을 사용하는 것에 대한 논의
- 윈도우 PStore
- 웹아카이브 틀 웨이백 링크
- 위키데이터 속성 P18을 사용하는 문서
- 위키데이터 속성 P41을 사용하는 문서
- 위키데이터 속성 P94를 사용하는 문서
- 위키데이터 속성 P117을 사용하는 문서
- 위키데이터 속성 P154를 사용하는 문서
- 위키데이터 속성 P213을 사용하는 문서
- 위키데이터 속성 P227을 사용하는 문서
- 위키데이터 속성 P242를 사용하는 문서
- 위키데이터 속성 P244를 사용하는 문서
- 위키데이터 속성 P245를 사용하는 문서
- 위키데이터 속성 P268을 사용하는 문서
- 위키데이터 속성 P269를 사용하는 문서
- 위키데이터 속성 P271을 사용하는 문서
- 위키데이터 속성 P347을 사용하는 문서
- 위키데이터 속성 P349를 사용하는 문서
- 위키데이터 속성 P350을 사용하는 문서
- 위키데이터 속성 P373을 사용하는 문서
- 위키데이터 속성 P380을 사용하는 문서
- 위키데이터 속성 P396을 사용하는 문서
- 위키데이터 속성 P409를 사용하는 문서
- 위키데이터 속성 P428을 사용하는 문서
- 위키데이터 속성 P434를 사용하는 문서
- 위키데이터 속성 P435를 사용하는 문서
- 위키데이터 속성 P436을 사용하는 문서
- 위키데이터 속성 P454를 사용하는 문서
- 위키데이터 속성 P496을 사용하는 문서
- 위키데이터 속성 P549를 사용하는 문서
- 위키데이터 속성 P650을 사용하는 문서
- 위키데이터 속성 P651을 사용하는 문서
- 위키데이터 속성 P691을 사용하는 문서
- 위키데이터 속성 P716을 사용하는 문서
- 위키데이터 속성 P781을 사용하는 문서
- 위키데이터 속성 P791을 사용하는 문서
- 위키데이터 속성 P864를 사용하는 문서
- 위키데이터 속성 P865를 사용하는 문서
- 위키데이터 속성 P886을 사용하는 문서
- 위키데이터 속성 P902를 사용하는 문서
- 위키데이터 속성 P906을 사용하는 문서
- 위키데이터 속성 P947을 사용하는 문서
- 위키데이터 속성 P950을 사용하는 문서
- 위키데이터 속성 P966을 사용하는 문서
- 위키데이터 속성 P982를 사용하는 문서
- 위키데이터 속성 P1003을 사용하는 문서
- 위키데이터 속성 P1004를 사용하는 문서
- 위키데이터 속성 P1005를 사용하는 문서
- 위키데이터 속성 P1006을 사용하는 문서
- 위키데이터 속성 P1015를 사용하는 문서
- 위키데이터 속성 P1045를 사용하는 문서
- 위키데이터 속성 P1048을 사용하는 문서
- 위키데이터 속성 P1053을 사용하는 문서
- 위키데이터 속성 P1146을 사용하는 문서
- 위키데이터 속성 P1153을 사용하는 문서
- 위키데이터 속성 P1157을 사용하는 문서
- 위키데이터 속성 P1186을 사용하는 문서
- 위키데이터 속성 P1225를 사용하는 문서
- 위키데이터 속성 P1248을 사용하는 문서
- 위키데이터 속성 P1273을 사용하는 문서
- 위키데이터 속성 P1315를 사용하는 문서
- 위키데이터 속성 P1323을 사용하는 문서
- 위키데이터 속성 P1330을 사용하는 문서
- 위키데이터 속성 P1362를 사용하는 문서
- 위키데이터 속성 P1368을 사용하는 문서
- 위키데이터 속성 P1375를 사용하는 문서
- 위키데이터 속성 P1407을 사용하는 문서
- 위키데이터 속성 P1556을 사용하는 문서
- 위키데이터 속성 P1584를 사용하는 문서
- 위키데이터 속성 P1695를 사용하는 문서
- 위키데이터 속성 P1707을 사용하는 문서
- 위키데이터 속성 P1736을 사용하는 문서
- 위키데이터 속성 P1886을 사용하는 문서
- 위키데이터 속성 P1890을 사용하는 문서
- 위키데이터 속성 P1907을 사용하는 문서
- 위키데이터 속성 P1908을 사용하는 문서
- 위키데이터 속성 P1960을 사용하는 문서
- 위키데이터 속성 P1986을 사용하는 문서
- 위키데이터 속성 P2041을 사용하는 문서
- 위키데이터 속성 P2163을 사용하는 문서
- 위키데이터 속성 P2174를 사용하는 문서
- 위키데이터 속성 P2268을 사용하는 문서
- 위키데이터 속성 P2349를 사용하는 문서
- 위키데이터 속성 P2418을 사용하는 문서
- 위키데이터 속성 P2456을 사용하는 문서
- 위키데이터 속성 P2484를 사용하는 문서
- 위키데이터 속성 P2558을 사용하는 문서
- 위키데이터 속성 P2750을 사용하는 문서
- 위키데이터 속성 P2980을 사용하는 문서
- 위키데이터 속성 P3223을 사용하는 문서
- 위키데이터 속성 P3233을 사용하는 문서
- 위키데이터 속성 P3348을 사용하는 문서
- 위키데이터 속성 P3372를 사용하는 문서
- 위키데이터 속성 P3407을 사용하는 문서
- 위키데이터 속성 P3430을 사용하는 문서
- 위키데이터 속성 P3544를 사용하는 문서
- 위키데이터 속성 P3562를 사용하는 문서
- 위키데이터 속성 P3563을 사용하는 문서
- 위키데이터 속성 P3601을 사용하는 문서
- 위키데이터 속성 P3723을 사용하는 문서
- 위키데이터 속성 P3788을 사용하는 문서
- 위키데이터 속성 P3829를 사용하는 문서
- 위키데이터 속성 P3863을 사용하는 문서
- 위키데이터 속성 P3920을 사용하는 문서
- 위키데이터 속성 P3993을 사용하는 문서
- 위키데이터 속성 P4038을 사용하는 문서
- 위키데이터 속성 P4055를 사용하는 문서
- 위키데이터 속성 P4114를 사용하는 문서
- 위키데이터 속성 P4143을 사용하는 문서
- 위키데이터 속성 P4186을 사용하는 문서
- 위키데이터 속성 P4423을 사용하는 문서
- 위키데이터 속성 P4457을 사용하는 문서
- 위키데이터 속성 P4534를 사용하는 문서
- 위키데이터 속성 P4535를 사용하는 문서
- 위키데이터 속성 P4581을 사용하는 문서
- 위키데이터 속성 P4613을 사용하는 문서
- 위키데이터 속성 P4955를 사용하는 문서
- 위키데이터 속성 P5034를 사용하는 문서
- 위키데이터 속성 P5226을 사용하는 문서
- 위키데이터 속성 P5288을 사용하는 문서
- 위키데이터 속성 P5302를 사용하는 문서
- 위키데이터 속성 P5321을 사용하는 문서
- 위키데이터 속성 P5368을 사용하는 문서
- 위키데이터 속성 P5504를 사용하는 문서
- 위키데이터 속성 P5587을 사용하는 문서
- 위키데이터 속성 P5736을 사용하는 문서
- 위키데이터 속성 P5818을 사용하는 문서
- 위키데이터 속성 P6213을 사용하는 문서
- 위키데이터 속성 P6734를 사용하는 문서
- 위키데이터 속성 P6792를 사용하는 문서
- 위키데이터 속성 P6804를 사용하는 문서
- 위키데이터 속성 P6829를 사용하는 문서
- 위키데이터 속성 P7293을 사용하는 문서
- 위키데이터 속성 P7303을 사용하는 문서
- 위키데이터 속성 P7314를 사용하는 문서
- 위키데이터 속성 P7902를 사용하는 문서
- 위키데이터 속성 P8034를 사용하는 문서
- 위키데이터 속성 P8189를 사용하는 문서
- 위키데이터 속성 P8381을 사용하는 문서
- 위키데이터 속성 P8671을 사용하는 문서
- 위키데이터 속성 P8980을 사용하는 문서
- 위키데이터 속성 P9070을 사용하는 문서
- 위키데이터 속성 P9692를 사용하는 문서
- 위키데이터 속성 P9725를 사용하는 문서
- 위키데이터 속성 P9984를 사용하는 문서
- 위키데이터 속성 P10020을 사용하는 문서
- 위키데이터 속성 P10299를 사용하는 문서
- 위키데이터 속성 P10608을 사용하는 문서
- 위키데이터 속성 P10832를 사용하는 문서
- 위키데이터 속성 P11249를 사용하는 문서
- 위키데이터 속성 P11646을 사용하는 문서
- 위키데이터 속성 P11729를 사용하는 문서
- 위키데이터 속성 P12204를 사용하는 문서
- 위키데이터 속성 P12362를 사용하는 문서
- 위키데이터 속성 P12754를 사용하는 문서
- 위키데이터 속성 P13049를 사용하는 문서
- 암호 소프트웨어
- 마이크로소프트 윈도우 보안 기술
- 마이크로소프트 API