Udostępnij przez


Kryptografia międzyplatformowa na platformie .NET

Operacje kryptograficzne na platformie .NET są wykonywane przez biblioteki systemu operacyjnego. Ta zależność ma zalety:

  • Aplikacje platformy .NET korzystają z niezawodności systemu operacyjnego. Zapewnienie bezpieczeństwa bibliotek kryptograficznych przed lukami w zabezpieczeniach jest priorytetem dla dostawców systemu operacyjnego. W tym celu udostępniają aktualizacje, które powinni stosować administratorzy systemu.
  • Aplikacje platformy .NET mają dostęp do algorytmów zweryfikowanych przez standard FIPS, jeśli biblioteki systemu operacyjnego są weryfikowane przez standard FIPS.

Zależność od bibliotek systemu operacyjnego oznacza również, że aplikacje platformy .NET mogą używać tylko funkcji kryptograficznych, które obsługuje system operacyjny. Chociaż wszystkie platformy obsługują pewne podstawowe funkcje, niektóre funkcje obsługiwane przez platformę .NET nie mogą być używane na niektórych platformach. W tym artykule opisano funkcje obsługiwane na każdej platformie.

W tym artykule przyjmuje się, że masz podstawową znajomość kryptografii w .NET. Aby uzyskać więcej informacji, zobacz .NET Cryptography Model (Model kryptografii platformy .NET) i .NET Cryptographic Services (Usługi kryptograficzne platformy .NET).

Algorytmy skrótu i uwierzytelniania wiadomości

Wszystkie klasy algorytmów skrótu i uwierzytelniania komunikatów opartych na skrótach (HMAC), w tym klasy *Managed, korzystają z bibliotek systemowych, z wyjątkiem platformy .NET w przeglądarce WASM. W przeglądarce WASM, SHA-1, SHA-2-256, SHA-2-384, SHA-2-512 i odpowiedniki HMAC są implementowane przy użyciu kodu zarządzanego.

Algorytm Windows Linux macOS iOS, tvOS, MacCatalyst Android Przeglądarka
MD5 ✔️ ✔️ ✔️ ✔️ ✔️
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+

1Dostępne począwszy od platformy .NET 9.

2Rozszerzalna funkcja wyjściowa przesyłania strumieniowego (XOF) jest dostępna od .NET 9. W systemie Linux wymaga to programu OpenSSL 3.3.

Szyfrowanie symetryczne

Podstawowe szyfry i łańcuchy są wykonywane przez biblioteki systemowe.

Szyfrowanie i tryb Windows 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

Uwierzytelnione szyfrowanie

Obsługa szyfrowania uwierzytelnionego (AE) jest dostępna dla AES-CCM, AES-GCM i ChaCha20Poly1305 za pośrednictwem klas System.Security.Cryptography.AesCcm, System.Security.Cryptography.AesGcm i System.Security.Cryptography.ChaCha20Poly1305.

Ponieważ uwierzytelnione szyfrowanie wymaga nowszych interfejsów API platformy do obsługi algorytmu, obsługa może nie być obecna na wszystkich platformach. Aby wykryć w czasie wykonywania, czy bieżąca platforma obsługuje algorytm, możesz użyć IsSupported właściwości statycznej w klasie dla algorytmu.

Szyfr + tryb Windows Linux macOS iOS, tvOS, MacCatalyst Android Przeglądarka
AES-GCM ✔️ ✔️ ✔️ ⚠️ ✔️
AES-CCM ✔️ ✔️ ✔️
ChaCha20Poly1305 Windows 10 Build 20142+ OpenSSL 1.1.0+ ✔️ ⚠️ Poziom interfejsu API 28+

Program AES-CCM w systemie macOS

Przed platformą .NET 10 AES-CCM działała, jeśli obsługiwana wersja biblioteki OpenSSL była obecna, a moduł ładujący biblioteki dynamicznej mógł go zlokalizować. Obsługa protokołu OpenSSL w systemie macOS została usunięta na platformie .NET 10.

AES-GCM i ChaCha20Poly1305 w systemach iOS, tvOS i MacCatalyst

Obsługa AES-GCM i ChaCha20Poly1305 jest dostępna na platformie .NET 9 w systemach iOS i tvOS 13.0 i nowszych oraz we wszystkich wersjach oprogramowania MacCatalyst.

