Microsoft SDL Şifreleme Öneriler

Giriş

Bu belge, Microsoft platformlarında şifrelemeyi kullanmaya yönelik önerileri ve en iyi yöntemleri içerir. Buradaki içeriğin büyük bir alanı, Güvenlik Geliştirme Yaşam Döngüsü oluşturmak için kullanılan Microsoft'un kendi iç güvenlik standartlarıyla uyumlu veya toplanmış. Microsoft'un kendi ürün ve hizmetlerini gerektirdiği API'leri, algoritmaları, protokolleri ve anahtar uzunluklarını kullanmak üzere ürün tasarlarken başvuru olarak kullanılmalıdır.

Platformlar üzerinde Windows geliştiriciler de bu önerilerden yararlanabilir. API ve kitaplık adları farklı olabilir ama algoritma seçimi içeren en iyi yöntemler, anahtar uzunluğu ve veri koruması platformlar arasında benzerdir.

Güvenlik Protokolü, Algoritma ve Anahtar Uzunluğu Öneriler

SSL/TLS sürümleri

Ürünler ve hizmetler SSL/TLS'nin şifreleme güvenliği sürümlerini kullanmalısınız:

  • TLS 1.2 etkinleştirilmelidir

  • Yalnızca geriye dönük uyumluluk için TLS 1.1 ve TLS 1.0 etkinleştirilmelidir

  • SSL 3 ve SSL 2 varsayılan olarak devre dışı bırak bırakılabilir

Simetrik Blok Şifreleme, Şifreleme Modları ve Başlatma Vektörleri

Şifrelemeleri Engelle

Simetrik blok şifrelemesi kullanan ürünler için:

  • Gelişmiş Şifreleme Standardı (AES), yeni kod için önerilir.

  • Üç Anahtarlı Üçlü Veri Şifreleme Standardı (3DES), geriye dönük uyumluluk için var olan kodda izin verilen bir koddur.

  • RC2, DES, 2-Key 3DES, DESX ve Skippher gibi diğer tüm şifreleme şifrelemeleri, yalnızca eski verilerin şifresini çözmek için kullanılmalıdır ve şifreleme için kullanılırsa değiştir kullanılmalıdır.

Simetrik blok şifreleme algoritmaları için en az 128 bit anahtar uzunluğu önerilir. Yeni kod için önerilen tek blok şifreleme algoritması AES'tir (AES-128, AES-192 ve AES-256'nın hepsi kabul edilebilir durumdadır; AES-192 bazı işlemcilerde iyileştirme olmamasına neden olur). Üç anahtarlı 3DES şu anda var olan kodda zaten kullanıyorsa kabul edilebilir; AES'ye geçiş önerilir. DES, DESX, RC2 ve Skip skip ayrıca güvenli kabul edilir. Bu algoritmalar geriye dönük uyumluluk açısından yalnızca mevcut verilerin şifresini çözmek için kullanılmalıdır ve veriler önerilen şifreleme kullanılarak yeniden şifrelenir.

Şifreleme Modları

Simetrik algoritmalar, çoğu düz metin ve şifreleme bloklarında şifreleme işlemlerini birlikte bağlayarak çeşitli modlarda çalışır.

Simetrik blok şifreleme, aşağıdaki şifreleme modlarından biri ile kullanılmalıdır:

Aşağıdakiler gibi diğer şifreleme modları, bunların yanlış kullanılma olasılığı daha yüksek olan uygulama hatalarına sahiptir. Özellikle, Elektronik Kod Defteri (ECB) modundan kaçınılmalıdır. CTR gibi "şifreleme modları" içinde blok şifrelemeleri ile aynı başlatma vektörü (IV) yeniden kullanılırken, şifrelenmiş verilerin ortaya çıkarılamalarına neden olabilir. Aşağıdaki modlardan herhangi biri kullanılıyorsa, ek güvenlik incelemesi önerilir:

  • Çıkış Geri Bildirimi (OFB)

  • Şifreleme Geri Bildirimi (CFB)

  • Counter (CTR)

  • CBC-MAC (CCM) ile Counter

  • Gal biraya/Counter Mode (GCM)

  • Yukarıdaki "önerilenler" listesinde yer alan başka hiçbir şey

