Client-Side Encryption és Azure Key Vault a Microsoft Azure Storage-hoz

Áttekintés

Az Azure Storage .NET-hez készült ügyféloldali kódtára 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 az Azure Key Vaulttal való integrációt is támogatja a tárfiók kulcskezeléséhez.

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

A Javával történő ügyféloldali titkosítással kapcsolatban lásd a Microsoft Azure Storage Ügyféloldali titkosítása Javával című témakört.

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

A titkosítási és visszafejtési folyamatok a boríték technikáját követik.

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

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

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

  2. A felhasználói adatok titkosítása ezzel a CEK-sel 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, és helyileg kezelhető vagy tárolható az Azure Key Vaultban.

    Maga a tár ügyféloldali kódtára 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 -kicsomagoláshoz, ha szükséges.

  4. A titkosított adatok ezután feltöltődnek az Azure Storage szolgáltatásba. A burkolt kulcsot és néhány további titkosítási metaadatot a rendszer metaadatokként (blobokon) tárolja, vagy interpolálja a titkosított adatokkal (üzenetsor-üzenetek és táblaentitások).

Visszafejtés a boríték technikával

A borítékos módszerrel végzett visszafejtés a következő módon működik:

  1. Az ügyfélkódtár feltételezi, hogy a felhasználó helyileg vagy az Azure Key Vaultban kezeli a kulcstitkosítási kulcsot (KEK). 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 a szolgáltatásban tárolt bármely titkosítási anyaggal együtt.
  3. A becsomagolt tartalomtitkosítási kulcs (CEK) ezután a kulcstitkosítási kulccsal (KEK) lesz kicsomagolva (visszafejtve). Itt is az ügyfélkódtár nem rendelkezik hozzáféréssel a KEK-hez. Egyszerűen meghívja az egyéni vagy a Key Vault-szolgáltató feloldó algoritmusát.
  4. A rendszer ezután a tartalomtitkosítási kulcsot (CEK) használja a titkosított felhasználói adatok visszafejtéséhez.

Titkosítási mechanizmus

A storage-ügyfélkódtár AES-t használ a felhasználói adatok titkosításához. Pontosabban a Titkosítási blokkláncolás (CBC) mód az AES-sel. Minden szolgáltatás némileg másképp működik, ezért itt tárgyaljuk őket.

Blobok

Az ügyfélkódtár jelenleg csak a teljes blobok titkosítását támogatja. 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 16 bájtos véletlenszerű inicializálási vektort (IV) hoz létre egy 32 bájtos véletlenszerű tartalomtitkosítási kulccsal (CEK) együtt, és ezzel az információval 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 lesz tárolva a szolgáltatás titkosított blobjával együtt.

Figyelmeztetés

Ha saját metaadatokat szerkeszt vagy tölt fel a blobhoz, gondoskodnia kell arról, hogy a metaadatok megmaradjanak. Ha ezen metaadatok nélkül tölt fel új metaadatokat, a becsomagolt CEK, IV és egyéb metaadatok elvesznek, és a blob tartalma soha többé nem lesz lekérthető.

Egy teljes blob letöltésekor a becsomagolt CEK le van bontva, és a IV-gyel együtt lesz felhasználva (ebben az esetben blob-metaadatokként tárolva), hogy a visszafejtett adatokat visszafejtse a felhasználóknak.

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 adatot lehessen lekérni a kért tartomány sikeres visszafejtéséhez.

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

Üzenetsorok

Mivel az üzenetsor-üzenetek bármilyen formátumúak lehetnek, az ügyfélkódtár meghatároz egy egyéni formátumot, amely tartalmazza az inicializálási vektort (IV) és a titkosított tartalomtitkosítási kulcsot (CEK) az üzenet szövegében.