Klucze AES-CCM, węzły i tagi

  • Rozmiary kluczy

    Program AES-CCM współpracuje z kluczami 128, 192 i 256-bitowymi.

  • Rozmiary niezwiązane

    Klasa AesCcm obsługuje wartości 56, 64, 72, 80, 88, 96 i 104-bitowe (7, 8, 9, 10, 11, 12 i 13-bajtowe).

  • Rozmiary tagów

    Klasa AesCcm obsługuje tworzenie lub przetwarzanie tagów o rozmiarze: 4, 8, 10, 12, 14 i 16 bajtów (32, 48, 64, 80, 96, 112 i 128-bitowych).

Klucze AES-GCM, liczby jednorazowe i znaczniki

  • Rozmiary kluczy

    Usługa AES-GCM współpracuje z kluczami 128, 192 i 256-bitowymi.

  • Rozmiary nonce'u

    Klasa AesGcm obsługuje tylko 96-bitowe (12-bajtowe) numery losowe.

  • Rozmiary tagów

    W systemach Windows i Linux AesGcm klasa obsługuje tworzenie lub przetwarzanie tagów 96, 104, 112, 120 i 128-bitowych (12, 13, 14, 15 i 16 bajtów). Na platformach firmy Apple rozmiar tagu jest ograniczony do 128-bitowego (16 bajtów) ze względu na ograniczenia struktury CryptoKit.

ChaCha20Poly1305 keys, nonces i tagi

ChaCha20Poly1305 ma stały rozmiar klucza, nonce oraz tagu uwierzytelniania. ChaCha20Poly1305 zawsze używa 256-bitowego klucza, 96-bitowego (12-bajtowego) i 128-bitowego (16-bajtowego) tagu.

Kryptografia asymetryczna

Ta sekcja zawiera następujące podsekcje:

RSA

Generowanie kluczy RSA (Rivest–Shamir–Adleman) odbywa się przez biblioteki systemu operacyjnego i podlega ograniczeniom rozmiaru i cechom wydajności.

Operacje klucza RSA są wykonywane przez biblioteki systemu operacyjnego, a typy kluczy, które można załadować, podlegają wymaganiom systemu operacyjnego.

Platforma .NET nie umożliwia surowych operacji RSA (bez wypełnienia).

Obsługa uzupełniania i skrótów różni się w zależności od platformy:

Tryb uzupełniania Windows (CNG) Linux (OpenSSL) macOS iOS, tvOS, MacCatalyst Android Windows (CAPI)
Szyfrowanie 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) może wykonywać podpis PKCS1 z użyciem algorytmu SHA-2. Jednak pojedynczy obiekt RSA może zostać załadowany do dostawcy usług kryptograficznych (CSP), który go nie obsługuje.

RsA w systemie Windows

  • Windows CryptoAPI (CAPI) jest używane zawsze, gdy new RSACryptoServiceProvider() jest wykorzystywane.
  • Za każdym razem, gdy używany jest new RSACng(), wykorzystywany jest interfejs API kryptografii nowej generacji Windows (CNG).
  • Obiekt zwracany przez RSA.Create jest wewnętrznie zasilany przez CNG systemu Windows. Użycie CNG w systemie Windows jest szczegółem implementacyjnym i może się zmienić.
  • Metoda rozszerzenia GetRSAPublicKey dla X509Certificate2 zwraca wystąpienie RSACng. To zastosowanie RSACng jest szczegółem implementacji i podlega zmianie.
  • Metoda GetRSAPrivateKey rozszerzenia dla X509Certificate2 obecnie preferuje instancję RSACng, ale jeśli RSACng nie można otworzyć klucza, RSACryptoServiceProvider będzie próbowane. Preferowany dostawca jest szczegółem implementacji i może ulec zmianie.

Natywna interoperacyjność RSA

Platforma .NET uwidacznia typy, aby umożliwić programom współdziałanie z bibliotekami systemu operacyjnego używanymi przez kod kryptografii platformy .NET. Typy używane nie są kompatybilne między platformami i powinny być bezpośrednio używane tylko w razie potrzeby.

Typ Windows Linux macOS iOS, tvOS, MacCatalyst Android
RSACryptoServiceProvider ✔️ ⚠✔1 ⚠️1 ⚠✔1 ⚠️1
RSACng ✔️
RSAOpenSsl ✔️ 2

1 W systemach innych niż Windows RSACryptoServiceProvider można użyć do zapewnienia zgodności z istniejącymi programami. W takim przypadku każda metoda, która wymaga międzyoperacyjności systemu operacyjnego, taka jak otwarcie nazwanego klucza, zgłasza wyjątek PlatformNotSupportedException.

2 W systemie macOS, przed platformą .NET 10, funkcjonalność działała, jeśli OpenSSL był zainstalowany, RSAOpenSsl a odpowiednią bibliotekę libcrypto dylib można było znaleźć poprzez ładowanie dynamicznych bibliotek. Ta obsługa została usunięta na platformie .NET 10.

