Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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
- MLKemOpenSsl: OpenSSL 3.5.0+
- MLKemCng: Niejawni testerzy systemu Windows 11 (najnowsza wersja)
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
- MLDsaOpenSsl: OpenSSL 3.5.0+
- MLDsaCng: Niejawni testerzy systemu Windows 11 (najnowsza wersja)
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
- SlhDsaOpenSsl: OpenSSL 3.5.0+
- SlhDsaCng: Nieobsługiwane
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
- CompositeMLDsaCng: Nieobsługiwane
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:
- Zmienna
SSL_CERT_DIRśrodowiskowa nie jest jawnie ustawiona. - 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(nieBEGIN TRUSTED CERTIFICATE). - Zmienne
SSL_CERT_DIRśrodowiskowe iSSL_CERT_FILEwskazują 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 | ❌ | ✔️ | ❌ | ❌ | ❌ |