데이터 보호: 키 관리 및 수명 기본 설정
- 본 번역문서의 원문은 Key management and lifetime docs.microsoft.com 입니다.
키 관리
데이터 보호 시스템은 자신이 실행되는 운영 환경을 감지해서 별도로 구성하지 않아도 정상적으로 실행되는(Zero-Configuration) 동작 기본값을 제공하려고 시도합니다. 시도되는 구성은 다음과 같습니다.
-
시스템이 Azure 웹 앱(구 Azure 웹 사이트)에서 호스팅 될 경우, 키는 "%HOME%\ASP.NET\DataProtection-Keys" 폴더에 저장됩니다. 이 폴더는 네트워크 저장소에 의해 지원되며 응용 프로그램을 호스팅하는 모든 머신들 간에 동기화됩니다. 저장된 비활성 키는 보호되지 않습니다. 이 폴더는 단일 배포 슬롯에 존재하는 응용 프로그램의 모든 인스턴스에 키 링을 제공합니다. 그러나 스테이징과 프로덕션처럼 개별적인 배포 슬롯 간에는 키 링이 공유되지 않습니다. 따라서 스테이징을 프로덕션으로 스왑하거나 A/B 테스팅을 수행할 때처럼 배포 슬롯을 서로 스왑하면, 데이터 보호를 사용하는 모든 시스템은 이전 슬롯의 키 링을 사용해서 저장된 데이터를 복호화 할 수 없습니다. 결과적으로 이런 작업은 표준 ASP.NET 쿠키 미들웨어를 사용하는 ASP.NET 응용 프로그램의 사용자들이 로그아웃 되는 결과를 가져오는데, 이는 ASP.NET 쿠키 미들웨어가 데이터 보호를 이용해서 쿠키를 보호하기 때문입니다. 슬롯에 영향 받지 않는 키 링을 사용하고 싶다면 Azure Blob 저장소, Azure 주요 자격 증명 모음(Azure Key Vault), SQL 저장소, 또는 Redis 캐시 같은 외부 키 링 공급자를 사용하십시오.
-
사용자 프로필을 사용할 수 있다면 "%LOCALAPPDATA%\ASP.NET\DataProtection-Keys" 폴더에 키가 저장됩니다. 만약 운영 체제가 Windows라면 저장된 비활성 키가 DPAPI를 통해서 암호화됩니다.
-
응용 프로그램이 IIS에서 호스팅 될 경우, 작업자 프로세스 계정에게만 ACL로 허용된 HKLM 레지스트리 하위의 특수한 레지스트리 키에 키가 저장됩니다. 저장된 비활성 키는 DPAPI를 통해서 암호화됩니다.
-
지금까지 살펴본 모든 조건과 일치하지 않으면 현재 프로세스 외부에서는 키가 유지되지 않습니다. 따라서 프로세스가 종료되면 생성된 모든 키가 사라집니다.
개발자는 언제나 모든 제어 권한을 갖고 있으며 키가 저장되는 방식과 위치를 재정의 할 수 있습니다. 이 옵션들 중, 처음 세 가지 옵션은 기존에 <machinekey> 자동 생성 루틴이 동작하던 방식과 유사하며 대부분의 응용 프로그램에 적합한 기본 구성입니다. 마지막 대안 옵션만 개발자가 키 지속성을 원할 경우 유일하게 사전 구성 작업을 수행해야 하는 시나리오지만, 이런 예외적인 시나리오는 매우 드물게 발생합니다.
주의
개발자가 이 기본 구성을 재정의해서 데이터 보호 시스템이 특정 키 저장소를 바라보도록 지정하면, 저장된 비활성 키의 자동 암호화가 비활성화됩니다. 저장된 비활성 키의 보호 기능은 구성을 통해서 다시 활성화시킬 수 있습니다.
키 수명
키는 기본적으로 90일의 수명을 갖고 있습니다. 키가 만료되면 시스템이 자동으로 새로운 키를 생성한 다음, 새로운 키를 활성 키로 설정합니다. 해지된 키가 시스템에 남아 있는 동안에는 여전히 해당 키를 이용해서 보호된 모든 데이터를 보호 해제할 수 있습니다. 더 자세한 정보는 키 관리 문서를 참고하시기 바랍니다.
기본 알고리즘
기본으로 사용되는 페이로드 보호 알고리즘은 기밀성을 위한 AES-256-CBC와 신뢰성을 위한 HMACSHA256입니다. 매 90일 마다 롤링되는 512 비트의 마스터 키는 페이로드 별로 이 알고리즘들에 사용되는 두 개의 하위 키를 파생하는데 사용됩니다. 더 자세한 정보는 하위 키 파생 문서를 참고하시기 바랍니다.
- 권한부여: 개요 2017-01-14 08:00
- 권한부여: 간단한 권한부여 2017-01-14 11:00
- 권한부여: 역할 기반 권한부여 2017-01-14 14:00
- 권한부여: 클레임 기반 권한부여 2017-01-15 08:00
- 권한부여: 사용자 지정 정책 기반 권한부여 2017-01-15 11:00
- 권한부여: 요구사항 처리기와 의존성 주입 2017-01-15 14:00
- 권한부여: 리소스 기반 권한부여 2017-01-16 08:00
- 권한부여: 뷰 기반 권한부여 2017-01-16 11:00
- 권한부여: 스키마별 신원 제한 2017-01-16 14:00
- 인증: ASP.NET Core Identity 살펴보기 2017-01-30 08:00
- 인증: Facebook, Google 및 기타 외부 공급자를 이용한 인증 활성화시키기 2017-02-13 08:00
- 인증: Facebook 인증 구성하기 2017-02-13 11:00
- 인증: Twitter 인증 구성하기 2017-02-20 08:00
- 인증: Google 인증 구성하기 2017-02-20 11:00
- 인증: Microsoft 계정 인증 구성하기 2017-02-20 14:00
- 인증: 계정 확인 및 비밀번호 복구 2017-03-06 08:00
- 인증: SMS를 이용한 2단계 인증 2017-03-13 08:00
- 인증: ASP.NET Core Identity 없이 Cookie 미들웨어 사용하기 2017-03-20 08:00
- 데이터 보호: 데이터 보호 개요 2017-03-27 08:00
- 데이터 보호: 데이터 보호 API 시작하기 2017-03-29 08:00
- 데이터 보호: 소비자 APIs 개요 2017-03-31 08:00
- 데이터 보호: 용도 문자열 2017-04-03 08:00
- 데이터 보호: ASP.NET Core의 용도 계층 구조 및 다중-테넌트(Multi-Tenancy) 2017-04-05 08:00
- 데이터 보호: 비밀번호 해싱 2017-04-07 08:00
- 데이터 보호: 보호된 페이로드의 수명 제한하기 2017-04-10 08:00
- 테이터 보호: 키가 취소된 페이로드의 보호 해제하기 2017-04-12 08:00
- 데이터 보호: 데이터 보호 구성하기 2017-04-14 08:00
- 데이터 보호: 키 관리 및 수명 기본 설정 2017-04-17 08:00
- 데이터 보호: 머신 수준 정책 2017-04-19 08:00
- 데이터 보호: 비-DI 인식 시나리오 2017-04-21 08:00
- 호환성: 응용 프로그램 간 인증 쿠키 공유하기 2017-05-12 08:00
- 호환성: ASP.NET의 <machineKey> 요소 대체하기 2017-05-16 08:00
- 교차 원본 요청 활성화시키기 (CORS) 2017-05-17 08:00
- ASP.NET Core 응용 프로그램에 SSL 적용하기 2017-05-18 08:00
- 개발 중 민감한 응용 프로그램 정보 안전하게 저장하기 2017-05-19 08:00