5 Ocak 2010 Salı

Veri (Bilgi) Güvenliği ve Tutarlılığı Nasıl Sağlanır


Bazı kurallar ile şifrelenen (encryption) verinin, bu “bazı kuralları” bilmeyen kişiler tarafından okunabilmesi mümkün değildir. Ayrıca, eğer veri izinsiz kişiler tarafından değiştirilmişse, verinin original kaynağından gelmediğini veya izinsiz bir parti tarafından değiştirildiğini tesbit etmek mümkündür. (data signing). Bu şifreleme işlemleri, ister veri depolamada, ister veri transferi sırasında, verinin ve kişinin/şirketin güvenliği için kullanılabilir.
Kriptografi ve Şifreleme Algoritmaları (Cryptography & Encryption Algorithms)
Veri şifreleme veya imzalama için, şifreleme algoritmaları dediğimiz kural dizileri uygulanır. Temelde amaç; veriyi bir kurallar bütünüyle değiştirmek, ve bu kuralları bilmeyen bir partinin, bu datayı eski haline dönüştürememesini sağlamaktır. Veriyi eski haline, sadece bu kuralları bilen kişiler dönüştürebilecektir.

Bir örnekle bunu açıklayalım. Mesela şifrelenecek kelimemiz BilgeAdam olsun. Şifreleme algoritmamız da “her karakteri 2 arttır” olsun.

Bu durumda, düz verimizi (plaintext) şifrelediğimiz zaman, şifrelenmiş veri (ciphertext) şu şekilde olacaktır: “DknigCfco”. Bu kelime aslında BilgeAdam, ancak bu kelimenin aslında ne olduğunu anlayabilmemiz için, her karakterin bir defa arttırıldığını, yani şifreleme algoritmasını bilmemiz gerekmektedir, başka bir deyişle, ya verinin sahibi, ya da veriye erişim izni bulunan birisi olmalıyız.
Şifreleme Anahtarları (Encryption Keys) & Simetrik Şifreleme (Symmetric Encryption)
Tüm bunların ışığında, veri saklama veya alma / gönderme işlemleri sırasında, verimizi yukarda bahsettiğimiz şekilde şifrelediğimiz durumlarda, sadece izinli kişilerin bu veriye erişebileceğini biliyoruz. Bununla beraber; hem güvenliğe ikinci bir kademe getirebilmek, hem de algoritma standartları oluşturabilmek ya da kabul görmüş ve standartlaşmış şifreleme algoritmalarını kullanabilmek için, veri şifrelemizi algoritmalara değil, anahtara (key) dayandırabiliriz. Bu durumda, bilinen bir algoritma ile sadece veri sahibinin veya izinli kişilerin bilebileceği bir key kullanırız. Bu durumda şifreleme mantığımız, basit bir şekilde şu olacaktır: Plaintext verimiz yine BilgeAdam olsun ve algoritmamız da “her karakteri x kadar arttır”. Key ise “x = = x+2” olursa; bu durumda her karakteri iki defa arttırmış oluruz ve ciphertext verimiz; “DknigCfco” olacaktır.


Böyle bir işlemde, üçüncü partinin hem algoritmayı hem de key’ i bilmesi gerekir. Ayrıca, algoritmanın herkes tarafından bilinmesi, verinin güvenliğini riske sokmayacağı için, public algorithms dediğimiz, ve herkesin kullanımına açık, zayıflıkları ve kuvvetleri belli, bilinen alrotirmaları kullanabiliriz. Nasıl olsa key’ i sadece izinlendirilmiş kişiler biliyor olduğu için, algoritmanın bilinmesi bir risk değildir. Böyle bir şifrelemede, key’ in, izinlendirilmiş kişilere aktarılması gerekmektedir. İkinci örneğimizde algoritma her parti tarafından zaten bilindiği için, izinlendirilmiş kişilere bildirmemiz gereken tek veri, “x=2” key’ idir.

Aşağıda bazı simetrik şifreleme algoritmalarına dair bir tablo yer almaktadır.

Hash Fonksiyonu
Hash fonksiyonu, herhangi uzunluktaki bir veriyi, hash dediğimiz sabit boyutta bir string elde etmek için şifreler. Aynı zamanda digest da denir.
Hash, tek yönlü bir işlemdir. Dolayısıyla, bir hash ile, orijinal veri tekrar inşaa edilemez. Bundan dolayı; hash, veri gizililiği sağlamak için kullanılabilecek bir yöntem değildir.
Bununla beraber Hash fonksiyonu sayesinde, orijinal verinin değiştirilip değiştirilmediği, farklı zamanlarda alınmış iki hash karşılaştırılarak öğrenilebilir. Eğer hash’ ler aynı ise veri değiştirilmemiş, eğer hash’ ler farklı ise, veri değiştirilmiş anlamına gelecektir.
Hash, boyutu sabit bir string’ tir. Dolayısıyla; bir saldırgan, hash’ ten yararlanarak, orijinal verinin boyutu hakkında fikir sahibi olamaz. Ayrıca hash, daha az alan kaplayacağı için, veri karşılaştırması yaparken kullanmak üzere, orijinal verinin ikinci bir kopyasını bulundurmak zorunluluğu olmadığı için, alan bakımından da çok ekonomiktir.
Hash, değiştirme (tampering) saldırılarına karşı ve kullanıcı şifrelerinin depolanmasında kullanılır.
Iki farklı verinin aynı hash’ i sağlamayacağının bir garantisi olmamakla beraber, uygulamada; aynı hash’ i sağlayan bir başka veri bulmak veya hesaplamak, mümkün değildir.
Aşağıda bazı hash algoritmaları ile ilgili bir tablo bulunmaktadır.

