Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Криптографические операции в .NET выполняются библиотеками операционной системы (ОС). Эта зависимость имеет преимущества:
- Приложения .NET получают преимущества надежности ОС. Обеспечение безопасности библиотек шифрования от уязвимостей является высоким приоритетом для поставщиков ОС. Для этого они предоставляют обновления, которые должны применять системные администраторы.
- Приложения .NET имеют доступ к проверенным алгоритмам FIPS, если библиотеки ОС проверяются с проверкой FIPS.
Зависимость от библиотек ОС также означает, что приложения .NET могут использовать только криптографические функции, поддерживаемые ОС. Хотя все платформы поддерживают некоторые основные функции, некоторые функции, поддерживаемые .NET, не могут использоваться на некоторых платформах. В этой статье определены функции, поддерживаемые на каждой платформе.
В этой статье предполагается, что у вас есть опыт работы с криптографией в .NET. Дополнительные сведения см. в статье .NET Cryptography Model and .NET Cryptographic Services.
Алгоритмы хэширования и проверки подлинности сообщений
Все классы хэш-алгоритма и хэш-проверки подлинности сообщений (HMAC), включая *Managed классы, откладывают в библиотеки ОС за исключением .NET в браузере WASM. В браузере WASM, SHA-1, SHA-2-256, SHA-2-384, SHA-2-512 и эквиваленты HMAC реализуются с помощью управляемого кода.
| Алгоритм | Виндоус | Линукс | macOS | iOS, tvOS, MacCatalyst | Андроид | Браузер |
|---|---|---|---|---|---|---|
| MD5 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
| SHA-1 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| SHA-2-256 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| SHA-2-384 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| SHA-2-512 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| SHA-3-256 | Сборка Windows 11 25324+ | OpenSSL 1.1.1+ | ❌ | ❌ | ❌ | ❌ |
| SHA-3-384 | Сборка Windows 11 25324+ | OpenSSL 1.1.1+ | ❌ | ❌ | ❌ | ❌ |
| SHA-3-512 | Сборка Windows 11 25324+ | OpenSSL 1.1.1+ | ❌ | ❌ | ❌ | ❌ |
| SHAKE-128 | Сборка Windows 11 25324+ | OpenSSL 1.1.1+2 | ❌ | ❌ | ❌ | ❌ |
| SHAKE-256 | Сборка Windows 11 25324+ | OpenSSL 1.1.1+2 | ❌ | ❌ | ❌ | ❌ |
| HMAC-MD5 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
| HMAC-SHA-1 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| HMAC-SHA-2-256 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| HMAC-SHA-2-384 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| HMAC-SHA-2-512 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| HMAC-SHA-3-256 | Сборка Windows 11 25324+ | OpenSSL 1.1.1+ | ❌ | ❌ | ❌ | ❌ |
| HMAC-SHA-3-384 | Сборка Windows 11 25324+ | OpenSSL 1.1.1+ | ❌ | ❌ | ❌ | ❌ |
| HMAC-SHA-3-512 | Сборка Windows 11 25324+ | OpenSSL 1.1.1+ | ❌ | ❌ | ❌ | ❌ |
| KMAC-1281 | Windows 11 Build 26016+ | OpenSSL 3.0+ | ❌ | ❌ | ❌ | ❌ |
| KMAC-2561 | Windows 11 Build 26016+ | OpenSSL 3.0+ | ❌ | ❌ | ❌ | ❌ |
| KMAC-XOF-1281 | Windows 11 Build 26016+ | OpenSSL 3.0+ | ❌ | ❌ | ❌ | ❌ |
| KMAC-XOF-2561 | Windows 11 Build 26016+ | OpenSSL 3.0+ | ❌ | ❌ | ❌ | ❌ |
1Доступно начиная с .NET 9.
2Расширяемая выходная функция потоковой передачи (XOF) доступна начиная с .NET 9. В Linux для этого требуется OpenSSL 3.3.
Симметричное шифрование
Базовые шифры и цепочка выполняются системными библиотеками.
| Шифр + режим | Виндоус | Линукс | macOS | iOS, tvOS, MacCatalyst | Андроид |
|---|---|---|---|---|---|
| AES-CBC | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| AES-ECB | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| AES-CFB8 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| AES-CFB128 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| 3DES-CBC | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| 3DES-ECB | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| 3DES-CFB8 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| 3DES-CFB64 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| DES-CBC | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| DES-ECB | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| DES-CFB8 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| RC2-CBC | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
| RC2-ECB | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
| RC2-CFB | ❌ | ❌ | ❌ | ❌ | ❌ |
Шифрование, прошедшее проверку подлинности
Поддержка шифрования с проверкой подлинности (AE) предоставляется для AES-CCM, AES-GCM и ChaCha20Poly1305 через System.Security.Cryptography.AesCcmSystem.Security.Cryptography.AesGcmклассы и System.Security.Cryptography.ChaCha20Poly1305 классы соответственно.
Так как для поддержки алгоритма требуются более новые API платформы для проверки подлинности, поддержка может не присутствовать на всех платформах.
IsSupported Статичное свойство для классов алгоритма можно использовать для обнаружения во время выполнения, если текущая платформа поддерживает алгоритм или нет.
| Шифр + режим | Виндоус | Линукс | macOS | iOS, tvOS, MacCatalyst | Андроид | Браузер |
|---|---|---|---|---|---|---|
| AES-GCM; | ✔️ | ✔️ | ✔️ | ⚠️ | ✔️ | ❌ |
| AES-CCM | ✔️ | ✔️ | ❌ | ❌ | ✔️ | ❌ |
| ChaCha20Poly1305 | Windows 10 Build 20142+ | OpenSSL 1.1.0+ | ✔️ | ⚠️ | Уровень API 28+ | ❌ |
AES-CCM в macOS
До .NET 10 AES-CCM работал, если была представлена поддерживаемая версия OpenSSL, а загрузчик динамической библиотеки мог его найти. Поддержка OpenSSL в macOS была удалена в .NET 10.
AES-GCM и ChaCha20Poly1305 в iOS, tvOS и MacCatalyst
Поддержка AES-GCM и ChaCha20Poly1305 доступна начиная с .NET 9 в iOS и tvOS 13.0 и более поздних версиях, а также для всех версий MacCatalyst.
Ключи AES-CCM, nonces и теги
Размеры ключей
AES-CCM работает с 128, 192 и 256-разрядными ключами.
Размеры nonce
Класс AesCcm поддерживает 56, 64, 72, 80, 88, 96 и 104-разрядные (7, 8, 9, 10, 11, 12 и 13-байтов).
Размеры тегов
Класс AesCcm поддерживает создание или обработку тегов 32, 48, 64, 80, 96, 112 и 128-разрядных (4, 8, 10, 12, 14 и 16 байтов).
Ключи AES-GCM, nonces и теги
Размеры ключей
AES-GCM работает с 128, 192 и 256-разрядными ключами.
Размеры nonce
Класс AesGcm поддерживает только 96-разрядные (12-байтовые) nonces.
Размер тегов в Windows и Linux, AesGcm класс поддерживает создание или обработку тегов 96, 104, 112, 120 и 128-разрядных (12, 13, 14, 15 и 16-байтов). На платформах Apple размер тега ограничен 128-разрядным (16-байтом) из-за ограничений платформы CryptoKit.
Ключи ChaCha20Poly1305, nonces и теги.
ChaCha20Poly1305 имеет фиксированный размер для тега ключа, nonce и проверки подлинности. ChaCha20Poly1305 всегда использует 256-разрядный ключ, 96-разрядный (12-байтовый) и 128-разрядный (16-байтовый) тег.
Асимметричная криптография
В этом разделе содержатся следующие подразделы:
RSA
Создание ключей RSA (Rivest-Shamir-Adleman) выполняется библиотеками ОС и зависит от их размеров и характеристик производительности.
Операции с ключами RSA выполняются библиотеками ОС, а типы ключей, которые могут быть загружены, подлежат требованиям к ОС.
.NET не предоставляет "необработанные" (непадные) операции RSA.
Поддержка заполнения и дайджеста зависит от платформы:
| Режим заполнения | Windows (CNG) | Linux (OpenSSL) | macOS | iOS, tvOS, MacCatalyst | Андроид | Windows (CAPI) |
|---|---|---|---|---|---|---|
| Шифрование PKCS1 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| OAEP - SHA-1 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| OAEP - SHA-2 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
| OAEP - SHA-3 | Сборка Windows 11 25324+ | OpenSSL 1.1.1+ | ❌ | ❌ | ❌ | ❌ |
| Подпись PKCS1 (MD5, SHA-1) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Подпись PKCS1 (SHA-2) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ⚠️1 |
| Подпись PKCS1 (SHA-3) | Сборка Windows 11 25324+ | OpenSSL 1.1.1+ | ❌ | ❌ | ❌ | ❌ |
| PSS | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
1 Windows CryptoAPI (CAPI) поддерживает подпись PKCS1 с алгоритмом SHA-2. Но отдельный объект RSA может быть загружен в поставщик служб шифрования (CSP), который не поддерживает его.
RSA в Windows
- Windows CryptoAPI (CAPI) используется при каждом
new RSACryptoServiceProvider()использовании. - Api шифрования Windows Next Generation (CNG) используется при
new RSACng()каждом использовании. - Объект, возвращаемый RSA.Create внутренней мощностью Windows CNG. Это использование Windows CNG является подробной реализацией и подлежит изменению.
- Метод GetRSAPublicKey расширения для X509Certificate2 возврата экземпляра RSACng . Это использование RSACng является подробным описанием реализации и подлежит изменению.
- Метод GetRSAPrivateKey расширения для X509Certificate2 текущего RSACng случая предпочитает экземпляр, но если RSACng не удается открыть ключ, RSACryptoServiceProvider будет предпринята попытка. Предпочтительный поставщик является подробной информацией о реализации и подлежит изменению.
Собственный взаимодействие RSA
.NET предоставляет типы, позволяющие программам взаимодействовать с библиотеками ОС, которые использует код шифрования .NET. Используемые типы не преобразуются между платформами и должны использоваться только при необходимости.
| Тип | Виндоус | Линукс | macOS | iOS, tvOS, MacCatalyst | Андроид |
|---|---|---|---|---|---|
| RSACryptoServiceProvider | ✔️ | ⚠️1 | ⚠️1 | ⚠️1 | ⚠️1 |
| RSACng | ✔️ | ❌ | ❌ | ❌ | ❌ |
| RSAOpenSsl | ❌ | ✔️ | ❌ 2 | ❌ | ❌ |
1 В windows RSACryptoServiceProvider можно использовать для совместимости с существующими программами. В этом случае любой метод, требующий взаимодействия ОС, например открытие именованного ключа, вызывает исключение PlatformNotSupportedException.
2 В macOS до .NET 10 RSAOpenSsl работал, если был установлен OpenSSL и можно было найти соответствующий файл библиотеки libcrypto dylib с помощью динамической загрузки библиотек. Эта поддержка была удалена в .NET 10.
ECDSA
Создание ключа ECDSA (алгоритм цифровой подписи с многоточием) выполняется библиотеками ОС и зависит от их размеров и характеристик производительности.
Ключевые кривые ECDSA определяются библиотеками ОС и подвергаются их ограничениям.
| эллиптическая кривая; | Windows 10 | Windows 7 — 8.1 | Линукс | macOS | iOS, tvOS, MacCatalyst | Андроид |
|---|---|---|---|---|---|---|
| NIST P-256 (secp256r1) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| NIST P-384 (secp384r1) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| NIST P-521 (secp521r1) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Кривые мозга (как именованные кривые) | ✔️ | ❌ | ⚠️1 | ❌ | ❌ | ⚠️4 |
| Другие именованные кривые | ⚠️2 | ❌ | ⚠️1 | ❌ | ❌ | ⚠️4 |
| Явные кривые | ✔️ | ❌ | ✔️ | ❌ | ❌ | ✔️ |
| Экспорт или импорт как явный | ✔️ | ❌ 3 | ✔️ | ❌ 3 | ❌ 3 | ✔️ |
1 Дистрибутивы Linux не поддерживают одинаковые именованные кривые.
2 Поддержка именованных кривых добавлена в Windows CNG в Windows 10. Дополнительные сведения см. в разделе CNG с именованными эллиптических кривыми. Именованные кривые недоступны в более ранних версиях Windows, за исключением трех кривых в Windows 7.
3 Экспорт с явными параметрами кривой требует поддержки библиотеки ОС, которая недоступна на платформах Apple или более ранних версиях Windows.
Поддержка 4 Android для некоторых кривых зависит от версии Android. Распространители Android могут также добавлять или удалять кривые из сборки Android.
Собственный взаимодействие ECDSA
.NET предоставляет типы, позволяющие программам взаимодействовать с библиотеками ОС, которые использует код шифрования .NET. Используемые типы не преобразуются между платформами и должны использоваться только непосредственно при необходимости.
| Тип | Виндоус | Линукс | macOS | iOS, tvOS, MacCatalyst | Андроид |
|---|---|---|---|---|---|
| ECDsaCng | ✔️ | ❌ | ❌ | ❌ | ❌ |
| ECDsaOpenSsl | ❌ | ✔️ | ❌* | ❌ | ❌ |
* На macOS до .NET 10 ECDsaOpenSsl работал, если OpenSSL был установлен и соответствующий libcrypto dylib можно было найти с помощью динамической загрузки библиотеки. Эта поддержка была удалена в .NET 10.
ECDH
Создание ключей ECDH (Elliptic Curve Diffie-Hellman) выполняется библиотеками ОС и зависит от их ограничений размера и характеристик производительности.
Класс ECDiffieHellman поддерживает "необработанное" значение вычисления ECDH, а также с помощью следующих функций производного ключа:
- HASH(Z)
- HASH(prepend || Z || добавление)
- HMAC(key, Z)
- HMAC(key, prepend || Z || добавление)
- HMAC(Z, Z)
- HMAC(Z, предустановленная || Z || добавление)
- Tls11Prf(label, seed)
Ключевые кривые ECDH определяются библиотеками ОС и подвергаются их ограничениям.
| эллиптическая кривая; | Windows 10+ | Windows 7 — 8.1 | Линукс | macOS | iOS, tvOS, MacCatalyst | Андроид |
|---|---|---|---|---|---|---|
| NIST P-256 (secp256r1) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| NIST P-384 (secp384r1) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| NIST P-521 (secp521r1) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Кривые мозга (как именованные кривые) | ✔️ | ❌ | ⚠️1 | ❌ | ❌ | ⚠️4 |
| Другие именованные кривые | ⚠️2 | ❌ | ⚠️1 | ❌ | ❌ | ⚠️4 |
| Явные кривые | ✔️ | ❌ | ✔️ | ❌ | ❌ | ✔️ |
| Экспорт или импорт как явный | ✔️ | ❌ 3 | ✔️ | ❌ 3 | ❌ 3 | ✔️ |
1 Дистрибутивы Linux не поддерживают одинаковые именованные кривые.
2 Поддержка именованных кривых добавлена в Windows CNG в Windows 10. Дополнительные сведения см. в разделе CNG с именованными эллиптических кривыми. Именованные кривые недоступны в более ранних версиях Windows, за исключением трех кривых в Windows 7.
3 Экспорт с явными параметрами кривой требует поддержки библиотеки ОС, которая недоступна на платформах Apple или более ранних версиях Windows.
Поддержка 4 Android для некоторых кривых зависит от версии Android. Распространители Android могут также добавлять или удалять кривые из сборки Android.
Собственный взаимодействие ECDH
.NET предоставляет типы, позволяющие программам взаимодействовать с библиотеками ОС, которые использует .NET. Используемые типы не преобразуются между платформами и должны использоваться только непосредственно при необходимости.
| Тип | Виндоус | Линукс | macOS | iOS, tvOS, MacCatalyst | Андроид |
|---|---|---|---|---|---|
| ECDiffieHellmanCng | ✔️ | ❌ | ❌ | ❌ | ❌ |
| ECDiffieHellmanOpenSsl | ❌ | ✔️ | ❌* | ❌ | ❌ |
* До выхода .NET 10 в macOS ECDiffieHellmanOpenSsl работал, если OpenSSL был установлен и соответствующий libcrypto dylib можно было найти через динамическую загрузку библиотек. Эта поддержка была удалена в .NET 10.
DSA
Создание ключей DSA (алгоритм цифровой подписи) выполняется системными библиотеками и зависит от ограничений размера и характеристик производительности.
| Функция | Windows CNG | Линукс | macOS | Windows CAPI | iOS, tvOS, MacCatalyst | Андроид |
|---|---|---|---|---|---|---|
| Создание ключа (<= 1024 бита) | ✔️ | ✔️ | ❌ | ✔️ | ❌ | ✔️ |
| Создание ключа (> 1024 бита) | ✔️ | ✔️ | ❌ | ❌ | ❌ | ✔️ |
| Загрузка ключей (<= 1024 бит) | ✔️ | ✔️ | ✔️ | ✔️ | ❌ | ✔️ |
| Загрузка ключей (> 1024 бита) | ✔️ | ✔️ | ⚠️* | ❌ | ❌ | ✔️ |
| FIPS 186-2 | ✔️ | ✔️ | ✔️ | ✔️ | ❌ | ✔️ |
| FIPS 186-3 (подписи SHA-2) | ✔️ | ✔️ | ❌ | ❌ | ❌ | ✔️ |
* macOS загружает ключи DSA больше 1024 бит, но поведение этих ключей не определено. Они не ведут себя в соответствии с FIPS 186-3.
DSA в Windows
- Windows CryptoAPI (CAPI) используется при каждом
new DSACryptoServiceProvider()использовании. - Api шифрования Windows Next Generation (CNG) используется при
new DSACng()каждом использовании. - Объект, возвращаемый DSA.Create внутренней мощностью Windows CNG. Это использование Windows CNG является подробной реализацией и подлежит изменению.
- Метод GetDSAPublicKey расширения для X509Certificate2 возврата экземпляра DSACng . Это использование DSACng является подробным описанием реализации и подлежит изменению.
- GetDSAPrivateKey Метод расширения для X509Certificate2 предпочитаемого экземпляраDSACng, но если DSACng не удается открыть ключ, DSACryptoServiceProvider будет предпринята попытка. Предпочтительный поставщик является подробной информацией о реализации и подлежит изменению.
Собственный взаимодействие DSA
.NET предоставляет типы, позволяющие программам взаимодействовать с библиотеками ОС, которые использует код шифрования .NET. Используемые типы не преобразуются между платформами и должны использоваться только непосредственно при необходимости.
| Тип | Виндоус | Линукс | macOS | iOS, tvOS, MacCatalyst | Андроид |
|---|---|---|---|---|---|
| DSACryptoServiceProvider | ✔️ | ⚠️1 | ⚠️1 | ❌ | ⚠️1 |
| DSACng | ✔️ | ❌ | ❌ | ❌ | ❌ |
| DSAOpenSsl | ❌ | ✔️ | ❌ 2 | ❌ | ❌ |
1 В windows DSACryptoServiceProvider можно использовать для совместимости с существующими программами. В этом случае любой метод, требующий системного взаимодействия, например открытие именованного ключа, вызывает исключение PlatformNotSupportedException.
2 В macOS до .NET 10 DSAOpenSsl работал, если был установлен OpenSSL и соответствующий libcrypto dylib можно было найти с помощью динамической загрузки библиотеки. Эта поддержка была удалена в .NET 10.
После квантовой криптографии
Постквантовые алгоритмы доступны начиная с .NET 10. Они также доступны для .NET Framework с помощью пакета NuGet Microsoft.Bcl.Cryptography. В следующей таблице поддержки указывается поддержка платформы встроенных компонентов шифрования операционной системы, например созданных из Generate или ImportFromPem. Реализации, производные от базового класса, могут иметь разные характеристики поддержки.
Для встроенных алгоритмов доступно статическое свойство, с помощью которого можно определить, поддерживает ли платформа любой из наборов параметров.
Собственные типы взаимодействия для алгоритмов post-quantum не поддерживают создание ключей или импорт. Они существуют специально для сценариев взаимодействия с собственными типами платформ, такими как EVP_PKEY OpenSSL или CngKey Windows.
ML-KEM
| Алгоритм | Виндоус | Линукс | Яблоко | Андроид | Браузер |
|---|---|---|---|---|---|
| ML-KEM-512 | Инсайдерская программа Windows 11 (последняя сборка) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| ML-KEM-768 | Инсайдеры Windows 11 (последняя версия) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| ML-KEM-1024 | Инсайдерская программа Windows 11 (последняя версия) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
Нативная интероперабельность ML-KEM
- MLKemOpenSsl: OpenSSL 3.5.0+
- MLKemCng: Участники программы Windows 11 Insider (Последняя сборка)
ML-DSA
ML-DSA имеет чистый и предхешированный вариант (HashML-DSA). В следующей таблице указаны как оригинальные, так и прехэшированные варианты.
| Алгоритм | Виндоус | Линукс | Яблоко | Андроид | Браузер |
|---|---|---|---|---|---|
| ML-DSA-44 | Windows 11 Инсайдеры (Последние) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| ML-DSA-65 | Windows 11 Insider Preview (последняя версия) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| ML-DSA-87 | Инсайдеры Windows 11 (последнее обновление) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| ML-DSA-44 External Mu (μ)1 | ❌ | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| ML-DSA-65 External Mu (μ)1 | ❌ | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| ML-DSA-87 External Mu (μ)1 | ❌ | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
1 Поддержка внешнего Mu предназначена для подписывания и проверки только Mu. Вычисление Mu не поддерживается.
Нативная межоперабельность ML-DSA
- MLDsaOpenSsl: OpenSSL 3.5.0+
- MLDsaCng: Участники программы Windows 11 Insider (новейшая версия)
SLH-DSA
SLH-DSA имеет основной и предхешируемый варианты (HashSLH-DSA). В следующей таблице отражены как необработанные, так и прехешированные варианты.
| Алгоритм | Виндоус | Линукс | Яблоко | Андроид | Браузер |
|---|---|---|---|---|---|
| SLH-DSA-SHA2-128f | ❌ | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| SLH-DSA-SHA2-128s | ❌ | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| SLH-DSA-SHA2-192f | ❌ | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| SLH-DSA-SHA2-192s | ❌ | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| SLH-DSA-SHA2-256f | ❌ | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| SLH-DSA-SHA2-256s | ❌ | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| SLH-DSA-SHAKE-128f | ❌ | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| SLH-DSA-SHAKE-128s | ❌ | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| SLH-DSA-SHAKE-192f | ❌ | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| SLH-DSA-SHAKE-192s | ❌ | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| SLH-DSA-SHAKE-256f | ❌ | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| SLH-DSA-SHAKE-256s | ❌ | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
Встроенная совместимость SLH-DSA
- SlhDsaOpenSsl: OpenSSL 3.5.0+
- SlhDsaCng: не поддерживается
Составные ML-DSA
| Алгоритм | Виндоус | Линукс | Яблоко | Андроид | Браузер |
|---|---|---|---|---|---|
| MLDSA44-RSA2048-PSS-SHA256 | Программа Инсайдеров Windows 11 (Последняя версия) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| MLDSA44-RSA2048-PKCS15-SHA256 | Инсайдерская программа Windows 11 (последнее обновление) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| MLDSA44-Ed25519-SHA512 | ❌ | ❌ | ❌ | ❌ | ❌ |
| MLDSA44-ECDSA-P256-SHA256 | Программы предварительной оценки Windows 11 (последняя версия) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| MLDSA65-RSA3072-PSS-SHA512 | Windows 11 Insiders (новейшая сборка) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| MLDSA65-RSA3072-PKCS15-SHA512 | Участники программы Windows 11 Insiders (последняя версия) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| MLDSA65-RSA4096-PSS-SHA512 | Инсайдеры Windows 11 (последняя версия) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| MLDSA65-RSA4096-PKCS15-SHA512 | Программы предварительной оценки Windows 11 (последняя версия) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| MLDSA65-ECDSA-P256-SHA512 | Инсайдерская программа Windows 11 (последняя версия) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| MLDSA65-ECDSA-P384-SHA512 | Windows 11 Инсайдеры (Последние) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| MLDSA65-ECDSA-brainpoolP256r1-SHA512 | Программы предварительной оценки Windows 11 (последняя версия) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| MLDSA65-Ed25519-SHA512 | ❌ | ❌ | ❌ | ❌ | ❌ |
| MLDSA87-ECDSA-P384-SHA512 | Windows 11 Инсайдеры (последняя версия) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| MLDSA87-ECDSA-brainpoolP384r1-SHA512 | Участники программы Windows 11 Инсайдеры (самая последняя версия) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| MLDSA87-Ed448-SHAKE256 | ❌ | ❌ | ❌ | ❌ | ❌ |
| MLDSA87-RSA3072-PSS-SHA512 | Windows 11 Инсайдеры (Последнее обновление) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| MLDSA87-RSA4096-PSS-SHA512 | Участники программы Windows 11 Insider (последняя версия) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| MLDSA87-ECDSA-P521-SHA512 | Программа Windows 11 Insider (последняя сборка) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
Композитное взаимодействие ML-DSA
- CompositeMLDsaCng: не поддерживается
Сертификаты X.509
Большая часть поддержки сертификатов X.509 в .NET поставляется из библиотек ОС. Чтобы загрузить сертификат в X509Certificate2 .NET или X509Certificate экземпляр, сертификат должен быть загружен базовой библиотекой ОС.
Чтение PKCS12/PFX
| Сценарий | Виндоус | Линукс | macOS | iOS, tvOS, MacCatalyst | Андроид |
|---|---|---|---|---|---|
| Нет значения | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Один сертификат, закрытый ключ не | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Один сертификат с закрытым ключом | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Несколько сертификатов, закрытых ключей нет | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Несколько сертификатов, один закрытый ключ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Несколько сертификатов, несколько закрытых ключей | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Запись PKCS12/PFX
| Сценарий | Виндоус | Линукс | macOS | iOS, tvOS, MacCatalyst | Андроид |
|---|---|---|---|---|---|
| Нет значения | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Один сертификат, закрытый ключ не | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Один сертификат с закрытым ключом | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Несколько сертификатов, закрытых ключей нет | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Несколько сертификатов, один закрытый ключ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Несколько сертификатов, несколько закрытых ключей | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Эфемерная загрузка | ✔️ | ✔️ | ❌ | ✔️ | ✔️ |
macOS не может загружать закрытые ключи сертификата без объекта цепочки ключей, который требует записи на диск. Цепочки ключей создаются автоматически для загрузки PFX и удаляются, когда они больше не используются. Так как параметр X509KeyStorageFlags.EphemeralKeySet означает, что закрытый ключ не должен быть записан на диск, утверждая, что флаг в macOS приводит к тому, что он приводит к PlatformNotSupportedException.
Запись коллекции сертификатов PKCS7
Windows и Linux выдают большие двоичные объекты PKCS7 с кодировкой DER. macOS выдает большие двоичные объекты pKCS7 с неограниченной длиной в кодировке CER.
X509Store
В X509Store Windows класс представляет API Магазина сертификатов Windows. Эти API работают так же в .NET Core и .NET 5, что и в платформа .NET Framework.
В X509Store Windows класс представляет собой проекцию решений доверия системы (только для чтения), решений доверия пользователей (чтение и запись) и хранилища ключей пользователя (чтение и запись).
В следующих таблицах показано, какие сценарии поддерживаются на каждой платформе. Для неподдерживаемых сценариев (❌ в таблицах) CryptographicException создается исключение.
Мой магазин
| Сценарий | Виндоус | Линукс | macOS | iOS, tvOS, MacCatalyst | Андроид |
|---|---|---|---|---|---|
| Открытие CurrentUser\My (ReadOnly) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Открытие CurrentUser\My (ReadWrite) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Открытие CurrentUser\My (ExistingOnly) | ✔️ | ⚠️ | ✔️ | ✔️ | ✔️ |
| Открытие LocalMachine\My | ✔️ | ❌ | ✔️ | ✔️ | ✔️ |
В Linux хранилища создаются при первой записи и по умолчанию не существуют пользовательские хранилища, поэтому открытие CurrentUser\My сбоем ExistingOnly может завершиться ошибкой.
В macOS CurrentUser\My хранилище — это цепочка ключей по умолчанию пользователя, которая по умолчанию.login.keychain Магазин LocalMachine\My .System.keychain
Корневое хранилище
| Сценарий | Виндоус | Линукс | macOS | iOS, tvOS, MacCatalyst | Андроид |
|---|---|---|---|---|---|
| Открытие CurrentUser\Root (ReadOnly) | ✔️ | ✔️ | ✔️ | ❌ | ✔️ |
| Открытие CurrentUser\Root (ReadWrite) | ✔️ | ✔️ | ❌ | ❌ | ❌ |
| Открытие CurrentUser\Root (ExistingOnly) | ✔️ | ⚠️ | ✔️ (если ReadOnly) | ❌ | ✔️ (если ReadOnly) |
| Открытие LocalMachine\Root (ReadOnly) | ✔️ | ✔️ | ✔️ | ❌ | ✔️ |
| Открытие LocalMachine\Root (ReadWrite) | ✔️ | ❌ | ❌ | ❌ | ❌ |
| Открытие LocalMachine\Root (ExistingOnly) | ✔️ | ⚠️ | ✔️ (если ReadOnly) | ❌ | ✔️ (если ReadOnly) |
В Linux LocalMachine\Root хранилище является интерпретацией пакета ЦС в пути по умолчанию для OpenSSL.
В macOS CurrentUser\Root хранилище представляет собой интерпретацию SecTrustSettings результатов для домена доверия пользователей. Хранилище LocalMachine\Root представляет собой интерпретацию SecTrustSettings результатов для доменов доверия администратора и системы.
Промежуточное хранилище
| Сценарий | Виндоус | Линукс | macOS | iOS, tvOS, MacCatalyst | Андроид |
|---|---|---|---|---|---|
| Открытие CurrentUser\Intermediate (ReadOnly) | ✔️ | ✔️ | ✔️ | ❌ | ❌ |
| Открытие CurrentUser\Intermediate (ReadWrite) | ✔️ | ✔️ | ❌ | ❌ | ❌ |
| Открытие CurrentUser\Intermediate (ExistingOnly) | ✔️ | ⚠️ | ✔️ (если ReadOnly) | ❌ | ❌ |
| Открытие LocalMachine\Intermediate (ReadOnly) | ✔️ | ✔️ | ✔️ | ❌ | ❌ |
| Открытие LocalMachine\Intermediate (ReadWrite) | ✔️ | ❌ | ❌ | ❌ | ❌ |
| Открытие LocalMachine\Intermediate (ExistingOnly) | ✔️ | ⚠️ | ✔️ (если ReadOnly) | ❌ | ❌ |
В Linux CurrentUser\Intermediate хранилище используется в качестве кэша при скачивании промежуточных ЦС своими записями доступа к данным центра в успешной сборке X509Chain. Хранилище LocalMachine\Intermediate — это интерпретация пакета ЦС в пути по умолчанию для OpenSSL.
В macOS CurrentUser\Intermediate магазин рассматривается как пользовательское хранилище. Сертификаты, добавленные в это хранилище, не влияют на сборку цепочки X.509.
Запрещенное хранилище
| Сценарий | Виндоус | Линукс | macOS | iOS, tvOS, MacCatalyst | Андроид |
|---|---|---|---|---|---|
| Открытие CurrentUser\Disallowed (ReadOnly) | ✔️ | ⚠️ | ✔️ | ✔️ | ✔️ |
| Открытие CurrentUser\Disallowed (ReadWrite) | ✔️ | ⚠️ | ❌ | ❌ | ❌ |
| Открытие CurrentUser\Disallowed (ExistingOnly) | ✔️ | ⚠️ | ✔️ (если ReadOnly) | ✔️ (если ReadOnly) | ✔️ (если ReadOnly) |
| Открытие LocalMachine\Disallowed (ReadOnly) | ✔️ | ❌ | ✔️ | ✔️ | ✔️ |
| Открытие LocalMachine\Disallowed (ReadWrite) | ✔️ | ❌ | ❌ | ❌ | ❌ |
| Открытие LocalMachine\Disallowed (ExistingOnly) | ✔️ | ❌ | ✔️ (если ReadOnly) | ✔️ (если ReadOnly) | ✔️ (если ReadOnly) |
В Linux Disallowed магазин не используется в создании цепочки и пытается добавить в него CryptographicExceptionсодержимое. При CryptographicException открытии Disallowed хранилища создается исключение, если оно уже приобрело содержимое.
В macOS хранилища CurrentUser\Disallowed и LocalMachine\Disallowed являются интерпретациями соответствующих результатов SecTrustSettings для сертификатов, для которых задано Always Denyзначение доверия.
Несуществующее хранилище
| Сценарий | Виндоус | Линукс | macOS | iOS, tvOS, MacCatalyst | Андроид |
|---|---|---|---|---|---|
| Открытие несуществующего хранилища (ExistingOnly) | ❌ | ❌ | ❌ | ❌ | ❌ |
| Открытие несуществующего хранилища CurrentUser (ReadWrite) | ✔️ | ✔️ | ⚠️ | ❌ | ❌ |
| Открытие несуществующего хранилища LocalMachine (ReadWrite) | ✔️ | ❌ | ❌ | ❌ | ❌ |
В macOS создание пользовательского хранилища с помощью API X509Store поддерживается только для CurrentUser расположения. Он создаст новую цепочку ключей без пароля в каталоге цепочки ключей пользователя (~/Library/Keychains). Чтобы создать цепочку ключей с паролем, можно использовать P/Invoke SecKeychainCreate . Аналогичным образом SecKeychainOpen можно использовать для открытия цепочки ключей в разных расположениях.
IntPtr Полученный результат можно передать для new X509Store(IntPtr) получения хранилища, поддерживающего чтение и запись, при условии разрешений текущего пользователя.
X509Chain
macOS не поддерживает использование автономных списков отзыва сертификатов, поэтому X509RevocationMode.Offline рассматривается как X509RevocationMode.Online.
macOS не поддерживает время ожидания, инициированное пользователем, в CRL (список отзыва сертификатов) / OCSP (протокол состояния онлайн-сертификатов) / AIA (доступ к данным центра), поэтому X509ChainPolicy.UrlRetrievalTimeout игнорируется.
Сертификаты шифрования после квантовых вычислений и PKCS12/PFX
Поддержка постквантовых сертификатов также требует поддержки от примитивного алгоритма.
| Операция | Алгоритм | Виндоус | Линукс | Яблоко | Андроид | Браузер |
|---|---|---|---|---|---|---|
| Импорт PKCS#12 | ML-DSA | ✔️ | ✔️ | ❌ | ❌ | ❌ |
| Экспорт PKCS#12 | ML-DSA | ✔️ | ✔️ | ❌ | ❌ | ❌ |
| Ассоциация закрытого ключа | ML-DSA | ✔️ | ✔️ | ❌ | ❌ | ❌ |
| Импорт PKCS#12 | ML-KEM | ❌ | ✔️ | ❌ | ❌ | ❌ |
| Экспорт PKCS#12 | ML-KEM | ❌ | ✔️ | ❌ | ❌ | ❌ |
| Ассоциация закрытого ключа | ML-KEM | ❌ | ✔️ | ❌ | ❌ | ❌ |
| Импорт PKCS#12 | SLH-DSA | ❌ | ✔️ | ❌ | ❌ | ❌ |
| Экспорт PKCS#12 | SLH-DSA | ❌ | ✔️ | ❌ | ❌ | ❌ |
| Ассоциация с закрытым ключом | SLH-DSA | ❌ | ✔️ | ❌ | ❌ | ❌ |
Дополнительные ресурсы
- Модель шифрования .NET
- Криптографические службы .NET
- Timing vulnerabilities with CBC-mode symmetric decryption using padding (Уязвимости в учете времени при симметричной расшифровке в режиме CBC с использованием заполнения).
- защита основных данных ASP.NET