Поделиться через


Сведения о шифровании с проверкой подлинности в ASP.NET Core

Вызовы IDataProtector.Protect проходят проверку подлинности операций шифрования. Метод Protect предлагает конфиденциальность и подлинность, и связан с цепочкой назначений, которая использовалась для получения этого конкретного экземпляра IDataProtector из корневого IDataProtectionProvider.

IDataProtector.Protect принимает параметр открытого текста байтов[] и создает защищенные полезные данные байтов[], формат которого описан ниже. (Существует также перегрузка метода расширения, которая принимает строковый параметр обычного текста и возвращает строковые защищенные полезные данные. Если этот API использует защищенный формат полезных данных по-прежнему имеет приведенную ниже структуру, но она будет закодирована в кодировке Base64url.)

Формат защищенных полезных данных

Формат защищенных полезных данных состоит из трех основных компонентов:

  • 32-разрядный волшебный заголовок, определяющий версию системы защиты данных.

  • 128-разрядный идентификатор ключа, определяющий ключ, используемый для защиты конкретной полезных данных.

  • Оставшаяся часть защищенной полезных данных зависит от шифратора, инкапсулированного этим ключом. В приведенном ниже примере ключ представляет шифратор AES-256-CBC + HMACSHA256, а полезные данные подразделяются следующим образом:

    • 128-разрядный модификатор ключа.
    • 128-разрядный вектор инициализации.
    • 48 байт выходных данных AES-256-CBC.
    • Тег проверки подлинности HMACSHA256.

Пример защищенной полезных данных показан ниже.

09 F0 C9 F0 80 9C 81 0C 19 66 19 40 95 36 53 F8
AA FF EE 57 57 2F 40 4C 3F 7F CC 9D CC D9 32 3E
84 17 99 16 EC BA 1F 4A A1 18 45 1F 2D 13 7A 28
79 6B 86 9C F8 B7 84 F9 26 31 FC B1 86 0A F1 56
61 CF 14 58 D3 51 6F CF 36 50 85 82 08 2D 3F 73
5F B0 AD 9E 1A B2 AE 13 57 90 C8 F5 7C 95 4E 6A
8A AA 06 EF 43 CA 19 62 84 7C 11 B2 C8 71 9D AA
52 19 2E 5B 4C 1E 54 F0 55 BE 88 92 12 C1 4B 5E
52 C9 74 A0

Из формата полезных данных выше первых 32 битов или 4 байта являются волшебным заголовком, определяющим версию (09 F0 C9 F0 F0 F0)

Следующий 128 бит или 16 байт является идентификатором ключа (80 9C 81 0C 19 66 19 40 95 36 53 F8 AA FF EE 57)

Оставшаяся часть содержит полезные данные и зависит от используемого формата.

Предупреждение

Все полезные данные, защищенные заданным ключом, начинаются с одного 20-байтового заголовка (магическое значение, идентификатор ключа). Администраторы могут использовать этот факт для диагностических целей, чтобы приблизить при создании полезных данных. Например, полезные данные выше соответствуют ключу {aaaaaaaa-0b0b-1c1c-2d2d-33333333}. Если после проверки репозитория ключей вы обнаружите, что дата активации этого ключа была 2015-01-01, а срок действия — 2015-03-01, то можно предположить, что полезные данные (если они не были изменены) были созданы в этом окне, дать или принять небольшой фактор сбоку.