T
TéuféL
Guest
Bu çalışmada, elektronik posta ile bilgilerin güvenli bir şekilde alıcıya nasıl gönderileceği konusu incelenmiştir.
Günümüz teknolojileri sürekli değişmekte ve gelişmektedir. Tüm bu teknolojik gelişmeler beraberinde bir çok sorunu da beraberinde getirmektedir. Internet uygulamaları günümüzde oldukça yaygınlaşmıştır. Bu uygulamaların en büyük sorunu ise güvenliktir. Hızla gelişen teknolojide güvenlik ile ilgili yeni mekanizmalar ve yöntemler geliştirilmeye çalışılmaktadır. Yazılım geliştiriciler, sürekli olarak yeni yöntemler denemek zorunda ve başarılı oldukları taktirde, bunları uygulamalarına yansıtmaktalar. Herkesin istediği, hızlı ve güvenli iletişim, 1970’lerde ilk kez Amerikan Savunma Bakanlığınca kullanılmaya başlanılan mesajlaşma, günümüzdeki yaygın adıyla e-mail oldukça yaygın olarak kullanılmaktadır. Günümüzde şirket içi yazışmalardan, uluslararası bir çok görüşmelere kadar bir çok işlem bu yolla yapılmaktadır. Zira gönderilen mesajın, her iki tarafta da yazılı bir kopyanın olması, dolayısıyla belgelenebilirliği çok önemli bir özelliktir. Bunun yanı sıra ucuz ve diğer hizmetlere göre çok daha hızlı, etkin olması da onu öne çıkaran diğer özellikleridir. Bu kadar üstün özellikleri ve kullanıldığı çevrelerin çokluğu ile popüler olan bu uygulamalar, doğal olarak kötü niyetli kişilerinde ilgisini fazlasıyla çekmektedir. Onlara karşı alınabilecek ilk önlem, sağlam bir şifreleme yapısı kullanmaktır. Günümüzde bilinen bir çok şifreleme algoritması mevcuttur ancak bunları aynı zamanda bu kötü niyetli kişiler de bilmekteler, yapılması gereken ise bu algoritmalardan yeni algoritmalar veya yeni yöntemler türetmektir. Bu yeni yöntem veya algoritmaları, gelişmiş programlama dilleri ile kodlayarak kullanıcı uyumlu yazılımlar geliştirmek güvenlik problemlerini bir miktar çözecektir.
Bu güvenlik algoritmalarını tasarlarken, kriptografi biliminden yararlanılmaktadır. Kriptografi, çeşitli şifreleme, anahtarlama ve çözme algoritmaları sunmaktadır. Bu çalışmada, veriler şifrelenirken, ElGamal Şifreleme algoritması kullanıldı. Programın çeşitli bölümlerinde gereken kimlik doğrulama işlemi ise özgün bir SHA (Secure Hashing Algoritm) algoritması ile sağlandı.
Öncelikle Kriptoloji literatüründe kullanılan temel kavramaları açıklayalım; Gönderici, bir mesajı gönderen, alıcı ise gönderilen mesajı alması beklenen kişidir. Şifreleme, bir mesajı doğrusal olmayan fonksiyonlar yardımıyla, okunduğunda gerçek anlamının çıkarılması çok zor hatta imkansız bir forma dönüştürme işlemidir. Şifrelenmiş bir metni, şifrelemek için kullanılan fonksiyonların, matematiksel ters fonksiyonları yardımıyla, ilk haline dönüştürme işlemine de ters şifreleme yada çözme adı verilir.
Göndericiden, alıcıya iletilmesi beklenen metni M ile, herhangi bir şifreleme algoritması yardımıyla şifrelenmiş metini Ş ile şifreleme fonksiyonunu da F ile ifade edecek olursak. Şifrelenmiş metnin uzunluğu genellikle, gönderilecek metnin uzunluğundan fazladır. Bu durumda, şifrelenmiş metinler, sıkıştırma algoritmaları yardımı ile uzunluk olarak küçültmeye çalışılır. Bu tanımlamalara göre şifreleme işleminin matematiksel modeli (1) deki gibi
F(M)=Ş (1) gösterilebilir. Şifrenin çözümlenmesi işlemi ise (2), F-1 fonksiyonu (F fonksiyonunun matematiksel tersini göstermektedir),
F-1(Ş)=M (2)
biçiminde ifade edilebilir. Ayrıca F-1 fonksiyonu ters şifreleme fonksiyonu olarak da adlandırılmaktadır.
Genel olarak, her şifreleme ve şifre çözme algoritması birbirinin ters fonksiyonları olmalıdır. Sağlam bir şifreleme yapısında asla doğrusal fonksiyonlar kullanılmamalıdır. Aksi taktirde, algoritmanın kötü niyetli kişilerce çözümlenme zamanı çok kısalmış olur.
Şifreleme bilimi çok uzun yıllar boyunca sadece askeri ve diplomatik haberleşmede kullanılmaktaydı. Bu algoritmaların kullanım alanları arttıkça, standart kurallara dönüştürülmeye başlandı. Bu çalışmada yararlandığımız ElGamal Şifreleme algoritması ise, bir genel-anahtar algoritması olarak 1985’de T. ElGamal tarafından tasarlandı. Günümüze kadar, ElGamal algoritmanın kullanıldığı bir sistem üzerine hiçbir başarılı saldırı bilinmemektedir. 1994’te bağımsız birkaç araştırma grubu, genel-anahtar, sayısal imza algoritmaları tabanlı tüm farklı logaritmaların, genelleştirilmiş “meta” algoritmanın farklı sonuçları olduğu bulgularını sundular. ElGamal’ın içerdiği bu farklı logaritmalar, onun oldukça güvenli olduğunun bir göstergesidir[1,2].
Bu tip yöntemler, genel anahtardan, özel anahtarın zor bulunması prensibine dayanır. Bu zorluk, genel-özel anahtar çiftinin uzunluğuna ve ayrıca bu anahtar çiftinin ne olduğunu tahmin için yapılacak hesaplamaların güçlüğüne bağlıdır.
ElGamal şifreleme algoritmasının anahtar uzunluğu 256 bitten, rasgele seçilmiş bir bit boyutuna kadar genişletilebilir. 1024 bitten 2048 bite kadar değer alabilen bir anahtar uzunluğu gelecek 20 yıl için güvenli olarak düşünülmektedir. Bu tahmin günümüz hesaplama yöntemlerine, donanım alt yapısına ve gelecekteki kriptografi ve kripto-analizdeki ilerlemelere bakılarak yapılmaktadır. Özel anahtar için baktığımızda ise 160 bitten 240 bite kadar bir genişleyebilme özelliği bulunmaktadır[3,4].
Yapılan analizler gösteriyor ki eşit uzunluklu anahtar değerleri için RSA ve ElGamal şifreleme algoritmaları benzer güvenliğe sahiptir.
2. ELGAMAL ALGORİTMASI
ElGamal Sistemi farklı logaritmik problem üzerine dayandırılmış bir genel anahtarlama kripto sistemidir. Şifreleme ve sayısal imza algoritmalarından oluşur. Şifreleme algoritması temelde Diffie-Hellman anahtar protokolüne benzer.
Sistem parametreleri, bir asal sayı olan p ve modül p‘e göre elemanların sayısını veren g tamsayısından oluşur. Alıcı, bir özel anahtar olan a değerine ve bir genel anahtar olan y değerine sahiptir ve y=ga (mod p)’dir. Varsayalım ki gönderici bir m mesajını alıcıya göndermek istiyor. Gönderici öncelikle p’den küçük olmak şartıyla rasgele bir k sayısı üretir. Daha sonra (3) deki işlemi gerçekleştirerek y1 ve y2 değerlerini hesaplar[5,6].
y1 = gk (mod p) ve y2 = m xor yk (3)
Buradaki xor bit seviyesinde yapılan “özel veya” işlemini ifade etmektedir. Bu işlemden sonra gönderici (y1,y2) değer çiftini alıcıya gönderir. Şifrelenmiş mesajı alan alıcı, (4) deki işlemi gerçekleştirir.
m = (y1a mod p) xor y2 (4)
Bu hesaplamadan sonra orijinal metne ulaşmış olunur.
2.1. Uygulamadaki Şifreleme İşlemi
Bu temel şifreleme ve şifre çözme işlemlerinden sonra, bu uygulamada kullanılan adımları inceleyelim.
Şifrelenecek metni aldıktan sonra, ilk olarak metin bloklara ayrılır. Şifreleme işlemi daha sonra bu bloklar üzerine uygulanacak ve blok şifreleme sağlanacaktır. Blok boyutunu belirlemek, yani bloklarda yer alacak eleman sayısını bulmak için aşağıdaki hesaplama yapılır.
Blok=int(log(p)/log(strlen(alph))) (5)
(5)’deki alph uygulamada kullanılan alfabeyi ifade etmektedir. Bu uygulamada kullandığımız alfabe temel simgeleri içeren, 96 karakterden oluşan bir alfabedir. Strlen alfabenin kaç elemanlı olduğunu bulan fonksiyonu gösterir. P değeri de anahtarı ifade eder. P değerinin ve alfabedeki karakter sayısının logaritmalarının oranı, metnin kaç elemanlı bloklara ayrılacağını hesaplamaktadır. Alfabe boyutu küçüldükçe veya p değerinin boyutu büyüdükçe blokların boyutu büyümektedir. Bloklara ayırmanın faydası ise, bilindiği gibi iyi bir şifreleme algoritması şifrelenecek bir girdi verisine karşılık, bir şifrelenmiş çıktı verisi ve birde karakter üretir. Örneğin 1 karakter şifrelenirse, şifreleme sonucu 2 karakter üretilir. Bunun anlamı bloklar 1 elemanlı tutulursa, şifreleme sonucunda şifrelenmemiş mesajdaki karakter sayısının iki katı kadar karakterden oluşan bir şifrelenmiş mesaj elde edilir. Ancak bloklara ayrılırsa bu artış bir miktar azalmış olur. Örneğin, 40 karakterlik bir mesaj 5’erli bloklara ayrıldığında şifreleme sonucunda 48 karakterden oluşan bir şifreli mesaj elde edilir. Bloklara ayırma sayesinde bellek tasarrufu sağlanmış olur. Blok boyutunu arttırmanın dezavantajı ise algoritmanın daha basit hale getirilmesidir. Dolayısıyla bu uygulamada blok değerini 1 yapacak şekilde bir p değeri belirlendi.
Bu adımdan sonra karakterler birer birer taranmaya başlanır. İlk karakter alınır. k rasgele değeri belirlenir. Bu değer p değerinden küçük olacak şekilde düzeltilir. Alınan k, p ve g parametrelerine göre y1 değeri hesaplanır(3). Bulunan y1 değeri, alfabenin uzunluğuna göre modu alınarak küçültülür(6).
y1= y1 (mod strlen(alph)) (6)
cipher1=alph[y1] (7)
Alfabedeki y1 inci eleman cipher1 isimli bir diziye atanır(7). (Burada kullanılan i indisi, girilen metindeki kaçıncı karakterin şifrelendiğini gösteren indistir.) Bu dizi şifrelenmiş karakteri tutmaktadır. İlk alınan karakterin alfabedeki kaçıncı karaktere denk düştüğü bulunur. Buradan bir indis döndürülür. Alınan indis, k, p, ve y değerine göre y2 değeri hesaplanır(3). Yine benzer şekilde y2 değerinin de alfabenin uzunluğuna göre modu alınarak küçültülmesi sağlanır(8).
y2= y2 (mod strlen(alph)) (8)
Günümüz teknolojileri sürekli değişmekte ve gelişmektedir. Tüm bu teknolojik gelişmeler beraberinde bir çok sorunu da beraberinde getirmektedir. Internet uygulamaları günümüzde oldukça yaygınlaşmıştır. Bu uygulamaların en büyük sorunu ise güvenliktir. Hızla gelişen teknolojide güvenlik ile ilgili yeni mekanizmalar ve yöntemler geliştirilmeye çalışılmaktadır. Yazılım geliştiriciler, sürekli olarak yeni yöntemler denemek zorunda ve başarılı oldukları taktirde, bunları uygulamalarına yansıtmaktalar. Herkesin istediği, hızlı ve güvenli iletişim, 1970’lerde ilk kez Amerikan Savunma Bakanlığınca kullanılmaya başlanılan mesajlaşma, günümüzdeki yaygın adıyla e-mail oldukça yaygın olarak kullanılmaktadır. Günümüzde şirket içi yazışmalardan, uluslararası bir çok görüşmelere kadar bir çok işlem bu yolla yapılmaktadır. Zira gönderilen mesajın, her iki tarafta da yazılı bir kopyanın olması, dolayısıyla belgelenebilirliği çok önemli bir özelliktir. Bunun yanı sıra ucuz ve diğer hizmetlere göre çok daha hızlı, etkin olması da onu öne çıkaran diğer özellikleridir. Bu kadar üstün özellikleri ve kullanıldığı çevrelerin çokluğu ile popüler olan bu uygulamalar, doğal olarak kötü niyetli kişilerinde ilgisini fazlasıyla çekmektedir. Onlara karşı alınabilecek ilk önlem, sağlam bir şifreleme yapısı kullanmaktır. Günümüzde bilinen bir çok şifreleme algoritması mevcuttur ancak bunları aynı zamanda bu kötü niyetli kişiler de bilmekteler, yapılması gereken ise bu algoritmalardan yeni algoritmalar veya yeni yöntemler türetmektir. Bu yeni yöntem veya algoritmaları, gelişmiş programlama dilleri ile kodlayarak kullanıcı uyumlu yazılımlar geliştirmek güvenlik problemlerini bir miktar çözecektir.
Bu güvenlik algoritmalarını tasarlarken, kriptografi biliminden yararlanılmaktadır. Kriptografi, çeşitli şifreleme, anahtarlama ve çözme algoritmaları sunmaktadır. Bu çalışmada, veriler şifrelenirken, ElGamal Şifreleme algoritması kullanıldı. Programın çeşitli bölümlerinde gereken kimlik doğrulama işlemi ise özgün bir SHA (Secure Hashing Algoritm) algoritması ile sağlandı.
Öncelikle Kriptoloji literatüründe kullanılan temel kavramaları açıklayalım; Gönderici, bir mesajı gönderen, alıcı ise gönderilen mesajı alması beklenen kişidir. Şifreleme, bir mesajı doğrusal olmayan fonksiyonlar yardımıyla, okunduğunda gerçek anlamının çıkarılması çok zor hatta imkansız bir forma dönüştürme işlemidir. Şifrelenmiş bir metni, şifrelemek için kullanılan fonksiyonların, matematiksel ters fonksiyonları yardımıyla, ilk haline dönüştürme işlemine de ters şifreleme yada çözme adı verilir.
Göndericiden, alıcıya iletilmesi beklenen metni M ile, herhangi bir şifreleme algoritması yardımıyla şifrelenmiş metini Ş ile şifreleme fonksiyonunu da F ile ifade edecek olursak. Şifrelenmiş metnin uzunluğu genellikle, gönderilecek metnin uzunluğundan fazladır. Bu durumda, şifrelenmiş metinler, sıkıştırma algoritmaları yardımı ile uzunluk olarak küçültmeye çalışılır. Bu tanımlamalara göre şifreleme işleminin matematiksel modeli (1) deki gibi
F(M)=Ş (1) gösterilebilir. Şifrenin çözümlenmesi işlemi ise (2), F-1 fonksiyonu (F fonksiyonunun matematiksel tersini göstermektedir),
F-1(Ş)=M (2)
biçiminde ifade edilebilir. Ayrıca F-1 fonksiyonu ters şifreleme fonksiyonu olarak da adlandırılmaktadır.
Genel olarak, her şifreleme ve şifre çözme algoritması birbirinin ters fonksiyonları olmalıdır. Sağlam bir şifreleme yapısında asla doğrusal fonksiyonlar kullanılmamalıdır. Aksi taktirde, algoritmanın kötü niyetli kişilerce çözümlenme zamanı çok kısalmış olur.
Şifreleme bilimi çok uzun yıllar boyunca sadece askeri ve diplomatik haberleşmede kullanılmaktaydı. Bu algoritmaların kullanım alanları arttıkça, standart kurallara dönüştürülmeye başlandı. Bu çalışmada yararlandığımız ElGamal Şifreleme algoritması ise, bir genel-anahtar algoritması olarak 1985’de T. ElGamal tarafından tasarlandı. Günümüze kadar, ElGamal algoritmanın kullanıldığı bir sistem üzerine hiçbir başarılı saldırı bilinmemektedir. 1994’te bağımsız birkaç araştırma grubu, genel-anahtar, sayısal imza algoritmaları tabanlı tüm farklı logaritmaların, genelleştirilmiş “meta” algoritmanın farklı sonuçları olduğu bulgularını sundular. ElGamal’ın içerdiği bu farklı logaritmalar, onun oldukça güvenli olduğunun bir göstergesidir[1,2].
Bu tip yöntemler, genel anahtardan, özel anahtarın zor bulunması prensibine dayanır. Bu zorluk, genel-özel anahtar çiftinin uzunluğuna ve ayrıca bu anahtar çiftinin ne olduğunu tahmin için yapılacak hesaplamaların güçlüğüne bağlıdır.
ElGamal şifreleme algoritmasının anahtar uzunluğu 256 bitten, rasgele seçilmiş bir bit boyutuna kadar genişletilebilir. 1024 bitten 2048 bite kadar değer alabilen bir anahtar uzunluğu gelecek 20 yıl için güvenli olarak düşünülmektedir. Bu tahmin günümüz hesaplama yöntemlerine, donanım alt yapısına ve gelecekteki kriptografi ve kripto-analizdeki ilerlemelere bakılarak yapılmaktadır. Özel anahtar için baktığımızda ise 160 bitten 240 bite kadar bir genişleyebilme özelliği bulunmaktadır[3,4].
Yapılan analizler gösteriyor ki eşit uzunluklu anahtar değerleri için RSA ve ElGamal şifreleme algoritmaları benzer güvenliğe sahiptir.
2. ELGAMAL ALGORİTMASI
ElGamal Sistemi farklı logaritmik problem üzerine dayandırılmış bir genel anahtarlama kripto sistemidir. Şifreleme ve sayısal imza algoritmalarından oluşur. Şifreleme algoritması temelde Diffie-Hellman anahtar protokolüne benzer.
Sistem parametreleri, bir asal sayı olan p ve modül p‘e göre elemanların sayısını veren g tamsayısından oluşur. Alıcı, bir özel anahtar olan a değerine ve bir genel anahtar olan y değerine sahiptir ve y=ga (mod p)’dir. Varsayalım ki gönderici bir m mesajını alıcıya göndermek istiyor. Gönderici öncelikle p’den küçük olmak şartıyla rasgele bir k sayısı üretir. Daha sonra (3) deki işlemi gerçekleştirerek y1 ve y2 değerlerini hesaplar[5,6].
y1 = gk (mod p) ve y2 = m xor yk (3)
Buradaki xor bit seviyesinde yapılan “özel veya” işlemini ifade etmektedir. Bu işlemden sonra gönderici (y1,y2) değer çiftini alıcıya gönderir. Şifrelenmiş mesajı alan alıcı, (4) deki işlemi gerçekleştirir.
m = (y1a mod p) xor y2 (4)
Bu hesaplamadan sonra orijinal metne ulaşmış olunur.
2.1. Uygulamadaki Şifreleme İşlemi
Bu temel şifreleme ve şifre çözme işlemlerinden sonra, bu uygulamada kullanılan adımları inceleyelim.
Şifrelenecek metni aldıktan sonra, ilk olarak metin bloklara ayrılır. Şifreleme işlemi daha sonra bu bloklar üzerine uygulanacak ve blok şifreleme sağlanacaktır. Blok boyutunu belirlemek, yani bloklarda yer alacak eleman sayısını bulmak için aşağıdaki hesaplama yapılır.
Blok=int(log(p)/log(strlen(alph))) (5)
(5)’deki alph uygulamada kullanılan alfabeyi ifade etmektedir. Bu uygulamada kullandığımız alfabe temel simgeleri içeren, 96 karakterden oluşan bir alfabedir. Strlen alfabenin kaç elemanlı olduğunu bulan fonksiyonu gösterir. P değeri de anahtarı ifade eder. P değerinin ve alfabedeki karakter sayısının logaritmalarının oranı, metnin kaç elemanlı bloklara ayrılacağını hesaplamaktadır. Alfabe boyutu küçüldükçe veya p değerinin boyutu büyüdükçe blokların boyutu büyümektedir. Bloklara ayırmanın faydası ise, bilindiği gibi iyi bir şifreleme algoritması şifrelenecek bir girdi verisine karşılık, bir şifrelenmiş çıktı verisi ve birde karakter üretir. Örneğin 1 karakter şifrelenirse, şifreleme sonucu 2 karakter üretilir. Bunun anlamı bloklar 1 elemanlı tutulursa, şifreleme sonucunda şifrelenmemiş mesajdaki karakter sayısının iki katı kadar karakterden oluşan bir şifrelenmiş mesaj elde edilir. Ancak bloklara ayrılırsa bu artış bir miktar azalmış olur. Örneğin, 40 karakterlik bir mesaj 5’erli bloklara ayrıldığında şifreleme sonucunda 48 karakterden oluşan bir şifreli mesaj elde edilir. Bloklara ayırma sayesinde bellek tasarrufu sağlanmış olur. Blok boyutunu arttırmanın dezavantajı ise algoritmanın daha basit hale getirilmesidir. Dolayısıyla bu uygulamada blok değerini 1 yapacak şekilde bir p değeri belirlendi.
Bu adımdan sonra karakterler birer birer taranmaya başlanır. İlk karakter alınır. k rasgele değeri belirlenir. Bu değer p değerinden küçük olacak şekilde düzeltilir. Alınan k, p ve g parametrelerine göre y1 değeri hesaplanır(3). Bulunan y1 değeri, alfabenin uzunluğuna göre modu alınarak küçültülür(6).
y1= y1 (mod strlen(alph)) (6)
cipher1=alph[y1] (7)
Alfabedeki y1 inci eleman cipher1 isimli bir diziye atanır(7). (Burada kullanılan i indisi, girilen metindeki kaçıncı karakterin şifrelendiğini gösteren indistir.) Bu dizi şifrelenmiş karakteri tutmaktadır. İlk alınan karakterin alfabedeki kaçıncı karaktere denk düştüğü bulunur. Buradan bir indis döndürülür. Alınan indis, k, p, ve y değerine göre y2 değeri hesaplanır(3). Yine benzer şekilde y2 değerinin de alfabenin uzunluğuna göre modu alınarak küçültülmesi sağlanır(8).
y2= y2 (mod strlen(alph)) (8)