ECDSA

Generowanie kluczy ECDSA (Elliptic Curve Digital Signature Algorithm) odbywa się przez biblioteki systemu operacyjnego i podlega ograniczeniom rozmiaru i charakterystykom wydajności.

Krzywe kluczy ECDSA są definiowane przez biblioteki systemu operacyjnego i podlegają ich ograniczeniom.

Krzywa eliptyczna Windows 10 Windows 7 — 8.1 Linux macOS iOS, tvOS, MacCatalyst Android
NIST P-256 (secp256r1) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
NIST P-384 (secp384r1) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
NIST P-521 (secp521r1) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
Krzywe Brainpool (jako krzywe nazwane) ✔️ ⚠️1 ⚠️4
Inne nazwane krzywe ⚠️2 ⚠✔1 ⚠️4
Krzywe jawne ✔️ ✔️ ✔️
Eksportowanie lub importowanie jako proces jawny ✔️ 3 ✔️ 3 3 ✔️

1 Dystrybucje systemu Linux nie wspierają wszystkich tych samych nazwanych krzywych.

2 Obsługa nazwanych krzywych została dodana do systemu Windows CNG w systemie Windows 10. Aby uzyskać więcej informacji, zobacz CNG Named Elliptic Curves (Krzywe eliptyczne o nazwie CNG). Nazwane krzywe nie są dostępne we wcześniejszych wersjach systemu Windows, z wyjątkiem trzech krzywych w systemie Windows 7.

3 Eksportowanie z jawnymi parametrami krzywej wymaga obsługi biblioteki systemu operacyjnego, która nie jest dostępna na platformach Firmy Apple lub wcześniejszych wersjach systemu Windows.

4 Obsługa systemu Android dla niektórych krzywych zależy od wersji systemu Android. Dystrybutory systemu Android mogą również dodawać lub usuwać krzywe z kompilacji systemu Android.

Natywna interoperacyjność ECDSA

Platforma .NET uwidacznia typy, aby umożliwić programom współdziałanie z bibliotekami systemu operacyjnego używanymi przez kod kryptografii platformy .NET. Używane typy nie tłumaczą się między platformami i powinny być używane bezpośrednio tylko w razie potrzeby.

Typ Windows Linux macOS iOS, tvOS, MacCatalyst Android
ECDsaCng ✔️
ECDsaOpenSsl ✔️ ❌*

* W systemie macOS, przed .NET 10, ECDsaOpenSsl działał, jeśli program OpenSSL został zainstalowany, a odpowiednia biblioteka libcrypto dylib została znaleziona poprzez ładowanie biblioteki dynamicznej. Ta obsługa została usunięta na platformie .NET 10.

ECDH

Generowanie klucza ECDH (Elliptic Curve Diffie-Hellman) odbywa się przez biblioteki systemu operacyjnego i podlega ograniczeniom rozmiaru i cechom wydajności.

Klasa ECDiffieHellman obsługuje "nieprzetworzoną" wartość wyliczeń ECDH, a także za pomocą następujących funkcji wyprowadzania klucza:

  • Hash(Z)
  • Skrót skrótu (z góry || Z || dołącz)
  • HMAC(klucz, Z)
  • HMAC(klucz, prepend || Z || dołącz)
  • HMAC(Z, Z)
  • HMAC(Z, prepend || Z || dołącz)
  • Tls11Prf(label, seed)

Krzywe kluczy ECDH są definiowane przez biblioteki systemu operacyjnego i podlegają ich ograniczeniom.

Krzywa eliptyczna Windows 10+ Windows 7 — 8.1 Linux macOS iOS, tvOS, MacCatalyst Android
NIST P-256 (secp256r1) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
NIST P-384 (secp384r1) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
NIST P-521 (secp521r1) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
Krzywe Brainpool (jako krzywe nazwane) ✔️ ⚠✔1 ⚠️4
Inne nazwane krzywe ⚠️2 ⚠✔1 ⚠️4
Krzywe jawne ✔️ ✔️ ✔️
Eksport lub import jako jawny ✔️ 3 ✔️ 3 3 ✔️

1 Dystrybucje systemu Linux nie wspierają wszystkich tych samych nazwanych krzywych.

2 Obsługa nazwanych krzywych została dodana do systemu Windows CNG w systemie Windows 10. Aby uzyskać więcej informacji, zobacz CNG Named Elliptic Curves (Krzywe eliptyczne o nazwie CNG). Nazwane krzywe nie są dostępne we wcześniejszych wersjach systemu Windows, z wyjątkiem trzech krzywych w systemie Windows 7.