Başlatma Vektörleri (IV)

Tüm simetrik blok şifrelemeler şifrelemede bir başlatma vektörü olarak şifreleme açısından güçlü rastgele sayı ile kullanılmalıdır. Başlatma vektörleri hiçbir zaman sabit bir değer olmalı. Şifrelemesel olarak güçlü rastgele sayılar oluşturma önerileri için Rastgele Sayı Oluşturucular'a bakın.

Birden çok şifreleme işlemi yaparken başlatma vektörleri hiçbir zaman yeniden kullanılmamalıdır, çünkü bu durum özellikle Çıktı Geri Bildirimi (OFB) veya Counter (CTR) gibi akış şifreleme modlarını kullanırken şifrelenmiş veriler hakkında bilgi açığa çıkarabilir.

Asimetrik Algoritmalar, Anahtar Uzunlukları ve Doldurma Modları

RSA

  • RSA şifreleme, anahtar değişimi ve imzalar için kullanılmalıdır.

  • RSA şifrelemesi OAEP veya RSA-PSS doldurma modlarını kullansın. Var olan kodda yalnızca uyumluluk için PKCS #1 v1.5 doldurma modu kullanılabilir.

  • Boş doldurma kullanımı önerilmez.

  • Tuşlar > = 2048 bit önerilir

ECDSA

  • >= 256 bit tuşlarıyla ECDSA kullanılması önerilir

  • ECDSA tabanlı imzalar, NIST onaylı üç eğriden (P-256, P-384 veya P521) birini kullanlardır.

ECDH

  • = 256 bit tuşları ile ECDH > önerilir

  • ECDH tabanlı anahtar değişimi, NIST onaylı üç eğriden (P-256, P-384 veya P521) birini kullanamalı.

Integer diffie-Dizeman

  • Anahtar uzunluğu > = 2048 bit önerilir

  • Grup parametreleri iyi bilinen bir grup (örn. RFC 7919) veya güvenilir bir taraf tarafından oluşturulmuş ve kullanımdan önce kimliği doğrulanmış bir grup olmalıdır

Anahtar Yaşam Ömrü

  • Tüm asimetrik anahtarların en çok beş yıllık yaşam süresi olmalı ve bir yıl boyunca önerilir.

  • Tüm simetrik tuşların yaşam süresi en fazla üç olmalı; önerilen bir yıllık yaşam süresi.

  • Sınırlı etkin yaşam süresine ulaşmak için tuşları değiştirmek için bir mekanizma sağlalı veya bir sürecin olması gerekir. Etkin yaşam süresi sona erdikten sonra, yeni veriler (örneğin şifreleme veya imzalama) üretmek için anahtar kullanılmalı, ancak verileri okumak için kullanılabilir (örneğin, şifre çözme veya doğrulama için).

Rastgele Sayı Oluşturucular

Tüm ürün ve hizmetler, rastgelelik gerektiğinde şifreleme ile rastgele sayı oluşturucuları kullanmalı.

CNG

CAPI

Win32/64

.NET

Windows Store Uygulamaları

Önerilmez

Windows Desteklenen Şifreleme Kitaplıkları

Uygulama Windows, Microsoft işletim sisteminde yerleşik olan şifreleme API'lerini kullanmayı önermektedir. Diğer platformlarda, geliştiriciler platform olmayan şifreleme kitaplıklarını kullanım için değerlendirmeyi seçebilir. Genel olarak, platform şifreleme kitaplıkları bir uygulama ile paketlenme yerine işletim sisteminin bir parçası olarak sevk edildiklerinden daha sık güncelleştirilir.

Platform ve platform dışı şifrelemeyle ilgili her türlü kullanım kararı aşağıdaki gerekliliklere uygun olarak rehber olunacaktır:

  1. Kitaplık, bilinen güvenlik açıkları için geçerli bir destek sürümüne sahip değil

  2. En son güvenlik protokolleri, algoritmalar ve anahtar uzunlukları destek olmalıdır

  3. (İsteğe bağlı) Kitaplık yalnızca geriye dönük uyumluluk için eski güvenlik protokollerini/algoritmaları destekleyene sahip olmalı

