Megosztás a következőn keresztül:


Ügyféloldali titkosítás blobokhoz

A .NET-hez készült Azure Blob Storage ügyfélkódtár támogatja az ügyfélalkalmazások adatainak titkosítását az Azure Storage-ba való feltöltés előtt, valamint az adatok visszafejtését az ügyfélre való letöltés során. A tár az Azure Key Vaulttal való integrációt is támogatja a tárfiókok kulcskezeléséhez.

Fontos

A Blob Storage mind a szolgáltatásoldali, mind az ügyféloldali titkosítást támogatja. A legtöbb forgatókönyv esetében a Microsoft szolgáltatásoldali titkosítási funkciók használatát javasolja az adatok védelme érdekében. A szolgáltatásoldali titkosítással kapcsolatos további információkért tekintse meg az Inaktív adatok Azure Storage-titkosítását.

A blobok ügyféloldali titkosítással és Azure Key Vaulttal történő titkosításának folyamatát bemutató részletes oktatóanyagért tekintse meg a Blobok titkosítása és visszafejtése a Microsoft Azure Storage-ban az Azure Key Vault használatával című témakört.

Tudnivalók az ügyféloldali titkosításról

Az Azure Blob Storage-ügyfélkódtár speciális titkosítási standard (AES) használatával titkosítja a felhasználói adatokat. Az ügyféloldali titkosításnak két verziója érhető el az ügyféloldali kódtárban:

  • A 2. verzió Galois/Counter Mode (GCM) módot használ az AES-sel.
  • Az 1. verzió titkosítási blokkláncolást (CBC) használ az AES használatával.

Figyelmeztetés

Az ügyféloldali titkosítás 1. verziójának használata már nem ajánlott az ügyféloldali titkosítás biztonsági rése miatt az ügyféloldali kódtár CBC mód implementációjában. A biztonsági résről további információt az Azure Storage ügyféloldali titkosításának frissítése az SDK-ban a biztonsági rés kezelése érdekében című témakörben talál. Ha jelenleg az 1-es verziót használja, javasoljuk, hogy frissítse az alkalmazást a 2. verzió használatára, és migrálja az adatokat. További útmutatásért tekintse meg az alkalmazások biztonsági résének elhárítása című szakaszt.

Az alkalmazások biztonsági résének elhárítása

A Blob Storage-ügyfélkódtár CBC mód implementációjában felfedezett biztonsági rés miatt a Microsoft azt javasolja, hogy azonnal hajtsa végre az alábbi műveletek egyikét:

  • Fontolja meg a szolgáltatásoldali titkosítási funkciók használatát az ügyféloldali titkosítás helyett. A szolgáltatásoldali titkosítási funkciókról további információt az inaktív adatok Azure Storage-titkosításával kapcsolatban talál.

  • Ha ügyféloldali titkosítást kell használnia, akkor migrálja az alkalmazásokat az ügyféloldali titkosítás v1-ből az ügyféloldali titkosítás v2-be.

Az alábbi táblázat összefoglalja az alkalmazás ügyféloldali titkosítási v2-be való migrálásának lépéseit:

Ügyféloldali titkosítás állapota Javasolt műveletek
Az alkalmazás ügyféloldali titkosítást használ az ügyféloldali titkosítás egy olyan verziója, amely csak az ügyféloldali titkosítás 1-es verzióját támogatja. Frissítse az alkalmazást az ügyféloldali titkosítás v2-t támogató ügyféloldali titkosítási verzió használatára. A támogatott verziók listájához tekintse meg az ügyféloldali titkosítás SDK-támogatási mátrixát. További információ...

Frissítse a kódot az ügyféloldali titkosítás v2 használatára. További információ...

Töltse le a titkosított adatokat a visszafejtéshez, majd az ügyféloldali titkosítás v2 használatával újratitkosítsa. További információ...
Az alkalmazás ügyféloldali titkosítást használ az ügyféloldali titkosítást támogató ügyféloldali titkosítás 2-es verziójával. Frissítse a kódot az ügyféloldali titkosítás v2 használatára. További információ...