3 Eksportowanie z jawnymi parametrami krzywej wymaga obsługi biblioteki systemu operacyjnego, która nie jest dostępna na platformach Firmy Apple lub wcześniejszych wersjach systemu Windows.

4 Obsługa systemu Android dla niektórych krzywych zależy od wersji systemu Android. Dystrybutory systemu Android mogą również dodawać lub usuwać krzywe z kompilacji systemu Android.

Natywna interoperacyjność ECDH

Platforma .NET uwidacznia typy, aby umożliwić programom współdziałanie z bibliotekami systemu operacyjnego używanymi przez platformę .NET. Używane typy nie tłumaczą się między platformami i powinny być używane bezpośrednio tylko w razie potrzeby.

Typ Windows Linux macOS iOS, tvOS, MacCatalyst Android
ECDiffieHellmanCng ✔️
ECDiffieHellmanOpenSsl ✔️ ❌*

* W systemie macOS, przed .NET 10, ECDiffieHellmanOpenSsl działał, jeśli program OpenSSL został zainstalowany, a odpowiednia biblioteka libcrypto dylib została znaleziona poprzez ładowanie biblioteki dynamicznej. Ta obsługa została usunięta na platformie .NET 10.

DSA

Generowanie kluczy DSA (algorytm podpisu cyfrowego) odbywa się przez biblioteki systemowe i podlega ograniczeniom rozmiaru i charakterystykom wydajności.

Funkcja Windows CNG Linux macOS Windows CAPI (Cryptograficzny interfejs programowania aplikacji) iOS, tvOS, MacCatalyst Android
Tworzenie klucza (<= 1024 bity) ✔️ ✔️ ✔️ ✔️
Tworzenie klucza (> 1024 bity) ✔️ ✔️ ✔️
Ładowanie kluczy (<= 1024 bitów) ✔️ ✔️ ✔️ ✔️ ✔️
Ładowanie kluczy (> 1024 bity) ✔️ ✔️ ⚠️* ✔️
FIPS 186-2 ✔️ ✔️ ✔️ ✔️ ✔️
FIPS 186-3 (podpisy SHA-2) ✔️ ✔️ ✔️

* System macOS ładuje klucze DSA większe niż 1024 bity, ale zachowanie tych kluczy jest niezdefiniowane. Nie zachowują się zgodnie z FIPS 186-3.

DsA w systemie Windows

  • Windows CryptoAPI (CAPI) jest używane zawsze, gdy new DSACryptoServiceProvider() jest wykorzystywane.
  • Za każdym razem, gdy używany jest new DSACng(), wykorzystywany jest interfejs API kryptografii nowej generacji Windows (CNG).
  • Obiekt zwracany przez DSA.Create jest wewnętrznie zasilany przez CNG systemu Windows. Użycie CNG w systemie Windows jest szczegółem implementacyjnym i może się zmienić.
  • Metoda rozszerzenia GetDSAPublicKey dla X509Certificate2 zwraca wystąpienie DSACng. To zastosowanie DSACng jest szczegółem implementacji i podlega zmianie.
  • Metoda rozszerzenia GetDSAPrivateKey preferuje instancję DSACng dla X509Certificate2, ale jeśli nie można otworzyć klucza za pomocą DSACng, zostanie użyty jako alternatywa DSACryptoServiceProvider. Preferowany dostawca jest szczegółem implementacji i może ulec zmianie.

Natywna interoperacyjność DSA

Platforma .NET uwidacznia typy, aby umożliwić programom współdziałanie z bibliotekami systemu operacyjnego używanymi przez kod kryptografii platformy .NET. Używane typy nie tłumaczą się między platformami i powinny być używane bezpośrednio tylko w razie potrzeby.

Typ Windows Linux macOS iOS, tvOS, MacCatalyst Android
DSACryptoServiceProvider ✔️ ⚠✔1 ⚠✔1 ⚠✔1
DSACng ✔️
DSAOpenSsl ✔️ 2

1 W systemach innych niż Windows DSACryptoServiceProvider można użyć do zapewnienia zgodności z istniejącymi programami. W takim przypadku każda metoda, która wymaga międzyoperacyjności systemowej, takiej jak otwarcie nazwanego klucza, zgłasza wyjątek PlatformNotSupportedException.

