elgamal sıfreleme

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ş “****” 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)

cipher2=alph[y2] (9)

Alfabedeki y2 inci eleman da cipher2 isimli bir diziye atanır(9). Bu dizide şifrelenmiş karaktere bir anahtar görevi gören ikincil şifreleme anahtarlarını tutmaktadır. Bu işlemler bittikten sonra, cipher1 ve cipher2 dizilerinde tutulan veriler; şifreli metni tutması beklenen cipher isimli dizide birleştirilirler(10).

cipher=cipher1+cipher2 (10)

Tüm karakterlerin taranması tamamlandığında, cipher dizisi şifrelenmiş metni tutmaktadır.

2.2. Uygulamadaki Şifre Çözme İşlemi
Bu algoritma, yetkili kullanıcılar kayıt edilirken kullanılmaktadır. Kullanıcı, programa önceden kayıt edilmemişse uygulamayı kullanamamaktadır. Bu kayıt girişinde kullanıcı, bir şifre girer. Bu şifre doğrudan veri tabanına kaydedilmez. Bu şifre, hash fonksiyonları ile geri dönüşümü olmayan başka bir veri haline dönüştürülerek veri tabanına kaydedilir. Bu yöntemle veri tabanına erişen kötü niyetli kişilerin bu şifreleri ele geçirmeleri zorlaştırılmıştır. Bu uygulamada kullanılan hash fonksiyonu ise şu şekildedir. Girilen şifre, ilk karakteri 0 indisine sahip olacak şekilde her karaktere indis verilerek alınır. Karakterleri sahip oldukları indis değeri 2’nin kuvveti olarak alınarak, karakterlerin ASCII değerleri ile çarpılır. Elde edilen tüm sonuçlar toplanır. Çıkan sayı eğer rasgele alınan bir epsilon değerinden büyükse, sayı ortadan ikiye bölünerek, diğer parçanın üzerine toplanır. Bu işlem, alınan epsilon değerinden küçük oluncaya kadar tekrar edilir.

Örneğin, girilecek şifre, “mustafa” olsun. Şifrenin küçük harflerden oluştuğu görülmektedir. Bilindiği gibi küçük harflerin ve büyük harflerin ASCII kodları farklıdır. Böylece daha sonraki zamanlarda programa giriş yapmak istersek, bu şekilde şifrenin girilmesi gerekmektedir. “Mustafa” bu şekilde yazıldığında anlam olarak aynı olmasına rağmen farklı ASCII kodlara sahip bir hash değeri hesaplanacağından sistem bu şifreyi kabul etmeyecektir. Girilen şifredeki karakterler indislere ayrılır, m karakteri 0 indisine, u 1, s 2, t 3, a 4, f 5, ve a karakteri de 6 indisine sahiptir. Şimdi bu karakterlerin ASCII karşılıklarına bakalım. m:109, u:117, s:115, t:116, a:97 ve f=102 ASCII koduna sahiptir. Şimdi aşağıdaki hesaplama sonucunda,

109*20+117*21+115*22+116*23+97*24+102*25+97*26

12755 değeri ortaya çıkmaktadır. Epsilon değerinin ise 1000 olarak seçildiğini farz edelim. Hesapladığımız değer epsilon değerinden daha büyük olduğu için değer ortadan ayrılarak üzerine toplanacaktır. Sayı sağ-önemli (right-most) olarak ikiye ayrılır. Yani sayıda tek rakam varsa, sağ tarafta, sol tarafa göre 1 adet fazla rakam kalacak şekilde ayırma işlemi gerçekleştirilir. Örneğimize bakarsak, 12755 sayısı, beş adet rakam içermektedir. Dolayısıyla sağ-önemli olarak ikiye ayrılırsa; soldan ilk iki rakam bir sayıyı, sağdan son üç rakam ise diğer bir sayıyı oluşturacaktır. 12 ve 755 sayıları gibi. Sonra bu iki sayı toplanacak. 12+755=767 çıkan sonuç epsilon değerinden küçük olduğu için işlem burada sonlandırılır. Artık şifre veri tabanına yazılırken bu yeni veriden yararlanılmaktadır. Kullanıcı programa giriş yapmaya çalıştığında, o alıştığı gibi şifresini yazacak ve “tamam” düğmesine bastığında, yazılan şifre alınıp yukarıdaki işlemler gerçekleştirilecektir. Program son haline getirdiğinde, veri tabanında o kullanıcıya ait olan şifre değeri okunacak eğer bu iki değer tutuyorsa, kullanıcıya programa erişim hakkı verilecektir.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.