A titkosítás során az ügyfélkódtár létrehoz egy 16 bájtos véletlenszerű IV-et, valamint egy 32 bájtos véletlenszerű CEK-et, és ezzel az információval elvégzi az üzenetsor üzenetszövegének borítékos titkosítását. A becsomagolt CEK és néhány további titkosítási metaadat ezután hozzáadódik a titkosított üzenetsor üzenetéhez. Ez a módosított üzenet (alább látható) a szolgáltatásban van tárolva.

<MessageText>{"EncryptedMessageContents":"6kOu8Rq1C3+M1QO4alKLmWthWXSmHV3mEfxBAgP9QGTU++MKn2uPq3t2UjF1DO6w","EncryptionData":{…}}</MessageText>

A visszafejtés során a rendszer kinyeri a burkolt kulcsot az üzenetsor üzenetéből, és feloldja a le van bontva. A rendszer a IV-et is kinyeri az üzenetsor-üzenetből, és felhasználja a le nem bontott kulccsal együtt az üzenetsor üzenetadatainak visszafejtéséhez. Vegye figyelembe, hogy a titkosítási metaadatok kicsik (500 bájt alatt), így bár beleszámít az üzenetsor üzeneteinek 64 KB-os korlátba, a hatásnak kezelhetőnek kell lennie. Vegye figyelembe, hogy a titkosított üzenet base64 kódolású lesz, ahogy a fenti kódrészlet is mutatja, amely az elküldött üzenet méretét is megnöveli.

Táblázatok

Megjegyzés

A Table service csak az Azure Storage ügyféloldali kódtárában támogatott a 9.x verzión keresztül.

Az ügyfélkódtár támogatja a beszúrási és csereműveletek entitástulajdonságainak titkosítását.

Megjegyzés

Az egyesítés jelenleg nem támogatott. Mivel a tulajdonságok egy részhalmaza korábban egy másik kulccsal lett titkosítva, az új tulajdonságok egyesítése és a metaadatok frissítése adatvesztést fog eredményezni. Az egyesítéshez további szolgáltatáshívásokra van szükség a meglévő entitás szolgáltatásból való beolvasásához, vagy tulajdonságonként egy új kulcs használatával, amelyek teljesítménybeli okokból nem alkalmasak.

A táblaadatok titkosítása a következőképpen működik:

  1. A felhasználók határozzák meg a titkosítandó tulajdonságokat.
  2. Az ügyfélkódtár létrehoz egy 16 bájtból álló véletlenszerű inicializálási vektort (IV), valamint egy 32 bájtos véletlenszerű tartalomtitkosítási kulcsot (CEK) minden entitáshoz, és borítéktitkosítást végez az egyes tulajdonságokon, amelyeket tulajdonságonként egy új IV származtat. A titkosított tulajdonság bináris adatként van tárolva.
  3. A becsomagolt CEK és néhány további titkosítási metaadat ezután két további fenntartott tulajdonságként lesz tárolva. Az első fenntartott tulajdonság (_ClientEncryptionMetadata1) egy sztringtulajdonság, amely az IV, a verzió és a burkolt kulcs adatait tartalmazza. A második fenntartott tulajdonság (_ClientEncryptionMetadata2) egy bináris tulajdonság, amely a titkosított tulajdonságokra vonatkozó információkat tartalmazza. A második tulajdonságban (_ClientEncryptionMetadata2) lévő információk titkosítva lesznek.
  4. A titkosításhoz szükséges további fenntartott tulajdonságok miatt előfordulhat, hogy a felhasználók 252 helyett csak 250 egyéni tulajdonsággal rendelkeznek. Az entitás teljes méretének 1 MB-nál kisebbnek kell lennie.

Vegye figyelembe, hogy csak a sztringtulajdonságok titkosíthatók. Más típusú tulajdonságok titkosítása esetén sztringekké kell konvertálni őket. A titkosított sztringek bináris tulajdonságokként vannak tárolva a szolgáltatásban, és vissza lesznek konvertálva sztringekké a visszafejtés után.

