Şifrelenmiş yerel depolama

Adobe® AIR® çalışma zamanı, kullanıcının bilgisayarda yüklü olan her AIR uygulaması için kalıcı şifreli yerel bir depo sağlar. Bu, kullanıcının yerel sabit sürücüsünde başka kullanıcılar tarafından kolay bir şekilde çözümlenemeyecek şifreli bir biçimde saklanan verileri kaydetmenize ve almanıza olanak tanır. Her AIR uygulaması için ayrı bir şifreli yerel depo kullanılır ve her AIR uygulaması, her bir kullanıcı için ayrı bir şifreli yerel depo kullanır.

Not: AIR, şifreli yerel deponun yanı sıra SQL veritabanlarında saklanan içerik için şifreleme de sağlar. Ayrıntılar için bkz. Şifrelemeyi SQL veritabanlarıyla kullanma.

Web hizmetleri için oturum açma bilgileri gibi güvence altına alınması gereken bilgileri önbelleğe almak için şifreli yerel depo kullanmak isteyebilirsiniz. ELS, diğer kullanıcılardan gizli tutulması gereken bilgileri depolamak için uygundur. Ancak, verileri aynı kullanıcı hesabında çalışan diğer işlemlerden korumaz. Bu yüzden, DRM veya şifreleme anahtarları gibi gizli uygulama verilerini korumak için uygun değildir.

AIR, şifreli yerel depoyu her bir uygulama ve kullanıcıyla ilişkilendirmek için Windows'ta DPAPI, Mac OS'de KeyChain ve Linux'ta KeyRing veya KWallet kullanır. Şifreli yerel depo AES-CBC 128-bit şifreleme kullanır.

Şifreli yerel depodaki bilgiler yalnızca uygulama güvenliği sanal alanındaki AIR uygulama içeriği tarafından kullanılabilir.

Bir AIR uygulamasını güncellerseniz, şu durumlarda güncellenmiş sürüm şifreli yerel depodaki herhangi bir veriye erişimi engeller:

  • Öğeler, true olarak ayarlanmış stronglyBound öğesiyle eklenmemişse

  • Varolan ve güncellenen sürümler AIR 1.5.3’ten önce yayınlanır ve güncelleme bir geçiş imzasıyla imzalanır.

Şifreli yerel depo sınırları

Şifreli yerel depodaki veriler, kullanıcının işletim sisteminin hesap kimlik bilgileri tarafından korunur. Diğer varlıklar o kullanıcı olarak oturum açmadıkları sürece depodaki veriye erişemez. Ancak veriler, kimliği doğrulanmış bir kullanıcı tarafından çalıştırılan diğer uygulamaların erişimine karşı güvenli değildir.

Bu saldırıların çalışması için kullanıcının kimlik doğrulamasından geçmiş olması gerektiğinden, kullanıcının özel verisi korunmaya devam eder (kullanıcı hesabının kendisinden ödün verilmiş olmadığı sürece). Ancak, uygulamanızın kullanıcılardan gizli tutmak isteyebileceği veriler, örneğin lisans için kullanılan anahtarlar veya dijital haklar yönetimi, güvenli değildir. Bu yüzden, ELS bu tip bilgileri depolamak için uygun bir konum değildir. Yalnızca şifre gibi özel kullanıcı verilerini depolamak için uygun bir yerdir.

ELS'deki veriler birkaç nedenden dolayı kaybolabilir. Örneğin, kullanıcı uygulamayı kaldırabilir ve şifreli dosyayı silebilir. Ayrıca, yayıncı kimliği bir güncelleme sonucu değiştirilebilir. Bu yüzden ELS, kalıcı bir veri deposu olarak değil özel bir önbellek gibi düşünülmelidir.

stronglyBound parametresi onaylanmamıştır ve true olarak ayarlanmamalıdır. Parametreyi true olarak ayarlamak veriler için ek bir koruma sağlamaz. Aynı zamanda, yayıncı kimliği aynı kalsa bile, uygulama her güncellendiğinde verilere olan erişim kaybedilir.

Saklanılan verilerin boyutu 10MB'ı geçerse şifreli yerel depo yavaş çalışabilir.

Bir AIR uygulamasını kaldırdığınızda, kaldırma uygulaması şifreli yerel depoda saklanan verileri silmez.