Töltse le a titkosított adatokat a visszafejtéshez, majd az ügyféloldali titkosítás v2 használatával újratitkosítsa. További információ...

A Microsoft emellett a következő lépéseket javasolja az adatok védelme érdekében:

  • Konfigurálja a tárfiókokat úgy, hogy privát végpontok használatával biztonságossá tegye a virtuális hálózat (VNet) és a tárfiók közötti összes forgalmat egy privát kapcsolaton keresztül. További információ: Privát végpontok használata az Azure Storage-hoz.
  • Csak bizonyos hálózatokhoz való hálózati hozzáférés korlátozása.

SDK támogatási mátrix ügyféloldali titkosításhoz

Az alábbi táblázat bemutatja, hogy a .NET, Java és Python ügyfélkódtárak mely verziói támogatják az ügyféloldali titkosítás különböző verzióit:

.NET Java Python
Ügyféloldali titkosítás v2 és v1 12.13.0-s és újabb verziók 12.18.0-s és újabb verziók 12.13.0-s és újabb verziók
Csak ügyféloldali titkosítás v1 12.12.0-s és korábbi verziók 12.17.0-s és korábbi verziók 12.12.0-s és korábbi verziók

Feljegyzés

Az ügyféloldali titkosítás v2.1 a Java SDK-ban érhető el a 12.27.0-s és újabb verziókhoz. Ez a verzió lehetővé teszi a régió hosszának konfigurálását a hitelesített titkosításhoz 16 bájttól 1 GiB-ig. További információkért lásd a Példa: Blob titkosítása és visszafejtése ügyféloldali titkosítással v2-vel című Java-példát.

Ha az alkalmazás ügyféloldali titkosítást használ a .NET, Java vagy Python ügyfélkódtár egy korábbi verziójával, először frissítenie kell a kódot egy olyan verzióra, amely támogatja az ügyféloldali titkosítás 2- es verzióját. Ezután vissza kell fejtenie és újra kell titkosítania az adatokat az ügyféloldali titkosítás v2-vel. Szükség esetén használhatja az ügyféloldali titkosítást támogató ügyféloldali titkosítás v2-t az ügyféloldali kódtár egy korábbi verziójával, a kód áttelepítése során. Kódpéldákért lásd : Példa: Blob titkosítása és visszafejtése ügyféloldali titkosítással v2.

Az ügyféloldali titkosítás működése

Az Azure Blob Storage-ügyfélkódtárak borítéktitkosítással titkosítják és visszafejtik az adatokat az ügyféloldalon. A borítéktitkosítás egy kulcsot egy vagy több további kulcssal titkosít.

A Blob Storage-ügyfélkódtárak az Azure Key Vaultra támaszkodnak az ügyféloldali titkosításhoz használt kulcsok védelméhez. További információ az Azure Key Vaultról: Mi az Az Azure Key Vault?.

Titkosítás és visszafejtés a borítéktechnikával

A borítéktechnikán keresztüli titkosítás a következőképpen működik:

  1. Az Azure Storage-ügyfélkódtár létrehoz egy tartalomtitkosítási kulcsot (CEK), amely egy egyszeri használatú szimmetrikus kulcs.

  2. A felhasználói adatok titkosítása a CEK használatával történik.

  3. A CEK ezután be van csomagolva (titkosítva) a kulcstitkosítási kulccsal (KEK). A KEK-t kulcsazonosító azonosítja, és lehet aszimmetrikus kulcspár vagy szimmetrikus kulcs. A KEK-t helyileg kezelheti, vagy egy Azure Key Vaultban tárolhatja.

    Maga az Azure Storage-ügyfélkódtár soha nem fér hozzá a KEK-hez. A kódtár meghívja a Key Vault által biztosított kulcsburkoló algoritmust. A felhasználók dönthetnek úgy, hogy egyéni szolgáltatókat használnak a kulcsburkoláshoz vagy a törléshez, ha szükséges.

  4. A titkosított adatok ezután fel lesznek töltve az Azure Blob Storage-ba. A burkolt kulcs és néhány további titkosítási metaadat metaadatként lesz tárolva a blobon.

