Sdílet prostřednictvím


Kryptografie pro různé platformy 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 hash a ověřování zpráv

Všechny třídy ověřování zpráv založených na hodnotě hash (HMAC), včetně *Managed tříd, odkládají do knihoven 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 System.Security.Cryptography.AesCcmtřídy , System.Security.Cryptography.AesGcma System.Security.Cryptography.ChaCha20Poly1305 třídy.

Vzhledem k tomu, že ověřené šifrování vyžaduje novější rozhraní API platformy pro podporu algoritmu, nemusí být podpora k dispozici na všech platformách. IsSupported Statickou vlastnost třídy pro algoritmus lze použít k detekci za běhu, pokud aktuální platforma podporuje algoritmus nebo ne.

Š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, nesouvisejí a značky

  • Velikosti klíčů

    AES-CCM funguje s 128, 192 a 256bitovými klíči.

  • Jiné velikosti

    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, nesouvisejí a značky

  • Velikosti klíčů

    AES-GCM funguje s 128, 192 a 256bitovými klíči.

  • Jiné velikosti

    Třída AesGcm podporuje pouze 96bitové (12bajtů) neces.

  • Značky Velikosti ve Windows a Linuxu AesGcm podporují 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 128bitový (16bajtů) kvůli omezením rozhraní CryptoKit.

Klíče ChaCha20Poly1305, nonces a značky.

ChaCha20Poly1305 má pevnou velikost pro klíč, nece a ověřovací značku. ChaCha20Poly1305 vždy používá 256bitový klíč, 96bitovou (12bajtů) nonce a 128bitovou (16bajtů).

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 operace RSA nezpracované (nepaddované).

Podpora odsazení a hodnoty hash se liší podle platformy:

Režim odsazení 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) je schopný podpis PKCS1 s algoritmem SHA-2. Jednotlivé objekty RSA se ale můžou načíst ve zprostředkovateli kryptografických služeb (CSP), který ho 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 V jiných systémech než RSACryptoServiceProvider Windows lze 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á PlatformNotSupportedExceptionchybu .

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 brainpoolu (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é elliptické 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 4 Androidu pro některé křivky závisí na verzi Androidu. 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ředpend || Z || append)
  • HMAC(klíč, Z)
  • HMAC(klíč, předpend || Z || append)
  • HMAC(Z, Z)
  • HMAC(Z, předpend || Z || append)
  • Tls11Prf(label, počáteční)

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 brainpoolu (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é elliptické 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 4 Androidu pro některé křivky závisí na verzi Androidu. 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 ✔️ ❌*

* Na macOS fungoval ECDiffieHellmanOpenSsl před .NET 10, pokud byla nainstalována knihovna OpenSSL a bylo možné dynamickým načítáním knihoven najít odpovídající knihovnu libcrypto dylib. 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 V jiných systémech než DSACryptoServiceProvider Windows lze 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émovou interoperabilitu, například otevření pojmenovaného klíče, vyvolá PlatformNotSupportedExceptionchybu .

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íčů ✔️ ✔️ ✔️ ✔️ ✔️

Zápis 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ýsledkem toho, že příznak v systému macOS má za PlatformNotSupportedExceptionnásledek .

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. Tato rozhraní API fungují stejně jako v .NET Core a .NET 5 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) CryptographicException se vyvolá.

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 chybou 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í) ✔️ ⚠️ ✔️ (pokud jen pro čtení) ✔️ (pokud jen pro čtení)

V Linuxu LocalMachine\Root je úložiště interpretací sady certifikační autority ve výchozí cestě pro OpenSSL.

V systému macOS CurrentUser\Root je úložiště interpretací SecTrustSettings výsledků pro doménu důvěryhodnosti uživatele. Úložiště LocalMachine\Root je interpretace SecTrustSettings výsledků domén důvěryhodnosti správce a systému.

Zprostředkující ú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í)

V Linuxu CurrentUser\Intermediate se úložiště používá jako mezipaměť při stahování zprostředkujících certifikačních autorit záznamy přístupu k informacím o autoritě při úspěšných buildech X509Chain. Úložiště LocalMachine\Intermediate je interpretace sady certifikační autority ve výchozí cestě pro OpenSSL.

V systému macOS CurrentUser\Intermediate se obchod považuje za vlastní úložiště. Certifikáty přidané do tohoto úložiště nemají vliv na vytváření řetězového řetězce X.509.

Nepovolené úložiště

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řít LocalMachine\Disallowed (ReadWrite) ✔️
Otevřít LocalMachine\Disallowed (ExistingOnly) ✔️ ✔️ (pokud jen pro čtení) ✔️ (pokud jen pro čtení) ✔️ (pokud jen pro čtení)

V Linuxu Disallowed se úložiště nepoužívá při vytváření řetězu 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í úložiště

Scénář Windows Operační systém Linux macOS iOS, tvOS, MacCatalyst Android
Otevřít neexistující úložiště (ExistingOnly)
Otevřít neexistující úložiště CurrentUser (ReadWrite) ✔️ ✔️ ⚠️
Otevřít neexistující úložiště LocalMachine (ReadWrite) ✔️

V systému macOS se vlastní úložiště s rozhraním API X509Store podporuje jenom pro CurrentUser umístění. Vytvoří novou řetězce klíčů bez hesla v adresáři řetězce klíčů uživatele (~/Library/Klíčenky). K vytvoření řetězce klíčů s heslem je možné použít volání nespravovaného SecKeychainCreate kódu. SecKeychainOpen Podobně se dá použít k otevření klíčů v různých umístěních. Výsledek IntPtr se dá předat, aby new X509Store(IntPtr) bylo možné získat úložiště podporující čtení a zápis, a to v závislosti na oprávněních 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 stahování časového limitu iniciovaného uživatelem v seznamu odvolaných certifikátů (CRL) / OCSP (Online certificate Status Protocol) / 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 Import ML-DSA ✔️ ✔️
PKCS#12 Exportovat ML-DSA ✔️ ✔️
Přidružení privátního klíče ML-DSA ✔️ ✔️
 
PKCS#12 Import ML-KEM ✔️
PKCS#12 Exportování ML-KEM ✔️
Přidružení privátního klíče ML-KEM ✔️
 
PKCS#12 Import SLH-DSA ✔️
PKCS#12 Exportovat SLH-DSA ✔️
Asociace privátního klíče SLH-DSA ✔️

Další materiály