Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Bu belgede, SQL Server ve Azure SQL Veritabanı'ndaki Always Encrypted özelliğinde kullanılan şifreleme malzemesini türetmeye yönelik şifreleme algoritmaları ve mekanizmaları açıklanmaktadır.
Anahtarlar, anahtar depoları ve anahtar şifreleme algoritmaları
Always Encrypted iki tür anahtar kullanır: Sütun ana anahtarları ve sütun şifreleme anahtarları.
Sütun ana anahtarı (CMK), her zaman istemcinin denetiminde olan ve bir dış anahtar deposunda depolanan bir anahtar şifreleme anahtarıdır (örneğin, diğer anahtarları şifrelemek için kullanılan bir anahtar). Always Encrypted özellikli istemci sürücüsü, sürücü kitaplığının (Microsoft/sistem sağlayıcısı) veya istemci uygulamasının (özel bir sağlayıcı) parçası olabilecek bir CMK deposu sağlayıcısı aracılığıyla anahtar deposuyla etkileşim kurar. İstemci sürücü kitaplıkları şu anda Windows Sertifika Deposu ve donanım güvenlik modülleri (HSM) için Microsoft anahtar deposu sağlayıcıları içerir. Geçerli sağlayıcı listesi için bkz. CREATE COLUMN MASTER KEY (Transact-SQL). Uygulama geliştiricisi rastgele bir depo için özel sağlayıcı sağlayabilir.
Sütun şifreleme anahtarı (CEK), CMK tarafından korunan bir içerik şifreleme anahtarıdır (örneğin, verileri korumak için kullanılan bir anahtar).
Tüm Microsoft CMK depolama sağlayıcıları, Optimum Asimetrik Şifreleme Doldurma (RSA-OAEP) ile RSA kullanarak CEK'leri şifreler. Microsoft Şifreleme API'sini destekleyen anahtar deposu sağlayıcısı: .NET Framework'te (SqlColumnEncryptionCngProvider Sınıfı) Yeni Nesil (CNG), RFC 8017 tarafından Bölüm A.2.1'de belirtilen varsayılan parametreleri kullanır. Bu varsayılan parametreler SHA-1 karma işlevini ve SHA-1 ile MGF1'in maske oluşturma işlevini kullanır. Diğer tüm anahtar deposu sağlayıcıları SHA-256 kullanır.
Always Encrypted dahili olarak FIPS 140-2 doğrulanmış şifreleme modüllerini kullanır.
Veri Şifreleme Algoritması
Always Encrypted, veritabanındaki verileri şifrelemek için AEAD_AES_256_CBC_HMAC_SHA_256 algoritmasını kullanır.
AEAD_AES_256_CBC_HMAC_SHA_256 , konumundaki https://tools.ietf.org/html/draft-mcgrew-aead-aes-cbc-hmac-sha2-05belirtim taslağından türetilir. İlişkili Verilerle Kimliği Doğrulanmış Şifreleme şeması kullanılarak, Encrypt-then-MAC yaklaşımını izler. Yani, düz metin önce şifrelenir ve MAC sonuçta elde edilen şifreleme metnine göre oluşturulur.
AEAD_AES_256_CBC_HMAC_SHA_256, desenleri gizlemek için, başlatma vektör (IV) adlı sisteme bir ilk değerin beslendiği Şifreleme Blok Zinciri (CBC) işlem modunu kullanır. CBC modunun tam açıklamasını adresinde https://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdfbulabilirsiniz.
AEAD_AES_256_CBC_HMAC_SHA_256 aşağıdaki adımları kullanarak belirli bir düz metin değeri için bir şifreleme metni değeri hesaplar.
1. Adım: Başlatma vektörlerini oluşturma (IV)
Always Encrypted, iki varyasyon halinde AEAD_AES_256_CBC_HMAC_SHA_256'yı destekler:
Rastgeleleştirilmiş
Deterministik
Rastgele şifreleme için IV rastgele oluşturulur. Sonuç olarak, aynı düz metin her şifrelendiğinde, bilgilerin açığa çıkmasını önleyen farklı bir şifreleme metni oluşturulur.
When using randomized encryption: IV = Generate cryptographically random 128bits
Belirleyici şifreleme varsa IV rastgele oluşturulmaz, ancak bunun yerine aşağıdaki algoritma kullanılarak düz metin değerinden türetilir:
When using deterministic encryption: IV = HMAC-SHA-256( iv_key, cell_data ) truncated to 128 bits.
burada iv_key aşağıdaki şekilde CEK'den türetilir:
iv_key = HMAC-SHA-256(CEK, "Microsoft SQL Server cell IV key" + algorithm + CEK_length)
HMAC değerinin kesilmesi, IV için gereken bir veri bloğuna sığacak şekilde gerçekleştirilir. Sonuç olarak, belirleyici şifreleme her zaman belirli bir düz metin değeri için aynı şifreleme metnini üretir ve bu da karşılık gelen şifreleme metni değerlerini karşılaştırarak iki düz metin değerinin eşit olup olmadığının çıkarılmalarına olanak tanır. Bu sınırlı bilgilerin açığa çıkması, veritabanı sisteminin şifrelenmiş sütun değerlerinde eşitlik karşılaştırmasını desteklemesini sağlar.
Deterministik şifreleme, önceden tanımlanmış IV değeri kullanma gibi alternatiflere kıyasla desenleri gizlemede daha etkilidir.
2. Adım: AES_256_CBC Şifreli Metin Hesaplama
IV hesapladıktan sonra AES_256_CBC şifreleme metni oluşturulur:
aes_256_cbc_ciphertext = AES-CBC-256(enc_key, IV, cell_data) with PKCS7 padding.
Burada şifreleme anahtarı (enc_key) CEK'den aşağıdaki gibi türetilir.
enc_key = HMAC-SHA-256(CEK, "Microsoft SQL Server cell encryption key" + algorithm + CEK_length )
3. Adım: MAC Hesaplaması
Daha sonra, MAC aşağıdaki algoritma kullanılarak hesaplanır:
MAC = HMAC-SHA-256(mac_key, versionbyte + IV + Ciphertext + versionbyte_length)
Where:
versionbyte = 0x01 and versionbyte_length = 1
mac_key = HMAC-SHA-256(CEK, "Microsoft SQL Server cell MAC key" + algorithm + CEK_length)
4. Adım: Birleştirme
Son olarak, şifrelenmiş değer algoritma sürümü bayt, MAC, IV ve AES_256_CBC şifre metni birleştirilerek oluşturulur:
aead_aes_256_cbc_hmac_sha_256 = versionbyte + MAC + IV + aes_256_cbc_ciphertext
Şifreleme Metni Uzunluğu
AEAD_AES_256_CBC_HMAC_SHA_256 şifreleme metninin belirli bileşenlerinin uzunlukları (bayt cinsinden):
versionbyte: 1
MAC: 32
IV: 16
aes_256_cbc_ciphertext:
(FLOOR (DATALENGTH(cell_data)/ block_size) + 1)* block_size, burada:block_size 16 bayttır
cell_data düz metin değeridir
Bu nedenle, en düşük aes_256_cbc_ciphertext boyutu 1 blok ve 16 bayttır.
Bu nedenle, belirli bir düz metin değerinin (cell_data) şifrelenmesinden kaynaklanan şifreleme metninin uzunluğu aşağıdaki formül kullanılarak hesaplanabilir:
1 + 32 + 16 + (FLOOR(DATALENGTH(cell_data)/16) + 1) * 16
Örneğin:
4 baytlık uzun int düz metin değeri, şifrelemeden sonra 65 baytlık uzun ikili değere dönüşür.
2.000 bayt uzunluğunda nchar(1000) düz metin değerleri, şifrelemeden sonra 2.065 baytlık uzun ikili değere dönüşür.
Aşağıdaki tabloda veri türlerinin tam listesi ve her tür için şifreleme metninin uzunluğu yer alır.
| Veri Türü | Şifreleme Metni Uzunluğu [bayt] |
|---|---|
| bigint | 65 |
| binary | Değişir. Yukarıdaki formülü kullanın. |
| bit | 65 |
| char | Değişir. Yukarıdaki formülü kullanın. |
| date | 65 |
| datetime | 65 |
| datetime2 | 65 |
| datetimeoffset | 65 |
| decimal | 81 |
| float | 65 |
| geography | Yok (desteklenmez) |
| geometry | Yok (desteklenmez) |
| hierarchyid | Yok (desteklenmez) |
| image | Yok (desteklenmez) |
| int | 65 |
| para | 65 |
| nchar | Değişir. Yukarıdaki formülü kullanın. |
| ntext | Yok (desteklenmez) |
| Sayısal | 81 |
| nvarchar | Değişir. Yukarıdaki formülü kullanın. |
| Gerçek | 65 |
| smalldatetime | 65 |
| smallint | 65 |
| küçük para | 65 |
| sql_variant | Yok (desteklenmez) |
| sysname | Yok (desteklenmez) |
| text | Yok (desteklenmez) |
| time | 65 |
|
zaman etiketi (rowversion) |
Yok (desteklenmez) |
| tinyint | 65 |
| uniqueidentifier | 81 |
| varbinary | Değişir. Yukarıdaki formülü kullanın. |
| varchar | Değişir. Yukarıdaki formülü kullanın. |
| xml | Yok (desteklenmez) |
.NET Referansı
Bu belgede açıklanan algoritmalarla ilgili ayrıntılar için .NET Başvurusu'ndakiSqlAeadAes256CbcHmac256Algorithm.cs, SqlColumnEncryptionCertificateStoreProvider.cs ve SqlColumnEncryptionCertificateStoreProvider.cs dosyalarına bakın.