ASP.NET Core Data Protection'a Genel Bakış

ASP.NET Core veri koruması, anahtar yönetimi ve döndürme dahil olmak üzere verileri korumak için bir şifreleme API'si sağlar.

Web uygulamalarının genellikle güvenliğe duyarlı verileri depolaması gerekir. Windows, DPAPI adlı bir veri koruma API'si sağlar, ancak Windows DPAPI web uygulamalarında kullanılmak üzere tasarlanmamıştır.

ASP.NET Core veri koruma yığını, ASP.NET 1.x - 4.x'te machineKey> öğesinin <uzun vadeli yerine geçecek şekilde tasarlanmıştır. Modern uygulamaların büyük olasılıkla karşılaşılabilecek kullanım örneklerinin çoğu için kullanıma hazır bir çözüm sağlarken eski şifreleme yığınının birçok eksikliğini gidermek için tasarlanmıştır.

Sorun bildirimi

Genel sorun deyimi tek bir cümlede kısaca belirtilebilir: Daha sonra almak için güvenilir bilgileri kalıcı hale getirmem gerekiyor, ancak kalıcılık mekanizmasına güvenmiyorum. Web terimleri açısından bu, "Güvenilmeyen bir istemci aracılığıyla güvenilir duruma gidiş dönüş gerekiyor" olarak yazılabilir.

Bunun kurallı örneği bir kimlik doğrulaması cookie veya taşıyıcı belirtecidir. Sunucu bir "Groot'um ve xyz izinlerine sahibim" belirteci oluşturur ve istemciye verir. Gelecekteki bir tarihte istemci bu belirteci sunucuya geri sunacaktır, ancak sunucunun istemcinin belirteci sahte yapmadığına dair bir güvenceye ihtiyacı vardır. Bu nedenle ilk gereksinim: orijinallik (bütünlük, kurcalama-yazım denetleme).

Kalıcı duruma sunucu tarafından güvenildiğinden, bu durumun işletim ortamına özgü bilgiler içerebileceğini tahmin ediyoruz. Bu, dosya yolu, izin, tanıtıcı veya başka bir dolaylı başvuru ya da sunucuya özgü başka bir veri parçası biçiminde olabilir. Bu tür bilgiler genellikle güvenilmeyen bir istemciye açıklanmamalıdır. Bu nedenle ikinci gereksinim: gizlilik.

Son olarak, modern uygulamalar bileşen haline getirildiğinden, tek tek bileşenlerin sistemdeki diğer bileşenlere bakılmaksızın bu sistemden yararlanmak isteyeceğini gördük. Örneğin, taşıyıcı belirteç bileşeni bu yığını kullanıyorsa, aynı yığını da kullanıyor olabilecek bir CSRF önleme mekanizmasının müdahalesi olmadan çalışmalıdır. Bu nedenle son gereksinim: yalıtım.

Gereksinimlerimizin kapsamını daraltmak için daha fazla kısıtlama sağlayabiliriz. Şifreleme sistemi içinde çalışan tüm hizmetlerin eşit derecede güvenilir olduğunu ve verilerin doğrudan denetimimiz altındaki hizmetlerin dışında oluşturulmasına veya tüketilmesine gerek olmadığını varsayıyoruz. Ayrıca, web hizmetine yapılan her istek şifreleme sisteminden bir veya daha fazla kez geçebileceğinden işlemlerin mümkün olduğunca hızlı olmasını zorunlu kılıyoruz. Bu, simetrik şifrelemeyi senaryomuz için ideal hale getirir ve asimetrik şifrelemeyi gereken zamana kadar indirime dönüştürebiliriz.

Tasarım felsefesi

Mevcut yığınla ilgili sorunları belirleyerek başladık. Bunu yaptıktan sonra mevcut çözümlerin ortamını gözden geçirdik ve mevcut hiçbir çözümün tam olarak istediğimiz özelliklere sahip olmadığı sonucuna vardık. Ardından çeşitli yol gösterici ilkelere dayalı bir çözüm tasarlamayı da yaptık.

  • Sistem, yapılandırmanın basitliğini sunmalıdır. İdeal olan sistemin sıfır yapılandırma olması ve geliştiricilerin çalışır durumda olmasıdır. Geliştiricilerin belirli bir yönü (anahtar depo gibi) yapılandırması gereken durumlarda, bu belirli yapılandırmaları basit hale getirmek için dikkate alınması gerekir.

  • Tüketiciye yönelik basit bir API sunar. API'lerin doğru kullanımı kolay ve yanlış kullanılması zor olmalıdır.

  • Geliştiricilerin temel yönetim ilkelerini öğrenmesi gerekmez. Sistem, algoritma seçimini ve anahtar ömrünü geliştirici adına işlemelidir. İdeal olan geliştiricinin ham anahtar malzemesine asla erişmemesidir.

  • Anahtarlar mümkün olduğunda bekleyenler için korunmalıdır. Sistem uygun bir varsayılan koruma mekanizması bulmalı ve otomatik olarak uygulamalıdır.

Bu ilkeleri göz önünde bulundurarak basit, kullanımı kolay bir veri koruma yığını geliştirdik.

ASP.NET Core veri koruma API'leri öncelikli olarak gizli yüklerin süresiz kalıcılığına yönelik değildir. Windows CNG DPAPI ve Azure Rights Management gibi diğer teknolojiler, süresiz depolama senaryosuna daha uygundur ve buna karşılık güçlü anahtar yönetimi özelliklerine sahiptir. Buna göre, bir geliştiricinin gizli verilerin uzun süreli korunması için ASP.NET Core veri koruma API'lerini kullanmasını yasaklayan hiçbir şey yoktur.

Hedef Kitle

Veri koruma sistemi beş ana pakete ayrılmıştır. Bu API'lerin çeşitli yönleri üç ana kitleyi hedefler;

  1. Tüketici API'lerine Genel Bakış hedef uygulama ve çerçeve geliştiricileri.

    "Yığının nasıl çalıştığı veya nasıl yapılandırıldığı hakkında bilgi edinmek istemiyorum. Api'leri başarılı bir şekilde kullanma olasılığının yüksek olmasıyla bazı işlemleri mümkün olduğunca basit bir şekilde gerçekleştirmek istiyorum."

  2. Yapılandırma API'leri uygulama geliştiricilerini ve sistem yöneticilerini hedefler.

    "Veri koruma sistemine ortamımın varsayılan olmayan yollar veya ayarlar gerektirdiğini söylemem gerekiyor."

  3. Genişletilebilirlik API'leri, özel ilke uygulamaktan sorumlu geliştiricileri hedefler. Bu API'lerin kullanımı nadir durumlarla ve deneyimli, güvenlikle ilgili geliştiricilerle sınırlı olacaktır.

    "Sistemdeki bir bileşenin tamamını değiştirmem gerekiyor çünkü gerçekten benzersiz davranış gereksinimlerim var. Gereksinimlerimi karşılayan bir eklenti oluşturmak için API yüzeyinin yaygın olarak kullanılan bölümlerini öğrenmeye hazırım."

Paket düzeni

Veri koruma yığını beş paket içerir.

Ek kaynaklar