Kryptering på klientsidan för köer
Azure Queue Storage-klientbiblioteken för .NET och Python stöder kryptering av data i klientprogram innan de laddas upp till Azure Storage och dekrypterar data vid nedladdning till klienten. Klientbiblioteken stöder även integrering med Azure Key Vault för hantering av lagringskontonycklar.
Viktigt!
Azure Storage stöder både kryptering på tjänstsidan och på klientsidan. I de flesta scenarier rekommenderar Microsoft att du använder krypteringsfunktioner på tjänstsidan för enkel användning för att skydda dina data. Mer information om kryptering på tjänstsidan finns i Azure Storage-kryptering för vilande data.
Om kryptering på klientsidan
Azure Queue Storage-klientbiblioteket använder AES för att kryptera användardata. Det finns två versioner av kryptering på klientsidan i klientbiblioteket:
- Version 2 använder GCM-läge (Galois/Counter Mode) med AES.
- Version 1 använder CBC-läge (Cipher Block Chaining) med AES.
Varning
Användning av version 1 av kryptering på klientsidan rekommenderas inte längre på grund av en säkerhetsrisk i klientbibliotekets implementering av CBC-läge. Mer information om den här säkerhetsrisken finns i Azure Storage som uppdaterar kryptering på klientsidan i SDK för att åtgärda säkerhetsrisker. Om du använder version 1 rekommenderar vi att du uppdaterar programmet så att det använder version 2 och migrerar dina data. Mer information finns i följande avsnitt: Åtgärda säkerhetsrisken i dina program.
Minska säkerhetsrisken i dina program
På grund av en säkerhetsrisk som identifierats i klientbibliotekets implementering av CBC-läge rekommenderar Microsoft att du vidtar en eller flera av följande åtgärder omedelbart:
Överväg att använda krypteringsfunktioner på tjänstsidan i stället för kryptering på klientsidan. Mer information om krypteringsfunktioner på tjänstsidan finns i Azure Storage-kryptering för vilande data.
Om du behöver använda kryptering på klientsidan migrerar du dina program från kryptering på klientsidan v1 till kryptering på klientsidan v2.
I följande tabell sammanfattas de steg du behöver vidta om du väljer att migrera dina program till kryptering på klientsidan v2:
Krypteringsstatus på klientsidan | Rekommenderade åtgärder |
---|---|
Programmet använder kryptering på klientsidan en version av klientbiblioteket som endast stöder kryptering på klientsidan v1. | Uppdatera programmet så att det använder en version av klientbiblioteket som stöder kryptering på klientsidan v2. En lista över versioner som stöds finns i SDK-stödmatrisen för kryptering på klientsidan. Uppdatera koden så att den använder kryptering på klientsidan v2. |
Programmet använder kryptering på klientsidan med en version av klientbiblioteket som stöder kryptering på klientsidan v2. | Uppdatera koden så att den använder kryptering på klientsidan v2. |
Dessutom rekommenderar Microsoft att du vidtar följande steg för att skydda dina data:
- Konfigurera dina lagringskonton så att de använder privata slutpunkter för att skydda all trafik mellan ditt virtuella nätverk (VNet) och ditt lagringskonto via en privat länk. Mer information finns i Använda privata slutpunkter för Azure Storage.
- Begränsa endast nätverksåtkomst till specifika nätverk.
SDK-stödmatris för kryptering på klientsidan
I följande tabell visas vilka versioner av klientbiblioteken för .NET och Python som stöder vilka versioner av kryptering på klientsidan:
.NET | Python | |
---|---|---|
Kryptering på klientsidan v2 och v1 | Version 12.11.0 och senare | Version 12.4.0 och senare |
Endast kryptering på klientsidan v1 | Version 12.10.0 och tidigare | Version 12.3.0 och tidigare |
Om ditt program använder kryptering på klientsidan med en tidigare version av .NET- eller Python-klientbiblioteket måste du först uppgradera koden till en version som stöder kryptering på klientsidan v2. Därefter måste du dekryptera och kryptera om dina data med kryptering på klientsidan v2. Om det behövs kan du använda en version av klientbiblioteket som stöder kryptering på klientsidan v2 sida vid sida med en tidigare version av klientbiblioteket medan du migrerar koden.
Så här fungerar kryptering på klientsidan
Azure Queue Storage-klientbiblioteken använder kuvertkryptering för att kryptera och dekryptera dina data på klientsidan. Kuvertkryptering krypterar en nyckel med en eller flera ytterligare nycklar.
Klientbiblioteken i Queue Storage förlitar sig på Azure Key Vault för att skydda de nycklar som används för kryptering på klientsidan. Mer information om Azure Key Vault finns i Vad är Azure Key Vault?.
Kryptering och dekryptering via kuverttekniken
Kryptering via kuverttekniken fungerar på följande sätt:
Azure Storage-klientbiblioteket genererar en innehållskrypteringsnyckel (CEK), som är en symmetrisk nyckel för engångsanvändning.
Användardata krypteras med hjälp av CEK.
CEK omsluts sedan (krypteras) med nyckelkrypteringsnyckeln (KEK). KEK identifieras av en nyckelidentifierare och kan vara antingen ett asymmetriskt nyckelpar eller en symmetrisk nyckel. Du kan hantera KEK lokalt eller lagra den i ett Azure Key Vault.
Själva Azure Storage-klientbiblioteket har aldrig åtkomst till KEK. Biblioteket anropar nyckelomslutningsalgoritmen som tillhandahålls av Key Vault. Användare kan välja att använda anpassade providers för nyckelomslutning/avskrivning om så önskas.
Krypterade data laddas sedan upp till Azure Queue Storage. Den omslutna nyckeln tillsammans med ytterligare krypteringsmetadata interpoleras med krypterade data.
Dekryptering via kuverttekniken fungerar på följande sätt:
- Azure Storage-klientbiblioteket förutsätter att användaren hanterar KEK antingen lokalt eller i ett Azure Key Vault. Användaren behöver inte känna till den specifika nyckel som användes för kryptering. I stället kan en nyckellösare som löser olika nyckelidentifierare till nycklar konfigureras och användas.
- Klientbiblioteket laddar ned krypterade data tillsammans med krypteringsmaterial som lagras i Azure Storage.
- Den omslutna CEK:en) packas sedan upp (dekrypteras) med hjälp av KEK. Klientbiblioteket har inte åtkomst till KEK under den här processen, men anropar bara algoritmen för att packa upp i Azure Key Vault eller något annat nyckelarkiv.
- Klientbiblioteket använder CEK för att dekryptera krypterade användardata.
Meddelandekryptering/dekryptering
Eftersom kömeddelanden kan ha valfritt format definierar klientbiblioteket ett anpassat format som innehåller initieringsvektorn (IV) och krypteringsnyckeln för krypterat innehåll (CEK) i meddelandetexten.
Under krypteringen genererar klientbiblioteket en slumpmässig IV på 16 byte tillsammans med en slumpmässig CEK på 32 byte och utför kuvertkryptering av kömeddelandetexten med hjälp av den här informationen. Den omslutna CEK:en och några ytterligare krypteringsmetadata läggs sedan till i det krypterade kömeddelandet. Det här ändrade meddelandet lagras i tjänsten.
<MessageText>{"EncryptedMessageContents":"6kOu8Rq1C3+M1QO4alKLmWthWXSmHV3mEfxBAgP9QGTU++MKn2uPq3t2UjF1DO6w","EncryptionData":{…}}</MessageText>
Under dekrypteringen extraheras den omslutna nyckeln från kömeddelandet och packas upp. IV extraheras också från kömeddelandet och används tillsammans med den oöppnade nyckeln för att dekryptera kömeddelandedata. Krypteringsmetadata är små (under 500 byte), så även om det räknas mot gränsen på 64 KB för ett kömeddelande bör effekten vara hanterbar. Det krypterade meddelandet är Base64-kodat, enligt ovanstående kodfragment, vilket utökar storleken på meddelandet som skickas.
På grund av den kortlivade typen av meddelanden i kön bör det inte vara nödvändigt att dekryptera och omkryptera kömeddelanden efter uppdatering till kryptering på klientsidan v2. Mindre säkra meddelanden roteras under normal köförbrukning.
Kryptering och prestanda på klientsidan
Tänk på att kryptering av lagringsdata resulterar i ytterligare prestandakostnader. När du använder kryptering på klientsidan i ditt program måste klientbiblioteket på ett säkert sätt generera CEK och IV, kryptera själva innehållet, kommunicera med det valda nyckelarkivet för nyckel-omslutning och formatera och ladda upp ytterligare metadata. Den här kostnaden varierar beroende på hur mycket data som krypteras. Vi rekommenderar att kunderna alltid testar sina program för prestanda under utvecklingen.