Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A .NET titkosítási műveleteit operációsrendszer-kódtárak végzik. Ennek a függőségnek előnyei vannak:
- A .NET-alkalmazások kihasználják az operációs rendszer megbízhatóságát. A titkosítási kódtárak biztonsági rések elleni védelme az operációsrendszer-gyártók számára kiemelt fontosságú. Ehhez olyan frissítéseket biztosítanak, amelyeket a rendszergazdáknak alkalmazniuk kell.
- A .NET-alkalmazások hozzáférhetnek a FIPS által ellenőrzött algoritmusokhoz, ha az operációsrendszer-kódtárak FIPS-ellenőrzéssel rendelkeznek.
Az operációsrendszer-kódtáraktól való függőség azt is jelenti, hogy a .NET-alkalmazások csak az operációs rendszer által támogatott titkosítási funkciókat használhatják. Bár minden platform támogatja bizonyos alapvető funkciókat, egyes .NET által támogatott funkciók egyes platformokon nem használhatók. Ez a cikk az egyes platformokon támogatott funkciókat ismerteti.
Ez a cikk feltételezi, hogy ismeri a .NET titkosítását. További információ: .NET titkosítási modell és .NET titkosítási szolgáltatások.
Kivonat- és üzenethitelesítési algoritmusok
Az összes kivonatalgoritmus és kivonatalapú üzenethitelesítési (HMAC) osztály, beleértve az *Managed osztályokat is, a böngészőben futó .NET WASM kivételével, az operációs rendszer könyvtáraira támaszkodik. A WASM böngészőben az SHA-1, az SHA-2-256, az SHA-2-384, az SHA-2-512 és a HMAC megfelelői felügyelt kóddal implementálódnak.
| Algoritmus | Windows | Linux | macOS | iOS, tvOS, MacCatalyst | Android | Böngésző |
|---|---|---|---|---|---|---|
| MD5 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
| SHA-1 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| SHA-2-256 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| SHA-2-384 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| SHA-2-512 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| SHA-3-256 | Windows 11 25324+-os build | OpenSSL 1.1.1+ | ❌ | ❌ | ❌ | ❌ |
| SHA-3-384 | Windows 11 25324+-os build | OpenSSL 1.1.1+ | ❌ | ❌ | ❌ | ❌ |
| SHA-3-512 | Windows 11 25324+-os build | OpenSSL 1.1.1+ | ❌ | ❌ | ❌ | ❌ |
| SHAKE-128 | Windows 11 25324+-os build | OpenSSL 1.1.1+2 | ❌ | ❌ | ❌ | ❌ |
| SHAKE-256 | Windows 11 25324+-os build | 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 25324+-os build | OpenSSL 1.1.1+ | ❌ | ❌ | ❌ | ❌ |
| HMAC-SHA-3-384 | Windows 11 25324+-os build | OpenSSL 1.1.1+ | ❌ | ❌ | ❌ | ❌ |
| HMAC-SHA-3-512 | Windows 11 25324+-os build | OpenSSL 1.1.1+ | ❌ | ❌ | ❌ | ❌ |
| KMAC-1281 | Windows 11 26016+-os build | OpenSSL 3.0+ | ❌ | ❌ | ❌ | ❌ |
| KMAC-2561 | Windows 11 26016+-os build | OpenSSL 3.0+ | ❌ | ❌ | ❌ | ❌ |
| KMAC-XOF-1281 | Windows 11 26016+-os build | OpenSSL 3.0+ | ❌ | ❌ | ❌ | ❌ |
| KMAC-XOF-2561 | Windows 11 26016+-os build | OpenSSL 3.0+ | ❌ | ❌ | ❌ | ❌ |
1A .NET 9-től kezdve érhető el.
2A streamelhető bővíthető kimeneti függvény (XOF) a .NET 9-től érhető el. Linuxon ehhez OpenSSL 3.3 szükséges.
Szimmetrikus titkosítás
A mögöttes titkosítást és láncolást a rendszerkódtárak végzik.
| Titkosítás + mód | Windows | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
|---|---|---|---|---|---|
| AES-CBC | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| AES-ECB | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| AES-CFB8 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| AES-CFB128 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| 3DES-CBC | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| 3DES-ECB | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| 3DES-CFB8 (háromszoros DES titkosítás CFB8 üzemmódban) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| 3DES-CFB64 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| DES-CBC | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| DES-ECB | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| DES-CFB8 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| RC2-CBC | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
| RC2-ECB | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
| RC2-CFB | ❌ | ❌ | ❌ | ❌ | ❌ |
Hitelesített titkosítás
Hitelesített titkosítási (AE) támogatás érhető el az AES-CCM, az AES-GCM és a ChaCha20Poly1305 esetében az , System.Security.Cryptography.AesCcmés System.Security.Cryptography.AesGcm az System.Security.Cryptography.ChaCha20Poly1305osztályokon keresztül.
Mivel a hitelesített titkosításhoz újabb platform API-k szükségesek az algoritmus támogatásához, előfordulhat, hogy a támogatás nem minden platformon jelen van. Ha futásidőben szeretné észlelni, hogy az aktuális platform támogatja-e az algoritmust, használhatja az IsSupported osztály statikus tulajdonságát az algoritmushoz.
| Titkosítás + mód | Windows | Linux | macOS | iOS, tvOS, MacCatalyst | Android | Böngésző |
|---|---|---|---|---|---|---|
| AES-GCM | ✔️ | ✔️ | ✔️ | ⚠️ | ✔️ | ❌ |
| AES-CCM | ✔️ | ✔️ | ❌ | ❌ | ✔️ | ❌ |
| ChaCha20Poly1305 | Windows 10 Build 20142+ | OpenSSL 1.1.0+ | ✔️ | ⚠️ | API szint 28+ | ❌ |
AES-CCM macOS rendszeren
A .NET 10 előtt AES-CCM működött, ha az OpenSSL támogatott verziója volt jelen, és a dinamikus kódtárbetöltő megtalálta. A macOS OpenSSL-támogatása el lett távolítva a .NET 10-ben.
AES-GCM és ChaCha20Poly1305 iOS, tvOS és MacCatalyst rendszeren
Az AES-GCM és a ChaCha20Poly1305 támogatása .NET 9-től kezdve érhető el iOS és tvOS 13.0 és újabb rendszereken, valamint a MacCatalyst összes verziójában.
AES-CCM-kulcsok, nonces és címkék
Kulcsméretek
Az AES-CCM 128, 192 és 256 bites kulcsokkal működik.
Nonce méretek
Az AesCcm osztály támogatja az 56, 64, 72, 80, 88, 96 és 104 bites (7, 8, 9, 10, 11, 12 és 13 bájtos) nonceseket.
Címkeméretek
Az AesCcm osztály támogatja a 32, 48, 64, 80, 96, 112 és 128 bites (4, 8, 10, 12, 14 és 16 bájtos) címkék létrehozását vagy feldolgozását.
AES-GCM-kulcsok, nonces és címkék
Kulcsméretek
Az AES-GCM 128, 192 és 256 bites kulcsokkal működik.
Nonce méretek
Az AesGcm osztály csak 96 bites (12 bájtos) nonceseket támogat.
Címkeméretek
Windows és Linux rendszeren az AesGcm osztály támogatja a 96, 104, 112, 120 és 128 bites (12, 13, 14, 15 és 16 bájtos) címkék létrehozását vagy feldolgozását. Apple-platformokon a címke mérete a CryptoKit-keretrendszer korlátozásai miatt legfeljebb 128 bites (16 bájtos) lehet.
ChaCha20Poly1305 kulcsok, noncék és címkék
A ChaCha20Poly1305 rögzített méretű a kulcs, a nonce és a hitelesítési címke számára. A ChaCha20Poly1305 mindig egy 256 bites kulcsot, egy 96 bites (12 bájtos) nonce-t és 128 bites (16 bájtos) címkét használ.
Aszimmetrikus titkosítás
Ez a szakasz a következő alszakaszokat tartalmazza:
RSA
Az RSA (Rivest–Shamir–Adleman) kulcsgenerálást az operációsrendszer-kódtárak végzik, és méretkorlátozásokra és teljesítményjellemzőkre vonatkoznak.
Az RSA-kulcsműveleteket az operációsrendszer-kódtárak hajtják végre, és a betölthető kulcstípusokra az operációs rendszer követelményei vonatkoznak.
A .NET nem teszi elérhetővé a "nyers" (nempadded) RSA-műveleteket.
A kitöltés és a kivonatolás támogatása platformonként eltérő:
| Párnázási mód | Windows (CNG) | Linux (OpenSSL) | macOS | iOS, tvOS, MacCatalyst | Android | Windows (CAPI) |
|---|---|---|---|---|---|---|
| PKCS1 titkosítás | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| OAEP – SHA-1 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| OAEP – SHA-2 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
| OAEP – SHA-3 | Windows 11 25324+-os build | OpenSSL 1.1.1+ | ❌ | ❌ | ❌ | ❌ |
| PKCS1 aláírás (MD5, SHA-1) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| PKCS1-aláírás (SHA-2) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ⚠ ️ 1 |
| PKCS1-aláírás (SHA-3) | Windows 11 25324+-os build | OpenSSL 1.1.1+ | ❌ | ❌ | ❌ | ❌ |
| PSS | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
Az 1 Windows CryptoAPI (CAPI) sha-2 algoritmussal képes PKCS1 aláírásra. Az egyes RSA-objektum azonban betölthető egy olyan titkosítási szolgáltatóba (CSP), amely nem támogatja azt.
RSA Windows rendszeren
- Amikor a
new RSACryptoServiceProvider()használatban van, a Windows CryptoAPI (CAPI) is használatos. - Windows Cryptography API Next Generation (CNG) akkor használatos, amikor a
new RSACng()használt. - A visszaadott RSA.Create objektum belsőleg a Windows CNG-n működik. A Windows CNG használata implementálási részlet, és változhat.
- A GetRSAPublicKey bővítménymetódus a X509Certificate2 egy RSACng példányt ad vissza. Ez a RSACng használat egy megvalósítási részlet, és változhat.
- A GetRSAPrivateKey bővítménymetódus jelenleg X509Certificate2 esetén előnyben részesít egy RSACng példányt, de ha nem lehet megnyitni a RSACng kulcsot, akkor a RSACryptoServiceProvider kerül megkísérlésre. Az előnyben részesített szolgáltató egy megvalósítási részlet, és változhat.
RSA natív interop
A .NET olyan típusokat tesz elérhetővé, amelyek lehetővé teszik, hogy a programok együttműködjenek a .NET-titkosítási kód által használt operációsrendszer-kódtárakkal. Az érintett típusok nem fordíthatók le a platformok között, és csak akkor használhatók közvetlenül, ha szükséges.
| Típus | Windows | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
|---|---|---|---|---|---|
| RSACryptoServiceProvider | ✔️ | ⚠ ️ 1 | ⚠ ️ 1 | ⚠ ️ 1 | ⚠ ️ 1 |
| RSACng | ✔️ | ❌ | ❌ | ❌ | ❌ |
| RSAOpenSsl | ❌ | ✔️ | ❌ 2 | ❌ | ❌ |
1 Nem Windows rendszeren használható a RSACryptoServiceProvider meglévő programokkal való kompatibilitáshoz. Ebben az esetben minden olyan módszer, amely operációsrendszer-interopot igényel, például egy elnevezett kulcs megnyitása, egy PlatformNotSupportedException.
2 A macOS rendszeren a .NET 10 előtt működött, ha az OpenSSL telepítve volt, és a dinamikus könyvtár betöltésekor megfelelő libcrypto dylib található. Ez a támogatás el lett távolítva a .NET 10-ben.
ECDSA
Az ECDSA (Elliptic Curve Digital Signature Algorithm) kulcsgenerálását az operációsrendszer-kódtárak végzik, és méretkorlátozásokra és teljesítményjellemzőkre vonatkoznak.
Az ECDSA-kulcsgörbéket az operációsrendszer-kódtárak határozzák meg, és ezekre korlátozások vonatkoznak.
| Elliptikus görbe | Windows 10 | Windows 7 – 8.1 | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
|---|---|---|---|---|---|---|
| NIST P-256 (secp256r1) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| NIST P-384 (secp384r1) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| NIST P-521 (secp521r1) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Agyserkentő görbék (nevesített görbékként) | ✔️ | ❌ | ⚠ ️ 1 | ❌ | ❌ | ⚠ ️ 4 |
| Egyéb elnevezett görbék | ⚠ ️ 2 | ❌ | ⚠ ️ 1 | ❌ | ❌ | ⚠ ️ 4 |
| Explicit görbék | ✔️ | ❌ | ✔️ | ❌ | ❌ | ✔️ |
| Exportálás vagy importálás kifejezett módon | ✔️ | ❌ 3 | ✔️ | ❌ 3 | ❌ 3 | ✔️ |
1 Linux-disztribúció nem mindegyik támogatja ugyanazokat a nevesített görbéket.
2 A nevesített görbék támogatása a Windows CNG-hez lett hozzáadva a Windows 10-ben. További információért lásd a CNG Named Elliptic Curves nevű szakaszt. Az elnevezett görbék a Windows korábbi verzióiban nem érhetők el, kivéve a Windows 7 három görbét.
3 Az explicit görbeparaméterekkel való exportáláshoz operációsrendszer-kódtár-támogatás szükséges, amely nem érhető el az Apple-platformokon vagy a Windows korábbi verzióiban.
4 Egyes görbék Android-támogatása az Android-verziótól függ. Az Android-forgalmazók dönthetnek úgy, hogy az Android-buildből is hozzáadnak vagy eltávolítanak görbéket.
ECDSA natív interoperabilitás
A .NET olyan típusokat tesz elérhetővé, amelyek lehetővé teszik, hogy a programok együttműködjenek a .NET-titkosítási kód által használt operációsrendszer-kódtárakkal. Az érintett típusok nem fordíthatók le a platformok között, és csak akkor használhatók közvetlenül, ha szükséges.
| Típus | Windows | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
|---|---|---|---|---|---|
| ECDsaCng | ✔️ | ❌ | ❌ | ❌ | ❌ |
| ECDsaOpenSsl | ❌ | ✔️ | ❌* | ❌ | ❌ |
* A macOS rendszeren, a .NET 10 előtt, a ECDsaOpenSsl akkor működött, ha az OpenSSL telepítve volt, és a dinamikus könyvtárbetöltés során egy megfelelő libcrypto dylib megtalálható volt. Ez a támogatás el lett távolítva a .NET 10-ben.
ECDH
Az ECDH (Elliptic Curve Diffie-Hellman) kulcsgenerálását az operációsrendszer-kódtárak végzik, és méretkorlátozásokra és teljesítményjellemzőkre vonatkoznak.
Az ECDiffieHellman osztály támogatja az ECDH-számítások "nyers" értékét, valamint a következő fő származtatási függvényeket:
- HASH(Z)
- HASH(prepend || Z || hozzáfűzés)
- HMAC(kulcs, Z)
- HMAC(key, előfűz || Z || hozzáfűz)
- HMAC(Z, Z)
- HMAC(Z, előpend || Z || hozzáfűzés)
- Tls11Prf(címke, vetőmag)
Az ECDH-kulcsgörbéket az operációsrendszer-kódtárak határozzák meg, és ezekre korlátozások vonatkoznak.
| Elliptikus görbe | Windows 10+ | Windows 7 – 8.1 | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
|---|---|---|---|---|---|---|
| NIST P-256 (secp256r1) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| NIST P-384 (secp384r1) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| NIST P-521 (secp521r1) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Agyserkentő görbék (nevesített görbékként) | ✔️ | ❌ | ⚠ ️ 1 | ❌ | ❌ | ⚠ ️ 4 |
| Egyéb elnevezett görbék | ⚠ ️ 2 | ❌ | ⚠ ️ 1 | ❌ | ❌ | ⚠ ️ 4 |
| Explicit görbék | ✔️ | ❌ | ✔️ | ❌ | ❌ | ✔️ |
| Exportálás vagy importálás kifejezett módon | ✔️ | ❌ 3 | ✔️ | ❌ 3 | ❌ 3 | ✔️ |
1 Linux-disztribúció nem mindegyik támogatja ugyanazokat a nevesített görbéket.
2 A nevesített görbék támogatása a Windows CNG-hez lett hozzáadva a Windows 10-ben. További információért lásd a CNG Named Elliptic Curves nevű szakaszt. Az elnevezett görbék a Windows korábbi verzióiban nem érhetők el, kivéve a Windows 7 három görbét.
3 Az explicit görbeparaméterekkel való exportáláshoz operációsrendszer-kódtár-támogatás szükséges, amely nem érhető el az Apple-platformokon vagy a Windows korábbi verzióiban.
4 Egyes görbék Android-támogatása az Android-verziótól függ. Az Android-forgalmazók dönthetnek úgy, hogy az Android-buildből is hozzáadnak vagy eltávolítanak görbéket.
ECDH natív interoperabilitás
A .NET olyan típusokat tesz elérhetővé, amelyek lehetővé teszik, hogy a programok együttműködjenek a .NET által használt operációsrendszer-kódtárakkal. Az érintett típusok nem fordíthatók le a platformok között, és csak akkor használhatók közvetlenül, ha szükséges.
| Típus | Windows | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
|---|---|---|---|---|---|
| ECDiffieHellmanCng | ✔️ | ❌ | ❌ | ❌ | ❌ |
| ECDiffieHellmanOpenSsl | ❌ | ✔️ | ❌* | ❌ | ❌ |
* A macOS rendszeren, a .NET 10 előtt, a ECDiffieHellmanOpenSsl akkor működött, ha az OpenSSL telepítve volt, és a dinamikus könyvtárbetöltés során egy megfelelő libcrypto dylib megtalálható volt. Ez a támogatás el lett távolítva a .NET 10-ben.
DSA
A DSA (digitális aláírási algoritmus) kulcsgenerálását a rendszerkódtárak végzik, és méretkorlátozásaikra és teljesítményjellemzőikre vonatkoznak.
| Függvény | Windows CNG | Linux | macOS | Windows CAPI | iOS, tvOS, MacCatalyst | Android |
|---|---|---|---|---|---|---|
| Kulcs létrehozása (<= 1024 bit) | ✔️ | ✔️ | ❌ | ✔️ | ❌ | ✔️ |
| Kulcsgenerálás (> 1024 bit) | ✔️ | ✔️ | ❌ | ❌ | ❌ | ✔️ |
| Kulcsok betöltése (<= 1024 bit) | ✔️ | ✔️ | ✔️ | ✔️ | ❌ | ✔️ |
| Kulcsok betöltése (> 1024 bit) | ✔️ | ✔️ | ⚠️* | ❌ | ❌ | ✔️ |
| FIPS 186-2 | ✔️ | ✔️ | ✔️ | ✔️ | ❌ | ✔️ |
| FIPS 186-3 (SHA-2 aláírások) | ✔️ | ✔️ | ❌ | ❌ | ❌ | ✔️ |
* a macOS 1024 bitesnél nagyobb DSA-kulcsokat tölt be, de ezeknek a kulcsoknak a viselkedése nincs meghatározva. Nem a FIPS 186-3 szerint viselkednek.
DSA Windows rendszeren
- Amikor a
new DSACryptoServiceProvider()használatban van, a Windows CryptoAPI (CAPI) is használatos. - Windows Cryptography API Next Generation (CNG) akkor használatos, amikor a
new DSACng()használt. - A visszaadott DSA.Create objektum belsőleg a Windows CNG-n működik. A Windows CNG használata implementálási részlet, és változhat.
- A GetDSAPublicKey bővítménymetódus a X509Certificate2 számára visszaad egy DSACng példányt. Ez a DSACng használat egy megvalósítási részlet, és változhat.
- A GetDSAPrivateKey bővítménymetódus a X509Certificate2 egy példányát részesíti előnyben DSACng, de ha a DSACng nem tudja megnyitni a kulcsot, megpróbálkozik a DSACryptoServiceProvider. Az előnyben részesített szolgáltató egy megvalósítási részlet, és változhat.
DSA natív interoperabilitás
A .NET olyan típusokat tesz elérhetővé, amelyek lehetővé teszik, hogy a programok együttműködjenek a .NET-titkosítási kód által használt operációsrendszer-kódtárakkal. Az érintett típusok nem fordíthatók le a platformok között, és csak akkor használhatók közvetlenül, ha szükséges.
| Típus | Windows | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
|---|---|---|---|---|---|
| DSACryptoServiceProvider | ✔️ | ⚠ ️ 1 | ⚠ ️ 1 | ❌ | ⚠ ️ 1 |
| DSACng | ✔️ | ❌ | ❌ | ❌ | ❌ |
| DSAOpenSsl | ❌ | ✔️ | ❌ 2 | ❌ | ❌ |
1 Nem Windows rendszeren használható a DSACryptoServiceProvider meglévő programokkal való kompatibilitáshoz. Ebben az esetben minden olyan módszer, amely rendszerkompatibilitást igényel, például egy elnevezett kulcs megnyitása, kivált egy PlatformNotSupportedException.
2 A macOS rendszeren a .NET 10 előtt működött, ha az OpenSSL telepítve volt, és a dinamikus könyvtár betöltésekor megfelelő libcrypto dylib található. Ez a támogatás el lett távolítva a .NET 10-ben.
Kvantumtriptográfia utáni titkosítás
A poszt-kvantum algoritmusok a .NET 10-től érhetők el. A .NET-keretrendszerhez is elérhetők a Microsoft.Bcl.Cryptography NuGet csomag használatával. Az alábbi támogatási táblázat jelzi a beépített operációs rendszer titkosítási összetevőinek platformtámogatását, például az Generate vagy ImportFromPem elemekből létrehozott összetevőket. Az alaposztályból származó implementációk különböző támogatási viselkedésekkel rendelkezhetnek.
A beépített algoritmusok esetében statikus IsSupported tulajdonság áll rendelkezésre annak megállapítására, hogy a platform támogatja-e a paraméterkészletek bármelyikét.
A kvantum utáni algoritmusok natív interoptípusai nem támogatják a kulcsgenerálást és az importálást. Kifejezetten olyan interop forgatókönyvekhez léteznek, amelyek natív platformtípusokkal rendelkeznek, például EVP_PKEY OpenSSL-en vagy CngKey Windowson.
ML-KEM
| Algoritmus | Windows | Linux | Alma | Android | Böngésző |
|---|---|---|---|---|---|
| ML-KEM-512 | Windows 11 Insider (legújabb) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| ML-KEM-768 | Windows 11 Insider (legújabb) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| ML-KEM-1024 | Windows 11 Insider (legújabb) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
Natív interop ML-KEM
- MLKemOpenSsl: OpenSSL 3.5.0+
- MLKemCng: Windows 11 Insider (legújabb)
ML-DSA
ML-DSA-nak van egy tiszta és prehash változata (HashML-DSA). Az alábbi táblázat a tiszta és a prehash változatokat is tükrözi.
| Algoritmus | Windows | Linux | Alma | Android | Böngésző |
|---|---|---|---|---|---|
| ML-DSA-44 | Windows 11 Insider (legújabb) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| ML-DSA-65 | Windows 11 Insider (legújabb) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| ML-DSA-87 | Windows 11 Insider (legújabb) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| ML-DSA-44 Külső Mu (μ)1 | ❌ | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| ML-DSA-65 külső Mu (μ)1 | ❌ | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| ML-DSA-87 Külső Mu (μ)1 | ❌ | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
1 A külső mu-támogatás csak a mu aláírására és ellenőrzésére vonatkozik. A mu számítása nem támogatott.
Natív interop ML-DSA
- MLDsaOpenSsl: OpenSSL 3.5.0+
- MLDsaCng: Windows 11 Insider (legújabb)
SLH-DSA
SLH-DSA-nak van egy alap és prehash változata (HashSLH-DSA). Az alábbi táblázat a tiszta és a prehash változatokat is tükrözi.
| Algoritmus | Windows | Linux | Alma | Android | Böngésző |
|---|---|---|---|---|---|
| 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+ | ❌ | ❌ | ❌ |
Natív interop SLH-DSA
- SlhDsaOpenSsl: OpenSSL 3.5.0+
- SlhDsaCng: Nem támogatott
Összetett ML-DSA
| Algoritmus | Windows | Linux | Alma | Android | Böngésző |
|---|---|---|---|---|---|
| MLDSA44-RSA2048-PSS-SHA256 | ❌ | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| MLDSA44-RSA2048-PKCS15-SHA256 | ❌ | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| MLDSA44–Ed25519-SHA512 | ❌ | ❌ | ❌ | ❌ | ❌ |
| MLDSA44-ECDSA-P256-SHA256 | Windows 11 Insider (legújabb) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| MLDSA65-RSA3072-PSS-SHA512 | ❌ | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| MLDSA65-RSA3072-PKCS15-SHA512 | ❌ | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| MLDSA65-RSA4096-PSS-SHA512 | ❌ | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| MLDSA65-RSA4096-PKCS15-SHA512 | ❌ | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| MLDSA65-ECDSA-P256-SHA512 | Windows 11 Insider (legújabb) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| MLDSA65-ECDSA-P384-SHA512 | Windows 11 Insider (legújabb) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| MLDSA65-ECDSA-brainpoolP256r1-SHA512 | ❌ | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| MLDSA65–Ed25519-SHA512 | ❌ | ❌ | ❌ | ❌ | ❌ |
| MLDSA87-ECDSA-P384-SHA512 | Windows 11 Insider (legújabb) | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| MLDSA87-ECDSA-brainpoolP384r1-SHA512 | ❌ | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| MLDSA87-Ed448-SHAKE256 | ❌ | ❌ | ❌ | ❌ | ❌ |
| MLDSA87-RSA3072-PSS-SHA512 | ❌ | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| MLDSA87-RSA4096-PSS-SHA512 | ❌ | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
| MLDSA87-ECDSA-P521-SHA512 | ❌ | OpenSSL 3.5.0+ | ❌ | ❌ | ❌ |
Összetett natív interop ML-DSA
- CompositeMLDsaCng: Nem támogatott
X.509-tanúsítványok
A .NET-ben az X.509-tanúsítványok támogatásának többsége operációsrendszer-kódtárakból származik. Ha egy tanúsítványt egy .NET-példányba vagy X509Certificate2 -X509Certificatepéldányba szeretne betölteni, a tanúsítványt a mögöttes operációsrendszer-kódtárnak kell betöltenie.
PKCS12/PFX olvasása
| Forgatókönyv | Windows | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
|---|---|---|---|---|---|
| Üres | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Egy tanúsítvány, titkos kulcs nélkül | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Egy tanúsítvány, titkos kulccsal | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Több tanúsítvány, titkos kulcsok nélkül | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Több tanúsítvány, egy titkos kulcs | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Több tanúsítvány, több titkos kulcs | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
PKCS12/PFX írása
| Forgatókönyv | Windows | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
|---|---|---|---|---|---|
| Üres | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Egy tanúsítvány, titkos kulcs nélkül | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Egy tanúsítvány, titkos kulccsal | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Több tanúsítvány, titkos kulcsok nélkül | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Több tanúsítvány, egy titkos kulcs | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Több tanúsítvány, több titkos kulcs | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Átmeneti betöltés | ✔️ | ✔️ | ❌ | ✔️ | ✔️ |
A macOS nem tudja betölteni a tanúsítvány titkos kulcsait kulcskarika-objektum nélkül, ami lemezre írást igényel. A rendszer automatikusan létrehozza a kulcsláncokat a PFX betöltéséhez, és a rendszer törli őket, ha már nincs használatban. Mivel a X509KeyStorageFlags.EphemeralKeySet beállítás azt jelenti, hogy a privát kulcsot nem szabad lemezre írni, ennek a jelölőnek a macOS rendszeren való érvényesítése egy PlatformNotSupportedException.
A PKCS7 tanúsítványgyűjtemény írása
A Windows és a Linux egyaránt DER-kódolású PKCS7-blobokat bocsát ki. a macOS meghatározatlan hosszúságú-CER-kódolású PKCS7-blobokat bocsát ki.
X509Store
Windows rendszeren az X509Store osztály a Windows Tanúsítványtár API-k reprezentációja. Ezek az API-k ugyanúgy működnek a .NET-ben, mint a .NET-keretrendszerben.
Nem Windows rendszeren a X509Store osztály a rendszermegbízhatósági döntések vetülete (csak olvasható), a felhasználói megbízhatósági döntések (olvasás-írás), és a felhasználói kulcstár (olvasás-írás).
Az alábbi táblázatok azt mutatják be, hogy mely forgatókönyvek támogatottak az egyes platformokon. A nem támogatott forgatókönyvek esetén (❌ a táblákban) a rendszer egy CryptographicException értéket ad ki.
A Saját áruház
| Forgatókönyv | Windows | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
|---|---|---|---|---|---|
| CurrentUser\My (ReadOnly) megnyitása | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Nyissa meg a CurrentUser\My (ReadWrite) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Nyissa meg a CurrentUser\My (ExistingOnly) | ✔️ | ⚠️ | ✔️ | ✔️ | ✔️ |
| LocalMachine\My megnyitása | ✔️ | ❌ | ✔️ | ✔️ | ✔️ |
Linuxon a tárolók az első íráskor jönnek létre, és alapértelmezés szerint nem léteznek felhasználói tárolók, így előfordulhat, hogy a CurrentUser\MyExistingOnly megnyitása sikertelen lesz.
MacOS rendszeren a CurrentUser\My a felhasználó alapértelmezett kulcslánca, ami alapértelmezés szerint van beállítva.login.keychain Az LocalMachine\My üzlet System.keychain.
A gyökértároló
| Forgatókönyv | Windows | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
|---|---|---|---|---|---|
| Nyisd meg a CurrentUser\Root (ReadOnly) | ✔️ | ✔️ | ✔️ | ❌ | ✔️ |
| CurrentUser\Root (ReadWrite) megnyitása | ✔️ | ✔️ | ❌ | ❌ | ❌ |
| Nyissa meg a CurrentUser\Root (ExistingOnly) könyvtárat | ✔️ | ⚠️ | ✔️ (ha csak olvasható) | ❌ | ✔️ (ha csak olvasható) |
| A LocalMachine\Root megnyitása (ReadOnly) | ✔️ | ✔️ | ✔️ | ❌ | ✔️ |
| A LocalMachine\Root (ReadWrite) megnyitása | ✔️ | ❌ | ❌ | ❌ | ❌ |
| Nyissa meg a LocalMachine\Root (ExistingOnly) | ✔️ | ⚠️ | ✔️ (ha csak olvasható) | ❌ | ✔️ (ha csak olvasható) |
Linuxon a LocalMachine\Root tároló a CA-csomag értelmezése az OpenSSL alapértelmezett elérési útján.
A macOS rendszerben a CurrentUser\Root tároló a felhasználói megbízhatósági SecTrustSettings tartományhoz tartozó eredmények értelmezése. Az LocalMachine\Root áruház a rendszergazdai és a megbízhatósági SecTrustSettings tartományok eredményeinek értelmezése.
Megbízható főtanúsítvány-helyek Linuxon
Linuxon a .NET az OpenSSL (libssl) használatával keresi meg a megbízható főtanúsítványokat. Az OpenSSL a tanúsítványtároló helyét környezeti változók (SSL_CERT_FILE és ) és SSL_CERT_DIRterjesztési specifikus alapértelmezett elérési utak használatával határozza meg. Ha az OpenSSL-hez konfigurált gyökértároló könyvtár nem tartalmaz tanúsítványokat, a .NET az ellenőrzéshez /etc/ssl/certs-ra támaszkodik. Ez a tartalék biztosítja az olyan disztribúciókkal való kompatibilitást, mint a SUSE Linux Enterprise Server (SLES), ahol a megadott SSL_CERT_DIR címtár csak olyan formátumú tanúsítványokat BEGIN TRUSTED CERTIFICATE tartalmazhat, amelyeket a .NET nem támogat főtanúsítványként.
Ez a visszaesés csak akkor fordul elő, ha:
- A
SSL_CERT_DIRkörnyezeti változó nincs explicit módon beállítva. - Az alapértelmezett tanúsítványkönyvtár nem tartalmaz használható tanúsítványokat.
Ha a tanúsítványok nem megfelelően töltődnek be, ellenőrizze, hogy:
- A tanúsítványfájlok PEM formátumban vannak a
BEGIN CERTIFICATEjelölővel (nemBEGIN TRUSTED CERTIFICATE). - A
SSL_CERT_DIRkörnyezeti ésSSL_CERT_FILEa környezeti változók a megfelelő helyekre mutatnak, ha be van állítva. - A tanúsítványcsomag fájlja vagy könyvtára rendelkezik a megfelelő olvasási engedélyekkel.
A köztes tároló
| Forgatókönyv | Windows | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
|---|---|---|---|---|---|
| Nyissa meg a CurrentUser\Intermediate (ReadOnly) mappát | ✔️ | ✔️ | ✔️ | ❌ | ❌ |
| Nyissa meg a CurrentUser\Intermediate (ReadWrite) mappát | ✔️ | ✔️ | ❌ | ❌ | ❌ |
| Nyissa meg a CurrentUser\Intermediate (ExistingOnly) mappát | ✔️ | ⚠️ | ✔️ (ha csak olvasható) | ❌ | ❌ |
| Nyissa meg a LocalMachine\Intermediate (ReadOnly) fájlt | ✔️ | ✔️ | ✔️ | ❌ | ❌ |
| LocalMachine\Intermediate (ReadWrite) megnyitása | ✔️ | ❌ | ❌ | ❌ | ❌ |
| Nyissa meg a LocalMachine\Intermediate (ExistingOnly) lehetőséget. | ✔️ | ⚠️ | ✔️ (ha csak olvasható) | ❌ | ❌ |
Linuxon a CurrentUser\Intermediate tároló gyorsítótárként működik, amikor a köztes hitelesítésszolgáltatókat a szolgáltatói információelérési rekordjaikon keresztül töltik le sikeres X509Chain-építések során. Az LocalMachine\Intermediate áruház a CA-csomag értelmezése az OpenSSL alapértelmezett útvonalán.
MacOS rendszeren az CurrentUser\Intermediate áruház egyéni tárolóként lesz kezelve. Az áruházhoz hozzáadott tanúsítványok nem befolyásolják az X.509-láncépítést.
A nem engedélyezett tároló
| Forgatókönyv | Windows | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
|---|---|---|---|---|---|
| Nyissa meg a CurrentUser\Disallowed (ReadOnly) | ✔️ | ⚠️ | ✔️ | ✔️ | ✔️ |
| Nyissa meg a CurrentUser\Disallowed (ReadWrite) | ✔️ | ⚠️ | ❌ | ❌ | ❌ |
| Nyissa meg a CurrentUser\Disallowed (ExistingOnly) útvonalat | ✔️ | ⚠️ | ✔️ (ha csak olvasható) | ✔️ (ha csak olvasható) | ✔️ (ha csak olvasható) |
| Nyissa meg a LocalMachine\Disallowed (Csak olvasható) | ✔️ | ❌ | ✔️ | ✔️ | ✔️ |
| Nyissa meg a LocalMachine\Disallowed (Írás/Olvasás) | ✔️ | ❌ | ❌ | ❌ | ❌ |
| Nyisd meg a LocalMachine\Disallowed (ExistingOnly) | ✔️ | ❌ | ✔️ (ha csak olvasható) | ✔️ (ha csak olvasható) | ✔️ (ha csak olvasható) |
Linux rendszeren a Disallowed tárhelyet nem használják a lánc felépítésében, és ha megpróbálunk tartalmat hozzáadni, az eredménye egy CryptographicException. A CryptographicException kivételt dob, amikor megnyitja a Disallowed tárolót, ha az már rendelkezik tartalommal.
MacOS rendszeren a CurrentUser\Letiltott és a LocalMachine\Letiltott tárolók a megfelelő SecTrustSettings-eredményeket értelmezik azokhoz a tanúsítványokhoz, amelyek megbízhatósága a következőre Always Denyvan állítva.
Nem létező bolt
| Forgatókönyv | Windows | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
|---|---|---|---|---|---|
| Nem létező tároló megnyitása (ExistingOnly) | ❌ | ❌ | ❌ | ❌ | ❌ |
| A CurrentUser nem létező tároló megnyitása (ReadWrite) | ✔️ | ✔️ | ⚠️ | ❌ | ❌ |
| A LocalMachine nem létező tároló megnyitása (ReadWrite) | ✔️ | ❌ | ❌ | ❌ | ❌ |
MacOS rendszeren az X509Store API-val történő egyéni tárolólétrehozás csak a CurrentUser hely esetén támogatott. Új kulcskarikát hoz létre jelszó nélkül a felhasználó kulcskarikakönyvtárában (~/Library/Keychains). Jelszóval rendelkező kulcskarika létrehozásához használhat egy P/Invoke parancsot SecKeychainCreate . Hasonlóképpen használható SecKeychainOpen a kulcskarikák különböző helyeken való megnyitására is. Az eredményül kapott IntPtr adatok átadhatók egy olvasási/írási képességű tároló beszerzéséhez new X509Store(IntPtr) , az aktuális felhasználó engedélyeinek függvényében.
X509Chain
a macOS nem támogatja az offline CRL-kihasználtságot, ezért X509RevocationMode.Offline a rendszer a X509RevocationMode.Onlinekövetkezőképpen kezeli: .
A macOS nem támogatja a felhasználó által kezdeményezett időtúllépést a CRL (tanúsítvány-visszavonási lista) / OCSP (Online tanúsítványállapot-protokoll) / AIA (Authority Information Access) letöltésén, ezért X509ChainPolicy.UrlRetrievalTimeout a rendszer figyelmen kívül hagyja.
Kvantum utáni titkosítási tanúsítványok és PKCS12/PFX
A kvantumtanúsítvány utáni támogatáshoz a primitív algoritmus is támogatást igényel.
| Operation | Algoritmus | Windows | Linux | Alma | Android | Böngésző |
|---|---|---|---|---|---|---|
| PKCS#12 Importálás | ML-DSA | ✔️ | ✔️ | ❌ | ❌ | ❌ |
| PKCS#12 Exportálás | ML-DSA | ✔️ | ✔️ | ❌ | ❌ | ❌ |
| Titkos kulcs társítás | ML-DSA | ✔️ | ✔️ | ❌ | ❌ | ❌ |
| PKCS#12 Importálás | ML-KEM | ❌ | ✔️ | ❌ | ❌ | ❌ |
| PKCS#12 Exportálás | ML-KEM | ❌ | ✔️ | ❌ | ❌ | ❌ |
| Titkos kulcs társítás | ML-KEM | ❌ | ✔️ | ❌ | ❌ | ❌ |
| PKCS#12 Importálás | SLH-DSA | ❌ | ✔️ | ❌ | ❌ | ❌ |
| PKCS#12 Exportálás | SLH-DSA | ❌ | ✔️ | ❌ | ❌ | ❌ |
| Titkos kulcs társítás | SLH-DSA | ❌ | ✔️ | ❌ | ❌ | ❌ |