ELS'yi kullanmanın en iyi şekillerine şunlar dahildir:

  • ELS'yi şifreler gibi (stronglyBound'u false değerine ayarlayarak) depolama duyarlı kullanıcı verilerini depolamak için kullanın.

  • ELS'yi DRM anahtarları veya lisans verme işaretleri gibi uygulama sırlarını saklamak için kullanmayın..

  • ELS verileri kaybolduysa, uygulamanızın ELS'de depolanmış verileri yeniden oluşturması için bir yol sağlayın. Örneğin, gerektiğinde kullanıcıdan hesap kimlik bilgilerini yeniden girmesini isteyerek bu işlemi gerçekleştirebilirsiniz.

  • stronglyBound parametresini kullanmayın.

  • stronglyBound parametresini true olarak ayarlarsanız, depolanmış öğelere güncelleme sırasında geçiş yaptırmayın. Bunun yerine verileri güncellemeden sonra yeniden oluşturun.

  • Yalnızca nispeten daha az miktarda veri depolayın. Daha fazla miktardaki veriler için şifreli bir AIR SQL veritabanı kullanın.

Şifrelenmiş yerel depoya veri ekleme

Yerel depoda veri saklamak için EncryptedLocalStore sınıfının setItem() statik yöntemini kullanın. Veriler, verileri bayt dizileri olarak saklayan ve dizeleri anahtar olarak kullanan karma bir tabloda saklanır.

Örneğin aşağıdaki kod bir dizeyi şifreli yerel depoda saklar:

var str:String = "Bob"; 
var bytes:ByteArray = new ByteArray(); 
bytes.writeUTFBytes(str); 
EncryptedLocalStore.setItem("firstName", bytes);

setItem() yönteminin üçüncü parametresi olan stronglyBound isteğe bağlıdır. Bu parametre true olarak ayarlandığında, şifreli yerel depo, depolanan öğeyi saklayan AIR uygulamasının dijital imza ve kısımlarına bağlar:

var str:String = "Bob"; 
var bytes:ByteArray = new ByteArray(); 
bytes.writeUTFBytes(str); 
EncryptedLocalStore.setItem("firstName", bytes, false); 

stronglyBound parametresi true olarak ayarlıyken depolanan bir öğe için, getItem() öğesine yapılan sonraki çağrılar yalnızca çağıran AIR uygulamasını depolayan uygulamayla aynıysa başarılı olur (uygulama dizininde bulunan dosyalardaki hiçbir veri değiştirilmemişse). Çağıran AIR uygulaması saklayan uygulamadan farklıysa, güçlü şekilde bağlı bir öğe için getItem() öğesini çağırdığınızda uygulama bir Hata istisnası atar. Uygulamanızı güncellerseniz, şifreli yerel depoya önceden yazılmış olan güçlü şekilde bağlı verileri okuyamaz.

stronglyBound parametresi false değerine ayarlıysa (varsayılan olarak), uygulamanın veriyi okuması için yalnızca yayıncı kimliğinin aynı kalması gerekir. Uygulamanın bazı kısımları değişebilir (ve aynı yayıncı tarafından imzalanmaları gerekir) ancak veriyi depolayan uygulamada olduğu gibi aynı kısımlar olmaları gerekmez. Orijinaliyle aynı yayıncı kimliğine sahip olan güncellenmiş uygulamalar verilere erişmeye devam edebilir.

Not: Pratikte, stronglyBound öğesinin true olarak ayarlanması fazladan veri koruması sağlamaz. “Kötü niyetli” bir kullanıcı ELS'de depolanan öğelere erişebilmek için uygulamayı değiştirebilir. Ayrıca, stronglyBound öğesinin true veya false olarak ayarlanmasına bakılmaksızın veriler harici ve kullanıcı kaynaklı olmayan tehditlerden aynı şekilde korunur. Bu nedenlerle, stronglyBound öğesinin true olarak ayarlanması önerilmez.

Şifrelenmiş yerel depodaki veriye erişme

EncryptedLocalStore.getItem() yöntemini kullanarak, aşağıdaki örnekte olduğu gibi şifreli yerel depodan bir değer alabilirsiniz:

var storedValue:ByteArray = EncryptedLocalStore.getItem("firstName"); 
trace(storedValue.readUTFBytes(storedValue.length)); // "Bob" 

Şifrelenmiş yerel depodan veri kaldırma

EncryptedLocalStore.removeItem() yöntemini kullanarak, aşağıdaki örnekte olduğu gibi şifreli yerel depodan bir değer silebilirsiniz:

EncryptedLocalStore.removeItem("firstName"); 

EncryptedLocalStore.reset() yöntemini çağırarak, aşağıdaki örnekte olduğu gibi şifreli yerel depodan tüm verileri temizleyebilirsiniz:

EncryptedLocalStore.reset();