ASP.NET Core 데이터 보호ASP.NET Core Data Protection

종종 웹 응용 프로그램 보안에 민감한 데이터를 저장 해야 합니다.Web applications often need to store security-sensitive data. Windows 데스크톱 응용 프로그램에 대 한 DPAPI를 제공 하지만이 웹 응용 프로그램에 적합 하지 않습니다.Windows provides DPAPI for desktop applications but this is unsuitable for web applications. ASP.NET Core 데이터 보호 스택이 개발자 키 관리 등 회전 하는 데이터를 보호 하 여 간단 하 고 사용 하기 쉬운 암호화 API를 제공 합니다.The ASP.NET Core data protection stack provide a simple, easy to use cryptographic API a developer can use to protect data, including key management and rotation.

ASP.NET Core 데이터 보호 스택이을 장기 대체 제공 하도록 설계 되었기 합니다 <machineKey> 요소 asp.net에서 1.x-4.x 합니다.The ASP.NET Core data protection stack is designed to serve as the long-term replacement for the <machineKey> element in ASP.NET 1.x - 4.x. 기존 암호화 스택의 많은 단점을 해결하는 한편, 현대적인 응용 프로그램에서 접할 수 있는 대부분의 사용 사례에 즉각적으로 대응할 수 있는 솔루션을 제공하도록 설계되었습니다.It was designed to address many of the shortcomings of the old cryptographic stack while providing an out-of-the-box solution for the majority of use cases modern applications are likely to encounter.

문제 설명Problem statement

전체 문제 단일 문장과에서 간결 하 게 정의할 수 있습니다. 나중에 검색에 대 한 신뢰할 수 있는 정보를 유지 해야 하지만 지 속성 메커니즘을 신뢰 하지 않습니다.The overall problem statement can be succinctly stated in a single sentence: I need to persist trusted information for later retrieval, but I don't trust the persistence mechanism. 웹의 관점에서 다시 말하자면 "신뢰할 수 있는 상태를 신뢰할 수 없는 클라이언트를 통해서 왕복해야(Round-Trip) 한다"고 할 수 있습니다."In web terms, this might be written as "I need to round-trip trusted state via an untrusted client."

대표적인 사례가 인증 쿠키나 전달자 토큰(Bearer Token)의 경우입니다.The canonical example of this is an authentication cookie or bearer token. 서버가 "나는 Groot고 xyz 권한을 갖고 있다"라는 토큰을 생성해서 클라이언트로 전달합니다.The server generates an "I am Groot and have xyz permissions" token and hands it to the client. 이후 특정 시점에 클라이언트가 다시 서버로 해당 토큰을 제출하지만 서버로서는 클라이언트가 해당 토큰을 변조하지 않았다는 어떤한 보장이 필요합니다.At some future date the client will present that token back to the server, but the server needs some kind of assurance that the client hasn't forged the token. 따라서 필요한 첫 번째 요건은 신뢰성(Authenticity)입니다(무결성(Integrity)Thus the first requirement: authenticity (a.k.a. 또는 변조 방지(Tamper-Proofing)하고도 합니다).integrity, tamper-proofing).

그리고 저장된 상태(정보)를 신뢰하는 주체는 서버이므로, 이 상태에 운영 환경 고유의 정보가 포함되어 있을 수도 있음을 예상할 수 있습니다.Since the persisted state is trusted by the server, we anticipate that this state might contain information that's specific to the operating environment. 이 정보는 파일 경로, 권한, 핸들 혹은 그 밖의 간접 참조, 또는 서버 고유의 데이터 중 일부 같은 형태를 갖출 수도 있습니다.This could be in the form of a file path, a permission, a handle or other indirect reference, or some other piece of server-specific data. 일반적으로 이런 정보들은 신뢰할 수 없는 클라이언트에게는 공개되지 않습니다.Such information should generally not be disclosed to an untrusted client. 따라서 필요한 두 번째 요건은 기밀성(Confidentiality)입니다.Thus the second requirement: confidentiality.

마지막으로 현대적 응용 프로그램은 구성 요소를 기반으로 구축되므로 각 개별 구성 요소는 시스템의 다른 구성 요소들과 관계없이 이 시스템(데이터 보호 스택)을 활용할 수 있어야 합니다.Finally, since modern applications are componentized, what we've seen is that individual components will want to take advantage of this system without regard to other components in the system. 예를 들어, 전달자 토큰 구성 요소가 데이터 보호 스택을 사용한다면 역시 같은 스택을 사용하는 CSRF 방지 메커니즘의 간섭없이 동작할 수 있어야 합니다.For instance, if a bearer token component is using this stack, it should operate without interference from an anti-CSRF mechanism that might also be using the same stack. 따라서 필요한 마지막 요건은 격리(Isolation)입니다.Thus the final requirement: isolation.

더 많은 제약 조건을 규정해서 필요 요건의 범위를 좁힐 수 있습니다.We can provide further constraints in order to narrow the scope of our requirements. 암호화 시스템 내에서 동작하는 모든 서비스를 동등하게 신뢰할 수 있으며, 직접 제어하는 서비스 외부에서 데이터가 생성되거나 사용될 필요가 없다고 가정합니다.We assume that all services operating within the cryptosystem are equally trusted and that the data doesn't need to be generated or consumed outside of the services under our direct control. 또한, 웹 서비스에 대한 각 요청이 암호화 시스템을 여러 번 거칠 수도 있기 때문에 최대한 빠르게 작업을 처리해야 합니다.Furthermore, we require that operations are as fast as possible since each request to the web service might go through the cryptosystem one or more times. 결론적으로 이런 시나리오에는 대칭 암호화가 적합하며, 필요해질 때까지 비대칭 암호화에 대해서는 무시할 수 있습니다.This makes symmetric cryptography ideal for our scenario, and we can discount asymmetric cryptography until such a time that it's needed.