Yerel Kod

Yönetilen Kod

  • Şifreleme Temelleri: System.Security.Cryptography ad uzayı'da tanımlanan API'yi kullanın--- CNG sınıfları tercih edilir.

  • Kullanılabilir .Net Framework'in en son sürümünü kullanın. En azından .Net Framework sürüm 4.6'dır. Daha eski bir sürüm gerekli ise söz konusu uygulama için TLS 1.2'yi etkinleştirmek için "SchUseStrongCrypto" regkey'in ayarlanmış olduğundan emin olun.

  • Sertifika Doğrulaması: System.Security.Cryptography.X509Certificates ad alanı altında tanımlanan API'leri kullanın.

  • SSL/TLS/DTLS: Api'leri System.Net alanı altında tanımlanan API'leri kullanın (örneğin, HttpWebRequest).

Anahtar Türetme İşlevleri

Anahtar türetme, paylaşılan bir gizliden veya mevcut bir şifreleme anahtarından şifreleme anahtarı malzemesi türetme işlemidir. Ürünlerde önerilen anahtar türetme işlevleri kullanılır. Bu kılavuzda, kullanıcı tarafından seçilen parolalardan türeyen anahtarlar veya kimlik doğrulama sisteminde depolama için karma parolalar kullanma, özel bir durum değildir; geliştiricilerin bir uzmana danışması gerekir.

Aşağıdaki standartlarda, kullanım için önerilen KDF işlevleri belirtmektedir:

  • NIST SP 800-108: Takma Ad İşlevlerini kullanarak anahtarTüretme için öneri. Özel olarak, ters modda KDF ve HMAC sahte işlev olarak HMAC

  • NIST SP 800-56A (Düzeltme 2): Ayrık Logarithm Şifrelemesi kullanılarak Pair-WiseTemel Referans Düzenleri Hakkında Öneri . Özellikle Bölüm 5.8.1'in "Tek Adımlı Anahtar Türetme İşlevi" önerilir.

Var olan tuşlardan anahtarları türetmek için, algoritmalardan birini kullanarak BCryptKeyDerivation API'sini kullanın:

  • BCRYPT_SP800108_CTR_HMAC_ALGORITHM

  • BCRYPT_SP80056A_CONCAT_ALGORITHM

Anahtarları paylaşılan bir gizliden (anahtar sözleşmesi çıktısı) türetir için BCryptDeriveKey API'sini aşağıdaki algoritmalardan birini kullanarak kullanın:

  • BCRYPT_KDF_SP80056A_CONCAT

  • BCRYPT_KDF_HMAC

Sertifika Doğrulama

SSL, TLS veya DTLS kullanan ürünler, bağlanacakları varlıkların X.509 sertifikalarını tam olarak doğrulamalısınız. Sertifikalar için doğrulama da buna dahildir:

  • Etki alanı adı.

  • Geçerlilik tarihleri (hem başlangıç hem de son kullanma tarihleri).

  • İptal durumu.

  • Kullanım (örneğin, sunucular için "Sunucu Kimlik Doğrulaması", istemciler için "İstemci Kimlik Doğrulaması" gibi).

  • Güven zinciri. Sertifikalar, platform tarafından güvenilen veya yönetici tarafından açıkça yapılandırılmış bir kök sertifika yetkilisine (CA) sahip olması gerekir.

Bu doğrulama testlerinin herhangi biri başarısız olursa, ürün varlıkla bağlantıyı sonlandırmalı.

"Otomatik olarak imzalanan" sertifikalara güvenen istemciler (örneğin, varsayılan yapılandırmada bir Exchange sunucusuna bağlanan posta istemcisi) sertifika doğrulama denetimlerini yoksayabilirsiniz. Bununla birlikte, otomatik olarak imzalanan sertifikalar güveni, destek iptali veya anahtar yenilemeyi desteklemez. Otomatik olarak imzalanan sertifikalara, bunları başka bir güvenilir kaynaktan aldıysanız (örneğin, kimliği doğrulanmış ve bütünlük korumalı bir aktarım üzerinden sertifika sağlayan güvenilir varlık) güvenebilirsiniz.

