Ü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 kódtár emellett támogatja az Azure Key Vault integrációját a tárfiókkulcsok kezeléséhez.

Fontos

A Blob Storage szolgáltatásoldali és ügyféloldali titkosítást is támogat. A legtöbb esetben a Microsoft a szolgáltatásoldali titkosítási funkciók használatát javasolja az adatok védelmének megkönnyítése érdekében. További információ a szolgáltatásoldali titkosításról: Inaktív adatok Azure Storage-titkosítása.

A blobok ügyféloldali titkosítással és Az Azure Key Vault használatával történő titkosításának folyamatát bemutató részletes oktatóanyagért lásd: Blobok titkosítása és visszafejtése Microsoft Azure Storage az Azure Key Vault használatával.

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

A Azure Blob Storage ügyfélkódtár az AES-t használja a felhasználói adatok titkosításához. Az ügyféloldali titkosításnak két verziója érhető el az ügyfélkódtárban:

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, amely az ügyfélkódtár CBC mód implementációjában van. További információ erről a biztonsági résről: Az Azure Storage az ügyféloldali titkosítás frissítése az SDK-ban a biztonsági rés kezelése érdekében. 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 a következő, 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ókkal kapcsolatos további információkért lásd: Inaktív adatok Azure Storage-titkosítása.

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

Az alábbi táblázat összefoglalja azokat a lépéseket, amelyek akkor szükségesek, ha az alkalmazások ügyféloldali titkosítási v2-be való migrálását választja:

Ügyféloldali titkosítás állapota Javasolt műveletek
Az alkalmazás ügyféloldali titkosítást használ az ügyfélkódtár olyan verziója, amely csak az ügyféloldali titkosítás v1-et támogatja. Frissítse az alkalmazást úgy, hogy az ügyféloldali titkosítást támogató v2 ügyféloldali titkosítást támogató ügyfélkódtár-verziót használjon. A támogatott verziók listájáért tekintse meg az ügyféloldali titkosítás SDK-támogatási mátrixát . Tudj meg többet...

Frissítse a kódot az ügyféloldali titkosítás v2 használatára. Tudj meg többet...

Töltse le a titkosított adatokat a visszafejtéshez, majd újra visszafejtse azokat ügyféloldali titkosítás v2-vel. Tudj meg többet...
Az alkalmazás ügyféloldali titkosítást használ az ügyféloldali titkosítást támogató ügyféloldali titkosítás v2-es verziójával. Frissítse a kódot az ügyféloldali titkosítás v2 használatára. Tudj meg többet...

Töltse le a titkosított adatokat a visszafejtéshez, majd újra visszafejtse azokat ügyféloldali titkosítás v2-vel. Tudj meg többet...

Emellett a Microsoft azt javasolja, hogy tegye meg az alábbi lépéseket az adatok védelmének é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-ban.
  • Csak bizonyos hálózatokra korlátozza a hálózati hozzáférést.

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

Az alábbi táblázat bemutatja, hogy a .NET, a Java és a Python ügyfélkódtárainak mely verziói támogatják az ügyféloldali titkosítás mely 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

Ha az alkalmazás ügyféloldali titkosítást használ a .NET, Java vagy Python ügyfélkódtár 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 v2-t. Ezután vissza kell fejtenie és újra kell titkosítania az adatokat az ügyféloldali titkosítás v2-vel. Ha szükséges, használhatja az ügyfélkódtár olyan verzióját, amely támogatja az ügyféloldali titkosítás v2-t az ügyféloldali kódtár egy korábbi verziójával a kódtár migrálása során. A 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

A Azure Blob Storage ügyfélkódtárak borítéktitkosítással titkosítják és fejtik vissza az adatokat az ügyféloldalon. A borítéktitkosítás egy vagy több további kulccsal titkosítja a kulcsot.

A Blob Storage-ügyfélkódtárak az Azure Key Vault támaszkodnak az ügyféloldali titkosításhoz használt kulcsok védelmére. Az Azure Key Vault kapcsolatos további információkért lásd: Mi az az Azure Key Vault?.

Titkosítás és visszafejtés a boríték technikával

A boríték technikával történő 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 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 a kulcstitkosítási kulccsal (KEK) burkolódik (titkosítva). A KEK-t egy kulcsazonosító azonosítja, és lehet aszimmetrikus kulcspár vagy szimmetrikus kulcs. A KEK-t helyileg kezelheti, vagy azure-Key Vault 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/kicsomagoláshoz, ha szükséges.

  4. A titkosított adatok ezután feltöltődnek Azure Blob Storage. A burkolt kulcs és néhány további titkosítási metaadat metaadatként van tárolva a blobon.

A boríték technikával végzett 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 Vault 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ót, amely a kulcsok különböző azonosítóit oldja fel.
  2. Az ügyfélkódtár letölti a titkosított adatokat az Azure Storage-ban tárolt bármely titkosítási anyaggal együtt.
  3. A becsomagolt CEK ezután le van bontva (visszafejtve) a KEK használatával. Az ügyfélkódtár nem rendelkezik hozzáféréssel a KEK-hez a folyamat során, de csak az Azure Key Vault vagy más kulcstároló kicsomagolási 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.