디자인 원칙Design philosophy

먼저 우리는 기존 스택과 관련된 문제점을 확인하는 작업에 착수했습니다.We started by identifying problems with the existing stack. 이 작업을 마치고 기존 솔루션의 현황을 조사해본 결과, 기존 솔루션에는 원하는 기능들이 전혀 존재하지 않는다는 결론을 내렸습니다.Once we had that, we surveyed the landscape of existing solutions and concluded that no existing solution quite had the capabilities we sought. 이후, 다음과 같은 몇 가지 기본 원칙에 따라 솔루션을 설계했습니다.We then engineered a solution based on several guiding principles.

  • 시스템 구성 방식이 간단해야 합니다.The system should offer simplicity of configuration. 이상적으로는 특별히 시스템을 구성하지 않고도(Zero-Configuration) 개발자들이 작업하는 데 전혀 지장이 없어야 합니다.Ideally the system would be zero-configuration and developers could hit the ground running. 개발자가 특정 측면(예: 키 저장소)을 구성해야 할 경우, 해당 특정 구성을 간단히 처리할 수 있는 방법이 제공되어야 합니다.In situations where developers need to configure a specific aspect (such as the key repository), consideration should be given to making those specific configurations simple.

  • 간단한 소비자 지향적인 API를 제공해야 합니다.Offer a simple consumer-facing API. 이 API는 올바르게 사용하기는 쉽고 잘못 사용하기는 어려워야 합니다.The APIs should be easy to use correctly and difficult to use incorrectly.

  • 개발자는 키 관리 하기 위한 원칙을 알아봅니다 해서는 안 됩니다.Developers shouldn't learn key management principles. 알고리즘 선택 및 개발자를 대신해 키 수명 시스템 처리 해야 합니다.The system should handle algorithm selection and key lifetime on the developer's behalf. 이상적으로 개발자 원시 키 자료에 액세스를 해야 적입니다.Ideally the developer should never even have access to the raw key material.

  • 가능한 경우 미사용 키를 보호 되어야 합니다.Keys should be protected at rest when possible. 시스템에서는 적절 한 기본 보호 메커니즘을 파악 하 고 자동으로 적용 해야 합니다.The system should figure out an appropriate default protection mechanism and apply it automatically.

단순 하 고 염두에서 이러한 원칙을 사용 하 여 개발할 사용 하기 쉬운 데이터 보호 스택이 있습니다.With these principles in mind we developed a simple, easy to use data protection stack.

ASP.NET Core 데이터 보호 Api는 하지 주로 기밀 페이로드 무기한 유지 됩니다.The ASP.NET Core data protection APIs are not primarily intended for indefinite persistence of confidential payloads. 와 같은 다른 기술이 Windows CNG DPAPI 하 고 Azure Rights Management 무기한 저장 하는 시나리오에 보다 적합 한 마찬가지로 강력한 키 관리 기능을 갖습니다.Other technologies like Windows CNG DPAPI and Azure Rights Management are more suited to the scenario of indefinite storage, and they have correspondingly strong key management capabilities. 즉, ASP.NET Core 데이터 보호 Api를 사용 하 여 기밀 데이터의 장기 보호에 대 한 개발자를 금지 하는 항목이 없는 합니다.That said, there's nothing prohibiting a developer from using the ASP.NET Core data protection APIs for long-term protection of confidential data.

대상 사용자Audience

데이터 보호 시스템 5 주 패키지도 나뉩니다.The data protection system is divided into five main packages. 이러한 Api의 다양 한 측면에는 세 가지 주요 대상; 대상Various aspects of these APIs target three main audiences;

  1. 합니다 소비자 Api 개요 응용 프로그램 및 프레임 워크 개발자 대상으로 합니다.The Consumer APIs Overview target application and framework developers.

    "스택에서 작동 하는 방법에 대 한 또는 구성 하는 방법에 대 한 자세한 내용을 알아보려면 원하는 하지 않습니다."I don't want to learn about how the stack operates or about how it's configured. 간단히 수행 하려는 일부 작업에서 간단한 방식으로 최대한 성공적으로 Api를 사용 하 여 높은 확률을 사용 하 여. "I simply want to perform some operation in as simple a manner as possible with high probability of using the APIs successfully."

  2. 합니다 구성 Api 응용 프로그램 개발자 및 시스템 관리자를 대상으로 합니다.The configuration APIs target application developers and system administrators.

    "내 환경에 필요한 기본이 아닌 경로 또는 설정을 데이터 보호 시스템에 알릴 하고자 합니다.""I need to tell the data protection system that my environment requires non-default paths or settings."

  3. 확장성 Api 대상 개발자가 사용자 지정 정책을 구현 해야 합니다.The extensibility APIs target developers in charge of implementing custom policy. 이러한 Api에 드문 경우로 제한 되 고 보안 인식 개발자가 발생 합니다.Usage of these APIs would be limited to rare situations and experienced, security aware developers.

    "해야 진정으로 고유한 동작 요구 사항 때문에 시스템 내에서 전체 구성 요소를 대체 합니다."I need to replace an entire component within the system because I have truly unique behavioral requirements. 의사가 내 요구 사항을 충족 하는 플러그 인을 빌드하려면 드물게 사용 되는 부분 API 화면에 알아봅니다. "I am willing to learn uncommonly-used parts of the API surface in order to build a plugin that fulfills my requirements."

패키지 레이아웃Package layout

데이터 보호 스택이 다섯 개의 패키지로 구성 됩니다.The data protection stack consists of five packages.

추가 자료Additional resources

웹 팜에 ASP.NET Core 호스트