Детали аутентификационного шифрования

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

IDataProtector.Protect принимает параметр byte[] и выдает защищенные данные тоже в byte[], и этот формат описан ниже. (Здесь также есть переопределенная версия, которая принимает параметр string и возвращает string. Если используется этот API, у формата защищенных данных будет вот такая структура, но зашифрованная base64url.)

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

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

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

Вот пример защищенных данных.

1
2
3
4
5
6
7
8
9
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)

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

Далее идут данные в указанном формате.

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

Все денные, защищенные заданным ключом, начинаются с 20-байтного заголовка. Администраторы могут использовать это для диагностики при генерации данных. Например, данные выше соответствуют ключу {0c819c80-6619-4019-9536-53f8aaffee57}. Если после проверки репозитория с ключами вы увидите, что этой конкретной датой активации ключа была 2015-01-01, а датой истечения срока службы - 2015-03-01, тогда мы предполагаем, что данные были сгенерированы в этот период времени.

Поделись хорошей новостью с друзьями!
Следи за новостями!