A titkosítás során az ügyfélkódtár egy véletlenszerű inicializálási vektort (IV) hoz létre 16 bájtból és egy 32 bájtos véletlenszerű CEK-et, és ezen információk alapján elvégzi 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 burkolt CEK le lesz bontva, és a IV-el együtt használja a visszafejtett adatok ügyfélnek való visszaadásához.

Egy tetszőleges tartomány titkosított blobban való letöltéséhez módosítani kell a felhasználók által biztosított tartományt, hogy kis mennyiségű további adatot lehessen lekérni, 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, meg kell győződnie arról, hogy a titkosítási metaadatok megmaradnak. Ha a titkosítási metaadatok megőrzése nélkül tölt fel új metaadatokat, akkor a becsomagolt CEK, IV és egyéb metaadatok elvesznek, és nem fogja tudni lekérni a blob tartalmát. A Blob metaadatainak beállítása művelet meghívása mindig lecseréli az összes blob metaadatát.

Ha titkosított blobból olvas vagy ír, használjon teljes blobfeltöltési parancsokat, például a Put Blob parancsot, valamint a tartomány- vagy teljes blobletöltési parancsokat, például a Blob lekérése parancsokat. Kerülje a titkosított blobba való írást olyan protokollműveletekkel, mint a Put Block, a Put Block List, a Put Page vagy a Append Block. 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

A jelen szakasz kódpéldája bemutatja, hogyan használható az ügyféloldali titkosítás v2 egy blob titkosítására és visszafejtésére.

Fontos

Ha korábban ügyféloldali titkosítással v1-gyel titkosított adatokkal rendelkezik, vissza kell fejtenie az adatokat, és újra vissza kell fejtenie azokat az ügyféloldali titkosítás v2-vel. Tekintse meg az ügyfélkódtárhoz tartozó alábbi útmutatót és mintát.

Ha ügyféloldali titkosítást szeretne használni a .NET-kódból, tekintse meg a Blob Storage ügyfélkódtárát. 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 migrálnia, tekintse meg az áttelepítési útmutatót.

Az ügyféloldali titkosításhoz két további csomagra van szükség az Azure Key Vault-integrációhoz:

  • Az Azure.Core csomag biztosítja a és IKeyEncryptionKeyResolver a IKeyEncryptionKey felületet. 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 vagy újabb verzió) biztosítja a Key Vault REST-ügyfelet és az ügyféloldali titkosításhoz használt titkosítási ügyfeleket. Ha az Azure Key Vault-t használja kulcstárolóként, győződjön meg arról, hogy ez a csomag szerepel a projektben.

    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 szabályozás miatt gyorsítótárazásra van szükség, az ebben a mintában bemutatott módszer használatával szúrhat be egy gyorsítótárazási réteget egy Azure.Security.KeyVault.Keys.Cryptography.KeyResolver példányba.

A fejlesztők kulcsot, kulcsfeloldót vagy kulcsot és kulcsfeloldót is megadhatnak. A kulcsok egy kulcsazonosítóval vannak azonosítva, amely biztosítja a CEK burkolási és kicsomagolási logikáját. 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 rendelkező 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ó, az ügyfélkódtár hibát jelez. Ha meg van adva egy feloldó, a rendszer meghívja a kulcsfeloldót a kulcs lekéréséhez. Ha a feloldó meg van adva, de nem rendelkezik leképezéssel a kulcsazonosítóhoz, 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áskor a SpecializedBlobClientOptions paranccsal. Api-alapú titkosítási beállítások nem állíthatók be. Minden mást az ügyfélkódtár fog belsőleg kezelni.

// 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(connectionString, 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 nincsenek ügyféloldali titkosítási lehetőségek, akkor bővítménymetódussal létrehozhat egy másolatot az objektumról a megadott ClientSideEncryptionOptions paranccsal. Ez a bővítménymetódus elkerüli az új BlobClient-objektumok nulláról történő 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 visszafejti a meglévő titkosított adatokat a korábban titkosított adatok újbóli titkosítása ügyféloldali titkosítással v2 című cikkben leírtak szerint.

Korábban titkosított adatok újbóli titkosítása ügyféloldali titkosítás v2 használatával

Az ügyféloldali titkosítás v1-gyel korábban titkosított adatokat vissza kell fejteni, majd újra kell visszafejteni az ügyféloldali titkosítás v2-vel a biztonsági rés csökkentése érdekében. A visszafejtéshez le kell tölteni az adatokat, és újra kell tölteni azokat a Blob Storage-ba.

Egy mintaprojekt esetében, amely bemutatja, hogyan migrálhatja az adatokat az ügyféloldali titkosítás v1-ről a v2-be, és hogyan titkosíthatja az adatokat ügyféloldali titkosítással v2-vel a .NET-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. Ha ügyféloldali titkosítást használ az alkalmazásban, az ügyfélkó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árral 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ően változik. Azt javasoljuk, hogy az ügyfelek mindig teszteljék az alkalmazásaikat a fejlesztés során.

Következő lépések