Táblák esetében a titkosítási házirend mellett a felhasználóknak meg kell adniuk a titkosítandó tulajdonságokat. Ehhez meg kell adnia egy [EncryptProperty] attribútumot (a TableEntity-ből származtatott POCO-entitásokhoz) vagy egy titkosításfeloldót a kérelembeállításokban. A titkosításfeloldó egy olyan delegált, amely egy partíciókulcsot, egy sorkulcsot és egy tulajdonságnevet használ, és egy logikai értéket ad vissza, amely jelzi, hogy a tulajdonságot titkosítani kell-e. A titkosítás során az ügyfélkódtár ezt az információt fogja használni annak eldöntésére, hogy egy tulajdonság titkosítva legyen-e a vezetékbe való írás során. A meghatalmazott emellett lehetővé teszi a tulajdonságok titkosításának logikáját is. (Ha például X, akkor az A tulajdonság titkosítása; egyébként az A és a B tulajdonságok titkosítása.) Vegye figyelembe, hogy az entitások olvasása vagy lekérdezése során nem szükséges megadni ezt az információt.

Batch-műveletek

A kötegműveletek során a rendszer ugyanazt a KEK-t használja a kötegművelet összes sorában, mivel az ügyfélkódtár kötegműveletenként csak egy beállításobjektumot (és így egy szabályzatot/KEK-t) engedélyez. Az ügyfélkódtár azonban belsőleg létrehoz egy új, véletlenszerű IV és véletlenszerű CEK-et soronként a kötegben. A felhasználók úgy is dönthetnek, hogy a köteg minden műveletéhez különböző tulajdonságokat titkosítanak, ha ezt a viselkedést definiálják a titkosításfeloldóban.

Lekérdezések

Megjegyzés

Mivel az entitások titkosítva vannak, nem futtathat olyan lekérdezéseket, amelyek titkosított tulajdonságra szűrnek. Ha megpróbálja, az eredmények helytelenek lesznek, mert a szolgáltatás a titkosított adatokat nem titkosított adatokkal próbálja összehasonlítani.

A lekérdezési műveletek végrehajtásához meg kell adnia egy kulcsfeloldót, amely képes feloldani az eredményhalmaz összes kulcsát. Ha a lekérdezés eredményében szereplő entitást nem lehet feloldani egy szolgáltatónak, az ügyfélkódtár hibát jelez. A kiszolgálóoldali leképezéseket végrehajtó lekérdezések esetében az ügyfélkódtár alapértelmezés szerint hozzáadja a speciális titkosítási metaadat-tulajdonságokat (_ClientEncryptionMetadata1 és _ClientEncryptionMetadata2) a kijelölt oszlopokhoz.

Azure Key Vault

Az Azure Key Vault segít a felhőalapú alkalmazások és szolgáltatások által használt titkosítási kulcsok és titkos kulcsok védelmében. Az Azure Key Vault használatával a felhasználók titkosíthatják a kulcsokat és titkos kulcsokat (például hitelesítési kulcsokat, tárfiókkulcsokat, adattitkosítási kulcsokat). PFX-fájlok és jelszavak) hardveres biztonsági modulok (HSM-ek) által védett kulcsokkal. További információ: Mi az Azure Key Vault?.

A tárolóügyfél-kódtár az alapvető kódtár Key Vault-felületeit használja, hogy közös keretrendszert biztosítson az Azure-ban a kulcsok kezeléséhez. A felhasználók a Key Vault-kódtárakat az általuk nyújtott további előnyökre használhatják, például az egyszerű és zökkenőmentes szimmetrikus/RSA helyi és felhőkulcs-szolgáltatók hasznos funkcióit, valamint segítséget nyújthatnak az összesítéshez és a gyorsítótárazáshoz.

Interfész és függőségek

