Ü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 emellett támogatja az Azure Key Vault-integráció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 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 ismertető témakört.

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 AES-t használ 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élkódtár CBC-módjának biztonsági rése miatt. 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 telepítse át az adatokat. További útmutatásért tekintse meg az alkalmazások biztonsági résének elhárítását ismertető alábbi 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 észlelt 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 tekintse meg az inaktív adatok Azure Storage-titkosítását ismertető témakört.

  • 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, amelyekre szüksége lesz, 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ást támogatja 1-es verzióban. Frissítse az alkalmazást úgy, hogy az ügyféloldali titkosítást 2-es verziójú ügyféloldali titkosítást támogató ügyfélkódtár-verziót használjon. A támogatott verziók listáját az ügyféloldali titkosítás SDK-támogatási mátrixában találja. 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 az ügyféloldali titkosítás v2-vel végezze el újra a titkosítást. Tudj meg többet...
Az alkalmazás ügyféloldali titkosítást használ az ügyféloldali titkosítást támogató ügyfélkódtár 2-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 az ügyféloldali titkosítás v2-vel végezze el újra a titkosítást. Tudj meg többet...

A Microsoft emellett az alábbi lépéseket javasolja az adatok védelméhez:

  • Konfigurálja a tárfiókokat úgy, hogy privát végpontok használatával biztosítják 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 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 azt mutatja be, hogy a .NET, a Java és a Python ügyféloldali titkosítás mely verziói támogatják az ügyféloldali titkosítást:

.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, a Java vagy a 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. Szükség esetén az ügyfélkódtár olyan verzióját használhatja, amely támogatja az ügyféloldali titkosítás v2-t egymás mellett az ügyfélkódtár egy korábbi verziójával a kód áttelepítése 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árai az Azure Key Vault támaszkodnak az ügyféloldali titkosításhoz használt kulcsok védelmére. További információ az Azure Key Vault-ről: Mi az az Azure Key Vault?.

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

A borítékos 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 a kulcstitkosítási kulccsal (KEK) burkolódik (titkosítva). A KEK-et egy kulcsazonosító azonosítja, és lehet aszimmetrikus kulcspár vagy szimmetrikus kulcs. A KEK-t helyileg kezelheti, vagy tárolhatja egy Azure-Key Vault.

    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 rendszer ezután feltölti a titkosított adatokat Azure Blob Storage. A burkolt kulcs és néhány további titkosítási metaadat metaadatokként lesz tárolva a blobban.

A boríték techniká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 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ó, 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 bármely titkosítási anyaggal együtt.
  3. A becsomagolt CEK ezután a KEK használatával feloldható (visszafejthető). 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ó 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 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 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 ezután 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 felhasználva visszaadja a visszafejtett adatokat az ügyfélnek.

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, győződjön meg 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 Put Blob), valamint tartomány- vagy teljes blobletöltési parancsokat, például a Blob lekérése parancsokat. Ne írjon titkosított blobba 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

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 korábban ügyféloldali titkosítással titkosított adatokkal rendelkezik, akkor vissza kell fejtenie az adatokat, és újra kell visszafejtenie 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.

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

  • Az Azure.Core csomag biztosítja a IKeyEncryptionKey felületeket.IKeyEncryptionKeyResolver 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áshoz használt titkosítási ügyfeleket. Ha az Azure Key Vault-t használja kulcstárolóként, meg kell győződnie arról, hogy a csomag szerepel a projektben.

    Az Azure Key Vault nagy értékű főkulcsokhoz készült, é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 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 azonosítása egy kulcsazonosítóval történik, amely biztosítja a CEK burkolásával és kicsomagolásával kapcsolatos logikát. A visszafejtési folyamat során egy kulcsfeloldóval oldható fel a kulcs. A kulcsfeloldó meghatároz egy feloldási metódust, amely egy kulcsazonosítóval megadott kulcsot ad vissza. A feloldó lehetővé teszi a felhasználóknak, hogy több, több helyen felügyelt kulcs 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 az 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 kulcsfeloldó meghívásával lekérheti a kulcsot. 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él létrehozására a SpecialBlobClientOptions használatával. Api-alapú titkosítási beállítások nem állíthatók be. Az ügyfélkódtár minden mást belsőleg kezel.

// 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 olyan BlobServiceClient-, BlobContainerClient- vagy 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 az új BlobClient-objektumok nulláról való 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 az ügyféloldali titkosítás v2-vel korábban titkosított adatok újbóli titkosítása című szakaszban leírtak szerint.

Korábban titkosított adatok újbóli titkosítása ügyféloldali titkosítással v2

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, az újbóli visszafejtéshez pedig újra be kell tölteni azokat a Blob Storage-ba.

Az adatok ügyféloldali titkosítás v1-ről v2-be való migrálását és az adatok .NET-ben történő ügyféloldali titkosítási v2-vel történő titkosítását bemutató mintaprojektért 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árolóval a kulcsok beágyazásához, 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 teljesítmény szempontjából a fejlesztés során.

Következő lépések