Oturumlar Tarafından İzin Verilen Nesne Erişimleri
Aşağıdaki tablo erişim izinleriyle ilgili durumu özetlemektedir:
Tablo 5 – Oturumlar tarafından izin verilen nesne erişimleri özet tablosu
Oturum Etkinlikleri
Oturum etkinlikleri oturumun durumunu değiştirmesine neden olurlar. Aşağıdaki tablo bu durumu özetlemektedir:
Tablo 6 – Oturum Etkinlikleri Özet Tablo
Cihaz kaldırılırsa uygulamaların bütün oturumları otomatik olarak kaldırılır. Dahası bütün oturumlar cihazla kapatılır. (Bu ikinci olay Cryptoki’nin 1.0 versiyonunda yoktur) Bir uygulama bir token ile sunulmayan bir oturuma sahip olamaz. Gerçekte, cryptoki token’ın takılı olup olmadığını sürekli kontrol etmez. Çıkarıldıktan sonra herhangi bir işlem yapılmadan tekrar takılırsa bu durumda çalışmaya devam eder. Cryptoki aradaki kaybı asla farketmez.
Cryptoki’de, Bir uygulamanın token ile birlikte sahip olduğu bütün oturumlar aynı login/logout durumuna sahip olmalıdır (örneğin bütün oturumlar public oturumlardır veya SO oturumudur veya kullanıcı oturumudur). Bir uygulamanın oturumu eğer token’a login olursa, bu durumda token’a login olunmuş olur. Aynı şekilde token’dan logout olunursa, bu durumda bütün uygulama oturumlarından logout olunmuş olur. Benzer olarak, örneğin, uygulama R/O oturmunu token kullanarak açtıysa ve daha sonra R/W oturumunu token ile açarsa bu durumda R/W oturumuna tüm uygulamanın oturumları girmiş olur.
Bu da gösterir ki SO oturumlarını ve kullanıcı oturumlarını gelişi güzel açamaz. Eğer bir uygulama R/W SO oturumuna token ile sahipse, üzerine R/O oturumunu S0 oturumu var olduğunda açamaz.
Oturum ve Nesne İşleyiciler
Bir oturum işleci bir oturum tarafından tanımlanan cryptoki tarafından atanmış bir değerdir. Birçok yönden dosya işleyicilere yakındır. Bir uygulamanın bütün threadleri bütün oturum işleyicilerine eşit erişim hakkına sahiptir. Aynı uygulamada bir threadin bir dosyayla işlenmesinde yardımcı olabilen herşey bir başkası için de aynı işi yapabilir.
Cryptoki aynı zamanda Cryptoki nesnelerini yönlendirmek için kullanılan tanımlayıcılar olan nesne işleyicilere sahiptir.
Geçerli oturum ve nesne işleçleri sıfır olmayan değerlere sahiptir. Geliştiricilere kolaylık için Cryptoki, CK_INVALID_HANDLE sembolik değerini tanımlar.
Oturumların Kullanımının Örneği
Bir cryptoki kütüphanesinde çoklu uygulamaların oturumları nasıl kullanacağını uzun ve detaylı bir şekilde burada anlattık. Detayların acı verici olmasına rağmen, oturum ve nesne işleyicilerinin anlaşılması için bu örneği başından sonuna kadar dikkatle okumanızı öneriyoruz.
Dikkatinizi çekeriz ki bu örnek çoklu uygulamalarda Criptoki’nin gelişigüzel bir şekilde nasıl kullanılması gerektiğini anlatmaz, daha çok Cryptoki’nin oturumları, objeleri ve işleyicilerinin ne olduğunu berrak bir şekilde anlatmaya çalışır. Diğer bir ifadeyle burada iyi teknikler göstermek yerine sınırları zorlayacağız.
Örneğimiz için bir T token’ına erişmek için Cryptoki kütüphanesi kullanarak A ve B uygulaması kullandığımızı varsayalım. Her uygulama iki thread çalıştırıyor: A uygulaması A1 ve A2, B uygulaması B1 ve B2 uygulaması. Sonra gelende yani instanceları olmayan ki burada kastedilen bir uygulamanın çoklu threadleri, gelişi güzel olarak aynı oturumu kullandığını varsayıyoruz ve bizim örneğimizin etkinlikleri zaman içinde birbirinin üstüne binmeden belirli bir sırada oluşur.
- A1 ve B1’in her biri C_Initialize fonksiyonunun çağrılmasıyla ilklendirilir. Her uygulama için C_Initialize fonksiyonu çağrılmış olmalıdır (buna karşın her thread için bir çağrı gerekir).
- A1 bir R/W oturumu açar ve bu oturum için 7 no’lu oturum işlecini alır. A için açılan ilk oturum olduğundan dolayı, bu bir public oturumdur.
- A2 bir R/O oturumu açar ve 4 no’lu oturum işlecini alır. A’nın var olan bütün oturumları public oturumlar olduğundan oturum 4 de bir public oturumdur.
- A1 oturum 7’ye security officer olarak girmek için girişimde bulunur. Girişim başarısız olur, çünkü oturum 7 bir SO oturumu olursa, o zaman oturum 4 de olur ve R/O SO oturumu var olmaz. A1 (CKR_SESSION_READ_ONLY_EXIST) ile belirtilen hatayı alır.
- A2 normal bir kullanıcı olarak oturum 7’ye login olur. Bu oturum 7’yi R/W kullanıcı oturumuna dönüştürür ve oturum 4 R/O kullanıcı oturumuna dönüşür. Burada A1 ve A2 aynı uygulamaya ait olduğundan, onlar bütün oturumlar için aynı erişim hakkına sahiptir. Böyle olduğu için A2 bu işlemi gerçekleştirebilir.
- A2 bir R/W oturumu açar ve 9 nolu oturum işlecini alır. A’nın bütün oturumları kullanıcı oturumu olduğu için, oturum 9 da bir kullanıcı oturumudur.
- A1 oturum 9’u kapatır.
- B1 oturum 4’e login olmaya çalışır. Bu girişim başarısız olur çünkü A ve B birbirinin oturumlarına ve nesnelerine erişim hakkına sahip değildir. B1 bu durumda CKR_SESSION_HANDLE_INVALID hatası alır.
- B2 oturum 4’ü kapatmaya çalışır. Yine aynı şekilde CKR_SESSION_HANDLE_INVALID hatası alır.
- B1 bir R/W oturumu açar ve 7 numaralı oturum işlecini alır. B ile ilgili olduğuna göre, oturum 7’nin ilk oluşumudur. A’nın oturum 7’si ile B’ninkinin tamamen farklı olduğuna dikkat ediniz.
- B1 kendi oturum 7’sine SO olarak login olur. Bu B’nin oturum 7’sini SO R/W oturumuna çevirir ve A’nın oturumları bundan etkilenmezler.
- B2 bir R/O oturumu açmayı dener. Bu girişim başarısız olur çünkü B bir SO oturumu açmıştır ve R/O SO oturumu var olamaz. B1, R/O SO oturum açma girişiminin engellendiğini gösteren bir CKR_SESSION_READ_WRITE_SO_EXISTS hatası alır.
- A1, O1 objesini oluşturmak için oturum 7 ‘yi kullanır ve 7 numaralı objeyi alır. Dikkat edelim ki Cryptoki uygulaması nesneler ve oturumlar için ayrık alan kullanımını destekler veya desteklemez.
- B1, O2 nesnesini oluşturmak için oturum 7’yi kullanır ve 7 numaralı nesne işlecini alır. Oturum nesneleri, farklı uygulamaların nesne işleçlerine erişim hakkına sahip değildir. Bu yüzden A’nın nesne işleçleri B’ninkilerden tamamen farklıdır. Şüphesiz, B1 bir SO oturumu olduğundan dolayı, private nesneler oluşturamaz ve bu yüzden O2 public olmak zorundadır. B1 private bir obje oluşturmayı denerse CKR_USER_NOT_LOGGED_IN hatası veya CKR_TEMPLATE_INCONSISTENT hatası alır.
- B2, B’nin 7 numaralı nesnesinin düzenlenmesi için bazı işlemler gerçekleştirmelidir. Bu işlemler için oturum 7’yi kullanır. Bu O2’yi düzenler.
- A1, O2 objesini almak için nesne arama işlemi gerçekleştirir. Bunu yaparken oturum 4’ü kullanır. Bu arama sonucunda 1 numaralı nesne işleci döner. A’nın 1 numaralı nesne işleci ile B’nin 7 numaralı nesne işleci aynı nesneyi gösterir.
- A1, 1 numaralı nesne işlecini oturum 4’ü kullanarak düzenlemeye çalışır. Bu girişim başarısız olur çünkü oturum 4 bir R/O oturumudur. O2 nesnesini değiştirme kapasitesi yoktur. A1 CKR_SESSION_READ_ONLY hata mesajını alır. Bu mesaj A1’in R/O oturumu olduğunu belirtir.
- A1, O2’yi düzenlemek için oturum 7’yi kullanmayı da dener. Bu denemesi başarılı olur. Çünkü A’nın oturum 7’si R/W oturumudur.
- B1, kendi 7 numaralı oturumunu kullanarak O1 nesnesini bulmak için nesne arama işlemi gerçekleştirmek ister. O1, A uygulamasına ait bir oturum nesnesi olduğundan dolayı arama başarılı olmaz.
- A2, A’ya ait olan oturum 4’ü kullanarak nesne 7 işleciyle birleştirilmiş olan nesneyi değiştirmek için birkaç işlem gerçekleştirir. Bu operasyon O1’i değiştirir.
- A2 oturum 7’yi kullanarak 1 numaralı nesne işleciyle birleştirilmiş olan nesneyi yıkar. Bu O2’nin yıkılmasına da sebep olur.
- B1, 7 numaralı nesneyle birleştirilmiş nesneyle çeşitli işlemler gerçekleştirmeye çalışır. Bu girişimler başarısız olur çünkü böyle bir obje artık yoktur. B1 objenin artık geçersiz olduğuna dair CKR_OBJECT_HANDLE_INVALID şeklinde hata mesajı alır.
- A1, oturum 4’ten logout olur. Bu A’nın oturum 4’ünü, R/O public oturumuna çevirir ve A’nın oturum 7’si R/W public oturumuna döner.
- A1 oturum 7’yi kapatır. Bu oturum 7 tarafından oluşturulan O1’in de yıkılmasına sebep olur.
- A2, A’nın oturum 4’ünü kullanarak nesne ile ilgili olan bazı işlemler gerçekleştirmeye çalışır. Bu girişimler başarısız olur çünkü artık oturum 7 tarafından oluşturulan öyle bir nesne yoktur. CKR_OBJECT_HANDLE_INVALID hatası döner.
- A2 C_CloseAllSessions fonksiyonunu çağırır. Bu A’nın oturum 4’ünü kapatır. Bu noktada A yeni bir oturum açsa, bu oturum login olunmazdı. (Bu bir public oturum olurdu.)
- B2, B uygulamasına ait olan oturum 7’yi kapatır. Bu noktada, B yeni bir oturum açsa, bu oturuma login olunamazdı.
- A ve B’nin her ikisi de Cryptoki kütüphanesi ile işlerinin bittiğini C_Finalize çağrısı ile belirtirler.