Yer tutucu resmi

Teknik Özellikler

C#,Windows Application,N-Layer Mimari

Genel bakış

Proje 3 senaryodan oluşmaktadır. Genel olarak RSA Algoritmasının sektöre yönelik kullanımlarını araştırarak senaryoları bu şekilde şifre sıfırlama, E-imza ve Rsa algoritmasına ek olarak Vigenere Algoritması baz alınarak oluşturulmuştur.

Program ile İlgili Genel Görseller ve Çalışma Örnekleri

AnaSayfa:

word image 4

Email Link Senaryosu:

Öncelikle anahtar uzunluğu belirlenir görselde 512 bit seçildi daha sonra “Anahtar Oluştur” butonuna basılır ve public private olmak üzere 2 adet metin textleri program tarafından doldurulur

Daha sonra ise şifrenilecek metin “Mesaj” kutucuğuna girilir ve “şifrele” butonuna basılır daha sonra şifrelenmiş mesaj (Encrypt) kutucuğu program tarafından doldurulur. Doldurulan metin kopyalanır ve sağdaki “Şifrelenmiş Mesaj” ( Decrypt) kutucuğuna yazılır. Şifreyi çözmek için de “Metni çöz” butonuna basılır.

word image 5

Alice’in Mesajı(E-imza) Senaryosu:

İlk olarak 2 adet asal sayı kullanıcı tarafından girilir eğer kullanıcı girmek istemez ise “Random Üret” butonuna basılır daha sonra ise “Anahtar Oluştur” butonuna basılır ve public private kutucuklarında belli sayılar ile program tarafından doldurulur.

Şifrelenecek mesaj “Mesaj” kutucuğuna yazılır ve “Şifrele” butonuna basılır daha sonra “Encrypt” bölümündeki “Şifrelenecek Metin” kutucuğu program tarafından doldurulur. Doldurulan metin kopyalanır ve sağdaki (Decrypt) “Şifrelenmiş Mesaj” kutucuğuna yazılır. ”Metni Çöz” butonuna basılır.

word image 6

Vigeenire Chipher Senaryosu:

“Anahtar Kutucuğu”na bir metin girilir.Daha sonra mesaj kısmına kullanıcı tarafından şifrenilecek mesaj girilir.”Şifrele” butonuna basılır ve “Şifreli Mesaj” (Encrypt) Kutucuğu dolu bir şekilde gelir. Bu kutucuktaki mesaj kopyalanıp sağ taraftaki “şifreli mesaj” (Decrypt) kutucuğuna yapıştırılır “Metni Çöz ” butonuna basılarak mesaj elde edilir.

word image 7

RSA Algoritması

Bir şifreleme yöntemi olan RSA, 1977 yılında Ron Rives, Adi Shamir ve Leonard Aldeman tarafından bulunmuştur. Şifreleme yönteminin adı da bu üç kişinin soy isimlerinin baş harflerinden oluşur.

Çalışması:

  1. Yeterince büyük iki adet asal sayı seçilir: Bu sayılar p ve q olsun
  2. n=pq hesaplanır. Buradaki n sayısı iki asal sayının çarpımıdır ve hem umumî hem de hususî şifreler için taban (modulus) olarak kabul eder.
  3. Totient fonksiyonu hesaplanır. Bu örnek için çarpanların ikisi de asal sayı olduğu için φ(n) = (p-1)(q-1) olarak bulunur.
  4. Hesaplanan Totient fonksiyonu değeri (φ(n) ) ile aralarında asal olan öyle bir e sayısı alınır ki 1 < e < φ(n) olmalıdır. Bu seçilen e sayısı umumî anahtar olarak ilan edilebilir.
  5. d gibi bir sayı hesaplanır ki bu sayı için şu denklik geçerli olmalıdır .de ≡ 1 mod ( φ(n) ). Bu d değeri hususî şifre olarak saklanır. Bu sayının hesaplanması sırasında uzatılmış öklid algoritmasından faydalanılır.

Yukarıdaki şifreleme yönteminin en önemli dez avantajlarından birisi büyük asal sayılar bulmak aşamasında ortaya çıkar. Bilindiği üzere ele alınan bir sayının asal olup olmadığını bulmak kolay bir işlem değildir. Bu işlemin zorluğunu projeyi kodlarken daha büyük asal sayıları üretmede programın kitlendiğini görerek ne kadar zor bir işlem olduğunu daha net anladım.

Şifreleme işlemi:

Şifreleme işlemi için Alice kendi umumî şifresi olan (n,e) ikilisini yayınlar. Bu şifreyi alan Bob aşağıdaki şekilde mesajını şifreler:

c = me mod n

Burada m, şifrelenecek olan açık metin, e ve n ise Alice tarafından yayınlanan umumî şifredir.

Şifrenin Açılması:

Alice, Bob tarafından yollanmış olan mesajın açılması sırasında aşağıdaki formülü kullanır:

m = cd mod n