2 W systemie macOS, przed platformą .NET 10, funkcjonalność działała, jeśli OpenSSL był zainstalowany, DSAOpenSsl a odpowiednią bibliotekę libcrypto dylib można było znaleźć poprzez ładowanie dynamicznych bibliotek. Ta obsługa została usunięta na platformie .NET 10.

Kryptografia postkwantowa

Algorytmy po kwantowe są dostępne począwszy od platformy .NET 10. Są one również dostępne dla programu .NET Framework przy użyciu pakietu NuGet Microsoft.Bcl.Cryptography. Poniższa tabela wsparcia wskazuje obsługę platformy dla wbudowanych składników kryptograficznych systemu operacyjnego, takich jak te utworzone z Generate lub ImportFromPem. Implementacje pochodzące z klasy bazowej mogą mieć różne sposoby obsługi.

W przypadku wbudowanych algorytmów dostępna jest właściwość statyczna umożliwiająca określenie, IsSupported czy platforma obsługuje dowolny z zestawów parametrów.

Natywne typy międzyoperacyjności dla algorytmów post kwantowych nie obsługują generowania kluczy ani importowania. Istnieją one specjalnie dla scenariuszy międzyoperacyjności z natywnymi typami platform, takimi jak EVP_PKEY w środowisku OpenSSL lub CngKey w systemie Windows.

ML-KEM

Algorytm Windows Linux Jabłko Android Przeglądarka
ML-KEM-512 Niejawni testerzy systemu Windows 11 (najnowsza wersja) OpenSSL 3.5.0+
ML-KEM-768 Niejawni testerzy systemu Windows 11 (najnowsza wersja) OpenSSL 3.5.0+
ML-KEM-1024 Niejawni testerzy systemu Windows 11 (najnowsza wersja) OpenSSL 3.5.0+

Natywna międzyoperacyjność ML-KEM

ML-DSA

ML-DSA ma wariant czysty i wariant prehash (HashML-DSA). W poniższej tabeli przedstawiono zarówno warianty czyste, jak i prehash.

Algorytm Windows Linux Jabłko Android Przeglądarka
ML-DSA-44 Niejawni testerzy systemu Windows 11 (najnowsza wersja) OpenSSL 3.5.0+
ML-DSA-65 Niejawni testerzy systemu Windows 11 (najnowsza wersja) OpenSSL 3.5.0+
ML-DSA-87 Niejawni testerzy systemu Windows 11 (najnowsza wersja) 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 Zewnętrzna obsługa Mu służy tylko do podpisywania i weryfikowania Mu. Obliczanie Mu nie jest obsługiwane.

Międzyoperacyjność natywna ML-DSA

SLH-DSA

SLH-DSA ma wariant czysty i wariant z wstępnym hashowaniem (HashSLH-DSA). W poniższej tabeli przedstawiono zarówno warianty czyste, jak i prehash.

Algorytm Windows Linux Jabłko Android Przeglądarka
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+

Natywna interoperacyjność SLH-DSA

Złożony ML-DSA

Algorytm Windows Linux Jabłko Android Przeglądarka
MLDSA44-RSA2048-PSS-SHA256 Niejawni testerzy systemu Windows 11 (najnowsza wersja) OpenSSL 3.5.0+
MLDSA44-RSA2048-PKCS15-SHA256 Niejawni testerzy systemu Windows 11 (najnowsza wersja) OpenSSL 3.5.0+
MLDSA44—Ed25519-SHA512
MLDSA44-ECDSA-P256-SHA256 Niejawni testerzy systemu Windows 11 (najnowsza wersja) OpenSSL 3.5.0+
MLDSA65-RSA3072-PSS-SHA512 Niejawni testerzy systemu Windows 11 (najnowsza wersja) OpenSSL 3.5.0+
MLDSA65-RSA3072-PKCS15-SHA512 Niejawni testerzy systemu Windows 11 (najnowsza wersja) OpenSSL 3.5.0+
MLDSA65-RSA4096-PSS-SHA512 Niejawni testerzy systemu Windows 11 (najnowsza wersja) OpenSSL 3.5.0+
MLDSA65-RSA4096-PKCS15-SHA512 Niejawni testerzy systemu Windows 11 (najnowsza wersja) OpenSSL 3.5.0+
MLDSA65-ECDSA-P256-SHA512 Niejawni testerzy systemu Windows 11 (najnowsza wersja) OpenSSL 3.5.0+
MLDSA65-ECDSA-P384-SHA512 Niejawni testerzy systemu Windows 11 (najnowsza wersja) OpenSSL 3.5.0+
MLDSA65-ECDSA-brainpoolP256r1-SHA512 Niejawni testerzy systemu Windows 11 (najnowsza wersja) OpenSSL 3.5.0+
MLDSA65–Ed25519–SHA512
MLDSA87-ECDSA-P384-SHA512 Niejawni testerzy systemu Windows 11 (najnowsza wersja) OpenSSL 3.5.0+
MLDSA87-ECDSA-brainpoolP384r1-SHA512 Niejawni testerzy systemu Windows 11 (najnowsza wersja) OpenSSL 3.5.0+
MLDSA87—Ed448-SHAKE256
MLDSA87-RSA3072-PSS-SHA512 Niejawni testerzy systemu Windows 11 (najnowsza wersja) OpenSSL 3.5.0+
MLDSA87-RSA4096-PSS-SHA512 Niejawni testerzy systemu Windows 11 (najnowsza wersja) OpenSSL 3.5.0+
MLDSA87-ECDSA-P521-SHA512 Niejawni testerzy systemu Windows 11 (najnowsza wersja) OpenSSL 3.5.0+