A borítéktechnikán keresztüli visszafejtés a következőképpen működik:

  1. Az Azure Storage-ügyfélkódtár feltételezi, hogy a felhasználó helyileg vagy egy Azure Key Vaultban kezeli a KEK-t. A felhasználónak nem kell tudnia a titkosításhoz használt konkrét kulcsot. Ehelyett beállítható és használható egy kulcsfeloldó, amely a kulcsok különböző kulcsazonosítóit oldja fel.
  2. Az ügyfélkódtár letölti a titkosított adatokat az Azure Storage-ban tárolt titkosítási anyagokkal együtt.
  3. A becsomagolt CEK ezután le van bontva (visszafejtve) a KEK használatával. Az ügyfélkódtár nem fér hozzá a KEK-hez a folyamat során, de csak az Azure Key Vault vagy más kulcstároló le nem bontott algoritmusát hívja meg.
  4. Az ügyfélkódtár a CEK használatával fejti vissza a titkosított felhasználói adatokat.

Titkosítás/visszafejtés blobfeltöltésen/letöltésen

A Blob Storage-ügyfélkódtár csak feltöltés esetén támogatja a teljes blobok titkosítását. A letöltések esetében a teljes és a tartományletöltés is támogatott. Az ügyféloldali titkosítás v2 adattömbjei 4 MiB pufferelt hitelesített titkosítási blokkba kerülnek, amelyek csak egészben alakíthatók át. Az adattömb méretének módosításához győződjön meg arról, hogy az SDK legújabb verzióját használja, amely támogatja az ügyféloldali titkosítás 2.1-es verzióját. A régió hossza 16 bájttól 1 GiB-ig konfigurálható.

A titkosítás során az ügyfélkódtár véletlenszerű inicializálási vektort (IV) hoz létre 16 bájtból és egy 32 bájtos véletlenszerű CEK-ből, és ezen információk használatával végzi el a blobadatok borítékos titkosítását. A burkolt CEK és néhány további titkosítási metaadat blob-metaadatokként, valamint a titkosított blobként lesz tárolva.

Amikor egy ügyfél letölt egy teljes blobot, a becsomagolt CEK le lesz bontva, és a IV-el együtt használja a visszafejtett adatok ügyfélnek való visszaadásához.

A titkosított blob tetszőleges tartományának letöltéséhez módosítani kell a felhasználók által biztosított tartományt, hogy kis mennyiségű további adathoz jusson, amelyek a kért tartomány sikeres visszafejtéséhez használhatók.

Ezzel a sémával minden blobtípus (blokkblobok, lapblobok és hozzáfűző blobok) titkosítható/visszafejthető.

Figyelmeztetés

Ha saját metaadatokat szerkeszt vagy tölt fel a blobhoz, győződjön meg arról, hogy a titkosítási metaadatok megmaradnak. Ha új metaadatokat tölt fel a titkosítási metaadatok megőrzése nélkül, akkor a becsomagolt CEK, IV és egyéb metaadatok elvesznek, és nem fogja tudni lekérni a blob tartalmát. A Blob-metaadatok beállítása művelet meghívása mindig az összes blob metaadatát lecseréli.

Ha titkosított blobból olvas vagy ír, használjon teljes blobfeltöltési parancsokat, például blobfeltöltési parancsokat, például Blob elhelyezése, tartomány vagy teljes blobletöltési parancsok, például Blob lekérése. Kerülje a titkosított blobba való írást olyan protokollműveletekkel, mint a Tiltás, a Blokklista elhelyezése, a Lap elhelyezése vagy a Hozzáfűzési blokk. Ha titkosított blobon hívja meg ezeket a műveleteket, az megsérülhet, és olvashatatlanná teheti őket.

Példa: Blob titkosítása és visszafejtése ügyféloldali titkosítás v2-vel