Burada açılacak olan şifrelenmiş metin c, Alice’in hususî şifresi ise d ile gösterilmiştir. n ise taban değeri olan modulus’tur.

Örnek:

  • İki asal sayı seçilir

p = 61 ve q = 53

  • n değeri hesaplanır n = pq şeklinde

n = 61 * 53 = 3233

Totient fonksiyonu hesaplanır

φ(n) = (p-1)(q-1)

φ(n) = (61-1)(53-1) = 3120

  • Totient fonksiyonu sonucu ile aralarında asal olan ve 1 den büyük bir sayı seçilir

e > 1 => e = 17 (3120 ile aralarında asal) , bu sayı aynı zamanda umumî şifredir.

  • Hususî şifre olması için bir d sayısı seçilir:

de ≡ 1 mod(n) olacak şekilde d sayısı bulunur , d = 2753 (çünkü 17 * 2753 = 46801 = 1 + 15 * 3120 ) Bu sayının hesaplanması sırasında öklit yönetimi kullanılmıştır.

  • Örneğin mesaj olarak 123 gönderilecek olsun:

12317 mod 3233 = 855 olarak şifreli metin bulunur.

  • açacak taraf için tersi işlem uygulanır:

8552753 mod 3233 = 123 şeklinde orjinal mesaj geri elde edilir.

E-Mail Senaryosu

Bu Senaryonun temel amacı bilgisayarımda yapamadığım çok büyük private ve public keyleri üreten asal sayıları windowsun servisleri sayesinde yapabildim. Buranın Kodları ve algoritması E İmza senaryosu ile aynı olduğu için (Rsa Algoritması) sunumu kısa tutmak amaçlı açıklamıyorum.

  1. Buradaki senaryoda public ve private keyleri windowsun hazırladığı RSACryptoServiceProvider servici ile üretiyoruz.
  2. Anahtaların 512 bit,1024 bit vs. seçenekleri ile anahtarların boyutunu kullanıcı belirliyor.

word image 8

  1. Üretilen Public ve Private Keyler ile Encrypt( şifrelemek) için gerekli mesaj girilir.Girilen Mesaj Sonrasında Şifreli bir metin oluşur.Bu metini private key olmadan kimse açamaz.
  2. Decryption(Şifre Çözme) Bu kısımda şifrelenmiş metin girilir ve private key ile çözümü gerçekleştirilir.
  3. Public ve Private keyleri windowsun servislerinden xml olarak alıyorum ve bunu kendi programım ile kullanıcının okuyacağı string veri tipine çeviriyorum.

word image 9

İlk olarak şifreleme işleminde public key ve şifrelenecek metini bir fonksiyona gönderiyorum daha sonra kod yorum kısımlarında açıkladığım üzere bu metni şifreleyip kullanıcıya veriyorum.

word image 10

Decrypt işleminde ise aynı şekilde bitleri kaydırarak servise gönderiyorum ve metnin çözülmüş halini elde ediyorum.

word image 11

E-Imza Senaryosu (Alice’nin Mesajı)

word image 12

1.RSA Algoritmasındaki gibi 2 adet asal sayı belirlenir.Programda Random Üret Butonu ile program kendi asal sayılarını üretebilir.Buradaki Kodu açıklamam gerekirse.

word image 13

Random olarak min ve max değerleri belli olan bir sayı üretiyorum.

word image 14

Yukarıdaki kod da iki sayı değer dönecek şekilde tasarlanmış random üretilen sayıları asal olana kadar rangelerini arttırp yenilerini üretiyor. asal olup olmadığını check obeb fonksiyonu ile kontrol ediyorum.Bu fonksiyonun koduda aşağıdaki görselde yer almaktadır.

word image 15

Daha sonra rsa algoritmasındaki aşamaları tek tek uygulayarak public ve private keylerimi elde ediyorum.Aşağıdaki görselde d ve e alanları oluşturduğum rsa key manager adlı entity den gelen p ve q sayıları ile bulunur. D sayısı publickey E sayısı private key dir.

word image 16

Şifreleme kısmında ise karakterlerin ascii değerlerini buluyorum fakat şifreleme için girilen metin cok uzun olursa bunu bilgisayarımla hesaplamak çok fazla uzun sürüyor.Bende çözüm olarak her karakteri rsa algoritması ile şifreledim.

word image 17

Koddan kısaca bahsetmek gerekirse encrypt fonksiyonuna bir mesaj değeri gelir.Bu mesajı ascii tablosundaki değerlere göre çevirerek.charactersAsNumbers adlı array dizisine çeviriyorum ve daha sonra bunu encrypter fonksiyonuna gönderiyorum..Burada karakterin şifrelenmesi için gereken rsa algoritması ndan gelen (mesaj üssü publickey mod (asal1*asal2) )işlemi uygulanır ve bu işlem her karakter için yapılır.Buradaki Biginteger veri tipini kullanmamın sebebi çok büyük sayıların üssünü alırken ve bunların modunu alırken verileri bozmuyor.int ve daha uzun olan int32 veri tiplerinde boyutları gereği veriler bozuluyor doğru sonuç alamıyorum.