Złożona natywna międzyoperacyjność ML-DSA

Certyfikaty X.509

Większość obsługi certyfikatów X.509 na platformie .NET pochodzi z bibliotek systemu operacyjnego. Aby załadować certyfikat do wystąpienia X509Certificate2 lub X509Certificate na platformie .NET, certyfikat musi zostać załadowany przez podstawową bibliotekę systemu operacyjnego.

Odczytaj PKCS12/PFX

Scenariusz Windows Linux macOS iOS, tvOS, MacCatalyst Android
Pusty ✔️ ✔️ ✔️ ✔️ ✔️
Jeden certyfikat, bez klucza prywatnego ✔️ ✔️ ✔️ ✔️ ✔️
Jeden certyfikat z kluczem prywatnym ✔️ ✔️ ✔️ ✔️ ✔️
Wiele certyfikatów, bez kluczy prywatnych ✔️ ✔️ ✔️ ✔️ ✔️
Wiele certyfikatów, jeden klucz prywatny ✔️ ✔️ ✔️ ✔️ ✔️
Wiele certyfikatów, wiele kluczy prywatnych ✔️ ✔️ ✔️ ✔️ ✔️

Utwórz PKCS12/PFX

Scenariusz Windows Linux macOS iOS, tvOS, MacCatalyst Android
Pusty ✔️ ✔️ ✔️ ✔️ ✔️
Jeden certyfikat, bez klucza prywatnego ✔️ ✔️ ✔️ ✔️ ✔️
Jeden certyfikat z kluczem prywatnym ✔️ ✔️ ✔️ ✔️ ✔️
Wiele certyfikatów, bez kluczy prywatnych ✔️ ✔️ ✔️ ✔️ ✔️
Wiele certyfikatów, jeden klucz prywatny ✔️ ✔️ ✔️ ✔️ ✔️
Wiele certyfikatów, wiele kluczy prywatnych ✔️ ✔️ ✔️ ✔️ ✔️
Ładowanie efemeryczne ✔️ ✔️ ✔️ ✔️

System macOS nie może załadować kluczy prywatnych certyfikatu bez obiektu pęku kluczy, który wymaga zapisu na dysku. Pęki kluczy są tworzone automatycznie na potrzeby ładowania PFX i są usuwane, gdy nie są już używane. Ponieważ opcja X509KeyStorageFlags.EphemeralKeySet oznacza, że klucz prywatny nie powinien być zapisywany na dysku, ustawienie tej flagi w systemie macOS powoduje wyświetlenie elementu PlatformNotSupportedException.

Utwórz zbiór certyfikatów PKCS7

Systemy Windows i Linux generują blob zakodowany w formacie DER PKCS7. System macOS emituje obiekty blob PKCS7 zakodowane w formacie CER o nieokreślonej długości.

X509Store

W systemie Windows X509Store klasa jest reprezentacją interfejsów API magazynu certyfikatów systemu Windows. Te interfejsy API działają tak samo na platformie .NET, jak w programie .NET Framework.

W systemach innych niż Windows klasa X509Store jest projekcją decyzji zaufania systemu (tylko odczyt), decyzji zaufania użytkownika (odczyt i zapis) oraz magazynu kluczy użytkownika (odczyt i zapis).

W poniższych tabelach pokazano, które scenariusze są obsługiwane na każdej platformie. W przypadku nieobsługiwanych scenariuszy (❌ w tabelach) zgłaszany jest wyjątek CryptographicException.

Mój sklep