Az ebben a szakaszban található kódpéldája bemutatja, hogyan használható az ügyféloldali titkosítás v2 a blobok titkosítására és visszafejtésére.

Fontos

Ha olyan adatokkal rendelkezik, amelyeket korábban ügyféloldali titkosítással titkosítottak 1-gyel, akkor vissza kell fejtenie az adatokat, és újra kell titkosítania azokat ügyféloldali titkosítási v2-vel. Tekintse meg az ügyféloldali kódtár alábbi útmutatóját és mintáját.

Ha ügyféloldali titkosítást szeretne használni a .NET-kódból, hivatkozzon a Blob Storage ügyfélkódtárára. Győződjön meg arról, hogy a 12.13.0-s vagy újabb verziót használja. Ha a 11.x verzióról a 12.13.0-s verzióra kell áttelepítenie, tekintse meg az áttelepítési útmutatót.

Az ügyféloldali titkosításhoz két további csomag szükséges az Azure Key Vault integrációjához:

  • Az Azure.Core csomag biztosítja a felületeket és IKeyEncryptionKeyResolver a IKeyEncryptionKey felületeket. A .NET-hez készült Blob Storage ügyfélkódtár már függőségként definiálja ezt a szerelvényt.

  • Az Azure.Security.KeyVault.Keys csomag (4.x és újabb verzió) biztosítja a Key Vault REST-ügyfelet és az ügyféloldali titkosítással használt titkosítási ügyfeleket. Győződjön meg arról, hogy ez a csomag szerepel a projektben, ha az Azure Key Vaultot használja kulcstárolóként.

    Az Azure Key Vault nagy értékű főkulcsokhoz lett tervezve, és a kulcstartónkénti szabályozási korlátok ezt a kialakítást tükrözik. Az Azure.Security.KeyVault.Keys 4.1.0-s verziójától a felület nem támogatja a IKeyEncryptionKeyResolver kulcsok gyorsítótárazását. Ha a gyorsítótárazás szabályozás miatt szükséges, az ebben a mintában bemutatott megközelítéssel egy gyorsítótárazási réteget szúrhat be egy Azure.Security.KeyVault.Keys.Cryptography.KeyResolver példányba.

A fejlesztők megadhatnak egy kulcsot, egy kulcsfeloldót vagy egy kulcsot és egy kulcsfeloldót is. A kulcsok egy kulcsazonosítóval vannak azonosítva, amely a CEK burkolási és kibontási logikáját biztosítja. A visszafejtési folyamat során kulcsfeloldóval oldhatók fel a kulcsok. A kulcsfeloldó meghatároz egy feloldási módszert, amely egy kulcsazonosítóval megadott kulcsot ad vissza. A feloldó lehetővé teszi a felhasználóknak, hogy több helyen felügyelt kulcsok közül válasszanak.

Titkosításkor a rendszer mindig a kulcsot használja, és a kulcs hiánya hibát eredményez.

Visszafejtéskor, ha a kulcs meg van adva, és annak azonosítója megegyezik a szükséges kulcsazonosítóval, a rendszer ezt a kulcsot használja a visszafejtéshez. Ellenkező esetben az ügyfélkódtár megpróbálja meghívni a feloldót. Ha nincs megadva feloldó, akkor az ügyfélkódtár hibát jelez. Ha meg van adva egy feloldó, a kulcsfeloldó meghívásával lekérheti a kulcsot. Ha a feloldó meg van adva, de nem rendelkezik a kulcsazonosító leképezésével, az ügyfélkódtár hibát jelez.

Ügyféloldali titkosítás használatához hozzon létre egy ClientSideEncryptionOptions objektumot, és állítsa be az ügyféllétrehozáshoz a SpecializedBlobClientOptions használatával. Api-alapú titkosítási beállítások nem állíthatók be. Minden mást az ügyfélkódtár kezel belsőleg.

// Your key and key resolver instances, either through Azure Key Vault SDK or an external implementation.
IKeyEncryptionKey key;
IKeyEncryptionKeyResolver keyResolver;

