ASP.NET Core 데이터 보호 개요

ASP.NET Core 데이터 보호는 키 관리 및 회전을 포함하여 데이터를 보호하는 암호화 API를 제공합니다.

웹 애플리케이션은 보안에 중요한 데이터를 저장해야 하는 경우가 많습니다. Windows는 데이터 보호 API, DPAPI를 제공하지만 Windows DPAPI는 웹 애플리케이션에서 사용하기 위한 것이 아닙니다.

ASP.NET Core 데이터 보호 스택은 ASP.NET 1.x-4.x에서 <machineKey> 요소에 대한 장기 대체 역할을 수행하도록 설계되었습니다. 기존 암호화 스택의 많은 단점을 해결하는 동시에 최신 애플리케이션에서 발생할 수 있는 대부분의 사용 사례에 대한 기본 제공 솔루션을 제공하도록 설계되었습니다.

문제 설명

전체 문제 설명은 한 문장으로 간략하게 설명할 수 있습니다. 나중에 검색할 수 있도록 신뢰할 수 있는 정보를 유지해야 하지만 지속성 메커니즘은 신뢰하지 않습니다. 웹 용어로는 "신뢰할 수 없는 클라이언트를 통해 라운드트립된 신뢰할 수 있는 상태여야 합니다."로 작성될 수 있습니다.

이에 대한 정식 예는 인증 cookie 또는 전달자 토큰입니다. 서버는 "I am Groot 및 xyz 권한 보유" 토큰을 생성하고 클라이언트에 전달합니다. 이후에 클라이언트는 해당 토큰을 서버에 다시 제공하지만 서버는 클라이언트가 토큰을 위조하지 못했음을 나타내는 일종의 보증을 요구합니다. 따라서 첫 번째 요구 사항: 신뢰성(즉, 무결성, 변조 방지).

지속형 상태는 서버에서 신뢰하므로 이 상태에는 운영 환경과 관련된 정보가 포함될 수 있습니다. 이는 파일 경로, 권한, 핸들 또는 기타 간접 참조의 형식이거나 서버 관련 데이터의 다른 부분에 있을 수 있습니다. 이러한 정보는 일반적으로 신뢰할 수 없는 클라이언트에 공개되어서는 안 됩니다. 따라서 두 번째 요구 사항은 기밀입니다.

마지막으로, 최신 애플리케이션은 구성 요소화되어 있으므로 개별 구성 요소가 시스템의 다른 구성 요소와 상관없이 이 시스템을 활용하려고 합니다. 예를 들어 전달자 토큰 구성 요소가 이 스택을 사용하는 경우 동일한 스택을 사용할 수도 있는 반 CSRF 메커니즘의 간섭 없이 작동해야 합니다. 따라서 최종 요구 사항은 격리입니다.

요구 사항의 범위를 좁히기 위해 추가 제약 조건을 제공할 수 있습니다. 암호화 시스템 내에서 작동하는 모든 서비스는 동일한 신뢰를 받고 직접 제어하는 서비스 외부에서 데이터를 생성하거나 사용할 필요가 없는 것으로 가정합니다. 또한 웹 서비스에 대한 각 요청이 암호 시스템을 한 번 이상 통과할 수 있으므로 작업이 최대한 빠르게 수행되어야 합니다. 이를 통해 시나리오에 적합한 대칭 암호화를 사용할 수 있으며, 필요할 때까지 비대칭 암호화의 할인율을 사용할 수 있습니다.

디자인 원칙

먼저 기존 스택의 문제를 파악했습니다. 이 작업이 완료된 후 기존 솔루션의 환경을 조사하여 기존 솔루션이 아직 검색한 기능을 가지고 있지 않다고 결론을 내렸습니다. 그런 다음, 몇 가지 기본 원칙에 따라 솔루션을 설계했습니다.

  • 시스템은 구성을 간단하게 제공해야 합니다. 시스템은 구성 없이 개발자가 실행에 착수할 수 있는 것이 이상적입니다. 개발자가 특정 측면(예: 키 리포지토리)을 구성해야 하는 경우 이러한 특정 구성을 간단하게 하는 것을 고려해야 합니다.

  • 간단한 소비자 지향 API를 제공합니다. API는 올바르게 사용하기 쉽고 잘못 사용하기는 어렵습니다.

  • 개발자는 주요 관리 원칙을 배울 필요가 없습니다. 시스템은 개발자를 대신해 알고리즘 선택과 키 수명을 처리해야 합니다. 개발자는 원시 키 자료에 대한 액세스 권한이 없어도 됩니다.

  • 키는 가능한 경우 미사용 상태로 보호해야 합니다. 시스템은 적절한 기본 보호 메커니즘을 파악하고 자동으로 적용해야 합니다.

이러한 원칙을 염두에 두고 간단하고 사용하기 쉬운 데이터 보호 스택을 개발했습니다.

ASP.NET Core 데이터 보호 API는 주로 기밀 페이로드의 무한 지속성을 위한 것이 아닙니다. Windows CNG DPAPIAzure Rights Management와 같은 다른 기술은 무한 스토리지의 시나리오에 더 적합하며 강력한 키 관리 기능을 제공합니다. 즉, 기밀 데이터의 장기 보호를 위해 개발자가 ASP.NET Core 데이터 보호 API를 사용할 필요가 없습니다.

대상

데이터 보호 시스템은 5개의 주요 패키지로 나뉩니다. 이러한 API의 다양한 측면은 세 가지 주요 대상을 대상으로 합니다.

  1. 소비자 API 개요는 애플리케이션 및 프레임워크 개발자를 대상으로 합니다.

    "스택 작동 방법이나 구성 방법에 대해서는 알고 싶지 않습니다. API를 성공적으로 사용할 확률이 높은 간단한 방법으로 일부 작업을 수행하고 싶을 뿐입니다."

  2. 구성 API는 애플리케이션 개발자와 시스템 관리자를 대상으로 합니다.

    "내 환경에 기본이 아닌 경로나 설정이 필요하다고 데이터 보호 시스템에 알려야 합니다."

  3. 확장성 API는 사용자 지정 정책을 구현을 담당하는 개발자를 대상으로 합니다. 이러한 API를 사용하는 것은 드문 상황 및 숙련된 보안 개발자로 제한됩니다.

    "고유한 동작 요구 사항이 있기 때문에 시스템 내에서 전체 구성 요소를 교체해야 합니다. 내 요구 사항을 충족하는 플러그 인을 빌드하기 위해 API 표면의 일반적으로 사용되지 않는 부분을 학습하고자 합니다."

패키지 레이아웃

데이터 보호 스택은 5개의 패키지로 구성됩니다.

추가 리소스