Scenariusz Windows Linux macOS iOS, tvOS, MacCatalyst Android
Otwórz plik CurrentUser\My (ReadOnly) ✔️ ✔️ ✔️ ✔️ ✔️
Otwórz CurrentUser\My (ReadWrite) ✔️ ✔️ ✔️ ✔️ ✔️
Otwórz CurrentUser\My (ExistingOnly) ✔️ ⚠️ ✔️ ✔️ ✔️
Otwórz plik LocalMachine\My ✔️ ✔️ ✔️ ✔️

W systemie Linux magazyny są tworzone przy pierwszym zapisie i domyślnie nie istnieją żadne magazyny użytkowników, co może prowadzić do niepowodzenia przy próbie otwarcia CurrentUser\My za pomocą ExistingOnly.

W systemie macOS CurrentUser\My magazyn jest domyślnym pękiem kluczy użytkownika, który jest login.keychain domyślnie. Sklep LocalMachine\My ma wartość System.keychain.

Główny sklep

Scenariusz Windows Linux macOS iOS, tvOS, MacCatalyst Android
Otwórz plik CurrentUser\Root (ReadOnly) ✔️ ✔️ ✔️ ✔️
Otwórz plik CurrentUser\Root (ReadWrite) ✔️ ✔️
Otwórz CurrentUser\Root (IstniejącyTylko) ✔️ ⚠️ ✔️ (jeśli tylko do odczytu) ✔️ (jeśli tylko do odczytu)
Otwórz plik LocalMachine\Root (ReadOnly) ✔️ ✔️ ✔️ ✔️
Otwórz plik LocalMachine\Root (ReadWrite) ✔️
Otwórz LocalMachine\Root (ExistingOnly) ✔️ ⚠️ ✔️ (jeśli ReadOnly) ✔️ (jeśli tylko do odczytu)

W systemie Linux LocalMachine\Root repozytorium jest interpretowaną wersją pakietu CA znajdującego się w domyślnej ścieżce dla biblioteki OpenSSL.

W systemie macOS CurrentUser\Root magazyn jest interpretacją SecTrustSettings wyników dla domeny zaufania użytkownika. Repozytorium LocalMachine\Root to interpretacja wyników SecTrustSettings dla domen zaufania administracyjnego i systemowego.

Zaufane lokalizacje certyfikatów głównych w systemie Linux

W systemie Linux platforma .NET używa biblioteki OpenSSL (libssl) do lokalizowania zaufanych certyfikatów głównych. Biblioteka OpenSSL określa lokalizację magazynu certyfikatów przy użyciu zmiennych środowiskowych (SSL_CERT_FILE i SSL_CERT_DIR) i ścieżek domyślnych specyficznych dla dystrybucji. Gdy katalog główny skonfigurowany dla OpenSSL nie zawiera certyfikatów, platforma .NET przechodzi do sprawdzania /etc/ssl/certs. Mechanizm rezerwowy zapewnia zgodność z dystrybucjami, takimi jak SUSE Linux Enterprise Server (SLES), gdzie katalog określony przez SSL_CERT_DIR może zawierać tylko certyfikaty w formacie BEGIN TRUSTED CERTIFICATE, których platforma .NET nie obsługuje jako certyfikatów głównych.

Mechanizm zapasowy występuje tylko wtedy, gdy:

  1. Zmienna SSL_CERT_DIR środowiskowa nie jest jawnie ustawiona.
  2. Domyślny katalog certyfikatów nie zawiera certyfikatów do użycia.

Jeśli certyfikaty nie są ładowane poprawnie, sprawdź, czy:

  • Pliki certyfikatów są w formacie PEM ze znacznikiem BEGIN CERTIFICATE (nie BEGIN TRUSTED CERTIFICATE).
  • Zmienne SSL_CERT_DIR środowiskowe i SSL_CERT_FILE wskazują prawidłowe lokalizacje, jeśli są ustawione.
  • Plik pakietu certyfikatu lub katalog ma odpowiednie uprawnienia do odczytu.

Magazyn pośredni

Scenariusz Windows Linux macOS iOS, tvOS, MacCatalyst Android
Otwórz plik CurrentUser\Intermediate (ReadOnly) ✔️ ✔️ ✔️
Otwórz plik CurrentUser\Intermediate (ReadWrite) ✔️ ✔️
Otwórz CurrentUser\Intermediate (TylkoIstniejące) ✔️ ⚠️ ✔️ (jeśli tylko do odczytu)
Otwórz plik LocalMachine\Intermediate (ReadOnly) ✔️ ✔️ ✔️
Otwórz plik LocalMachine\Intermediate (ReadWrite) ✔️
Otwórz LocalMachine\Intermediate (TylkoIstniejące) ✔️ ⚠️ ✔️ (jeśli tylko do odczytu)

