Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Kryptografické operace v .NET se provádějí knihovnami operačního systému (OS). Tato závislost má výhody:
- Aplikace .NET využívají spolehlivost operačního systému. Zajištění zabezpečení kryptografických knihoven před ohroženími zabezpečení je pro dodavatele operačního systému vysokou prioritou. Za tímto účelem poskytují aktualizace, které by měli použít správci systému.
- Aplikace .NET mají přístup k algoritmům ověřeným rozhraním FIPS, pokud jsou knihovny operačního systému ověřeny.
Závislost na knihovnách operačního systému také znamená, že aplikace .NET můžou používat jenom kryptografické funkce, které operační systém podporuje. I když všechny platformy podporují určité základní funkce, některé funkce, které .NET podporuje, se na některých platformách nedají použít. Tento článek identifikuje funkce, které jsou podporovány na jednotlivých platformách.
Tento článek předpokládá, že máte funkční znalost kryptografie v .NET. Další informace naleznete v tématu .NET Kryptografický model a kryptografické služby .NET.
Algoritmy pro hashování a autentizaci zpráv
Všechny třídy algoritmů hash a ověřování zpráv založených na hodnotě hash (HMAC), včetně tříd *Managed, využívají knihovny operačního systému, s výjimkou .NET v prohlížeči WASM. V prohlížeči WASM, SHA-1, SHA-2-256, SHA-2-384, SHA-2-512 a ekvivalenty HMAC se implementují pomocí spravovaného kódu.
| Algoritmus | Windows | Operační systém Linux | macOS | iOS, tvOS, MacCatalyst | Android | Prohlížeč |
|---|---|---|---|---|---|---|
| MD5 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
| algoritmus SHA-1 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| SHA-2-256 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| SHA-2-384 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| SHA-2-512 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| SHA-3-256 | Windows 11 build 25324+ | OpenSSL 1.1.1+ | ❌ | ❌ | ❌ | ❌ |
| SHA-3-384 | Windows 11 build 25324+ | OpenSSL 1.1.1+ | ❌ | ❌ | ❌ | ❌ |
| SHA-3-512 | Windows 11 build 25324+ | OpenSSL 1.1.1+ | ❌ | ❌ | ❌ | ❌ |
| SHAKE-128 | Windows 11 build 25324+ | OpenSSL 1.1.1+2 | ❌ | ❌ | ❌ | ❌ |
| SHAKE-256 | Windows 11 build 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 build 25324+ | OpenSSL 1.1.1+ | ❌ | ❌ | ❌ | ❌ |
| HMAC-SHA-3-384 | Windows 11 build 25324+ | OpenSSL 1.1.1+ | ❌ | ❌ | ❌ | ❌ |
| HMAC-SHA-3-512 | Windows 11 build 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+ | ❌ | ❌ | ❌ | ❌ |
1K dispozici od .NET 9.
2Streaming extensible output function (XOF) je k dispozici od .NET 9. V Linuxu to vyžaduje OpenSSL 3.3.
Symetrické šifrování
Základní šifry a řetězení provádí systémové knihovny.
| Šifra + režim | Windows | Operační systém Linux | macOS | iOS, tvOS, MacCatalyst | Android |
|---|---|---|---|---|---|
| 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 | ❌ | ❌ | ❌ | ❌ | ❌ |
Ověřené šifrování
Podpora ověřeného šifrování (AE) je k dispozici pro AES-CCM, AES-GCM a ChaCha20Poly1305 prostřednictvím třídy System.Security.Cryptography.AesCcm, třídy System.Security.Cryptography.AesGcm a třídy System.Security.Cryptography.ChaCha20Poly1305.
Vzhledem k tomu, že ověřené šifrování vyžaduje k podpoře algoritmu novější rozhraní API platformy, nemusí být podpora k dispozici na všech platformách. Pokud chcete zjistit, jestli aktuální platforma podporuje algoritmus, můžete pro algoritmus použít IsSupported statickou vlastnost třídy.
| Šifra + režim | Windows | Operační systém Linux | macOS | iOS, tvOS, MacCatalyst | Android | Prohlížeč |
|---|---|---|---|---|---|---|
| AES-GCM | ✔️ | ✔️ | ✔️ | ⚠️ | ✔️ | ❌ |
| AES-CCM | ✔️ | ✔️ | ❌ | ❌ | ✔️ | ❌ |
| ChaCha20Poly1305 | Windows 10 Build 20142+ | OpenSSL 1.1.0+ | ✔️ | ⚠️ | Rozhraní API úrovně 28 nebo novější | ❌ |
AES-CCM v systému macOS
Před .NET 10 AES-CCM fungoval, pokud byla k dispozici podporovaná verze OpenSSL a zavaděč dynamických knihoven ji dokázal najít. Podpora OpenSSL v systému macOS byla odebrána v .NET 10.
AES-GCM a ChaCha20Poly1305 v systémech iOS, tvOS a MacCatalyst
Podpora pro AES-GCM a ChaCha20Poly1305 je dostupná od .NET 9 v systémech iOS a tvOS 13.0 a novějších a všech verzích MacCatalyst.
Klíče AES-CCM, nonce a značky
Velikosti klíčů
AES-CCM funguje s 128, 192 a 256bitovými klíči.
Velikosti nonce
Třída AesCcm podporuje 56, 64, 72, 80, 88, 96 a 104bitovou (7, 8, 9, 10, 11, 12 a 13bajtů).
Velikosti značek
Třída AesCcm podporuje vytváření nebo zpracování značek 32, 48, 64, 80, 96, 112 a 128bitových (4, 8, 10, 12, 14 a 16 bajtů).
Klíče AES-GCM, náhodná čísla a značky
Velikosti klíčů
AES-GCM funguje s 128, 192 a 256bitovými klíči.
Velikosti nonce
Třída AesGcm podporuje pouze 96bitové (12bajtové) nonce.
Velikosti značek
Ve Windows a Linuxu AesGcm třída podporuje vytváření nebo zpracování značek 96, 104, 112, 120 a 128bitových (12, 13, 14, 15 a 16 bajtů). Na platformách Apple je velikost značky omezená na 128-bitový (16 bajtový) kvůli omezením rozhraní CryptoKit.
Klíče ChaCha20Poly1305, nonce a značky
ChaCha20Poly1305 má pevnou velikost pro klíč, nonce a ověřovací značku. ChaCha20Poly1305 vždy používá 256bitový klíč, 96bitovou (12 bajtů) nonce a 128bitový (16 bajtů) tag.
Asymetrická kryptografie
Tato část obsahuje následující pododdíly:
šifrování RSA
Generování klíčů RSA (Rivest–Shamir–Adleman) provádí knihovny operačního systému a podléhá omezením velikosti a charakteristikám výkonu.
Operace klíče RSA se provádějí knihovnami operačního systému a typy klíče, které je možné načíst, podléhají požadavkům operačního systému.
.NET nezpřístupňuje surové nepaddované operace RSA.
Podpora výplně a hashovacích funkcí se liší podle platformy.
| Režim vyplňování | Windows (CNG) | Linux (OpenSSL) | macOS | iOS, tvOS, MacCatalyst | Android | Windows (CAPI) |
|---|---|---|---|---|---|---|
| Šifrování PKCS1 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| OAEP – SHA-1 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| OAEP – SHA-2 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
| OAEP – SHA-3 | Windows 11 build 25324+ | OpenSSL 1.1.1+ | ❌ | ❌ | ❌ | ❌ |
| Podpis PKCS1 (MD5, SHA-1) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Podpis PKCS1 (SHA-2) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ⚠️1 |
| Podpis PKCS1 (SHA-3) | Windows 11 build 25324+ | OpenSSL 1.1.1+ | ❌ | ❌ | ❌ | ❌ |
| PSS | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
1 Windows CryptoAPI (CAPI) podporuje podpis PKCS1 s algoritmem SHA-2. Jednotlivý objekt RSA se ale může načíst ve zprostředkovateli kryptografických služeb (CSP), který jej nepodporuje.
RSA ve Windows
- Rozhraní Windows CryptoAPI (CAPI) se používá kdykoliv se používá
new RSACryptoServiceProvider(). - Rozhraní Windows Cryptography API Next Generation (CNG) se používá vždy, když je
new RSACng()použito. - Objekt vrácený RSA.Create je interně poháněn systémem Windows CNG. Toto použití Windows CNG je detail implementace a může se změnit.
- Rozšiřující GetRSAPublicKey metoda pro X509Certificate2 vrací RSACng instanci. "Toto použití RSACng je detail implementace a může se změnit."
- Metoda GetRSAPrivateKey rozšíření pro X509Certificate2 aktuálně preferuje RSACng instanci, ale pokud RSACng klíč nejde otevřít, RSACryptoServiceProvider pokusí se o to. Preferovaný poskytovatel je podrobnosti implementace a může se změnit.
Nativní interoperabilita RSA
.NET zveřejňuje typy, které umožňují programům spolupracovat s knihovnami operačního systému, které kryptografický kód .NET používá. Zahrnuté typy se nepřekládají mezi platformami a měly by být použity pouze v případě potřeby.
| Typ | Windows | Operační systém Linux | macOS | iOS, tvOS, MacCatalyst | Android |
|---|---|---|---|---|---|
| RSACryptoServiceProvider | ✔️ | ⚠️1 | ⚠️1 | ⚠️1 | ⚠️1 |
| RSACng | ✔️ | ❌ | ❌ | ❌ | ❌ |
| RSAOpenSsl | ❌ | ✔️ | ❌ 2 | ❌ | ❌ |
1 Na systémech jiných než Windows lze RSACryptoServiceProvider použít k zajištění kompatibility se stávajícími programy. V takovém případě každá metoda, která vyžaduje interoperabilitu operačního systému, například otevření pojmenovaného klíče, vyvolá PlatformNotSupportedException chybu.
2 V systému macOS před .NET 10 fungovalo, RSAOpenSsl pokud byl nainstalován OpenSSL a bylo možné najít odpovídající knihovnu libcrypto dylib prostřednictvím dynamického načítání knihovny. Tato podpora byla odebrána v .NET 10.
ECDSA
Generování klíčů ECDSA (Elliptic Curve Digital Signature Algorithm) provádí knihovny operačního systému a podléhá omezením velikosti a charakteristikám výkonu.
Klíčové křivky ECDSA jsou definovány knihovnami operačního systému a podléhají jejich omezením.
| Elliptická křivka | Systém Windows 10 | Windows 7 – 8.1 | Operační systém Linux | macOS | iOS, tvOS, MacCatalyst | Android |
|---|---|---|---|---|---|---|
| NIST P-256 (secp256r1) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| NIST P-384 (secp384r1) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| NIST P-521 (secp521r11) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Křivky Brainpool (jako pojmenované křivky) | ✔️ | ❌ | ⚠️1 | ❌ | ❌ | ⚠️4 |
| Další pojmenované křivky | ⚠️2 | ❌ | ⚠️1 | ❌ | ❌ | ⚠️4 |
| Explicitní křivky | ✔️ | ❌ | ✔️ | ❌ | ❌ | ✔️ |
| Export nebo import jako explicitní | ✔️ | ❌ 3 | ✔️ | ❌ 3 | ❌ 3 | ✔️ |
1 Linuxové distribuce nemají podporu pro stejné pojmenované křivky.
2 Podpora pojmenovaných křivek byla přidána do windows CNG ve Windows 10. Další informace naleznete v tématu CNG Pojmenované eliptické křivky. Pojmenované křivky nejsou v dřívějších verzích Windows k dispozici, s výjimkou tří křivek ve Windows 7.
3 Export s explicitními parametry křivky vyžaduje podporu knihovny operačního systému, která není k dispozici na platformách Apple nebo starších verzích Windows.
Podpora Androidu pro některé křivky závisí na verzi systému Android. Distributoři Androidu se také mohou rozhodnout přidat nebo odebrat křivky z buildu Androidu.
Nativní interoperabilita ECDSA
.NET zveřejňuje typy, které umožňují programům spolupracovat s knihovnami operačního systému, které kryptografický kód .NET používá. Zahrnuté typy se nepřekládají mezi platformami a měly by být použity pouze v případě potřeby.
| Typ | Windows | Operační systém Linux | macOS | iOS, tvOS, MacCatalyst | Android |
|---|---|---|---|---|---|
| ECDsaCng | ✔️ | ❌ | ❌ | ❌ | ❌ |
| ECDsaOpenSsl | ❌ | ✔️ | ❌* | ❌ | ❌ |
* V systému macOS před rozhraním .NET 10, pokud byla nainstalována knihovna OpenSSL, ECDsaOpenSsl fungovalo a bylo možné načíst odpovídající libcrypto dylib pomocí dynamického načítání knihoven. Tato podpora byla odebrána v .NET 10.
ECDH
Generování klíčů ECDH (Elliptic Curve Diffie-Hellman) provádí knihovny operačního systému a podléhá omezením velikosti a charakteristikám výkonu.
Třída ECDiffieHellman podporuje "nezpracovanou" hodnotu výpočtu ECDH a také prostřednictvím následujících klíčových odvozených funkcí:
- HASH(Z)
- HASH(předpona || Z || přípona)
- HMAC(klíč, Z)
- HMAC(klíč, prepend || Z || append)
- HMAC(Z, Z)
- HMAC(Z, předsadit || Z || připojit)
- Tls11Prf(label, semeno)
Klíčové křivky ECDH jsou definovány knihovnami operačního systému a podléhají jejich omezením.
| Elliptická křivka | Windows 10+ | Windows 7 – 8.1 | Operační systém Linux | macOS | iOS, tvOS, MacCatalyst | Android |
|---|---|---|---|---|---|---|
| NIST P-256 (secp256r1) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| NIST P-384 (secp384r1) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| NIST P-521 (secp521r11) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Křivky Brainpool (jako pojmenované křivky) | ✔️ | ❌ | ⚠️1 | ❌ | ❌ | ⚠️4 |
| Další pojmenované křivky | ⚠️2 | ❌ | ⚠️1 | ❌ | ❌ | ⚠️4 |
| Explicitní křivky | ✔️ | ❌ | ✔️ | ❌ | ❌ | ✔️ |
| Export nebo import jako explicitní | ✔️ | ❌ 3 | ✔️ | ❌ 3 | ❌ 3 | ✔️ |
1 Linuxové distribuce nemají podporu pro stejné pojmenované křivky.
2 Podpora pojmenovaných křivek byla přidána do windows CNG ve Windows 10. Další informace naleznete v tématu CNG Pojmenované eliptické křivky. Pojmenované křivky nejsou v dřívějších verzích Windows k dispozici, s výjimkou tří křivek ve Windows 7.
3 Export s explicitními parametry křivky vyžaduje podporu knihovny operačního systému, která není k dispozici na platformách Apple nebo starších verzích Windows.
Podpora Androidu pro některé křivky závisí na verzi systému Android. Distributoři Androidu se také mohou rozhodnout přidat nebo odebrat křivky z buildu Androidu.
Nativní interoperabilita ECDH
.NET zveřejňuje typy, které umožňují programům spolupracovat s knihovnami operačního systému, které .NET používá. Zahrnuté typy se nepřekládají mezi platformami a měly by být použity pouze v případě potřeby.
| Typ | Windows | Operační systém Linux | macOS | iOS, tvOS, MacCatalyst | Android |
|---|---|---|---|---|---|
| ECDiffieHellmanCng | ✔️ | ❌ | ❌ | ❌ | ❌ |
| ECDiffieHellmanOpenSsl | ❌ | ✔️ | ❌* | ❌ | ❌ |
* V systému macOS před rozhraním .NET 10, pokud byla nainstalována knihovna OpenSSL, ECDiffieHellmanOpenSsl fungovalo a bylo možné načíst odpovídající libcrypto dylib pomocí dynamického načítání knihoven. Tato podpora byla odebrána v .NET 10.
algoritmus DSA
Generování klíčů DSA (Digital Signature Algorithm) provádí systémové knihovny a podléhá omezením velikosti a charakteristikám výkonu.
| Funkce | Windows CNG | Operační systém Linux | macOS | Windows CAPI | iOS, tvOS, MacCatalyst | Android |
|---|---|---|---|---|---|---|
| Vytvoření klíče (<= 1024 bitů) | ✔️ | ✔️ | ❌ | ✔️ | ❌ | ✔️ |
| Vytvoření klíče (> 1024 bitů) | ✔️ | ✔️ | ❌ | ❌ | ❌ | ✔️ |
| Načítání klíčů (<= 1024 bitů) | ✔️ | ✔️ | ✔️ | ✔️ | ❌ | ✔️ |
| Načítání klíčů (> 1024 bitů) | ✔️ | ✔️ | ⚠️* | ❌ | ❌ | ✔️ |
| FIPS 186-2 | ✔️ | ✔️ | ✔️ | ✔️ | ❌ | ✔️ |
| FIPS 186-3 (podpisy SHA-2) | ✔️ | ✔️ | ❌ | ❌ | ❌ | ✔️ |
* macOS načte klíče DSA větší než 1024 bitů, ale chování těchto klíčů není definováno. Nechovají se podle FIPS 186-3.
DSA ve Windows
- Rozhraní Windows CryptoAPI (CAPI) se používá kdykoliv se používá
new DSACryptoServiceProvider(). - Rozhraní Windows Cryptography API Next Generation (CNG) se používá vždy, když je
new DSACng()použito. - Objekt vrácený DSA.Create je interně poháněn systémem Windows CNG. Toto použití Windows CNG je detail implementace a může se změnit.
- Rozšiřující GetDSAPublicKey metoda pro X509Certificate2 vrací DSACng instanci. "Toto použití DSACng je detail implementace a může se změnit."
- Metoda GetDSAPrivateKey rozšíření pro X509Certificate2 preferuje DSACng instanci, ale pokud DSACng klíč nejde otevřít, DSACryptoServiceProvider pokusí se o to. Preferovaný poskytovatel je podrobnosti implementace a může se změnit.
Nativní interoperabilita DSA
.NET zveřejňuje typy, které umožňují programům spolupracovat s knihovnami operačního systému, které kryptografický kód .NET používá. Zahrnuté typy se nepřekládají mezi platformami a měly by být použity pouze v případě potřeby.
| Typ | Windows | Operační systém Linux | macOS | iOS, tvOS, MacCatalyst | Android |
|---|---|---|---|---|---|
| DSACryptoServiceProvider | ✔️ | ⚠️1 | ⚠️1 | ❌ | ⚠️1 |
| DSACng | ✔️ | ❌ | ❌ | ❌ | ❌ |
| DSAOpenSsl | ❌ | ✔️ | ❌ 2 | ❌ | ❌ |
1 Na systémech jiných než Windows lze DSACryptoServiceProvider použít k zajištění kompatibility se stávajícími programy. V takovém případě jakákoli metoda, která vyžaduje systémové propojení, například otevření pojmenovaného klíče, vyvolá PlatformNotSupportedException.
2 V systému macOS před .NET 10 fungovalo, DSAOpenSsl pokud byl nainstalován OpenSSL a bylo možné najít odpovídající knihovnu libcrypto dylib prostřednictvím dynamického načítání knihovny. Tato podpora byla odebrána v .NET 10.
Pokvantová kryptografie
Po kvantové algoritmy jsou k dispozici od verze .NET 10. Jsou také k dispozici pro rozhraní .NET Framework pomocí balíčku NuGet Microsoft.Bcl.Cryptography. Následující tabulka podpory označuje podporu platformy pro integrované kryptografické komponenty operačního systému, jako jsou ty, které byly vytvořeny z Generate nebo ImportFromPem. Implementace odvozené ze základní třídy mohou mít různá chování podpory.
U předdefinovaných algoritmů je k dispozici statická vlastnost, která určuje, IsSupported jestli platforma podporuje některou ze sad parametrů.
Nativní typy spolupráce pro post-kvantové algoritmy nepodporují generování nebo import klíčů. Existují speciálně pro scénáře spolupráce s nativními typy platforem, takové jako EVP_PKEY na OpenSSL nebo CngKey ve Windows.
ML-KEM
| Algoritmus | Windows | Operační systém Linux | Jablko | Android | Prohlížeč |
|---|---|---|---|---|---|
| ML-KEM-512 | Účastníci programu Windows 11 Insider (nejnovější verze) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| ML-KEM-768 | Účastníci programu Windows 11 Insider (nejnovější verze) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| ML-KEM-1024 | Účastníci programu Windows 11 Insider (nejnovější verze) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
Nativní interoperabilita ML-KEM
- MLKemOpenSsl: OpenSSL 3.5.0+
- MLKemCng: Windows 11 Insiders (nejnovější verze)
ML-DSA
ML-DSA má čistou a prehash variantu (HashML-DSA). Následující tabulka odráží čisté i prehashové varianty.
| Algoritmus | Windows | Operační systém Linux | Jablko | Android | Prohlížeč |
|---|---|---|---|---|---|
| ML-DSA-44 | Účastníci programu Windows 11 Insider (nejnovější verze) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| ML-DSA-65 | Účastníci programu Windows 11 Insider (nejnovější verze) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| ML-DSA-87 | Účastníci programu Windows 11 Insider (nejnovější verze) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| ML-DSA-44 Externí Mu (μ)1 | ❌ | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| ML-DSA-65 External Mu (μ)1 | ❌ | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| ML-DSA-87 Externí Mu (μ)1 | ❌ | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
1 Externí podpora pro Mu slouží pouze k podepisování a ověřování Mu. Výpočet Mu není podporován.
Nativní interoperabilita ML-DSA
- MLDsaOpenSsl: OpenSSL 3.5.0+
- MLDsaCng: Windows 11 Insiders (nejnovější verze)
SLH-DSA
SLH-DSA má čistou a prehash variantu (HashSLH-DSA). Následující tabulka odráží čisté i prehashové varianty.
| Algoritmus | Windows | Operační systém Linux | Jablko | Android | Prohlížeč |
|---|---|---|---|---|---|
| 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 interoperabilita nativní
- SlhDsaOpenSsl: OpenSSL 3.5.0+
- SlhDsaCng: Nepodporováno
Složené ML-DSA
| Algoritmus | Windows | Operační systém Linux | Jablko | Android | Prohlížeč |
|---|---|---|---|---|---|
| MLDSA44-RSA2048-PSS-SHA256 | Účastníci programu Windows 11 Insider (nejnovější verze) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| MLDSA44-RSA2048-PKCS15-SHA256 | Účastníci programu Windows 11 Insider (nejnovější verze) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| MLDSA44 –Ed25519-SHA512 | ❌ | ❌ | ❌ | ❌ | ❌ |
| MLDSA44-ECDSA-P256-SHA256 | Účastníci programu Windows 11 Insider (nejnovější verze) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| MLDSA65-RSA3072-PSS-SHA512 | Účastníci programu Windows 11 Insider (nejnovější verze) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| MLDSA65-RSA3072-PKCS15-SHA512 | Účastníci programu Windows 11 Insider (nejnovější verze) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| MLDSA65-RSA4096-PSS-SHA512 | Účastníci programu Windows 11 Insider (nejnovější verze) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| MLDSA65-RSA4096-PKCS15-SHA512 | Účastníci programu Windows 11 Insider (nejnovější verze) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| MLDSA65-ECDSA-P256-SHA512 | Účastníci programu Windows 11 Insider (nejnovější verze) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| MLDSA65-ECDSA-P384-SHA512 | Účastníci programu Windows 11 Insider (nejnovější verze) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| MLDSA65-ECDSA-brainpoolP256r1-SHA512 | Účastníci programu Windows 11 Insider (nejnovější verze) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| MLDSA65-Ed25519-SHA512 | ❌ | ❌ | ❌ | ❌ | ❌ |
| MLDSA87-ECDSA-P384-SHA512 | Účastníci programu Windows 11 Insider (nejnovější verze) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| MLDSA87-ECDSA-brainpoolP384r1-SHA512 | Účastníci programu Windows 11 Insider (nejnovější verze) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| MLDSA87-Ed448-SHAKE256 | ❌ | ❌ | ❌ | ❌ | ❌ |
| MLDSA87-RSA3072-PSS-SHA512 | Účastníci programu Windows 11 Insider (nejnovější verze) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| MLDSA87-RSA4096-PSS-SHA512 | Účastníci programu Windows 11 Insider (nejnovější verze) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| MLDSA87-ECDSA-P521-SHA512 | Účastníci programu Windows 11 Insider (nejnovější verze) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
Nativní interoperabilní složenina ML-DSA
- CompositeMLDsaCng: Nepodporováno
Certifikáty X.509
Většina podpory certifikátů X.509 v .NET pochází z knihoven operačního systému. Pokud chcete načíst certifikát do X509Certificate2 instance nebo X509Certificate instance v .NET, musí být certifikát načten podkladovou knihovnou operačního systému.
Čtení PKCS12/PFX
| Scénář | Windows | Operační systém Linux | macOS | iOS, tvOS, MacCatalyst | Android |
|---|---|---|---|---|---|
| Prázdné | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Jeden certifikát, bez privátního klíče | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Jeden certifikát s privátním klíčem | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Více certifikátů, žádné privátní klíče | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Více certifikátů, jeden privátní klíč | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Více certifikátů, více privátních klíčů | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Napište PKCS12/PFX
| Scénář | Windows | Operační systém Linux | macOS | iOS, tvOS, MacCatalyst | Android |
|---|---|---|---|---|---|
| Prázdné | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Jeden certifikát, bez privátního klíče | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Jeden certifikát s privátním klíčem | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Více certifikátů, žádné privátní klíče | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Více certifikátů, jeden privátní klíč | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Více certifikátů, více privátních klíčů | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Dočasné načítání | ✔️ | ✔️ | ❌ | ✔️ | ✔️ |
macOS nemůže načíst privátní klíče certifikátu bez objektu řetězce klíčů, který vyžaduje zápis na disk. Klíčenky se vytvoří automaticky pro načítání PFX a odstraní se, když už se nepoužívají. Vzhledem k tomu, že tato X509KeyStorageFlags.EphemeralKeySet možnost znamená, že privátní klíč by neměl být zapsán na disk, v systému macOS má příznak za následek PlatformNotSupportedException.
Proveďte zápis kolekce certifikátů PKCS7
Windows i Linux generují objekty blob PKCS7 s kódováním DER. MacOS generuje objekty blob PKCS7 s neomezenou délkou s kódováním CER.
X509Store
Ve X509Store Windows je třída reprezentací rozhraní API služby Windows Certificate Store. Rozhraní API fungují v .NET stejně jako v rozhraní .NET Framework.
V jiných systémech než X509Store Windows je třída projekce rozhodnutí o důvěryhodnosti systému (jen pro čtení), rozhodnutí o důvěryhodnosti uživatelů (čtení i zápis) a úložiště uživatelských klíčů (čtení i zápis).
Následující tabulky ukazují, které scénáře jsou podporovány v jednotlivých platformách. Pro nepodporované scénáře (❌ v tabulkách) se vyvolá CryptographicException.
Můj obchod
| Scénář | Windows | Operační systém Linux | macOS | iOS, tvOS, MacCatalyst | Android |
|---|---|---|---|---|---|
| Otevřít CurrentUser\My (Jen pro čtení) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Otevřít CurrentUser\My (ReadWrite) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Otevřít CurrentUser\My (ExistingOnly) | ✔️ | ⚠️ | ✔️ | ✔️ | ✔️ |
| Otevřít LocalMachine\My | ✔️ | ❌ | ✔️ | ✔️ | ✔️ |
V Linuxu se úložiště vytvářejí při prvním zápisu a ve výchozím nastavení neexistují žádná uživatelská úložiště, takže otevření CurrentUser\My s ExistingOnly může selhat.
V macOS CurrentUser\My je úložiště výchozí řetězce klíčů uživatele, což je login.keychain ve výchozím nastavení. Obchod LocalMachine\My je System.keychain.
Kořenové úložiště
| Scénář | Windows | Operační systém Linux | macOS | iOS, tvOS, MacCatalyst | Android |
|---|---|---|---|---|---|
| Otevřít CurrentUser\Root (Jen pro čtení) | ✔️ | ✔️ | ✔️ | ❌ | ✔️ |
| Otevřít CurrentUser\Root (ReadWrite) | ✔️ | ✔️ | ❌ | ❌ | ❌ |
| Otevřít CurrentUser\Root (ExistingOnly) | ✔️ | ⚠️ | ✔️ (pokud jen pro čtení) | ❌ | ✔️ (pokud jen pro čtení) |
| Otevřít LocalMachine\Root (Jen pro čtení) | ✔️ | ✔️ | ✔️ | ❌ | ✔️ |
| Otevřít LocalMachine\Root (ReadWrite) | ✔️ | ❌ | ❌ | ❌ | ❌ |
| Otevřít LocalMachine\Root (ExistujícíPouze) | ✔️ | ⚠️ | ✔️ (pokud jen pro čtení) | ❌ | ✔️ (pokud jen pro čtení) |
Na Linuxu LocalMachine\Root je úložiště interpretací CA bundlu ve výchozí cestě pro OpenSSL.
V systému macOS je úložiště CurrentUser\Root interpretacemi výsledků SecTrustSettings pro doménu důvěry uživatele. Úložiště LocalMachine\Root je interpretace SecTrustSettings výsledků domén důvěryhodnosti správce a systému.
Umístění důvěryhodných kořenových certifikátů v Linuxu
V Linuxu používá .NET k vyhledání důvěryhodných kořenových certifikátů knihovnu OpenSSL (libssl). OpenSSL určuje umístění úložiště certifikátů pomocí proměnných prostředí (SSL_CERT_FILE a SSL_CERT_DIR) a výchozích cest specifických pro distribuci. Pokud adresář kořenového úložiště nakonfigurovaný pro OpenSSL neobsahuje žádné certifikáty, vrátí se .NET zpět do kontroly /etc/ssl/certs. Tato záložní aplikace zajišťuje kompatibilitu s distribucemi, jako je SUSE Linux Enterprise Server (SLES), kde adresář určený SSL_CERT_DIR pouze může obsahovat certifikáty ve BEGIN TRUSTED CERTIFICATE formátu, který .NET nepodporuje jako kořenové certifikáty.
K tomuto náhradnímu řešení dochází pouze v těchto případech:
- Proměnná prostředí
SSL_CERT_DIRnení explicitně nastavená. - Výchozí adresář certifikátů neobsahuje žádné použitelné certifikáty.
Pokud se certifikáty nenačítají správně, ověřte, že:
- Vaše soubory certifikátů jsou ve formátu PEM se značkou
BEGIN CERTIFICATE(neBEGIN TRUSTED CERTIFICATE). -
SSL_CERT_DIRaSSL_CERT_FILEproměnné prostředí odkazují na správná umístění, pokud jsou nastaveny. - Soubor nebo adresář sady certifikátů má příslušná oprávnění ke čtení.
Meziúložiště
| Scénář | Windows | Operační systém Linux | macOS | iOS, tvOS, MacCatalyst | Android |
|---|---|---|---|---|---|
| Otevřít CurrentUser\Intermediate (Jen pro čtení) | ✔️ | ✔️ | ✔️ | ❌ | ❌ |
| Otevřít CurrentUser\Intermediate (ReadWrite) | ✔️ | ✔️ | ❌ | ❌ | ❌ |
| Otevřít CurrentUser\Intermediate (ExistingOnly) | ✔️ | ⚠️ | ✔️ (pokud jen pro čtení) | ❌ | ❌ |
| Otevřít LocalMachine\Intermediate (Pouze pro čtení) | ✔️ | ✔️ | ✔️ | ❌ | ❌ |
| Otevřít LocalMachine\Intermediate (ReadWrite) | ✔️ | ❌ | ❌ | ❌ | ❌ |
| Otevřít LocalMachine\Intermediate (ExistingOnly) | ✔️ | ⚠️ | ✔️ (pokud jen pro čtení) | ❌ | ❌ |
Na Linuxu se úložiště CurrentUser\Intermediate používá jako mezipaměť při stahování záznamů přístupu k informacím autority o zprostředkujících certifikačních autoritách, když dojde k úspěšnému sestavení X509Chain. Úložiště LocalMachine\Intermediate je interpretace svazku CA ve výchozí cestě pro OpenSSL.
V systému macOS je CurrentUser\Intermediate považováno za customizované úložiště. Certifikáty přidané do tohoto úložiště nemají vliv na vytváření řetězce certifikátů X.509.
Zakázaný obchod
| Scénář | Windows | Operační systém Linux | macOS | iOS, tvOS, MacCatalyst | Android |
|---|---|---|---|---|---|
| Otevřít CurrentUser\Disallowed (Jen pro čtení) | ✔️ | ⚠️ | ✔️ | ✔️ | ✔️ |
| Otevřít CurrentUser\Disallowed (ReadWrite) | ✔️ | ⚠️ | ❌ | ❌ | ❌ |
| Otevřít CurrentUser\Disallowed (ExistingOnly) | ✔️ | ⚠️ | ✔️ (pokud jen pro čtení) | ✔️ (pokud jen pro čtení) | ✔️ (pokud jen pro čtení) |
| Otevřít LocalMachine\Disallowed (Jen pro čtení) | ✔️ | ❌ | ✔️ | ✔️ | ✔️ |
| Otevřete LocalMachine\Disallowed (ReadWrite) | ✔️ | ❌ | ❌ | ❌ | ❌ |
| Otevřete LocalMachine\Disallowed (ExistingOnly) | ✔️ | ❌ | ✔️ (pokud jen pro čtení) | ✔️ (pokud jen pro čtení) | ✔️ (pokud jen pro čtení) |
Úložiště Disallowed se v Linuxu nepoužívá při sestavování řetězce a pokus o přidání obsahu do něj vede k chybě CryptographicException. A CryptographicException je vyvolán při otevření Disallowed úložiště, pokud už získal obsah.
V systému macOS jsou úložiště CurrentUser\Disallowed a LocalMachine\Disallowed interpretací odpovídajících výsledků secTrustSettings pro certifikáty, jejichž vztah důvěryhodnosti je nastaven na Always Deny.
Neexistující obchod
| Scénář | Windows | Operační systém Linux | macOS | iOS, tvOS, MacCatalyst | Android |
|---|---|---|---|---|---|
| Otevřít neexistující obchod (ExistingOnly) | ❌ | ❌ | ❌ | ❌ | ❌ |
| Otevřít neexistující úložiště CurrentUser (ReadWrite) | ✔️ | ✔️ | ⚠️ | ❌ | ❌ |
| Otevřít neexistující úložiště LocalMachine (ReadWrite) | ✔️ | ❌ | ❌ | ❌ | ❌ |
V systému macOS se vytváření vlastního úložiště pomocí rozhraní API X509Store podporuje jenom pro CurrentUser specifické umístění. Bude vytvořena nová klíčenka bez hesla v adresáři klíčenek uživatele (~/Library/Klíčenky). K vytvoření řetězce klíčů s heslem lze použít P/Invoke na SecKeychainCreate.
SecKeychainOpen Podobně se dá použít k otevření klíčenek v různých umístěních. Výsledek IntPtr lze předat new X509Store(IntPtr) k získání úložiště umožňujícího čtení a zápis, podléhající oprávněním aktuálního uživatele.
X509Chain
macOS nepodporuje využití seznamu CRL offline, takže X509RevocationMode.Offline se považuje za X509RevocationMode.Online.
macOS nepodporuje uživatelem iniciovaný časový limit pro stahování seznamu odvolaných certifikátů (CRL), OCSP (Online Certificate Status Protocol) ani AIA (Přístup k informacím o autoritě), takže X509ChainPolicy.UrlRetrievalTimeout se ignoruje.
Certifikáty po kvantové kryptografii a PKCS12/PFX
Podpora postkvantových certifikátů také vyžaduje podporu od základního algoritmu.
| Operation | Algoritmus | Windows | Operační systém Linux | Jablko | Android | Prohlížeč |
|---|---|---|---|---|---|---|
| PKCS#12 Importovat | ML-DSA | ✔️ | ✔️ | ❌ | ❌ | ❌ |
| PKCS#12 Exportovat | ML-DSA | ✔️ | ✔️ | ❌ | ❌ | ❌ |
| Přidružení privátního klíče | ML-DSA | ✔️ | ✔️ | ❌ | ❌ | ❌ |
| PKCS#12 Importovat | ML-KEM | ❌ | ✔️ | ❌ | ❌ | ❌ |
| PKCS#12 Exportovat | ML-KEM | ❌ | ✔️ | ❌ | ❌ | ❌ |
| Přidružení privátního klíče | ML-KEM | ❌ | ✔️ | ❌ | ❌ | ❌ |
| PKCS#12 Importovat | SLH-DSA | ❌ | ✔️ | ❌ | ❌ | ❌ |
| PKCS#12 Exportovat | SLH-DSA | ❌ | ✔️ | ❌ | ❌ | ❌ |
| Přidružení privátního klíče | SLH-DSA | ❌ | ✔️ | ❌ | ❌ | ❌ |