// Create the encryption options to be used for upload and download.
ClientSideEncryptionOptions encryptionOptions = new ClientSideEncryptionOptions(ClientSideEncryptionVersion.V2_0)
{
   KeyEncryptionKey = key,
   KeyResolver = keyResolver,
   // String value that the client library will use when calling IKeyEncryptionKey.WrapKey()
   KeyWrapAlgorithm = "some algorithm name"
};

// Set the encryption options on the client options.
BlobClientOptions options = new SpecializedBlobClientOptions() { ClientSideEncryption = encryptionOptions };

// Create blob client with client-side encryption enabled.
// Client-side encryption options are passed from service clients to container clients, 
// and from container clients to blob clients.
// Attempting to construct a BlockBlobClient, PageBlobClient, or AppendBlobClient from a BlobContainerClient
// with client-side encryption options present will throw, as this functionality is only supported with BlobClient.
BlobClient blob = new BlobServiceClient
(new Uri($"https://{accountName}.blob.core.windows.net"), new DefaultAzureCredential(), options).GetBlobContainerClient("my-container").GetBlobClient("myBlob");

// Upload the encrypted contents to the blob.
blob.Upload(stream);

// Download and decrypt the encrypted contents from the blob.
MemoryStream outputStream = new MemoryStream();
blob.DownloadTo(outputStream);

Titkosítási beállításokat alkalmazhat a BlobServiceClient, a BlobContainerClient vagy a BlobClient konstruktorokra, amelyek elfogadják a BlobClientOptions objektumokat.

Ha egy BlobClient-objektum már létezik a kódban, de nem rendelkezik ügyféloldali titkosítási lehetőségekkel, akkor bővítménymetódussal létrehozhat egy másolatot az objektumról az adott ClientSideEncryptionOptions használatával. Ez a bővítménymetódus elkerüli egy új BlobClient-objektum létrehozásának többletterhelését.

using Azure.Storage.Blobs.Specialized;

// An existing BlobClient instance and encryption options.
BlobClient plaintextBlob;
ClientSideEncryptionOptions encryptionOptions;

// Get a copy of the blob that uses client-side encryption.
BlobClient clientSideEncryptionBlob = plaintextBlob.WithClientSideEncryptionOptions(encryptionOptions);

Miután frissítette a kódot az ügyféloldali titkosítás v2 használatára, győződjön meg arról, hogy visszafejti és újra titkosítja a meglévő titkosított adatokat, a korábban titkosított adatok ügyféloldali titkosítással történő újratitkosítása 2.

Korábban titkosított adatok újratitkosítása ügyféloldali titkosítás v2-vel

Minden korábban ügyféloldali titkosítással v1 titkosítással titkosított adatot vissza kell fejteni, majd újra kell titkosítani az ügyféloldali titkosítás v2 használatával a biztonsági rés csökkentése érdekében. A visszafejtéshez le kell tölteni az adatokat, az újratitkosításhoz pedig újra kell tölteni az adatokat a Blob Storage-ba.

Az ügyféloldali titkosítás v1-ről v2-re történő migrálását és az adatok titkosítását ügyféloldali titkosítási v2-vel a .NET-ben bemutató mintaprojekt esetében tekintse meg a titkosítási migrálási mintaprojektet.

Ügyféloldali titkosítás és teljesítmény

Ne feledje, hogy a tárolási adatok titkosítása további teljesítménybeli többletterhelést eredményez. Amikor ügyféloldali titkosítást használ az alkalmazásban, az ügyféloldali kódtárnak biztonságosan létre kell hoznia a CEK-et és a IV-et, titkosítania kell magát a tartalmat, kommunikálnia kell a kiválasztott kulcstárolóval a kulcsbetöltéshez, valamint további metaadatokat kell formáznia és feltöltenie. Ez a többletterhelés a titkosítandó adatok mennyiségétől függ. Azt javasoljuk, hogy az ügyfelek mindig teszteljék az alkalmazásaikat a fejlesztés során.

Következő lépések