W systemie Linux magazyn CurrentUser\Intermediate jest używany jako cache podczas pobierania pośrednich urzędów certyfikacji zgodnie z rekordami dostępu do informacji autorytetu na udanych budowlach X509Chain. Repozytorium LocalMachine\Intermediate jest interpretacją pakietu CA w domyślnej ścieżce dla OpenSSL.

Na macOS CurrentUser\Intermediate sklep jest traktowany jako sklep niestandardowy. Certyfikaty dodane do tego magazynu nie mają wpływu na tworzenie łańcucha X.509.

Niedozwolony sklep

Scenariusz Windows Linux macOS iOS, tvOS, MacCatalyst Android
Otwórz CurrentUser\Disallowed (Tylko do odczytu) ✔️ ⚠️ ✔️ ✔️ ✔️
Otwórz CurrentUser\Disallowed (ReadWrite) ✔️ ⚠️
Otwórz plik CurrentUser\Disallowed (ExistingOnly) ✔️ ⚠️ ✔️ (jeśli tylko do odczytu) ✔️ (jeśli ReadOnly) ✔️ (jeśli tylko do odczytu)
Otwórz plik LocalMachine\Disallowed (ReadOnly) ✔️ ✔️ ✔️ ✔️
Otwórz LocalMachine\Disallowed (ReadWrite) ✔️
Otwórz LocalMachine\Disallowed (ExistingOnly) ✔️ ✔️ (jeśli ReadOnly) ✔️ (jeśli tylko do odczytu) ✔️ (jeśli tylko do odczytu)

W systemie Linux repozytorium nie jest używane w tworzeniu Disallowed łańcucha, a próba dodania do niego zawartości powoduje CryptographicException. Element CryptographicException jest zgłaszany podczas otwierania sklepu Disallowed , jeśli już nabył zawartość.

W systemie macOS, CurrentUser\Disallowed i LocalMachine\Disallowed stores to interpretacje odpowiednich wyników SecTrustSettings dla certyfikatów, których zaufanie jest ustawione na Always Deny.

Brak magazynu

Scenariusz Windows Linux macOS iOS, tvOS, MacCatalyst Android
Otwórz magazyn nieistniejący (ExistingOnly)
Otwórz magazyn Bieżącego Użytkownika, który nie istnieje (ReadWrite) ✔️ ✔️ ⚠️
Otwórz nieistniejący magazyn LocalMachine (ReadWrite) ✔️

W systemie macOS tworzenie magazynu niestandardowego przy użyciu interfejsu API X509Store jest obsługiwane tylko dla określonej lokalizacji CurrentUser. Spowoduje to utworzenie nowego łańcucha kluczy bez hasła w katalogu łańcucha kluczy użytkownika (~/Library/Keychains). Aby utworzyć pęk kluczy z hasłem, można użyć P/Invoke SecKeychainCreate . SecKeychainOpen Podobnie można użyć do otwierania pęków kluczy w różnych lokalizacjach. Wynikowy IntPtr może zostać przekazany do new X509Store(IntPtr) w celu uzyskania magazynu z obsługą odczytu/zapisu, z zastrzeżeniem uprawnień bieżącego użytkownika.

X509Chain

System macOS nie obsługuje użycia listy CRL w trybie offline, dlatego X509RevocationMode.Offline jest traktowany jako X509RevocationMode.Online.

System macOS nie obsługuje limitu czasu ustalonego przez użytkownika podczas pobierania CRL (listy unieważnionych certyfikatów) / OCSP (protokołu statusu certyfikatu online) / AIA (dostępu do informacji o urzędzie), więc X509ChainPolicy.UrlRetrievalTimeout jest ignorowany.

Certyfikaty kryptografii po kwantowej i PKCS12/PFX

Obsługa certyfikatów post kwantowych wymaga również obsługi algorytmu pierwotnego.

Operation Algorytm Windows Linux Jabłko Android Przeglądarka
Importowanie PKCS#12 ML-DSA ✔️ ✔️
Eksport PKCS#12 ML-DSA ✔️ ✔️
Skojarzenie klucza prywatnego ML-DSA ✔️ ✔️
 
Importowanie PKCS#12 ML-KEM ✔️
Eksport PKCS#12 ML-KEM ✔️
Skojarzenie klucza prywatnego ML-KEM ✔️
 
Importowanie PKCS#12 SLH-DSA ✔️
Eksport PKCS#12 SLH-DSA ✔️
Skojarzenie klucza prywatnego SLH-DSA ✔️

Dodatkowe zasoby