Şifreleme Karma İşlevleri

Ürünler SHA-2 karma algoritmalarını (SHA256, SHA384 ve SHA512) kullanmaktadır. Güvenlik amacıyla 128 bit'den az şifreleme karmaları kullanılması önerilmez.

MAC/HMAC/anahtarlı karma algoritmaları

İleti kimlik doğrulama kodu (MAC), iletinin alıcısına hem gönderenin kimlik doğrulamasını hem de gizli bir anahtar kullanarak iletinin bütünlüğünü doğrulamasını sağlayan bir bilgi parçasıdır.

Karma tabanlı MAC(HMAC) veya blok şifreleme tabanlı MAC'in kullanımı, tüm temel karma veya simetrik şifreleme algoritmalarının da kullanılması önerilir; Şu anda bu işlevler HMAC-SHA2 işlevlerini (HMAC-SHA256, HMAC-SHA384 ve HMAC-SHA512) içerir.

HMA'ların 128 bit'den küçük olacak şekilde kırp kullanılması önerilmez.

Tasarım ve İşlemde Dikkate Alınacak Noktalar

  • Şifreleme anahtarlarını gerektiği gibi değiştirmek için bir mekanizma sağlanız gerekir. Etkin yaşam sürelerinin sonuna ulaştıktan sonra veya şifreleme anahtarının güvenliği ihlal edildiyse, anahtarların değiştirilmesi gerekir. Bir sertifikayı her yenilerken, bunu yeni bir anahtarla yenilemelisiniz.

  • Verileri korumak için şifreleme algoritmaları kullanan ürünler, gelecekte farklı algoritmalara ve bu içerikler için yeterli meta veri içermeli. Kullanılan algoritma, anahtar boyutları, başlatma vektörleri ve doldurma modları buna dahildir.

  • Kullanılabilir olduğu zaman, ürünler yeniden uygulamak yerine, platform tarafından sağlanan şifreli protokolleri kullansın. Bu, imzalama biçimlerini de içerir (örneğin, standart, var olan bir biçim kullanın).

  • RC4 gibi simetrik akış şifrelemeleri kullanılma kullanılmalıdır. Simetrik akış şifrelemeleri yerine, ürünler en az 128 bit anahtar uzunluğuna sahip, özellikle de AES olmak üzere bir blok şifreleme kullanmalı.

  • Şifreleme işlemi hatalarını son kullanıcılara bildirme. Uzak arayanlara (web istemcisi veya istemci sunucu senaryosunda istemci gibi) bir hata döndürürken, yalnızca genel bir hata iletisi kullanın.

    • Aralığın dışında veya geçersiz uzunluk hatalarını doğrudan raporlama gibi gereksiz bilgiler sağlamaktan kaçının. Yalnızca sunucuda ayrıntılı hataları ve yalnızca ayrıntılı günlüğe kaydetme etkinleştirildiğinde günlüğe kaydetme.
  • Aşağıdakileri içeren tüm tasarımlarda ek güvenlik incelemesi önerilir:

    • Öncelikli olarak güvenlik üzerine odaklanan yeni protokol (kimlik doğrulama veya yetkilendirme protokolü gibi)

    • Yeni veya standart olmayan bir şekilde şifreleme kullanan yeni protokol o Örnek'te dikkate alınacak noktalar şunlardır:

      • Protokolü uygulayan bir ürün, protokol uygulamanın bir parçası olarak tüm şifreleme API'lerini veya yöntemleri çağıracak mı?

      • Protokol, kimlik doğrulama veya yetkilendirme için kullanılan diğer protokollere bağlı mı?

      • Protokol, anahtarlar gibi şifreleme öğeleri için depolama biçimlerini tanımlar mı?

  • Üretim ortamlarında otomatik olarak imzalanan sertifikalar önerilmez. Ham şifreleme anahtarının kullanımı gibi otomatik olarak imzalanan bir sertifikanın kullanımı yapısal olarak kullanıcılara veya yöneticilere güven kararı vermenin temellerini sağlamaz.

    • Buna karşılık, güvenilir bir sertifika yetkilisine kök sertifika kullanımı, ilişkili özel anahtara güvenmek için temel sağlar ve güvenlik hatası durumunda iptal ve güncelleştirmeleri sağlar.

Hassas Verileri Şifrele Depolama

DPAPI/DPAPI-NG

Sistem yeniden başlatmaları sırasında kalıcı olması gereken veriler için:

  • CryptProtectData

  • CryptUnprotectData

  • NCryptProtectSecret (Windows 8 CNG DPAPI)

Sistem yeniden başlatmaları sırasında kalıcı olması gerek zorunda olmadığınız veriler için:

  • CryptProtectMemory

  • CryptUnprotectMemory

Birden çok etki alanı hesabı ve bilgisayar tarafından kalıcı ve erişilebilir olması gereken veriler için:

SQL Server TDE

Hassas verileri korumak SQL Server Saydam Veri Şifrelemesi TDE) kullanabilirsiniz.

SDL şifreleme algoritması ve temel güvenlik gereksinimlerine uygun bir TDE veritabanı şifreleme anahtarı (DEK) kullan gerekir. Şu anda yalnızca AES_128, AES_192 ve AES_256 bilgi önerilir; TRIPLE_DES_3KEY önerilmez.

TDE'nin kullanımıyla ilgili dikkate SQL dikkate alınması gereken bazı önemli noktalar vardır:

  • SQL Server, TDE etkin olsa bile FILESTREAM verileri için şifrelemeyi desteklemez.

  • TDE, veritabanına veya veritabanından aktarma sırasındaki veriler için otomatik olarak şifreleme sağlamaz; ayrıca, bu veritabanına şifreli bağlantıları SQL Server gerekir. Şifreli bağlantıları etkinleştirme hakkında yol gösterici bilgi için lütfen Veritabanı Altyapısına (SQL Server Yapılandırma Yöneticisi) Şifreli Bağlantıları Etkinleştirme'ye bakın.

  • TDE korumalı bir veritabanını başka bir SQL Server örneğine taşısanız, TDE Veri Şifreleme Anahtarı'nın (DEK) korumasını koruyan sertifikayı da taşımalı ve hedef veritabanına (örneğinin ana veritabanına) SQL Server gerekir. Daha fazla bilgi için TDE Korumalı Veritabanını Başka Bir Veritabanına Taşıma SQL Server TechNet makalesine bakın.

Kimlik Bilgileri Yönetimi

Parolayı ve kimlik Windows korumak için Ana Windows Yöneticisi API'sini veya Microsoft Azure KeyVault'un bilgilerini kullanın.

Windows Store Uygulamaları

Sınıftaki sınıfları Windows. Security.Cryptography ve Windows. Gizli bilgileri ve hassas verileri korumak için Security.Cryptography.DataProtection ad alanları.

  • ProtectAsync

  • ProtectStreamAsync

  • UnprotectAsync

  • UnprotectStreamAsync

Sınıftaki sınıfları Windows. Parolayı ve kimlik bilgileri verilerini korumak için Security.Credentials ad alanı.

.NET

Sistem yeniden başlatmaları sırasında kalıcı olması gereken veriler için:

  • ProtectedData.Protect

  • ProtectedData.Unprotect

Sistem yeniden başlatmaları sırasında kalıcı olması gerek zorunda olmadığınız veriler için:

  • ProtectedMemory.Protect

  • ProtectedMemory.Unprotect

Yapılandırma dosyaları için

Sırasıyla RSAProtectedConfigurationProvider veya DPAPIProtectedConfigurationProvider kullanarak yapılandırmanızı korumak için RSAProtectedConfigurationProvider.

RSAProtectedConfigurationProvider, küme içinde birden çok makinede kullanılabilir. Daha fazla bilgi için bkz. Korumalı Yapılandırmayı Kullanarak Yapılandırma Bilgilerini Şifreleme.