word image 18

Buradaki Descryter işlemin de aynı şekilde bir mesaj gelir bu mesajı biginteger listesine dönüştürürüz daha sonra( msg üssü d(public key) mod n(Asal1*Asal2)) işlemine tabi tutarız. ve dönen değerin ascii karşılığını bularak kullanıcıya bilgi veriyorum.

 

Vigenere Cipher Senaryosu

 

Vigenere şifresinde anahtar, bir kelime veya cümledir. Vigenere şifrelemenin algoritmik ifadesi, şifrelenecek mesajın(plain-text) modüler eklenmesi ve anahtar kelimenin tekrarıdır. Şifreli mesajı çözme mantığı da benzerdir, şifreli mesajın (cipher-text) ve anahtar kelimenin (key)modüler çıkarılmasıdır.

Şifre bulunduktan yaklaşık 200 sene sonra (1854) Charles Babbage Vigenere şifreli mesajı çözme yöntemini bulmuştur. Şifrenin güvenlik açığı, bloklama yapmak için anahtarın tekrar etmesidir. Dolayısıyla uzun bir mesajda bir kelime birden fazla kez tekrar ediliyorsa şifreli metindeki aynı kelimelerinin bloğu, anahtarın o anki boyutuyla eşit ise aynı biçimde (aynı alfabelerle aynı kelimeleri) şifreleyecektir. Kelimenin tekrarından anahtarın boyu tahmin edilebilir. Dolayısıyla anahtarın uzunluğu bilindiğinde şifreyi kırmak kolaylaşacaktır.

Aşamalar

İlk olarak ‘VIGENERE ’ kelimesini ‘KEY’ anahtar sözcüğü ile şifreleme işlemi (encrypt) şu şekilde yapılmaktadır.

Şifrelenecek mesaj (plain-text) -> VIGENERE (8 harf)

Anahtar (key) -> KEY

Yeni anahtar(8 harfli) -> KEYKEYKE

Dipnot:Buradaki harf sırası yazdığım kodda belli bir algoritmaya dayanarak ascii rakamlarından oluşmaktadır.Detaylı bilgiyi kodumu anlatırken açıklayacağım.

Şifrelenecek mesajın harf sıraları -> 22 9 7 5 14 5 18 5

Anahtarın harf sıraları -> 11 5 25 11 5 25 11 5

Mesaj + anahtar -> 22 09 07 05 14 05 18 05

11 05 25 11 05 25 11 05

+____________________

33 14 32 16 19 30 29 10

%26 -> 7 14 6 16 19 4 3 10

Mesaj ve anahtarları toplayarak şifreli mesajımı 26 sayısı ile modunu alarak elde ettim.Kodda temsili olarak mod 127 kullanılmıştır.

Şifreli mesaj (cipher-text) -> G N F P S D C J

Şifreli mesajı açmak (decrypt) ise aşağıdaki şekilde yapılabilmektedir. ‘GNFPSDCJ’ şifreli mesajını ‘KEY’ anahtar sözcüğü ile çözme işlemi.

Şifreli mesaj (cipher-text) -> G N F P S D C J (8 harf)

Anahtar (key) -> KEY

Yeni anahtar (8 harfli) -> KEYKEYKE

Şifreli mesajın harf sıraları -> 7 14 6 16 19 4 3 10

Anahtarın harf sıraları -> 11 5 25 11 5 25 11 5

Şifreli mesaj – anahtar -> 07 14 06 16 19 04 03 10

11 05 25 11 05 25 11 05

-____________________

-4 9 -19 5 14 -21 -8 5

oluşan metni şifreleme kısmında ne ile modunu aldıysak burada şifreli mesaja ekleyip modunu alıyoruz.

+26 -> 22 35 7 31 40 5 18 31

%26 -> 22 9 7 5 14 5 18 5

Orijinal mesaj -> V I G E N E R E

Yazdığım programa dönecek olursam;

word image 19

İlk başta kullanıcının gözüne çarpması için bir key anahtar değerini almak için textbox oluşturdum.Bu anahtar yukarıda bahsettiğim üzere şifrelenecek ve şifrenilen metni çözmek için gerekli .

word image 20

Mesajın şifrelemek için kendim oluşturduğum Viegener Cipher adlı service method mu kullanıyorum bu servise key ve şifrenilecek mesajı veriyorum.

word image 21

Yukarıdaki görselde gelen değer ile anahtar uzunluğunu kullanarak bir block listesi oluşturuyorum.

Daha sonra oluşan liste içindeki her itemi kullanıcıya vermek için döneceğim değer ile topluyorum.

word image 22

şifreyi çözme aşamasında ise

word image 23

daha sonra dönen değerleri string dönüştürüp kullanıcıya veriyorum.

 

By