Assymmetric Encryption (Asimetrik Şifreleme)
Açık Anahtar Şifrelemesi (Public Key Encryption)
Simetrik şifreleme yapısında, güvenliği tehlikeye düşürebilecek şey, ahantarların depolanması ve partiler arası transferi için, güvenli değişim kanalı (secure channel) sıkıntısıdır. Kişiler, birbirlerine secret key gönderirken, üçüncü partinin key’ i elde etmesi hem zor değil, hem de verinin güvenliği için büyük tehlikedir. Bunun gibi, güvenli anahtar transferi sıkıntısı olan durumlarda, asimetrik şifreleme (public key encryption) kullanırız. Asimetrik şifrelemede bir değil, iki anahtar kullanılır ve anahtar ikizleri olarak adlandırılır (key pairs). Public Key herkese erişilebilirdir, private key gizli saklanmalıdır. Bu şekilde şifreleme ile, bir anahtarın şifrelediğini ancak diğer anahtar deşifre edebilir. Şifreleme anahtarı, şifrelediği veriyi deşifre edemeyecektir ve deşifreleme anahtarı, sadece ilgili kişide zaten bulunduğu için, anahtar değişimine gerek kalmayacaktır.
Assymmetric Encryption (Asimetrik Şifreleme) Açık Anahtar Şifrelemesi (Public Key Encryption)
Simetrik şifreleme yapısında, güvenliği tehlikeye düşürebilecek şey, ahantarların depolanması ve partiler arası transferi için, güvenli değişim kanalı (secure channel) sıkıntısıdır. Kişiler, birbirlerine secret key gönderirken, üçüncü partinin key’ i elde etmesi hem zor değil, hem de verinin güvenliği için büyük tehlikedir. Bunun gibi, güvenli anahtar transferi sıkıntısı olan durumlarda, asimetrik şifreleme (public key encryption) kullanırız. Asimetrik şifrelemede bir değil, iki anahtar kullanılır ve anahtar ikizleri olarak adlandırılır (key pairs). Public Key herkese erişilebilirdir, private key gizli saklanmalıdır. Bu şekilde şifreleme ile, bir anahtarın şifrelediğini ancak diğer anahtar deşifre edebilir. Şifreleme anahtarı, şifrelediği veriyi deşifre edemeyecektir ve deşifreleme anahtarı, sadece ilgili kişide zaten bulunduğu için, anahtar değişimine gerek kalmayacaktır.
Herhangi biri, bizim public key’ imiz ile veri şifreleyebilir. Public key zaten herkese açıktır. Buna karşılık bu public key’ in ikizi olan private key sadece bizde bulunduğu için, bu veriyi sadece biz deşifre edebiliriz.
Public key’ i, private key’ in sahibi kullanıcı yaratır, ve bir private key genellikle sertifika ile beraber bulunur. (certificate)
Private key’ i elde etmenin tek yolu, brute force saldırısıdır. Buna karşılık, brute force atağını zayıflatmak için, yeteri kadar uzun bir şifreleme anahtarı kullanılırsa, bu saldırı çok uzun zaman alacaktır. Zaten belirli periyodlarla, anahtarlar yenilenir.
Süreç Yaklaşık Olarak Şu Şekilde Olacaktır;
1- Gönderici, alıcıdan public key ister. Bu public key, kullanıcıya aittir ve private key’ iyle beraber, bind edildiği sertifikanın içinde bulunur.
2- Gönderici, alıcının public key’ ini elde ettikten sonra, bu key’ I, bir şifreleme algoritması ile beraber kullanarak veriyi şifreler. (Bunu herkes yapabilir. Bir kullanıcının public key’ I herkese açıktır. Ancak public key ile şiflenenen data, sadece private key ile deşifre edilir. Bu yüzden, public key’ in açık olmas; başka bir deyişle herkese elde edilebilir olması, verinin gizliliğini tehlikeye düşürmez)
3- Şifrelenen veri alıcıya gönderilir ve alıcı, bu şifrelenmiş veriyi, kendi private key’I ile deşifre eder.
Dijital İmzalama (Digital Signing) (E-mail veya veri imzalama)
Dijital imzalamada, veri veya mesaj, bizim private key’ imiz ile şifrelenir. Alıcı ise, mesajı bizim public key’ imiz ile deşifre eder. Eğer deşifre işlemi başarılı olursa, verinin bizim tarafımızdan yollandığı, ve değiştirilmediği kesindir. Çünkü alıcının deşifre için kullandığı publik key, sadece bizim private key’ imiz şifrelediği veriyi deşifre edebilir. Deşifre edebildiği için de, verinin bizim tarafımızdan gönderilmiş olduğu ve değiştirilmediği kesindir. Reddetme (repudiation) ve değiştirme (tampering) saldırılarına karşı önlemdir. Ancak, mesajın tamamı değil, orijinal mesajın hash’ i şifrelenerek gönderilir.

  • İlk olarak, yollanacak mail’ ın bir hash’ i alınır
  • Yollayan, bu hash’ i, kendi private key’ i ile şifreler.
  • Alıcı, private key ile şifrelenen bu hash’ i, yine yollayanın public key’ i ile deşifre eder. Eğer bu hash, bizim public key’ imiz ile deşifre edilebilmişse, hash’ in bizim tarafımızdan gönderildiği belirlenmiş olur.