A Key Vault-integrációhoz két szükséges csomag szükséges:

  • Az Azure.Core tartalmazza a felületeket és IKeyEncryptionKeyResolver a IKeyEncryptionKey felületeket. A .NET-hez készült storage-ügyfélkódtár már függőségként definiálja.
  • Az Azure.Security.KeyVault.Keys (v4.x) tartalmazza a Key Vault REST-ügyfelet, valamint az ügyféloldali titkosítással használt titkosítási ügyfeleket.

A Key Vault nagy értékű főkulcsokhoz lett kialakítva, és a Key Vaultonkénti szabályozási korlátokat ennek szem előtt tartásával terveztük. Az Azure.Security.KeyVault.Keys 4.1.0-s verziójától függően nincs IKeyEncryptionKeyResolver olyan implementáció, amely támogatja a kulcsok gyorsítótárazását. Ha a szabályozás miatt gyorsítótárazásra van szükség, ezt a mintát követve lehet gyorsítótárazási réteget injektálni egy Azure.Security.KeyVault.Keys.Cryptography.KeyResolver példányba.

Ajánlott eljárások

A titkosítás támogatása csak a .NET-hez készült tárolóügyfél-kódtárban érhető el. A Windows Phone és a Windows Futtatókörnyezet jelenleg nem támogatja a titkosítást.

Fontos

Az ügyféloldali titkosítás használatakor vegye figyelembe ezeket a fontos szempontokat:

  • Ha titkosított blobból olvas vagy ír, használjon teljes blobfeltöltési parancsokat és tartomány-/teljes blobletöltési parancsokat. Kerülje a titkosított blobba való írást olyan protokollműveletekkel, mint a Put Block, a Put Block List, az Write Pages, a Clear Pages vagy a Append Block; ellenkező esetben megsérülhet a titkosított blob, és olvashatatlanná teheti.
  • Táblák esetében hasonló kényszer létezik. Ügyeljen arra, hogy a titkosítási metaadatok frissítése nélkül ne frissítse a titkosított tulajdonságokat.
  • Ha metaadatokat állít be a titkosított blobon, felülírhatja a visszafejtéshez szükséges titkosítással kapcsolatos metaadatokat, mivel a metaadatok beállítása nem additív. Ez a pillanatképekre is igaz; kerülje a metaadatok megadását egy titkosított blob pillanatképének létrehozásakor. Ha metaadatokat kell beállítani, először hívja meg a FetchAttributes metódust az aktuális titkosítási metaadatok lekéréséhez, és kerülje az egyidejű írást a metaadatok beállítása során.
  • Engedélyezze a RequireEncryption tulajdonságot az alapértelmezett kérési beállításokban azon felhasználók számára, amelyeknek csak titkosított adatokkal kell dolgozniuk. További információt alább talál.

Ügyfél API/interfész

A felhasználók csak kulcsot, csak feloldót vagy mindkettőt adhatnak meg. A kulcsok kulcsazonosítóval vannak azonosítva, és megadja a burkolás/kicsomagolás logikáját. A feloldók a kulcsok feloldására szolgálnak a visszafejtési folyamat során. Meghatároz egy feloldási metódust, amely kulcsazonosítóval rendelkező kulcsot ad vissza. Ez lehetővé teszi a felhasználóknak, hogy több helyen felügyelt kulcsok közül válasszanak.

  • Titkosításhoz a rendszer mindig a kulcsot használja, és a kulcs hiánya hibát eredményez.
  • Visszafejtéshez:
    • 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 a rendszer megkísérli a feloldót. Ha nincs feloldó ehhez a kísérlethez, a rendszer hibát jelez.
    • Ha meg van adva a kulcs lekérése, a kulcsfeloldó meghívása történik. Ha a feloldó meg van adva, de nem rendelkezik leképezéssel a kulcsazonosítóhoz, hibaüzenet jelenik meg.

Titkosítási mód megkövetelése (csak v11 esetén)

A felhasználók opcionálisan engedélyezhetik a működési módot, ahol minden feltöltést és letöltést titkosítani kell. Ebben a módban az adatok titkosítási szabályzat nélkül történő feltöltése vagy a szolgáltatáson nem titkosított adatok letöltése sikertelen lesz az ügyfélen. Ezt a viselkedést a kérelembeállítások objektum RequireEncryption tulajdonsága vezérli. Ha az alkalmazás az Azure Storage-ban tárolt összes objektumot titkosítja, akkor a RequireEncryption tulajdonságot beállíthatja a szolgáltatásügyfél-objektum alapértelmezett kérési beállításainál. Állítsa például a CloudBlobClient.DefaultRequestOptions.RequireEncryption értéket igaz értékre, hogy titkosítást igényeljen az ügyfélobjektumon keresztül végrehajtott összes blobművelethez.

Blobszolgáltatás titkosítása

Hozzon létre egy ClientSideEncryptionOptions objektumot, és állítsa be az ügyféllétrehozáskor a SpecialBlobClientOptions 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 fog belsőleg kezelni.

// Your key and key resolver instances, either through KeyVault 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.V1_0)
{
   KeyEncryptionKey = key,
   KeyResolver = keyResolver,
   // string the storage client will use when calling IKeyEncryptionKey.WrapKey()
   KeyWrapAlgorithm = "some algorithm name"
};

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

// Get your blob client with client-side encryption enabled.
// Client-side encryption options are passed from service to container clients, and container 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);

A BlobServiceClient nem szükséges a titkosítási beállítások alkalmazásához. A BlobClientOptions objektumokat elfogadó BlobContainerClient/BlobClient konstruktorokba is átadhatók.

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

using Azure.Storage.Blobs.Specialized;

// Your existing BlobClient instance and encryption options
BlobClient plaintextBlob;
ClientSideEncryptionOptions encryptionOptions;

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

Üzenetsor-szolgáltatás titkosítása

Hozzon létre egy ClientSideEncryptionOptions objektumot, és állítsa be az ügyfél létrehozásakor a SpecializedQueueClientOptions 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 fog belsőleg kezelni.

// Your key and key resolver instances, either through KeyVault 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.V1_0)
{
   KeyEncryptionKey = key,
   KeyResolver = keyResolver,
   // string the storage client will use when calling IKeyEncryptionKey.WrapKey()
   KeyWrapAlgorithm = "some algorithm name"
};

// Set the encryption options on the client options
QueueClientOptions options = new SpecializedQueueClientOptions() { ClientSideEncryption = encryptionOptions };

// Get your queue client with client-side encryption enabled.
// Client-side encryption options are passed from service to queue clients.
QueueClient queue = new QueueServiceClient(connectionString, options).GetQueueClient("myQueue");

// Send an encrypted queue message.
queue.SendMessage("Hello, World!");

// Download queue messages, decrypting ones that are detected to be encrypted
QueueMessage[] queue.ReceiveMessages(); 

A QueueServiceClient nem szükséges a titkosítási beállítások alkalmazásához. A QueueClient-konstruktoroknak is átadhatók, amelyek fogadják a QueueClientOptions objektumokat.

Ha egy kívánt QueueClient objektum már létezik, de nem rendelkezik ügyféloldali titkosítási beállításokkal, létezik egy bővítménymetódus az objektum másolatának létrehozásához a megadott ClientSideEncryptionOptions használatával. Ez a bővítménymetódus elkerüli egy új QueueClient objektum létrehozásának többletterhelését.

using Azure.Storage.Queues.Specialized;

// Your existing QueueClient instance and encryption options
QueueClient plaintextQueue;
ClientSideEncryptionOptions encryptionOptions;

// Get a copy of plaintextQueue that uses client-side encryption
QueueClient clientSideEncryptionQueue = plaintextQueue.WithClientSideEncryptionOptions(encryptionOptions);

Egyes felhasználók olyan üzenetsorokkal rendelkezhetnek, amelyekben nem minden fogadott üzenet visszafejthető sikeresen, és a kulcsnak vagy a feloldónak dobnia kell. Ebben az esetben a fenti példa utolsó sora jelenik meg, és a kapott üzenetek egyike sem lesz elérhető. Ezekben a forgatókönyvekben a QueueClientSideEncryptionOptions alosztály használható titkosítási lehetőségek biztosítására az ügyfelek számára. Elérhetővé tesz egy DecryptionFailed eseményt, amely akkor aktiválódik, ha egy üzenetsor-üzenet visszafejtése sikertelen, feltéve, hogy legalább egy hívás hozzá lett adva az eseményhez. Az egyénileg meghiúsult üzenetek így kezelhetők, és ki lesznek szűrve a ReceiveMessages által visszaadott végleges QueueMessage[] üzenetsorból.

// Create your encryption options using the sub-class.
QueueClientSideEncryptionOptions encryptionOptions = new QueueClientSideEncryptionOptions(ClientSideEncryptionVersion.V1_0)
{
   KeyEncryptionKey = key,
   KeyResolver = keyResolver,
   // string the storage client will use when calling IKeyEncryptionKey.WrapKey()
   KeyWrapAlgorithm = "some algorithm name"
};

// Add a handler to the DecryptionFailed event.
encryptionOptions.DecryptionFailed += (source, args) => {
   QueueMessage failedMessage = (QueueMessage)source;
   Exception exceptionThrown = args.Exception;
   // do something
};

// Use these options with your client objects.
QueueClient queue = new QueueClient(connectionString, queueName, new SpecializedQueueClientOptions()
{
   ClientSideEncryption = encryptionOptions
});

// Retrieve 5 messages from the queue.
// Assume 5 messages come back and one throws during decryption.
QueueMessage[] messages = queue.ReceiveMessages(maxMessages: 5).Value;
Debug.Assert(messages.Length == 4)

Táblaszolgáltatás titkosítása (csak v11 esetén)

Amellett, hogy létrehoz egy titkosítási szabályzatot, és a kérési beállításokra állítja be, meg kell adnia egy EncryptionResolver értéket a TableRequestOptionsban, vagy be kell állítania a [EncryptProperty] attribútumot az entitáson.

A feloldó használata

// Create the IKey used for encryption.
 RsaKey key = new RsaKey("private:key1" /* key identifier */);

 // Create the encryption policy to be used for upload and download.
 TableEncryptionPolicy policy = new TableEncryptionPolicy(key, null);

 TableRequestOptions options = new TableRequestOptions()
 {
    EncryptionResolver = (pk, rk, propName) =>
     {
        if (propName == "foo")
         {
            return true;
         }
         return false;
     },
     EncryptionPolicy = policy
 };

 // Insert Entity
 currentTable.Execute(TableOperation.Insert(ent), options, null);

 // Retrieve Entity
 // No need to specify an encryption resolver for retrieve
 TableRequestOptions retrieveOptions = new TableRequestOptions()
 {
    EncryptionPolicy = policy
 };

 TableOperation operation = TableOperation.Retrieve(ent.PartitionKey, ent.RowKey);
 TableResult result = currentTable.Execute(operation, retrieveOptions, null);

Attribútumok használata

Ahogy fentebb említettük, ha az entitás a TableEntity függvényt implementálja, akkor a tulajdonságokat a [EncryptProperty] attribútummal lehet díszíteni a EncryptionResolver megadása helyett.

[EncryptProperty]
 public string EncryptedProperty1 { get; set; }

Titkosítás és teljesítmény

Vegye figyelembe, hogy a tárolási adatok titkosítása további többletterhelést eredményez. Létre kell hozni a tartalomkulcsot és a IV-et, magát a tartalmat titkosítva kell lennie, és további metaadatokat kell formázni és feltölteni. 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