Platformfüggetlen titkosítás a .NET-ben
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ő WASM-ben futó .NET kivételével halasztja az operációsrendszer-kódtárakat. 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-2561 | Windows 11 Build 25324+ | OpenSSL 1.1.1+ | ❌ | ❌ | ❌ | ❌ |
SHA-3-3841 | Windows 11 Build 25324+ | OpenSSL 1.1.1+ | ❌ | ❌ | ❌ | ❌ |
SHA-3-5121 | Windows 11 Build 25324+ | OpenSSL 1.1.1+ | ❌ | ❌ | ❌ | ❌ |
SHAKE-1281 | Windows 11 Build 25324+ | OpenSSL 1.1.1+3 | ❌ | ❌ | ❌ | ❌ |
SHAKE-2561 | Windows 11 Build 25324+ | OpenSSL 1.1.1+3 | ❌ | ❌ | ❌ | ❌ |
HMAC-MD5 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
HMAC-SHA-1 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
HMAC-SHA-2-256 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
HMAC-SHA-2-384 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
HMAC-SHA-2-512 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
HMAC-SHA-3-2561 | Windows 11 Build 25324+ | OpenSSL 1.1.1+ | ❌ | ❌ | ❌ | ❌ |
HMAC-SHA-3-3841 | Windows 11 Build 25324+ | OpenSSL 1.1.1+ | ❌ | ❌ | ❌ | ❌ |
HMAC-SHA-3-5121 | Windows 11 Build 25324+ | OpenSSL 1.1.1+ | ❌ | ❌ | ❌ | ❌ |
KMAC-1282 | Windows 11 Build 26016+ | OpenSSL 3.0+ | ❌ | ❌ | ❌ | ❌ |
KMAC-2562 | Windows 11 Build 26016+ | OpenSSL 3.0+ | ❌ | ❌ | ❌ | ❌ |
KMAC-XOF-1282 | Windows 11 Build 26016+ | OpenSSL 3.0+ | ❌ | ❌ | ❌ | ❌ |
KMAC-XOF-2562 | Windows 11 Build 26016+ | OpenSSL 3.0+ | ❌ | ❌ | ❌ | ❌ |
1A .NET 8-tól kezdve érhető el.
2A .NET 9-től kezdve érhető el.
3A 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-EKB | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
AES-CFB8 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
AES-CFB128 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
3DES-CBC | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
3DES-EKB | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
3DES-CFB8 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
3DES-CFB64 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
DES-CBC | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
DES-EKB | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
DES-CFB8 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
RC2-CBC | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
RC2-EKB | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
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.AesGcmés System.Security.Cryptography.ChaCha20Poly1305 az System.Security.Cryptography.AesCcmosztá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 érhető el. Az IsSupported
algoritmus osztályainak statikus tulajdonsága futásidőben észlelhető, ha az aktuális platform támogatja az algoritmust.
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 Level 28+ | ❌ |
AES-CCM macOS rendszeren
MacOS rendszeren a rendszerkódtárak nem támogatják az AES-CCM-et külső kódhoz, ezért az osztály openSSL-t AesCcm használ a támogatáshoz. A macOS-felhasználóknak be kell szereznie az OpenSSL (libcrypto) megfelelő példányát ahhoz, hogy működjön, és olyan elérési úton kell lennie, amelyből a rendszer alapértelmezés szerint betölt egy tárat. Javasoljuk, hogy telepítse az OpenSSL-t egy csomagkezelőből, például a Homebrew-ból.
A libcrypto.0.9.7.dylib
macOS-ben található kódtárak az libcrypto.0.9.8.dylib
OpenSSL korábbi verzióiból származnak, és nem lesznek használatban. A libcrypto.35.dylib
, libcrypto.41.dylib
és libcrypto.42.dylib
a kódtárak a LibreSSL-ből származnak, és nem lesznek használatban.
AES-GCM és ChaCha20Poly1305 macOS rendszeren
A macOS nem támogatja az AES-GCM-t vagy a ChaCha20Poly1305-öt, amíg a macOS 10.15 nem támogatja a külső kódokat. A .NET 8 előtt, AesGcm és ChaCha20Poly1305 ugyanaz a követelmény, mint az AES-CCM, és a felhasználóknak telepíteniük kell az OpenSSL-t az ilyen típusok működéséhez.
A .NET 8-tól kezdve a .NET macOS rendszeren az Apple CryptoKit keretrendszerét fogja használni az AES-GCM-hez és a ChaCha20Poly1305-höz. A felhasználóknak nem kell további függőségeket telepíteniük vagy konfigurálniuk az AES-GCM-hez vagy a ChaCha20Poly1305-höz macOS rendszeren.
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.
Nem kötött 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.
Nem kötött méretek
Az AesGcm osztály csak 96 bites (12 bájtos) nonceseket támogat.
A Címkeméretek Windowson és Linuxon 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, nonces é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ő:
Kitölté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-32 | Windows 11 Build 25324+ | OpenSSL 1.1.1+ | ❌ | ❌ | ❌ | ❌ |
PKCS1 Signature (MD5, SHA-1) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
PKCS1-aláírás (SHA-2) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ⚠️ 1 |
PKCS1 Signature (SHA-3)2 | Windows 11 Build 25324+ | 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.
2 .NET 8-at igényel.
RSA Windows rendszeren
- A Windows CryptoAPI (CAPI) minden használatkor
new RSACryptoServiceProvider()
használatos. - A Windows Cryptography API Next Generation (CNG) minden használatkor
new RSACng()
használatos. - 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 X509Certificate2 egy példányt RSACng ad vissza. Ez a használat implementálási RSACng részlet, és változhat.
- A GetRSAPrivateKey bővítménymetódus X509Certificate2 jelenleg előnyben részesít egy példányt RSACng , de ha RSACng nem tudja megnyitni a kulcsot, RSACryptoServiceProvider a rendszer megpróbálja. 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-interopt igényel, például egy elnevezett kulcs megnyitása, egy PlatformNotSupportedException.
2 MacOS rendszeren az OpenSSL telepítésekor működik, RSAOpenSsl és dinamikus kódtárbetöltéssel megfelelő libcrypto dylib található. Ha nem található megfelelő kódtár, a rendszer kivételeket fog kivenni.
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 explicit 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ó: CNG named Elliptic Curves. 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 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 |
---|---|---|---|---|---|
ECDsaCng | ✔️ | ❌ | ❌ | ❌ | ❌ |
ECDsaOpenSsl | ❌ | ✔️ | ⚠️* | ❌ | ❌ |
* MacOS rendszeren működik, ha az OpenSSL telepítve van a rendszerben, ECDsaOpenSsl és egy megfelelő libcrypto dylib található a dinamikus kódtár betöltése révén. Ha nem található megfelelő kódtár, a rendszer kivételeket fog kivenni.
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, prepend || Z || hozzáfűzés)
- HMAC(Z, Z)
- HMAC(Z, előpend || Z || hozzáfűzés)
- Tls11Prf(címke, vetőmag)
A .NET 8-ban bevezettük a "nyers" kulcs származtatását.
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 explicit 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ó: CNG named Elliptic Curves. 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 interop
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 | ❌ | ✔️ | ⚠️* | ❌ | ❌ |
* MacOS rendszeren az OpenSSL telepítésekor működik, ECDiffieHellmanOpenSsl és dinamikus kódtárbetöltéssel megfelelő libcrypto dylib található. Ha nem található megfelelő kódtár, a rendszer kivételeket fog kivenni.
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) | ✔️ | ✔️ | ❌ | ✔️ | ❌ | ✔️ |
Kulcslétrehozá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
- A Windows CryptoAPI (CAPI) minden használatkor
new DSACryptoServiceProvider()
használatos. - A Windows Cryptography API Next Generation (CNG) minden használatkor
new DSACng()
használatos. - 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 X509Certificate2 egy példányt DSACng ad vissza. Ez a használat implementálási DSACng részlet, és változhat.
- A GetDSAPrivateKey bővítménymetódus X509Certificate2 egy példányt DSACng előnyben részesít, de ha DSACng nem tudja megnyitni a kulcsot, DSACryptoServiceProvider megkísérli a rendszer. Az előnyben részesített szolgáltató egy megvalósítási részlet, és változhat.
Natív DSA-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 |
---|---|---|---|---|---|
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 rendszerközi beavatkozást igényel, például egy elnevezett kulcs megnyitását, egy PlatformNotSupportedException.
2 MacOS rendszeren az OpenSSL telepítésekor működik, DSAOpenSsl és dinamikus kódtárbetöltéssel megfelelő libcrypto dylib található. Ha nem található megfelelő kódtár, a rendszer kivételeket fog kivenni.
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 X509Certificate -X509Certificate2pé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
Eset | 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
Eset | 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 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Rövid élettartamú 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 titkos kulcsot nem szabad lemezre írni, a jelölő macOS rendszeren való érvényesítése egy PlatformNotSupportedException.
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 Core-ban és a .NET 5-ben, mint a .NET-keretrendszer.
Nem Windows rendszeren az osztály a X509Store rendszermegbízhatósági döntések (írásvédett), a felhasználói megbízhatósági döntések (írás-olvasás) és a felhasználói kulcstár (olvasás-írás) előrejelzése.
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
Eset | Windows | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
---|---|---|---|---|---|
CurrentUser\My (ReadOnly) megnyitása | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
CurrentUser\My (ReadWrite) megnyitása | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Open CurrentUser\My (ExistingOnly) | ✔️ | ⚠️ | ✔️ | ✔️ | ✔️ |
LocalMachine\My megnyitása | ✔️ | ❌ | ✔️ | ✔️ | ✔️ |
Linuxon az áruházak első íráskor jönnek létre, és alapértelmezés szerint nem léteznek felhasználói tárolók, ezért előfordulhat, hogy a megnyitás CurrentUser\My
ExistingOnly
sikertelen lesz.
MacOS rendszeren az CurrentUser\My
áruház a felhasználó alapértelmezett kulcslánca, amely alapértelmezés szerint.login.keychain
Az LocalMachine\My
üzlet .System.keychain
A gyökértároló
Eset | Windows | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
---|---|---|---|---|---|
CurrentUser\Root megnyitása (ReadOnly) | ✔️ | ✔️ | ✔️ | ❌ | ✔️ |
CurrentUser\Root (ReadWrite) megnyitása | ✔️ | ✔️ | ❌ | ❌ | ❌ |
Open CurrentUser\Root (ExistingOnly) | ✔️ | ⚠️ | ✔️ (ha readOnly) | ❌ | ✔️ (ha readOnly) |
A LocalMachine\Root megnyitása (ReadOnly) | ✔️ | ✔️ | ✔️ | ❌ | ✔️ |
A LocalMachine\Root (ReadWrite) megnyitása | ✔️ | ❌ | ❌ | ❌ | ❌ |
Open LocalMachine\Root (ExistingOnly) | ✔️ | ⚠️ | ✔️ (ha readOnly) | ❌ | ✔️ (ha readOnly) |
Linuxon az LocalMachine\Root
áruház a CA-csomag értelmezése az OpenSSL alapértelmezett elérési útján.
MacOS rendszeren az CurrentUser\Root
áruház a felhasználói megbízhatósági SecTrustSettings
tartomány eredményeinek értelmezése. Az LocalMachine\Root
áruház a rendszergazdai és a rendszermegbízhatósági SecTrustSettings
tartományok eredményeinek értelmezése.
A köztes tároló
Eset | Windows | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
---|---|---|---|---|---|
Open CurrentUser\Intermediate (ReadOnly) | ✔️ | ✔️ | ✔️ | ❌ | ❌ |
Open CurrentUser\Intermediate (ReadWrite) | ✔️ | ✔️ | ❌ | ❌ | ❌ |
Open CurrentUser\Intermediate (ExistingOnly) | ✔️ | ⚠️ | ✔️ (ha readOnly) | ❌ | ❌ |
Open LocalMachine\Intermediate (ReadOnly) | ✔️ | ✔️ | ✔️ | ❌ | ❌ |
LocalMachine\Intermediate (ReadWrite) megnyitása | ✔️ | ❌ | ❌ | ❌ | ❌ |
Open LocalMachine\Intermediate (ExistingOnly) | ✔️ | ⚠️ | ✔️ (ha readOnly) | ❌ | ❌ |
Linuxon az CurrentUser\Intermediate
áruház gyorsítótárként használatos, amikor a szolgáltatói információelérési rekordjaik letöltik a köztes hitelesítésszolgáltatókat a sikeres X509Chain-buildeken. Az LocalMachine\Intermediate
áruház a CA-csomag értelmezése az OpenSSL alapértelmezett elérési útjá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ó
Eset | Windows | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
---|---|---|---|---|---|
Open CurrentUser\Disallowed (ReadOnly) | ✔️ | ⚠️ | ✔️ | ✔️ | ✔️ |
Open CurrentUser\Disallowed (ReadWrite) | ✔️ | ⚠️ | ❌ | ❌ | ❌ |
Open CurrentUser\Disallowed (ExistingOnly) | ✔️ | ⚠️ | ✔️ (ha readOnly) | ✔️ (ha readOnly) | ✔️ (ha readOnly) |
Open LocalMachine\Disallowed (ReadOnly) | ✔️ | ❌ | ✔️ | ✔️ | ✔️ |
Open LocalMachine\Disallowed (ReadWrite) | ✔️ | ❌ | ❌ | ❌ | ❌ |
Open LocalMachine\Disallowed (ExistingOnly) | ✔️ | ❌ | ✔️ (ha readOnly) | ✔️ (ha readOnly) | ✔️ (ha readOnly) |
Linuxon az áruház nem használatos a Disallowed
láncépítésben, és a tartalom hozzáadásának megkísérlése egy CryptographicException. Az A CryptographicException a tároló megnyitásakor Disallowed
jön létre, ha 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 Deny
van állítva.
Nem létező tároló
Eset | 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 egyéni tároló létrehozása az X509Store API-val csak a helyhez CurrentUser
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.Online
kö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.