Alıcı daha sonra mesaj üzerinde bir hash uygular ve bizden gelen hash ile, kendi yarattığı hash’ i karşılaştırır. Eğer iki hash tutarlıysa, mesajın bizden geldiği ve değiştirmediği kesinleşmiş olur.
Bu işlem aynı zamanda, reddetme gibi durumları da engellemiş olur. Eğer hash bizim public key’ imiz ile deşifre edilebilmişse, bizim private key’ imizle şifrelenmiş demektir. Private key ise sadece bizde bulunabileceği için, bizim tarafımızdan yollandığı kesindir.
Public Key Kriptografi’ nin Avantaj ve Dezavantajları
Asimetrik (Açık anahtar) şifreleme yapısının en büyük avantajı, simetrik şifrelemedeki gibi gizli anahtar paylaşımına gerek olmamasıdır. Açık anahtar herkesin kullanımına açıktır ve bize veri yollamak isteyen herkes bu anahtarı kullanarak bize yollayacağı veriyi şifreleyebilir. Ancak bildiğimiz gibi, public key ile şifrelenmiş veri, sadece bizde bulunan private key ile deşifre etmek mümkündür. Bu sebepten, public key şifreleme yapısında, anahtarın paylaşılması gerekmemektedir.
Başka bir avantajı ise, anahtar yönetimi basittir. Çünkü birbiriyle güvenli veri iletiminde bulunmak isteyen herkesin, birbiriyle ayrı birer gizli anahtar üzerinde uzlaşması gerekmemektedir. Herkesin bir public – private key anahtar ikizi vardır ve spesifik bir kişiye veri yollamak isteyen herhangi biri, o kişinin public keyi şifreleyebilir. Alıcı ise, sadece kendisinde bulunan private key’ i kullanarak, veriyi deşifre edebilecektir. Puclic key şifremelenin bir başka avantajı da, anahtarlar kişilere özel olduğu için; kimlik doğrulama ve veri doğrulama sağlar. Veri, göndericinin private key’ iyle şifrelenir ve aynı kişinin puclic key’ i ile deşifre edilebilirse, private key; o kişiden başka birinde bulunamayacağı için, verinin o kişi tarafından gönderildiği kesindir. Ayrıca bu durumda kişi, veriyi yolladığını inkar edemeyecektir. Puclic key şifrelemenin tek dezavantajı, yavaş olmasıdır. Büyük miktarlarda verinin şifrelenmesi için çok büyük zaman gerekir. Büyük miktarlarda veri şifreleyen uygulamalar, bu sebepten simetrik şifreleme kullanır.
Akıllıca bir yöntem ise, iki yöntemi birden kullanmaktır. Veriyi şifrelerken simetrik şifreleme ile performanslı bir şifreleme işlemi gerçekleştirebiliriz. Ama biliyoruz ki gizli anahtarın paylaşılması için güvenli bir kanala ihtiyacımız vardır. Burda da devreye puclik key şifreleme yapısını sokarak, bu gizli anahtarın paylaşımı işini güvene alabiliriz. Yani, verimizi simetrik şifreleme ile şifreledikten sonra, şifreleme anahtarını da, diğer kişinin public key’ i ile şifreleyerek yollayabiliriz. Bu durumda ilgili kişi, kendi private key’ ini kullanarak, veriyi şifrelediğimiz simetrik şifreleme anahtarına erişecek, sonrasında ise bu anahtarla asıl veriyi deşifre edebilecektir.
Yukarda bahsettiğimiz, iki yöntemi birden kullanan uygulamara örnek olarak EFS’ I gösterebiliriz. EFS; veriyi, DESX algoritması ve rastgele yaratılan bir simetrik şifreleme anahtarı ile şifreler, bu anahtarı da veriyi şifreleyen kullanıcının public key’ i ile şifreler. Deşifre sırasında ise kullanıcı, kendi private key’ i ile önce verinin şifrelenmesinde kullanılan simetrik şifreleme anahtarını elde eder, daha sonra ise bu anahtarı kullanarak, asıl veriyi deşifre eder.
Data Confidentiality & Integrity (Veri Güvenliği&Tutarlılığı)

Hiç yorum yok: