25 Nisan 2014 Cuma

Kriptoloji Nedir?

  

    Blogda her zaman  ödev paylaşıyorum fakat artık biraz araştırma ve bilgi verme vakti geldi :)
 Bu yazımda kriptolojiden ve çeşitlerinden, hayatımızdaki öneminden bahsedeceğim.

 Şifreler, onlar her yerde!
-Günümüzde neredeyse her şey şifreleme ve çözme işlemine bağlı. İş dünyasının vazgeçilmezi olan mail hesaplarınız, sosyal hayatta olmazsa olmazlardan sosyal ağ hesaplarınız, bütün mali işlemlerinizi yaptığınız banka hesaplarınız, telefonun kilit ekranı ve bunun gibi birçok şeyleri şifre kullanarak güvene alıyorsunuz. Bunların hepsi kriptografi ve kriptoanaliz sayesinde oluyor. Çünkü siz bilmeseniz bile kullandığınız bu şifreler kriptografi sayesinde tekrar şifrelenerek saklanırlar. Örneğin en basitinden kayıt olduğunuz forum siteleri bile parolanızı şifreleyerek veri tabanında saklar, siz parolanızı girdiğinizde ise şifrelenmiş parola çözülerek sizin parolanızla karşılaştırır.

Biraz tanım yapalım;
 Kriptoloji, kriptografi ve kriptoanalizi içeren matematik bilimidir ve sayılar teorisi üzerine kuruludur. Bilgiyi şifreleme ve şifrelenmiş bilgiyi çözme işlemlerini inceler ve geliştirir.
Özetlersek;  kriptoloji=kriptografi+kriptoanaliz   diyebiliriz.

Kriptografi: Yunanca kelimeler olan kriptos(gizli) ve graphi(yazı) kelimelerinden türemiştir. Kriptografi anlaşılacağı üzere bir metinin şifrelenmesini sağlar. Kriptografi bilgiyi güvene alır, böylece bir bilgiyi kriptografi sayesinde bir yerden bir yere rahatlıkla taşıyabiliriz.

Kriptoanaliz: Kriptografinin karşıtı işlemler yaparak şifrelenmiş bilgiyi eski haline getirir.

İnsanlar tarih boyunca bilgileri gizlemeyi ve bir yerden bir yere güvenle göndermeyi istemişler ve bunun için yollar bulmuşlar, kimileri çok kolay kimileri ise çok karışık. Bu şifreleme algoritmaları aslında üç çeşitte incelenir.
1) Simetrik Şifreleme:
Bu algoritma çeşidinde şifreleme işlemi  ve şifre çözme işlemi için sadece gizli anahtar kullanılır. Gizli anahtar olduğu için sadece konuşan kişiler bilmelidir. Gönderilecek gizli bilgi ile beraber gizli anahtar da alıcıya gönderilir ve şifre çözme işlemi gerçekleştirilir.


İyi Yönleri;
  • Algoritmalar olabildiğince hızlıdır.
  • Donanımla birlikte kullanılabilir.
  • Güvenlidir.
Kötü Yönleri;
  • Güvenli anahtar dağıtımı zordur.
  • Kapasite sorunu vardır.
  • Kimlik doğrulama ve bütünlük ilkeleri hizmetlerini güvenli bir şekilde gerçekleştirmek zordur.
DES, AES, BlowFish en bilinen çeşitleridir.

2) Asimetrik Şifreleme
 Simetrik şifrelemedeki anahtar dağıtımı büyük sıkıntı oluşturur, bilginin güvenliği tehlikededir bu yüzden asimetrik şifrelemeye ihtiyaç duyulmuş.
Mantığı ise şu şekilde;
1) Açık ve gizli anahtarlar belirlenir. Bunların arasında matematiksel ilişki olmalı fakat açık anahtardan gizli anahtarı bulmak mümkün olmamalı.
2) Açık anahtarlar herkese verilir fakat gizli anahtarlar sadece alıcıya verilir. Böylece herkes bilgisini şifreleyebilir fakat her şifreli bilgiyi okuyamaz.


Şimdi de bir tane simetrik bir tane de asimetrik şifreleme algoritma örneği verelim;

1) Sezar Şifrelemesi:  En eski, en bilindik ve en kolay kırılabilen bir şifreleme algoritması. Mantığı ise şöyle;
  Alfabedeki her bir harf kendisinden üç harf sonra gelen harfe tekabül eder.  Örneğin, d harfi g harfine, k harfi n harfine denk gelir.
 Şu da yazdığım bir sezar şifreleme uygulaması;


 2) RSA Şifreleme
 Günümüzde en çok kullanılan asimetrik şifreleme algoritmasıdır. Adı, algoritmayı oluşturan kişilerin soyadlarından gelmektedir. (Ron Rivest, Adi Shamir ve Leonard Adleman)
Çalışma şekli ise şöyle; Sistemin yöneticisi 2 tane anahtar belirler, bunlardan biri açık anahtar(public key) diğeri ise gizli anahtar(secret key) daha sonra ise açık anahtarı herkese duyurur. Bu şekilde birçok kişi bilgiyi aynı şekilde şifreleyerek kişiye yollayabilir. Gizli anahtar ise sadece alıcı kişinin bileceği bir biçimde alıcıda durur.

Teorik olarak açıklarsak;
1) Gönderici iki tane çok büyük asal sayı alır. Bu sayılar p ve q olsun ve bunları çarparak bir n sayısı elde eder.
2)  k=(p-1).(q-1) denklemini elde eder.
3) Daha sonra k sayısından küçük ve k ile ortak böleni olmayan bir  b  sayısı elde eder.
4)   a = b^-1 (mod k)  yaparak a sayısını bulur. Bu a sayısı gizli anahtardır. Bu sayı sadece mesajı okuması istenilen kişiye verilmelidir.
5) n ve b herkese açık anahtar olarak duyurulur. Böylece istenilen sayı sadece n ve b kullanılarak şifrelenir. Şifreleme ise gönderilecek bilginin sayısal karşılığının b inci kuvveti alınıp mod n e göre karşılığı bulunur. Bu karşılık şifrelenmiş bilgidir.
6) Alıcı kişi şifreli bilgiyi çözmek için gelen şifreli sayının  üzeri a sını  mod b ye göre alırsa bilgiye ulaşmış olur.

(Daha fazla bilgi için: http://www.bilgiguvenligi.gov.tr/gizlilik/rsa-algoritmasi.html)










24 Nisan 2014 Perşembe

2.Dönem 3.Ödev

Bu ödevde 6 tane sınıfımız var. Fakat bizi ilgilendiren kısım iki sınıf.
Letter Sınıfı;
public class Letter implements Summable, Comparable {

 String ltr;
 public Letter(String ltr) {
  super();
  this.ltr = ltr;
 }
 @Override
     public int compareTo(Object obj) {
        if(obj instanceof Letter){
  String x= this.ltr; //Karşılaştırılacak karakteri tutuyoruz.
         String k=((Letter) obj).ltr; //Verilen karakteri tutuyoruz.
   int a=0, b=0;
  //Karakterleri Alphabet sınıfındaki static alphabet stringini kullanarak
  //sırasını belirliyoruz.
    for(int i=0;i<Alphabet.alphabet.length();i++)
    {
       char z=Alphabet.alphabet.charAt(i);
       if(x.equals(z+"")) a=i;
       if(k.equals(z+"")) b=i;
     }
  if(a>b) return -1; //Verilen karakter daha önce geliyorsa.
         else if(a==b) return 0; //Eşitse
  else return 1; //Verilen karakter daha sonra geliyorsa
   }
  else return -2; //Verilen parametre Letter objesi değilse
   }

 @Override
 public Object sum(Object obj) {
          if (obj instanceof Letter) {
    return this.ltr+((Letter) obj).ltr;
  } else

  return null;
 }

    public Object sortedSum(Object obj) {
       int a=0, b=0;
       String x= this.ltr;
       String k=((Letter) obj).ltr;
   for(int i=0;i<Alphabet.alphabet.length();i++)
     {
       char z=Alphabet.alphabet.charAt(i);
       if(x.equals(z+"")) a=i;
       if(k.equals(z+"")) b=i;
   }
   if(this.ltr.equals(((Letter)obj).ltr)) return this.ltr;
               else if(a<b) return x+k;
        else if(a==b) return x;
        else return k+x;
  }
}
Number Sınıfı;

public class Number implements Summable, Comparable {
 
 Integer nmb;

 // Don't change
 public Number(Integer nmb) {
  super();
  this.nmb = nmb;
 }
 @Override
 public int compareTo(Object obj) {
  if(obj instanceof Number){
    int x=((Number)obj).nmb; 
    int y= this.nmb; 
           if(x<y) return -1;
   else if(x==y) return 0;
   else return 1;
  }
  else return -2;
 }
      @Override
 public Object sum(Object obj) {
  if(obj instanceof Number)
   {
    return ((Number)obj).nmb+this.nmb; 
          }
 else return null;
 }
}
Ödevin tamamına ise; buradan ulaşabilirsiniz

5 Nisan 2014 Cumartesi

2.Dönem 2.Ödev

Bu ödev anlaşılması zor olan ödevdi. Ödev aslında kolay fakat ne isteniyor ve nasıl yapılması istendiği net anlaşılmıyor. Bu yüzden biraz açıklama gereği duyuyorum.
Öncelikle elimizde 5 tane sınıf var ve bunların bazıları birbirleriyle bağlantılı. Şimdi bunlardan en önemli ikisini açıklayalım.
* Chain sınıfı ArrayListin bulunduğu sınıf, listeye ekleme ve çıkarılma işlemleri bu sınıfta yapılıyor.
* Symbol sınıfı ise ArrayListte tutulan veri tipi sınıfı. Bu sınıftaki en önemli şey value objesi. Bütün atamalar bu objeye yapılıyor.
Test sınıfında bizden istenilen şeyler var ve bu istenilenleri yapmak için gönderilen her stringin her bir karakterini teker teker incelememiz gerekiyor. Yapılması diğerlerine göre daha zor olan iki metod var, bunlardan birisi bu;
İkincisi ise;
Ödevin tamamına ise    buradan  ulaşabilirsiniz.