Kryptografie napříč platformami v .NET

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

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

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

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

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í

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

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:

  1. Proměnná prostředí SSL_CERT_DIR není explicitně nastavená.
  2. 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 (ne BEGIN TRUSTED CERTIFICATE).
  • SSL_CERT_DIR a SSL_CERT_FILE promě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 ✔️

Další materiály