ASP.NET Core Защита данных

Веб-приложениям часто требуется хранить конфиденциальные данные. Windows предоставляет API защиты данных (DPAPI) для настольных приложений, но Windows DPAPI не предназначен для использования в веб-приложениях. ASP.NET Coreный стек защиты данных предоставляет простой и простой в использовании криптографический API, который разработчик может использовать для защиты данных, включая управление ключами и вращение.

ASP.NET Coreный стек защиты данных служит для долгосрочной замены < > элемента machineKey в ASP.NET 1. x-4. x. Она была разработана для устранения многих недостатков старого криптографического стека, предоставляя готовое решение для большинства случаев использования современных приложений.

Проблема

Общая проблема может быть кратко сформулирована в одном предложении: мне нужно сохранить надежную информацию для последующего извлечения, но я не доверяю механизму сохраняемости. В веб-терминах это может быть написано следующим образом: "мне требуется надежное состояние приема-передачи с помощью ненадежного клиента".

Канонический пример — это токен проверки подлинности cookie или носителя. Сервер создает маркер «I Грут и имеет разрешение XYZ» и передает его клиенту. В будущем клиент получит этот маркер обратно на сервер, но сервер должен быть уверен, что клиент не подвели маркер. Поэтому первое требование: подлинность ( целостность, проверка на фальсификацию).

Так как сохраненное состояние является доверенным для сервера, мы ожидаем, что это состояние может содержать сведения, относящиеся к операционной среде. Это может быть путь к файлу, разрешение, маркер или другая косвенная ссылка или другой элемент данных, относящихся к серверу. Как правило, такие сведения не должны раскрываться с недоверенным клиентом. Поэтому второе требование: конфиденциальность.

Наконец, поскольку современные приложения являются компонентами, то, что мы видели, некоторые компоненты хотят воспользоваться преимуществами этой системы, не обращаясь к другим компонентам системы. Например, если компонент токена носителя использует этот стек, он должен работать без помех от механизма защиты от CSRF, который также может использовать тот же стек. Таким образом, конечное требование: изоляция.

Мы можем предоставить дополнительные ограничения, чтобы сузить область действия наших требований. Предполагается, что все службы, работающие в криптосистемы, являются одинаково надежными и что данные не должны создаваться или потребляться за пределами служб непосредственно в рамках прямого управления. Кроме того, необходимо, чтобы операции были максимально быстрыми, поскольку каждый запрос к веб-службе может пройти через криптосистемы один или несколько раз. Это делает симметричное шифрование идеальным для нашего сценария, и мы можем задействовать асимметричную криптографию до такого момента времени, когда это необходимо.

Философия проектирования

Мы начали с определения проблем существующего стека. После того как мы составили это, мы проделали обзор существующих решений и готовы, что ни одно из существующих решений не обладает достаточной функциональностью. Затем мы разработали решение на основе нескольких принципов GUID.

  • Система должна предлагать простоту настройки. В идеале система будет иметь нулевую конфигурацию, и разработчики могли попасть на нее. В ситуациях, когда разработчикам необходимо настроить определенный аспект (например, репозиторий ключей), следует учесть, что необходимо сделать эти конкретные конфигурации простыми.

  • Предлагают простой API, ориентированный на потребителей. API-интерфейсы должны быть простыми в использовании, и их сложно использовать неправильно.

  • Разработчики не должны изучать принципы управления ключами. Система должна обрабатывала выбор алгоритма и время существования ключа от имени разработчика. В идеале разработчик не должен даже иметь доступ к необработанному материалу ключа.

  • Если возможно, ключи должны быть защищены неактивных. Система должна определить подходящий механизм защиты по умолчанию и применить его автоматически.

Учитывая эти принципы, мы разработали простой, простой в использовании стек защиты данных.

ASP.NET Core api-интерфейсы защиты данных в основном не предназначены для неопределенного сохранения конфиденциальных полезных данных. другие технологии, такие как Windows CNG DPAPI и Azure Rights Management , более подходят для сценария неопределенного хранилища и имеют соответствующие возможности управления ключами. с другой стороны, разработчик не запрещает использовать ASP.NET Core api-интерфейсы защиты данных для долгосрочной защиты конфиденциальных данных.

Аудитория

Система защиты данных делится на пять основных пакетов. Различные аспекты этих API предназначены для трех основных аудиторий;

  1. Пользовательские API-интерфейсы Обзор предназначены для разработчиков приложений и платформ.

    «Я не хочу изучать, как работает стек или как он настроен. Я просто хочу выполнить какую-либо операцию в качестве простого способа с высокой вероятностью успешного использования API-интерфейсов ".

  2. API конфигурации предназначены для разработчиков приложений и системных администраторов.

    «Мне нужно сообщить системе защиты данных, что моей среде требуются пути или параметры, отличные от используемых по умолчанию».

  3. API расширения предназначены для разработчиков, которые отвечают за реализацию настраиваемой политики. Использование этих API будет ограничено редкими ситуациями и опытными разработчиками, осведомленными о безопасности.

    «Мне нужно заменить весь компонент в системе, поскольку у меня есть уникальные требования к поведению. Я хочу изучать редко используемые части области API, чтобы создать подключаемый модуль, выполняющий мои требования. "

Макет пакета

Стек защиты данных состоит из пяти пакетов.

  • Microsoft. AspNetCore. Data Protection. абстракции содержит IDataProtectionProvider интерфейсы и IDataProtector для создания служб защиты данных. Он также содержит полезные методы расширения для работы с этими типами (например, идатапротектор. Protect). Если экземпляр системы защиты данных создается в другой части и вы используете API, см Microsoft.AspNetCore.DataProtection.Abstractions . ссылку.

  • Microsoft. AspNetCore. Data Protection содержит базовую реализацию системы защиты данных, включая основные криптографические операции, управление ключами, конфигурацию и расширяемость. Создание экземпляра системы защиты данных (например, добавление ее в IServiceCollection ) или изменение или расширение его поведения, ссылки Microsoft.AspNetCore.DataProtection .

  • Microsoft. AspNetCore. в отношении защиты. Extensions содержит дополнительные интерфейсы API, которые могут оказаться полезными для разработчиков, но не входят в основной пакет. Например, этот пакет содержит заводские методы для создания экземпляра системы защиты данных для хранения ключей в расположении в файловой системе без внедрения зависимостей (см. раздел DataProtectionProvider ). Он также содержит методы расширения для ограничения времени существования защищенных полезных данных (см ITimeLimitedDataProtector .).

  • Microsoft. AspNetCore. data protection. SystemWeb можно установить в существующее приложение ASP.NET 4. x, чтобы перенаправить его <machineKey> операции для использования нового стека защиты данных ASP.NET Core. Для получения дополнительной информации см. замените ASP.NET machineKey в ASP.NET Core.

  • Microsoft. AspNetCore. Cryptography. KeyDerivation предоставляет реализацию подпрограммы хэширования паролей PBKDF2 и может использоваться системами, которые должны безопасно обрабатывать пароли пользователей. Для получения дополнительной информации см. Хэширование паролей в ASP.NET Core.

Дополнительные ресурсы

Размещение ASP.NET Core в веб-ферме